2022-10-30 16:28:14 +08:00
|
|
|
<script>
|
|
|
|
import { Collection } from "pocketbase";
|
|
|
|
import OverlayPanel from "@/components/base/OverlayPanel.svelte";
|
|
|
|
|
|
|
|
const baseTabs = {
|
|
|
|
list: {
|
|
|
|
label: "List/Search",
|
|
|
|
component: import("@/components/collections/docs/ListApiDocs.svelte"),
|
|
|
|
},
|
|
|
|
view: {
|
|
|
|
label: "View",
|
|
|
|
component: import("@/components/collections/docs/ViewApiDocs.svelte"),
|
|
|
|
},
|
|
|
|
create: {
|
|
|
|
label: "Create",
|
|
|
|
component: import("@/components/collections/docs/CreateApiDocs.svelte"),
|
|
|
|
},
|
|
|
|
update: {
|
|
|
|
label: "Update",
|
|
|
|
component: import("@/components/collections/docs/UpdateApiDocs.svelte"),
|
|
|
|
},
|
|
|
|
delete: {
|
|
|
|
label: "Delete",
|
|
|
|
component: import("@/components/collections/docs/DeleteApiDocs.svelte"),
|
|
|
|
},
|
|
|
|
realtime: {
|
|
|
|
label: "Realtime",
|
|
|
|
component: import("@/components/collections/docs/RealtimeApiDocs.svelte"),
|
|
|
|
},
|
|
|
|
};
|
|
|
|
|
|
|
|
const authTabs = {
|
|
|
|
"auth-with-password": {
|
|
|
|
label: "Auth with password",
|
|
|
|
component: import("@/components/collections/docs/AuthWithPasswordDocs.svelte"),
|
|
|
|
},
|
|
|
|
"auth-with-oauth2": {
|
|
|
|
label: "Auth with OAuth2",
|
|
|
|
component: import("@/components/collections/docs/AuthWithOAuth2Docs.svelte"),
|
|
|
|
},
|
|
|
|
refresh: {
|
|
|
|
label: "Auth refresh",
|
|
|
|
component: import("@/components/collections/docs/AuthRefreshDocs.svelte"),
|
|
|
|
},
|
|
|
|
"request-verification": {
|
|
|
|
label: "Request verification",
|
|
|
|
component: import("@/components/collections/docs/RequestVerificationDocs.svelte"),
|
|
|
|
},
|
|
|
|
"confirm-verification": {
|
|
|
|
label: "Confirm verification",
|
|
|
|
component: import("@/components/collections/docs/ConfirmVerificationDocs.svelte"),
|
|
|
|
},
|
|
|
|
"request-password-reset": {
|
|
|
|
label: "Request password reset",
|
|
|
|
component: import("@/components/collections/docs/RequestPasswordResetDocs.svelte"),
|
|
|
|
},
|
|
|
|
"confirm-password-reset": {
|
|
|
|
label: "Confirm password reset",
|
|
|
|
component: import("@/components/collections/docs/ConfirmPasswordResetDocs.svelte"),
|
|
|
|
},
|
|
|
|
"request-email-change": {
|
|
|
|
label: "Request email change",
|
|
|
|
component: import("@/components/collections/docs/RequestEmailChangeDocs.svelte"),
|
|
|
|
},
|
|
|
|
"confirm-email-change": {
|
|
|
|
label: "Confirm email change",
|
|
|
|
component: import("@/components/collections/docs/ConfirmEmailChangeDocs.svelte"),
|
|
|
|
},
|
|
|
|
"list-auth-methods": {
|
|
|
|
label: "List auth methods",
|
|
|
|
component: import("@/components/collections/docs/AuthMethodsDocs.svelte"),
|
|
|
|
},
|
|
|
|
"list-linked-accounts": {
|
|
|
|
label: "List OAuth2 accounts",
|
|
|
|
component: import("@/components/collections/docs/ListExternalAuthsDocs.svelte"),
|
|
|
|
},
|
|
|
|
"unlink-account": {
|
|
|
|
label: "Unlink OAuth2 account",
|
|
|
|
component: import("@/components/collections/docs/UnlinkExternalAuthDocs.svelte"),
|
|
|
|
},
|
|
|
|
};
|
|
|
|
|
|
|
|
let docsPanel;
|
|
|
|
let collection = new Collection();
|
|
|
|
let activeTab;
|
|
|
|
let tabs = [];
|
|
|
|
|
|
|
|
$: if (collection.isAuth) {
|
|
|
|
tabs = Object.assign({}, baseTabs, authTabs);
|
|
|
|
if (!collection?.options.allowUsernameAuth && !collection?.options.allowEmailAuth) {
|
|
|
|
delete tabs["auth-with-password"];
|
|
|
|
}
|
|
|
|
if (!collection?.options.allowOAuth2Auth) {
|
|
|
|
delete tabs["auth-with-oauth2"];
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
tabs = Object.assign({}, baseTabs);
|
|
|
|
}
|
|
|
|
|
|
|
|
// reset active tab on tabs list change
|
|
|
|
if (tabs.length) {
|
|
|
|
activeTab = Object.keys(tabs)[0];
|
|
|
|
}
|
|
|
|
|
|
|
|
export function show(model) {
|
|
|
|
collection = model;
|
|
|
|
|
|
|
|
changeTab(Object.keys(tabs)[0]);
|
|
|
|
|
|
|
|
return docsPanel?.show();
|
|
|
|
}
|
|
|
|
|
|
|
|
export function hide() {
|
|
|
|
return docsPanel?.hide();
|
|
|
|
}
|
|
|
|
|
|
|
|
export function changeTab(newTab) {
|
|
|
|
activeTab = newTab;
|
|
|
|
}
|
|
|
|
</script>
|
|
|
|
|
|
|
|
<OverlayPanel bind:this={docsPanel} on:hide on:show class="docs-panel">
|
|
|
|
<div class="docs-content-wrapper">
|
|
|
|
<aside class="docs-sidebar" class:compact={collection?.isAuth}>
|
|
|
|
<nav class="sidebar-content">
|
2022-11-03 17:36:59 +08:00
|
|
|
{#each Object.entries(tabs) as [key, tab], i (key)}
|
|
|
|
<!-- add a separator before the first auth tab -->
|
|
|
|
{#if i === Object.keys(baseTabs).length}
|
|
|
|
<hr class="m-t-sm m-b-sm" />
|
|
|
|
{/if}
|
|
|
|
|
2022-10-30 16:28:14 +08:00
|
|
|
<button
|
|
|
|
type="button"
|
|
|
|
class="sidebar-item"
|
|
|
|
class:active={activeTab === key}
|
|
|
|
on:click={() => changeTab(key)}
|
|
|
|
>
|
|
|
|
{tab.label}
|
|
|
|
</button>
|
|
|
|
{/each}
|
|
|
|
</nav>
|
|
|
|
</aside>
|
|
|
|
|
|
|
|
<div class="docs-content">
|
|
|
|
{#each Object.entries(tabs) as [key, tab] (key)}
|
|
|
|
{#if activeTab === key}
|
|
|
|
{#await tab.component then { default: TabComponent }}
|
|
|
|
<TabComponent {collection} />
|
|
|
|
{/await}
|
|
|
|
{/if}
|
|
|
|
{/each}
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<!-- visible only on small screens -->
|
|
|
|
<svelte:fragment slot="footer">
|
2023-01-24 03:57:35 +08:00
|
|
|
<button type="button" class="btn btn-transparent" on:click={() => hide()}>
|
2022-10-30 16:28:14 +08:00
|
|
|
<span class="txt">Close</span>
|
|
|
|
</button>
|
|
|
|
</svelte:fragment>
|
|
|
|
</OverlayPanel>
|