updated ui/dist
This commit is contained in:
@@ -26,7 +26,7 @@
|
||||
let changePasswordToggle = false;
|
||||
|
||||
$: hasChanges =
|
||||
(admin.isNew && email != "") ||
|
||||
(admin.$isNew && email != "") ||
|
||||
changePasswordToggle ||
|
||||
email !== admin.email ||
|
||||
avatar !== admin.avatar;
|
||||
@@ -44,7 +44,7 @@
|
||||
}
|
||||
|
||||
function load(model) {
|
||||
admin = model?.clone ? model.clone() : new Admin();
|
||||
admin = model?.$clone ? model.$clone() : new Admin();
|
||||
reset(); // reset form
|
||||
}
|
||||
|
||||
@@ -65,13 +65,13 @@
|
||||
isSaving = true;
|
||||
|
||||
const data = { email, avatar };
|
||||
if (admin.isNew || changePasswordToggle) {
|
||||
if (admin.$isNew || changePasswordToggle) {
|
||||
data["password"] = password;
|
||||
data["passwordConfirm"] = passwordConfirm;
|
||||
}
|
||||
|
||||
let request;
|
||||
if (admin.isNew) {
|
||||
if (admin.$isNew) {
|
||||
request = ApiClient.admins.create(data);
|
||||
} else {
|
||||
request = ApiClient.admins.update(admin.id, data);
|
||||
@@ -81,7 +81,7 @@
|
||||
.then(async (result) => {
|
||||
confirmClose = false;
|
||||
hide();
|
||||
addSuccessToast(admin.isNew ? "Successfully created admin." : "Successfully updated admin.");
|
||||
addSuccessToast(admin.$isNew ? "Successfully created admin." : "Successfully updated admin.");
|
||||
dispatch("save", result);
|
||||
|
||||
if (ApiClient.authStore.model?.id === result.id) {
|
||||
@@ -136,12 +136,12 @@
|
||||
>
|
||||
<svelte:fragment slot="header">
|
||||
<h4>
|
||||
{admin.isNew ? "New admin" : "Edit admin"}
|
||||
{admin.$isNew ? "New admin" : "Edit admin"}
|
||||
</h4>
|
||||
</svelte:fragment>
|
||||
|
||||
<form id={formId} class="grid" autocomplete="off" on:submit|preventDefault={save}>
|
||||
{#if !admin.isNew}
|
||||
{#if !admin.$isNew}
|
||||
<Field class="form-field readonly" name="id" let:uniqueId>
|
||||
<label for={uniqueId}>
|
||||
<i class={CommonHelper.getFieldTypeIcon("primary")} />
|
||||
@@ -186,14 +186,14 @@
|
||||
<input type="email" autocomplete="off" id={uniqueId} required bind:value={email} />
|
||||
</Field>
|
||||
|
||||
{#if !admin.isNew}
|
||||
{#if !admin.$isNew}
|
||||
<Field class="form-field form-field-toggle" let:uniqueId>
|
||||
<input type="checkbox" id={uniqueId} bind:checked={changePasswordToggle} />
|
||||
<label for={uniqueId}>Change password</label>
|
||||
</Field>
|
||||
{/if}
|
||||
|
||||
{#if admin.isNew || changePasswordToggle}
|
||||
{#if admin.$isNew || changePasswordToggle}
|
||||
<div class="col-12">
|
||||
<div class="grid" transition:slide|local={{ duration: 150 }}>
|
||||
<div class="col-sm-6">
|
||||
@@ -232,7 +232,7 @@
|
||||
</form>
|
||||
|
||||
<svelte:fragment slot="footer">
|
||||
{#if !admin.isNew}
|
||||
{#if !admin.$isNew}
|
||||
<button type="button" aria-label="More" class="btn btn-sm btn-circle btn-transparent">
|
||||
<!-- empty span for alignment -->
|
||||
<span />
|
||||
@@ -257,7 +257,7 @@
|
||||
class:btn-loading={isSaving}
|
||||
disabled={!hasChanges || isSaving}
|
||||
>
|
||||
<span class="txt">{admin.isNew ? "Create" : "Save changes"}</span>
|
||||
<span class="txt">{admin.$isNew ? "Create" : "Save changes"}</span>
|
||||
</button>
|
||||
</svelte:fragment>
|
||||
</OverlayPanel>
|
||||
|
||||
@@ -91,6 +91,8 @@
|
||||
<RuleField
|
||||
label="Manage rule"
|
||||
formKey="options.manageRule"
|
||||
placeholder=""
|
||||
required={collection.options.manageRule !== null}
|
||||
{collection}
|
||||
bind:rule={collection.options.manageRule}
|
||||
>
|
||||
|
||||
@@ -51,11 +51,11 @@
|
||||
schemaTabError = "";
|
||||
}
|
||||
|
||||
$: isSystemUpdate = !collection.isNew && collection.system;
|
||||
$: isSystemUpdate = !collection.$isNew && collection.system;
|
||||
|
||||
$: hasChanges = initialFormHash != calculateFormHash(collection);
|
||||
|
||||
$: canSave = collection.isNew || hasChanges;
|
||||
$: canSave = collection.$isNew || hasChanges;
|
||||
|
||||
$: if (activeTab === TAB_OPTIONS && collection.type !== TYPE_AUTH) {
|
||||
// reset selected tab
|
||||
@@ -99,7 +99,7 @@
|
||||
|
||||
if (typeof model !== "undefined") {
|
||||
original = model;
|
||||
collection = model.clone();
|
||||
collection = model.$clone();
|
||||
} else {
|
||||
original = null;
|
||||
collection = new Collection();
|
||||
@@ -115,7 +115,7 @@
|
||||
}
|
||||
|
||||
function saveWithConfirm() {
|
||||
if (collection.isNew) {
|
||||
if (collection.$isNew) {
|
||||
save();
|
||||
} else {
|
||||
confirmChangesPanel?.show(original, collection);
|
||||
@@ -132,7 +132,7 @@
|
||||
const data = exportFormData();
|
||||
|
||||
let request;
|
||||
if (collection.isNew) {
|
||||
if (collection.$isNew) {
|
||||
request = ApiClient.collections.create(data);
|
||||
} else {
|
||||
request = ApiClient.collections.update(collection.id, data);
|
||||
@@ -148,11 +148,13 @@
|
||||
hide();
|
||||
|
||||
addSuccessToast(
|
||||
collection.isNew ? "Successfully created collection." : "Successfully updated collection."
|
||||
collection.$isNew
|
||||
? "Successfully created collection."
|
||||
: "Successfully updated collection."
|
||||
);
|
||||
|
||||
dispatch("save", {
|
||||
isNew: collection.isNew,
|
||||
isNew: collection.$isNew,
|
||||
collection: result,
|
||||
});
|
||||
})
|
||||
@@ -165,7 +167,7 @@
|
||||
}
|
||||
|
||||
function exportFormData() {
|
||||
const data = collection.export();
|
||||
const data = collection.$export();
|
||||
data.schema = data.schema.slice(0);
|
||||
|
||||
// remove deleted fields
|
||||
@@ -221,7 +223,7 @@
|
||||
}
|
||||
|
||||
async function duplicate() {
|
||||
const clone = original?.clone();
|
||||
const clone = original?.$clone();
|
||||
|
||||
if (clone) {
|
||||
clone.id = "";
|
||||
@@ -274,10 +276,10 @@
|
||||
>
|
||||
<svelte:fragment slot="header">
|
||||
<h4 class="upsert-panel-title">
|
||||
{collection.isNew ? "New collection" : "Edit collection"}
|
||||
{collection.$isNew ? "New collection" : "Edit collection"}
|
||||
</h4>
|
||||
|
||||
{#if !collection.isNew && !collection.system}
|
||||
{#if !collection.$isNew && !collection.system}
|
||||
<div class="flex-fill" />
|
||||
<button type="button" aria-label="More" class="btn btn-sm btn-circle btn-transparent flex-gap-0">
|
||||
<i class="ri-more-line" />
|
||||
@@ -318,7 +320,7 @@
|
||||
required
|
||||
disabled={isSystemUpdate}
|
||||
spellcheck="false"
|
||||
autofocus={collection.isNew}
|
||||
autofocus={collection.$isNew}
|
||||
placeholder={collection.isAuth ? `eg. "users"` : `eg. "posts"`}
|
||||
value={collection.name}
|
||||
on:input={(e) => {
|
||||
@@ -330,15 +332,15 @@
|
||||
<div class="form-field-addon">
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-sm p-r-10 p-l-10 {collection.isNew
|
||||
class="btn btn-sm p-r-10 p-l-10 {collection.$isNew
|
||||
? 'btn-outline'
|
||||
: 'btn-transparent'}"
|
||||
disabled={!collection.isNew}
|
||||
disabled={!collection.$isNew}
|
||||
>
|
||||
<!-- empty span for alignment -->
|
||||
<span />
|
||||
<span class="txt">Type: {collectionTypes[collection.type] || "N/A"}</span>
|
||||
{#if collection.isNew}
|
||||
{#if collection.$isNew}
|
||||
<i class="ri-arrow-down-s-fill" />
|
||||
<Toggler class="dropdown dropdown-right dropdown-nowrap m-t-5">
|
||||
{#each Object.entries(collectionTypes) as [type, label]}
|
||||
@@ -452,7 +454,7 @@
|
||||
disabled={!canSave || isSaving}
|
||||
on:click={() => saveWithConfirm()}
|
||||
>
|
||||
<span class="txt">{collection.isNew ? "Create" : "Save changes"}</span>
|
||||
<span class="txt">{collection.$isNew ? "Create" : "Save changes"}</span>
|
||||
</button>
|
||||
</svelte:fragment>
|
||||
</OverlayPanel>
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
|
||||
$: hasAnyChange = CommonHelper.hasCollectionChanges(collectionA, collectionB, deleteMissing);
|
||||
|
||||
const mainModelProps = Object.keys(new Collection().export()).filter(
|
||||
const mainModelProps = Object.keys(new Collection().$export()).filter(
|
||||
(key) => !["schema", "created", "updated"].includes(key)
|
||||
);
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
let codeEditorComponent;
|
||||
let isCodeEditorComponentLoading = false;
|
||||
|
||||
$: presetColumns = collection?.schema?.map((f) => f.name) || [];
|
||||
$: presetColumns = collection?.schema?.filter((f) => !f.toDelete)?.map((f) => f.name) || [];
|
||||
|
||||
$: indexParts = CommonHelper.parseIndex(index);
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
export let label = "Rule";
|
||||
export let formKey = "rule";
|
||||
export let required = false;
|
||||
export let placeholder = "Leave empty to grant everyone access...";
|
||||
|
||||
let editorRef = null;
|
||||
let tempValue = null;
|
||||
@@ -83,7 +84,7 @@
|
||||
bind:value={rule}
|
||||
baseCollection={collection}
|
||||
disabled={isAdminOnly}
|
||||
placeholder={!isAdminOnly ? "Leave empty to grant everyone access..." : ""}
|
||||
placeholder={!isAdminOnly ? placeholder : ""}
|
||||
/>
|
||||
|
||||
{#if isAdminOnly}
|
||||
@@ -109,10 +110,6 @@
|
||||
{/if}
|
||||
|
||||
<style lang="scss">
|
||||
label .label {
|
||||
margin: -5px 0;
|
||||
background: rgba(53, 71, 104, 0.12);
|
||||
}
|
||||
.lock-toggle {
|
||||
position: absolute;
|
||||
right: 0px;
|
||||
|
||||
@@ -72,8 +72,8 @@
|
||||
async function load(model) {
|
||||
setErrors({}); // reset errors
|
||||
original = model || new Record();
|
||||
if (model?.clone) {
|
||||
record = model.clone();
|
||||
if (model?.$clone) {
|
||||
record = model.$clone();
|
||||
} else {
|
||||
record = new Record();
|
||||
}
|
||||
@@ -138,7 +138,7 @@
|
||||
}
|
||||
|
||||
function exportFormData() {
|
||||
const data = record?.export() || {};
|
||||
const data = record?.$export() || {};
|
||||
const formData = new FormData();
|
||||
|
||||
const exportableFields = {
|
||||
@@ -237,7 +237,7 @@
|
||||
}
|
||||
|
||||
async function duplicate() {
|
||||
const clone = original?.clone();
|
||||
const clone = original?.$clone();
|
||||
|
||||
if (clone) {
|
||||
clone.id = "";
|
||||
|
||||
@@ -28,15 +28,15 @@
|
||||
|
||||
<div class="grid m-b-base">
|
||||
<div class="col-lg-6">
|
||||
<Field class="form-field {!record.isNew ? 'required' : ''}" name="username" let:uniqueId>
|
||||
<Field class="form-field {!record.$isNew ? 'required' : ''}" name="username" let:uniqueId>
|
||||
<label for={uniqueId}>
|
||||
<i class={CommonHelper.getFieldTypeIcon("user")} />
|
||||
<span class="txt">Username</span>
|
||||
</label>
|
||||
<input
|
||||
type="text"
|
||||
requried={!record.isNew}
|
||||
placeholder={record.isNew ? "Leave empty to auto generate..." : originalUsername}
|
||||
requried={!record.$isNew}
|
||||
placeholder={record.$isNew ? "Leave empty to auto generate..." : originalUsername}
|
||||
id={uniqueId}
|
||||
bind:value={record.username}
|
||||
/>
|
||||
@@ -69,7 +69,7 @@
|
||||
<!-- svelte-ignore a11y-autofocus -->
|
||||
<input
|
||||
type="email"
|
||||
autofocus={record.isNew}
|
||||
autofocus={record.$isNew}
|
||||
autocomplete="off"
|
||||
id={uniqueId}
|
||||
required={collection.options?.requireEmail}
|
||||
@@ -79,14 +79,14 @@
|
||||
</div>
|
||||
|
||||
<div class="col-lg-12">
|
||||
{#if !record.isNew}
|
||||
{#if !record.$isNew}
|
||||
<Field class="form-field form-field-toggle" name="verified" let:uniqueId>
|
||||
<input type="checkbox" id={uniqueId} bind:checked={changePasswordToggle} />
|
||||
<label for={uniqueId}>Change password</label>
|
||||
</Field>
|
||||
{/if}
|
||||
|
||||
{#if record.isNew || changePasswordToggle}
|
||||
{#if record.$isNew || changePasswordToggle}
|
||||
<div class="block" transition:slide|local={{ duration: 150 }}>
|
||||
<div class="grid" class:p-t-xs={changePasswordToggle}>
|
||||
<div class="col-sm-6">
|
||||
@@ -131,7 +131,7 @@
|
||||
id={uniqueId}
|
||||
bind:checked={record.verified}
|
||||
on:change|preventDefault={(e) => {
|
||||
if (record.isNew) {
|
||||
if (record.$isNew) {
|
||||
return; // no confirmation required
|
||||
}
|
||||
confirm(
|
||||
|
||||
@@ -44,17 +44,13 @@
|
||||
isSubmitting = true;
|
||||
|
||||
try {
|
||||
// @todo replace with dedicated SDK method
|
||||
const result = await ApiClient.send("/api/settings/apple/generate-client-secret", {
|
||||
method: "POST",
|
||||
body: {
|
||||
teamId: teamId,
|
||||
clientId: clientId,
|
||||
keyId: keyId,
|
||||
privateKey: privateKey.trim(),
|
||||
duration: duration,
|
||||
},
|
||||
});
|
||||
const result = await ApiClient.generateAppleClientSecret(
|
||||
clientId,
|
||||
teamId,
|
||||
keyId,
|
||||
privateKey.trim(),
|
||||
duration
|
||||
);
|
||||
|
||||
isSubmitting = false;
|
||||
|
||||
|
||||
@@ -750,7 +750,8 @@ a.thumb:not(.thumb-active) {
|
||||
border-top: 0;
|
||||
}
|
||||
&:last-child {
|
||||
border-radius: inherit;
|
||||
border-bottom-left-radius: inherit;
|
||||
border-bottom-right-radius: inherit;
|
||||
}
|
||||
.content {
|
||||
display: flex;
|
||||
|
||||
Reference in New Issue
Block a user