🎨 format all documents
This commit is contained in:
parent
c4659e99e8
commit
ff0e493b67
6
.vscode/settings.json
vendored
6
.vscode/settings.json
vendored
@ -4,6 +4,9 @@
|
||||
"[typescript]": {
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||
},
|
||||
"[typescriptreact]": {
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||
},
|
||||
"[json]": {
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||
},
|
||||
@ -13,6 +16,9 @@
|
||||
"[javascript]": {
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||
},
|
||||
"[scss]": {
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||
},
|
||||
"terminal.integrated.env.linux": {
|
||||
"PATH": "${env:HOME}/elrondsdk/vendor-rust/bin:${env:HOME}/elrondsdk/erdpy-venv/bin:${env:HOME}/elrondsdk/vmtools:${env:HOME}/elrondsdk/nodejs/latest/bin:${env:PATH}",
|
||||
"VIRTUAL_ENV": "${env:HOME}/elrondsdk/erdpy-venv",
|
||||
|
24
package-lock.json
generated
24
package-lock.json
generated
@ -42,7 +42,8 @@
|
||||
"@types/react": "^18.0.27",
|
||||
"@types/react-dom": "^18.0.10",
|
||||
"@types/uuid": "^9.0.0",
|
||||
"nodemon": "^2.0.20"
|
||||
"nodemon": "^2.0.20",
|
||||
"prettier": "2.8.4"
|
||||
}
|
||||
},
|
||||
"node_modules/@cspotcode/source-map-support": {
|
||||
@ -1439,6 +1440,21 @@
|
||||
"node": "^10 || ^12 || >=14"
|
||||
}
|
||||
},
|
||||
"node_modules/prettier": {
|
||||
"version": "2.8.4",
|
||||
"resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.4.tgz",
|
||||
"integrity": "sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==",
|
||||
"dev": true,
|
||||
"bin": {
|
||||
"prettier": "bin-prettier.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10.13.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/prettier/prettier?sponsor=1"
|
||||
}
|
||||
},
|
||||
"node_modules/prisma": {
|
||||
"version": "4.9.0",
|
||||
"resolved": "https://registry.npmjs.org/prisma/-/prisma-4.9.0.tgz",
|
||||
@ -3437,6 +3453,12 @@
|
||||
"source-map-js": "^1.0.2"
|
||||
}
|
||||
},
|
||||
"prettier": {
|
||||
"version": "2.8.4",
|
||||
"resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.4.tgz",
|
||||
"integrity": "sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==",
|
||||
"dev": true
|
||||
},
|
||||
"prisma": {
|
||||
"version": "4.9.0",
|
||||
"resolved": "https://registry.npmjs.org/prisma/-/prisma-4.9.0.tgz",
|
||||
|
@ -74,7 +74,8 @@
|
||||
"@types/react": "^18.0.27",
|
||||
"@types/react-dom": "^18.0.10",
|
||||
"@types/uuid": "^9.0.0",
|
||||
"nodemon": "^2.0.20"
|
||||
"nodemon": "^2.0.20",
|
||||
"prettier": "2.8.4"
|
||||
},
|
||||
"prisma": {
|
||||
"schema": "src/common/databases/schema.prisma"
|
||||
|
@ -7,7 +7,7 @@ module.exports = {
|
||||
useTabs: true,
|
||||
singleQuote: false,
|
||||
trailingComma: "all",
|
||||
printWidth: 240,
|
||||
printWidth: 140,
|
||||
semi: true,
|
||||
bracketSameLine: true,
|
||||
},
|
||||
|
@ -61,4 +61,3 @@ export default class ProjectController extends ApiController {
|
||||
this.httpCreated(res, await this.projectService.create(projectEntity));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -4,5 +4,5 @@ import ProjectController from "./ProjectController";
|
||||
export default {
|
||||
start: () => {
|
||||
Container.get(ProjectController);
|
||||
}
|
||||
}
|
||||
},
|
||||
};
|
||||
|
@ -10,7 +10,7 @@ export default function errorHandler(error: any, req: Request, response: Respons
|
||||
if (error instanceof SyntaxError && errorStatus === 400 && "body" in error) {
|
||||
response.status(HttpCodes.BAD_REQUEST).send({
|
||||
body: error["body"],
|
||||
type: error as any ["type"],
|
||||
type: error as any["type"],
|
||||
});
|
||||
return;
|
||||
}
|
||||
@ -22,4 +22,3 @@ export default function errorHandler(error: any, req: Request, response: Respons
|
||||
|
||||
next(error);
|
||||
}
|
||||
|
||||
|
@ -26,4 +26,3 @@ export default class TezosLink {
|
||||
return name;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -64,7 +64,7 @@ export default class MetricRepository {
|
||||
const data = { ...metricEntity };
|
||||
const result: MetricEntity[] = [];
|
||||
|
||||
this.instanceDb.$transaction(async(transaction: Prisma.TransactionClient) => {
|
||||
this.instanceDb.$transaction(async (transaction: Prisma.TransactionClient) => {
|
||||
for (const item of data) {
|
||||
if (!item) continue;
|
||||
result.push(
|
||||
@ -187,4 +187,3 @@ export default class MetricRepository {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -31,7 +31,6 @@ export default class ProjectRepository {
|
||||
_count: {
|
||||
select: { Metrics: true },
|
||||
},
|
||||
|
||||
},
|
||||
});
|
||||
} catch (error) {
|
||||
@ -59,4 +58,3 @@ export default class ProjectRepository {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -5,22 +5,22 @@ export default class MetricEntity {
|
||||
@IsNotEmpty()
|
||||
public id!: number;
|
||||
|
||||
@IsNotEmpty(({groups: ["create"]}))
|
||||
@IsNotEmpty({ groups: ["create"] })
|
||||
public path!: string;
|
||||
|
||||
@IsNotEmpty(({groups: ["create"]}))
|
||||
@IsNotEmpty({ groups: ["create"] })
|
||||
public uuid!: string;
|
||||
|
||||
@IsNotEmpty(({groups: ["create"]}))
|
||||
@IsNotEmpty({ groups: ["create"] })
|
||||
public remote_address!: string;
|
||||
|
||||
@IsNotEmpty(({groups: ["create"]}))
|
||||
@IsNotEmpty({ groups: ["create"] })
|
||||
public date_requested!: Date;
|
||||
|
||||
@IsNotEmpty(({groups: ["create"]}))
|
||||
@IsNotEmpty({ groups: ["create"] })
|
||||
public projectId!: number;
|
||||
|
||||
@IsNotEmpty(({groups: ["create"]}))
|
||||
@IsNotEmpty({ groups: ["create"] })
|
||||
public project!: ProjectEntity;
|
||||
|
||||
@IsDate()
|
||||
|
@ -5,7 +5,7 @@ export default class ProjectEntity {
|
||||
@IsNotEmpty()
|
||||
public id!: number;
|
||||
|
||||
@IsNotEmpty({groups: ["create"]})
|
||||
@IsNotEmpty({ groups: ["create"] })
|
||||
public title!: string;
|
||||
|
||||
@IsNotEmpty()
|
||||
@ -17,7 +17,7 @@ export default class ProjectEntity {
|
||||
@IsDate()
|
||||
public updatedAt!: Date;
|
||||
|
||||
@IsNotEmpty({groups: ["create"]})
|
||||
@IsNotEmpty({ groups: ["create"] })
|
||||
public network!: string;
|
||||
|
||||
@IsOptional()
|
||||
|
@ -1,4 +1,4 @@
|
||||
import ProjectEntity from "./ProjectEntity";
|
||||
import MetricEntity from "./MetricEntity";
|
||||
|
||||
export { ProjectEntity, MetricEntity};
|
||||
export { ProjectEntity, MetricEntity };
|
||||
|
@ -1,2 +1 @@
|
||||
export default class BaseService {}
|
||||
|
||||
|
@ -40,7 +40,7 @@ export default class MetricService {
|
||||
* @returns
|
||||
*/
|
||||
public async getCountRpcPath(metricEntity: Partial<MetricEntity>, from: Date, to: Date) {
|
||||
const pathsCount = await this.metricRepository.countRpcPathUsage(metricEntity.projectId!,from,to);
|
||||
const pathsCount = await this.metricRepository.countRpcPathUsage(metricEntity.projectId!, from, to);
|
||||
if (!pathsCount) return null;
|
||||
return pathsCount;
|
||||
}
|
||||
@ -60,8 +60,8 @@ export default class MetricService {
|
||||
* @throws {Error} If metric is undefined
|
||||
* @returns
|
||||
*/
|
||||
public async getLastMetrics(metricEntity: Partial<MetricEntity>, limit: number){
|
||||
const lastMetric = await this.metricRepository.findLastRequests(metricEntity.projectId!,limit);
|
||||
public async getLastMetrics(metricEntity: Partial<MetricEntity>, limit: number) {
|
||||
const lastMetric = await this.metricRepository.findLastRequests(metricEntity.projectId!, limit);
|
||||
return ObjectHydrate.hydrate<Partial<MetricEntity>>(new MetricEntity(), lastMetric);
|
||||
}
|
||||
|
||||
@ -70,8 +70,8 @@ export default class MetricService {
|
||||
* @throws {Error} If metric is undefined
|
||||
* @returns
|
||||
*/
|
||||
public async getRequestsByDay(metricEntity: Partial<MetricEntity>, from: Date, to: Date){
|
||||
const requestByDay = await this.metricRepository.findRequestsByDay(metricEntity.projectId!,from,to);
|
||||
public async getRequestsByDay(metricEntity: Partial<MetricEntity>, from: Date, to: Date) {
|
||||
const requestByDay = await this.metricRepository.findRequestsByDay(metricEntity.projectId!, from, to);
|
||||
return ObjectHydrate.hydrate<Partial<MetricEntity>>(new MetricEntity(), requestByDay);
|
||||
}
|
||||
|
||||
@ -85,4 +85,3 @@ export default class MetricService {
|
||||
await this.metricRepository.removeOldMetricsBymonths(months);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -4,8 +4,6 @@ import { ProjectEntity } from "@Common/ressources";
|
||||
import { type processFindManyQuery } from "prisma-query";
|
||||
import { Service } from "typedi";
|
||||
|
||||
|
||||
|
||||
@Service()
|
||||
export default class ProjectService {
|
||||
constructor(private projectRepository: ProjectRepository) {}
|
||||
@ -36,4 +34,3 @@ export default class ProjectService {
|
||||
return ObjectHydrate.hydrate<Partial<ProjectEntity>>(new ProjectEntity(), project);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -31,4 +31,3 @@ export default class ExpressServer implements ServerInterface {
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -14,4 +14,3 @@ export default interface ServerInterface {
|
||||
|
||||
init(config: IConfig): this;
|
||||
}
|
||||
|
||||
|
@ -6,4 +6,3 @@ import HttpCodes from "@Common/system/controller-pattern/HttpCodes";
|
||||
export default abstract class ApiController extends BaseController {}
|
||||
|
||||
export { HttpCodes as ResponseStatusCodes };
|
||||
|
||||
|
@ -2,10 +2,8 @@ import { StRoute } from "./StRoute";
|
||||
import { Response } from "express";
|
||||
import HttpCodes from "@Common/system/controller-pattern/HttpCodes";
|
||||
|
||||
|
||||
type IResponseData = {} | string | number | boolean | null | unknown;
|
||||
|
||||
|
||||
export default abstract class BaseController {
|
||||
public expressRoutes!: StRoute[];
|
||||
public httpCode: typeof HttpCodes = HttpCodes;
|
||||
|
@ -34,4 +34,3 @@ function createRoute(controller: any, route: StRoute) {
|
||||
}
|
||||
|
||||
export default Controller;
|
||||
|
||||
|
@ -12,4 +12,3 @@ export default class ErrorCatch {
|
||||
next(args[args.length - 1] ?? "Unknown Error");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,7 +1,12 @@
|
||||
import BaseController from "./BaseController";
|
||||
import { StRoute } from "./StRoute";
|
||||
|
||||
function MethodsAny(type: StRoute["type"], path: string, frontMiddlewares: StRoute["frontMiddlewares"] = [], backMiddlewares: StRoute["backMiddlewares"] = []) {
|
||||
function MethodsAny(
|
||||
type: StRoute["type"],
|
||||
path: string,
|
||||
frontMiddlewares: StRoute["frontMiddlewares"] = [],
|
||||
backMiddlewares: StRoute["backMiddlewares"] = [],
|
||||
) {
|
||||
return (target: any, memberName: string, propertyDescriptor: PropertyDescriptor) => {
|
||||
const func = propertyDescriptor.value;
|
||||
const constructor: typeof BaseController = target.constructor;
|
||||
@ -29,4 +34,3 @@ export const Delete = MethodsAny.bind(null, "delete");
|
||||
* @description Decorator Method PUT
|
||||
*/
|
||||
export const Put = MethodsAny.bind(null, "put");
|
||||
|
||||
|
@ -7,4 +7,3 @@ export interface StRoute {
|
||||
frontMiddlewares: ((requests: Request, response: Response, next: NextFunction) => void)[];
|
||||
backMiddlewares: ((requests: Request, response: Response, next: NextFunction) => void)[];
|
||||
}
|
||||
|
||||
|
@ -13,12 +13,11 @@ export default class DbProvider {
|
||||
},
|
||||
});
|
||||
|
||||
constructor(protected config: IDatabaseConfig) {
|
||||
}
|
||||
constructor(protected config: IDatabaseConfig) {}
|
||||
|
||||
public async connect(): Promise<void> {
|
||||
await this.client.$connect();
|
||||
console.info(`⚡️[Prisma]: Connected to ${this.config.name}`);// A Logger middleware is to be added here
|
||||
console.info(`⚡️[Prisma]: Connected to ${this.config.name}`); // A Logger middleware is to be added here
|
||||
}
|
||||
|
||||
public getClient() {
|
||||
|
@ -22,15 +22,8 @@ Container.get(ExpressServer).init({
|
||||
label,
|
||||
port: parseInt(port),
|
||||
rootUrl,
|
||||
middlwares: [
|
||||
cors({ origin: "*" }),
|
||||
bodyParser.urlencoded({ extended: true }),
|
||||
bodyParser.json(),
|
||||
],
|
||||
middlwares: [cors({ origin: "*" }), bodyParser.urlencoded({ extended: true }), bodyParser.json()],
|
||||
errorHandler,
|
||||
});
|
||||
|
||||
routes.start();
|
||||
|
||||
|
||||
|
||||
|
@ -15,7 +15,7 @@ if (!rootUrl) throw new Error(`process.env RootUrl is undefined`);
|
||||
|
||||
Container.get(NextServer).init({
|
||||
label,
|
||||
isDev: process.env.NODE_ENV !== 'production',
|
||||
isDev: process.env.NODE_ENV !== "production",
|
||||
port: parseInt(port),
|
||||
rootUrl,
|
||||
});
|
@ -1,13 +1,16 @@
|
||||
|
||||
export enum ContentType {
|
||||
JSON = "application/json",
|
||||
FORM_DATA = "multipart/form-data;",
|
||||
}
|
||||
|
||||
|
||||
export default abstract class BaseApiService {
|
||||
protected readonly backUrl = process.env["NEXT_PUBLIC_API_HOSTNAME"] + ':' + process.env['NEXT_PUBLIC_API_PORT'] + process.env['NEXT_PUBLIC_API_ROOT_URL'];
|
||||
protected readonly proxyUrl = process.env["NEXT_PUBLIC_RPC_GATEWAY_HOSTNAME"] + ':' + process.env['NEXT_PUBLIC_RPC_GATEWAY_PORT'] + process.env['NEXT_PUBLIC_RPC_GATEWAY_ROOT_URL'];
|
||||
protected readonly backUrl =
|
||||
process.env["NEXT_PUBLIC_API_HOSTNAME"] + ":" + process.env["NEXT_PUBLIC_API_PORT"] + process.env["NEXT_PUBLIC_API_ROOT_URL"];
|
||||
protected readonly proxyUrl =
|
||||
process.env["NEXT_PUBLIC_RPC_GATEWAY_HOSTNAME"] +
|
||||
":" +
|
||||
process.env["NEXT_PUBLIC_RPC_GATEWAY_PORT"] +
|
||||
process.env["NEXT_PUBLIC_RPC_GATEWAY_ROOT_URL"];
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
||||
protected constructor() {}
|
||||
@ -114,7 +117,6 @@ export default abstract class BaseApiService {
|
||||
protected onError(error: unknown) {
|
||||
console.error(error);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export interface IResponse {
|
||||
|
@ -1,15 +1,15 @@
|
||||
import BaseApiService from "src/front/Api/BaseApiService"
|
||||
import { IProject } from "src/front/interfaces"
|
||||
import BaseApiService from "src/front/Api/BaseApiService";
|
||||
import { IProject } from "src/front/interfaces";
|
||||
import { Service } from "typedi";
|
||||
|
||||
type IPostProject = {
|
||||
title: string,
|
||||
network: string
|
||||
}
|
||||
title: string;
|
||||
network: string;
|
||||
};
|
||||
@Service()
|
||||
export default class Project extends BaseApiService {
|
||||
private static instance: Project;
|
||||
private readonly baseURl = this.backUrl.concat('/projects');
|
||||
private readonly baseURl = this.backUrl.concat("/projects");
|
||||
|
||||
private constructor() {
|
||||
super();
|
||||
@ -34,7 +34,7 @@ export default class Project extends BaseApiService {
|
||||
}
|
||||
|
||||
public async getOneProject(uuid: string): Promise<IProject> {
|
||||
const url = new URL(this.baseURl.concat('/').concat(uuid));
|
||||
const url = new URL(this.baseURl.concat("/").concat(uuid));
|
||||
try {
|
||||
return await this.getRequest<IProject>(url);
|
||||
} catch (err) {
|
||||
|
@ -36,12 +36,7 @@ export default class Button extends React.Component<IProps, IState> {
|
||||
// let icon = this.props.isloading === "true" ? <Loader /> : this.props.icon; // Notion de loader
|
||||
let icon = this.props.icon;
|
||||
return (
|
||||
<button
|
||||
{...attributes}
|
||||
onClick={this.props.onClick}
|
||||
className={classes["root"]}
|
||||
type={this.props.type}
|
||||
>
|
||||
<button {...attributes} onClick={this.props.onClick} className={classes["root"]} type={this.props.type}>
|
||||
{this.props.children}
|
||||
{this.props.icon && icon}
|
||||
</button>
|
||||
|
@ -35,5 +35,4 @@
|
||||
.tooltip {
|
||||
margin-left: 16px;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -17,12 +17,9 @@ export default class CheckBox extends React.Component<IProps> {
|
||||
return (
|
||||
<Typography typo={ITypo.P_ERR_16} color={ITypoColor.BLACK}>
|
||||
<label className={classes["root"]}>
|
||||
<input
|
||||
type="checkbox"
|
||||
name={this.props.name}
|
||||
/>
|
||||
<input type="checkbox" name={this.props.name} />
|
||||
{this.props.name}
|
||||
{this.props.toolTip && <Tooltip className={classes["tooltip"]} text={this.props.toolTip}/>}
|
||||
{this.props.toolTip && <Tooltip className={classes["tooltip"]} text={this.props.toolTip} />}
|
||||
</label>
|
||||
</Typography>
|
||||
);
|
||||
|
@ -25,7 +25,7 @@ export type INewBasefieldProps = {
|
||||
export type IProps = IValidationTypes & React.InputHTMLAttributes<HTMLInputElement> & INewBasefieldProps;
|
||||
|
||||
type IState = {
|
||||
value?: string | number | readonly string[] ;
|
||||
value?: string | number | readonly string[];
|
||||
errors: IError[];
|
||||
};
|
||||
|
||||
|
@ -43,7 +43,9 @@ export default class InputField extends BaseField<IProps> {
|
||||
value={value}
|
||||
onChange={this.onChange}
|
||||
data-has-validation-errors={this.state.errors.length > 0}
|
||||
className={this.props.className ? [classes["textarea"], classes[this.props.className]].join(" ") : classes["textarea"]}
|
||||
className={
|
||||
this.props.className ? [classes["textarea"], classes[this.props.className]].join(" ") : classes["textarea"]
|
||||
}
|
||||
/>
|
||||
<div className={classes["fake-placeholder"]}>{this.props.fakeplaceholder}</div>
|
||||
</div>
|
||||
@ -61,7 +63,9 @@ export default class InputField extends BaseField<IProps> {
|
||||
onBlur={this.onBlur}
|
||||
value={value}
|
||||
data-has-validation-errors={this.state.errors.length > 0}
|
||||
className={this.props.className ? [classes["input"], classes[this.props.className]].join(" ") : classes["input"]}
|
||||
className={
|
||||
this.props.className ? [classes["input"], classes[this.props.className]].join(" ") : classes["input"]
|
||||
}
|
||||
/>
|
||||
<div className={classes["fake-placeholder"]}>{this.props.fakeplaceholder}</div>
|
||||
</div>
|
||||
|
@ -8,10 +8,10 @@
|
||||
height: 83px;
|
||||
padding: 10px 16px;
|
||||
|
||||
.content{
|
||||
.content {
|
||||
margin: auto;
|
||||
}
|
||||
.underline{
|
||||
.underline {
|
||||
width: 100%;
|
||||
height: 3px;
|
||||
background-color: $black;
|
||||
|
@ -4,7 +4,7 @@ import Link from "next/link";
|
||||
import Typography, { ITypo } from "../../Typography";
|
||||
import classNames from "classnames";
|
||||
import router from "next/router";
|
||||
import { useEffect, useState } from 'react'
|
||||
import { useEffect, useState } from "react";
|
||||
|
||||
type IPropsClass = {
|
||||
text: string | JSX.Element;
|
||||
@ -16,21 +16,20 @@ type IStateClass = {};
|
||||
|
||||
class HeaderLinkClass extends React.Component<IPropsClass, IStateClass> {
|
||||
public override render(): JSX.Element {
|
||||
return <Link href={this.props.path ?? ""} className={classNames(classes["root"], this.props.isActive && [classes["active"]])}
|
||||
>
|
||||
return (
|
||||
<Link href={this.props.path ?? ""} className={classNames(classes["root"], this.props.isActive && [classes["active"]])}>
|
||||
<div className={classes["content"]}>
|
||||
<Typography typo={ITypo.NAV_HEADER_18}>
|
||||
{this.props.text}
|
||||
</Typography>
|
||||
<Typography typo={ITypo.NAV_HEADER_18}>{this.props.text}</Typography>
|
||||
</div>
|
||||
{this.props.isActive && <div className={classes["underline"]} />}
|
||||
</Link>;
|
||||
</Link>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export default function HeaderLink(props: IPropsClass) {
|
||||
const [url, setUrl] = useState("")
|
||||
useEffect(() => setUrl(router?.asPath), [])
|
||||
const [url, setUrl] = useState("");
|
||||
useEffect(() => setUrl(router?.asPath), []);
|
||||
const isActive = url === props.path;
|
||||
return <HeaderLinkClass {...props} isActive={isActive} />;
|
||||
}
|
||||
|
@ -7,12 +7,14 @@ type IState = {};
|
||||
|
||||
export default class Navigation extends React.Component<IProps, IState> {
|
||||
public override render(): JSX.Element {
|
||||
return <div className={classes["root"]}>
|
||||
return (
|
||||
<div className={classes["root"]}>
|
||||
<HeaderLink text={"Home"} path={"/"} />
|
||||
<HeaderLink text={"Design system"} path={"/design-system"} />
|
||||
<HeaderLink text={"Ancrage"} path={""} />
|
||||
<HeaderLink text={"Collaborateurs"} path={""} />
|
||||
<HeaderLink text={"Paramétrage des listes de pièces"} path={""} />
|
||||
</div>;
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -10,24 +10,24 @@
|
||||
padding: 24px;
|
||||
position: absolute;
|
||||
top: 107px;
|
||||
right:56px;
|
||||
right: 56px;
|
||||
|
||||
.notification-header{
|
||||
.notification-header {
|
||||
width: 100%;
|
||||
display: inline-flex;
|
||||
justify-content: space-between;
|
||||
.close-icon{
|
||||
.close-icon {
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
.notification-body{
|
||||
.notification-body {
|
||||
margin-top: 24px;
|
||||
overflow: hidden;
|
||||
overflow-y: auto;
|
||||
}
|
||||
}
|
||||
|
||||
.background{
|
||||
.background {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
|
@ -15,7 +15,7 @@ type IState = {
|
||||
};
|
||||
|
||||
export default class NotificationModal extends React.Component<IProps, IState> {
|
||||
private removeOnToastChange: () => void = () => { };
|
||||
private removeOnToastChange: () => void = () => {};
|
||||
|
||||
constructor(props: IProps) {
|
||||
super(props);
|
||||
@ -27,30 +27,31 @@ export default class NotificationModal extends React.Component<IProps, IState> {
|
||||
|
||||
public override render(): JSX.Element | null {
|
||||
if (!this.props.isOpen) return null;
|
||||
return <>
|
||||
<div className={classes["background"]} onClick={this.props.closeModal}/>
|
||||
return (
|
||||
<>
|
||||
<div className={classes["background"]} onClick={this.props.closeModal} />
|
||||
<div className={classes["root"]}>
|
||||
<div className={classes["notification-header"]}>
|
||||
<Typography typo={ITypo.P_16}>
|
||||
Notifications
|
||||
</Typography>
|
||||
<Typography typo={ITypo.P_16}>Notifications</Typography>
|
||||
<div className={classes["close-icon"]} onClick={this.props.closeModal}>
|
||||
<Image src={CloseIcon} alt="Close notification modal" className={classes["close-icon"]}></Image>
|
||||
</div>
|
||||
</div>;
|
||||
|
||||
</div>
|
||||
;
|
||||
<div className={classes["notification-body"]}>
|
||||
<>
|
||||
{Toasts.getInstance().toasts.length === 0
|
||||
?
|
||||
{Toasts.getInstance().toasts.length === 0 ? (
|
||||
<div>
|
||||
<Typography typo={ITypo.P_16}>No notification yet</Typography>
|
||||
</div>
|
||||
: <ToastHandler />}
|
||||
) : (
|
||||
<ToastHandler />
|
||||
)}
|
||||
</>
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
public override componentDidMount() {
|
||||
|
@ -1,15 +1,15 @@
|
||||
@import "@Themes/constants.scss";
|
||||
|
||||
.root {
|
||||
.icon-container{
|
||||
.icon-container {
|
||||
position: relative;
|
||||
cursor: pointer;
|
||||
|
||||
.notification-icon{
|
||||
.notification-icon {
|
||||
height: 24px;
|
||||
width: 24px;
|
||||
}
|
||||
.notification-dot{
|
||||
.notification-dot {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
|
@ -14,7 +14,7 @@ type IState = {
|
||||
};
|
||||
|
||||
export default class Notifications extends React.Component<IProps, IState> {
|
||||
private removeOnToastChange: () => void = () => { };
|
||||
private removeOnToastChange: () => void = () => {};
|
||||
|
||||
constructor(props: IProps) {
|
||||
super(props);
|
||||
@ -26,20 +26,21 @@ export default class Notifications extends React.Component<IProps, IState> {
|
||||
this.openModal = this.openModal.bind(this);
|
||||
this.closeModal = this.closeModal.bind(this);
|
||||
this.handleToastChange = this.handleToastChange.bind(this);
|
||||
|
||||
}
|
||||
|
||||
public override render(): JSX.Element {
|
||||
return <div className={classes["root"]}>
|
||||
return (
|
||||
<div className={classes["root"]}>
|
||||
<div className={classes["icon-container"]} onClick={this.openModal}>
|
||||
<Image alt="notifications" src={NotificationIcon} className={classes["notification-icon"]} />
|
||||
{this.state.hasNotifications &&
|
||||
{this.state.hasNotifications && (
|
||||
<Image className={classes["notification-dot"]} src={InfoIcon} alt="Unread notification" />
|
||||
}
|
||||
)}
|
||||
</div>
|
||||
|
||||
{this.state.isModalOpen && <NotificationModal isOpen={this.state.isModalOpen} closeModal={this.closeModal} />}
|
||||
</div>;
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
public override componentDidMount() {
|
||||
@ -53,15 +54,15 @@ export default class Notifications extends React.Component<IProps, IState> {
|
||||
private handleToastChange(toastList: IToast[] | null) {
|
||||
this.setState({
|
||||
toastList,
|
||||
hasNotifications: toastList ? toastList.length > 0 : false
|
||||
hasNotifications: toastList ? toastList.length > 0 : false,
|
||||
});
|
||||
}
|
||||
|
||||
private openModal() {
|
||||
this.setState({ isModalOpen: true });
|
||||
};
|
||||
}
|
||||
|
||||
private closeModal() {
|
||||
this.setState({ isModalOpen: false });
|
||||
};
|
||||
}
|
||||
}
|
@ -6,7 +6,7 @@
|
||||
width: fit-content;
|
||||
margin: auto;
|
||||
|
||||
.content{
|
||||
.content {
|
||||
align-content: center;
|
||||
}
|
||||
}
|
@ -1,7 +1,7 @@
|
||||
@import "@Themes/constants.scss";
|
||||
|
||||
.root {
|
||||
.profile-icon{
|
||||
.profile-icon {
|
||||
cursor: pointer;
|
||||
height: 24px;
|
||||
width: 24px;
|
||||
|
@ -10,7 +10,6 @@ type IState = {
|
||||
};
|
||||
|
||||
export default class Profile extends React.Component<IProps, IState> {
|
||||
|
||||
constructor(props: IProps) {
|
||||
super(props);
|
||||
this.state = {
|
||||
@ -18,21 +17,22 @@ export default class Profile extends React.Component<IProps, IState> {
|
||||
};
|
||||
this.openModal = this.openModal.bind(this);
|
||||
this.closeModal = this.closeModal.bind(this);
|
||||
|
||||
}
|
||||
|
||||
public override render(): JSX.Element {
|
||||
return <div className={classes["root"]}>
|
||||
return (
|
||||
<div className={classes["root"]}>
|
||||
<Image alt="profile" src={ProfileIcon} className={classes["profile-icon"]} onClick={this.openModal} />
|
||||
{this.state.isModalOpen && <ProfileModal isOpen={this.state.isModalOpen} closeModal={this.closeModal} />}
|
||||
</div>;
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
private openModal() {
|
||||
this.setState({ isModalOpen: true });
|
||||
};
|
||||
}
|
||||
|
||||
private closeModal() {
|
||||
this.setState({ isModalOpen: false });
|
||||
};
|
||||
}
|
||||
}
|
||||
|
@ -19,7 +19,7 @@
|
||||
|
||||
.right-section {
|
||||
display: inline-flex;
|
||||
>:first-child{
|
||||
> :first-child {
|
||||
margin-right: 32px;
|
||||
}
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
import React from "react";
|
||||
import classes from "./classes.module.scss";
|
||||
import Image from "next/image";
|
||||
import LogoIcon from "@Assets/logo.svg"
|
||||
import LogoIcon from "@Assets/logo.svg";
|
||||
import Link from "next/link";
|
||||
import Navigation from "./Navigation";
|
||||
import Notifications from "./Notifications";
|
||||
@ -12,7 +12,8 @@ type IState = {};
|
||||
|
||||
export default class Header extends React.Component<IProps, IState> {
|
||||
public override render(): JSX.Element {
|
||||
return <div className={classes["root"]}>
|
||||
return (
|
||||
<div className={classes["root"]}>
|
||||
<div className={classes["logo-container"]}>
|
||||
<Link href="/">
|
||||
<Image src={LogoIcon} alt="logo" className={classes["logo"]} />
|
||||
@ -20,9 +21,10 @@ export default class Header extends React.Component<IProps, IState> {
|
||||
</div>
|
||||
<Navigation />
|
||||
<div className={classes["right-section"]}>
|
||||
<Notifications/>
|
||||
<Notifications />
|
||||
<Profile />
|
||||
</div>
|
||||
</div>;
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -8,7 +8,7 @@ interface IProps {
|
||||
|
||||
export default class Loader extends React.Component<IProps> {
|
||||
public override render(): JSX.Element {
|
||||
return <img src={LoaderIcon} className={[classes["loader"], this.props.className].filter(Boolean).join(" ")} />
|
||||
return <img src={LoaderIcon} className={[classes["loader"], this.props.className].filter(Boolean).join(" ")} />;
|
||||
// <LoaderIcon className={[classes["loader"], this.props.className].filter(Boolean).join(" ")} />;
|
||||
}
|
||||
}
|
||||
|
@ -1,10 +1,10 @@
|
||||
@import "Themes/constants.scss";
|
||||
|
||||
.sub-container{
|
||||
.sub-container {
|
||||
padding: 40px;
|
||||
}
|
||||
|
||||
.button-container{
|
||||
.button-container {
|
||||
display: flex;
|
||||
justify-content:flex-start;
|
||||
justify-content: flex-start;
|
||||
}
|
||||
|
@ -49,10 +49,7 @@ export default class Confirm extends Modal<IProps, IState> {
|
||||
</Button>
|
||||
)}
|
||||
|
||||
<Button
|
||||
variant={EButtonVariant.PRIMARY}
|
||||
onClick={this.props.onAccept}
|
||||
disabled={this.props.isConfirmButtonDisabled}>
|
||||
<Button variant={EButtonVariant.PRIMARY} onClick={this.props.onAccept} disabled={this.props.isConfirmButtonDisabled}>
|
||||
{this.props.confirmText}
|
||||
</Button>
|
||||
</div>
|
||||
|
@ -10,4 +10,3 @@
|
||||
color: var(--color-neutral-900);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -10,9 +10,7 @@ export default class Header extends React.Component<IProps> {
|
||||
public override render(): JSX.Element {
|
||||
return (
|
||||
<header className={classes["root"]}>
|
||||
<Typography typo={ITypo.H2}>
|
||||
{this.props.content}
|
||||
</Typography>
|
||||
<Typography typo={ITypo.H2}>{this.props.content}</Typography>
|
||||
</header>
|
||||
);
|
||||
}
|
||||
|
@ -13,9 +13,7 @@ export default class PopUpLoader extends React.Component<IProps> {
|
||||
<div className={classes["root"]}>
|
||||
{/* <Loader /> */}
|
||||
TODO: INTEGRER LOARDER ISLOADING
|
||||
<Typography typo={ITypo.P_16}>
|
||||
{this.props.text && this.props.text}
|
||||
</Typography>
|
||||
<Typography typo={ITypo.P_16}>{this.props.text && this.props.text}</Typography>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
@ -5,7 +5,7 @@ import Header from "./Elements/Header";
|
||||
|
||||
import Loader from "./Elements/Loader";
|
||||
import Typography, { ITypo } from "../Typography";
|
||||
import CrossIcon from "@Assets/icons/cross.svg"
|
||||
import CrossIcon from "@Assets/icons/cross.svg";
|
||||
import Image from "next/image";
|
||||
|
||||
export type IModalProps = {
|
||||
@ -45,17 +45,15 @@ export default class Modal<P extends IModalProps, S extends IState = IState> ext
|
||||
className={[classes["container"], this.props.hasTransparentBackground && classes["transparant-background"]].join(" ")}
|
||||
onClick={this.props.hasContainerClosable && this.close}>
|
||||
{this.props.closeBtn && (
|
||||
<div className={classes["cross"]} >
|
||||
<Image alt="Unplugged" src={CrossIcon} className={classes["close-icon"]} onClick={this.close}/>
|
||||
<div className={classes["cross"]}>
|
||||
<Image alt="Unplugged" src={CrossIcon} className={classes["close-icon"]} onClick={this.close} />
|
||||
</div>
|
||||
)}
|
||||
<div className={classes["sub-container"]}>
|
||||
{this.props.header && <Header content={this.props.header} />}
|
||||
|
||||
<Typography typo={ITypo.P_16}>
|
||||
<>
|
||||
{this.props.children ? this.props.children : <Loader text={this.props.textLoader} />}
|
||||
</>
|
||||
<>{this.props.children ? this.props.children : <Loader text={this.props.textLoader} />}</>
|
||||
</Typography>
|
||||
{this.props.children && this.props.footer && <Footer content={this.props.footer} />}
|
||||
</div>
|
||||
|
@ -35,5 +35,5 @@
|
||||
|
||||
.tooltip {
|
||||
margin-left: 16px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -4,23 +4,19 @@ import Typography, { ITypo, ITypoColor } from "../Typography";
|
||||
import classes from "./classes.module.scss";
|
||||
|
||||
type IProps = {
|
||||
children: React.ReactNode;
|
||||
children: React.ReactNode;
|
||||
name: string;
|
||||
toolTip?: string;
|
||||
};
|
||||
|
||||
export default class RadioBox extends React.Component<IProps> {
|
||||
|
||||
public override render(): JSX.Element {
|
||||
return (
|
||||
<Typography typo={ITypo.P_ERR_16} color={ITypoColor.BLACK}>
|
||||
<label className={classes["root"]}>
|
||||
<input
|
||||
type="radio"
|
||||
name={this.props.name}
|
||||
/>
|
||||
<input type="radio" name={this.props.name} />
|
||||
{this.props.children}
|
||||
{this.props.toolTip && <Tooltip className={classes["tooltip"]} text={this.props.toolTip}/>}
|
||||
{this.props.toolTip && <Tooltip className={classes["tooltip"]} text={this.props.toolTip} />}
|
||||
</label>
|
||||
</Typography>
|
||||
);
|
||||
|
@ -62,11 +62,7 @@ export default class ToastElement extends React.Component<IProps, IState> {
|
||||
|
||||
private getToastTitle(title: string | React.ReactNode) {
|
||||
if (typeof title === "string") {
|
||||
return (
|
||||
<Typography typo={ITypo.P_16}>
|
||||
{title}
|
||||
</Typography>
|
||||
);
|
||||
return <Typography typo={ITypo.P_16}>{title}</Typography>;
|
||||
}
|
||||
return title;
|
||||
}
|
||||
|
@ -9,7 +9,7 @@ type IState = {
|
||||
toastList: IToast[];
|
||||
};
|
||||
export default class ToastsContainer extends React.Component<IProps, IState> {
|
||||
private removeOnChange = () => { };
|
||||
private removeOnChange = () => {};
|
||||
|
||||
public constructor(props: IProps) {
|
||||
super(props);
|
||||
|
@ -6,8 +6,6 @@ type IState = {};
|
||||
|
||||
export default class ToastHandler extends React.Component<IProps, IState> {
|
||||
public override render(): JSX.Element {
|
||||
return (
|
||||
<ToastsContainer />
|
||||
);
|
||||
return <ToastsContainer />;
|
||||
}
|
||||
}
|
||||
|
@ -40,7 +40,7 @@ export default class Tooltip extends React.Component<IProps, IState> {
|
||||
onMouseEnter={this.togglePopup}
|
||||
onMouseLeave={this.togglePopup}
|
||||
onMouseMove={this.moovePopup}>
|
||||
<Image src={ToolTipIcon} alt="toolTip icon"/>
|
||||
<Image src={ToolTipIcon} alt="toolTip icon" />
|
||||
</span>
|
||||
<Typography typo={ITypo.CAPTION_14}>
|
||||
<TooltipContent title={this.props.title} event={this.state.event} display={this.state.showContent}>
|
||||
|
@ -3,7 +3,7 @@
|
||||
|
||||
.root {
|
||||
color: $black;
|
||||
font-family: 'Inter', sans-serif;
|
||||
font-family: "Inter", sans-serif;
|
||||
&.H1-60 {
|
||||
font-style: normal;
|
||||
font-weight: 500;
|
||||
@ -93,7 +93,7 @@
|
||||
font-weight: 400;
|
||||
font-size: 16px;
|
||||
line-height: 22px;
|
||||
letter-spacing: 0.005em
|
||||
letter-spacing: 0.005em;
|
||||
}
|
||||
|
||||
&.Paragraphe-16-error {
|
||||
|
@ -32,19 +32,13 @@ export enum ITypo {
|
||||
export enum ITypoColor {
|
||||
RE_HOVER = "re-hover",
|
||||
GREY = "grey",
|
||||
BLACK = 'black'
|
||||
BLACK = "black",
|
||||
}
|
||||
|
||||
export default class Typography extends React.Component<IProps, IState> {
|
||||
public override render(): JSX.Element {
|
||||
return (
|
||||
<div
|
||||
className={classNames(
|
||||
classes["root"],
|
||||
classes[this.props.typo],
|
||||
classes[this.props.color ?? ""]
|
||||
)}
|
||||
>
|
||||
<div className={classNames(classes["root"], classes[this.props.typo], classes[this.props.color ?? ""])}>
|
||||
{this.props.children}
|
||||
</div>
|
||||
);
|
||||
|
@ -8,12 +8,12 @@ type IState = {};
|
||||
|
||||
export default class Version extends React.Component<IProps, IState> {
|
||||
public override render(): JSX.Element {
|
||||
return <div className={classes["root"]}>
|
||||
return (
|
||||
<div className={classes["root"]}>
|
||||
<Typography typo={ITypo.P_16} color={ITypoColor.GREY}>
|
||||
<div>
|
||||
{VersionFile.version}
|
||||
</div>
|
||||
<div>{VersionFile.version}</div>
|
||||
</Typography>
|
||||
</div>;
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -4,13 +4,13 @@
|
||||
}
|
||||
|
||||
100% {
|
||||
transform: translate3d(-8.000023662749896px, 2.000005915687474px, 0) rotate(-45.000133102968164deg) scaleX(0.4999985210781315)
|
||||
transform: translate3d(-8.000023662749896px, 2.000005915687474px, 0) rotate(-45.000133102968164deg) scaleX(0.4999985210781315);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes BurgerTopBackward {
|
||||
0% {
|
||||
transform: translate3d(-8.000023662749896px, 2.000005915687474px, 0) rotate(-45.000133102968164deg) scaleX(0.4999985210781315)
|
||||
transform: translate3d(-8.000023662749896px, 2.000005915687474px, 0) rotate(-45.000133102968164deg) scaleX(0.4999985210781315);
|
||||
}
|
||||
|
||||
100% {
|
||||
|
@ -1,9 +1,7 @@
|
||||
@import "@Themes/constants.scss";
|
||||
@import "./animation.scss";
|
||||
|
||||
|
||||
.root {
|
||||
|
||||
position: fixed;
|
||||
left: 18px;
|
||||
top: 23px;
|
||||
@ -30,18 +28,16 @@
|
||||
background-color: $textColor;
|
||||
}
|
||||
|
||||
|
||||
|
||||
.inner-top {
|
||||
top: 0;
|
||||
|
||||
&.true {
|
||||
animation: BurgerTopForward 0.2s cubic-bezier(.43,1.89,.68,.28);
|
||||
animation: BurgerTopForward 0.2s cubic-bezier(0.43, 1.89, 0.68, 0.28);
|
||||
animation-fill-mode: forwards;
|
||||
}
|
||||
|
||||
&.false {
|
||||
animation: BurgerTopBackward 0.2s cubic-bezier(.43,1.89,.68,.28);
|
||||
animation: BurgerTopBackward 0.2s cubic-bezier(0.43, 1.89, 0.68, 0.28);
|
||||
animation-fill-mode: forwards;
|
||||
}
|
||||
}
|
||||
@ -59,14 +55,13 @@
|
||||
bottom: 1px;
|
||||
|
||||
&.true {
|
||||
animation: BurgerBottomForward 0.2s cubic-bezier(.43,1.89,.68,.28);
|
||||
animation: BurgerBottomForward 0.2s cubic-bezier(0.43, 1.89, 0.68, 0.28);
|
||||
animation-fill-mode: forwards;
|
||||
}
|
||||
|
||||
&.false {
|
||||
animation: BurgerBottomBackward 0.2s cubic-bezier(.43,1.89,.68,.28);
|
||||
animation: BurgerBottomBackward 0.2s cubic-bezier(0.43, 1.89, 0.68, 0.28);
|
||||
animation-fill-mode: forwards;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -2,14 +2,14 @@ import classes from "./classes.module.scss";
|
||||
import classNames from "classnames";
|
||||
|
||||
type IProps = {
|
||||
state: boolean,
|
||||
callback: () => void
|
||||
state: boolean;
|
||||
callback: () => void;
|
||||
};
|
||||
|
||||
export default function Burger({ state, callback }: IProps) {
|
||||
return (
|
||||
<div className={classes["root"]} onClick={() => callback()}>
|
||||
<div className={classes["box"]} >
|
||||
<div className={classes["box"]}>
|
||||
<div className={classNames(classes["inner-top"], classes["inner"], classes[String(state)])} />
|
||||
<div className={classNames(classes["inner-middle"], classes["inner"], classes[String(state)])} />
|
||||
<div className={classNames(classes["inner-bottom"], classes["inner"], classes[String(state)])} />
|
||||
|
@ -8,7 +8,7 @@
|
||||
will-change: transform, opacity;
|
||||
animation: fadeInFromLeft 500ms;
|
||||
|
||||
>h1 {
|
||||
> h1 {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
@ -58,13 +58,13 @@
|
||||
|
||||
@keyframes zoomIn {
|
||||
from {
|
||||
transform: scale(.2);
|
||||
opacity: 0
|
||||
transform: scale(0.2);
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
to {
|
||||
transform: scale(1);
|
||||
opacity: 1
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
@ -108,7 +108,6 @@
|
||||
visibility: visible;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.errorMsg {
|
||||
|
@ -1,21 +1,21 @@
|
||||
import React, { RefObject } from "react";
|
||||
import classes from "./classes.module.scss";
|
||||
import classNames from "classnames"
|
||||
import Image from "next/image"
|
||||
import ErrorIcon from "@Assets/icons/input-error.svg"
|
||||
import SuccessIcon from "@Assets/icons/input-success.svg"
|
||||
import classNames from "classnames";
|
||||
import Image from "next/image";
|
||||
import ErrorIcon from "@Assets/icons/input-error.svg";
|
||||
import SuccessIcon from "@Assets/icons/input-success.svg";
|
||||
|
||||
type IProps = {
|
||||
inputRef?: RefObject<HTMLInputElement>,
|
||||
icon?: string,
|
||||
placeholder?: string,
|
||||
name?: string,
|
||||
value?: string,
|
||||
onChange: any,
|
||||
onBlur?: any,
|
||||
inputStatus: 'success' | 'error' | 'neutral',
|
||||
errorMsg?: string
|
||||
type: string
|
||||
inputRef?: RefObject<HTMLInputElement>;
|
||||
icon?: string;
|
||||
placeholder?: string;
|
||||
name?: string;
|
||||
value?: string;
|
||||
onChange: any;
|
||||
onBlur?: any;
|
||||
inputStatus: "success" | "error" | "neutral";
|
||||
errorMsg?: string;
|
||||
type: string;
|
||||
};
|
||||
|
||||
export default class InputField extends React.Component<IProps> {
|
||||
@ -23,10 +23,12 @@ export default class InputField extends React.Component<IProps> {
|
||||
super(props);
|
||||
}
|
||||
public override render(): JSX.Element {
|
||||
return <>
|
||||
return (
|
||||
<>
|
||||
<div className={classNames(classes["root"])}>
|
||||
{this.props.icon && <Image className={classes["icon"]} alt={this.props.icon} src={this.props.icon} />}
|
||||
<input className={classNames(classes["component"], classes[this.props.inputStatus])}
|
||||
<input
|
||||
className={classNames(classes["component"], classes[this.props.inputStatus])}
|
||||
ref={this.props.inputRef}
|
||||
type={this.props.type}
|
||||
name={this.props.name}
|
||||
@ -37,14 +39,12 @@ export default class InputField extends React.Component<IProps> {
|
||||
autoComplete={this.props.name}
|
||||
/>
|
||||
<div className={classNames(classes["status"], classes[this.props.inputStatus])}>
|
||||
{this.props.inputStatus === "success" &&
|
||||
<Image alt="success icon" src={SuccessIcon} />}
|
||||
{this.props.inputStatus === "error" &&
|
||||
<Image alt="error icon" src={ErrorIcon} />
|
||||
}
|
||||
{this.props.inputStatus === "success" && <Image alt="success icon" src={SuccessIcon} />}
|
||||
{this.props.inputStatus === "error" && <Image alt="error icon" src={ErrorIcon} />}
|
||||
</div>
|
||||
</div>
|
||||
{this.props.errorMsg && <div className={classes["errorMsg"]}>{this.props.errorMsg}</div>}
|
||||
</>
|
||||
);
|
||||
}
|
||||
}
|
@ -1,5 +1,5 @@
|
||||
import Head from 'next/head';
|
||||
import { ReactNode } from 'react';
|
||||
import Head from "next/head";
|
||||
import { ReactNode } from "react";
|
||||
|
||||
type DefaultLayoutProps = { children: ReactNode };
|
||||
|
||||
@ -14,4 +14,3 @@ export const DefaultLayout = ({ children }: DefaultLayoutProps) => {
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
|
@ -27,7 +27,6 @@ export default class DefaultTemplate extends React.Component<IProps, IState> {
|
||||
</div>
|
||||
<Version />
|
||||
</>
|
||||
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -8,7 +8,7 @@
|
||||
margin-bottom: 24px;
|
||||
}
|
||||
|
||||
.inline-flex{
|
||||
.inline-flex {
|
||||
display: inline-flex;
|
||||
}
|
||||
}
|
||||
|
@ -11,23 +11,14 @@ export default class PageNotFound extends BasePage {
|
||||
{/* <Image alt="Unplugged" height="50" src={UnpluggedIcon} /> Oops */}
|
||||
<div className={classes["text"]}>There isn't anything here...</div>
|
||||
<div className={classes["home-button"]}>
|
||||
<Link href="/">
|
||||
{/* <Button text="Go to Home" icon={CardsIcon} /> */}
|
||||
</Link>
|
||||
<Link href="/">{/* <Button text="Go to Home" icon={CardsIcon} /> */}</Link>
|
||||
</div>
|
||||
|
||||
<label>
|
||||
<input />
|
||||
</label>
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</DefaultTemplate>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
@ -38,12 +38,8 @@ export default class Header extends React.Component<IProps, IState> {
|
||||
</Link>
|
||||
</div>
|
||||
<div className={classes["button"]}>
|
||||
<Link href="/show-project">
|
||||
{/* <Button color="transparent" text="MY PROJECT" icon={LoginIcon} /> */}
|
||||
</Link>
|
||||
<Link href="/new-project">
|
||||
{/* <Button text="CREATE" icon={PlusCardIcon} /> */}
|
||||
</Link>
|
||||
<Link href="/show-project">{/* <Button color="transparent" text="MY PROJECT" icon={LoginIcon} /> */}</Link>
|
||||
<Link href="/new-project">{/* <Button text="CREATE" icon={PlusCardIcon} /> */}</Link>
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
@ -51,8 +47,6 @@ export default class Header extends React.Component<IProps, IState> {
|
||||
}
|
||||
|
||||
private switchStatus() {
|
||||
this.state.status
|
||||
? this.setState({ status: false })
|
||||
: this.setState({ status: true });
|
||||
this.state.status ? this.setState({ status: false }) : this.setState({ status: true });
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,5 @@
|
||||
import EventEmitter from "@Front/Services/EventEmitter";
|
||||
|
||||
|
||||
export default abstract class BaseStore {
|
||||
protected readonly event = new EventEmitter();
|
||||
|
||||
|
@ -5,18 +5,21 @@ Once sign up, a `Project ID` is generated for your project, to use within your a
|
||||
Then, add the tezoslink.net RPC endpoint to your prefered Tezos JS library.
|
||||
|
||||
> i.e with [Sotez](https://github.com/AndrewKishino/sotez) :
|
||||
>```js
|
||||
> const sotez = new Sotez('https://<NETWORK>.tezoslink.net/v1/<YOUR_PROJECT_ID>');
|
||||
>
|
||||
> ```js
|
||||
> const sotez = new Sotez(
|
||||
> "https://<NETWORK>.tezoslink.net/v1/<YOUR_PROJECT_ID>"
|
||||
> );
|
||||
> ```
|
||||
|
||||
## Networks
|
||||
|
||||
Use one of these endpoints as your Tezos client provider.
|
||||
|
||||
|NETWORK|DESCRIPTION|URL |
|
||||
|-------|-----------|-------------------------------------------------|
|
||||
|Mainnet| JSON/RPC |https://mainnet.tezoslink.net/v1/<YOUR_PROJECT_ID>|
|
||||
|Testnet| JSON/RPC |https://testnet.tezoslink.net/v1/<YOUR_PROJECT_ID>|
|
||||
| NETWORK | DESCRIPTION | URL |
|
||||
| ------- | ----------- | -------------------------------------------------- |
|
||||
| Mainnet | JSON/RPC | https://mainnet.tezoslink.net/v1/<YOUR_PROJECT_ID> |
|
||||
| Testnet | JSON/RPC | https://testnet.tezoslink.net/v1/<YOUR_PROJECT_ID> |
|
||||
|
||||
## Make requests
|
||||
|
||||
@ -37,26 +40,29 @@ The `Project ID` authorize requests.
|
||||
|
||||
All requests of type `/chains/main/blocks(.*?)` are accepted.
|
||||
|
||||
>Example of valid paths:
|
||||
>- `/chains/main/blocks/head/context/contracts/<ADDRESS>/balance`
|
||||
>- `/chains/main/blocks/head/context/contracts/<ADDRESS>/delegate`
|
||||
>- `/chains/main/blocks/head/context/contracts/<ADDRESS>/manager_key`
|
||||
>- `/chains/main/blocks/head/context/contracts/<ADDRESS>/counter`
|
||||
>- `/chains/main/blocks/head/context/delegates/<ADDRESS>`
|
||||
>- `/chains/main/blocks/head/header`
|
||||
>- `/chains/main/blocks/head/votes/proposals`
|
||||
>- `/chains/main/blocks/head/votes/current_quorum`
|
||||
> Example of valid paths:
|
||||
>
|
||||
> - `/chains/main/blocks/head/context/contracts/<ADDRESS>/balance`
|
||||
> - `/chains/main/blocks/head/context/contracts/<ADDRESS>/delegate`
|
||||
> - `/chains/main/blocks/head/context/contracts/<ADDRESS>/manager_key`
|
||||
> - `/chains/main/blocks/head/context/contracts/<ADDRESS>/counter`
|
||||
> - `/chains/main/blocks/head/context/delegates/<ADDRESS>`
|
||||
> - `/chains/main/blocks/head/header`
|
||||
> - `/chains/main/blocks/head/votes/proposals`
|
||||
> - `/chains/main/blocks/head/votes/current_quorum`
|
||||
|
||||
[More about the Tezos `JSON/RPC` endpoints](https://tezos.gitlab.io/api/rpc.html)
|
||||
|
||||
## Nodes
|
||||
|
||||
Tezos has three types of nodes:
|
||||
|
||||
- Full mode (default mode)
|
||||
- **Rolling mode**
|
||||
- **Archive mode**
|
||||
|
||||
We use two types of mode:
|
||||
|
||||
- **Archive** to store the whole blockchain. Archive is the heaviest mode as it keeps the whole chain data to be able to query any information stored on the chain since the genesis. It is particularly suitable for indexers or block explorer, that is why we use archive nodes.
|
||||
- **Rolling** to store last blocks (and scale them faster)
|
||||
|
||||
|
@ -4,4 +4,3 @@
|
||||
- [Security](##security)
|
||||
- [RPC Endpoints](#rpc-endpoints)
|
||||
- [Nodes](#nodes)
|
||||
|
||||
|
@ -37,9 +37,11 @@ export default class DesignSystem extends BasePage<IProps, IState> {
|
||||
</div>
|
||||
<div className={classes["sub-section"]}>
|
||||
<Typography typo={ITypo.P_18}>
|
||||
This page allows to gather all the design system of the site. A Design System is a library of components, visuals and principles with reusable code. This evolving kit offers a UX and UI repository for
|
||||
designers and developers of digital products and services. The construction of a design system offers many advantages. This solution facilitates the work of the teams and reduces the "design debt" and the
|
||||
"technical debt". The result is a coherent ecosystem and therefore a better experience for users and customers.
|
||||
This page allows to gather all the design system of the site. A Design System is a library of components,
|
||||
visuals and principles with reusable code. This evolving kit offers a UX and UI repository for designers and
|
||||
developers of digital products and services. The construction of a design system offers many advantages.
|
||||
This solution facilitates the work of the teams and reduces the "design debt" and the "technical debt". The
|
||||
result is a coherent ecosystem and therefore a better experience for users and customers.
|
||||
</Typography>
|
||||
</div>
|
||||
</div>
|
||||
@ -69,8 +71,15 @@ export default class DesignSystem extends BasePage<IProps, IState> {
|
||||
Show Modal
|
||||
</Button>
|
||||
|
||||
<Confirm isOpen={this.state.isModalDisplayed} onClose={this.closeModal} closeBtn header={"Title"} cancelText={"Cancel"} confirmText={"Confirmer"}>
|
||||
Lorem ipsum dolor sit amet consectetur. Aliquam nunc lobortis lacus vulputate sagittis sed tempor eget feugiat. Elementum malesuada at sit elit.
|
||||
<Confirm
|
||||
isOpen={this.state.isModalDisplayed}
|
||||
onClose={this.closeModal}
|
||||
closeBtn
|
||||
header={"Title"}
|
||||
cancelText={"Cancel"}
|
||||
confirmText={"Confirmer"}>
|
||||
Lorem ipsum dolor sit amet consectetur. Aliquam nunc lobortis lacus vulputate sagittis sed tempor eget feugiat.
|
||||
Elementum malesuada at sit elit.
|
||||
</Confirm>
|
||||
</div>
|
||||
|
||||
@ -87,14 +96,16 @@ export default class DesignSystem extends BasePage<IProps, IState> {
|
||||
<div className={classes["sub-section"]}>
|
||||
<Typography typo={ITypo.H3}>CheckBox component</Typography>
|
||||
</div>
|
||||
<CheckBox name="Check Box 1" toolTip="Checkbox with tooltip"/>
|
||||
<CheckBox name="Check Box 1" toolTip="Checkbox with tooltip" />
|
||||
<CheckBox name="Check Box 2" />
|
||||
</div>
|
||||
<div className={classes["section"]}>
|
||||
<div className={classes["sub-section"]}>
|
||||
<Typography typo={ITypo.H3}>RadioBox component</Typography>
|
||||
</div>
|
||||
<RadioBox name="RadioBox" toolTip="Radiobox with tooltip">Radio Box 1</RadioBox>
|
||||
<RadioBox name="RadioBox" toolTip="Radiobox with tooltip">
|
||||
Radio Box 1
|
||||
</RadioBox>
|
||||
<RadioBox name="RadioBox">Radio Box 2</RadioBox>
|
||||
</div>
|
||||
<div className={classes["section"]}>
|
||||
|
@ -1,7 +1,6 @@
|
||||
@import "@Themes/constants.scss";
|
||||
@import "@Themes/fonts.scss";
|
||||
|
||||
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
@ -1,13 +1,12 @@
|
||||
export interface IMockInterface {
|
||||
id: number,
|
||||
path: string,
|
||||
id: number;
|
||||
path: string;
|
||||
}
|
||||
export interface IProject {
|
||||
id: number,
|
||||
title: string,
|
||||
uuid: string,
|
||||
createdAt: Date,
|
||||
updatedAt: Date,
|
||||
network: string,
|
||||
id: number;
|
||||
title: string;
|
||||
uuid: string;
|
||||
createdAt: Date;
|
||||
updatedAt: Date;
|
||||
network: string;
|
||||
}
|
||||
|
||||
|
@ -26,7 +26,7 @@ $pink-hover: #e34ba9;
|
||||
// Soft colors
|
||||
$green-soft: #baf2cd;
|
||||
$blue-soft: #a7c6d4;
|
||||
$orange-soft: #FFDC99;
|
||||
$orange-soft: #ffdc99;
|
||||
$turquoise-soft: #c3eae6;
|
||||
$purple-soft: #c5b2d4;
|
||||
$orange-soft: #ffdc99;
|
||||
|
@ -1 +1 @@
|
||||
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&display=swap');
|
||||
@import url("https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&display=swap");
|
||||
|
@ -1,6 +1,6 @@
|
||||
@import "@Themes/constants.scss";
|
||||
|
||||
body.body{
|
||||
body.body {
|
||||
// --black: #000000;
|
||||
|
||||
--green-flash: #{green-flash};
|
||||
|
@ -1,5 +1,5 @@
|
||||
import PageNotFound from "@Front/Components/Layouts/PageNotFound"
|
||||
import PageNotFound from "@Front/Components/Layouts/PageNotFound";
|
||||
|
||||
export default function Route() {
|
||||
return <PageNotFound/>
|
||||
return <PageNotFound />;
|
||||
}
|
@ -4,10 +4,7 @@ import type { NextPage } from "next";
|
||||
import type { AppType, AppProps } from "next/app";
|
||||
import type { ReactElement, ReactNode } from "react";
|
||||
|
||||
export type NextPageWithLayout<
|
||||
TProps = Record<string, unknown>,
|
||||
TInitialProps = TProps
|
||||
> = NextPage<TProps, TInitialProps> & {
|
||||
export type NextPageWithLayout<TProps = Record<string, unknown>, TInitialProps = TProps> = NextPage<TProps, TInitialProps> & {
|
||||
getLayout?: (page: ReactElement) => ReactNode;
|
||||
};
|
||||
|
||||
@ -16,9 +13,7 @@ type AppPropsWithLayout = AppProps & {
|
||||
};
|
||||
|
||||
const MyApp = (({ Component, pageProps }: AppPropsWithLayout) => {
|
||||
const getLayout =
|
||||
Component.getLayout ??
|
||||
((page) => <DefaultLayout children={page}></DefaultLayout>);
|
||||
const getLayout = Component.getLayout ?? ((page) => <DefaultLayout children={page}></DefaultLayout>);
|
||||
|
||||
return getLayout(<Component {...pageProps} />);
|
||||
}) as AppType;
|
||||
|
Loading…
x
Reference in New Issue
Block a user