|
18 | 18 | children: Snippet<[toggle: () => void, selectedColumnsNumber: number]>;
|
19 | 19 | } = $props();
|
20 | 20 |
|
| 21 | + let maxHeight = $state('none'); |
| 22 | + let containerRef; |
| 23 | +
|
| 24 | + const calcMaxHeight = () => { |
| 25 | + if (containerRef) { |
| 26 | + // get parent row element for correct top position |
| 27 | + const parent = containerRef.parentElement.parentElement; |
| 28 | + const { top } = parent.getBoundingClientRect(); |
| 29 | +
|
| 30 | + maxHeight = `${window.innerHeight - top - 48}px`; |
| 31 | + } |
| 32 | + }; |
| 33 | +
|
21 | 34 | onMount(async () => {
|
22 | 35 | if (isCustomCollection) {
|
23 | 36 | const prefs = preferences.getCustomCollectionColumns(page.params.collection);
|
|
50 | 63 | preferences.setColumns(columns);
|
51 | 64 | }
|
52 | 65 | });
|
| 66 | +
|
| 67 | + calcMaxHeight(); |
53 | 68 | });
|
54 | 69 |
|
55 | 70 | let selectedColumnsNumber = $derived(
|
|
61 | 76 | );
|
62 | 77 | </script>
|
63 | 78 |
|
| 79 | +<svelte:window on:resize={calcMaxHeight} /> |
64 | 80 | {#if $columns?.length}
|
65 | 81 | <Popover let:toggle placement="bottom-end" padding="none">
|
66 | 82 | {@render children(toggle, selectedColumnsNumber)}
|
67 | 83 | <svelte:fragment slot="tooltip">
|
68 |
| - <ActionMenu.Root> |
69 |
| - {#each $columns as column} |
70 |
| - {#if !column?.exclude} |
71 |
| - <ActionMenu.Item.Button |
72 |
| - on:click={() => (column.hide = !column.hide)} |
73 |
| - disabled={allowNoColumns |
74 |
| - ? false |
75 |
| - : selectedColumnsNumber <= 1 && column.hide !== true}> |
76 |
| - <Layout.Stack direction="row" gap="s"> |
77 |
| - <Selector.Checkbox |
78 |
| - checked={!column.hide} |
79 |
| - size="s" |
80 |
| - on:click={() => (column.hide = !column.hide)} /> |
81 |
| - {column.title} |
82 |
| - </Layout.Stack> |
83 |
| - </ActionMenu.Item.Button> |
84 |
| - {/if} |
85 |
| - {/each} |
86 |
| - </ActionMenu.Root> |
| 84 | + <div style:max-height={maxHeight} style:overflow="scroll" bind:this={containerRef}> |
| 85 | + <ActionMenu.Root> |
| 86 | + {#each $columns as column} |
| 87 | + {#if !column?.exclude} |
| 88 | + <ActionMenu.Item.Button |
| 89 | + on:click={() => (column.hide = !column.hide)} |
| 90 | + disabled={allowNoColumns |
| 91 | + ? false |
| 92 | + : selectedColumnsNumber <= 1 && column.hide !== true}> |
| 93 | + <Layout.Stack direction="row" gap="s"> |
| 94 | + <Selector.Checkbox |
| 95 | + checked={!column.hide} |
| 96 | + size="s" |
| 97 | + on:click={() => (column.hide = !column.hide)} /> |
| 98 | + {column.title} |
| 99 | + </Layout.Stack> |
| 100 | + </ActionMenu.Item.Button> |
| 101 | + {/if} |
| 102 | + {/each} |
| 103 | + </ActionMenu.Root> |
| 104 | + </div> |
87 | 105 | </svelte:fragment>
|
88 | 106 | </Popover>
|
89 | 107 | {/if}
|
0 commit comments