mirror of
https://github.com/rowyio/rowy.git
synced 2025-12-29 00:16:39 +01:00
add debug page at /settings/debug
This commit is contained in:
@@ -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 />} />
|
||||
|
||||
@@ -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",
|
||||
|
||||
147
src/pages/Settings/DebugSettingsPage.tsx
Normal file
147
src/pages/Settings/DebugSettingsPage.tsx
Normal 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>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user