added version number in the footer
This commit is contained in:
@@ -4,6 +4,7 @@
|
||||
import CommonHelper from "@/utils/CommonHelper";
|
||||
import { pageTitle } from "@/stores/app";
|
||||
import { admin as loggedAdmin } from "@/stores/admin";
|
||||
import PageWrapper from "@/components/base/PageWrapper.svelte";
|
||||
import Searchbar from "@/components/base/Searchbar.svelte";
|
||||
import RefreshButton from "@/components/base/RefreshButton.svelte";
|
||||
import SortHeader from "@/components/base/SortHeader.svelte";
|
||||
@@ -35,10 +36,11 @@
|
||||
|
||||
admins = []; // reset
|
||||
|
||||
return ApiClient.admins.getFullList(100, {
|
||||
sort: sort || "-created",
|
||||
filter: filter,
|
||||
})
|
||||
return ApiClient.admins
|
||||
.getFullList(100, {
|
||||
sort: sort || "-created",
|
||||
filter: filter,
|
||||
})
|
||||
.then((result) => {
|
||||
admins = result;
|
||||
isLoading = false;
|
||||
@@ -60,7 +62,7 @@
|
||||
|
||||
<SettingsSidebar />
|
||||
|
||||
<main class="page-wrapper">
|
||||
<PageWrapper>
|
||||
<header class="page-header">
|
||||
<nav class="breadcrumbs">
|
||||
<div class="breadcrumb-item">Settings</div>
|
||||
@@ -197,6 +199,6 @@
|
||||
{#if admins.length}
|
||||
<small class="block txt-hint txt-right m-t-sm">Showing {admins.length} of {admins.length}</small>
|
||||
{/if}
|
||||
</main>
|
||||
</PageWrapper>
|
||||
|
||||
<AdminUpsertPanel bind:this={adminUpsertPanel} on:save={() => loadAdmins()} on:delete={() => loadAdmins()} />
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
<script>
|
||||
import PageWrapper from "@/components/base/PageWrapper.svelte";
|
||||
|
||||
export let nobranding = false;
|
||||
</script>
|
||||
|
||||
<div class="page-wrapper full-page-panel">
|
||||
<div class="flex-fill" />
|
||||
|
||||
<div class="wrapper wrapper-sm m-b-xl">
|
||||
<PageWrapper class="full-page" center>
|
||||
<div class="wrapper wrapper-sm m-b-xl panel-wrapper">
|
||||
{#if !nobranding}
|
||||
<div class="block txt-center m-b-lg">
|
||||
<figure class="logo">
|
||||
@@ -23,18 +23,10 @@
|
||||
|
||||
<slot />
|
||||
</div>
|
||||
|
||||
<div class="flex-fill" />
|
||||
</div>
|
||||
</PageWrapper>
|
||||
|
||||
<style>
|
||||
.full-page-panel {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
background: var(--baseColor);
|
||||
}
|
||||
.full-page-panel .wrapper {
|
||||
.panel-wrapper {
|
||||
animation: slideIn 200ms;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
<script>
|
||||
export let center = false;
|
||||
|
||||
let classes = "";
|
||||
export { classes as class }; // export reserved keyword
|
||||
</script>
|
||||
|
||||
<div class="page-wrapper {classes}" class:center-content={center}>
|
||||
<main class="page-content">
|
||||
<slot />
|
||||
</main>
|
||||
|
||||
<footer class="page-footer">
|
||||
<a
|
||||
href={import.meta.env.PB_RELEASES}
|
||||
class="inline-flex flex-gap-5"
|
||||
target="_blank"
|
||||
rel="noopener"
|
||||
title="Releases"
|
||||
>
|
||||
<span class="txt">PocketBase {import.meta.env.PB_VERSION}</span>
|
||||
</a>
|
||||
</footer>
|
||||
</div>
|
||||
@@ -1,6 +1,7 @@
|
||||
<script>
|
||||
import { pageTitle } from "@/stores/app";
|
||||
import Field from "@/components/base/Field.svelte";
|
||||
import PageWrapper from "@/components/base/PageWrapper.svelte";
|
||||
import Searchbar from "@/components/base/Searchbar.svelte";
|
||||
import RefreshButton from "@/components/base/RefreshButton.svelte";
|
||||
import LogsList from "@/components/logs/LogsList.svelte";
|
||||
@@ -27,7 +28,7 @@
|
||||
}
|
||||
</script>
|
||||
|
||||
<main class="page-wrapper">
|
||||
<PageWrapper>
|
||||
<div class="page-header-wrapper m-b-0">
|
||||
<header class="page-header">
|
||||
<nav class="breadcrumbs">
|
||||
@@ -63,6 +64,6 @@
|
||||
{#key refreshToken}
|
||||
<LogsList bind:filter {presets} on:select={(e) => logPanel?.show(e?.detail)} />
|
||||
{/key}
|
||||
</main>
|
||||
</PageWrapper>
|
||||
|
||||
<LogViewPanel bind:this={logPanel} />
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
} from "@/stores/collections";
|
||||
import tooltip from "@/actions/tooltip";
|
||||
import { pageTitle } from "@/stores/app";
|
||||
import PageWrapper from "@/components/base/PageWrapper.svelte";
|
||||
import Searchbar from "@/components/base/Searchbar.svelte";
|
||||
import RefreshButton from "@/components/base/RefreshButton.svelte";
|
||||
import CollectionsSidebar from "@/components/collections/CollectionsSidebar.svelte";
|
||||
@@ -55,29 +56,33 @@
|
||||
</script>
|
||||
|
||||
{#if $isCollectionsLoading}
|
||||
<div class="placeholder-section m-b-base">
|
||||
<span class="loader loader-lg" />
|
||||
<h1>Loading collections...</h1>
|
||||
</div>
|
||||
{:else if !viewableCollections.length}
|
||||
<div class="placeholder-section m-b-base">
|
||||
<div class="icon">
|
||||
<i class="ri-database-2-line" />
|
||||
<PageWrapper center>
|
||||
<div class="placeholder-section m-b-base">
|
||||
<span class="loader loader-lg" />
|
||||
<h1>Loading collections...</h1>
|
||||
</div>
|
||||
<h1 class="m-b-10">Create your first collection to add records!</h1>
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-expanded-lg btn-lg"
|
||||
on:click={() => collectionUpsertPanel?.show()}
|
||||
>
|
||||
<i class="ri-add-line" />
|
||||
<span class="txt">Create new collection</span>
|
||||
</button>
|
||||
</div>
|
||||
</PageWrapper>
|
||||
{:else if !viewableCollections.length}
|
||||
<PageWrapper center>
|
||||
<div class="placeholder-section m-b-base">
|
||||
<div class="icon">
|
||||
<i class="ri-database-2-line" />
|
||||
</div>
|
||||
<h1 class="m-b-10">Create your first collection to add records!</h1>
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-expanded-lg btn-lg"
|
||||
on:click={() => collectionUpsertPanel?.show()}
|
||||
>
|
||||
<i class="ri-add-line" />
|
||||
<span class="txt">Create new collection</span>
|
||||
</button>
|
||||
</div>
|
||||
</PageWrapper>
|
||||
{:else}
|
||||
<CollectionsSidebar />
|
||||
|
||||
<main class="page-wrapper">
|
||||
<PageWrapper>
|
||||
<header class="page-header">
|
||||
<nav class="breadcrumbs">
|
||||
<div class="breadcrumb-item">Collections</div>
|
||||
@@ -127,7 +132,7 @@
|
||||
bind:sort
|
||||
on:select={(e) => recordPanel?.show(e?.detail)}
|
||||
/>
|
||||
</main>
|
||||
</PageWrapper>
|
||||
{/if}
|
||||
|
||||
<CollectionUpsertPanel bind:this={collectionUpsertPanel} />
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
import CommonHelper from "@/utils/CommonHelper";
|
||||
import OverlayPanel from "@/components/base/OverlayPanel.svelte";
|
||||
import { addSuccessToast } from "@/stores/toasts";
|
||||
import { confirm } from "@/stores/confirmation";
|
||||
|
||||
const dispatch = createEventDispatcher();
|
||||
|
||||
@@ -17,6 +18,10 @@
|
||||
loadChanges();
|
||||
}
|
||||
|
||||
$: deletedCollections = oldCollections.filter((old) => {
|
||||
return !CommonHelper.findByKey(newCollections, "id", old.id)?.id;
|
||||
});
|
||||
|
||||
export function show(a, b) {
|
||||
oldCollections = a;
|
||||
newCollections = b;
|
||||
@@ -103,7 +108,24 @@
|
||||
return diffsToHtml(diffs, ops);
|
||||
}
|
||||
|
||||
async function submitImport() {
|
||||
function submitWithConfirm() {
|
||||
if (deletedCollections.length) {
|
||||
const deletedNames = deletedCollections.map((c) => c.name);
|
||||
|
||||
confirm(
|
||||
`Do you really want to delete the following collections and their related records data:\n- ${deletedNames.join(
|
||||
"\n- "
|
||||
)}?`,
|
||||
() => {
|
||||
submit();
|
||||
}
|
||||
);
|
||||
} else {
|
||||
submit();
|
||||
}
|
||||
}
|
||||
|
||||
async function submit() {
|
||||
if (isImporting) {
|
||||
return;
|
||||
}
|
||||
@@ -111,7 +133,7 @@
|
||||
isImporting = true;
|
||||
|
||||
try {
|
||||
await ApiClient.collections.import(newCollections);
|
||||
await ApiClient.collections.import(newCollections, true);
|
||||
addSuccessToast("Successfully imported the collections configuration.");
|
||||
dispatch("submit");
|
||||
} catch (err) {
|
||||
@@ -180,7 +202,7 @@
|
||||
class="btn btn-expanded"
|
||||
class:btn-loading={isImporting}
|
||||
disabled={isImporting}
|
||||
on:click={() => submitImport()}
|
||||
on:click={() => submitWithConfirm()}
|
||||
>
|
||||
<span class="txt">Confirm and import</span>
|
||||
</button>
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
import CommonHelper from "@/utils/CommonHelper";
|
||||
import { pageTitle, appName } from "@/stores/app";
|
||||
import { addSuccessToast } from "@/stores/toasts";
|
||||
import PageWrapper from "@/components/base/PageWrapper.svelte";
|
||||
import Field from "@/components/base/Field.svelte";
|
||||
import SettingsSidebar from "@/components/settings/SettingsSidebar.svelte";
|
||||
|
||||
@@ -62,7 +63,7 @@
|
||||
|
||||
<SettingsSidebar />
|
||||
|
||||
<main class="page-wrapper">
|
||||
<PageWrapper>
|
||||
<header class="page-header">
|
||||
<nav class="breadcrumbs">
|
||||
<div class="breadcrumb-item">Settings</div>
|
||||
@@ -116,4 +117,4 @@
|
||||
{/if}
|
||||
</form>
|
||||
</div>
|
||||
</main>
|
||||
</PageWrapper>
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
import { pageTitle } from "@/stores/app";
|
||||
import { setErrors } from "@/stores/errors";
|
||||
import { addSuccessToast } from "@/stores/toasts";
|
||||
import PageWrapper from "@/components/base/PageWrapper.svelte";
|
||||
import SettingsSidebar from "@/components/settings/SettingsSidebar.svelte";
|
||||
import EmailAuthAccordion from "@/components/settings/EmailAuthAccordion.svelte";
|
||||
import AuthProviderAccordion from "@/components/settings/AuthProviderAccordion.svelte";
|
||||
@@ -73,7 +74,7 @@
|
||||
|
||||
<SettingsSidebar />
|
||||
|
||||
<main class="page-wrapper">
|
||||
<PageWrapper>
|
||||
<header class="page-header">
|
||||
<nav class="breadcrumbs">
|
||||
<div class="breadcrumb-item">Settings</div>
|
||||
@@ -140,4 +141,4 @@
|
||||
{/if}
|
||||
</form>
|
||||
</div>
|
||||
</main>
|
||||
</PageWrapper>
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
import CommonHelper from "@/utils/CommonHelper";
|
||||
import { pageTitle } from "@/stores/app";
|
||||
import { addInfoToast } from "@/stores/toasts";
|
||||
import PageWrapper from "@/components/base/PageWrapper.svelte";
|
||||
import CodeBlock from "@/components/base/CodeBlock.svelte";
|
||||
import SettingsSidebar from "@/components/settings/SettingsSidebar.svelte";
|
||||
|
||||
@@ -43,13 +44,13 @@
|
||||
|
||||
function copy() {
|
||||
CommonHelper.copyToClipboard(schema);
|
||||
addInfoToast("The collections list was copied to your clipboard!", 3000);
|
||||
addInfoToast("The configuration was copied to your clipboard!", 3000);
|
||||
}
|
||||
</script>
|
||||
|
||||
<SettingsSidebar />
|
||||
|
||||
<main class="page-wrapper">
|
||||
<PageWrapper>
|
||||
<header class="page-header">
|
||||
<nav class="breadcrumbs">
|
||||
<div class="breadcrumb-item">Settings</div>
|
||||
@@ -106,7 +107,7 @@
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
</PageWrapper>
|
||||
|
||||
<style>
|
||||
.export-preview {
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
import { pageTitle } from "@/stores/app";
|
||||
import { addErrorToast } from "@/stores/toasts";
|
||||
import { setErrors } from "@/stores/errors";
|
||||
import PageWrapper from "@/components/base/PageWrapper.svelte";
|
||||
import Field from "@/components/base/Field.svelte";
|
||||
import SettingsSidebar from "@/components/settings/SettingsSidebar.svelte";
|
||||
import ImportPopup from "@/components/settings/ImportPopup.svelte";
|
||||
@@ -150,7 +151,7 @@
|
||||
|
||||
<SettingsSidebar />
|
||||
|
||||
<main class="page-wrapper">
|
||||
<PageWrapper>
|
||||
<header class="page-header">
|
||||
<nav class="breadcrumbs">
|
||||
<div class="breadcrumb-item">Settings</div>
|
||||
@@ -163,19 +164,19 @@
|
||||
{#if isLoadingOldCollections}
|
||||
<div class="loader" />
|
||||
{:else}
|
||||
<div class="content txt-xl m-b-base">
|
||||
<input
|
||||
bind:this={fileInput}
|
||||
type="file"
|
||||
class="hidden"
|
||||
accept=".json"
|
||||
on:change={() => {
|
||||
if (fileInput.files.length) {
|
||||
loadFile(fileInput.files[0]);
|
||||
}
|
||||
}}
|
||||
/>
|
||||
<input
|
||||
bind:this={fileInput}
|
||||
type="file"
|
||||
class="hidden"
|
||||
accept=".json"
|
||||
on:change={() => {
|
||||
if (fileInput.files.length) {
|
||||
loadFile(fileInput.files[0]);
|
||||
}
|
||||
}}
|
||||
/>
|
||||
|
||||
<div class="content txt-xl m-b-base">
|
||||
<p>
|
||||
Paste below the collections configuration you want to import or
|
||||
<button
|
||||
@@ -283,7 +284,7 @@
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
</PageWrapper>
|
||||
|
||||
<ImportPopup bind:this={importPopup} on:submit={() => clear()} />
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
import CommonHelper from "@/utils/CommonHelper";
|
||||
import { pageTitle } from "@/stores/app";
|
||||
import { addSuccessToast } from "@/stores/toasts";
|
||||
import PageWrapper from "@/components/base/PageWrapper.svelte";
|
||||
import Field from "@/components/base/Field.svelte";
|
||||
import ObjectSelect from "@/components/base/ObjectSelect.svelte";
|
||||
import RedactedPasswordInput from "@/components/base/RedactedPasswordInput.svelte";
|
||||
@@ -67,7 +68,7 @@
|
||||
|
||||
<SettingsSidebar />
|
||||
|
||||
<main class="page-wrapper">
|
||||
<PageWrapper>
|
||||
<header class="page-header">
|
||||
<nav class="breadcrumbs">
|
||||
<div class="breadcrumb-item">Settings</div>
|
||||
@@ -240,4 +241,4 @@
|
||||
{/if}
|
||||
</form>
|
||||
</div>
|
||||
</main>
|
||||
</PageWrapper>
|
||||
|
||||
@@ -5,10 +5,11 @@
|
||||
import { pageTitle } from "@/stores/app";
|
||||
import { setErrors } from "@/stores/errors";
|
||||
import { addSuccessToast } from "@/stores/toasts";
|
||||
import tooltip from "@/actions/tooltip";
|
||||
import PageWrapper from "@/components/base/PageWrapper.svelte";
|
||||
import Field from "@/components/base/Field.svelte";
|
||||
import RedactedPasswordInput from "@/components/base/RedactedPasswordInput.svelte";
|
||||
import SettingsSidebar from "@/components/settings/SettingsSidebar.svelte";
|
||||
import tooltip from "@/actions/tooltip";
|
||||
|
||||
$pageTitle = "Files storage";
|
||||
|
||||
@@ -63,7 +64,7 @@
|
||||
|
||||
<SettingsSidebar />
|
||||
|
||||
<main class="page-wrapper">
|
||||
<PageWrapper>
|
||||
<header class="page-header">
|
||||
<nav class="breadcrumbs">
|
||||
<div class="breadcrumb-item">Settings</div>
|
||||
@@ -191,4 +192,4 @@
|
||||
{/if}
|
||||
</form>
|
||||
</div>
|
||||
</main>
|
||||
</PageWrapper>
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
import CommonHelper from "@/utils/CommonHelper";
|
||||
import { pageTitle } from "@/stores/app";
|
||||
import { addSuccessToast } from "@/stores/toasts";
|
||||
import PageWrapper from "@/components/base/PageWrapper.svelte";
|
||||
import Field from "@/components/base/Field.svelte";
|
||||
import SettingsSidebar from "@/components/settings/SettingsSidebar.svelte";
|
||||
|
||||
@@ -73,7 +74,7 @@
|
||||
|
||||
<SettingsSidebar />
|
||||
|
||||
<main class="page-wrapper">
|
||||
<PageWrapper>
|
||||
<header class="page-header">
|
||||
<nav class="breadcrumbs">
|
||||
<div class="breadcrumb-item">Settings</div>
|
||||
@@ -134,4 +135,4 @@
|
||||
{/if}
|
||||
</form>
|
||||
</div>
|
||||
</main>
|
||||
</PageWrapper>
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
import CommonHelper from "@/utils/CommonHelper";
|
||||
import tooltip from "@/actions/tooltip";
|
||||
import { pageTitle } from "@/stores/app";
|
||||
import PageWrapper from "@/components/base/PageWrapper.svelte";
|
||||
import Searchbar from "@/components/base/Searchbar.svelte";
|
||||
import RefreshButton from "@/components/base/RefreshButton.svelte";
|
||||
import SortHeader from "@/components/base/SortHeader.svelte";
|
||||
@@ -103,13 +104,13 @@
|
||||
}
|
||||
</script>
|
||||
|
||||
{#if isLoadingProfileCollection}
|
||||
<div class="placeholder-section m-b-base">
|
||||
<span class="loader loader-lg" />
|
||||
<h1>Loading users...</h1>
|
||||
</div>
|
||||
{:else}
|
||||
<main class="page-wrapper">
|
||||
<PageWrapper>
|
||||
{#if isLoadingProfileCollection}
|
||||
<div class="placeholder-section m-b-base">
|
||||
<span class="loader loader-lg" />
|
||||
<h1>Loading users...</h1>
|
||||
</div>
|
||||
{:else}
|
||||
<header class="page-header">
|
||||
<nav class="breadcrumbs">
|
||||
<div class="breadcrumb-item">{$pageTitle}</div>
|
||||
@@ -283,8 +284,8 @@
|
||||
</button>
|
||||
</div>
|
||||
{/if}
|
||||
</main>
|
||||
{/if}
|
||||
{/if}
|
||||
</PageWrapper>
|
||||
|
||||
<UserUpsertPanel bind:this={userUpsertPanel} on:save={() => loadUsers()} on:delete={() => loadUsers()} />
|
||||
|
||||
|
||||
Reference in New Issue
Block a user