From 855ec2f138820da59b694f9fafd9800b191634bd Mon Sep 17 00:00:00 2001 From: RustamRu Date: Sun, 17 Nov 2024 13:43:41 +0300 Subject: [PATCH 1/2] feat: update eslint import order rule --- eslint.config.mjs | 25 +- package-lock.json | 360 +++++++++++++++++- package.json | 1 + src/__data__/urls.ts | 1 + src/app.tsx | 3 +- src/components/LayoutArm/LayoutArm.tsx | 5 +- src/components/MasterItem/MasterItem.tsx | 1 + src/components/Masters/Masters.tsx | 3 +- src/components/Orders/Orders.tsx | 3 +- .../BenefitsSection/BenefitsSection.tsx | 2 + .../landing/CtaButton/CtaButton.tsx | 1 + src/components/landing/Footer/Footer.tsx | 2 + .../landing/HeroSection/HeroSection.tsx | 1 + src/components/landing/SiteLogo/SiteLogo.tsx | 1 + .../ReviewsSlider/ReviewsSlider.tsx | 2 + .../SocialProofSection/SocialProofSection.tsx | 2 + .../LandingThemeProvider.tsx | 1 + src/index.tsx | 3 +- src/pages/arm/index.tsx | 1 + src/pages/landing/index.tsx | 1 + src/pages/notFound/notFound.tsx | 3 +- src/pages/order-form/index.tsx | 1 + src/routes.tsx | 1 + 23 files changed, 402 insertions(+), 22 deletions(-) diff --git a/eslint.config.mjs b/eslint.config.mjs index d52d554..6ceacd6 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -3,6 +3,7 @@ import pluginJs from "@eslint/js"; import tseslint from "typescript-eslint"; import pluginReact from "eslint-plugin-react"; import stylistic from '@stylistic/eslint-plugin'; +import pluginImport from 'eslint-plugin-import'; export default [ { files: ["**/*.{js,mjs,cjs,ts,jsx,tsx}"] }, @@ -12,7 +13,8 @@ export default [ pluginReact.configs.flat.recommended, { plugins: { - '@stylistic': stylistic + '@stylistic': stylistic, + 'import': pluginImport, }, "rules": { "no-unused-vars": "off", @@ -24,13 +26,20 @@ export default [ "caughtErrorsIgnorePattern": "^_" } ], - "sort-imports": ["error", { - "ignoreCase": false, - "ignoreDeclarationSort": true, - "ignoreMemberSort": true, - "memberSyntaxSortOrder": ["none", "all", "multiple", "single"], - "allowSeparatedGroups": true - }], + "sort-imports": ["off"], + "import/order": [ + "error", + { + "groups": [ + "builtin", + "external", + "internal", + "parent", + ["sibling", "index"] + ], + "newlines-between": "always", + } + ], semi: ["error", "always"], '@stylistic/indent': ['error', 2], 'react/prop-types': 'off' diff --git a/package-lock.json b/package-lock.json index c0485d1..93317ed 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31,6 +31,7 @@ "@stylistic/eslint-plugin": "^2.10.1", "@types/react-dom": "^18.3.1", "eslint": "^9.14.0", + "eslint-plugin-import": "^2.31.0", "eslint-plugin-react": "^7.37.2", "globals": "^15.11.0", "prettier": "3.3.3", @@ -3617,6 +3618,13 @@ "node": ">=14.0.0" } }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true, + "license": "MIT" + }, "node_modules/@stylistic/eslint-plugin": { "version": "2.10.1", "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-2.10.1.tgz", @@ -3700,6 +3708,13 @@ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/lodash": { "version": "4.17.13", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.13.tgz", @@ -3791,16 +3806,17 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.12.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.12.2.tgz", - "integrity": "sha512-MrvlXNfGPLH3Z+r7Tk+Z5moZAc0dzdVjTgUgwsdGweH7lydysQsnSww3nAmsq8blFuRD5VRlAr9YdEFw3e6PBw==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.14.0.tgz", + "integrity": "sha512-2p82Yn9juUJq0XynBXtFCyrBDb6/dJombnz6vbo6mgQEtWHfvHbQuEa9kAOVIt1c9YFwi7H6WxtPj1kg+80+RA==", "dev": true, "license": "BSD-2-Clause", + "peer": true, "dependencies": { - "@typescript-eslint/scope-manager": "8.12.2", - "@typescript-eslint/types": "8.12.2", - "@typescript-eslint/typescript-estree": "8.12.2", - "@typescript-eslint/visitor-keys": "8.12.2", + "@typescript-eslint/scope-manager": "8.14.0", + "@typescript-eslint/types": "8.14.0", + "@typescript-eslint/typescript-estree": "8.14.0", + "@typescript-eslint/visitor-keys": "8.14.0", "debug": "^4.3.4" }, "engines": { @@ -3819,6 +3835,117 @@ } } }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.14.0.tgz", + "integrity": "sha512-aBbBrnW9ARIDn92Zbo7rguLnqQ/pOrUguVpbUwzOhkFg2npFDwTgPGqFqE0H5feXcOoJOfX3SxlJaKEVtq54dw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@typescript-eslint/types": "8.14.0", + "@typescript-eslint/visitor-keys": "8.14.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.14.0.tgz", + "integrity": "sha512-yjeB9fnO/opvLJFAsPNYlKPnEM8+z4og09Pk504dkqonT02AyL5Z9SSqlE0XqezS93v6CXn49VHvB2G7XSsl0g==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.14.0.tgz", + "integrity": "sha512-OPXPLYKGZi9XS/49rdaCbR5j/S14HazviBlUQFvSKz3npr3NikF+mrgK7CFVur6XEt95DZp/cmke9d5i3vtVnQ==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "@typescript-eslint/types": "8.14.0", + "@typescript-eslint/visitor-keys": "8.14.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.14.0.tgz", + "integrity": "sha512-vG0XZo8AdTH9OE6VFRwAZldNc7qtJ/6NLGWak+BtENuEUXGZgFpihILPiBvKXvJ2nFu27XNGC6rKiwuaoMbYzQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@typescript-eslint/types": "8.14.0", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "license": "ISC", + "peer": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@typescript-eslint/scope-manager": { "version": "8.12.2", "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.12.2.tgz", @@ -4377,6 +4504,27 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array.prototype.flat": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", @@ -5680,6 +5828,124 @@ } } }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", + "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.31.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", + "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.8", + "array.prototype.findlastindex": "^1.2.5", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.12.0", + "hasown": "^2.0.2", + "is-core-module": "^2.15.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.0", + "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.8", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-import/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/eslint-plugin-react": { "version": "7.37.2", "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.2.tgz", @@ -8351,6 +8617,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/object.values": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", @@ -10148,6 +10429,16 @@ "node": ">=8" } }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -10413,6 +10704,32 @@ "typescript": ">=4.2.0" } }, + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, "node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", @@ -10572,6 +10889,35 @@ } } }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/parser": { + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.12.2.tgz", + "integrity": "sha512-MrvlXNfGPLH3Z+r7Tk+Z5moZAc0dzdVjTgUgwsdGweH7lydysQsnSww3nAmsq8blFuRD5VRlAr9YdEFw3e6PBw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "8.12.2", + "@typescript-eslint/types": "8.12.2", + "@typescript-eslint/typescript-estree": "8.12.2", + "@typescript-eslint/visitor-keys": "8.12.2", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/uglify-js": { "version": "3.19.3", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", diff --git a/package.json b/package.json index a25b09b..5b5ff92 100644 --- a/package.json +++ b/package.json @@ -39,6 +39,7 @@ "@stylistic/eslint-plugin": "^2.10.1", "@types/react-dom": "^18.3.1", "eslint": "^9.14.0", + "eslint-plugin-import": "^2.31.0", "eslint-plugin-react": "^7.37.2", "globals": "^15.11.0", "prettier": "3.3.3", diff --git a/src/__data__/urls.ts b/src/__data__/urls.ts index 0cbff49..7aef983 100644 --- a/src/__data__/urls.ts +++ b/src/__data__/urls.ts @@ -1,5 +1,6 @@ import { generatePath } from "react-router-dom"; import { getNavigationValue } from "@brojs/cli"; + import { Order } from "../models"; export const URLs = { diff --git a/src/app.tsx b/src/app.tsx index 37cb4f4..5bfd51d 100644 --- a/src/app.tsx +++ b/src/app.tsx @@ -1,7 +1,8 @@ import React from 'react'; import { BrowserRouter } from 'react-router-dom'; -import Routers from './routes'; import { ChakraProvider, theme as chakraTheme } from '@chakra-ui/react'; + +import Routers from './routes'; import ErrorBoundary from './components/ErrorBoundary'; const App = () => { diff --git a/src/components/LayoutArm/LayoutArm.tsx b/src/components/LayoutArm/LayoutArm.tsx index da99da0..9873bdc 100644 --- a/src/components/LayoutArm/LayoutArm.tsx +++ b/src/components/LayoutArm/LayoutArm.tsx @@ -1,9 +1,10 @@ import { Box, Flex } from '@chakra-ui/react'; +import React from 'react'; +import { Navigate, Route, Routes } from 'react-router-dom'; + import Sidebar from '../Sidebar'; import Orders from '../Orders'; import Masters from '../Masters'; -import React from 'react'; -import { Navigate, Route, Routes } from 'react-router-dom'; const LayoutArm = () => ( diff --git a/src/components/MasterItem/MasterItem.tsx b/src/components/MasterItem/MasterItem.tsx index ccb733c..a98b8ae 100644 --- a/src/components/MasterItem/MasterItem.tsx +++ b/src/components/MasterItem/MasterItem.tsx @@ -1,5 +1,6 @@ import React from 'react'; import { Badge, Link, Stack, Td, Tr } from '@chakra-ui/react'; + import MasterActionsMenu from '../MasterActionsMenu'; const MasterItem = ({ name, schedule, phone }) => { diff --git a/src/components/Masters/Masters.tsx b/src/components/Masters/Masters.tsx index 581d6b5..5d7a236 100644 --- a/src/components/Masters/Masters.tsx +++ b/src/components/Masters/Masters.tsx @@ -11,10 +11,11 @@ import { useDisclosure, Flex, } from '@chakra-ui/react'; +import i18next from 'i18next'; + import { mastersData } from '../../mocks'; import MasterItem from '../MasterItem'; import MasterDrawer from '../MasterDrawer'; -import i18next from 'i18next'; const TABLE_HEADERS = ['name', 'currentJob', 'phone', 'actions']; diff --git a/src/components/Orders/Orders.tsx b/src/components/Orders/Orders.tsx index 1e9f258..0c1ad8e 100644 --- a/src/components/Orders/Orders.tsx +++ b/src/components/Orders/Orders.tsx @@ -1,8 +1,9 @@ import { Box, Heading, Table, Thead, Tbody, Tr, Th } from '@chakra-ui/react'; import React from 'react'; +import i18next from 'i18next'; + import { ordersData } from '../../mocks'; import OrderItem from '../OrderItem'; -import i18next from 'i18next'; const Orders = () => { const TABLE_HEADERS = [ 'carNumber', diff --git a/src/components/landing/BenefitsSection/BenefitsSection.tsx b/src/components/landing/BenefitsSection/BenefitsSection.tsx index 9eca7e8..dc74dbf 100644 --- a/src/components/landing/BenefitsSection/BenefitsSection.tsx +++ b/src/components/landing/BenefitsSection/BenefitsSection.tsx @@ -7,7 +7,9 @@ import { MdHandshake, } from 'react-icons/md'; import { Heading, HStack, List, Text, VStack } from '@chakra-ui/react'; + import { CtaButton, PageSection } from '../'; + import { ListItem } from './ListItem'; export const BenefitsSection: FC = () => { diff --git a/src/components/landing/CtaButton/CtaButton.tsx b/src/components/landing/CtaButton/CtaButton.tsx index c4681fa..cf5df8d 100644 --- a/src/components/landing/CtaButton/CtaButton.tsx +++ b/src/components/landing/CtaButton/CtaButton.tsx @@ -2,6 +2,7 @@ import React, { FC } from 'react'; import { useTranslation } from 'react-i18next'; import { Link as RouterLink } from 'react-router-dom'; import { ButtonProps, Button } from '@chakra-ui/react'; + import { URLs } from '../../../__data__/urls'; export const CtaButton: FC = (props) => { diff --git a/src/components/landing/Footer/Footer.tsx b/src/components/landing/Footer/Footer.tsx index 2ac9ec8..f483994 100644 --- a/src/components/landing/Footer/Footer.tsx +++ b/src/components/landing/Footer/Footer.tsx @@ -2,7 +2,9 @@ import React, { FC } from 'react'; import { useTranslation } from 'react-i18next'; import { Link, List, ListItem } from '@chakra-ui/react'; import { Link as RouterLink } from 'react-router-dom'; + import { SiteLogo, PageSection } from '../'; + import { Copyright } from './Copyright'; export const Footer: FC = () => { diff --git a/src/components/landing/HeroSection/HeroSection.tsx b/src/components/landing/HeroSection/HeroSection.tsx index 6f8bc54..9ae61c9 100644 --- a/src/components/landing/HeroSection/HeroSection.tsx +++ b/src/components/landing/HeroSection/HeroSection.tsx @@ -1,6 +1,7 @@ import React, { FC } from 'react'; import { useTranslation } from 'react-i18next'; import { Box, Heading, Text, Center, VStack, BoxProps } from '@chakra-ui/react'; + import { DemoVideoPosterImg } from '../../../assets/images'; import { CtaButton, SiteLogo, PageSection } from '../'; diff --git a/src/components/landing/SiteLogo/SiteLogo.tsx b/src/components/landing/SiteLogo/SiteLogo.tsx index efb1936..b56b5e8 100644 --- a/src/components/landing/SiteLogo/SiteLogo.tsx +++ b/src/components/landing/SiteLogo/SiteLogo.tsx @@ -1,6 +1,7 @@ import React, { FC } from 'react'; import { useTranslation } from 'react-i18next'; import { Image } from '@chakra-ui/react'; + import { LogoSvg } from '../../../assets/icons'; export const SiteLogo: FC = () => { diff --git a/src/components/landing/SocialProofSection/ReviewsSlider/ReviewsSlider.tsx b/src/components/landing/SocialProofSection/ReviewsSlider/ReviewsSlider.tsx index 756a9f5..9f6f56b 100644 --- a/src/components/landing/SocialProofSection/ReviewsSlider/ReviewsSlider.tsx +++ b/src/components/landing/SocialProofSection/ReviewsSlider/ReviewsSlider.tsx @@ -8,8 +8,10 @@ import { Tabs, Text, } from '@chakra-ui/react'; + import { mockReview } from '../../../../mocks/landing'; import { Review } from '../../../../models'; + import { ReviewCard } from './ReviewCard'; const SLIDE_CHANGE_INTERVAL = 5000; diff --git a/src/components/landing/SocialProofSection/SocialProofSection.tsx b/src/components/landing/SocialProofSection/SocialProofSection.tsx index 7357eb5..fd49911 100644 --- a/src/components/landing/SocialProofSection/SocialProofSection.tsx +++ b/src/components/landing/SocialProofSection/SocialProofSection.tsx @@ -1,7 +1,9 @@ import React, { FC } from 'react'; import { useTranslation } from 'react-i18next'; import { Heading, HStack } from '@chakra-ui/react'; + import { CtaButton, PageSection } from '../'; + import { ReviewsSlider } from './ReviewsSlider'; export const SocialProofSection: FC = () => { diff --git a/src/containers/LandingThemeProvider/LandingThemeProvider.tsx b/src/containers/LandingThemeProvider/LandingThemeProvider.tsx index c52bf1d..12483f0 100644 --- a/src/containers/LandingThemeProvider/LandingThemeProvider.tsx +++ b/src/containers/LandingThemeProvider/LandingThemeProvider.tsx @@ -1,5 +1,6 @@ import React, { FC, PropsWithChildren } from 'react'; import { ChakraProvider } from '@chakra-ui/react'; + import { default as landingTheme } from './theme-config'; import Fonts from './Fonts'; diff --git a/src/index.tsx b/src/index.tsx index 405968a..a87c1e2 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -2,9 +2,10 @@ import React from 'react'; import ReactDOM from 'react-dom/client'; import { i18nextReactInitConfig } from '@brojs/cli'; -import App from './app'; import i18next from 'i18next'; +import App from './app'; + i18next.t = i18next.t.bind(i18next); const i18nextPromise = i18nextReactInitConfig(i18next); export default () => ; diff --git a/src/pages/arm/index.tsx b/src/pages/arm/index.tsx index 02d21c4..dda1851 100644 --- a/src/pages/arm/index.tsx +++ b/src/pages/arm/index.tsx @@ -1,4 +1,5 @@ import React, { useState } from 'react'; + import LayoutArm from '../../components/LayoutArm'; const Page = () => { diff --git a/src/pages/landing/index.tsx b/src/pages/landing/index.tsx index 0e86141..62155e7 100644 --- a/src/pages/landing/index.tsx +++ b/src/pages/landing/index.tsx @@ -1,5 +1,6 @@ import React, { FC } from 'react'; import { Container, VStack } from '@chakra-ui/react'; + import { BenefitsSection, Footer, diff --git a/src/pages/notFound/notFound.tsx b/src/pages/notFound/notFound.tsx index 2a3b25b..cebfe42 100644 --- a/src/pages/notFound/notFound.tsx +++ b/src/pages/notFound/notFound.tsx @@ -2,9 +2,10 @@ import React from 'react'; import { Text, Button, Center, VStack, Heading } from '@chakra-ui/react'; import { Link } from 'react-router-dom'; import { Player } from '@lottiefiles/react-lottie-player'; -import animate from '../../assets/animation/notFound.json'; import i18next from 'i18next'; +import animate from '../../assets/animation/notFound.json'; + const NotFound = () => { return (
diff --git a/src/pages/order-form/index.tsx b/src/pages/order-form/index.tsx index 4b6617d..a6f19cb 100644 --- a/src/pages/order-form/index.tsx +++ b/src/pages/order-form/index.tsx @@ -1,6 +1,7 @@ import React from 'react'; import { Link as RouterLink } from 'react-router-dom'; import { Button } from '@chakra-ui/react'; + import { URLs } from '../../__data__/urls'; import { mockOrder } from '../../mocks/landing'; diff --git a/src/routes.tsx b/src/routes.tsx index aa18c0b..4815fc4 100644 --- a/src/routes.tsx +++ b/src/routes.tsx @@ -1,5 +1,6 @@ import React, { lazy, Suspense } from 'react'; import { Routes, Route } from 'react-router-dom'; + import { PageSpinner } from './components'; import Arm from './pages/arm'; import { URLs } from './__data__/urls'; From 1787e94f8e1d118cc14819f21587aabf74b252e0 Mon Sep 17 00:00:00 2001 From: RustamRu Date: Sun, 17 Nov 2024 13:46:24 +0300 Subject: [PATCH 2/2] feat: update eslint import order rule (#31) --- eslint.config.mjs | 25 +- package-lock.json | 360 +++++++++++++++++- package.json | 1 + src/__data__/urls.ts | 1 + src/app.tsx | 3 +- src/components/LayoutArm/LayoutArm.tsx | 5 +- src/components/MasterItem/MasterItem.tsx | 1 + src/components/Masters/Masters.tsx | 3 +- src/components/Orders/Orders.tsx | 3 +- .../BenefitsSection/BenefitsSection.tsx | 2 + .../landing/CtaButton/CtaButton.tsx | 1 + src/components/landing/Footer/Footer.tsx | 2 + .../landing/HeroSection/HeroSection.tsx | 1 + src/components/landing/SiteLogo/SiteLogo.tsx | 1 + .../ReviewsSlider/ReviewsSlider.tsx | 2 + .../SocialProofSection/SocialProofSection.tsx | 2 + .../LandingThemeProvider.tsx | 1 + src/index.tsx | 3 +- src/pages/arm/index.tsx | 1 + src/pages/landing/index.tsx | 1 + src/pages/notFound/notFound.tsx | 3 +- src/pages/order-form/index.tsx | 1 + src/routes.tsx | 1 + 23 files changed, 402 insertions(+), 22 deletions(-) diff --git a/eslint.config.mjs b/eslint.config.mjs index d52d554..6ceacd6 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -3,6 +3,7 @@ import pluginJs from "@eslint/js"; import tseslint from "typescript-eslint"; import pluginReact from "eslint-plugin-react"; import stylistic from '@stylistic/eslint-plugin'; +import pluginImport from 'eslint-plugin-import'; export default [ { files: ["**/*.{js,mjs,cjs,ts,jsx,tsx}"] }, @@ -12,7 +13,8 @@ export default [ pluginReact.configs.flat.recommended, { plugins: { - '@stylistic': stylistic + '@stylistic': stylistic, + 'import': pluginImport, }, "rules": { "no-unused-vars": "off", @@ -24,13 +26,20 @@ export default [ "caughtErrorsIgnorePattern": "^_" } ], - "sort-imports": ["error", { - "ignoreCase": false, - "ignoreDeclarationSort": true, - "ignoreMemberSort": true, - "memberSyntaxSortOrder": ["none", "all", "multiple", "single"], - "allowSeparatedGroups": true - }], + "sort-imports": ["off"], + "import/order": [ + "error", + { + "groups": [ + "builtin", + "external", + "internal", + "parent", + ["sibling", "index"] + ], + "newlines-between": "always", + } + ], semi: ["error", "always"], '@stylistic/indent': ['error', 2], 'react/prop-types': 'off' diff --git a/package-lock.json b/package-lock.json index c0485d1..93317ed 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31,6 +31,7 @@ "@stylistic/eslint-plugin": "^2.10.1", "@types/react-dom": "^18.3.1", "eslint": "^9.14.0", + "eslint-plugin-import": "^2.31.0", "eslint-plugin-react": "^7.37.2", "globals": "^15.11.0", "prettier": "3.3.3", @@ -3617,6 +3618,13 @@ "node": ">=14.0.0" } }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true, + "license": "MIT" + }, "node_modules/@stylistic/eslint-plugin": { "version": "2.10.1", "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-2.10.1.tgz", @@ -3700,6 +3708,13 @@ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/lodash": { "version": "4.17.13", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.13.tgz", @@ -3791,16 +3806,17 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.12.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.12.2.tgz", - "integrity": "sha512-MrvlXNfGPLH3Z+r7Tk+Z5moZAc0dzdVjTgUgwsdGweH7lydysQsnSww3nAmsq8blFuRD5VRlAr9YdEFw3e6PBw==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.14.0.tgz", + "integrity": "sha512-2p82Yn9juUJq0XynBXtFCyrBDb6/dJombnz6vbo6mgQEtWHfvHbQuEa9kAOVIt1c9YFwi7H6WxtPj1kg+80+RA==", "dev": true, "license": "BSD-2-Clause", + "peer": true, "dependencies": { - "@typescript-eslint/scope-manager": "8.12.2", - "@typescript-eslint/types": "8.12.2", - "@typescript-eslint/typescript-estree": "8.12.2", - "@typescript-eslint/visitor-keys": "8.12.2", + "@typescript-eslint/scope-manager": "8.14.0", + "@typescript-eslint/types": "8.14.0", + "@typescript-eslint/typescript-estree": "8.14.0", + "@typescript-eslint/visitor-keys": "8.14.0", "debug": "^4.3.4" }, "engines": { @@ -3819,6 +3835,117 @@ } } }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.14.0.tgz", + "integrity": "sha512-aBbBrnW9ARIDn92Zbo7rguLnqQ/pOrUguVpbUwzOhkFg2npFDwTgPGqFqE0H5feXcOoJOfX3SxlJaKEVtq54dw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@typescript-eslint/types": "8.14.0", + "@typescript-eslint/visitor-keys": "8.14.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.14.0.tgz", + "integrity": "sha512-yjeB9fnO/opvLJFAsPNYlKPnEM8+z4og09Pk504dkqonT02AyL5Z9SSqlE0XqezS93v6CXn49VHvB2G7XSsl0g==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.14.0.tgz", + "integrity": "sha512-OPXPLYKGZi9XS/49rdaCbR5j/S14HazviBlUQFvSKz3npr3NikF+mrgK7CFVur6XEt95DZp/cmke9d5i3vtVnQ==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "@typescript-eslint/types": "8.14.0", + "@typescript-eslint/visitor-keys": "8.14.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.14.0.tgz", + "integrity": "sha512-vG0XZo8AdTH9OE6VFRwAZldNc7qtJ/6NLGWak+BtENuEUXGZgFpihILPiBvKXvJ2nFu27XNGC6rKiwuaoMbYzQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@typescript-eslint/types": "8.14.0", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "license": "ISC", + "peer": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@typescript-eslint/scope-manager": { "version": "8.12.2", "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.12.2.tgz", @@ -4377,6 +4504,27 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array.prototype.flat": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", @@ -5680,6 +5828,124 @@ } } }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", + "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.31.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", + "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.8", + "array.prototype.findlastindex": "^1.2.5", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.12.0", + "hasown": "^2.0.2", + "is-core-module": "^2.15.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.0", + "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.8", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-import/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/eslint-plugin-react": { "version": "7.37.2", "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.2.tgz", @@ -8351,6 +8617,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/object.values": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", @@ -10148,6 +10429,16 @@ "node": ">=8" } }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -10413,6 +10704,32 @@ "typescript": ">=4.2.0" } }, + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, "node_modules/tslib": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", @@ -10572,6 +10889,35 @@ } } }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/parser": { + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.12.2.tgz", + "integrity": "sha512-MrvlXNfGPLH3Z+r7Tk+Z5moZAc0dzdVjTgUgwsdGweH7lydysQsnSww3nAmsq8blFuRD5VRlAr9YdEFw3e6PBw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "8.12.2", + "@typescript-eslint/types": "8.12.2", + "@typescript-eslint/typescript-estree": "8.12.2", + "@typescript-eslint/visitor-keys": "8.12.2", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/uglify-js": { "version": "3.19.3", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", diff --git a/package.json b/package.json index a25b09b..5b5ff92 100644 --- a/package.json +++ b/package.json @@ -39,6 +39,7 @@ "@stylistic/eslint-plugin": "^2.10.1", "@types/react-dom": "^18.3.1", "eslint": "^9.14.0", + "eslint-plugin-import": "^2.31.0", "eslint-plugin-react": "^7.37.2", "globals": "^15.11.0", "prettier": "3.3.3", diff --git a/src/__data__/urls.ts b/src/__data__/urls.ts index 0cbff49..7aef983 100644 --- a/src/__data__/urls.ts +++ b/src/__data__/urls.ts @@ -1,5 +1,6 @@ import { generatePath } from "react-router-dom"; import { getNavigationValue } from "@brojs/cli"; + import { Order } from "../models"; export const URLs = { diff --git a/src/app.tsx b/src/app.tsx index 37cb4f4..5bfd51d 100644 --- a/src/app.tsx +++ b/src/app.tsx @@ -1,7 +1,8 @@ import React from 'react'; import { BrowserRouter } from 'react-router-dom'; -import Routers from './routes'; import { ChakraProvider, theme as chakraTheme } from '@chakra-ui/react'; + +import Routers from './routes'; import ErrorBoundary from './components/ErrorBoundary'; const App = () => { diff --git a/src/components/LayoutArm/LayoutArm.tsx b/src/components/LayoutArm/LayoutArm.tsx index da99da0..9873bdc 100644 --- a/src/components/LayoutArm/LayoutArm.tsx +++ b/src/components/LayoutArm/LayoutArm.tsx @@ -1,9 +1,10 @@ import { Box, Flex } from '@chakra-ui/react'; +import React from 'react'; +import { Navigate, Route, Routes } from 'react-router-dom'; + import Sidebar from '../Sidebar'; import Orders from '../Orders'; import Masters from '../Masters'; -import React from 'react'; -import { Navigate, Route, Routes } from 'react-router-dom'; const LayoutArm = () => ( diff --git a/src/components/MasterItem/MasterItem.tsx b/src/components/MasterItem/MasterItem.tsx index ccb733c..a98b8ae 100644 --- a/src/components/MasterItem/MasterItem.tsx +++ b/src/components/MasterItem/MasterItem.tsx @@ -1,5 +1,6 @@ import React from 'react'; import { Badge, Link, Stack, Td, Tr } from '@chakra-ui/react'; + import MasterActionsMenu from '../MasterActionsMenu'; const MasterItem = ({ name, schedule, phone }) => { diff --git a/src/components/Masters/Masters.tsx b/src/components/Masters/Masters.tsx index 581d6b5..5d7a236 100644 --- a/src/components/Masters/Masters.tsx +++ b/src/components/Masters/Masters.tsx @@ -11,10 +11,11 @@ import { useDisclosure, Flex, } from '@chakra-ui/react'; +import i18next from 'i18next'; + import { mastersData } from '../../mocks'; import MasterItem from '../MasterItem'; import MasterDrawer from '../MasterDrawer'; -import i18next from 'i18next'; const TABLE_HEADERS = ['name', 'currentJob', 'phone', 'actions']; diff --git a/src/components/Orders/Orders.tsx b/src/components/Orders/Orders.tsx index 1e9f258..0c1ad8e 100644 --- a/src/components/Orders/Orders.tsx +++ b/src/components/Orders/Orders.tsx @@ -1,8 +1,9 @@ import { Box, Heading, Table, Thead, Tbody, Tr, Th } from '@chakra-ui/react'; import React from 'react'; +import i18next from 'i18next'; + import { ordersData } from '../../mocks'; import OrderItem from '../OrderItem'; -import i18next from 'i18next'; const Orders = () => { const TABLE_HEADERS = [ 'carNumber', diff --git a/src/components/landing/BenefitsSection/BenefitsSection.tsx b/src/components/landing/BenefitsSection/BenefitsSection.tsx index 9eca7e8..dc74dbf 100644 --- a/src/components/landing/BenefitsSection/BenefitsSection.tsx +++ b/src/components/landing/BenefitsSection/BenefitsSection.tsx @@ -7,7 +7,9 @@ import { MdHandshake, } from 'react-icons/md'; import { Heading, HStack, List, Text, VStack } from '@chakra-ui/react'; + import { CtaButton, PageSection } from '../'; + import { ListItem } from './ListItem'; export const BenefitsSection: FC = () => { diff --git a/src/components/landing/CtaButton/CtaButton.tsx b/src/components/landing/CtaButton/CtaButton.tsx index c4681fa..cf5df8d 100644 --- a/src/components/landing/CtaButton/CtaButton.tsx +++ b/src/components/landing/CtaButton/CtaButton.tsx @@ -2,6 +2,7 @@ import React, { FC } from 'react'; import { useTranslation } from 'react-i18next'; import { Link as RouterLink } from 'react-router-dom'; import { ButtonProps, Button } from '@chakra-ui/react'; + import { URLs } from '../../../__data__/urls'; export const CtaButton: FC = (props) => { diff --git a/src/components/landing/Footer/Footer.tsx b/src/components/landing/Footer/Footer.tsx index 2ac9ec8..f483994 100644 --- a/src/components/landing/Footer/Footer.tsx +++ b/src/components/landing/Footer/Footer.tsx @@ -2,7 +2,9 @@ import React, { FC } from 'react'; import { useTranslation } from 'react-i18next'; import { Link, List, ListItem } from '@chakra-ui/react'; import { Link as RouterLink } from 'react-router-dom'; + import { SiteLogo, PageSection } from '../'; + import { Copyright } from './Copyright'; export const Footer: FC = () => { diff --git a/src/components/landing/HeroSection/HeroSection.tsx b/src/components/landing/HeroSection/HeroSection.tsx index 6f8bc54..9ae61c9 100644 --- a/src/components/landing/HeroSection/HeroSection.tsx +++ b/src/components/landing/HeroSection/HeroSection.tsx @@ -1,6 +1,7 @@ import React, { FC } from 'react'; import { useTranslation } from 'react-i18next'; import { Box, Heading, Text, Center, VStack, BoxProps } from '@chakra-ui/react'; + import { DemoVideoPosterImg } from '../../../assets/images'; import { CtaButton, SiteLogo, PageSection } from '../'; diff --git a/src/components/landing/SiteLogo/SiteLogo.tsx b/src/components/landing/SiteLogo/SiteLogo.tsx index efb1936..b56b5e8 100644 --- a/src/components/landing/SiteLogo/SiteLogo.tsx +++ b/src/components/landing/SiteLogo/SiteLogo.tsx @@ -1,6 +1,7 @@ import React, { FC } from 'react'; import { useTranslation } from 'react-i18next'; import { Image } from '@chakra-ui/react'; + import { LogoSvg } from '../../../assets/icons'; export const SiteLogo: FC = () => { diff --git a/src/components/landing/SocialProofSection/ReviewsSlider/ReviewsSlider.tsx b/src/components/landing/SocialProofSection/ReviewsSlider/ReviewsSlider.tsx index 756a9f5..9f6f56b 100644 --- a/src/components/landing/SocialProofSection/ReviewsSlider/ReviewsSlider.tsx +++ b/src/components/landing/SocialProofSection/ReviewsSlider/ReviewsSlider.tsx @@ -8,8 +8,10 @@ import { Tabs, Text, } from '@chakra-ui/react'; + import { mockReview } from '../../../../mocks/landing'; import { Review } from '../../../../models'; + import { ReviewCard } from './ReviewCard'; const SLIDE_CHANGE_INTERVAL = 5000; diff --git a/src/components/landing/SocialProofSection/SocialProofSection.tsx b/src/components/landing/SocialProofSection/SocialProofSection.tsx index 7357eb5..fd49911 100644 --- a/src/components/landing/SocialProofSection/SocialProofSection.tsx +++ b/src/components/landing/SocialProofSection/SocialProofSection.tsx @@ -1,7 +1,9 @@ import React, { FC } from 'react'; import { useTranslation } from 'react-i18next'; import { Heading, HStack } from '@chakra-ui/react'; + import { CtaButton, PageSection } from '../'; + import { ReviewsSlider } from './ReviewsSlider'; export const SocialProofSection: FC = () => { diff --git a/src/containers/LandingThemeProvider/LandingThemeProvider.tsx b/src/containers/LandingThemeProvider/LandingThemeProvider.tsx index c52bf1d..12483f0 100644 --- a/src/containers/LandingThemeProvider/LandingThemeProvider.tsx +++ b/src/containers/LandingThemeProvider/LandingThemeProvider.tsx @@ -1,5 +1,6 @@ import React, { FC, PropsWithChildren } from 'react'; import { ChakraProvider } from '@chakra-ui/react'; + import { default as landingTheme } from './theme-config'; import Fonts from './Fonts'; diff --git a/src/index.tsx b/src/index.tsx index 405968a..a87c1e2 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -2,9 +2,10 @@ import React from 'react'; import ReactDOM from 'react-dom/client'; import { i18nextReactInitConfig } from '@brojs/cli'; -import App from './app'; import i18next from 'i18next'; +import App from './app'; + i18next.t = i18next.t.bind(i18next); const i18nextPromise = i18nextReactInitConfig(i18next); export default () => ; diff --git a/src/pages/arm/index.tsx b/src/pages/arm/index.tsx index 02d21c4..dda1851 100644 --- a/src/pages/arm/index.tsx +++ b/src/pages/arm/index.tsx @@ -1,4 +1,5 @@ import React, { useState } from 'react'; + import LayoutArm from '../../components/LayoutArm'; const Page = () => { diff --git a/src/pages/landing/index.tsx b/src/pages/landing/index.tsx index 0e86141..62155e7 100644 --- a/src/pages/landing/index.tsx +++ b/src/pages/landing/index.tsx @@ -1,5 +1,6 @@ import React, { FC } from 'react'; import { Container, VStack } from '@chakra-ui/react'; + import { BenefitsSection, Footer, diff --git a/src/pages/notFound/notFound.tsx b/src/pages/notFound/notFound.tsx index 2a3b25b..cebfe42 100644 --- a/src/pages/notFound/notFound.tsx +++ b/src/pages/notFound/notFound.tsx @@ -2,9 +2,10 @@ import React from 'react'; import { Text, Button, Center, VStack, Heading } from '@chakra-ui/react'; import { Link } from 'react-router-dom'; import { Player } from '@lottiefiles/react-lottie-player'; -import animate from '../../assets/animation/notFound.json'; import i18next from 'i18next'; +import animate from '../../assets/animation/notFound.json'; + const NotFound = () => { return (
diff --git a/src/pages/order-form/index.tsx b/src/pages/order-form/index.tsx index 4b6617d..a6f19cb 100644 --- a/src/pages/order-form/index.tsx +++ b/src/pages/order-form/index.tsx @@ -1,6 +1,7 @@ import React from 'react'; import { Link as RouterLink } from 'react-router-dom'; import { Button } from '@chakra-ui/react'; + import { URLs } from '../../__data__/urls'; import { mockOrder } from '../../mocks/landing'; diff --git a/src/routes.tsx b/src/routes.tsx index aa18c0b..4815fc4 100644 --- a/src/routes.tsx +++ b/src/routes.tsx @@ -1,5 +1,6 @@ import React, { lazy, Suspense } from 'react'; import { Routes, Route } from 'react-router-dom'; + import { PageSpinner } from './components'; import Arm from './pages/arm'; import { URLs } from './__data__/urls';