1
0
Fork 0
VaultUI/src/pages/Secrets/SecretTitleElement.ts
2021-05-20 14:12:12 +01:00

56 lines
1.8 KiB
TypeScript

import { PageRouter } from "z-pagerouter";
import { PageState } from "../../PageState";
import { makeElement } from "z-makeelement";
function currentTitleSecretText(state: PageState, suffix = ""): string {
let secretItemText = state.secretItem;
secretItemText += suffix;
if (state.secretVersion !== null) secretItemText += ` (v${state.secretVersion})`;
return secretItemText;
}
export async function SecretTitleElement(router: PageRouter, suffix = ""): Promise<HTMLElement> {
const state = router.state as PageState;
const titleElement = makeElement({
tag: "div",
children: [
makeElement({
tag: "a",
text: state.baseMount + " ",
onclick: async () => {
state.secretPath = [];
state.secretItem = "";
state.secretVersion = null;
if (state.secretMountType.startsWith("kv") || state.secretMountType == "cubbyhole") {
await router.changePage("KEY_VALUE_VIEW");
} else if (state.secretMountType == "totp") {
await router.changePage("TOTP");
} else if (state.secretMountType == "transit") {
await router.changePage("TRANSIT_VIEW");
}
},
}),
...state.secretPath.map((secretPath, index, secretPaths) => {
return makeElement({
tag: "a",
text: secretPath + " ",
onclick: async () => {
state.secretVersion = null;
if (state.secretMountType.startsWith("kv")) {
state.secretPath = secretPaths.slice(0, index + 1);
await router.changePage("KEY_VALUE_VIEW");
}
},
});
}),
makeElement({
tag: "span",
condition: state.secretItem.length != 0,
text: currentTitleSecretText(state, suffix),
}),
],
});
return titleElement;
}