diff --git a/.gitignore b/.gitignore index 9963a91..c4a1f8e 100644 --- a/.gitignore +++ b/.gitignore @@ -18,6 +18,7 @@ node_modules .env.test.local .env.production.local .env +.next npm-debug.log* yarn-debug.log* diff --git a/next-env.d.ts b/next-env.d.ts new file mode 100644 index 0000000..a4a7b3f --- /dev/null +++ b/next-env.d.ts @@ -0,0 +1,5 @@ +/// +/// + +// NOTE: This file should not be edited +// see https://nextjs.org/docs/pages/building-your-application/configuring/typescript for more information. diff --git a/next.config.js b/next.config.js new file mode 100644 index 0000000..69deda1 --- /dev/null +++ b/next.config.js @@ -0,0 +1,29 @@ +/** @type {import('next').NextConfig} */ +const nextConfig = { + reactStrictMode: true, + webpack: (config) => { + const fileLoaderRule = config.module.rules.find((rule) => + rule.test?.test?.(".svg") + ); + + config.module.rules.push( + // Reapply the existing rule, but only for svg imports ending in ?url + { + ...fileLoaderRule, + test: /\.svg$/i, + resourceQuery: /url/ // *.svg?url + }, + // Convert all other *.svg imports to React components + { + test: /\.svg$/i, + issuer: fileLoaderRule.issuer, + resourceQuery: { not: [...fileLoaderRule.resourceQuery.not, /url/] }, // exclude if *.svg?url + use: ["@svgr/webpack"] + } + ); + + return config; + }, +} + +export default nextConfig; diff --git a/package-lock.json b/package-lock.json index afb9d8f..849b027 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,10 +23,10 @@ "highcharts-react-official": "^3.2.1", "http-proxy-middleware": "^2.0.6", "nanoid": "^5.0.1", - "react": "^18.2.0", - "react-dom": "^18.2.0", + "next": "^14.2.12", + "react": "^18.3.1", + "react-dom": "^18.3.1", "react-json-view-lite": "^1.1.0", - "react-router-dom": "^6.16.0", "react-scripts": "5.0.1", "sass": "^1.68.0", "socket.io-client": "^4.7.5", @@ -3519,6 +3519,146 @@ "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" }, + "node_modules/@next/env": { + "version": "14.2.12", + "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.12.tgz", + "integrity": "sha512-3fP29GIetdwVIfIRyLKM7KrvJaqepv+6pVodEbx0P5CaMLYBtx+7eEg8JYO5L9sveJO87z9eCReceZLi0hxO1Q==" + }, + "node_modules/@next/swc-darwin-arm64": { + "version": "14.2.12", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.12.tgz", + "integrity": "sha512-crHJ9UoinXeFbHYNok6VZqjKnd8rTd7K3Z2zpyzF1ch7vVNKmhjv/V7EHxep3ILoN8JB9AdRn/EtVVyG9AkCXw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-x64": { + "version": "14.2.12", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.12.tgz", + "integrity": "sha512-JbEaGbWq18BuNBO+lCtKfxl563Uw9oy2TodnN2ioX00u7V1uzrsSUcg3Ep9ce+P0Z9es+JmsvL2/rLphz+Frcw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "14.2.12", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.12.tgz", + "integrity": "sha512-qBy7OiXOqZrdp88QEl2H4fWalMGnSCrr1agT/AVDndlyw2YJQA89f3ttR/AkEIP9EkBXXeGl6cC72/EZT5r6rw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "14.2.12", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.12.tgz", + "integrity": "sha512-EfD9L7o9biaQxjwP1uWXnk3vYZi64NVcKUN83hpVkKocB7ogJfyH2r7o1pPnMtir6gHZiGCeHKagJ0yrNSLNHw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "14.2.12", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.12.tgz", + "integrity": "sha512-iQ+n2pxklJew9IpE47hE/VgjmljlHqtcD5UhZVeHICTPbLyrgPehaKf2wLRNjYH75udroBNCgrSSVSVpAbNoYw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "14.2.12", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.12.tgz", + "integrity": "sha512-rFkUkNwcQ0ODn7cxvcVdpHlcOpYxMeyMfkJuzaT74xjAa5v4fxP4xDk5OoYmPi8QNLDs3UgZPMSBmpBuv9zKWA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "14.2.12", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.12.tgz", + "integrity": "sha512-PQFYUvwtHs/u0K85SG4sAdDXYIPXpETf9mcEjWc0R4JmjgMKSDwIU/qfZdavtP6MPNiMjuKGXHCtyhR/M5zo8g==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-ia32-msvc": { + "version": "14.2.12", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.12.tgz", + "integrity": "sha512-FAj2hMlcbeCV546eU2tEv41dcJb4NeqFlSXU/xL/0ehXywHnNpaYajOUvn3P8wru5WyQe6cTZ8fvckj/2XN4Vw==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-x64-msvc": { + "version": "14.2.12", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.12.tgz", + "integrity": "sha512-yu8QvV53sBzoIVRHsxCHqeuS8jYq6Lrmdh0briivuh+Brsp6xjg80MAozUsBTAV9KNmY08KlX0KYTWz1lbPzEg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { "version": "5.1.1-v1", "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", @@ -3628,14 +3768,6 @@ } } }, - "node_modules/@remix-run/router": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.9.0.tgz", - "integrity": "sha512-bV63itrKBC0zdT27qYm6SDZHlkXwFL1xMBuhkn+X7l0+IIhNaH5wuuvZKp6eKhCD4KFhujhfhCT1YxXW6esUIA==", - "engines": { - "node": ">=14.0.0" - } - }, "node_modules/@rollup/plugin-babel": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", @@ -3959,6 +4091,20 @@ "url": "https://github.com/sponsors/gregberge" } }, + "node_modules/@swc/counter": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", + "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==" + }, + "node_modules/@swc/helpers": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.5.tgz", + "integrity": "sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==", + "dependencies": { + "@swc/counter": "^0.1.3", + "tslib": "^2.4.0" + } + }, "node_modules/@testing-library/dom": { "version": "9.3.3", "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-9.3.3.tgz", @@ -5958,6 +6104,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, "node_modules/bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", @@ -6026,9 +6183,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001546", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001546.tgz", - "integrity": "sha512-zvtSJwuQFpewSyRrI3AsftF6rM0X80mZkChIt1spBGEvRglCrjTniXvinc8JKRoqTwXAgvqTImaN9igfSMtUBw==", + "version": "1.0.30001660", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001660.tgz", + "integrity": "sha512-GacvNTTuATm26qC74pt+ad1fW15mlQ/zuTzzY1ZoIzECTP8HURDfF43kNxPgf7H1jmelCBQTTbBNxdSXOA7Bqg==", "funding": [ { "type": "opencollective", @@ -6161,6 +6318,11 @@ "node": ">=0.10.0" } }, + "node_modules/client-only": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" + }, "node_modules/cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -12940,6 +13102,55 @@ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, + "node_modules/next": { + "version": "14.2.12", + "resolved": "https://registry.npmjs.org/next/-/next-14.2.12.tgz", + "integrity": "sha512-cDOtUSIeoOvt1skKNihdExWMTybx3exnvbFbb9ecZDIxlvIbREQzt9A5Km3Zn3PfU+IFjyYGsHS+lN9VInAGKA==", + "dependencies": { + "@next/env": "14.2.12", + "@swc/helpers": "0.5.5", + "busboy": "1.6.0", + "caniuse-lite": "^1.0.30001579", + "graceful-fs": "^4.2.11", + "postcss": "8.4.31", + "styled-jsx": "5.1.1" + }, + "bin": { + "next": "dist/bin/next" + }, + "engines": { + "node": ">=18.17.0" + }, + "optionalDependencies": { + "@next/swc-darwin-arm64": "14.2.12", + "@next/swc-darwin-x64": "14.2.12", + "@next/swc-linux-arm64-gnu": "14.2.12", + "@next/swc-linux-arm64-musl": "14.2.12", + "@next/swc-linux-x64-gnu": "14.2.12", + "@next/swc-linux-x64-musl": "14.2.12", + "@next/swc-win32-arm64-msvc": "14.2.12", + "@next/swc-win32-ia32-msvc": "14.2.12", + "@next/swc-win32-x64-msvc": "14.2.12" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.1.0", + "@playwright/test": "^1.41.2", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "sass": "^1.3.0" + }, + "peerDependenciesMeta": { + "@opentelemetry/api": { + "optional": true + }, + "@playwright/test": { + "optional": true + }, + "sass": { + "optional": true + } + } + }, "node_modules/no-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", @@ -15045,9 +15256,9 @@ } }, "node_modules/react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", "dependencies": { "loose-envify": "^1.1.0" }, @@ -15194,15 +15405,15 @@ } }, "node_modules/react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", "dependencies": { "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" + "scheduler": "^0.23.2" }, "peerDependencies": { - "react": "^18.2.0" + "react": "^18.3.1" } }, "node_modules/react-error-overlay": { @@ -15234,36 +15445,6 @@ "node": ">=0.10.0" } }, - "node_modules/react-router": { - "version": "6.16.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.16.0.tgz", - "integrity": "sha512-VT4Mmc4jj5YyjpOi5jOf0I+TYzGpvzERy4ckNSvSh2RArv8LLoCxlsZ2D+tc7zgjxcY34oTz2hZaeX5RVprKqA==", - "dependencies": { - "@remix-run/router": "1.9.0" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "react": ">=16.8" - } - }, - "node_modules/react-router-dom": { - "version": "6.16.0", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.16.0.tgz", - "integrity": "sha512-aTfBLv3mk/gaKLxgRDUPbPw+s4Y/O+ma3rEN1u8EgEpLpPe6gNjIsWt9rxushMHHMb7mSwxRGdGlGdvmFsyPIg==", - "dependencies": { - "@remix-run/router": "1.9.0", - "react-router": "6.16.0" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "react": ">=16.8", - "react-dom": ">=16.8" - } - }, "node_modules/react-scripts": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.1.tgz", @@ -15915,9 +16096,9 @@ } }, "node_modules/scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", "dependencies": { "loose-envify": "^1.1.0" } @@ -16486,6 +16667,14 @@ "node": ">= 0.4" } }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -16675,6 +16864,28 @@ "webpack": "^5.0.0" } }, + "node_modules/styled-jsx": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz", + "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==", + "dependencies": { + "client-only": "0.0.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "peerDependencies": { + "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "babel-plugin-macros": { + "optional": true + } + } + }, "node_modules/stylehacks": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", diff --git a/package.json b/package.json index b8fa21d..912888f 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,7 @@ "name": "zano-explorer", "version": "0.1.0", "private": true, + "type": "module", "dependencies": { "@testing-library/jest-dom": "^5.17.0", "@testing-library/react": "^13.4.0", @@ -17,10 +18,10 @@ "highcharts-react-official": "^3.2.1", "http-proxy-middleware": "^2.0.6", "nanoid": "^5.0.1", - "react": "^18.2.0", - "react-dom": "^18.2.0", + "next": "^14.2.12", + "react": "^18.3.1", + "react-dom": "^18.3.1", "react-json-view-lite": "^1.1.0", - "react-router-dom": "^6.16.0", "react-scripts": "5.0.1", "sass": "^1.68.0", "socket.io-client": "^4.7.5", @@ -30,11 +31,11 @@ }, "scripts": { "postinstall": "cd server && npm i", - "client": "react-scripts start", + "client": "next dev", "build": "react-scripts build", "test": "react-scripts test", "eject": "react-scripts eject", - "dev": "concurrently \"npx nodemon --exec tsx ./server/server.ts\" \"npm run client\"", + "dev": "npx nodemon --exec tsx ./server/server.ts", "start": "tsx ./server/server.ts" }, "eslintConfig": { diff --git a/server/server.ts b/server/server.ts index 5b4ca52..5cd09ce 100644 --- a/server/server.ts +++ b/server/server.ts @@ -22,13 +22,18 @@ import Pool from "./schemes/Pool"; import Asset, { IAsset } from "./schemes/Asset"; import { ITransaction } from "./schemes/Transaction"; import BigNumber from "bignumber.js"; +import next from "next"; import { rateLimit } from 'express-rate-limit'; // @ts-ignore const __dirname = import.meta.dirname; +const dev = process.env.NODE_ENV !== 'production'; +const nextApp = next({ dev }); +const handle = nextApp.getRequestHandler(); const app = express(); const server = http.createServer(app); + export const io = new Server(server, { transports: ['websocket', 'polling'] }); @@ -40,6 +45,9 @@ const requestsLimiter = rateLimit({ }); (async () => { + + await nextApp.prepare(); + await initDB(); await sequelize.authenticate(); await sequelize.sync(); @@ -50,7 +58,11 @@ const requestsLimiter = rateLimit({ io.engine.on('headers', (headers, req) => { headers['Access-Control-Allow-Origin'] = config.frontend_api - }) + }); + + app.all('*', (req, res) => { + return handle(req, res); + }); app.use(express.static('dist')); app.use(function (req, res, next) { @@ -1121,9 +1133,7 @@ const requestsLimiter = rateLimit({ let localTr: any; while (!!(localTr = bl.transactions_details.splice(0, 1)[0])) { - console.time('txs details call'); let response = await get_tx_details(localTr.id); - console.timeEnd('txs details call'); let tx_info = response.data.result.tx_info; diff --git a/src/App.tsx b/src/App.tsx deleted file mode 100644 index 24b6c60..0000000 --- a/src/App.tsx +++ /dev/null @@ -1,42 +0,0 @@ -import React, { Suspense } from "react"; -import { BrowserRouter as Router, Routes, Route, Navigate } from "react-router-dom"; -import Block from "./pages/Block/Block"; -import { NET_MODE } from "./config/config"; - -const Blockchain = React.lazy(() => import("./pages/Blockchain/Blockchain")); -const AltBlocks = React.lazy(() => import("./pages/AltBlocks/AltBlocks")); -const Aliases = React.lazy(() => import("./pages/Aliases/Aliases")); -const API = React.lazy(() => import("./pages/API/API")); -const Transaction = React.lazy(() => import("./pages/Transaction/Transaction")); -const Charts = React.lazy(() => import("./pages/Charts/Charts")); -const ChartsPage = React.lazy(() => import("./pages/ChartPage/ChartPage")); -const Assets = React.lazy(() => import("./pages/Assets/Assets")); -const Asset = React.lazy(() => import("./pages/Asset/Asset")); - -function App() { - return ( - - }> - - } /> - } /> - } /> - } /> - } /> - } /> - } /> - {/* } /> - } /> */} - {/* {NET_MODE === "TEST" && - } /> - } */} - } /> - } /> - {/* } /> */} - - - - ); -} - -export default App; diff --git a/src/components/UI/Button/Button.scss b/src/components/UI/Button/Button.module.scss similarity index 100% rename from src/components/UI/Button/Button.scss rename to src/components/UI/Button/Button.module.scss diff --git a/src/components/UI/Button/Button.tsx b/src/components/UI/Button/Button.tsx index ca54366..65dfe45 100644 --- a/src/components/UI/Button/Button.tsx +++ b/src/components/UI/Button/Button.tsx @@ -1,4 +1,4 @@ -import "./Button.scss"; +import styles from "./Button.module.scss"; interface ButtonProps extends React.DetailedHTMLProps, HTMLButtonElement> { wrapper?: boolean @@ -9,7 +9,7 @@ function Button(props: ButtonProps) { return ( ); diff --git a/src/components/UI/Input/Input.scss b/src/components/UI/Input/Input.module.scss similarity index 100% rename from src/components/UI/Input/Input.scss rename to src/components/UI/Input/Input.module.scss diff --git a/src/components/UI/Input/Input.tsx b/src/components/UI/Input/Input.tsx index cd1eaf5..2e7019d 100644 --- a/src/components/UI/Input/Input.tsx +++ b/src/components/UI/Input/Input.tsx @@ -1,4 +1,4 @@ -import "./Input.scss"; +import styles from "./Input.module.scss"; interface InputProps extends React.HTMLProps { onEnterPress?: () => void; @@ -19,7 +19,7 @@ function Input(props: InputProps) { ) } diff --git a/src/components/UI/JsonViewStyled/JsonViewStyled.scss b/src/components/UI/JsonViewStyled/JsonViewStyled.module.scss similarity index 100% rename from src/components/UI/JsonViewStyled/JsonViewStyled.scss rename to src/components/UI/JsonViewStyled/JsonViewStyled.module.scss diff --git a/src/components/UI/JsonViewStyled/JsonViewStyled.tsx b/src/components/UI/JsonViewStyled/JsonViewStyled.tsx index 6216a87..a6f0594 100644 --- a/src/components/UI/JsonViewStyled/JsonViewStyled.tsx +++ b/src/components/UI/JsonViewStyled/JsonViewStyled.tsx @@ -1,4 +1,4 @@ -import "./JsonViewStyled.scss"; +import styles from "./JsonViewStyled.module.scss"; import { JsonView, darkStyles, Props } from "react-json-view-lite"; import 'react-json-view-lite/dist/index.css'; @@ -6,16 +6,14 @@ function JsonViewStyled(props: Props) { return ( ) } -export default JsonViewStyled; \ No newline at end of file +export default JsonViewStyled; diff --git a/src/components/UI/Preloader/Preloader.scss b/src/components/UI/Preloader/Preloader.module.scss similarity index 100% rename from src/components/UI/Preloader/Preloader.scss rename to src/components/UI/Preloader/Preloader.module.scss diff --git a/src/components/UI/Preloader/Preloader.tsx b/src/components/UI/Preloader/Preloader.tsx index a5a931c..025fd6a 100644 --- a/src/components/UI/Preloader/Preloader.tsx +++ b/src/components/UI/Preloader/Preloader.tsx @@ -1,11 +1,16 @@ -import "./Preloader.scss"; +import styles from "./Preloader.module.scss"; function Preloader(props: { className?: string }) { const { className } = props; return ( -
- ) +
+
+
+
+
+
+ ); } export default Preloader; \ No newline at end of file diff --git a/src/components/UI/Switch/Switch.scss b/src/components/UI/Switch/Switch.module.scss similarity index 100% rename from src/components/UI/Switch/Switch.scss rename to src/components/UI/Switch/Switch.module.scss diff --git a/src/components/UI/Switch/Switch.tsx b/src/components/UI/Switch/Switch.tsx index d957074..9ac12b3 100644 --- a/src/components/UI/Switch/Switch.tsx +++ b/src/components/UI/Switch/Switch.tsx @@ -1,5 +1,5 @@ import Button from "../Button/Button"; -import "./Switch.scss"; +import styles from "./Switch.module.scss"; import { Dispatch, SetStateAction } from "react"; interface SwitchProps { @@ -16,17 +16,17 @@ export default function Switch({ setIsFirstSelected }: SwitchProps) { return ( -
+
- {burgerOpened &&