Add setup and restore flow
This commit is contained in:
1 parent
19e4621aeb
commit
72229cf14c
15 files changed
+511
-94
No files matched your search
+29
-1
@@ -53,7 +53,7 @@ import {
|
||||
import { usePreferencesStore } from "@/stores/preferences/preferences-provider";
|
||||
|
||||
import { cn } from "./lib/utils";
|
||||
import { ApiError, getCurrentUser, logout, lookupTicket } from "./api";
|
||||
import { ApiError, getCurrentUser, getSetupStatus, logout, lookupTicket } from "./api";
|
||||
import { formatTimer } from "./format";
|
||||
import { activeElapsedMs, pauseEntry, readStoredTimers, resumeEntry, storageKeyForUser, ticketPattern, type TimerEntry } from "./timers";
|
||||
import { AdminUsersPage } from "./views/AdminUsersPage";
|
||||
@@ -64,6 +64,7 @@ import { MonthlyClosePage } from "./views/MonthlyClosePage";
|
||||
import { ProfilePage } from "./views/ProfilePage";
|
||||
import { RecurringBillingsPage } from "./views/RecurringBillingsPage";
|
||||
import { StatisticsPage } from "./views/StatisticsPage";
|
||||
import { SetupPage } from "./views/SetupPage";
|
||||
import { TicketDetailPage } from "./views/TicketDetailPage";
|
||||
import { TimerPage } from "./views/TimerPage";
|
||||
import type { AuthUser, PeriodType } from "./types";
|
||||
@@ -345,6 +346,7 @@ export function App() {
|
||||
const { path, route, navHandler, navigate } = useAppRouter();
|
||||
const [currentUser, setCurrentUser] = useState<AuthUser | null>(null);
|
||||
const [authLoading, setAuthLoading] = useState(true);
|
||||
const [setupRequired, setSetupRequired] = useState(false);
|
||||
const [timers, setTimers] = useState<TimerEntry[]>([]);
|
||||
const [timersLoaded, setTimersLoaded] = useState(false);
|
||||
const [timerOwnerId, setTimerOwnerId] = useState<string | null>(null);
|
||||
@@ -354,6 +356,15 @@ export function App() {
|
||||
useEffect(() => {
|
||||
async function loadUser() {
|
||||
try {
|
||||
const setup = await getSetupStatus();
|
||||
|
||||
if (setup.required) {
|
||||
setSetupRequired(true);
|
||||
setCurrentUser(null);
|
||||
return;
|
||||
}
|
||||
|
||||
setSetupRequired(false);
|
||||
const result = await getCurrentUser();
|
||||
setCurrentUser(result.user);
|
||||
} catch (error) {
|
||||
@@ -554,6 +565,23 @@ export function App() {
|
||||
);
|
||||
}
|
||||
|
||||
if (setupRequired) {
|
||||
return (
|
||||
<SetupPage
|
||||
onAdminCreated={(user) => {
|
||||
setSetupRequired(false);
|
||||
setCurrentUser(user);
|
||||
navigate("/admin/users");
|
||||
}}
|
||||
onRestoreComplete={() => {
|
||||
setSetupRequired(false);
|
||||
setCurrentUser(null);
|
||||
navigate("/");
|
||||
}}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
if (!currentUser) {
|
||||
return <LoginPage onLogin={setCurrentUser} />;
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user