[#6184] fixed unique identity fields input reactivity

This commit is contained in:
Gani Georgiev
2024-12-26 21:37:06 +02:00
parent 00372711fd
commit 6c53352643
31 changed files with 59 additions and 53 deletions
+9 -3
View File
@@ -14,6 +14,8 @@
export let selectionKey = "value";
export let keyOfSelected = multiple ? [] : undefined;
let oldKeyOfSelectedHash = JSON.stringify(keyOfSelected);
$: if (items) {
handleKeyOfSelectedChange(keyOfSelected);
}
@@ -40,13 +42,17 @@
}
async function handleSelectedChange(newSelected) {
let extractedKeys = CommonHelper.toArray(newSelected, true).map((item) => item[selectionKey]);
if (!items.length) {
return; // options are still loading...
}
keyOfSelected = multiple ? extractedKeys : extractedKeys[0];
let extractedKeys = CommonHelper.toArray(newSelected, true).map((item) => item[selectionKey]);
let newKeyOfSelected = multiple ? extractedKeys : extractedKeys[0];
if (JSON.stringify(newKeyOfSelected) != oldKeyOfSelectedHash) {
keyOfSelected = newKeyOfSelected;
oldKeyOfSelectedHash = JSON.stringify(keyOfSelected);
}
}
</script>
@@ -10,6 +10,7 @@
export let collection;
let identityFieldsOptions = [];
let oldIndexes = "";
$: isSuperusers = collection?.system && collection?.name === "_superusers";
@@ -22,13 +23,19 @@
$: hasErrors = !CommonHelper.isEmpty($errors?.passwordAuth);
function extractUniqueFields(collection) {
$: if (collection && oldIndexes != collection.indexes.join("")) {
refreshIdentityFieldsOptions();
}
function refreshIdentityFieldsOptions() {
// email is always available in auth collections
const result = [{ value: "email" }];
identityFieldsOptions = [{ value: "email" }];
const fields = collection?.fields || [];
const indexes = collection?.indexes || [];
oldIndexes = indexes.join("");
for (let idx of indexes) {
const parsed = CommonHelper.parseIndex(idx);
if (!parsed.unique || parsed.columns.length != 1 || parsed.columns[0].name == "email") {
@@ -39,20 +46,13 @@
return !f.hidden && f.name.toLowerCase() == parsed.columns[0].name.toLowerCase();
});
if (field) {
result.push({ value: field.name });
identityFieldsOptions.push({ value: field.name });
}
}
return result;
}
</script>
<Accordion
single
on:expand={() => {
identityFieldsOptions = extractUniqueFields(collection);
}}
>
<Accordion single>
<svelte:fragment slot="header">
<div class="inline-flex">
<i class="ri-lock-password-line"></i>