diff --git a/frontend/.eslintignore b/.eslintignore similarity index 100% rename from frontend/.eslintignore rename to .eslintignore diff --git a/frontend/.eslintrc.yml b/.eslintrc.yml similarity index 92% rename from frontend/.eslintrc.yml rename to .eslintrc.yml index 98ec1fc..0f7f91a 100644 --- a/frontend/.eslintrc.yml +++ b/.eslintrc.yml @@ -15,4 +15,4 @@ plugins: rules: import/extensions: 0 no-console: 0 - + react/prop-types: 0 diff --git a/.github/workflows/nodeci.yml b/.github/workflows/nodeci.yml index a7772a1..bd779dc 100644 --- a/.github/workflows/nodeci.yml +++ b/.github/workflows/nodeci.yml @@ -25,6 +25,6 @@ jobs: - name: Install run: make install - name: Run linter - run: make lint + run: make lint-frontend # - name: Run tests # run: make test diff --git a/Makefile b/Makefile index 8128d20..ee46014 100644 --- a/Makefile +++ b/Makefile @@ -12,3 +12,6 @@ deploy: lint-frontend: make -C frontend lint + +install: + make -C frontend install diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 583eefb..84758ef 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -11,6 +11,7 @@ "axios": "^0.27.2", "bootstrap": "^5.1.3", "formik": "^2.2.9", + "i18next": "^23.2.8", "react": "^18.2.0", "react-bootstrap": "^2.4.0", "react-dom": "^18.2.0", @@ -1810,11 +1811,11 @@ } }, "node_modules/@babel/runtime": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.6.tgz", - "integrity": "sha512-t9wi7/AW6XtKahAe20Yw0/mMljKq0B1r2fPdvaAdV/KPDZewFXdaaa6K7lxmZBZ8FBNpCiAT6iHPmd6QO9bKfQ==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.6.tgz", + "integrity": "sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==", "dependencies": { - "regenerator-runtime": "^0.13.4" + "regenerator-runtime": "^0.13.11" }, "engines": { "node": ">=6.9.0" @@ -5055,9 +5056,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001361", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001361.tgz", - "integrity": "sha512-ybhCrjNtkFji1/Wto6SSJKkWk6kZgVQsDq5QI83SafsF6FXv2JB4df9eEdH6g8sdGgqTXrFLjAxqBGgYoU3azQ==", + "version": "1.0.30001515", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001515.tgz", + "integrity": "sha512-eEFDwUOZbE24sb+Ecsx3+OvNETqjWIdabMy52oOkIgcUtAsQifjUG9q4U9dgTHJM2mfk4uEPxc0+xuFdJ629QA==", "funding": [ { "type": "opencollective", @@ -5066,6 +5067,10 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ] }, @@ -8455,9 +8460,9 @@ } }, "node_modules/i18next": { - "version": "21.8.11", - "resolved": "https://registry.npmjs.org/i18next/-/i18next-21.8.11.tgz", - "integrity": "sha512-+s8N6kQShwNK+Ua/+VsS/Sji24NUJJLBk9QIucygj1f97f4hPNDWmLP9fQCI4d5+XLfXJ3JctX4g+zJla967Vw==", + "version": "23.2.8", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.2.8.tgz", + "integrity": "sha512-wU0pMlJ91ZbB89i77G3YQ11/pBQrzgWpxJYl7HFyA9aU9v3aHMI/oBKQmAJNURr0A8cLG4EHjgSMK8IqQTp4PQ==", "funding": [ { "type": "individual", @@ -8472,9 +8477,8 @@ "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project" } ], - "peer": true, "dependencies": { - "@babel/runtime": "^7.17.2" + "@babel/runtime": "^7.22.5" } }, "node_modules/iconv-lite": { @@ -14039,9 +14043,9 @@ } }, "node_modules/regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" }, "node_modules/regenerator-transform": { "version": "0.15.0", @@ -17924,11 +17928,11 @@ } }, "@babel/runtime": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.6.tgz", - "integrity": "sha512-t9wi7/AW6XtKahAe20Yw0/mMljKq0B1r2fPdvaAdV/KPDZewFXdaaa6K7lxmZBZ8FBNpCiAT6iHPmd6QO9bKfQ==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.6.tgz", + "integrity": "sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==", "requires": { - "regenerator-runtime": "^0.13.4" + "regenerator-runtime": "^0.13.11" } }, "@babel/runtime-corejs3": { @@ -20288,9 +20292,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001361", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001361.tgz", - "integrity": "sha512-ybhCrjNtkFji1/Wto6SSJKkWk6kZgVQsDq5QI83SafsF6FXv2JB4df9eEdH6g8sdGgqTXrFLjAxqBGgYoU3azQ==" + "version": "1.0.30001515", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001515.tgz", + "integrity": "sha512-eEFDwUOZbE24sb+Ecsx3+OvNETqjWIdabMy52oOkIgcUtAsQifjUG9q4U9dgTHJM2mfk4uEPxc0+xuFdJ629QA==" }, "case-sensitive-paths-webpack-plugin": { "version": "2.4.0", @@ -22742,12 +22746,11 @@ "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==" }, "i18next": { - "version": "21.8.11", - "resolved": "https://registry.npmjs.org/i18next/-/i18next-21.8.11.tgz", - "integrity": "sha512-+s8N6kQShwNK+Ua/+VsS/Sji24NUJJLBk9QIucygj1f97f4hPNDWmLP9fQCI4d5+XLfXJ3JctX4g+zJla967Vw==", - "peer": true, + "version": "23.2.8", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.2.8.tgz", + "integrity": "sha512-wU0pMlJ91ZbB89i77G3YQ11/pBQrzgWpxJYl7HFyA9aU9v3aHMI/oBKQmAJNURr0A8cLG4EHjgSMK8IqQTp4PQ==", "requires": { - "@babel/runtime": "^7.17.2" + "@babel/runtime": "^7.22.5" } }, "iconv-lite": { @@ -26625,9 +26628,9 @@ } }, "regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" }, "regenerator-transform": { "version": "0.15.0", diff --git a/frontend/package.json b/frontend/package.json index 183db3e..59748e0 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -7,6 +7,7 @@ "axios": "^0.27.2", "bootstrap": "^5.1.3", "formik": "^2.2.9", + "i18next": "^23.2.8", "react": "^18.2.0", "react-bootstrap": "^2.4.0", "react-dom": "^18.2.0", diff --git a/frontend/src/init.jsx b/frontend/src/init.jsx index bcf060d..5632269 100644 --- a/frontend/src/init.jsx +++ b/frontend/src/init.jsx @@ -1,13 +1,11 @@ // @ts-check import React from 'react'; -import i18next from 'i18next'; import { I18nextProvider, initReactI18next } from 'react-i18next'; - +import i18next from 'i18next'; import App from './components/App.jsx'; import resources from './locales/index.js'; - export default async () => { const i18n = i18next.createInstance(); diff --git a/frontend/src/locales/en.js b/frontend/src/locales/en.js index 9e4a763..07e6a62 100644 --- a/frontend/src/locales/en.js +++ b/frontend/src/locales/en.js @@ -1,3 +1,4 @@ +/* eslint-disable import/no-anonymous-default-export */ export default { translation: { loading: 'Loading...', diff --git a/frontend/src/locales/index.js b/frontend/src/locales/index.js index 9217017..1971889 100644 --- a/frontend/src/locales/index.js +++ b/frontend/src/locales/index.js @@ -1,3 +1,4 @@ +/* eslint-disable import/no-anonymous-default-export */ // @ts-check import en from './en.js'; diff --git a/frontend/src/locales/ru.js b/frontend/src/locales/ru.js index 73dd5e4..4c55ffe 100644 --- a/frontend/src/locales/ru.js +++ b/frontend/src/locales/ru.js @@ -1,3 +1,4 @@ +/* eslint-disable import/no-anonymous-default-export */ export default { translation: { loading: 'Загрузка...', diff --git a/frontend/src/routes.js b/frontend/src/routes.js index a47c8de..ac217ee 100644 --- a/frontend/src/routes.js +++ b/frontend/src/routes.js @@ -1,3 +1,4 @@ +/* eslint-disable import/no-anonymous-default-export */ // @ts-check const apiPath = '/api/v1';