|
8 | 8 |
|
9 | 9 | let ref; |
10 | 10 | let initializing = true; |
| 11 | + let RegisteredSelectedItem; |
11 | 12 |
|
12 | 13 | // get reactive context config |
13 | 14 | const config = getContext("config"); |
|
21 | 22 | // showContentBrowser reactive state |
22 | 23 | const showContentBrowser = getContext("showContentBrowser"); |
23 | 24 |
|
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 | | -
|
31 | 25 | onMount(async () => { |
32 | 26 | await initializeSelectedItemsStore(); |
33 | 27 | initializeSorting(); |
34 | 28 | initializing = false; |
35 | 29 | }); |
36 | 30 |
|
| 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 | +
|
37 | 49 | function unselectItem(uid) { |
38 | 50 | selectedItems.update((n) => { |
39 | 51 | return n.filter((x) => x.UID !== uid); |
40 | 52 | }); |
41 | 53 | selectedUids.update(() => $selectedItems.map((x) => x.UID)); |
42 | 54 | } |
43 | 55 |
|
44 | | - // use this function in "SelectedItem" component with |
45 | | - // const unselectItem = getContext("unselectItem") |
46 | | - setContext("unselectItem", unselectItem); |
47 | | -
|
48 | 56 | async function initializeSelectedItemsStore() { |
49 | 57 | const initialValue = $config.selection.length |
50 | 58 | ? $config.selection |
|
123 | 131 | on:click={() => ($showContentBrowser = $selectedItems.length ? false : true)} |
124 | 132 | > |
125 | 133 | {#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} |
129 | 141 | {/if} |
130 | 142 | {#if !$selectedItems} |
131 | 143 | <p>{_t("loading selected items")}</p> |
|
0 commit comments