add debug page at /settings/debug

This commit is contained in:
Sidney Alcantara
2022-06-28 17:14:11 +10:00
parent 96abb36430
commit c3167990b0
3 changed files with 155 additions and 0 deletions

View File

@@ -53,6 +53,8 @@ const UserSettingsPage = lazy(() => import("@src/pages/Settings/UserSettingsPage
const ProjectSettingsPage = lazy(() => import("@src/pages/Settings/ProjectSettingsPage" /* webpackChunkName: "ProjectSettingsPage" */));
// prettier-ignore
const UserManagementPage = lazy(() => import("@src/pages/Settings/UserManagementPage" /* webpackChunkName: "UserManagementPage" */));
// prettier-ignore
const DebugSettingsPage = lazy(() => import("@src/pages/Settings/DebugSettingsPage" /* webpackChunkName: "DebugSettingsPage" */));
// prettier-ignore
const ThemeTestPage = lazy(() => import("@src/pages/Test/ThemeTestPage" /* webpackChunkName: "ThemeTestPage" */));
@@ -143,6 +145,10 @@ export default function App() {
path={ROUTES.userManagement}
element={<UserManagementPage />}
/>
<Route
path={ROUTES.debugSettings}
element={<DebugSettingsPage />}
/>
{/* <Route path={ROUTES.rowyRunTest} element={<RowyRunTestPage />} /> */}
<Route path="/test/jotai" element={<JotaiTestPage />} />

View File

@@ -36,6 +36,7 @@ export enum ROUTES {
userSettings = "/settings/user",
projectSettings = "/settings/project",
userManagement = "/settings/userManagement",
debugSettings = "/settings/debug",
test = "/test",
themeTest = "/test/theme",
@@ -69,6 +70,7 @@ export const ROUTE_TITLES = {
[ROUTES.userSettings]: "Settings",
[ROUTES.projectSettings]: "Project Settings",
[ROUTES.userManagement]: "User Management",
[ROUTES.debugSettings]: "Debug",
[ROUTES.test]: "Test",
[ROUTES.themeTest]: "Theme Test",

View File

@@ -0,0 +1,147 @@
import { useAtom } from "jotai";
import { useSnackbar } from "notistack";
import {
updateDoc,
doc,
terminate,
clearIndexedDbPersistence,
} from "firebase/firestore";
import { Container, Stack, Button } from "@mui/material";
import SettingsSection from "@src/components/Settings/SettingsSection";
import {
globalScope,
projectSettingsAtom,
allUsersAtom,
updateUserAtom,
} from "@src/atoms/globalScope";
import UserManagementSourceFirebase from "@src/sources/UserManagementSourceFirebase";
import { firebaseDbAtom } from "@src/sources/ProjectSourceFirebase";
import { USERS } from "@src/config/dbPaths";
import { getTableSchemaPath } from "@src/utils/table";
export interface IProjectSettingsChildProps {
settings: Record<string, any>;
updateSettings: (data: Record<string, any>) => void;
publicSettings: Record<string, any>;
updatePublicSettings: (data: Record<string, any>) => void;
}
export default function DebugSettingsPage() {
const [firebaseDb] = useAtom(firebaseDbAtom, globalScope);
const [projectSettings] = useAtom(projectSettingsAtom, globalScope);
const [users] = useAtom(allUsersAtom, globalScope);
const [updateUser] = useAtom(updateUserAtom, globalScope);
const { enqueueSnackbar, closeSnackbar } = useSnackbar();
return (
<Container maxWidth="sm" sx={{ px: 1, pt: 1, pb: 7 + 3 + 3 }}>
<UserManagementSourceFirebase />
<Stack spacing={4}>
<SettingsSection title="Reset table filters">
<Button
onClick={async () => {
if (!updateUser)
enqueueSnackbar("Could not update user settings", {
variant: "error",
});
const loadingSnackbar = enqueueSnackbar(
"Resetting all user filters…",
{
persist: true,
}
);
try {
const promises = users.map((user) =>
updateUser!(`${USERS}/${user._rowy_ref!.id}`, {
tables: Object.entries(user.tables ?? {}).reduce(
(a, [key, table]) => {
a[key] = { ...table, filters: [] };
return a;
},
{} as Record<string, any>
),
})
);
await Promise.all(promises);
closeSnackbar(loadingSnackbar);
enqueueSnackbar("Reset all user filters", {
variant: "success",
});
} catch (e) {
enqueueSnackbar((e as Error).message, { variant: "error" });
closeSnackbar(loadingSnackbar);
}
}}
color="error"
style={{ display: "flex" }}
>
Reset all user filters
</Button>
<Button
onClick={async () => {
if (!projectSettings.tables) {
enqueueSnackbar("No tables to update");
return;
}
const loadingSnackbar = enqueueSnackbar(
"Resetting all table-level filters…",
{ persist: true }
);
try {
const promises = projectSettings.tables.map((table) =>
updateDoc(
doc(firebaseDb, getTableSchemaPath(table)),
"filters",
[]
)
);
await Promise.all(promises);
closeSnackbar(loadingSnackbar);
enqueueSnackbar("Reset all table-level filters", {
variant: "success",
});
} catch (e) {
enqueueSnackbar((e as Error).message, { variant: "error" });
closeSnackbar(loadingSnackbar);
}
}}
color="error"
style={{ display: "flex" }}
>
Reset all table-level filters
</Button>
</SettingsSection>
<SettingsSection
title="Local Firestore instance"
transitionTimeout={1 * 100}
>
<Button
onClick={async () => {
enqueueSnackbar("Clearing cache. Page will reload…", {
persist: true,
});
await terminate(firebaseDb);
await clearIndexedDbPersistence(firebaseDb);
window.location.href = "/";
}}
color="error"
style={{ display: "flex" }}
>
Reset local Firestore cache
</Button>
</SettingsSection>
</Stack>
</Container>
);
}