From 561c031e0f290d7c63e17b6a645e8b145cf2e4d1 Mon Sep 17 00:00:00 2001 From: Derick M <58572875+TurtIeSocks@users.noreply.github.com> Date: Mon, 26 Feb 2024 15:04:54 -0500 Subject: [PATCH] feat: data management page --- packages/locales/lib/human/en.json | 25 ++++- src/assets/mui/theme.js | 7 +- src/components/App.jsx | 4 +- src/components/ClearStorage.jsx | 27 ----- src/components/ReactRouter.jsx | 25 +++-- src/components/Reset.jsx | 10 ++ .../layout/dialogs/ResetFilters.jsx | 82 +++++++++------- .../layout/general/BasicListButton.jsx | 6 +- src/features/data/components/Notification.jsx | 25 +++++ src/features/data/components/ResetFilters.jsx | 54 ++++++++++ src/features/data/components/ResetGeneral.jsx | 98 +++++++++++++++++++ src/features/data/components/Shared.jsx | 87 ++++++++++++++++ src/features/data/components/TopRow.jsx | 67 +++++++++++++ src/features/data/hooks/store.js | 43 ++++++++ src/features/data/index.jsx | 42 ++++++++ src/hooks/useMemory.js | 4 +- src/hooks/useRefresh.js | 10 +- src/hooks/useStorage.js | 2 +- src/services/functions/resetState.js | 84 ++++++++++++++++ 19 files changed, 615 insertions(+), 87 deletions(-) delete mode 100644 src/components/ClearStorage.jsx create mode 100644 src/components/Reset.jsx create mode 100644 src/features/data/components/Notification.jsx create mode 100644 src/features/data/components/ResetFilters.jsx create mode 100644 src/features/data/components/ResetGeneral.jsx create mode 100644 src/features/data/components/Shared.jsx create mode 100644 src/features/data/components/TopRow.jsx create mode 100644 src/features/data/hooks/store.js create mode 100644 src/features/data/index.jsx create mode 100644 src/services/functions/resetState.js diff --git a/packages/locales/lib/human/en.json b/packages/locales/lib/human/en.json index b0092ba98..fad3ed842 100644 --- a/packages/locales/lib/human/en.json +++ b/packages/locales/lib/human/en.json @@ -737,5 +737,28 @@ "filter_help": "Filter Help", "kilometers": "Kilometers", "miles": "Miles", - "distance_unit": "Distance Unit" + "distance_unit": "Distance Unit", + "data_management": "Data Management", + "reset_or_manage_text": "You can either hard reset your filters or you can view the data management page which will allow you to reset individual categories.", + "reset_audio": "Reset Audio", + "reset_all": "Reset All", + "reset_icons": "Reset Icons", + "reset_position": "Reset Position", + "reset_ui": "Reset UI", + "reset_options": "Reset Options", + "reset_menus": "Reset Menus", + "reset_settings": "Reset Settings", + "reset_pokemon": "Reset Pokémon", + "reset_pokestops": "Reset PokéStops", + "reset_gyms": "Reset Gyms", + "reset_nests": "Reset Nests", + "reset_portals": "Reset Portals", + "reset_routes": "Reset Routes", + "reset_scan_areas": "Reset Scan Areas", + "reset_scan_cells": "Reset Scan Cells", + "reset_devices": "Reset Devices", + "reset_weather": "Reset Weather", + "reset_s2cells": "Reset S2 Cells", + "reset_spawnpoints": "Reset Spawnpoints", + "reset_submission_cells": "Reset Submission Cells" } diff --git a/src/assets/mui/theme.js b/src/assets/mui/theme.js index 543d02959..c56cd60a5 100644 --- a/src/assets/mui/theme.js +++ b/src/assets/mui/theme.js @@ -152,8 +152,7 @@ const components = { * @returns {import('@mui/material').Theme} */ export default function useCustomTheme() { - const primary = useMemory((s) => s.theme.primary) - const secondary = useMemory((s) => s.theme.secondary) + const { primary, secondary } = useMemory((s) => s.theme) const darkMode = useStorage((s) => s.darkMode) if (darkMode) { @@ -177,6 +176,10 @@ export default function useCustomTheme() { main: secondary, contrastText: '#fff', }, + info: { + main: '#2AB5F6', + contrastText: '#fff', + }, discord: { main: '#5865F2', green: '#57F287', diff --git a/src/components/App.jsx b/src/components/App.jsx index 80e4e94b5..0e8f581c5 100644 --- a/src/components/App.jsx +++ b/src/components/App.jsx @@ -19,9 +19,7 @@ import '@services/events' import ErrorBoundary from './ErrorBoundary' import ReactRouter from './ReactRouter' import HolidayEffects from './HolidayEffects' -/** - * @type {Record} - */ + const LOADING_LOCALES = { de: 'Übersetzungen werden geladen', en: 'Loading Translations', diff --git a/src/components/ClearStorage.jsx b/src/components/ClearStorage.jsx deleted file mode 100644 index 292ec3785..000000000 --- a/src/components/ClearStorage.jsx +++ /dev/null @@ -1,27 +0,0 @@ -// @ts-check -import * as React from 'react' -import { Navigate } from 'react-router-dom' - -import { useMemory } from '@hooks/useMemory' -import { useStorage } from '@hooks/useStorage' - -export default function ClearStorage() { - React.useEffect(() => { - localStorage.clear() - sessionStorage.clear() - - const { filters, menus } = useMemory.getState() - useStorage.setState({ - filters: structuredClone(filters), - menus: structuredClone(menus), - location: [ - CONFIG.map.general.startLat || 0, - CONFIG.map.general.startLon || 0, - ], - zoom: CONFIG.map.general.startZoom, - }) - useMemory.setState({ Icons: null, Audio: null }) - }, []) - - return -} diff --git a/src/components/ReactRouter.jsx b/src/components/ReactRouter.jsx index 699c01a90..071aaa80a 100644 --- a/src/components/ReactRouter.jsx +++ b/src/components/ReactRouter.jsx @@ -6,8 +6,9 @@ import Auth from './layout/auth/Auth' import Login from './layout/auth/Login' import Blocked from './layout/auth/Blocked' import Errors from './Errors' -import ClearStorage from './ClearStorage' +import DataManagement from '../features/data' import Config from './Config' +import ResetAll from './Reset' const Playground = React.lazy(() => import('../features/playground')) @@ -21,13 +22,23 @@ const loginRoute = ( ) -const resetRoute = +const dataRoute = ( + + + +) const blockedRoute = ( ) +const playgroundRoute = ( + + + +) const errorRoute = +const resetRoute = export default function ReactRouter() { return ( @@ -35,14 +46,8 @@ export default function ReactRouter() { - - - - } - /> + + diff --git a/src/components/Reset.jsx b/src/components/Reset.jsx new file mode 100644 index 000000000..a67888b32 --- /dev/null +++ b/src/components/Reset.jsx @@ -0,0 +1,10 @@ +// @ts-check +import * as React from 'react' +import { Navigate } from 'react-router-dom' + +import { hardReset } from '@services/functions/resetState' + +export default function ResetAll() { + hardReset() + return +} diff --git a/src/components/layout/dialogs/ResetFilters.jsx b/src/components/layout/dialogs/ResetFilters.jsx index 100d32b71..a27aa7176 100644 --- a/src/components/layout/dialogs/ResetFilters.jsx +++ b/src/components/layout/dialogs/ResetFilters.jsx @@ -1,8 +1,10 @@ +// @ts-check import * as React from 'react' import DialogContent from '@mui/material/DialogContent' import Typography from '@mui/material/Typography' +import Grid2 from '@mui/material/Unstable_Grid2' import Button from '@mui/material/Button' -import { Navigate } from 'react-router-dom' +import { useNavigate } from 'react-router-dom' import { useTranslation } from 'react-i18next' import { useLayoutStore } from '@hooks/useLayoutStore' @@ -11,54 +13,64 @@ import Header from '../general/Header' import Footer from '../general/Footer' import { DialogWrapper } from './DialogWrapper' -export default function ResetFilters() { - const { t } = useTranslation() - const [redirect, setRedirect] = React.useState(false) +const handleClose = () => useLayoutStore.setState({ resetFilters: false }) - const handleClose = React.useCallback( - () => useLayoutStore.setState({ resetFilters: false }), - [], - ) +const FOOTER_OPTIONS = + /** @type {import('../general/Footer').FooterButton[]} */ ([ + { + name: 'close', + action: handleClose, + color: 'primary', + align: 'right', + }, + ]) - if (redirect) { - return - } +export default function ResetFilters() { + const { t } = useTranslation() + const navigate = useNavigate() return ( -
- - - {t('filters_reset_text')} - -
- +
+ + + + {t('reset_or_manage_text')} + + + + + + - -
- -