From 4c24ab7da9ada79a5b35af44f16f1ae6425dfc83 Mon Sep 17 00:00:00 2001
From: Johnson Mao <86179381+JohnsonMao@users.noreply.github.com>
Date: Sat, 21 Dec 2024 21:27:16 +0800
Subject: [PATCH 1/5] refactor: no-use-before-define
---
pages/_app.jsx | 217 ++++++++++++++++++++++++-------------------------
1 file changed, 108 insertions(+), 109 deletions(-)
diff --git a/pages/_app.jsx b/pages/_app.jsx
index 4213763..cd50c25 100644
--- a/pages/_app.jsx
+++ b/pages/_app.jsx
@@ -34,89 +34,6 @@ const swrConfig = {
errorRetryCount: 0,
};
-const App = ({ Component, pageProps }) => {
- const router = useRouter();
- useEffect(() => {
- initGA('UA-181407006-3');
- // `routeChangeComplete` won't run for the first page load unless the query string is
- // hydrated later on, so here we log a page view if this is the first render and
- // there's no query string
- if (!router.asPath.includes('?')) {
- logPageView();
- }
- }, []);
-
- useEffect(() => {
- // Listen for page changes after a navigation or when the query changes
- router.events.on('routeChangeComplete', logPageView);
- return () => {
- router.events.off('routeChangeComplete', logPageView);
- };
- }, [router.events]);
-
- // const [mode, setMode] = useState("light");
- // Update the theme only if the mode changes
- // const theme = useMemo(() => themeFactory(mode), [mode]);
- return (
- <>
- {/* */}
-
-
- {/* */}
-
- {/* */}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- >
- );
-};
-
const ThemeComponentWrap = ({ pageProps, Component }) => {
const dispatch = useDispatch();
const searchParams = useSearchParams();
@@ -183,30 +100,28 @@ const ThemeComponentWrap = ({ pageProps, Component }) => {
width="300"
height="289"
/>
-
- {
- isComplete ?
-
+ {
+ isComplete ? (
+ <>
+
帳號已驗證成功,快來體驗平台的特色功能!
-
- :
-
+
+
+
+
+ >
+ ) : (
+ <>
+
我們會公開你的個人檔案,填寫完整的資料,才能讓其他夥伴們更了解你喔!
-
- }
-
-
- {
- isComplete ?
-
- :
- <>
+
+
- >
- }
-
+
+ >
+ )
+ }
@@ -235,4 +151,87 @@ const ThemeComponentWrap = ({ pageProps, Component }) => {
);
};
+const App = ({ Component, pageProps }) => {
+ const router = useRouter();
+ useEffect(() => {
+ initGA('UA-181407006-3');
+ // `routeChangeComplete` won't run for the first page load unless the query string is
+ // hydrated later on, so here we log a page view if this is the first render and
+ // there's no query string
+ if (!router.asPath.includes('?')) {
+ logPageView();
+ }
+ }, []);
+
+ useEffect(() => {
+ // Listen for page changes after a navigation or when the query changes
+ router.events.on('routeChangeComplete', logPageView);
+ return () => {
+ router.events.off('routeChangeComplete', logPageView);
+ };
+ }, [router.events]);
+
+ // const [mode, setMode] = useState("light");
+ // Update the theme only if the mode changes
+ // const theme = useMemo(() => themeFactory(mode), [mode]);
+ return (
+ <>
+ {/* */}
+
+
+ {/* */}
+
+ {/* */}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ >
+ );
+};
+
export default App;
From 7e8b5f6b47f9db68419953252cb68988ddd4a7a0 Mon Sep 17 00:00:00 2001
From: Johnson Mao <86179381+JohnsonMao@users.noreply.github.com>
Date: Sat, 21 Dec 2024 21:28:25 +0800
Subject: [PATCH 2/5] refactor: imports to use alias paths
---
pages/404.jsx | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/pages/404.jsx b/pages/404.jsx
index 1e55556..fee3452 100644
--- a/pages/404.jsx
+++ b/pages/404.jsx
@@ -5,11 +5,11 @@ import { Typography, Button, Paper } from '@mui/material';
import { FacebookRounded } from '@mui/icons-material';
import Chip from '@mui/material/Chip';
import { useRouter } from 'next/router';
-import Navigatin from '../shared/components/Navigation_v2';
-import Footer from '../shared/components/Footer_v2';
-import { COLOR_TABLE } from '../constants/notion';
-import { CATEGORIES } from '../constants/category';
-import RelatedResources from '../shared/components/RelatedResources';
+import Navigatin from '@/shared/components/Navigation_v2';
+import Footer from '@/shared/components/Footer_v2';
+import { COLOR_TABLE } from '@/constants/notion';
+import { CATEGORIES } from '@/constants/category';
+import RelatedResources from '@/shared/components/RelatedResources';
import { getRedirectionStorage } from '@/utils/storage';
const BodyWrapper = styled.div`
From 5cc26df7dfeebf425d100b92371b9035063e25be Mon Sep 17 00:00:00 2001
From: Johnson Mao <86179381+JohnsonMao@users.noreply.github.com>
Date: Sat, 21 Dec 2024 21:32:12 +0800
Subject: [PATCH 3/5] build: add ts dependencies and configure babel/eslint
---
.babelrc | 3 +-
.eslintrc.js | 32 ++++--
package.json | 3 +
yarn.lock | 319 ++++++++++++++++++++++++++++++++++++++++++++++++++-
4 files changed, 344 insertions(+), 13 deletions(-)
diff --git a/.babelrc b/.babelrc
index ca0cb10..fc5ee40 100644
--- a/.babelrc
+++ b/.babelrc
@@ -8,7 +8,8 @@
"importSource": "@emotion/react"
}
}
- ]
+ ],
+ "@babel/preset-typescript"
],
"plugins": [
[
diff --git a/.eslintrc.js b/.eslintrc.js
index 1c65dc3..dcd01ac 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -1,4 +1,5 @@
module.exports = {
+ parser: '@typescript-eslint/parser',
parserOptions: {
ecmaFeatures: {
jsx: true,
@@ -6,8 +7,8 @@ module.exports = {
ecmaVersion: 12,
sourceType: 'module',
},
- plugins: ['react', 'import', 'react-hooks'],
- extends: ['airbnb'],
+ plugins: ['react', 'import', 'react-hooks', '@typescript-eslint'],
+ extends: ['airbnb', 'plugin:@typescript-eslint/recommended'],
env: {
browser: true,
es2021: true,
@@ -21,21 +22,32 @@ module.exports = {
map: [['@', '.']],
},
node: {
- extensions: ['.js', '.jsx', '.ts', '.tsx']
+ extensions: ['.js', '.jsx', '.ts', '.tsx'],
},
},
},
rules: {
- "import/no-extraneous-dependencies": ["error", { devDependencies: ["./*.js"] }],
- 'import/extensions': ['error', 'ignorePackages', {
- js: 'never',
- jsx: 'never',
- ts: 'never',
- tsx: 'never',
- }],
+ 'import/no-extraneous-dependencies': [
+ 'error',
+ { devDependencies: ['./*.js'] },
+ ],
+ 'import/extensions': [
+ 'error',
+ 'ignorePackages',
+ {
+ js: 'never',
+ jsx: 'never',
+ ts: 'never',
+ tsx: 'never',
+ },
+ ],
'react/no-unescaped-entities': 'off',
'@next/next/no-page-custom-font': 'off',
'react/prop-types': [0],
+ 'react/jsx-filename-extension': [
+ 1,
+ { extensions: ['.js', '.jsx', '.ts', '.tsx'] },
+ ],
'react/jsx-props-no-spreading': [0],
'arrow-body-style': 0,
'no-console': 0,
diff --git a/package.json b/package.json
index cfe3b76..d28067d 100644
--- a/package.json
+++ b/package.json
@@ -71,11 +71,14 @@
"zod": "^3.22.4"
},
"devDependencies": {
+ "@babel/preset-typescript": "^7.26.0",
"@emotion/babel-plugin": "^11.9.2",
"@next/eslint-plugin-next": "^13.2.1",
"@tailwindcss/typography": "^0.5.15",
"@types/chrome": "^0.0.206",
"@types/react-dom": "^19.0.2",
+ "@typescript-eslint/eslint-plugin": "6",
+ "@typescript-eslint/parser": "6",
"autoprefixer": "^10.4.20",
"babel-plugin-import": "^1.13.8",
"eslint": "^8.35.0",
diff --git a/yarn.lock b/yarn.lock
index 9616948..92c0369 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -32,6 +32,15 @@
"@babel/highlight" "^7.24.7"
picocolors "^1.0.0"
+"@babel/code-frame@^7.25.9", "@babel/code-frame@^7.26.2":
+ version "7.26.2"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85"
+ integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==
+ dependencies:
+ "@babel/helper-validator-identifier" "^7.25.9"
+ js-tokens "^4.0.0"
+ picocolors "^1.0.0"
+
"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.24.7":
version "7.24.7"
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.24.7.tgz#d23bbea508c3883ba8251fb4164982c36ea577ed"
@@ -68,6 +77,17 @@
"@jridgewell/trace-mapping" "^0.3.25"
jsesc "^2.5.1"
+"@babel/generator@^7.26.3":
+ version "7.26.3"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.26.3.tgz#ab8d4360544a425c90c248df7059881f4b2ce019"
+ integrity sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ==
+ dependencies:
+ "@babel/parser" "^7.26.3"
+ "@babel/types" "^7.26.3"
+ "@jridgewell/gen-mapping" "^0.3.5"
+ "@jridgewell/trace-mapping" "^0.3.25"
+ jsesc "^3.0.2"
+
"@babel/helper-annotate-as-pure@^7.24.7":
version "7.24.7"
resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz#5373c7bc8366b12a033b4be1ac13a206c6656aab"
@@ -75,6 +95,13 @@
dependencies:
"@babel/types" "^7.24.7"
+"@babel/helper-annotate-as-pure@^7.25.9":
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz#d8eac4d2dc0d7b6e11fa6e535332e0d3184f06b4"
+ integrity sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==
+ dependencies:
+ "@babel/types" "^7.25.9"
+
"@babel/helper-builder-binary-assignment-operator-visitor@^7.24.7":
version "7.24.7"
resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz#37d66feb012024f2422b762b9b2a7cfe27c7fba3"
@@ -109,6 +136,19 @@
"@babel/helper-split-export-declaration" "^7.24.7"
semver "^6.3.1"
+"@babel/helper-create-class-features-plugin@^7.25.9":
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz#7644147706bb90ff613297d49ed5266bde729f83"
+ integrity sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.25.9"
+ "@babel/helper-member-expression-to-functions" "^7.25.9"
+ "@babel/helper-optimise-call-expression" "^7.25.9"
+ "@babel/helper-replace-supers" "^7.25.9"
+ "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9"
+ "@babel/traverse" "^7.25.9"
+ semver "^6.3.1"
+
"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.24.7":
version "7.24.7"
resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.24.7.tgz#be4f435a80dc2b053c76eeb4b7d16dd22cfc89da"
@@ -159,6 +199,14 @@
"@babel/traverse" "^7.24.7"
"@babel/types" "^7.24.7"
+"@babel/helper-member-expression-to-functions@^7.25.9":
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz#9dfffe46f727005a5ea29051ac835fb735e4c1a3"
+ integrity sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==
+ dependencies:
+ "@babel/traverse" "^7.25.9"
+ "@babel/types" "^7.25.9"
+
"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.24.7":
version "7.24.7"
resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz#f2f980392de5b84c3328fc71d38bd81bbb83042b"
@@ -167,6 +215,14 @@
"@babel/traverse" "^7.24.7"
"@babel/types" "^7.24.7"
+"@babel/helper-module-imports@^7.25.9":
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz#e7f8d20602ebdbf9ebbea0a0751fb0f2a4141715"
+ integrity sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==
+ dependencies:
+ "@babel/traverse" "^7.25.9"
+ "@babel/types" "^7.25.9"
+
"@babel/helper-module-transforms@^7.24.7":
version "7.24.7"
resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.24.7.tgz#31b6c9a2930679498db65b685b1698bfd6c7daf8"
@@ -178,6 +234,15 @@
"@babel/helper-split-export-declaration" "^7.24.7"
"@babel/helper-validator-identifier" "^7.24.7"
+"@babel/helper-module-transforms@^7.26.0":
+ version "7.26.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz#8ce54ec9d592695e58d84cd884b7b5c6a2fdeeae"
+ integrity sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==
+ dependencies:
+ "@babel/helper-module-imports" "^7.25.9"
+ "@babel/helper-validator-identifier" "^7.25.9"
+ "@babel/traverse" "^7.25.9"
+
"@babel/helper-optimise-call-expression@^7.24.7":
version "7.24.7"
resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz#8b0a0456c92f6b323d27cfd00d1d664e76692a0f"
@@ -185,11 +250,23 @@
dependencies:
"@babel/types" "^7.24.7"
+"@babel/helper-optimise-call-expression@^7.25.9":
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz#3324ae50bae7e2ab3c33f60c9a877b6a0146b54e"
+ integrity sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==
+ dependencies:
+ "@babel/types" "^7.25.9"
+
"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.24.7", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3":
version "7.24.7"
resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.7.tgz#98c84fe6fe3d0d3ae7bfc3a5e166a46844feb2a0"
integrity sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==
+"@babel/helper-plugin-utils@^7.25.9":
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz#9cbdd63a9443a2c92a725cca7ebca12cc8dd9f46"
+ integrity sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==
+
"@babel/helper-remap-async-to-generator@^7.24.7":
version "7.24.7"
resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.24.7.tgz#b3f0f203628522713849d49403f1a414468be4c7"
@@ -208,6 +285,15 @@
"@babel/helper-member-expression-to-functions" "^7.24.7"
"@babel/helper-optimise-call-expression" "^7.24.7"
+"@babel/helper-replace-supers@^7.25.9":
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.25.9.tgz#ba447224798c3da3f8713fc272b145e33da6a5c5"
+ integrity sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==
+ dependencies:
+ "@babel/helper-member-expression-to-functions" "^7.25.9"
+ "@babel/helper-optimise-call-expression" "^7.25.9"
+ "@babel/traverse" "^7.25.9"
+
"@babel/helper-simple-access@^7.24.7":
version "7.24.7"
resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz#bcade8da3aec8ed16b9c4953b74e506b51b5edb3"
@@ -224,6 +310,14 @@
"@babel/traverse" "^7.24.7"
"@babel/types" "^7.24.7"
+"@babel/helper-skip-transparent-expression-wrappers@^7.25.9":
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz#0b2e1b62d560d6b1954893fd2b705dc17c91f0c9"
+ integrity sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==
+ dependencies:
+ "@babel/traverse" "^7.25.9"
+ "@babel/types" "^7.25.9"
+
"@babel/helper-split-export-declaration@^7.24.7":
version "7.24.7"
resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz#83949436890e07fa3d6873c61a96e3bbf692d856"
@@ -236,16 +330,31 @@
resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz#4d2d0f14820ede3b9807ea5fc36dfc8cd7da07f2"
integrity sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==
+"@babel/helper-string-parser@^7.25.9":
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz#1aabb72ee72ed35789b4bbcad3ca2862ce614e8c"
+ integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==
+
"@babel/helper-validator-identifier@^7.24.7":
version "7.24.7"
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz#75b889cfaf9e35c2aaf42cf0d72c8e91719251db"
integrity sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==
+"@babel/helper-validator-identifier@^7.25.9":
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7"
+ integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==
+
"@babel/helper-validator-option@^7.24.7":
version "7.24.7"
resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.24.7.tgz#24c3bb77c7a425d1742eec8fb433b5a1b38e62f6"
integrity sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==
+"@babel/helper-validator-option@^7.25.9":
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz#86e45bd8a49ab7e03f276577f96179653d41da72"
+ integrity sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==
+
"@babel/helper-wrap-function@^7.24.7":
version "7.24.7"
resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.24.7.tgz#52d893af7e42edca7c6d2c6764549826336aae1f"
@@ -279,6 +388,13 @@
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.7.tgz#9a5226f92f0c5c8ead550b750f5608e766c8ce85"
integrity sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==
+"@babel/parser@^7.25.9", "@babel/parser@^7.26.3":
+ version "7.26.3"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.3.tgz#8c51c5db6ddf08134af1ddbacf16aaab48bac234"
+ integrity sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==
+ dependencies:
+ "@babel/types" "^7.26.3"
+
"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.24.7":
version "7.24.7"
resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.7.tgz#fd059fd27b184ea2b4c7e646868a9a381bbc3055"
@@ -379,6 +495,13 @@
dependencies:
"@babel/helper-plugin-utils" "^7.8.0"
+"@babel/plugin-syntax-jsx@^7.25.9":
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz#a34313a178ea56f1951599b929c1ceacee719290"
+ integrity sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.25.9"
+
"@babel/plugin-syntax-logical-assignment-operators@^7.10.4":
version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699"
@@ -435,6 +558,13 @@
dependencies:
"@babel/helper-plugin-utils" "^7.14.5"
+"@babel/plugin-syntax-typescript@^7.25.9":
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz#67dda2b74da43727cf21d46cf9afef23f4365399"
+ integrity sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.25.9"
+
"@babel/plugin-syntax-unicode-sets-regex@^7.18.6":
version "7.18.6"
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357"
@@ -632,6 +762,14 @@
"@babel/helper-plugin-utils" "^7.24.7"
"@babel/helper-simple-access" "^7.24.7"
+"@babel/plugin-transform-modules-commonjs@^7.25.9":
+ version "7.26.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz#8f011d44b20d02c3de44d8850d971d8497f981fb"
+ integrity sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==
+ dependencies:
+ "@babel/helper-module-transforms" "^7.26.0"
+ "@babel/helper-plugin-utils" "^7.25.9"
+
"@babel/plugin-transform-modules-systemjs@^7.24.7":
version "7.24.7"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.7.tgz#f8012316c5098f6e8dee6ecd58e2bc6f003d0ce7"
@@ -799,6 +937,17 @@
dependencies:
"@babel/helper-plugin-utils" "^7.24.7"
+"@babel/plugin-transform-typescript@^7.25.9":
+ version "7.26.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.26.3.tgz#3d6add9c78735623317387ee26d5ada540eee3fd"
+ integrity sha512-6+5hpdr6mETwSKjmJUdYw0EIkATiQhnELWlE3kJFBwSg/BGIVwVaVbX+gOXBCdc7Ln1RXZxyWGecIXhUfnl7oA==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.25.9"
+ "@babel/helper-create-class-features-plugin" "^7.25.9"
+ "@babel/helper-plugin-utils" "^7.25.9"
+ "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9"
+ "@babel/plugin-syntax-typescript" "^7.25.9"
+
"@babel/plugin-transform-unicode-escapes@^7.24.7":
version "7.24.7"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz#2023a82ced1fb4971630a2e079764502c4148e0e"
@@ -926,6 +1075,17 @@
"@babel/types" "^7.4.4"
esutils "^2.0.2"
+"@babel/preset-typescript@^7.26.0":
+ version "7.26.0"
+ resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.26.0.tgz#4a570f1b8d104a242d923957ffa1eaff142a106d"
+ integrity sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.25.9"
+ "@babel/helper-validator-option" "^7.25.9"
+ "@babel/plugin-syntax-jsx" "^7.25.9"
+ "@babel/plugin-transform-modules-commonjs" "^7.25.9"
+ "@babel/plugin-transform-typescript" "^7.25.9"
+
"@babel/regjsgen@^0.8.0":
version "0.8.0"
resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310"
@@ -954,6 +1114,15 @@
"@babel/parser" "^7.24.7"
"@babel/types" "^7.24.7"
+"@babel/template@^7.25.9":
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.9.tgz#ecb62d81a8a6f5dc5fe8abfc3901fc52ddf15016"
+ integrity sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==
+ dependencies:
+ "@babel/code-frame" "^7.25.9"
+ "@babel/parser" "^7.25.9"
+ "@babel/types" "^7.25.9"
+
"@babel/traverse@^7.24.7":
version "7.24.7"
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.7.tgz#de2b900163fa741721ba382163fe46a936c40cf5"
@@ -970,6 +1139,19 @@
debug "^4.3.1"
globals "^11.1.0"
+"@babel/traverse@^7.25.9":
+ version "7.26.4"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.26.4.tgz#ac3a2a84b908dde6d463c3bfa2c5fdc1653574bd"
+ integrity sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w==
+ dependencies:
+ "@babel/code-frame" "^7.26.2"
+ "@babel/generator" "^7.26.3"
+ "@babel/parser" "^7.26.3"
+ "@babel/template" "^7.25.9"
+ "@babel/types" "^7.26.3"
+ debug "^4.3.1"
+ globals "^11.1.0"
+
"@babel/types@^7.24.7", "@babel/types@^7.4.4":
version "7.24.7"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.7.tgz#6027fe12bc1aa724cd32ab113fb7f1988f1f66f2"
@@ -979,6 +1161,14 @@
"@babel/helper-validator-identifier" "^7.24.7"
to-fast-properties "^2.0.0"
+"@babel/types@^7.25.9", "@babel/types@^7.26.3":
+ version "7.26.3"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.3.tgz#37e79830f04c2b5687acc77db97fbc75fb81f3c0"
+ integrity sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==
+ dependencies:
+ "@babel/helper-string-parser" "^7.25.9"
+ "@babel/helper-validator-identifier" "^7.25.9"
+
"@codemirror/autocomplete@^6.0.0", "@codemirror/autocomplete@^6.3.2", "@codemirror/autocomplete@^6.4.0", "@codemirror/autocomplete@^6.7.1":
version "6.18.2"
resolved "https://registry.yarnpkg.com/@codemirror/autocomplete/-/autocomplete-6.18.2.tgz#bf3f15f1bf0fdfa3b4fac560e419adae1ece8a94"
@@ -1520,6 +1710,18 @@
dependencies:
eslint-visitor-keys "^3.3.0"
+"@eslint-community/eslint-utils@^4.4.0":
+ version "4.4.1"
+ resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz#d1145bf2c20132d6400495d6df4bf59362fd9d56"
+ integrity sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==
+ dependencies:
+ eslint-visitor-keys "^3.4.3"
+
+"@eslint-community/regexpp@^4.5.1":
+ version "4.12.1"
+ resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0"
+ integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==
+
"@eslint-community/regexpp@^4.6.1":
version "4.11.0"
resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.11.0.tgz#b0ffd0312b4a3fd2d6f77237e7248a5ad3a680ae"
@@ -2886,7 +3088,7 @@
"@types/react" "*"
hoist-non-react-statics "^3.3.0"
-"@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9":
+"@types/json-schema@^7.0.12", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9":
version "7.0.15"
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841"
integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==
@@ -2974,7 +3176,7 @@
dependencies:
"@types/node" "*"
-"@types/semver@^7.3.12":
+"@types/semver@^7.3.12", "@types/semver@^7.5.0":
version "7.5.8"
resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e"
integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==
@@ -2994,6 +3196,34 @@
resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.11.tgz#11af57b127e32487774841f7a4e54eab166d03c4"
integrity sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==
+"@typescript-eslint/eslint-plugin@6":
+ version "6.21.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz#30830c1ca81fd5f3c2714e524c4303e0194f9cd3"
+ integrity sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==
+ dependencies:
+ "@eslint-community/regexpp" "^4.5.1"
+ "@typescript-eslint/scope-manager" "6.21.0"
+ "@typescript-eslint/type-utils" "6.21.0"
+ "@typescript-eslint/utils" "6.21.0"
+ "@typescript-eslint/visitor-keys" "6.21.0"
+ debug "^4.3.4"
+ graphemer "^1.4.0"
+ ignore "^5.2.4"
+ natural-compare "^1.4.0"
+ semver "^7.5.4"
+ ts-api-utils "^1.0.1"
+
+"@typescript-eslint/parser@6":
+ version "6.21.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.21.0.tgz#af8fcf66feee2edc86bc5d1cf45e33b0630bf35b"
+ integrity sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==
+ dependencies:
+ "@typescript-eslint/scope-manager" "6.21.0"
+ "@typescript-eslint/types" "6.21.0"
+ "@typescript-eslint/typescript-estree" "6.21.0"
+ "@typescript-eslint/visitor-keys" "6.21.0"
+ debug "^4.3.4"
+
"@typescript-eslint/scope-manager@5.62.0":
version "5.62.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c"
@@ -3002,11 +3232,34 @@
"@typescript-eslint/types" "5.62.0"
"@typescript-eslint/visitor-keys" "5.62.0"
+"@typescript-eslint/scope-manager@6.21.0":
+ version "6.21.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz#ea8a9bfc8f1504a6ac5d59a6df308d3a0630a2b1"
+ integrity sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==
+ dependencies:
+ "@typescript-eslint/types" "6.21.0"
+ "@typescript-eslint/visitor-keys" "6.21.0"
+
+"@typescript-eslint/type-utils@6.21.0":
+ version "6.21.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz#6473281cfed4dacabe8004e8521cee0bd9d4c01e"
+ integrity sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==
+ dependencies:
+ "@typescript-eslint/typescript-estree" "6.21.0"
+ "@typescript-eslint/utils" "6.21.0"
+ debug "^4.3.4"
+ ts-api-utils "^1.0.1"
+
"@typescript-eslint/types@5.62.0":
version "5.62.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f"
integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==
+"@typescript-eslint/types@6.21.0":
+ version "6.21.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.21.0.tgz#205724c5123a8fef7ecd195075fa6e85bac3436d"
+ integrity sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==
+
"@typescript-eslint/typescript-estree@5.62.0":
version "5.62.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b"
@@ -3020,6 +3273,33 @@
semver "^7.3.7"
tsutils "^3.21.0"
+"@typescript-eslint/typescript-estree@6.21.0":
+ version "6.21.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz#c47ae7901db3b8bddc3ecd73daff2d0895688c46"
+ integrity sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==
+ dependencies:
+ "@typescript-eslint/types" "6.21.0"
+ "@typescript-eslint/visitor-keys" "6.21.0"
+ debug "^4.3.4"
+ globby "^11.1.0"
+ is-glob "^4.0.3"
+ minimatch "9.0.3"
+ semver "^7.5.4"
+ ts-api-utils "^1.0.1"
+
+"@typescript-eslint/utils@6.21.0":
+ version "6.21.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.21.0.tgz#4714e7a6b39e773c1c8e97ec587f520840cd8134"
+ integrity sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==
+ dependencies:
+ "@eslint-community/eslint-utils" "^4.4.0"
+ "@types/json-schema" "^7.0.12"
+ "@types/semver" "^7.5.0"
+ "@typescript-eslint/scope-manager" "6.21.0"
+ "@typescript-eslint/types" "6.21.0"
+ "@typescript-eslint/typescript-estree" "6.21.0"
+ semver "^7.5.4"
+
"@typescript-eslint/utils@^5.10.0":
version "5.62.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86"
@@ -3042,6 +3322,14 @@
"@typescript-eslint/types" "5.62.0"
eslint-visitor-keys "^3.3.0"
+"@typescript-eslint/visitor-keys@6.21.0":
+ version "6.21.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz#87a99d077aa507e20e238b11d56cc26ade45fe47"
+ integrity sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==
+ dependencies:
+ "@typescript-eslint/types" "6.21.0"
+ eslint-visitor-keys "^3.4.1"
+
"@ungap/structured-clone@^1.2.0":
version "1.2.0"
resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406"
@@ -4956,6 +5244,11 @@ ignore@^5.2.0:
resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef"
integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==
+ignore@^5.2.4:
+ version "5.3.2"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5"
+ integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==
+
immediate@~3.0.5:
version "3.0.6"
resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b"
@@ -5355,6 +5648,11 @@ jsesc@^2.5.1:
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
+jsesc@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d"
+ integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==
+
jsesc@~0.5.0:
version "0.5.0"
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
@@ -6225,6 +6523,13 @@ mime-db@^1.52.0:
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.53.0.tgz#3cb63cd820fc29896d9d4e8c32ab4fcd74ccb447"
integrity sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==
+minimatch@9.0.3:
+ version "9.0.3"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825"
+ integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==
+ dependencies:
+ brace-expansion "^2.0.1"
+
minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2:
version "3.1.2"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
@@ -7226,6 +7531,11 @@ semver@^7.3.7:
resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.2.tgz#1e3b34759f896e8f14d6134732ce798aeb0c6e13"
integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==
+semver@^7.5.4:
+ version "7.6.3"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143"
+ integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==
+
serialize-javascript@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa"
@@ -7686,6 +7996,11 @@ tr46@~0.0.3:
resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==
+ts-api-utils@^1.0.1:
+ version "1.4.3"
+ resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.4.3.tgz#bfc2215fe6528fecab2b0fba570a2e8a4263b064"
+ integrity sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==
+
ts-interface-checker@^0.1.9:
version "0.1.13"
resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699"
From 1f3ab4c92a51ac5ab69eb224e0506c03336405bc Mon Sep 17 00:00:00 2001
From: Johnson Mao <86179381+JohnsonMao@users.noreply.github.com>
Date: Sat, 21 Dec 2024 21:32:46 +0800
Subject: [PATCH 4/5] ci: test
---
.github/workflows/push-change-to-discord-webhook-url.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/push-change-to-discord-webhook-url.yml b/.github/workflows/push-change-to-discord-webhook-url.yml
index 5ba0ed8..2bee6ea 100644
--- a/.github/workflows/push-change-to-discord-webhook-url.yml
+++ b/.github/workflows/push-change-to-discord-webhook-url.yml
@@ -3,7 +3,7 @@ name: Push Change to Discord Webhook URL
on:
push:
branches:
- - main
+ - dev
# Allow manual trigger
workflow_dispatch:
From ca7ed8da93006c13b2d3fc3d20d1ad1648094aec Mon Sep 17 00:00:00 2001
From: Johnson Mao <86179381+JohnsonMao@users.noreply.github.com>
Date: Sat, 21 Dec 2024 22:48:53 +0800
Subject: [PATCH 5/5] eslint: remove unused vars
---
.eslintrc.js | 1 +
components/About/AboutTeam/index.jsx | 2 +-
components/About/AwardInfo/index.jsx | 3 +-
components/About/ContactUs/index.jsx | 3 +-
components/About/Cooperate/index.jsx | 7 +-
components/About/NeedYou/index.jsx | 3 +-
components/About/RealizeMore/index.jsx | 3 +-
components/About/RelatedReport/index.jsx | 3 +-
components/About/TechStack/index.jsx | 3 +-
components/About/Thanks/index.jsx | 3 +-
components/About/index.jsx | 3 +-
.../Activities/Ncku-bike-festival/index.jsx | 13 +-
.../ActivitiesResource/index.jsx | 3 +-
.../LocationResource/index.jsx | 3 +-
components/ContributeResource/index.jsx | 1 -
components/Group/Form/Fields/DateRadio.jsx | 2 +-
components/Group/detail/OrganizerCard.jsx | 7 -
components/Home/APPBanner/index.jsx | 1 -
components/Home/About/Tags/index.jsx | 41 +-----
components/Home/About/index.jsx | 5 +-
components/Home/Banner/index.jsx | 1 -
.../FacebookPosts/CardList/Card/index.jsx | 26 +---
.../ImageCardList/Card/index.jsx | 42 +-----
.../StoryCardList/Card/index.jsx | 45 +-----
components/Home/FacebookPosts/index.jsx | 15 --
components/Home/JoinCooperate/index.jsx | 7 -
components/Home/SearchField/Tags/index.jsx | 1 -
components/Home/WishResource/index.jsx | 6 -
components/Marathon/Mentors.jsx | 2 +-
components/Marathon/SignUp/ConfirmForm.jsx | 12 +-
.../Marathon/SignUp/EditSubMilestone.jsx | 2 +-
components/Marathon/SignUp/MarathonForm.jsx | 9 +-
components/Marathon/SignUp/MilestoneGroup.jsx | 33 +++--
components/Marathon/SignUp/MilestonePanel.jsx | 5 +-
.../Marathon/SignUp/MultiSelectDropdown.jsx | 2 +-
.../Marathon/SignUp/SubMilestonePanel.jsx | 6 +-
.../Marathon/SignUp/UserProfileForm.jsx | 7 -
components/Marathon/SignUp/useEditProfile.jsx | 2 -
components/Marathon/Spotlight/index.jsx | 1 -
components/Partner/Banner/index.jsx | 1 -
.../PartnerCard/PartnerSkelton.jsx | 2 +-
components/Partner/SearchField/SearchTags.jsx | 3 +-
components/Partner/index.jsx | 2 +-
components/Profile/Accountsetting/index.jsx | 1 -
components/Profile/MyMarathon/LoadingCard.jsx | 1 -
components/Profile/MyMarathon/index.jsx | 2 +-
components/Resource/Desc/index.jsx | 3 -
components/Resource/Shares/index.jsx | 3 +-
components/Resource/Tags/index.jsx | 44 +-----
components/Resource/index.jsx | 9 +-
.../Search/SearchField/AgeCheckbox/index.jsx | 19 ---
.../Search/SearchField/AgeDropdown/index.jsx | 3 -
.../Search/SearchField/FeeDropdown/index.jsx | 18 ---
components/Search/SearchField/index.jsx | 31 +---
.../SearchGalleryList/ImageItem/index.jsx | 132 +-----------------
.../Item/Contributors/index.jsx | 5 -
.../Item/LogoImage/index.jsx | 4 +-
.../Search/SearchGalleryList/Item/index.jsx | 24 +---
.../SponsorItem/Contributors/index.jsx | 5 -
.../SponsorItem/LogoImage/index.jsx | 6 +-
.../SearchGalleryList/SponsorItem/index.jsx | 3 -
components/Search/SearchGalleryList/index.jsx | 63 ---------
.../Item/Contributors/index.jsx | 5 -
.../SearchResultList/Item/LogoImage/index.jsx | 4 +-
.../SearchResultList/Item/Tags/index.jsx | 41 +-----
.../Search/SearchResultList/Item/index.jsx | 24 +---
.../SponsorItem/Contributors/index.jsx | 5 -
.../SponsorItem/LogoImage/index.jsx | 5 +-
.../SearchResultList/SponsorItem/index.jsx | 3 -
pages/join/index.jsx | 9 +-
pages/signin/index.tsx | 2 +-
shared/components/Footer_v2/IntroList.jsx | 8 +-
.../MarkdownEditor/MarkdownEditor.jsx | 2 +-
shared/components/Mode/index.jsx | 3 -
.../MainNav/Hamberger/MarathonList/index.jsx | 1 -
.../MainNav/Hamberger/MenuItem.jsx | 9 --
.../Navigation_v2/MainNav/List/index.jsx | 7 -
.../MainNav/SubList/MarathonList/index.jsx | 2 +-
.../Navigation_v2/MainNav/SubList/index.jsx | 1 -
.../components/Navigation_v2/PromotionBar.jsx | 3 +-
shared/components/Navigation_v2/index.jsx | 19 +--
.../RelatedResources/Card/index.jsx | 1 -
shared/components/RelatedResources/index.jsx | 5 +-
shared/components/ScrollToTop/index.jsx | 3 +-
shared/components/Speech/index.jsx | 23 +--
shared/components/SurveyModal/index.jsx | 3 -
shared/components/WarmModal/index.jsx | 4 +-
87 files changed, 99 insertions(+), 811 deletions(-)
diff --git a/.eslintrc.js b/.eslintrc.js
index dcd01ac..b404be1 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -76,6 +76,7 @@ module.exports = {
'react/function-component-definition': 0,
'react/jsx-no-useless-fragment': 0,
'react/no-unknown-property': 0,
+ 'react/require-default-props': 0,
'no-unsafe-optional-chaining': 0,
'react/no-invalid-html-attribute': 0,
},
diff --git a/components/About/AboutTeam/index.jsx b/components/About/AboutTeam/index.jsx
index a45f600..3cb168d 100644
--- a/components/About/AboutTeam/index.jsx
+++ b/components/About/AboutTeam/index.jsx
@@ -276,7 +276,7 @@ const AboutTeam = () => {
flexDirection: 'row',
}}
>
- {Members.map(({ id, name, image }) => (
+ {Members.map(({ id, name }) => (
{
const stageRef = React.useRef(null);
- const [mainState, setMainState] = useState('initial'); // initial, search, gallery, uploaded
- const [imageUploaded, setImageUploaded] = useState(0);
+ const [, setMainState] = useState('initial'); // initial, search, gallery, uploaded
+ const [, setImageUploaded] = useState(0);
const [selectedFile, setSelectedFile] = useState(null);
const [img] = useImage(selectedFile, 'Anonymous');
- const [newImage] = useImage(stageRef?.current?.toDataURL(), 'Anonymous');
+ useImage(stageRef?.current?.toDataURL(), 'Anonymous');
const handleUploadClick = (event) => {
const file = event.target.files[0];
const reader = new FileReader();
const url = reader.readAsDataURL(file);
- reader.onloadend = function (e) {
+ reader.onloadend = () => {
setSelectedFile([reader.result]);
};
console.log(url);
diff --git a/components/ContributeResource/ActivitiesResource/index.jsx b/components/ContributeResource/ActivitiesResource/index.jsx
index da0b5a7..06a595f 100644
--- a/components/ContributeResource/ActivitiesResource/index.jsx
+++ b/components/ContributeResource/ActivitiesResource/index.jsx
@@ -1,6 +1,5 @@
import React from 'react';
-import styled from '@emotion/styled';
-import { Box, Paper, Typography } from '@mui/material';
+import { Box, Typography } from '@mui/material';
const ActivitiesResource = () => {
return (
diff --git a/components/ContributeResource/LocationResource/index.jsx b/components/ContributeResource/LocationResource/index.jsx
index ae9982f..9180a7c 100644
--- a/components/ContributeResource/LocationResource/index.jsx
+++ b/components/ContributeResource/LocationResource/index.jsx
@@ -1,6 +1,5 @@
import React from 'react';
-import styled from '@emotion/styled';
-import { Box, Paper, Typography } from '@mui/material';
+import { Box, Typography } from '@mui/material';
const LearningResource = () => {
return (
diff --git a/components/ContributeResource/index.jsx b/components/ContributeResource/index.jsx
index 212756e..129de67 100644
--- a/components/ContributeResource/index.jsx
+++ b/components/ContributeResource/index.jsx
@@ -3,7 +3,6 @@ import styled from '@emotion/styled';
import { Paper, Box, Typography } from '@mui/material';
import LearningResource from './LearningResource';
import ActivitiesResource from './ActivitiesResource';
-import LocationResource from './LocationResource';
const ResourceWrapper = styled.section`
padding-top: 40px;
diff --git a/components/Group/Form/Fields/DateRadio.jsx b/components/Group/Form/Fields/DateRadio.jsx
index 3330406..bcc6e84 100644
--- a/components/Group/Form/Fields/DateRadio.jsx
+++ b/components/Group/Form/Fields/DateRadio.jsx
@@ -1,5 +1,5 @@
import dayjs from 'dayjs';
-import { useEffect, useState } from 'react';
+import { useState } from 'react';
import Box from '@mui/material/Box';
import FormControlLabel from '@mui/material/FormControlLabel';
import Checkbox from '@mui/material/Checkbox';
diff --git a/components/Group/detail/OrganizerCard.jsx b/components/Group/detail/OrganizerCard.jsx
index 2e283c6..83e1f55 100644
--- a/components/Group/detail/OrganizerCard.jsx
+++ b/components/Group/detail/OrganizerCard.jsx
@@ -72,13 +72,6 @@ const StyledTags = styled.div`
}
`;
-const StyledTime = styled.time`
- display: flex;
- justify-content: flex-end;
- font-size: 12px;
- color: #92989a;
-`;
-
function OrganizerCard({ data = {}, isLoading }) {
const educationStage =
EDUCATION_STEP.find(({ key }) => key === data?.user?.educationStage)
diff --git a/components/Home/APPBanner/index.jsx b/components/Home/APPBanner/index.jsx
index 4fc9daf..9d9ee74 100644
--- a/components/Home/APPBanner/index.jsx
+++ b/components/Home/APPBanner/index.jsx
@@ -1,4 +1,3 @@
-import React, { useState } from 'react';
import styled from '@emotion/styled';
import Box from '@mui/material/Box';
import { Typography, Button } from '@mui/material';
diff --git a/components/Home/About/Tags/index.jsx b/components/Home/About/Tags/index.jsx
index 3f21a73..3effe69 100644
--- a/components/Home/About/Tags/index.jsx
+++ b/components/Home/About/Tags/index.jsx
@@ -1,4 +1,4 @@
-import React, { useCallback, useMemo } from 'react';
+import React, { useMemo } from 'react';
import styled from '@emotion/styled';
import { useRouter } from 'next/router';
import Chip from '@mui/material/Chip';
@@ -10,45 +10,8 @@ const TagsWrapper = styled.ul`
flex-wrap: wrap;
`;
-// const TagItemWrapper = styled.li`
-// color: black;
-// border-radius: 15px;
-// padding: 2px 10px;
-// margin: 0 5px;
-// white-space: nowrap;
-// cursor: pointer;
-// ${({ color }) => css`
-// background-color: ${COLOR_TABLE[color ?? "default"]};
-// `}
-// `;
-
const Tags = ({ tags = [], type }) => {
- const { query, push } = useRouter();
- const linkTagsHandler = useCallback(
- (newQuery) => {
- // 複製一份,避免影響到使用體驗
- const clonedQuery = { ...query };
- delete clonedQuery.title;
- if (clonedQuery[type]) {
- push({
- pathname: '/search',
- query: {
- ...clonedQuery,
- [type]: [clonedQuery[type].split(','), newQuery].join(','),
- },
- });
- } else {
- push({
- pathname: '/search',
- query: {
- ...clonedQuery,
- [type]: newQuery,
- },
- });
- }
- },
- [push, query, type],
- );
+ const { query } = useRouter();
const linkList = useMemo(() => {
return tags.map((newQuery) => {
diff --git a/components/Home/About/index.jsx b/components/Home/About/index.jsx
index b1cb412..96c3d9c 100644
--- a/components/Home/About/index.jsx
+++ b/components/Home/About/index.jsx
@@ -1,9 +1,6 @@
import React from 'react';
import styled from '@emotion/styled';
-import Box from '@mui/material/Box';
-import { Typography, Button } from '@mui/material';
-import { FacebookRounded } from '@mui/icons-material';
-import Chip from '@mui/material/Chip';
+import { Box, Chip, Typography } from '@mui/material';
import { useRouter } from 'next/router';
import { COLOR_TABLE } from '../../../constants/notion';
import { CATEGORIES } from '../../../constants/category';
diff --git a/components/Home/Banner/index.jsx b/components/Home/Banner/index.jsx
index 8271712..3418443 100644
--- a/components/Home/Banner/index.jsx
+++ b/components/Home/Banner/index.jsx
@@ -1,7 +1,6 @@
import React, { useCallback } from 'react';
import styled from '@emotion/styled';
import { Box, Button, Typography } from '@mui/material';
-import Typed from 'react-typed';
import SearchField from '../SearchField';
import BannerVideo from '../BannerVideo';
import Title from './Title';
diff --git a/components/Home/FacebookPosts/CardList/Card/index.jsx b/components/Home/FacebookPosts/CardList/Card/index.jsx
index f7b0a4e..1d5e5df 100644
--- a/components/Home/FacebookPosts/CardList/Card/index.jsx
+++ b/components/Home/FacebookPosts/CardList/Card/index.jsx
@@ -1,9 +1,6 @@
import styled from '@emotion/styled';
-import { css } from '@emotion/react';
-import { useRouter } from 'next/router';
-import { Box, Tooltip, Typography } from '@mui/material';
+import { Box, Tooltip } from '@mui/material';
import dayjs from 'dayjs';
-import { slideInUp } from '../../../../../shared/styles/animation';
const CardWrapper = styled.li`
position: relative;
@@ -41,26 +38,7 @@ const ContentWrapper = styled.p`
font-size: 12px;
`;
-const BackgroundWrapper = styled.div`
- position: absolute;
- left: 0;
- top: 0;
- width: 100%;
- height: 100%;
- overflow: hidden;
- border-radius: 20px;
- z-index: -1;
- ${({ image }) => css`
- background-image: ${`url(${image})`};
- background-size: cover;
- background-repeat: no-repeat;
- background-position: 50% 50%;
- filter: brightness(50%);
- `}
-`;
-
-const Card = ({ id, message = '', date, title, link, type }) => {
- const router = useRouter();
+const Card = ({ id, message = '', date }) => {
return (
css`
- background-image: ${`url(${image})`};
- background-size: cover;
- background-repeat: no-repeat;
- background-position: 50% 50%;
- filter: brightness(50%);
- `}
-`;
const ImageWrapper = styled(LazyLoadImage)`
- /* border-radius: 10px; */
width: 150px;
height: 150px;
min-width: 150px;
@@ -67,7 +29,7 @@ const ImageWrapper = styled(LazyLoadImage)`
object-position: center;
`;
-const Card = ({ message = '', date, image, url }) => {
+const Card = ({ message = '', image, url }) => {
return (
window.open(url, '_target')}>
diff --git a/components/Home/FacebookPosts/StoryCardList/Card/index.jsx b/components/Home/FacebookPosts/StoryCardList/Card/index.jsx
index 31aae98..1cf18fc 100644
--- a/components/Home/FacebookPosts/StoryCardList/Card/index.jsx
+++ b/components/Home/FacebookPosts/StoryCardList/Card/index.jsx
@@ -1,10 +1,6 @@
import styled from '@emotion/styled';
-import { css } from '@emotion/react';
-import { useRouter } from 'next/router';
-import { Box, Skeleton, Tooltip, Typography } from '@mui/material';
-import dayjs from 'dayjs';
+import { Tooltip } from '@mui/material';
import { LazyLoadImage } from 'react-lazy-load-image-component';
-import { slideInUp } from '../../../../../shared/styles/animation';
const CardWrapper = styled.li`
position: relative;
@@ -23,42 +19,7 @@ const CardWrapper = styled.li`
}
`;
-const ContentWrapper = styled.p`
- display: flex;
- flex-direction: column;
- align-items: center;
- height: calc(90px - 20px);
- font-weight: 500;
- text-align: left;
- display: -webkit-box;
- text-overflow: ellipsis;
- -webkit-box-orient: vertical;
- -webkit-line-clamp: 2;
- overflow: hidden;
- white-space: pre-wrap;
- font-size: 12px;
-`;
-
-const BackgroundWrapper = styled.div`
- position: absolute;
- left: 0;
- top: 0;
- width: 100%;
- height: 100%;
- overflow: hidden;
- border-radius: 20px;
- z-index: -1;
- ${({ image }) => css`
- background-image: ${`url(${image})`};
- background-size: cover;
- background-repeat: no-repeat;
- background-position: 50% 50%;
- filter: brightness(50%);
- `}
-`;
-
const ImageWrapper = styled(LazyLoadImage)`
- /* border-radius: 10px; */
width: 150px;
height: calc(calc(150px / 9) * 16);
min-width: 150px;
@@ -72,10 +33,8 @@ const VideoWrapper = styled.video`
object-fit: cover;
width: 100%;
height: inherit;
- /* background: rgba(0, 0, 0, 0.75);
- backdrop-filter: blur(180px); */
- /* z-index: 1; */
`;
+
const Card = ({ message = '', media, url, type }) => {
if (type === 'VIDEO') {
return (
diff --git a/components/Home/FacebookPosts/index.jsx b/components/Home/FacebookPosts/index.jsx
index 2ba9024..87e1626 100644
--- a/components/Home/FacebookPosts/index.jsx
+++ b/components/Home/FacebookPosts/index.jsx
@@ -1,13 +1,10 @@
import React, { useEffect } from 'react';
import styled from '@emotion/styled';
-import Box from '@mui/material/Box';
import { useSelector, useDispatch, shallowEqual } from 'react-redux';
-import CardList from './CardList';
import ImageCardList from './ImageCardList';
import StoryCardList from './StoryCardList';
import {
- // getFacebookFansPagePost,
getFacebookGroupPost,
getInstagramPost,
getInstagramStory,
@@ -15,7 +12,6 @@ import {
const GuideWrapper = styled.div`
width: 90%;
- /* height: calc(var(--section-height) + var(--section-height-offset)); */
margin: 0 auto;
padding-top: 40px;
padding-bottom: 40px;
@@ -36,12 +32,8 @@ const GuideWrapper = styled.div`
const Guide = () => {
const dispatch = useDispatch();
const {
- groupPosts,
- // fanpagesPosts,
instagramPosts,
instagramStories,
- // isLoadingFanpagesPosts,
- isLoadingGroupPosts,
isLoadingInstagramPosts,
isLoadingInstagramStories,
} = useSelector(({ shared }) => {
@@ -60,7 +52,6 @@ const Guide = () => {
}, shallowEqual);
useEffect(() => {
- // dispatch(getFacebookFansPagePost(7));
dispatch(getFacebookGroupPost(7));
dispatch(getInstagramPost());
dispatch(getInstagramStory());
@@ -81,12 +72,6 @@ const Guide = () => {
isLoading={isLoadingInstagramPosts}
direction="right"
/>
- {/* */}
);
};
diff --git a/components/Home/JoinCooperate/index.jsx b/components/Home/JoinCooperate/index.jsx
index 19051c2..7e4c1d6 100644
--- a/components/Home/JoinCooperate/index.jsx
+++ b/components/Home/JoinCooperate/index.jsx
@@ -1,10 +1,6 @@
-import React, { useState } from 'react';
import styled from '@emotion/styled';
import Box from '@mui/material/Box';
import { Button, Typography } from '@mui/material';
-import { FacebookRounded } from '@mui/icons-material';
-import { useRouter } from 'next/router';
-import WramModal from '../../../shared/components/WarmModal';
const GroupWrapper = styled.div`
width: 90%;
@@ -20,9 +16,6 @@ const GroupWrapper = styled.div`
`;
const JoinCooperate = () => {
- const router = useRouter();
- const [open, setOpen] = useState(false);
-
return (
{
- const router = useRouter();
const [open, setOpen] = useState(false);
return (
diff --git a/components/Marathon/Mentors.jsx b/components/Marathon/Mentors.jsx
index 1504e43..df157a0 100644
--- a/components/Marathon/Mentors.jsx
+++ b/components/Marathon/Mentors.jsx
@@ -271,7 +271,7 @@ const Mentors = () => {
}
};
- const handleTouchEnd = (e) => {
+ const handleTouchEnd = () => {
setTouchStartX(null);
};
diff --git a/components/Marathon/SignUp/ConfirmForm.jsx b/components/Marathon/SignUp/ConfirmForm.jsx
index f41e221..1ec1a81 100644
--- a/components/Marathon/SignUp/ConfirmForm.jsx
+++ b/components/Marathon/SignUp/ConfirmForm.jsx
@@ -211,12 +211,12 @@ export default function ConfirmForm({
setCurrentStep,
currentStep,
}) {
- const [hasClickSubmitButton, setHasClickSubmitButton] = useState(false);
+ const [/** hasClickSubmitButton */, setHasClickSubmitButton] = useState(false);
const reduxDispatch = useDispatch();
const marathonState = useSelector((state) => { return state.marathon; });
const userState = useSelector((state) => { return state.user; });
const token = useSelector((state) => { return state.user.token; });
- const [newMarathon, setNewMarathon] = useState(reduxInitMarathonState);
+ const [/** newMarathon */, setNewMarathon] = useState(reduxInitMarathonState);
const router = useRouter();
const { openLoginModal } = useAuthDispatch();
const [user, setUser] = useState({
@@ -338,7 +338,7 @@ export default function ConfirmForm({
學習動機
- {marathonState?.motivation?.tags?.map((tag, _i) => {
+ {marathonState?.motivation?.tags?.map((tag) => {
return (
{tag}
@@ -356,7 +356,7 @@ export default function ConfirmForm({
學習方法與策略
- {marathonState?.strategies?.tags.map((tag, _i) => {
+ {marathonState?.strategies?.tags.map((tag) => {
return (
{tag}
@@ -388,7 +388,7 @@ export default function ConfirmForm({
學習成果及呈現方式
- {marathonState?.outcomes?.tags?.map((tag, _i) => {
+ {marathonState?.outcomes?.tags?.map((tag) => {
return (
{tag}
@@ -471,7 +471,7 @@ export default function ConfirmForm({
夥伴的 Email
{
- marathonState.pricing.email.map((email, _i) => {
+ marathonState.pricing.email.map((email) => {
return (
{
- const names = value.filter((milestone, _i) => {
+ const names = value.filter((milestone) => {
return (milestone.name.trim().length > 0);
});
return names.length === newMarathon.milestones?.length;
@@ -156,10 +156,9 @@ export default function MarathonForm({
}
if (validate(input)) {
- setErrors((prevErrors) => {
- const { [name]: _, ...remainingErrors } = prevErrors;
- return remainingErrors;
- });
+ setErrors((prevErrors) =>
+ Object.fromEntries(Object.entries(prevErrors).filter(([key]) => key !== name))
+ );
} else {
setErrors({
...errors,
diff --git a/components/Marathon/SignUp/MilestoneGroup.jsx b/components/Marathon/SignUp/MilestoneGroup.jsx
index cb16cb0..fdb52d0 100644
--- a/components/Marathon/SignUp/MilestoneGroup.jsx
+++ b/components/Marathon/SignUp/MilestoneGroup.jsx
@@ -3,7 +3,6 @@ import { useState, useEffect } from "react";
import styled from '@emotion/styled';
import {
Box,
- Grid,
TextField,
MenuItem,
Typography,
@@ -48,7 +47,7 @@ export default function MilestoneGroup({
}) {
const eventWeekRange = 22;
const [startDate, setStartDate] = useState('2025-02-09');
- const [endDate, setEndDate] = useState(dayjs(startDate).add('22', 'week'));
+ const [/** endDate */, setEndDate] = useState(dayjs(startDate).add('22', 'week'));
const [frequency, setFrequency] = useState('biweekly');
function arabicToChinese(num) {
@@ -113,26 +112,26 @@ export default function MilestoneGroup({
}
});
};
- const handleStartDate = (eventStartDate) => {
- setStartDate(eventStartDate);
- const eventEndDate = dayjs(eventStartDate).add(eventWeekRange, 'week');
- setEndDate(eventEndDate);
- const changedMilestones = calculateMilestones(eventStartDate, frequency, milestones);
- onChange({
- type: 'UPDATE_FIELD',
- payload: {
- key: 'milestones',
- value: changedMilestones
- }
- });
- };
- const handleEndDate = (fakeDate) => {
+ // const handleStartDate = (eventStartDate) => {
+ // setStartDate(eventStartDate);
+ // const eventEndDate = dayjs(eventStartDate).add(eventWeekRange, 'week');
+ // setEndDate(eventEndDate);
+ // const changedMilestones = calculateMilestones(eventStartDate, frequency, milestones);
+ // onChange({
+ // type: 'UPDATE_FIELD',
+ // payload: {
+ // key: 'milestones',
+ // value: changedMilestones
+ // }
+ // });
+ // };
+ const handleEndDate = (/** fakeDate */) => {
const eventEndDate = dayjs(startDate).add(eventWeekRange, 'week');
setEndDate(eventEndDate);
};
const updateMilestone = (newMilestone) => {
- const changedMilestones = milestones.map((item, _i) => {
+ const changedMilestones = milestones.map((item) => {
return (item._tempId === newMilestone._tempId ? newMilestone : item);
});
// check if milestone name exist
diff --git a/components/Marathon/SignUp/MilestonePanel.jsx b/components/Marathon/SignUp/MilestonePanel.jsx
index b70e2d0..0ea5af9 100644
--- a/components/Marathon/SignUp/MilestonePanel.jsx
+++ b/components/Marathon/SignUp/MilestonePanel.jsx
@@ -1,7 +1,6 @@
import { v4 as uuidv4 } from 'uuid';
import { useState } from 'react';
import styled from "@emotion/styled";
-import dayjs from "dayjs";
import {
Grid,
@@ -122,7 +121,7 @@ export default function MilestonePanel({
};
const handleDeleteSubMilestone = (deletedItem) => {
- const newSubMilestones = (milestone.subMilestones).filter((item, _i) => {
+ const newSubMilestones = (milestone.subMilestones).filter((item) => {
return (item._tempId !== deletedItem._tempId);
});
onChange({
@@ -132,7 +131,7 @@ export default function MilestonePanel({
};
const handleEditSubMilestone = (newItem) => {
- const newSubMilestones = (milestone.subMilestones).map((item, _i) => {
+ const newSubMilestones = (milestone.subMilestones).map((item) => {
return (newItem._tempId === item._tempId) ? newItem : item;
});
onChange({
diff --git a/components/Marathon/SignUp/MultiSelectDropdown.jsx b/components/Marathon/SignUp/MultiSelectDropdown.jsx
index 7ac3695..1e78945 100644
--- a/components/Marathon/SignUp/MultiSelectDropdown.jsx
+++ b/components/Marathon/SignUp/MultiSelectDropdown.jsx
@@ -69,7 +69,7 @@ export default function MultiSelectDropdown({
}}
>
{
- listItems.map((item, index) => {
+ listItems.map((item) => {
return (
ISOToWeekday(ISODate))
diff --git a/components/Marathon/SignUp/UserProfileForm.jsx b/components/Marathon/SignUp/UserProfileForm.jsx
index 28b01ce..7c26e16 100644
--- a/components/Marathon/SignUp/UserProfileForm.jsx
+++ b/components/Marathon/SignUp/UserProfileForm.jsx
@@ -4,7 +4,6 @@ import dayjs from 'dayjs';
import toast from 'react-hot-toast';
import { useSearchParams } from 'next/navigation';
import useMediaQuery from '@mui/material/useMediaQuery';
-import { useRouter } from 'next/router';
import { useDispatch, useSelector } from 'react-redux';
import {
fetchMarathonProfileByUserEvent
@@ -29,8 +28,6 @@ import {
} from '@mui/material';
import { MobileDatePicker } from '@mui/x-date-pickers/MobileDatePicker';
-import { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider';
-import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';
import Fields from '@/components/Group/Form/Fields';
import useEditProfile from './useEditProfile';
import ErrorMessage from './ErrorMessage';
@@ -38,8 +35,6 @@ import ErrorMessage from './ErrorMessage';
import TheAvator from './TheAvator';
import FormInput from './EditFormInput';
import {
- FormWrapper,
- ContentWrapper,
StyledGroup,
StyledSelectWrapper,
StyledSelectBox,
@@ -50,7 +45,6 @@ import {
StyledSection,
StyledButtonGroup,
StyledButton,
- MarathonSignUpWrapper,
} from './Edit.styled';
export default function UserProfileForm({
@@ -61,7 +55,6 @@ export default function UserProfileForm({
const reduxDispatch = useDispatch();
const mobileScreen = useMediaQuery('(max-width: 767px)');
const [isSetting, setIsSetting] = useState(false);
- const router = useRouter();
const searchParams = useSearchParams();
const check = searchParams.get('check');
const [hasClickNextStep, setHasClickNextStep] = useState(false);
diff --git a/components/Marathon/SignUp/useEditProfile.jsx b/components/Marathon/SignUp/useEditProfile.jsx
index 4255ab0..aa5c6dd 100644
--- a/components/Marathon/SignUp/useEditProfile.jsx
+++ b/components/Marathon/SignUp/useEditProfile.jsx
@@ -3,7 +3,6 @@ import { useReducer, useRef, useState } from 'react';
import { useDispatch } from 'react-redux';
import { updateUser, createUser } from '@/redux/actions/user';
import { z } from 'zod';
-import { useAuthDispatch } from '@/contexts/Auth';
const initialState = {
name: '',
@@ -115,7 +114,6 @@ const userReducer = (state, payload) => {
const useEditProfile = () => {
const reduxDispatch = useDispatch();
const [userState, stateDispatch] = useReducer(userReducer, initialState);
- const authDispatch = useAuthDispatch();
const [errors, setErrors] = useState({});
const refs = useRef({});
diff --git a/components/Marathon/Spotlight/index.jsx b/components/Marathon/Spotlight/index.jsx
index b288e4b..18790d4 100644
--- a/components/Marathon/Spotlight/index.jsx
+++ b/components/Marathon/Spotlight/index.jsx
@@ -3,7 +3,6 @@ import {
Box,
Typography
} from "@mui/material";
-import BoomImage from "@/public/assets/booming.png";
const StyledGroup = styled(Box)`
width: 100%;
diff --git a/components/Partner/Banner/index.jsx b/components/Partner/Banner/index.jsx
index 48b32fe..32b1f74 100644
--- a/components/Partner/Banner/index.jsx
+++ b/components/Partner/Banner/index.jsx
@@ -1,4 +1,3 @@
-import { useSelector } from 'react-redux';
import styled from '@emotion/styled';
import { useRouter } from 'next/router';
import { Box } from '@mui/material';
diff --git a/components/Partner/PartnerList/PartnerCard/PartnerSkelton.jsx b/components/Partner/PartnerList/PartnerCard/PartnerSkelton.jsx
index 404e050..14b0a93 100644
--- a/components/Partner/PartnerList/PartnerCard/PartnerSkelton.jsx
+++ b/components/Partner/PartnerList/PartnerCard/PartnerSkelton.jsx
@@ -21,7 +21,7 @@ const PartnerSkelton = () => {
- {new Array(3).fill(0).map((_, idx) => (
+ {new Array(3).fill(0).map(() => (
{
const [getSearchParams, pushState] = useSearchParamsManager();
- const [_, setTag] = useState();
+ const [, setTag] = useState();
const currentTags = getSearchParams('tag').toString();
const handleChange = (val) => {
diff --git a/components/Partner/index.jsx b/components/Partner/index.jsx
index 17e0206..7e683c7 100644
--- a/components/Partner/index.jsx
+++ b/components/Partner/index.jsx
@@ -66,7 +66,7 @@ function Partner() {
const { page: current = 1, totalPages } = pagination;
// queryStr
- const [getSearchParams, _, generateParamsItems] = useSearchParamsManager();
+ const [getSearchParams, , generateParamsItems] = useSearchParamsManager();
const searchParamsItems = useMemo(
() =>
generateParamsItems(['area', 'role', 'edu', 'tag', 'q'], keySelections),
diff --git a/components/Profile/Accountsetting/index.jsx b/components/Profile/Accountsetting/index.jsx
index a3a8f42..fbb998f 100644
--- a/components/Profile/Accountsetting/index.jsx
+++ b/components/Profile/Accountsetting/index.jsx
@@ -9,7 +9,6 @@ import {
} from '@mui/material';
import { useRouter } from 'next/router';
import styled from '@emotion/styled';
-import { useDispatch } from 'react-redux';
import { useAuth, useAuthDispatch } from '@/contexts/Auth';
const StyledTypographyStyle = styled(Typography)`
diff --git a/components/Profile/MyMarathon/LoadingCard.jsx b/components/Profile/MyMarathon/LoadingCard.jsx
index fc0e223..5c32006 100644
--- a/components/Profile/MyMarathon/LoadingCard.jsx
+++ b/components/Profile/MyMarathon/LoadingCard.jsx
@@ -1,6 +1,5 @@
import Skeleton from '@mui/material/Skeleton';
import IconButton from '@mui/material/IconButton';
-import LocationOnOutlinedIcon from '@mui/icons-material/LocationOnOutlined';
import MoreVertOutlinedIcon from '@mui/icons-material/MoreVertOutlined';
import {
StyledContainer,
diff --git a/components/Profile/MyMarathon/index.jsx b/components/Profile/MyMarathon/index.jsx
index 4121055..ece54b9 100644
--- a/components/Profile/MyMarathon/index.jsx
+++ b/components/Profile/MyMarathon/index.jsx
@@ -50,7 +50,7 @@ const MyMarathon = ({ title, sx }) => {
)}
{marathons.length > 0 && (
- marathons.map((marathon, _i) => {
+ marathons.map((marathon) => {
return (
css`
-// background-color: ${COLOR_TABLE[color ?? "default"]};
-// `}
-// `;
-
const Tags = ({ tags, type }) => {
- const { query, push } = useRouter();
- const linkTagsHandler = useCallback(
- (newQuery) => {
- // 複製一份,避免影響到使用體驗
- const clonedQuery = { ...query };
- delete clonedQuery.title;
- if (clonedQuery[type]) {
- push({
- pathname: '/search',
- query: {
- ...clonedQuery,
- [type]: [clonedQuery[type].split(','), newQuery].join(','),
- },
- });
- } else {
- push({
- pathname: '/search',
- query: {
- ...clonedQuery,
- [type]: newQuery,
- },
- });
- }
- },
- [push, query, type],
- );
+ const { query } = useRouter();
const linkList = useMemo(() => {
return tags.map((newQuery) => {
@@ -82,10 +45,8 @@ const Tags = ({ tags, type }) => {
{tags.map(({ name, color }, index) => (
- {/* */}
linkTagsHandler(name)}
sx={{
backgroundColor: COLOR_TABLE[color ?? 'default'],
cursor: 'pointer',
@@ -99,7 +60,6 @@ const Tags = ({ tags, type }) => {
},
}}
/>
- {/* */}
))}
diff --git a/components/Resource/index.jsx b/components/Resource/index.jsx
index c07447b..0f29b08 100644
--- a/components/Resource/index.jsx
+++ b/components/Resource/index.jsx
@@ -1,15 +1,10 @@
import React, { useEffect, useMemo, useState } from 'react';
import styled from '@emotion/styled';
import { useRouter } from 'next/router';
-import { Button, Paper, Box, Stack, Typography } from '@mui/material';
+import { Box, Typography } from '@mui/material';
import { css } from '@emotion/react';
-import { DiscussionEmbed, Recommendations, CommentEmbed } from 'disqus-react';
-import { Share } from '@mui/icons-material';
-import { CopyToClipboard } from 'react-copy-to-clipboard';
-import toast from 'react-hot-toast';
-import appendQuery from 'append-query';
+import { DiscussionEmbed } from 'disqus-react';
import Shares from './Shares';
-import { postFetcher } from '../../utils/fetcher';
import Tags from './Tags';
import RelatedResources from '../../shared/components/RelatedResources';
import Desc from './Desc';
diff --git a/components/Search/SearchField/AgeCheckbox/index.jsx b/components/Search/SearchField/AgeCheckbox/index.jsx
index 20fc06d..57ed841 100644
--- a/components/Search/SearchField/AgeCheckbox/index.jsx
+++ b/components/Search/SearchField/AgeCheckbox/index.jsx
@@ -1,30 +1,11 @@
/* eslint-disable react/jsx-wrap-multilines */
-import React, { useState } from 'react';
-import styled from '@emotion/styled';
-import { Box, Select, MenuItem } from '@mui/material';
import { useRouter } from 'next/router';
-// import { SEARCH_TAGS } from "../../../constants/category";
-import OutlinedInput from '@mui/material/OutlinedInput';
-import InputLabel from '@mui/material/InputLabel';
import FormControl from '@mui/material/FormControl';
-import Chip from '@mui/material/Chip';
import FormLabel from '@mui/material/FormLabel';
import FormGroup from '@mui/material/FormGroup';
import FormControlLabel from '@mui/material/FormControlLabel';
-import FormHelperText from '@mui/material/FormHelperText';
import Checkbox from '@mui/material/Checkbox';
-const ITEM_HEIGHT = 48;
-const ITEM_PADDING_TOP = 8;
-const MenuProps = {
- PaperProps: {
- style: {
- maxHeight: ITEM_HEIGHT * 4.5 + ITEM_PADDING_TOP,
- width: 250,
- },
- },
-};
-
const names = ['學齡前', '國小', '國高中', '大學以上'];
const AgeDropdown = () => {
diff --git a/components/Search/SearchField/AgeDropdown/index.jsx b/components/Search/SearchField/AgeDropdown/index.jsx
index 93531bb..844522b 100644
--- a/components/Search/SearchField/AgeDropdown/index.jsx
+++ b/components/Search/SearchField/AgeDropdown/index.jsx
@@ -1,8 +1,5 @@
-import React, { useState } from 'react';
-import styled from '@emotion/styled';
import { Box, Select, MenuItem } from '@mui/material';
import { useRouter } from 'next/router';
-// import { SEARCH_TAGS } from "../../../constants/category";
import OutlinedInput from '@mui/material/OutlinedInput';
import InputLabel from '@mui/material/InputLabel';
import FormControl from '@mui/material/FormControl';
diff --git a/components/Search/SearchField/FeeDropdown/index.jsx b/components/Search/SearchField/FeeDropdown/index.jsx
index 19452fa..8df91cb 100644
--- a/components/Search/SearchField/FeeDropdown/index.jsx
+++ b/components/Search/SearchField/FeeDropdown/index.jsx
@@ -1,28 +1,10 @@
-import React, { useState } from 'react';
-import styled from '@emotion/styled';
-import { Box, Select, MenuItem } from '@mui/material';
import { useRouter } from 'next/router';
-// import { SEARCH_TAGS } from "../../../constants/category";
-import OutlinedInput from '@mui/material/OutlinedInput';
-import InputLabel from '@mui/material/InputLabel';
import FormControl from '@mui/material/FormControl';
-import Chip from '@mui/material/Chip';
import Radio from '@mui/material/Radio';
import RadioGroup from '@mui/material/RadioGroup';
import FormControlLabel from '@mui/material/FormControlLabel';
import FormLabel from '@mui/material/FormLabel';
-const ITEM_HEIGHT = 48;
-const ITEM_PADDING_TOP = 8;
-const MenuProps = {
- PaperProps: {
- style: {
- maxHeight: ITEM_HEIGHT * 4.5 + ITEM_PADDING_TOP,
- width: 250,
- },
- },
-};
-
const names = ['不拘', '免費', '部分免費', '需付費'];
const FeeDropdown = () => {
diff --git a/components/Search/SearchField/index.jsx b/components/Search/SearchField/index.jsx
index 19ea34c..ce53cec 100644
--- a/components/Search/SearchField/index.jsx
+++ b/components/Search/SearchField/index.jsx
@@ -1,44 +1,15 @@
-import React, { useState } from 'react';
import styled from '@emotion/styled';
-import { Box, Select, MenuItem } from '@mui/material';
+import { Box } from '@mui/material';
import { useRouter } from 'next/router';
-import { Whatshot } from '@mui/icons-material';
-import OutlinedInput from '@mui/material/OutlinedInput';
-import InputLabel from '@mui/material/InputLabel';
-import FormControl from '@mui/material/FormControl';
-import Chip from '@mui/material/Chip';
-import { SEARCH_TAGS } from '../../../constants/category';
import SearchInput from './SearchInput';
import HotTags from './HotTags';
-import AgeDropdown from './AgeDropdown';
import FeeDropdown from './FeeDropdown';
import AgeCheckbox from './AgeCheckbox';
const SearchFieldWrapper = styled.div`
width: 100%;
-
- /* @media (max-width: 767px) {
- margin: 0 10px 10px 10px;
- flex-direction: column;
- justify-content: center;
- align-items: center;
- width: 100%;
- } */
`;
-const ITEM_HEIGHT = 48;
-const ITEM_PADDING_TOP = 8;
-const MenuProps = {
- PaperProps: {
- style: {
- maxHeight: ITEM_HEIGHT * 4.5 + ITEM_PADDING_TOP,
- width: 250,
- },
- },
-};
-
-const names = ['學齡前', '國小', '國高中', '大學以上'];
-
const SearchField = () => {
const { query } = useRouter();
const queryList = (query?.cats ?? '').split(',').reverse();
diff --git a/components/Search/SearchGalleryList/ImageItem/index.jsx b/components/Search/SearchGalleryList/ImageItem/index.jsx
index 179f82e..81bac5d 100644
--- a/components/Search/SearchGalleryList/ImageItem/index.jsx
+++ b/components/Search/SearchGalleryList/ImageItem/index.jsx
@@ -1,122 +1,15 @@
-/* eslint-disable react/jsx-wrap-multilines */
import React, { useMemo } from 'react';
-import styled from '@emotion/styled';
-import { css, keyframes } from '@emotion/react';
import {
- Typography,
- Box,
- ImageList,
ImageListItem,
ImageListItemBar,
IconButton,
} from '@mui/material';
import dayjs from 'dayjs';
import isBetween from 'dayjs/plugin/isBetween';
-// import { TikTokFont } from '../../../../shared/styles/css';
-dayjs.extend(isBetween);
-
-function srcset(image, width, height, rows = 1, cols = 1) {
- return {
- src: `${image}?w=${width * cols}&h=${height * rows}&fit=crop&auto=format`,
- srcSet: `${image}?w=${width * cols}&h=${
- height * rows
- }&fit=crop&auto=format&dpr=2 2x`,
- };
-}
-
-const ItemWrapper = styled.li`
- display: flex;
- padding-top: 20px;
- padding-bottom: 20px;
- border-bottom: 1px solid rgba(168, 168, 168, 0.3);
-`;
-
-const ContentWrapper = styled.article`
- width: calc(100% - 200px);
- padding: 0 10px;
- margin-left: 20px;
- @media (max-width: 767px) {
- width: calc(100% - 100px);
- }
-`;
-
-const ImageWrapper = styled.div`
- width: 200px;
- height: 200px;
- background-color: #f5f5f5;
- ${({ image }) => css`
- background-image: ${`url(${image})`};
- background-size: cover;
- background-repeat: no-repeat;
- background-position: 50% 50%;
- `}
- border-radius: 20px;
- /* object-fit: cover; */
- /* opacity: 0; */
-
- @media (max-width: 767px) {
- width: 100px;
- height: 100px;
- }
-`;
-
-const TitleWrapper = styled.div`
- display: flex;
- flex-wrap: wrap;
- justify-content: flex-start;
- align-items: center;
- .title {
- font-size: 24px;
- font-weight: 500;
- margin: 0 10px 0 0;
- color: black;
- &:hover {
- cursor: pointer;
- color: #16b9b3;
- transition: 0.5s;
- }
- }
-
- @media (max-width: 767px) {
- .title {
- text-overflow: ellipsis;
- width: 100%;
- }
- }
-`;
-
-const Item = ({ data, margin }) => {
- const hashTags = useMemo(
- () => data?.properties['標籤']?.multi_select ?? [],
- [data],
- );
- const resourcesTags = useMemo(
- () => data?.properties['資源類型']?.multi_select ?? [],
- [data],
- );
- const feeTags = useMemo(
- () =>
- data?.properties['費用']?.select
- ? [data?.properties['費用']?.select]
- : [],
- [data],
- );
- const isNewResource = useMemo(() => {
- const today = dayjs();
- const createDay = dayjs(data?.created_time);
- const isRecent = dayjs(createDay).isBetween(
- today,
- dayjs(today).subtract(1, 'month'),
- );
- return isRecent;
- }, [data]);
-
- const ageOfUserTags = useMemo(
- () => data?.properties['年齡層']?.multi_select ?? [],
- [data],
- );
+dayjs.extend(isBetween);
+const Item = ({ data }) => {
const title = useMemo(
() =>
(data?.properties['資源名稱']?.title ?? []).find(
@@ -125,26 +18,9 @@ const Item = ({ data, margin }) => {
[data?.properties],
);
- const contributors = useMemo(
- () => data?.properties['創建者']?.multi_select ?? [],
- [data?.properties],
- );
-
- // const link = useMemo(() => data?.properties["連結"]?.url ?? "", [data]);
- const link = useMemo(() => `/resource/${title}`, [title]);
-
return (
{
title={title}
position="top"
actionIcon={
-
- {/* */}
-
+
}
actionPosition="left"
/>
diff --git a/components/Search/SearchGalleryList/Item/Contributors/index.jsx b/components/Search/SearchGalleryList/Item/Contributors/index.jsx
index cacbefb..3b14cd6 100644
--- a/components/Search/SearchGalleryList/Item/Contributors/index.jsx
+++ b/components/Search/SearchGalleryList/Item/Contributors/index.jsx
@@ -1,10 +1,5 @@
-import React, { useMemo } from 'react';
-import styled from '@emotion/styled';
-import { css } from '@emotion/react';
import Link from 'next/link';
import { Typography, Box } from '@mui/material';
-import dayjs from 'dayjs';
-import isBetween from 'dayjs/plugin/isBetween';
const Contributors = ({ contributors }) => {
return (
diff --git a/components/Search/SearchGalleryList/Item/LogoImage/index.jsx b/components/Search/SearchGalleryList/Item/LogoImage/index.jsx
index a23a6d5..02cba3d 100644
--- a/components/Search/SearchGalleryList/Item/LogoImage/index.jsx
+++ b/components/Search/SearchGalleryList/Item/LogoImage/index.jsx
@@ -1,8 +1,6 @@
-import React, { useMemo } from 'react';
import styled from '@emotion/styled';
import { css } from '@emotion/react';
-import Link from 'next/link';
-import { Typography, Box } from '@mui/material';
+import { Box } from '@mui/material';
import dayjs from 'dayjs';
import isBetween from 'dayjs/plugin/isBetween';
diff --git a/components/Search/SearchGalleryList/Item/index.jsx b/components/Search/SearchGalleryList/Item/index.jsx
index 314ba8c..de66c47 100644
--- a/components/Search/SearchGalleryList/Item/index.jsx
+++ b/components/Search/SearchGalleryList/Item/index.jsx
@@ -1,14 +1,11 @@
import React, { useMemo } from 'react';
import styled from '@emotion/styled';
-import { css, keyframes } from '@emotion/react';
-import Link from 'next/link';
-import { Typography, Box } from '@mui/material';
import dayjs from 'dayjs';
import isBetween from 'dayjs/plugin/isBetween';
import Tags from './Tags';
import LogoImage from './LogoImage';
import Contributors from './Contributors';
-// import { TikTokFont } from '../../../../shared/styles/css';
+
dayjs.extend(isBetween);
const ItemWrapper = styled.li`
@@ -27,25 +24,6 @@ const ContentWrapper = styled.article`
}
`;
-const ImageWrapper = styled.div`
- width: 200px;
- height: 200px;
- background-color: #f5f5f5;
- ${({ image }) => css`
- background-image: ${`url(${image})`};
- background-size: cover;
- background-repeat: no-repeat;
- background-position: 50% 50%;
- `}
- border-radius: 20px;
- /* object-fit: cover; */
- /* opacity: 0; */
-
- @media (max-width: 767px) {
- width: 100px;
- height: 100px;
- }
-`;
const TitleWrapper = styled.div`
display: flex;
flex-wrap: wrap;
diff --git a/components/Search/SearchGalleryList/SponsorItem/Contributors/index.jsx b/components/Search/SearchGalleryList/SponsorItem/Contributors/index.jsx
index cacbefb..3b14cd6 100644
--- a/components/Search/SearchGalleryList/SponsorItem/Contributors/index.jsx
+++ b/components/Search/SearchGalleryList/SponsorItem/Contributors/index.jsx
@@ -1,10 +1,5 @@
-import React, { useMemo } from 'react';
-import styled from '@emotion/styled';
-import { css } from '@emotion/react';
import Link from 'next/link';
import { Typography, Box } from '@mui/material';
-import dayjs from 'dayjs';
-import isBetween from 'dayjs/plugin/isBetween';
const Contributors = ({ contributors }) => {
return (
diff --git a/components/Search/SearchGalleryList/SponsorItem/LogoImage/index.jsx b/components/Search/SearchGalleryList/SponsorItem/LogoImage/index.jsx
index afec2e0..92c1550 100644
--- a/components/Search/SearchGalleryList/SponsorItem/LogoImage/index.jsx
+++ b/components/Search/SearchGalleryList/SponsorItem/LogoImage/index.jsx
@@ -1,11 +1,8 @@
-import React, { useMemo } from 'react';
import styled from '@emotion/styled';
import { css } from '@emotion/react';
-import Link from 'next/link';
-import { Typography, Box } from '@mui/material';
+import { Box } from '@mui/material';
import dayjs from 'dayjs';
import isBetween from 'dayjs/plugin/isBetween';
-import { COLOR_TABLE } from '../../../../../constants/notion';
dayjs.extend(isBetween);
@@ -93,6 +90,7 @@ const PromoteWrapper = styled.div`
color: #ffffffff;
font-weight: bold;
transform: rotate(45deg);
+ }
`;
const LogoImage = ({ link, data }) => {
diff --git a/components/Search/SearchGalleryList/SponsorItem/index.jsx b/components/Search/SearchGalleryList/SponsorItem/index.jsx
index 2b46102..4f7433c 100644
--- a/components/Search/SearchGalleryList/SponsorItem/index.jsx
+++ b/components/Search/SearchGalleryList/SponsorItem/index.jsx
@@ -1,7 +1,5 @@
import React, { useMemo } from 'react';
import styled from '@emotion/styled';
-import { css } from '@emotion/react';
-import Link from 'next/link';
import { Typography, Box } from '@mui/material';
import dayjs from 'dayjs';
import isBetween from 'dayjs/plugin/isBetween';
@@ -9,7 +7,6 @@ import { Whatshot } from '@mui/icons-material';
import Tags from './Tags';
import LogoImage from './LogoImage';
import Contributors from './Contributors';
-import { COLOR_TABLE } from '../../../../constants/notion';
dayjs.extend(isBetween);
diff --git a/components/Search/SearchGalleryList/index.jsx b/components/Search/SearchGalleryList/index.jsx
index c24783b..96771b5 100644
--- a/components/Search/SearchGalleryList/index.jsx
+++ b/components/Search/SearchGalleryList/index.jsx
@@ -1,83 +1,20 @@
import React from 'react';
-import styled from '@emotion/styled';
import {
ImageList,
- ImageListItem,
- ImageListItemBar,
- IconButton,
} from '@mui/material';
-import StarBorderIcon from '@mui/icons-material/StarBorder';
-import Item from './Item';
-import SponsorItem from './SponsorItem';
-import SkeletonItem from './SkeletonItem';
import ImageItem from './ImageItem';
-const ListWrapper = styled.ul`
- display: flex;
- flex-direction: column;
- justify-content: space-between;
-`;
-
const SearchGalleryList = ({
list,
- sponsorList,
- queryTags,
- isLoading,
- isLoadingNextData,
}) => {
- // if (isLoading && list.length === 0) {
- // return (
- //
- //
- //
- //
- //
- //
- //
- // );
- // }
- // return (
- //
- // {/* {sponsorList.map((item) => (
- //
- // ))} */}
- // {list.map((item, index) =>
- // isLoading ? (
- //
- // ) : (
- //
- // )
- // )}
- // {isLoadingNextData && (
- // <>
- //
- //
- //
- // >
- // )}
- //
- // );
-
return (
{list.map((item) => {
return (
diff --git a/components/Search/SearchResultList/Item/Contributors/index.jsx b/components/Search/SearchResultList/Item/Contributors/index.jsx
index cacbefb..3b14cd6 100644
--- a/components/Search/SearchResultList/Item/Contributors/index.jsx
+++ b/components/Search/SearchResultList/Item/Contributors/index.jsx
@@ -1,10 +1,5 @@
-import React, { useMemo } from 'react';
-import styled from '@emotion/styled';
-import { css } from '@emotion/react';
import Link from 'next/link';
import { Typography, Box } from '@mui/material';
-import dayjs from 'dayjs';
-import isBetween from 'dayjs/plugin/isBetween';
const Contributors = ({ contributors }) => {
return (
diff --git a/components/Search/SearchResultList/Item/LogoImage/index.jsx b/components/Search/SearchResultList/Item/LogoImage/index.jsx
index 6460436..b16a189 100644
--- a/components/Search/SearchResultList/Item/LogoImage/index.jsx
+++ b/components/Search/SearchResultList/Item/LogoImage/index.jsx
@@ -1,8 +1,6 @@
-import React, { useMemo } from 'react';
import styled from '@emotion/styled';
import { css } from '@emotion/react';
-import Link from 'next/link';
-import { Typography, Box } from '@mui/material';
+import { Box } from '@mui/material';
import dayjs from 'dayjs';
import isBetween from 'dayjs/plugin/isBetween';
diff --git a/components/Search/SearchResultList/Item/Tags/index.jsx b/components/Search/SearchResultList/Item/Tags/index.jsx
index af9d98a..c792e84 100644
--- a/components/Search/SearchResultList/Item/Tags/index.jsx
+++ b/components/Search/SearchResultList/Item/Tags/index.jsx
@@ -1,28 +1,15 @@
-import React, { useCallback, useMemo } from 'react';
+import React, { useCallback } from 'react';
import styled from '@emotion/styled';
import { useRouter } from 'next/router';
import Chip from '@mui/material/Chip';
import { COLOR_TABLE } from '../../../../../constants/notion';
import { scrollToTop } from '../../../../../utils/ux';
-// import { TikTokFont } from "../../../../../shared/styles/css";
const TagsWrapper = styled.ul`
display: flex;
flex-wrap: wrap;
`;
-// const TagItemWrapper = styled.li`
-// color: black;
-// border-radius: 15px;
-// padding: 2px 10px;
-// margin: 0 5px;
-// white-space: nowrap;
-// cursor: pointer;
-// ${({ color }) => css`
-// background-color: ${COLOR_TABLE[color ?? "default"]};
-// `}
-// `;
-
const Tags = ({ tags, type }) => {
const { query, push } = useRouter();
const linkTagsHandler = useCallback(
@@ -56,32 +43,6 @@ const Tags = ({ tags, type }) => {
},
[push, query, type],
);
- const linkList = useMemo(() => {
- return tags.map((newQuery) => {
- // 複製一份,避免影響到使用體驗
- const clonedQuery = { ...query };
- delete clonedQuery.title;
- if (clonedQuery[type]) {
- const queryObject = {
- ...clonedQuery,
- [type]: [clonedQuery[type].split(','), newQuery].join(','),
- };
- const queryStirng = Object.keys(queryObject)
- .map((key) => queryObject[key])
- .join('&');
- return `/search?${queryStirng}`;
- } else {
- const queryObject = {
- ...clonedQuery,
- [type]: newQuery,
- };
- const queryStirng = Object.keys(queryObject)
- .map((key) => queryObject[key])
- .join('&');
- return `/search?${queryStirng}`;
- }
- });
- }, [tags, query]);
return (
diff --git a/components/Search/SearchResultList/Item/index.jsx b/components/Search/SearchResultList/Item/index.jsx
index 1865187..09f4bd4 100644
--- a/components/Search/SearchResultList/Item/index.jsx
+++ b/components/Search/SearchResultList/Item/index.jsx
@@ -1,14 +1,11 @@
import React, { useMemo } from 'react';
import styled from '@emotion/styled';
-import { css, keyframes } from '@emotion/react';
-import Link from 'next/link';
-import { Typography, Box } from '@mui/material';
import dayjs from 'dayjs';
import isBetween from 'dayjs/plugin/isBetween';
import Tags from './Tags';
import LogoImage from './LogoImage';
import Contributors from './Contributors';
-// import { TikTokFont } from '../../../../shared/styles/css';
+
dayjs.extend(isBetween);
const ItemWrapper = styled.li`
@@ -26,25 +23,6 @@ const ContentWrapper = styled.article`
}
`;
-const ImageWrapper = styled.div`
- width: 200px;
- height: 200px;
- border-radius: 20px;
- background-color: #f5f5f5;
- ${({ image }) => css`
- background-image: ${`url(${image})`};
- background-size: cover;
- background-repeat: no-repeat;
- background-position: 50% 50%;
- `}
- /* object-fit: cover; */
- /* opacity: 0; */
-
- @media (max-width: 767px) {
- width: 100px;
- height: 100px;
- }
-`;
const TitleWrapper = styled.div`
display: flex;
flex-wrap: wrap;
diff --git a/components/Search/SearchResultList/SponsorItem/Contributors/index.jsx b/components/Search/SearchResultList/SponsorItem/Contributors/index.jsx
index cacbefb..3b14cd6 100644
--- a/components/Search/SearchResultList/SponsorItem/Contributors/index.jsx
+++ b/components/Search/SearchResultList/SponsorItem/Contributors/index.jsx
@@ -1,10 +1,5 @@
-import React, { useMemo } from 'react';
-import styled from '@emotion/styled';
-import { css } from '@emotion/react';
import Link from 'next/link';
import { Typography, Box } from '@mui/material';
-import dayjs from 'dayjs';
-import isBetween from 'dayjs/plugin/isBetween';
const Contributors = ({ contributors }) => {
return (
diff --git a/components/Search/SearchResultList/SponsorItem/LogoImage/index.jsx b/components/Search/SearchResultList/SponsorItem/LogoImage/index.jsx
index 5bb88cc..92c1550 100644
--- a/components/Search/SearchResultList/SponsorItem/LogoImage/index.jsx
+++ b/components/Search/SearchResultList/SponsorItem/LogoImage/index.jsx
@@ -1,8 +1,6 @@
-import React, { useMemo } from 'react';
import styled from '@emotion/styled';
import { css } from '@emotion/react';
-import Link from 'next/link';
-import { Typography, Box } from '@mui/material';
+import { Box } from '@mui/material';
import dayjs from 'dayjs';
import isBetween from 'dayjs/plugin/isBetween';
@@ -92,6 +90,7 @@ const PromoteWrapper = styled.div`
color: #ffffffff;
font-weight: bold;
transform: rotate(45deg);
+ }
`;
const LogoImage = ({ link, data }) => {
diff --git a/components/Search/SearchResultList/SponsorItem/index.jsx b/components/Search/SearchResultList/SponsorItem/index.jsx
index 2b46102..4f7433c 100644
--- a/components/Search/SearchResultList/SponsorItem/index.jsx
+++ b/components/Search/SearchResultList/SponsorItem/index.jsx
@@ -1,7 +1,5 @@
import React, { useMemo } from 'react';
import styled from '@emotion/styled';
-import { css } from '@emotion/react';
-import Link from 'next/link';
import { Typography, Box } from '@mui/material';
import dayjs from 'dayjs';
import isBetween from 'dayjs/plugin/isBetween';
@@ -9,7 +7,6 @@ import { Whatshot } from '@mui/icons-material';
import Tags from './Tags';
import LogoImage from './LogoImage';
import Contributors from './Contributors';
-import { COLOR_TABLE } from '../../../../constants/notion';
dayjs.extend(isBetween);
diff --git a/pages/join/index.jsx b/pages/join/index.jsx
index 0756cb3..778721e 100644
--- a/pages/join/index.jsx
+++ b/pages/join/index.jsx
@@ -2,14 +2,7 @@ import { useMemo } from 'react';
import { useRouter } from 'next/router';
import styled from '@emotion/styled';
-import {
- Box,
- Divider,
- Typography,
- Button,
- Skeleton,
- TextField,
-} from '@mui/material';
+import { Divider, Typography } from '@mui/material';
import SEOConfig from '@/shared/components/SEO';
import Navigation from '@/shared/components/Navigation_v2';
import Footer from '@/shared/components/Footer_v2';
diff --git a/pages/signin/index.tsx b/pages/signin/index.tsx
index 3a88694..3f3e16f 100644
--- a/pages/signin/index.tsx
+++ b/pages/signin/index.tsx
@@ -32,7 +32,7 @@ function SignInPage() {
};
return (
-
+
{step === 1 && (
{
+const IntroList = ({ list }) => {
return (
- {/* {title}
*/}
{list.map(({ name, link, target }) => (
-
diff --git a/shared/components/MarkdownEditor/MarkdownEditor.jsx b/shared/components/MarkdownEditor/MarkdownEditor.jsx
index e47b1b4..b60ba54 100644
--- a/shared/components/MarkdownEditor/MarkdownEditor.jsx
+++ b/shared/components/MarkdownEditor/MarkdownEditor.jsx
@@ -85,7 +85,7 @@ function InternalMarkdownEditor(
}
return true;
})
- .map(([_, plugin]) => plugin),
+ .map(([, plugin]) => plugin),
[markdown.current]
);
diff --git a/shared/components/Mode/index.jsx b/shared/components/Mode/index.jsx
index 4edb0ed..ac25735 100644
--- a/shared/components/Mode/index.jsx
+++ b/shared/components/Mode/index.jsx
@@ -1,7 +1,4 @@
import { DarkMode, LightMode } from '@mui/icons-material';
-import React, { useCallback } from 'react';
-import { useRouter } from 'next/router';
-import styled from '@emotion/styled';
import { Box } from '@mui/material';
import { useDispatch, useSelector } from 'react-redux';
import { changeMode } from '../../../redux/actions/theme';
diff --git a/shared/components/Navigation_v2/MainNav/Hamberger/MarathonList/index.jsx b/shared/components/Navigation_v2/MainNav/Hamberger/MarathonList/index.jsx
index 5b6775d..46a680d 100644
--- a/shared/components/Navigation_v2/MainNav/Hamberger/MarathonList/index.jsx
+++ b/shared/components/Navigation_v2/MainNav/Hamberger/MarathonList/index.jsx
@@ -3,7 +3,6 @@ import { keyframes, css } from '@emotion/react';
import styled from '@emotion/styled';
import KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown';
import KeyboardArrowUpIcon from '@mui/icons-material/KeyboardArrowUp';
-import useMediaQuery from '@mui/material/useMediaQuery';
import { Box, MenuItem } from '@mui/material';
import { useRouter } from 'next/router';
diff --git a/shared/components/Navigation_v2/MainNav/Hamberger/MenuItem.jsx b/shared/components/Navigation_v2/MainNav/Hamberger/MenuItem.jsx
index 6d15812..1342768 100644
--- a/shared/components/Navigation_v2/MainNav/Hamberger/MenuItem.jsx
+++ b/shared/components/Navigation_v2/MainNav/Hamberger/MenuItem.jsx
@@ -20,15 +20,6 @@ const slideInFrames = keyframes`
}
`;
-const shrinkFrames = keyframes`
- 0% {
- width: 95%;
- }
- 100% {
- width: 90%;
- }
-`;
-
const MenuItemWrapper = styled.li`
animation: 1s ${appearFrames} forwards;
${(props) => css`
diff --git a/shared/components/Navigation_v2/MainNav/List/index.jsx b/shared/components/Navigation_v2/MainNav/List/index.jsx
index a31066f..1b4a67c 100644
--- a/shared/components/Navigation_v2/MainNav/List/index.jsx
+++ b/shared/components/Navigation_v2/MainNav/List/index.jsx
@@ -1,16 +1,9 @@
import React from 'react';
import styled from '@emotion/styled';
import Link from 'next/link';
-import { css, keyframes } from '@emotion/css';
import { Box } from '@mui/material';
import { NAV_LINK } from '../../../../../constants/category';
-const textclip = keyframes`
- to {
- background-position: 200% center;
- }
-`;
-
const LinkListWrapper = styled.ul`
display: flex;
justify-content: space-around;
diff --git a/shared/components/Navigation_v2/MainNav/SubList/MarathonList/index.jsx b/shared/components/Navigation_v2/MainNav/SubList/MarathonList/index.jsx
index a43c2c9..ebebf5f 100644
--- a/shared/components/Navigation_v2/MainNav/SubList/MarathonList/index.jsx
+++ b/shared/components/Navigation_v2/MainNav/SubList/MarathonList/index.jsx
@@ -33,7 +33,7 @@ const StyledMenuItem = styled(MenuItem)`
`}
`;
-const MarathonList = ({ onCloseMenu = () => {}, user }) => {
+const MarathonList = ({ onCloseMenu = () => {} }) => {
const isPadScreen = useMediaQuery('(max-width: 767px)');
const [isOpenMenu, setIsOpenMenu] = useState(null);
const router = useRouter();
diff --git a/shared/components/Navigation_v2/MainNav/SubList/index.jsx b/shared/components/Navigation_v2/MainNav/SubList/index.jsx
index e71e876..10ba14d 100644
--- a/shared/components/Navigation_v2/MainNav/SubList/index.jsx
+++ b/shared/components/Navigation_v2/MainNav/SubList/index.jsx
@@ -1,6 +1,5 @@
import React from 'react';
import styled from '@emotion/styled';
-import Link from 'next/link';
import { Button } from '@mui/material';
import { useAuth, useAuthDispatch } from '@/contexts/Auth';
import UserAvatar from './UserAvatar';
diff --git a/shared/components/Navigation_v2/PromotionBar.jsx b/shared/components/Navigation_v2/PromotionBar.jsx
index 8e5a7aa..1cbc923 100644
--- a/shared/components/Navigation_v2/PromotionBar.jsx
+++ b/shared/components/Navigation_v2/PromotionBar.jsx
@@ -1,4 +1,3 @@
-import { useState, useEffect } from 'react';
import styled from '@emotion/styled';
import Link from 'next/link';
@@ -75,7 +74,7 @@ const CloseButton = styled.span`
}
`;
-const PromotionBar = ({ isShow, link, text, toggleAction }) => {
+const PromotionBar = ({ isShow, text, toggleAction }) => {
return (
<>
{isShow && (
diff --git a/shared/components/Navigation_v2/index.jsx b/shared/components/Navigation_v2/index.jsx
index 4bffd4a..519389a 100644
--- a/shared/components/Navigation_v2/index.jsx
+++ b/shared/components/Navigation_v2/index.jsx
@@ -20,26 +20,15 @@ export const NavigationWrapper = styled(AppBar)(({ hasPromote }) => ({
},
}));
-const donateTexts = [
- '✨島島阿學需要你的支持,讓人人都享有同等資源✨',
- '✨推廣民主教育,島島阿學需要你的支持✨',
- '✨用捐款與島島阿學一同推動民主教育✨',
-];
-
-const buildRandomText = () => {
- const randomIndex = Math.floor(Math.random() * donateTexts.length);
- return donateTexts[randomIndex];
-};
-
const texts = [
'✨「島島盃 - 2025 春季學習馬拉松」開跑啦!1/19 截止申請!✨',
'✨參加學習馬拉松,一起為自己重新打造喜歡的學習生活吧!✨',
'✨申請學習馬拉松,即可試用最新個人化功能輔助學習唷!✨',
+ // '✨島島阿學需要你的支持,讓人人都享有同等資源✨',
+ // '✨推廣民主教育,島島阿學需要你的支持✨',
+ // '✨用捐款與島島阿學一同推動民主教育✨',
];
-// const ToolbarWrapper = styled(Toolbar)`
-// margin: 0 auto;
-// `;
// 問卷 https://docs.google.com/forms/d/e/1FAIpQLSeyU9-Q-kIWp5uutcik3h-RO4o5VuG6oG0m-4u1Ua18EOu3aw/viewform
const Navigation = () => {
const [showPromotetionBar, setShowPromotionBar] = useState(true);
@@ -68,9 +57,7 @@ const Navigation = () => {
text={texts[currentIndex]}
toggleAction={setShowPromotionBar}
/>
- {/* */}
- {/* */}
>
);
diff --git a/shared/components/RelatedResources/Card/index.jsx b/shared/components/RelatedResources/Card/index.jsx
index 4e2988c..2c8ebeb 100644
--- a/shared/components/RelatedResources/Card/index.jsx
+++ b/shared/components/RelatedResources/Card/index.jsx
@@ -1,4 +1,3 @@
-import React, { useEffect, useMemo, useState } from 'react';
import styled from '@emotion/styled';
import { css } from '@emotion/react';
import { Tooltip } from '@mui/material';
diff --git a/shared/components/RelatedResources/index.jsx b/shared/components/RelatedResources/index.jsx
index 338cc6b..68b5f61 100644
--- a/shared/components/RelatedResources/index.jsx
+++ b/shared/components/RelatedResources/index.jsx
@@ -1,8 +1,7 @@
-import React, { useEffect, useMemo, useState } from 'react';
+import React, { useEffect } from 'react';
import styled from '@emotion/styled';
-import { css } from '@emotion/react';
import { useRouter } from 'next/router';
-import { Button, Paper, Box, Stack, Typography, Skeleton } from '@mui/material';
+import { Skeleton } from '@mui/material';
import { useDispatch, useSelector } from 'react-redux';
import Marquee from 'react-fast-marquee';
import { loadRelatedResources } from '../../../redux/actions/resource';
diff --git a/shared/components/ScrollToTop/index.jsx b/shared/components/ScrollToTop/index.jsx
index 39dce2c..882b654 100644
--- a/shared/components/ScrollToTop/index.jsx
+++ b/shared/components/ScrollToTop/index.jsx
@@ -1,10 +1,9 @@
import React, { useMemo } from 'react';
import styled from '@emotion/styled';
import ArrowUpwardIcon from '@mui/icons-material/ArrowUpward';
-import { Button, Fab } from '@mui/material';
+import { Fab } from '@mui/material';
import useScrollPosition from '@react-hook/window-scroll';
import { scrollToTop } from '../../../utils/ux';
-// import { Navigation } from "@mui/icons-material";
const ScrollToTopWrapper = styled.div`
position: fixed;
diff --git a/shared/components/Speech/index.jsx b/shared/components/Speech/index.jsx
index bb385db..12dc0b0 100644
--- a/shared/components/Speech/index.jsx
+++ b/shared/components/Speech/index.jsx
@@ -9,32 +9,11 @@ import {
Button,
CircularProgress,
IconButton,
- Typography,
Box,
} from '@mui/material';
-import { Clear as ClearIcon, Mic as MicIcon } from '@mui/icons-material';
+import { Clear as ClearIcon } from '@mui/icons-material';
import styled from '@emotion/styled';
-// import { CentralBlock, HorizontalBlock } from "./general";
import useUnchanger from '../../../hooks/useUnchanger';
-// import { speech as i18n } from "../i18n";
-// en - US;
-// eslint-disable-next-line react/display-name
-// const HorizontalBlock = forwardRef(({ children = <>>, minWidth = 0, style = {}, Tag = "div", width = "auto", ...otherProps }, ref) => {
-// return (
-//
-// {children}
-//
-// );
-// });
const pulse = keyframes`
0% {
diff --git a/shared/components/SurveyModal/index.jsx b/shared/components/SurveyModal/index.jsx
index 833e4e5..52c9081 100644
--- a/shared/components/SurveyModal/index.jsx
+++ b/shared/components/SurveyModal/index.jsx
@@ -1,7 +1,4 @@
import React, { useState } from 'react';
-import styled from '@emotion/styled';
-// import { css } from "@emotion/react";
-import { Box, Paper, Typography, Stack, Avatar } from '@mui/material';
import TextField from '@mui/material/TextField';
import Dialog from '@mui/material/Dialog';
import DialogActions from '@mui/material/DialogActions';
diff --git a/shared/components/WarmModal/index.jsx b/shared/components/WarmModal/index.jsx
index 9c2fc8a..3b88f8f 100644
--- a/shared/components/WarmModal/index.jsx
+++ b/shared/components/WarmModal/index.jsx
@@ -1,7 +1,5 @@
import React, { useState } from 'react';
-import styled from '@emotion/styled';
-// import { css } from "@emotion/react";
-import { Box, Paper, Typography, Stack, Avatar } from '@mui/material';
+import { Typography } from '@mui/material';
import TextField from '@mui/material/TextField';
import Dialog from '@mui/material/Dialog';
import DialogActions from '@mui/material/DialogActions';