Skip to content

Commit 0619eb6

Browse files
committed
fix(pat contentbrowser): await custom registered SelectedItem components and fix unselect factory.
1 parent a265e4d commit 0619eb6

File tree

2 files changed

+27
-18
lines changed

2 files changed

+27
-18
lines changed

src/pat/contentbrowser/src/SelectedItem.svelte

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,7 @@
44
55
// item data
66
export let item;
7-
8-
// parent method to remove selected item from list
9-
const unselectItem = getContext("unselectItem");
10-
7+
export let unselectItem;
118
</script>
129

1310
<div class="selected-item border border-secondary-subtle rounded p-2 mb-1 bg-body-tertiary" data-uuid={item.UID}>

src/pat/contentbrowser/src/SelectedItems.svelte

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
99
let ref;
1010
let initializing = true;
11+
let RegisteredSelectedItem;
1112
1213
// get reactive context config
1314
const config = getContext("config");
@@ -21,30 +22,37 @@
2122
// showContentBrowser reactive state
2223
const showContentBrowser = getContext("showContentBrowser");
2324
24-
// get selectedItem component from registry.
25-
// the registry key can be customized with pattern_options
26-
// if an addon registers a custom component to a custom key
27-
const RegisteredSelectedItem = plone_registry.getComponent(
28-
$config.componentRegistryKeys?.selectedItem || "pat-contentbrowser.SelectedItem",
29-
);
30-
3125
onMount(async () => {
3226
await initializeSelectedItemsStore();
3327
initializeSorting();
3428
initializing = false;
3529
});
3630
31+
async function getSelectedItemComponent() {
32+
// get selectedItem component from registry.
33+
// the registry key can be customized with pattern_options
34+
// if an addon registers a custom component to a custom key
35+
if ($config.componentRegistryKeys?.selectedItem) {
36+
RegisteredSelectedItem = plone_registry.getComponent(
37+
$config.componentRegistryKeys.selectedItem,
38+
);
39+
}
40+
// fallback if no custom component was registered
41+
// or no valid component in registry
42+
if (!RegisteredSelectedItem?.component) {
43+
RegisteredSelectedItem = plone_registry.getComponent(
44+
"pat-contentbrowser.SelectedItem",
45+
);
46+
}
47+
}
48+
3749
function unselectItem(uid) {
3850
selectedItems.update((n) => {
3951
return n.filter((x) => x.UID !== uid);
4052
});
4153
selectedUids.update(() => $selectedItems.map((x) => x.UID));
4254
}
4355
44-
// use this function in "SelectedItem" component with
45-
// const unselectItem = getContext("unselectItem")
46-
setContext("unselectItem", unselectItem);
47-
4856
async function initializeSelectedItemsStore() {
4957
const initialValue = $config.selection.length
5058
? $config.selection
@@ -123,9 +131,13 @@
123131
on:click={() => ($showContentBrowser = $selectedItems.length ? false : true)}
124132
>
125133
{#if $selectedItems}
126-
{#each $selectedItems as selItem, i (selItem.UID)}
127-
<div use:LoadSelectedItemComponent={{ item: selItem }} />
128-
{/each}
134+
{#await getSelectedItemComponent() then}
135+
{#each $selectedItems as selItem, i (selItem.UID)}
136+
<div use:LoadSelectedItemComponent={{ item: selItem, unselectItem: unselectItem }} />
137+
{/each}
138+
{:catch error}
139+
<p style="color: red">{error.message}</p>
140+
{/await}
129141
{/if}
130142
{#if !$selectedItems}
131143
<p>{_t("loading selected items")}</p>

0 commit comments

Comments
 (0)