Skip to content

Commit 9d90bab

Browse files
committed
feat: Implement authPersistence in ThemeConfig
1 parent b0d2b7d commit 9d90bab

File tree

4 files changed

+18
-10
lines changed

4 files changed

+18
-10
lines changed

packages/docusaurus-theme-openapi-docs/src/theme/ApiExplorer/Authorization/slice.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ export function createAuth({
5858
};
5959
options?: ThemeConfig["api"];
6060
}): AuthState {
61-
const storage = createStorage("sessionStorage");
61+
const storage = createStorage(opts?.authPersistence ?? "sessionStorage");
6262

6363
let data: AuthState["data"] = {};
6464
let options: AuthState["options"] = {};

packages/docusaurus-theme-openapi-docs/src/theme/ApiExplorer/persistanceMiddleware.ts

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ import {
1111
setSelectedAuth,
1212
} from "@theme/ApiExplorer/Authorization/slice";
1313
import { AppDispatch, RootState } from "@theme/ApiItem/store";
14-
/* eslint-disable import/no-extraneous-dependencies*/
15-
import { ThemeConfig } from "docusaurus-theme-openapi-docs/src/types";
14+
import type { ServerObject } from "docusaurus-plugin-openapi-docs/src/openapi/types";
15+
import type { ThemeConfig } from "docusaurus-theme-openapi-docs/src/types";
1616

1717
import { createStorage, hashArray } from "./storage-utils";
1818

@@ -25,7 +25,9 @@ export function createPersistanceMiddleware(options: ThemeConfig["api"]) {
2525

2626
const state = storeAPI.getState();
2727

28-
const storage = createStorage("sessionStorage");
28+
const storage = createStorage(
29+
options?.authPersistence ?? "sessionStorage"
30+
);
2931

3032
if (action.type === setAuthData.type) {
3133
for (const [key, value] of Object.entries(state.auth.data)) {
@@ -60,11 +62,14 @@ export function createPersistanceMiddleware(options: ThemeConfig["api"]) {
6062
}
6163

6264
if (action.type === "server/setServerVariable") {
63-
const server = storage.getItem("server") ?? "{}";
65+
const server = storage.getItem("server");
6466
const variables = JSON.parse(action.payload);
65-
let serverObject = JSON.parse(server);
66-
serverObject.variables[variables.key].default = variables.value;
67-
storage.setItem("server", JSON.stringify(serverObject));
67+
68+
let serverObject = (JSON.parse(server!) as ServerObject) ?? {};
69+
if (serverObject?.variables?.[variables.key]) {
70+
serverObject.variables[variables.key].default = variables.value;
71+
storage.setItem("server", JSON.stringify(serverObject));
72+
}
6873
}
6974

7075
return result;

packages/docusaurus-theme-openapi-docs/src/theme/ApiItem/index.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import useDocusaurusContext from "@docusaurus/useDocusaurusContext";
1515
import useIsBrowser from "@docusaurus/useIsBrowser";
1616
import { createAuth } from "@theme/ApiExplorer/Authorization/slice";
1717
import { createPersistanceMiddleware } from "@theme/ApiExplorer/persistanceMiddleware";
18+
import { createStorage } from "@theme/ApiExplorer/storage-utils";
1819
import DocItemLayout from "@theme/ApiItem/Layout";
1920
import CodeBlock from "@theme/CodeBlock";
2021
import type { Props } from "@theme/DocItem";
@@ -129,10 +130,12 @@ export default function ApiItem(props: Props): JSX.Element {
129130
securitySchemes: api?.securitySchemes,
130131
options,
131132
});
133+
134+
const storage = createStorage(options?.authPersistence ?? "sessionStorage");
132135
// TODO: determine way to rehydrate without flashing
133136
// const acceptValue = window?.sessionStorage.getItem("accept");
134137
// const contentTypeValue = window?.sessionStorage.getItem("contentType");
135-
const server = window?.sessionStorage.getItem("server");
138+
const server = storage.getItem("server");
136139
const serverObject = (JSON.parse(server!) as ServerObject) ?? {};
137140

138141
store2 = createStoreWithState(

packages/docusaurus-theme-openapi-docs/src/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import type { JSONSchema4, JSONSchema6, JSONSchema7 } from "json-schema";
1111
export interface ThemeConfig {
1212
api?: {
1313
proxy?: string;
14-
authPersistance?: false | "localStorage" | "sessionStorage";
14+
authPersistence?: false | "localStorage" | "sessionStorage";
1515
};
1616
}
1717

0 commit comments

Comments
 (0)