-
-
+
ape keys
@@ -24,7 +24,7 @@
-
+
-
@@ -131,7 +131,7 @@
+
diff --git a/frontend/src/ts/pages/account-settings.ts b/frontend/src/ts/pages/account-settings.ts
index 7e6f0d956..7b15e0ce3 100644
--- a/frontend/src/ts/pages/account-settings.ts
+++ b/frontend/src/ts/pages/account-settings.ts
@@ -1,4 +1,4 @@
-import Page from "./page";
+import { PageWithUrlParams } from "./page";
import * as Skeleton from "../utils/skeleton";
import { getAuthenticatedUser, isAuthenticated } from "../firebase";
import * as ActivePage from "../states/active-page";
@@ -9,15 +9,19 @@ import * as StreakHourOffsetModal from "../modals/streak-hour-offset";
import * as Loader from "../elements/loader";
import * as ApeKeyTable from "../elements/account-settings/ape-key-table";
import * as Notifications from "../elements/notifications";
+import { z } from "zod";
const pageElement = $(".page.pageAccountSettings");
-type State = {
- activeTab: "authentication" | "general" | "api" | "dangerZone";
-};
+const StateSchema = z.object({
+ tab: z.enum(["authentication", "account", "apeKeys", "dangerZone"]),
+});
+type State = z.infer;
+
+const UrlParameterSchema = StateSchema.partial();
const state: State = {
- activeTab: "general",
+ tab: "account",
};
function updateAuthenticationSections(): void {
@@ -122,20 +126,18 @@ function updateIntegrationSections(): void {
function updateTabs(): void {
void swapElements(
pageElement.find(".tab.active"),
- pageElement.find(`.tab[data-tab="${state.activeTab}"]`),
+ pageElement.find(`.tab[data-tab="${state.tab}"]`),
250,
async () => {
//
},
async () => {
pageElement.find(".tab").removeClass("active");
- pageElement
- .find(`.tab[data-tab="${state.activeTab}"]`)
- .addClass("active");
+ pageElement.find(`.tab[data-tab="${state.tab}"]`).addClass("active");
}
);
pageElement.find("button").removeClass("active");
- pageElement.find(`button[data-tab="${state.activeTab}"]`).addClass("active");
+ pageElement.find(`button[data-tab="${state.tab}"]`).addClass("active");
}
function updateAccountSections(): void {
@@ -180,11 +182,13 @@ export function updateUI(): void {
updateAccountSections();
void ApeKeyTable.update(updateUI);
updateTabs();
+ page.setUrlParams(state);
}
$(".page.pageAccountSettings").on("click", ".tabs button", (event) => {
- state.activeTab = $(event.target).data("tab") as State["activeTab"];
+ state.tab = $(event.target).data("tab") as State["tab"];
updateTabs();
+ page.setUrlParams(state);
});
$(
@@ -207,16 +211,21 @@ $(".page.pageAccountSettings #setStreakHourOffset").on("click", () => {
StreakHourOffsetModal.show();
});
-export const page = new Page({
+export const page = new PageWithUrlParams({
id: "accountSettings",
display: "Account Settings",
element: pageElement,
path: "/account-settings",
+ urlParamsSchema: UrlParameterSchema,
afterHide: async (): Promise => {
Skeleton.remove("pageAccountSettings");
},
- beforeShow: async (): Promise => {
+ beforeShow: async (options): Promise => {
+ if (options.urlParams?.tab !== undefined) {
+ state.tab = options.urlParams.tab;
+ }
Skeleton.append("pageAccountSettings", "main");
+ pageElement.find(`.tab[data-tab="${state.tab}"]`).addClass("active");
updateUI();
},
});