@@ -773,19 +779,21 @@
share={true}
sharePublic={true}
shareUsers={true}
- onChange={async () => {
+ onChange={async (grants) => {
if (editingItem) {
+ const item = editingItem;
+ creating = true;
try {
- await updateKnowledgeAccessGrants(
- localStorage.token,
- editingItem.id,
- accessGrants
- );
- editingItem.access_grants = structuredClone(accessGrants);
+ await updateKnowledgeAccessGrants(localStorage.token, item.id, grants);
+ item.access_grants = structuredClone(grants);
+ if (editingItem === item) accessGrants = item.access_grants;
toast.success($i18n.t('Saved'));
} catch (error) {
- accessGrants = structuredClone(editingItem.access_grants ?? []);
+ if (editingItem === item)
+ accessGrants = structuredClone(item.access_grants ?? []);
toast.error(`${error}`);
+ } finally {
+ creating = false;
}
}
}}
diff --git a/src/lib/components/admin/Settings/Models.svelte b/src/lib/components/admin/Settings/Models.svelte
index a00599436b..acee87ba8b 100644
--- a/src/lib/components/admin/Settings/Models.svelte
+++ b/src/lib/components/admin/Settings/Models.svelte
@@ -1344,6 +1344,9 @@
edit
model={models.find((m) => m.id === selectedModelId)}
preset={false}
+ onAccessUpdate={(model) => {
+ savedModels = [...savedModels.filter((m) => m.id !== model.id), model];
+ }}
onSubmit={async (model) => {
console.log(model);
if (!(await upsertModelHandler(model))) {
diff --git a/src/lib/components/layout/Sidebar/ChannelModal.svelte b/src/lib/components/layout/Sidebar/ChannelModal.svelte
index 9bd1a3ed03..ee904ac336 100644
--- a/src/lib/components/layout/Sidebar/ChannelModal.svelte
+++ b/src/lib/components/layout/Sidebar/ChannelModal.svelte
@@ -59,6 +59,7 @@
};
const submitHandler = async () => {
+ if (loading) return;
loading = true;
if (name.length > 128) {
toast.error($i18n.t('Channel name must be less than 128 characters'));
@@ -138,7 +139,6 @@
name = '';
accessGrants = [];
userIds = [];
- loading = false;
};
@@ -239,25 +239,27 @@
{#if type !== 'dm'}
-
+
{#if type === ''}
{
+ onChange={async (grants) => {
if (edit && channel?.id) {
+ const item = channel;
+ loading = true;
try {
- await updateChannelAccessGrants(
- localStorage.token,
- channel.id,
- accessGrants
- );
- channel.access_grants = structuredClone(accessGrants);
+ await updateChannelAccessGrants(localStorage.token, item.id, grants);
+ item.access_grants = structuredClone(grants);
+ if (channel === item) accessGrants = item.access_grants;
toast.success($i18n.t('Saved'));
onUpdate();
} catch (error) {
- accessGrants = structuredClone(channel.access_grants ?? []);
+ if (channel === item)
+ accessGrants = structuredClone(item.access_grants ?? []);
toast.error(`${error}`);
+ } finally {
+ loading = false;
}
}
}}
diff --git a/src/lib/components/workspace/Models/ModelEditor.svelte b/src/lib/components/workspace/Models/ModelEditor.svelte
index 248f70b753..d0053330d2 100644
--- a/src/lib/components/workspace/Models/ModelEditor.svelte
+++ b/src/lib/components/workspace/Models/ModelEditor.svelte
@@ -68,6 +68,7 @@
const formId = `model-editor-${uuidv4()}`;
export let onSubmit: Function = () => {};
+ export let onAccessUpdate: Function = () => {};
export let readOnly = false;
export let onBack: null | Function = null;
@@ -832,6 +833,7 @@
}}
/>
{
+ onChange={async (grants) => {
if (edit && model?.id) {
+ loading = true;
try {
- await updateModelAccessGrants(localStorage.token, model.id, model.name, accessGrants);
- model.access_grants = structuredClone(accessGrants);
+ const saved = await updateModelAccessGrants(
+ localStorage.token,
+ model.id,
+ model.name,
+ grants
+ );
+ model.access_grants = structuredClone(saved.access_grants);
+ accessGrants = structuredClone(saved.access_grants);
+ onAccessUpdate(saved);
toast.success($i18n.t('Saved'));
} catch (error) {
accessGrants = structuredClone(model.access_grants ?? []);
toast.error(`${error}`);
+ } finally {
+ loading = false;
}
}
}}
diff --git a/src/lib/components/workspace/common/AccessControl.svelte b/src/lib/components/workspace/common/AccessControl.svelte
index 8f5400146b..6903c6da1d 100644
--- a/src/lib/components/workspace/common/AccessControl.svelte
+++ b/src/lib/components/workspace/common/AccessControl.svelte
@@ -33,6 +33,7 @@
};
export let onChange: Function = () => {};
+ let saving = false;
export let accessRoles = ['read'];
export let labels: Partial> =
@@ -227,9 +228,15 @@
grant.permission === permission
);
- const commitAccessGrants = (nextGrants: AccessGrant[]) => {
+ const commitAccessGrants = async (nextGrants: AccessGrant[]) => {
+ if (saving) return;
+ saving = true;
accessGrants = dedupeAccessGrants(nextGrants);
- onChange(accessGrants);
+ try {
+ await onChange(accessGrants);
+ } finally {
+ saving = false;
+ }
};
const getVisibility = (grants: AccessGrant[]): 'private' | 'public' | 'open' => {
@@ -493,7 +500,7 @@
onAdd={handleAddAccess}
/>
-