@likable-hair/svelte 3.3.18 → 3.3.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -52,6 +52,7 @@ onMount(() => {
|
|
|
52
52
|
table.classList.add("dynamic-resizable");
|
|
53
53
|
resizeObserver = new ResizeObserver(() => {
|
|
54
54
|
updateRemainingWidth();
|
|
55
|
+
updateHeaderHeight();
|
|
55
56
|
});
|
|
56
57
|
resizeObserver.observe(tableContainer);
|
|
57
58
|
return () => {
|
|
@@ -1059,7 +1060,7 @@ function resizeHeader(th, header) {
|
|
|
1059
1060
|
</slot>
|
|
1060
1061
|
</th>
|
|
1061
1062
|
{/each}
|
|
1062
|
-
{#if remainingWidth && (customizeHeaders || resizableColumns)}
|
|
1063
|
+
{#if remainingWidth && (customizeHeaders || $$slots.rowActions || $$slots.append || resizableColumns)}
|
|
1063
1064
|
<th
|
|
1064
1065
|
style:width={remainingWidth + 'px'}
|
|
1065
1066
|
class="filler"
|
|
@@ -1220,7 +1221,7 @@ function resizeHeader(th, header) {
|
|
|
1220
1221
|
{/if}
|
|
1221
1222
|
</td>
|
|
1222
1223
|
{/each}
|
|
1223
|
-
{#if remainingWidth && (customizeHeaders || resizableColumns)}
|
|
1224
|
+
{#if remainingWidth && (customizeHeaders || $$slots.rowActions || $$slots.append || resizableColumns)}
|
|
1224
1225
|
<td/>
|
|
1225
1226
|
{/if}
|
|
1226
1227
|
{#if $$slots.rowActions || $$slots.append}
|
|
@@ -3,34 +3,21 @@ import Icon from "../../simple/media/Icon.svelte";
|
|
|
3
3
|
import Paginator from "../../simple/lists/Paginator.svelte";
|
|
4
4
|
import Dropdown from "../forms/Dropdown.svelte";
|
|
5
5
|
import { createEventDispatcher } from "svelte";
|
|
6
|
-
import "./PaginatedTable.css";
|
|
7
6
|
</script>
|
|
8
7
|
|
|
9
8
|
<script>import Filters from "../search/Filters.svelte";
|
|
10
9
|
import SearchBar from "../search/SearchBar.svelte";
|
|
11
10
|
import Converter from "../../../utils/filters/filters";
|
|
12
|
-
import CircularLoader from "../../simple/loaders/CircularLoader.svelte";
|
|
13
|
-
import { DateTime } from "luxon";
|
|
14
|
-
import { FilterBuilder } from "../../..";
|
|
15
|
-
import Menu from "../../simple/common/Menu.svelte";
|
|
16
|
-
import LabelAndTextField from "../forms/LabelAndTextField.svelte";
|
|
17
|
-
import Autocomplete from "../../simple/forms/Autocomplete.svelte";
|
|
18
|
-
import Chip from "../../simple/navigation/Chip.svelte";
|
|
19
|
-
import FlagIcon from "../../simple/media/FlagIcon.svelte";
|
|
20
|
-
import CountriesAutocomplete from "../forms/CountriesAutocomplete.svelte";
|
|
21
|
-
import DatePickerTextField from "../forms/DatePickerTextField.svelte";
|
|
22
|
-
import ConfirmOrCancelButtons from "../forms/ConfirmOrCancelButtons.svelte";
|
|
23
|
-
import Divider from "../../simple/common/Divider.svelte";
|
|
24
11
|
let clazz = {};
|
|
25
12
|
export { clazz as class };
|
|
26
13
|
export let headers = [], items = [], sortedBy = void 0, sortDirection = void 0, page = 1, maxPage = void 0, rowsPerPageOptions = [
|
|
27
14
|
{ label: "20", value: 20 },
|
|
28
15
|
{ label: "50", value: 50 },
|
|
29
16
|
{ label: "100", value: 100 }
|
|
30
|
-
], hideRowsPerPage = false, totalElements = void 0, rowsPerPage = 20, filters = [], searchBarColumns = void 0, searchBarVisible = true, searchBarPlaceholder = "Type something to search...", lang = "en", editFilterMode = "one-edit", showActiveFilters = true, resizableColumns = false, resizedColumnSizeWithPadding = {}, pointerOnRowHover = void 0, doubleClickActive = false, doubleClickDelay = 250
|
|
17
|
+
], hideRowsPerPage = false, totalElements = void 0, rowsPerPage = 20, filters = [], searchBarColumns = void 0, searchBarVisible = true, searchBarPlaceholder = "Type something to search...", lang = "en", editFilterMode = "one-edit", showActiveFilters = true, resizableColumns = false, resizedColumnSizeWithPadding = {}, pointerOnRowHover = void 0, doubleClickActive = false, doubleClickDelay = 250;
|
|
31
18
|
export let calculateRowStyles = void 0;
|
|
32
19
|
export let calculateRowClasses = void 0;
|
|
33
|
-
let searchBarInput, searchText = void 0, sortModify
|
|
20
|
+
let searchBarInput, searchText = void 0, sortModify;
|
|
34
21
|
let dispatch = createEventDispatcher();
|
|
35
22
|
let rowsPerPageSelection = [];
|
|
36
23
|
$:
|
|
@@ -93,266 +80,6 @@ function buildFilters(params) {
|
|
|
93
80
|
}
|
|
94
81
|
return builder;
|
|
95
82
|
}
|
|
96
|
-
function handleCancelClick() {
|
|
97
|
-
quickFilterActivator = void 0;
|
|
98
|
-
openQuickFilter = false;
|
|
99
|
-
}
|
|
100
|
-
function handleQuickFilterClick(mouseEvent, quickFilter) {
|
|
101
|
-
handleCancelClick();
|
|
102
|
-
setTimeout(() => {
|
|
103
|
-
if (quickFilter) {
|
|
104
|
-
if (!quickFilterActivator) {
|
|
105
|
-
let target = mouseEvent.target;
|
|
106
|
-
quickFilterActivator = target;
|
|
107
|
-
quickFilterActive = quickFilter;
|
|
108
|
-
openQuickFilter = !openQuickFilter;
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
}, 300);
|
|
112
|
-
}
|
|
113
|
-
function setQuickFilterMissingValue(quickFilter) {
|
|
114
|
-
if (quickFilter.type.key == "custom") {
|
|
115
|
-
quickFilter.type.missingValue = true;
|
|
116
|
-
quickFilter.type.value = void 0;
|
|
117
|
-
} else if (quickFilter.type.key == "multi-select") {
|
|
118
|
-
quickFilter.type.missingValue = true;
|
|
119
|
-
quickFilter.type.values = [];
|
|
120
|
-
} else if (quickFilter.type.key == "string") {
|
|
121
|
-
quickFilter.type.missingValue = true;
|
|
122
|
-
quickFilter.type.value = void 0;
|
|
123
|
-
} else if (quickFilter.type.key == "country") {
|
|
124
|
-
quickFilter.type.missingValue = true;
|
|
125
|
-
quickFilter.type.selected = void 0;
|
|
126
|
-
} else if (quickFilter.type.key == "number") {
|
|
127
|
-
quickFilter.type.missingValue = true;
|
|
128
|
-
quickFilter.type.value = void 0;
|
|
129
|
-
}
|
|
130
|
-
handleApplyClick(quickFilter);
|
|
131
|
-
}
|
|
132
|
-
function setQuickFilterValue(quickFilter, value) {
|
|
133
|
-
if (quickFilter.type.key == "custom") {
|
|
134
|
-
quickFilter.type.value = value;
|
|
135
|
-
} else if (quickFilter.type.key == "boolean") {
|
|
136
|
-
quickFilter.type.value = value;
|
|
137
|
-
}
|
|
138
|
-
handleApplyClick(quickFilter);
|
|
139
|
-
}
|
|
140
|
-
function handleApplyClick(quickFilter, dispatchCustomFilterClick = false) {
|
|
141
|
-
if (quickFilter.type.key == "custom" && dispatchCustomFilterClick) {
|
|
142
|
-
dispatch("applyCustomQuickFilter", { quickFilter, setQuickFilterValue });
|
|
143
|
-
} else {
|
|
144
|
-
quickFilter.active = true;
|
|
145
|
-
quickFilters = quickFilters;
|
|
146
|
-
globalBuilder = quickFilterBuilder(globalBuilder, quickFilter);
|
|
147
|
-
handleFiltersChange();
|
|
148
|
-
quickFilterActivator = void 0;
|
|
149
|
-
openQuickFilter = false;
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
function quickFilterBuilder(builder, quickFilter, clearPreaviousValue = true) {
|
|
153
|
-
if (quickFilter.type.key == "custom") {
|
|
154
|
-
let value = quickFilter.type.value, missingValue = quickFilter.type.missingValue;
|
|
155
|
-
if (clearPreaviousValue) {
|
|
156
|
-
builder = handleClearQuickFilter(quickFilter, false);
|
|
157
|
-
}
|
|
158
|
-
quickFilter.type.value = value;
|
|
159
|
-
quickFilter.type.missingValue = missingValue;
|
|
160
|
-
builder = quickFilter.type.modify({
|
|
161
|
-
builder,
|
|
162
|
-
value: { value, missingValue }
|
|
163
|
-
});
|
|
164
|
-
} else if (quickFilter.type.key == "string") {
|
|
165
|
-
let value = quickFilter.type.value, missingValue = quickFilter.type.missingValue;
|
|
166
|
-
if (clearPreaviousValue) {
|
|
167
|
-
builder = handleClearQuickFilter(quickFilter, false);
|
|
168
|
-
}
|
|
169
|
-
quickFilter.type.value = value;
|
|
170
|
-
quickFilter.type.missingValue = missingValue;
|
|
171
|
-
if (quickFilter.type.modify) {
|
|
172
|
-
builder = quickFilter.type.modify({
|
|
173
|
-
builder,
|
|
174
|
-
value: { value, missingValue }
|
|
175
|
-
});
|
|
176
|
-
}
|
|
177
|
-
if (!!quickFilter.column) {
|
|
178
|
-
if (missingValue) {
|
|
179
|
-
builder.whereNull(quickFilter.column);
|
|
180
|
-
} else if (!!value) {
|
|
181
|
-
builder.where(
|
|
182
|
-
quickFilter.column,
|
|
183
|
-
quickFilter.type.mode ?? "equal",
|
|
184
|
-
value
|
|
185
|
-
);
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
} else if (quickFilter.type.key == "boolean") {
|
|
189
|
-
let value = quickFilter.type.value;
|
|
190
|
-
if (clearPreaviousValue) {
|
|
191
|
-
builder = handleClearQuickFilter(quickFilter, false);
|
|
192
|
-
}
|
|
193
|
-
quickFilter.type.value = value;
|
|
194
|
-
if (quickFilter.type.modify) {
|
|
195
|
-
builder = quickFilter.type.modify({
|
|
196
|
-
builder,
|
|
197
|
-
value
|
|
198
|
-
});
|
|
199
|
-
}
|
|
200
|
-
if (!!quickFilter.column && value != void 0) {
|
|
201
|
-
builder.where(quickFilter.column, value);
|
|
202
|
-
}
|
|
203
|
-
} else if (quickFilter.type.key == "country") {
|
|
204
|
-
let value = quickFilter.type.selected, missingValue = quickFilter.type.missingValue;
|
|
205
|
-
if (clearPreaviousValue) {
|
|
206
|
-
builder = handleClearQuickFilter(quickFilter, false);
|
|
207
|
-
}
|
|
208
|
-
quickFilter.type.selected = value;
|
|
209
|
-
quickFilter.type.missingValue = missingValue;
|
|
210
|
-
const values = value?.map((item) => item.value);
|
|
211
|
-
if (quickFilter.type.modify) {
|
|
212
|
-
builder = quickFilter.type.modify({
|
|
213
|
-
builder,
|
|
214
|
-
value: { values, missingValue }
|
|
215
|
-
});
|
|
216
|
-
}
|
|
217
|
-
if (!!quickFilter.column) {
|
|
218
|
-
if (missingValue) {
|
|
219
|
-
builder.whereNull(quickFilter.column);
|
|
220
|
-
} else if (!!values && values.length > 0) {
|
|
221
|
-
builder.whereIn(quickFilter.column, values);
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
} else if (quickFilter.type.key == "date") {
|
|
225
|
-
let from = quickFilter.type.from, to = quickFilter.type.to;
|
|
226
|
-
if (clearPreaviousValue) {
|
|
227
|
-
builder = handleClearQuickFilter(quickFilter, false);
|
|
228
|
-
}
|
|
229
|
-
quickFilter.type.from = from;
|
|
230
|
-
quickFilter.type.to = to;
|
|
231
|
-
if (quickFilter.type.modify) {
|
|
232
|
-
builder = quickFilter.type.modify({
|
|
233
|
-
builder,
|
|
234
|
-
value: { from, to }
|
|
235
|
-
});
|
|
236
|
-
} else if (!!quickFilter.column) {
|
|
237
|
-
if (!!from) {
|
|
238
|
-
builder.where(
|
|
239
|
-
quickFilter.column,
|
|
240
|
-
">=",
|
|
241
|
-
DateTime.fromJSDate(from).setLocale("it-IT").startOf("day").toString()
|
|
242
|
-
);
|
|
243
|
-
}
|
|
244
|
-
if (!!to) {
|
|
245
|
-
builder.where(
|
|
246
|
-
quickFilter.column,
|
|
247
|
-
"<=",
|
|
248
|
-
DateTime.fromJSDate(to).setLocale("it-IT").endOf("day").toString()
|
|
249
|
-
);
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
} else if (quickFilter.type.key == "multi-select") {
|
|
253
|
-
let value = quickFilter.type.values, missingValue = quickFilter.type.missingValue;
|
|
254
|
-
if (clearPreaviousValue) {
|
|
255
|
-
builder = handleClearQuickFilter(quickFilter, false);
|
|
256
|
-
}
|
|
257
|
-
quickFilter.type.values = value;
|
|
258
|
-
quickFilter.type.missingValue = missingValue;
|
|
259
|
-
const values = value.map((item) => item.value);
|
|
260
|
-
if (quickFilter.type.modify) {
|
|
261
|
-
builder = quickFilter.type.modify({
|
|
262
|
-
builder,
|
|
263
|
-
value: { values, missingValue }
|
|
264
|
-
});
|
|
265
|
-
} else if (quickFilter.column) {
|
|
266
|
-
if (missingValue) {
|
|
267
|
-
builder.whereNull(quickFilter.column);
|
|
268
|
-
} else if (values.length > 0) {
|
|
269
|
-
builder.whereIn(quickFilter.column, values);
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
} else if (quickFilter.type.key == "number") {
|
|
273
|
-
let value = quickFilter.type.value, missingValue = quickFilter.type.missingValue;
|
|
274
|
-
if (clearPreaviousValue) {
|
|
275
|
-
builder = handleClearQuickFilter(quickFilter, false);
|
|
276
|
-
}
|
|
277
|
-
quickFilter.type.value = value;
|
|
278
|
-
quickFilter.type.missingValue = missingValue;
|
|
279
|
-
if (quickFilter.type.modify) {
|
|
280
|
-
builder = quickFilter.type.modify({
|
|
281
|
-
builder,
|
|
282
|
-
value: { value, missingValue }
|
|
283
|
-
});
|
|
284
|
-
}
|
|
285
|
-
if (quickFilter.column) {
|
|
286
|
-
if (missingValue) {
|
|
287
|
-
builder.whereNull(quickFilter.column);
|
|
288
|
-
} else if (!!value) {
|
|
289
|
-
builder.where(quickFilter.column, value);
|
|
290
|
-
}
|
|
291
|
-
}
|
|
292
|
-
}
|
|
293
|
-
return builder;
|
|
294
|
-
}
|
|
295
|
-
function handleClearQuickFilter(quickFilter, dispatchFiltersChange = true) {
|
|
296
|
-
if (quickFilter.type.key == "custom") {
|
|
297
|
-
quickFilter.type.value = void 0;
|
|
298
|
-
quickFilter.type.missingValue = void 0;
|
|
299
|
-
if (dispatchFiltersChange) {
|
|
300
|
-
dispatch("removeCustomQuickFilter", { quickFilter });
|
|
301
|
-
}
|
|
302
|
-
} else if (quickFilter.type.key == "string") {
|
|
303
|
-
quickFilter.type.value = void 0;
|
|
304
|
-
quickFilter.type.missingValue = void 0;
|
|
305
|
-
} else if (quickFilter.type.key == "number") {
|
|
306
|
-
quickFilter.type.value = void 0;
|
|
307
|
-
quickFilter.type.missingValue = void 0;
|
|
308
|
-
} else if (quickFilter.type.key == "boolean") {
|
|
309
|
-
quickFilter.type.value = void 0;
|
|
310
|
-
} else if (quickFilter.type.key == "country") {
|
|
311
|
-
quickFilter.type.selected = void 0;
|
|
312
|
-
quickFilter.type.missingValue = void 0;
|
|
313
|
-
} else if (quickFilter.type.key == "date") {
|
|
314
|
-
quickFilter.type.from = void 0;
|
|
315
|
-
quickFilter.type.to = void 0;
|
|
316
|
-
} else if (quickFilter.type.key == "multi-select") {
|
|
317
|
-
quickFilter.type.values = [];
|
|
318
|
-
quickFilter.type.missingValue = false;
|
|
319
|
-
quickFilter.type.missingValue = void 0;
|
|
320
|
-
}
|
|
321
|
-
if (dispatchFiltersChange) {
|
|
322
|
-
quickFilter.active = false;
|
|
323
|
-
}
|
|
324
|
-
globalBuilder = searchTextBuilder(searchText);
|
|
325
|
-
for (let i = 0; i < quickFilters.length; i++) {
|
|
326
|
-
if (quickFilters[i].active) {
|
|
327
|
-
globalBuilder = quickFilterBuilder(
|
|
328
|
-
globalBuilder,
|
|
329
|
-
quickFilters[i],
|
|
330
|
-
false
|
|
331
|
-
);
|
|
332
|
-
}
|
|
333
|
-
}
|
|
334
|
-
if (dispatchFiltersChange) {
|
|
335
|
-
quickFilters = quickFilters;
|
|
336
|
-
handleFiltersChange();
|
|
337
|
-
}
|
|
338
|
-
return globalBuilder;
|
|
339
|
-
}
|
|
340
|
-
function searchTextBuilder(searchText2) {
|
|
341
|
-
let builder;
|
|
342
|
-
let converter = new Converter();
|
|
343
|
-
builder = converter.createBuilder({
|
|
344
|
-
filters: filters || []
|
|
345
|
-
});
|
|
346
|
-
if (!!searchText2 && !!searchBarColumns && searchBarColumns.length > 0) {
|
|
347
|
-
builder.where((b) => {
|
|
348
|
-
b.where(searchBarColumns[0], "ilike", "%" + searchText2 + "%");
|
|
349
|
-
for (let i = 1; i < searchBarColumns.length; i += 1) {
|
|
350
|
-
b.orWhere(searchBarColumns[i], "ilike", "%" + searchText2 + "%");
|
|
351
|
-
}
|
|
352
|
-
});
|
|
353
|
-
}
|
|
354
|
-
return builder;
|
|
355
|
-
}
|
|
356
83
|
</script>
|
|
357
84
|
|
|
358
85
|
<div class="paginated-table">
|
|
@@ -392,54 +119,6 @@ function searchTextBuilder(searchText2) {
|
|
|
392
119
|
</svelte:fragment>
|
|
393
120
|
</Filters>
|
|
394
121
|
</div>
|
|
395
|
-
<div class="quick-filters-results-container">
|
|
396
|
-
<div class="quick-filters">
|
|
397
|
-
{#if !!quickFilters && quickFilters.length > 0 && quickFiltersVisible}
|
|
398
|
-
{#each quickFilters as quickFilter}
|
|
399
|
-
<div
|
|
400
|
-
class={quickFilter.active ? "active-quick-filters" : "non-active-quick-filters"}
|
|
401
|
-
>
|
|
402
|
-
<button
|
|
403
|
-
on:click={(e) => {
|
|
404
|
-
handleQuickFilterClick(e, quickFilter);
|
|
405
|
-
}}
|
|
406
|
-
>
|
|
407
|
-
<div class="quick-filter-icon">
|
|
408
|
-
<Icon name={quickFilter.icon} --icon-size="20px" />
|
|
409
|
-
{quickFilter.title}
|
|
410
|
-
</div>
|
|
411
|
-
</button>
|
|
412
|
-
{#if quickFilter.active}
|
|
413
|
-
<div style:padding-top="1px" style:padding-right="3px">
|
|
414
|
-
<Icon
|
|
415
|
-
name="mdi-close-circle"
|
|
416
|
-
click
|
|
417
|
-
--icon-size="14px"
|
|
418
|
-
on:click={() => {
|
|
419
|
-
handleClearQuickFilter(quickFilter);
|
|
420
|
-
}}
|
|
421
|
-
/>
|
|
422
|
-
</div>
|
|
423
|
-
{/if}
|
|
424
|
-
</div>
|
|
425
|
-
{/each}
|
|
426
|
-
{/if}
|
|
427
|
-
</div>
|
|
428
|
-
{#if totalElements}
|
|
429
|
-
<div class='results-number'>
|
|
430
|
-
{ lang == 'en' ? 'Results: ' : 'Risultati: '}
|
|
431
|
-
{#if !loading && !!items}
|
|
432
|
-
{totalElements || items.length}
|
|
433
|
-
{:else}
|
|
434
|
-
<CircularLoader
|
|
435
|
-
{loading}
|
|
436
|
-
--circular-loader-height='10px'
|
|
437
|
-
></CircularLoader>
|
|
438
|
-
{/if}
|
|
439
|
-
</div>
|
|
440
|
-
{/if}
|
|
441
|
-
</div>
|
|
442
|
-
|
|
443
122
|
<SimpleTable
|
|
444
123
|
bind:headers
|
|
445
124
|
bind:class={clazz.simpleTable}
|
|
@@ -539,261 +218,6 @@ function searchTextBuilder(searchText2) {
|
|
|
539
218
|
</div>
|
|
540
219
|
</div>
|
|
541
220
|
|
|
542
|
-
|
|
543
|
-
<Menu
|
|
544
|
-
bind:open={openQuickFilter}
|
|
545
|
-
activator={quickFilterActivator}
|
|
546
|
-
bind:menuElement={menuElementQuickFilters}
|
|
547
|
-
anchor="bottom"
|
|
548
|
-
openingId="quick-filter"
|
|
549
|
-
closeOnClickOutside
|
|
550
|
-
>
|
|
551
|
-
<div
|
|
552
|
-
class="quick-filter-container"
|
|
553
|
-
>
|
|
554
|
-
<div style:grid-column="1 / 3">
|
|
555
|
-
{#if quickFilterActive.type.key == 'custom'}
|
|
556
|
-
<slot name="custom-quick-filter" quickFilter={quickFilterActive} {setQuickFilterMissingValue}>
|
|
557
|
-
</slot>
|
|
558
|
-
{:else if quickFilterActive.type.key === "string"}
|
|
559
|
-
<div class="space-between" style="font-weight: 500;">
|
|
560
|
-
{quickFilterActive.title}
|
|
561
|
-
{#if !!quickFilterActive.type.missingLabel}
|
|
562
|
-
<button
|
|
563
|
-
on:click={() =>
|
|
564
|
-
setQuickFilterMissingValue(quickFilterActive)}
|
|
565
|
-
>{quickFilterActive.type.missingLabel}</button
|
|
566
|
-
>
|
|
567
|
-
{/if}
|
|
568
|
-
</div>
|
|
569
|
-
<LabelAndTextField
|
|
570
|
-
description={quickFilterActive.description}
|
|
571
|
-
name={quickFilterActive.title}
|
|
572
|
-
info={quickFilterActive.info}
|
|
573
|
-
type="text"
|
|
574
|
-
bind:value={quickFilterActive.type.value}
|
|
575
|
-
--simple-textfield-border-radius= 0.5rem
|
|
576
|
-
--simple-textfield-background-color= transparent
|
|
577
|
-
--simple-textfield-box-shadow= 'inset 0 0 0 1px rgb(var(--global-color-background-500))'
|
|
578
|
-
--simple-textfield-focus-box-shadow='inset 0 0 0 2px rgb(var(--global-color-primary-500))'
|
|
579
|
-
/>
|
|
580
|
-
{:else if quickFilterActive.type.key === "number"}
|
|
581
|
-
<div class="space-between" style="font-weight: 500; margin-bottom: 8px;">
|
|
582
|
-
{quickFilterActive.title}
|
|
583
|
-
{#if !!quickFilterActive.type.missingLabel}
|
|
584
|
-
<button
|
|
585
|
-
on:click={() =>
|
|
586
|
-
setQuickFilterMissingValue(quickFilterActive)}
|
|
587
|
-
>{quickFilterActive.type.missingLabel}</button
|
|
588
|
-
>
|
|
589
|
-
{/if}
|
|
590
|
-
</div>
|
|
591
|
-
<LabelAndTextField
|
|
592
|
-
description={quickFilterActive.description}
|
|
593
|
-
name={quickFilterActive.title}
|
|
594
|
-
info={quickFilterActive.info}
|
|
595
|
-
type="number"
|
|
596
|
-
error={saveEditDisabled}
|
|
597
|
-
bind:value={quickFilterActive.type.value}
|
|
598
|
-
--simple-textfield-border-radius= 0.5rem
|
|
599
|
-
--simple-textfield-background-color= transparent
|
|
600
|
-
--simple-textfield-box-shadow= 'inset 0 0 0 1px rgb(var(--global-color-background-500))'
|
|
601
|
-
--simple-textfield-focus-box-shadow='inset 0 0 0 2px rgb(var(--global-color-primary-500))'
|
|
602
|
-
/>
|
|
603
|
-
{:else if quickFilterActive.type.key === "multi-select"}
|
|
604
|
-
<div class="space-between" style="font-weight: 500; margin-bottom: 8px;">
|
|
605
|
-
{quickFilterActive.title}
|
|
606
|
-
{#if !!quickFilterActive.type.missingLabel}
|
|
607
|
-
<button
|
|
608
|
-
on:click={() =>
|
|
609
|
-
setQuickFilterMissingValue(quickFilterActive)}
|
|
610
|
-
>{quickFilterActive.type.missingLabel}</button
|
|
611
|
-
>
|
|
612
|
-
{/if}
|
|
613
|
-
</div>
|
|
614
|
-
<div on:click|stopPropagation role="presentation" tabindex="-1">
|
|
615
|
-
<Autocomplete
|
|
616
|
-
multiple
|
|
617
|
-
items={quickFilterActive.type.items}
|
|
618
|
-
bind:values={quickFilterActive.type.values}
|
|
619
|
-
--autocomplete-border-radius= 0.5rem
|
|
620
|
-
--autocomplete-border="1px solid rgb(var(--global-color-background-500))"
|
|
621
|
-
--autocomplete-focus-box-shadow="0 0 0 2px rgb(var(--global-color-primary-500))"
|
|
622
|
-
>
|
|
623
|
-
<svelte:fragment slot="selection" let:selection let:unselect>
|
|
624
|
-
<slot name="selection" {selection} {unselect}>
|
|
625
|
-
<div tabindex="-1">
|
|
626
|
-
<Chip
|
|
627
|
-
close={true}
|
|
628
|
-
on:close={() => unselect(selection)}
|
|
629
|
-
--chip-default-border-radius="var(--autocomplete-border-radius, var(--autocomplete-default-border-radius))"
|
|
630
|
-
buttonTabIndex={-1}
|
|
631
|
-
truncateText
|
|
632
|
-
>
|
|
633
|
-
<slot name="chip-label" {selection}>
|
|
634
|
-
{#if !!quickFilterActive.type.countriesAlpha2 && quickFilterActive.type.countriesAlpha2.find((c) => c.value == selection.value)}
|
|
635
|
-
<div>
|
|
636
|
-
<FlagIcon
|
|
637
|
-
alpha2={quickFilterActive.type.countriesAlpha2
|
|
638
|
-
.find((c) => c.value == selection.value)
|
|
639
|
-
?.label?.toString()
|
|
640
|
-
.toLowerCase() ?? ""}
|
|
641
|
-
--flag-icon-size="16px"
|
|
642
|
-
/>
|
|
643
|
-
</div>
|
|
644
|
-
{/if}
|
|
645
|
-
{selection.label}
|
|
646
|
-
</slot>
|
|
647
|
-
</Chip>
|
|
648
|
-
</div>
|
|
649
|
-
</slot>
|
|
650
|
-
</svelte:fragment>
|
|
651
|
-
<svelte:fragment slot="item-label" let:item>
|
|
652
|
-
<slot name="item-label" {item}>
|
|
653
|
-
{#if !!quickFilterActive.type.countriesAlpha2 && quickFilterActive.type.countriesAlpha2.find((c) => c.value == item.value)}
|
|
654
|
-
<FlagIcon
|
|
655
|
-
alpha2={quickFilterActive.type.countriesAlpha2
|
|
656
|
-
.find((c) => c.value == item.value)
|
|
657
|
-
?.label?.toString()
|
|
658
|
-
.toLowerCase() ?? ""}
|
|
659
|
-
/>
|
|
660
|
-
{/if}
|
|
661
|
-
{item.label}
|
|
662
|
-
</slot>
|
|
663
|
-
</svelte:fragment>
|
|
664
|
-
</Autocomplete>
|
|
665
|
-
</div>
|
|
666
|
-
{:else if quickFilterActive.type.key === "boolean"}
|
|
667
|
-
{#if quickFilterActive.type.params}
|
|
668
|
-
<div class="vertical-quick-filters">
|
|
669
|
-
<button
|
|
670
|
-
on:click={() => setQuickFilterValue(quickFilterActive, true)}
|
|
671
|
-
>
|
|
672
|
-
{quickFilterActive.type.params.labelTrue}
|
|
673
|
-
</button>
|
|
674
|
-
<button
|
|
675
|
-
on:click={() => setQuickFilterValue(quickFilterActive, false)}
|
|
676
|
-
>
|
|
677
|
-
{quickFilterActive.type.params.labelFalse}
|
|
678
|
-
</button>
|
|
679
|
-
<button
|
|
680
|
-
on:click={() => setQuickFilterValue(quickFilterActive, undefined)}
|
|
681
|
-
>
|
|
682
|
-
{lang == 'en' ? 'All' : 'Tutti'}
|
|
683
|
-
</button>
|
|
684
|
-
</div>
|
|
685
|
-
{/if}
|
|
686
|
-
{:else if quickFilterActive.type.key === "country"}
|
|
687
|
-
<div class="space-between" style="font-weight: 500; margin-bottom: 8px;">
|
|
688
|
-
{quickFilterActive.title}
|
|
689
|
-
{#if !!quickFilterActive.type.missingLabel}
|
|
690
|
-
<button
|
|
691
|
-
on:click={() =>
|
|
692
|
-
setQuickFilterMissingValue(quickFilterActive)}
|
|
693
|
-
>{quickFilterActive.type.missingLabel}</button
|
|
694
|
-
>
|
|
695
|
-
{/if}
|
|
696
|
-
</div>
|
|
697
|
-
<div on:click|stopPropagation role="presentation" tabindex="-1">
|
|
698
|
-
<CountriesAutocomplete
|
|
699
|
-
bind:selected={quickFilterActive.type.selected}
|
|
700
|
-
{...((!!quickFilterActive.type.countriesOptions && quickFilterActive.type.countriesOptions.length > 0) && {
|
|
701
|
-
items: quickFilterActive.type.countriesOptions,
|
|
702
|
-
})}
|
|
703
|
-
autocompleteProps={{
|
|
704
|
-
placeholder: !!quickFilterActive.type.selected
|
|
705
|
-
? quickFilterActive.type.selected.length > 0
|
|
706
|
-
? ""
|
|
707
|
-
: quickFilterActive.description
|
|
708
|
-
: quickFilterActive.description,
|
|
709
|
-
multiple: true,
|
|
710
|
-
}}
|
|
711
|
-
--autocomplete-border-radius= 0.5rem
|
|
712
|
-
--autocomplete-border="1px solid rgb(var(--global-color-background-500))"
|
|
713
|
-
--autocomplete-focus-box-shadow="0 0 0 2px rgb(var(--global-color-primary-500))"
|
|
714
|
-
/>
|
|
715
|
-
</div>
|
|
716
|
-
{:else if quickFilterActive.type.key === "date"}
|
|
717
|
-
<div on:click|stopPropagation role="presentation" tabindex="-1">
|
|
718
|
-
<div>
|
|
719
|
-
<DatePickerTextField
|
|
720
|
-
bind:selectedDate={quickFilterActive.type.from}
|
|
721
|
-
placeholder={lang == 'en' ? "From" : 'Da'}
|
|
722
|
-
--simple-textfield-width="100%"
|
|
723
|
-
--simple-textfield-border-radius= 0.5rem
|
|
724
|
-
--simple-textfield-background-color= transparent
|
|
725
|
-
--simple-textfield-box-shadow= 'inset 0 0 0 1px rgb(var(--global-color-background-500))'
|
|
726
|
-
--simple-textfield-focus-box-shadow='inset 0 0 0 2px rgb(var(--global-color-primary-500))'
|
|
727
|
-
flipOnOverflow
|
|
728
|
-
bind:menuOpened={calendarOpened}
|
|
729
|
-
on:day-click={() => (calendarOpened = false)}
|
|
730
|
-
>
|
|
731
|
-
<svelte:fragment slot="append-inner">
|
|
732
|
-
<Icon
|
|
733
|
-
name="mdi-close-circle"
|
|
734
|
-
click
|
|
735
|
-
on:click={() => {
|
|
736
|
-
if (
|
|
737
|
-
!!quickFilterActive &&
|
|
738
|
-
quickFilterActive.type.key === "date"
|
|
739
|
-
) {
|
|
740
|
-
quickFilterActive.type.from = undefined;
|
|
741
|
-
}
|
|
742
|
-
}}
|
|
743
|
-
/>
|
|
744
|
-
</svelte:fragment>
|
|
745
|
-
</DatePickerTextField>
|
|
746
|
-
</div>
|
|
747
|
-
<div>
|
|
748
|
-
<DatePickerTextField
|
|
749
|
-
bind:selectedDate={quickFilterActive.type.to}
|
|
750
|
-
placeholder={lang == 'en' ? "To" : 'A'}
|
|
751
|
-
--simple-textfield-width="100%"
|
|
752
|
-
--simple-textfield-border-radius= 0.5rem
|
|
753
|
-
--simple-textfield-background-color= transparent
|
|
754
|
-
--simple-textfield-box-shadow= 'inset 0 0 0 1px rgb(var(--global-color-background-500))'
|
|
755
|
-
--simple-textfield-focus-box-shadow='inset 0 0 0 2px rgb(var(--global-color-primary-500))'
|
|
756
|
-
flipOnOverflow
|
|
757
|
-
bind:menuOpened={calendarOpened2}
|
|
758
|
-
on:day-click={() => (calendarOpened2 = false)}
|
|
759
|
-
>
|
|
760
|
-
<svelte:fragment slot="append-inner">
|
|
761
|
-
<Icon
|
|
762
|
-
name="mdi-close-circle"
|
|
763
|
-
click
|
|
764
|
-
on:click={() => {
|
|
765
|
-
if (
|
|
766
|
-
!!quickFilterActive &&
|
|
767
|
-
quickFilterActive.type.key === "date"
|
|
768
|
-
) {
|
|
769
|
-
quickFilterActive.type.to = undefined;
|
|
770
|
-
}
|
|
771
|
-
}}
|
|
772
|
-
/>
|
|
773
|
-
</svelte:fragment>
|
|
774
|
-
</DatePickerTextField>
|
|
775
|
-
</div>
|
|
776
|
-
</div>
|
|
777
|
-
{/if}
|
|
778
|
-
</div>
|
|
779
|
-
|
|
780
|
-
{#if quickFilterActive.type.key != "boolean"}
|
|
781
|
-
<div style:margin-top="10px" style:grid-row="2" style:grid-column="1 / 3">
|
|
782
|
-
<Divider --divider-color=rgb(var(--global-color-contrast-100)) />
|
|
783
|
-
</div>
|
|
784
|
-
<div style:grid-row="3" style:grid-column="2" style:margin-top="-15px">
|
|
785
|
-
<ConfirmOrCancelButtons
|
|
786
|
-
confirmDisable={saveEditDisabled}
|
|
787
|
-
confirmText={lang == 'en' ? "Apply" : 'Applica'}
|
|
788
|
-
cancelText={lang == 'en' ? "Cancel" : 'Annulla'}
|
|
789
|
-
on:cancel-click={handleCancelClick}
|
|
790
|
-
on:confirm-click={() => handleApplyClick(quickFilterActive, quickFilterActive.type.key == 'custom')}
|
|
791
|
-
/>
|
|
792
|
-
</div>
|
|
793
|
-
{/if}
|
|
794
|
-
</div>
|
|
795
|
-
</Menu>
|
|
796
|
-
|
|
797
221
|
<style>
|
|
798
222
|
.paginated-table {
|
|
799
223
|
width: 100%;
|
|
@@ -837,64 +261,6 @@ function searchTextBuilder(searchText2) {
|
|
|
837
261
|
);
|
|
838
262
|
}
|
|
839
263
|
|
|
840
|
-
.quick-filter-container {
|
|
841
|
-
display: grid;
|
|
842
|
-
grid-template-columns: 1fr 1fr;
|
|
843
|
-
justify-content: center;
|
|
844
|
-
align-items: center;
|
|
845
|
-
box-shadow: 2px 2px 2px 2px rgba(0, 0, 0, 0.2);
|
|
846
|
-
position: fixed;
|
|
847
|
-
padding: 10px;
|
|
848
|
-
border-radius: 10px;
|
|
849
|
-
background-color: var(
|
|
850
|
-
--paginated-table-quick-filter-background-color,
|
|
851
|
-
var(--paginated-table-default-quick-filter-background-color)
|
|
852
|
-
);
|
|
853
|
-
}
|
|
854
|
-
|
|
855
|
-
.quick-filters {
|
|
856
|
-
display: flex;
|
|
857
|
-
flex-direction: row;
|
|
858
|
-
margin-bottom: 10px;
|
|
859
|
-
}
|
|
860
|
-
|
|
861
|
-
.quick-filters-results-container {
|
|
862
|
-
display: flex;
|
|
863
|
-
justify-content: space-between;
|
|
864
|
-
}
|
|
865
|
-
|
|
866
|
-
.vertical-quick-filters {
|
|
867
|
-
display: flex;
|
|
868
|
-
flex-direction: column;
|
|
869
|
-
align-items: start;
|
|
870
|
-
width: 130px;
|
|
871
|
-
}
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
.active-quick-filters {
|
|
875
|
-
display: flex;
|
|
876
|
-
margin-right: 15px;
|
|
877
|
-
background-color: rgb(var(--global-color-primary-500));
|
|
878
|
-
border-radius: 5px;
|
|
879
|
-
width: fit-content;
|
|
880
|
-
}
|
|
881
|
-
|
|
882
|
-
.non-active-quick-filters {
|
|
883
|
-
display: flex;
|
|
884
|
-
margin-right: 16px;
|
|
885
|
-
}
|
|
886
|
-
|
|
887
|
-
.quick-filter-icon {
|
|
888
|
-
display: flex;
|
|
889
|
-
gap: 4px;
|
|
890
|
-
margin: 0 8px;
|
|
891
|
-
}
|
|
892
|
-
|
|
893
|
-
.space-between {
|
|
894
|
-
display: flex;
|
|
895
|
-
justify-content: space-between;
|
|
896
|
-
}
|
|
897
|
-
|
|
898
264
|
@media only screen and (max-width: 768px) {
|
|
899
265
|
.per-page-dropdown {
|
|
900
266
|
display: none;
|
|
@@ -3,12 +3,10 @@ import SimpleTable, { type CalculateRowClasses, type CalculateRowStyles } from "
|
|
|
3
3
|
import Paginator from "../../simple/lists/Paginator.svelte";
|
|
4
4
|
import Dropdown from "../forms/Dropdown.svelte";
|
|
5
5
|
import { type ComponentProps } from "svelte";
|
|
6
|
-
import './PaginatedTable.css';
|
|
7
6
|
type ArrayElement<ArrayType extends readonly unknown[]> = ArrayType extends readonly (infer ElementType)[] ? ElementType : never;
|
|
8
7
|
export type Header = ArrayElement<NonNullable<ComponentProps<SimpleTable>["headers"]>>;
|
|
9
8
|
import Filters from "../search/Filters.svelte";
|
|
10
9
|
import type Builder from "../../../utils/filters/builder";
|
|
11
|
-
import type { QuickFilter } from "../../../utils/filters/quickFilters";
|
|
12
10
|
declare const __propDef: {
|
|
13
11
|
props: {
|
|
14
12
|
class?: {
|
|
@@ -38,7 +36,6 @@ declare const __propDef: {
|
|
|
38
36
|
pointerOnRowHover?: boolean | undefined;
|
|
39
37
|
doubleClickActive?: ComponentProps<SimpleTable>['doubleClickActive'];
|
|
40
38
|
doubleClickDelay?: ComponentProps<SimpleTable>['doubleClickDelay'];
|
|
41
|
-
quickFilters?: QuickFilter[] | undefined;
|
|
42
39
|
calculateRowStyles?: CalculateRowStyles | undefined;
|
|
43
40
|
calculateRowClasses?: CalculateRowClasses | undefined;
|
|
44
41
|
};
|
|
@@ -61,7 +58,6 @@ declare const __propDef: {
|
|
|
61
58
|
rowDoubleClick: CustomEvent<{
|
|
62
59
|
item: import("../../simple/lists/SimpleTable.svelte").Item;
|
|
63
60
|
}>;
|
|
64
|
-
click: MouseEvent;
|
|
65
61
|
} & {
|
|
66
62
|
[evt: string]: CustomEvent<any>;
|
|
67
63
|
};
|
|
@@ -98,8 +94,8 @@ declare const __propDef: {
|
|
|
98
94
|
};
|
|
99
95
|
footer: {
|
|
100
96
|
hideRowsPerPage: boolean;
|
|
101
|
-
rowsPerPageOptions: import("
|
|
102
|
-
rowsPerPageSelection: import("
|
|
97
|
+
rowsPerPageOptions: import("../forms/Dropdown.svelte").Item[] | undefined;
|
|
98
|
+
rowsPerPageSelection: import("../forms/Dropdown.svelte").Item[];
|
|
103
99
|
totalElements: number | undefined;
|
|
104
100
|
page: number;
|
|
105
101
|
maxPage: number | undefined;
|
|
@@ -112,20 +108,6 @@ declare const __propDef: {
|
|
|
112
108
|
rowsPerPage: number;
|
|
113
109
|
totalElements: number | undefined;
|
|
114
110
|
};
|
|
115
|
-
'custom-quick-filter': {
|
|
116
|
-
quickFilter: QuickFilter;
|
|
117
|
-
setQuickFilterMissingValue: (quickFilter: QuickFilter) => void;
|
|
118
|
-
};
|
|
119
|
-
selection: {
|
|
120
|
-
selection: import("../../simple/forms/Autocomplete.svelte").Item;
|
|
121
|
-
unselect: (item: import("../../simple/forms/Autocomplete.svelte").Item) => void;
|
|
122
|
-
};
|
|
123
|
-
'chip-label': {
|
|
124
|
-
selection: import("../../simple/forms/Autocomplete.svelte").Item;
|
|
125
|
-
};
|
|
126
|
-
'item-label': {
|
|
127
|
-
item: import("../../simple/forms/Autocomplete.svelte").Item;
|
|
128
|
-
};
|
|
129
111
|
};
|
|
130
112
|
};
|
|
131
113
|
export type PaginatedTableProps = typeof __propDef.props;
|
package/package.json
CHANGED