|
30 | 30 | isBooleanFilter,
|
31 | 31 | isDateTimeFilter,
|
32 | 32 | isDurationFilter,
|
| 33 | + isListFilter, |
33 | 34 | isNumberFilter,
|
34 | 35 | isStatusFilter,
|
35 | 36 | isTextFilter,
|
|
45 | 46 | import DateTimeFilter from './datetime-filter.svelte';
|
46 | 47 | import DurationFilter from './duration-filter.svelte';
|
47 | 48 | import FilterList from './filter-list.svelte';
|
| 49 | + import ListFilter from './list-filter.svelte'; |
48 | 50 | import NumberFilter from './number-filter.svelte';
|
49 | 51 | import SearchAttributeMenu from './search-attribute-menu.svelte';
|
50 | 52 | import StatusFilter from './status-filter.svelte';
|
|
59 | 61 | const activeQueryIndex = writable<number>(null);
|
60 | 62 | const focusedElementId = writable<string>('');
|
61 | 63 |
|
62 |
| - $: ({ attribute, type } = $filter); |
63 | 64 | $: searchParamQuery = $page.url.searchParams.get('query');
|
64 |
| - $: showClearAllButton = showFilter && filters.length && !attribute; |
| 65 | + $: showClearAllButton = showFilter && filters.length && !$filter.attribute; |
65 | 66 |
|
66 | 67 | setContext<FilterContext>(FILTER_CONTEXT, {
|
67 | 68 | filter,
|
|
105 | 106 |
|
106 | 107 | function updateFocusedElementId() {
|
107 | 108 | if ($activeQueryIndex !== null) {
|
108 |
| - $focusedElementId = getFocusedElementId({ attribute, type }); |
| 109 | + $focusedElementId = getFocusedElementId($filter); |
109 | 110 | }
|
110 | 111 | }
|
111 | 112 |
|
|
134 | 135 | }
|
135 | 136 |
|
136 | 137 | function handleKeyUp(event: KeyboardEvent) {
|
137 |
| - if (event.key === 'Escape' && !isTextFilter({ attribute, type })) { |
| 138 | + if (event.key === 'Escape' && !isTextFilter($filter)) { |
138 | 139 | resetFilter();
|
139 | 140 | }
|
140 | 141 | }
|
|
145 | 146 | <slot />
|
146 | 147 | {#if showFilter}
|
147 | 148 | <div
|
148 |
| - class="flex items-center" |
| 149 | + class="flex" |
149 | 150 | class:filter={!showClearAllButton}
|
150 | 151 | on:keyup={handleKeyUp}
|
151 | 152 | role="none"
|
152 | 153 | >
|
153 |
| - {#if isStatusFilter(attribute)} |
| 154 | + {#if isStatusFilter($filter)} |
154 | 155 | <StatusFilter bind:filters />
|
155 | 156 | {:else}
|
156 | 157 | <SearchAttributeMenu {filters} {options} />
|
157 | 158 | {/if}
|
158 | 159 |
|
159 |
| - {#if attribute} |
160 |
| - {#if isTextFilter({ attribute, type })} |
| 160 | + {#if $filter.attribute} |
| 161 | + {#if isTextFilter($filter)} |
161 | 162 | <div
|
162 | 163 | class="flex w-full items-center"
|
163 | 164 | in:fly={{ x: -100, duration: 150 }}
|
164 | 165 | >
|
165 | 166 | <TextFilter />
|
166 | 167 | <CloseFilter />
|
167 | 168 | </div>
|
168 |
| - <!-- TODO: Add KeywordList support --> |
169 |
| - <!-- {:else if isListFilter(attribute)} |
| 169 | + {:else if isListFilter($filter)} |
170 | 170 | <div class="w-full" in:fly={{ x: -100, duration: 150 }}>
|
171 |
| - <ListFilter /> |
172 |
| - </div> --> |
173 |
| - {:else if isDurationFilter(attribute)} |
| 171 | + <ListFilter> |
| 172 | + <CloseFilter /> |
| 173 | + </ListFilter> |
| 174 | + </div> |
| 175 | + {:else if isDurationFilter($filter)} |
174 | 176 | <div
|
175 | 177 | class="flex w-full items-center"
|
176 | 178 | in:fly={{ x: -100, duration: 150 }}
|
177 | 179 | >
|
178 | 180 | <DurationFilter />
|
179 | 181 | <CloseFilter />
|
180 | 182 | </div>
|
181 |
| - {:else if isNumberFilter({ attribute, type })} |
| 183 | + {:else if isNumberFilter($filter)} |
182 | 184 | <div
|
183 | 185 | class="flex w-full items-center"
|
184 | 186 | in:fly={{ x: -100, duration: 150 }}
|
185 | 187 | >
|
186 | 188 | <NumberFilter />
|
187 | 189 | <CloseFilter />
|
188 | 190 | </div>
|
189 |
| - {:else if isDateTimeFilter({ attribute, type })} |
| 191 | + {:else if isDateTimeFilter($filter)} |
190 | 192 | <div
|
191 | 193 | class="flex w-full items-center"
|
192 | 194 | in:fly={{ x: -100, duration: 150 }}
|
193 | 195 | >
|
194 | 196 | <DateTimeFilter />
|
195 | 197 | <CloseFilter />
|
196 | 198 | </div>
|
197 |
| - {:else if isBooleanFilter({ attribute, type })} |
| 199 | + {:else if isBooleanFilter($filter)} |
198 | 200 | <div
|
199 | 201 | class="flex w-full items-center"
|
200 | 202 | in:fly={{ x: -100, duration: 150 }}
|
|
0 commit comments