@bexis2/bexis2-core-ui 0.3.12 → 0.3.13

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.
Files changed (30) hide show
  1. package/README.md +1 -0
  2. package/dist/components/File/FileUploader.svelte +3 -3
  3. package/dist/components/Table/TableContent.svelte +202 -119
  4. package/dist/components/Table/TableFilter.svelte +146 -102
  5. package/dist/components/Table/TableFilter.svelte.d.ts +2 -3
  6. package/dist/components/Table/TableFilterServer.svelte +274 -0
  7. package/dist/components/Table/TableFilterServer.svelte.d.ts +22 -0
  8. package/dist/components/Table/TablePagination.svelte +72 -39
  9. package/dist/components/Table/TablePaginationServer.svelte +125 -0
  10. package/dist/components/Table/TablePaginationServer.svelte.d.ts +21 -0
  11. package/dist/components/Table/filter.js +40 -78
  12. package/dist/components/Table/shared.d.ts +32 -0
  13. package/dist/components/Table/shared.js +117 -0
  14. package/dist/components/form/DropdownKvP.svelte.d.ts +4 -4
  15. package/dist/components/form/MultiSelect.svelte.d.ts +6 -6
  16. package/dist/models/Enums.d.ts +18 -0
  17. package/dist/models/Enums.js +20 -0
  18. package/dist/models/Models.d.ts +43 -2
  19. package/dist/models/Models.js +28 -1
  20. package/package.json +2 -2
  21. package/src/lib/components/Table/TableContent.svelte +227 -151
  22. package/src/lib/components/Table/TableFilter.svelte +166 -102
  23. package/src/lib/components/Table/TableFilterServer.svelte +310 -0
  24. package/src/lib/components/Table/TablePagination.svelte +75 -39
  25. package/src/lib/components/Table/TablePaginationServer.svelte +133 -0
  26. package/src/lib/components/Table/filter.ts +42 -86
  27. package/src/lib/components/Table/shared.ts +141 -0
  28. package/src/lib/components/file/FileUploader.svelte +3 -3
  29. package/src/lib/models/Enums.ts +22 -0
  30. package/src/lib/models/Models.ts +63 -2
@@ -13,6 +13,16 @@ const goToFirstPage = () => $pageIndex = 0;
13
13
  const goToLastPage = () => $pageIndex = $pageCount - 1;
14
14
  const goToNextPage = () => $pageIndex += 1;
15
15
  const goToPreviousPage = () => $pageIndex -= 1;
16
+ const handleChange = (e) => {
17
+ const value = e.target.value;
18
+ if (value > $pageCount) {
19
+ $pageIndex = $pageCount - 1;
20
+ } else if (value < 1) {
21
+ $pageIndex = 0;
22
+ } else {
23
+ $pageIndex = value - 1;
24
+ }
25
+ };
16
26
  $:
17
27
  goToFirstPageDisabled = !$pageIndex;
18
28
  $:
@@ -23,43 +33,66 @@ $:
23
33
  goToPreviousPageDisabled = !$hasPreviousPage;
24
34
  </script>
25
35
 
26
- <div class="flex justify-center gap-1">
27
- <button
28
- class="btn btn-sm variant-filled-primary"
29
- on:click|preventDefault={goToFirstPage}
30
- disabled={goToFirstPageDisabled}
31
- id="{id}-first"
32
- >
33
- <Fa icon={faAnglesLeft} /></button
34
- >
35
- <button
36
- class="btn btn-sm variant-filled-primary"
37
- id="{id}-previous"
38
- on:click|preventDefault={goToPreviousPage}
39
- disabled={goToPreviousPageDisabled}><Fa icon={faAngleLeft} /></button
40
- >
41
-
42
- <select
43
- name="pageSize"
44
- id="{id}-pageSize"
45
- class="select variant-filled-primary w-min font-bold"
46
- bind:value={$pageSize}
47
- >
48
- {#each pageSizes as size}
49
- <option value={size}>{size}</option>
50
- {/each}
51
- </select>
52
-
53
- <button
54
- class="btn btn-sm variant-filled-primary"
55
- id="{id}-next"
56
- on:click|preventDefault={goToNextPage}
57
- disabled={goToNextPageDisabled}><Fa icon={faAngleRight} /></button
58
- >
59
- <button
60
- class="btn btn-sm variant-filled-primary"
61
- id="{id}-last"
62
- on:click|preventDefault={goToLastPage}
63
- disabled={goToLastPageDisabled}><Fa icon={faAnglesRight} /></button
64
- >
36
+ <div class="flex justify-between w-full items-stretch gap-10">
37
+ <div class="flex justify-start">
38
+ <select
39
+ name="pageSize"
40
+ id="{id}-pageSize"
41
+ class="select variant-filled-primary w-min font-bold"
42
+ bind:value={$pageSize}
43
+ >
44
+ {#each pageSizes as size}
45
+ <option value={size}>{size}</option>
46
+ {/each}
47
+ </select>
48
+ </div>
49
+ <div class="flex justify-center gap-1">
50
+ <button
51
+ class="btn btn-sm variant-filled-primary"
52
+ on:click|preventDefault={goToFirstPage}
53
+ disabled={goToFirstPageDisabled}
54
+ id="{id}-first"
55
+ >
56
+ <Fa icon={faAnglesLeft} /></button
57
+ >
58
+ <button
59
+ class="btn btn-sm variant-filled-primary"
60
+ id="{id}-previous"
61
+ on:click|preventDefault={goToPreviousPage}
62
+ disabled={goToPreviousPageDisabled}><Fa icon={faAngleLeft} /></button
63
+ >
64
+ <input
65
+ type="number"
66
+ class="input border border-primary-500 rounded flex w-24"
67
+ value={$pageIndex + 1}
68
+ max={$pageCount}
69
+ min={1}
70
+ on:change={handleChange}
71
+ />
72
+ <button
73
+ class="btn btn-sm variant-filled-primary"
74
+ id="{id}-next"
75
+ on:click|preventDefault={goToNextPage}
76
+ disabled={goToNextPageDisabled}><Fa icon={faAngleRight} /></button
77
+ >
78
+ <button
79
+ class="btn btn-sm variant-filled-primary"
80
+ id="{id}-last"
81
+ on:click|preventDefault={goToLastPage}
82
+ disabled={goToLastPageDisabled}><Fa icon={faAnglesRight} /></button
83
+ >
84
+ </div>
85
+ <div class="flex justify-end items-center">
86
+ <span class="text-sm text-gray-500">
87
+ {#if $pageCount > 0}
88
+ {#if $pageCount == 1}
89
+ 1 page
90
+ {:else}
91
+ {$pageCount} pages
92
+ {/if}
93
+ {:else}
94
+ No pages
95
+ {/if}
96
+ </span>
97
+ </div>
65
98
  </div>
@@ -0,0 +1,125 @@
1
+ <script>import Fa from "svelte-fa/src/fa.svelte";
2
+ import {
3
+ faAnglesRight,
4
+ faAngleRight,
5
+ faAnglesLeft,
6
+ faAngleLeft
7
+ } from "@fortawesome/free-solid-svg-icons";
8
+ export let id;
9
+ export let pageIndex;
10
+ export let pageSize;
11
+ export let pageSizes;
12
+ export let serverItemCount;
13
+ export let updateTable;
14
+ let goToFirstPageDisabled = true;
15
+ let goToLastPageDisabled = true;
16
+ let goToNextPageDisabled = true;
17
+ let goToPreviousPageDisabled = true;
18
+ const handleChange = (e) => {
19
+ const value = e.target.value;
20
+ if (value > pageCount) {
21
+ $pageIndex = pageCount - 1;
22
+ } else if (value < 1) {
23
+ $pageIndex = 0;
24
+ } else {
25
+ $pageIndex = value - 1;
26
+ }
27
+ updateTable();
28
+ };
29
+ const goTo = (dst) => {
30
+ switch (dst) {
31
+ case "first":
32
+ $pageIndex = 0;
33
+ break;
34
+ case "last":
35
+ $pageIndex = pageCount - 1;
36
+ break;
37
+ case "next":
38
+ $pageIndex += 1;
39
+ break;
40
+ case "previous":
41
+ $pageIndex -= 1;
42
+ break;
43
+ default:
44
+ break;
45
+ }
46
+ updateTable();
47
+ };
48
+ $:
49
+ pageCount = Math.ceil($serverItemCount / $pageSize);
50
+ $:
51
+ goToFirstPageDisabled = !$pageIndex;
52
+ $:
53
+ goToLastPageDisabled = $pageIndex == pageCount - 1;
54
+ $:
55
+ goToNextPageDisabled = $pageIndex == pageCount - 1;
56
+ $:
57
+ goToPreviousPageDisabled = !$pageIndex;
58
+ $:
59
+ $pageSize && updateTable();
60
+ updateTable();
61
+ </script>
62
+
63
+ <div class="flex justify-between w-full items-stretch gap-10">
64
+ <div class="flex justify-start">
65
+ <select
66
+ name="pageSize"
67
+ id="{id}-pageSize"
68
+ class="select variant-filled-primary w-min font-bold"
69
+ bind:value={$pageSize}
70
+ >
71
+ {#each pageSizes as size}
72
+ <option value={size}>{size}</option>
73
+ {/each}
74
+ </select>
75
+ </div>
76
+ <div class="flex justify-center gap-1">
77
+ <button
78
+ class="btn btn-sm variant-filled-primary"
79
+ on:click|preventDefault={() => goTo('first')}
80
+ disabled={goToFirstPageDisabled}
81
+ id="{id}-first"
82
+ >
83
+ <Fa icon={faAnglesLeft} /></button
84
+ >
85
+ <button
86
+ class="btn btn-sm variant-filled-primary"
87
+ id="{id}-previous"
88
+ on:click|preventDefault={() => goTo('previous')}
89
+ disabled={goToPreviousPageDisabled}><Fa icon={faAngleLeft} /></button
90
+ >
91
+ <input
92
+ type="number"
93
+ class="input border border-primary-500 rounded flex w-24"
94
+ value={$pageIndex + 1}
95
+ max={pageCount}
96
+ min={1}
97
+ on:change={handleChange}
98
+ />
99
+ <button
100
+ class="btn btn-sm variant-filled-primary"
101
+ id="{id}-next"
102
+ on:click|preventDefault={() => goTo('next')}
103
+ disabled={goToNextPageDisabled}><Fa icon={faAngleRight} /></button
104
+ >
105
+ <button
106
+ class="btn btn-sm variant-filled-primary"
107
+ id="{id}-last"
108
+ on:click|preventDefault={() => goTo('last')}
109
+ disabled={goToLastPageDisabled}><Fa icon={faAnglesRight} /></button
110
+ >
111
+ </div>
112
+ <div class="flex justify-end items-center">
113
+ <span class="text-sm text-gray-500">
114
+ {#if pageCount > 0}
115
+ {#if pageCount == 1}
116
+ 1 page
117
+ {:else}
118
+ {pageCount} pages
119
+ {/if}
120
+ {:else}
121
+ No pages
122
+ {/if}
123
+ </span>
124
+ </div>
125
+ </div>
@@ -0,0 +1,21 @@
1
+ import { SvelteComponentTyped } from "svelte";
2
+ declare const __propDef: {
3
+ props: {
4
+ id: any;
5
+ pageIndex: any;
6
+ pageSize: any;
7
+ pageSizes: any;
8
+ serverItemCount: any;
9
+ updateTable: any;
10
+ };
11
+ events: {
12
+ [evt: string]: CustomEvent<any>;
13
+ };
14
+ slots: {};
15
+ };
16
+ export type TablePaginationServerProps = typeof __propDef.props;
17
+ export type TablePaginationServerEvents = typeof __propDef.events;
18
+ export type TablePaginationServerSlots = typeof __propDef.slots;
19
+ export default class TablePaginationServer extends SvelteComponentTyped<TablePaginationServerProps, TablePaginationServerEvents, TablePaginationServerSlots> {
20
+ }
21
+ export {};
@@ -1,16 +1,17 @@
1
+ import { FilterOptionsEnum } from '../../models/Enums';
1
2
  const textFilter = (filterOption, filterValue, value) => {
2
3
  switch (filterOption) {
3
- case 'isequal':
4
+ case FilterOptionsEnum.e:
4
5
  return value.toLowerCase() === filterValue.toLowerCase();
5
- case 'isnotequal':
6
+ case FilterOptionsEnum.ne:
6
7
  return value.toLowerCase() !== filterValue.toLowerCase();
7
- case 'starts':
8
+ case FilterOptionsEnum.sw:
8
9
  return value.toLowerCase().startsWith(filterValue.toLowerCase());
9
- case 'ends':
10
+ case FilterOptionsEnum.ew:
10
11
  return value.toLowerCase().endsWith(filterValue.toLowerCase());
11
- case 'contains':
12
+ case FilterOptionsEnum.c:
12
13
  return value.toLowerCase().includes(filterValue.toLowerCase());
13
- case 'notcontains':
14
+ case FilterOptionsEnum.nc:
14
15
  return !value.toLowerCase().includes(filterValue.toLowerCase());
15
16
  default:
16
17
  return false;
@@ -18,17 +19,17 @@ const textFilter = (filterOption, filterValue, value) => {
18
19
  };
19
20
  const numberFilter = (filterOption, filterValue, value) => {
20
21
  switch (filterOption) {
21
- case 'isequal':
22
+ case FilterOptionsEnum.e:
22
23
  return value === filterValue;
23
- case 'isnotequal':
24
+ case FilterOptionsEnum.ne:
24
25
  return value !== filterValue;
25
- case 'isgreater':
26
+ case FilterOptionsEnum.gt:
26
27
  return value > filterValue;
27
- case 'isless':
28
+ case FilterOptionsEnum.lt:
28
29
  return value < filterValue;
29
- case 'isgreaterorequal':
30
+ case FilterOptionsEnum.gte:
30
31
  return value >= filterValue;
31
- case 'islessorequal':
32
+ case FilterOptionsEnum.lte:
32
33
  return value <= filterValue;
33
34
  default:
34
35
  return false;
@@ -37,81 +38,42 @@ const numberFilter = (filterOption, filterValue, value) => {
37
38
  const dateFilter = (filterOption, filterValue, value) => {
38
39
  const filter = new Date(filterValue);
39
40
  switch (filterOption) {
40
- case 'ison':
41
- return value === filter;
42
- case 'isstartingfrom':
43
- return value >= filter;
44
- case 'isafter':
45
- return value > filter;
46
- case 'isuntil':
47
- return value <= filter;
48
- case 'isbefore':
49
- return value < filter;
50
- case 'isnoton':
51
- return value !== filter;
41
+ case FilterOptionsEnum.o:
42
+ return value.getTime() === filter.getTime();
43
+ case FilterOptionsEnum.sf:
44
+ return value.getTime() >= filter.getTime();
45
+ case FilterOptionsEnum.a:
46
+ return value.getTime() > filter.getTime();
47
+ case FilterOptionsEnum.u:
48
+ return value.getTime() <= filter.getTime();
49
+ case FilterOptionsEnum.b:
50
+ return value.getTime() < filter.getTime();
51
+ case FilterOptionsEnum.no:
52
+ return value.getTime() !== filter.getTime();
52
53
  default:
53
54
  return false;
54
55
  }
55
56
  };
56
- const numericFilter = ({ filterValue, value }) => {
57
- const [firstFilterOption, firstFilterValue, secondFilterOption, secondFilterValue] = filterValue;
58
- if (firstFilterValue == null && secondFilterValue == null) {
59
- return true;
60
- }
61
- else if ((firstFilterOption == null || firstFilterValue == null) &&
62
- secondFilterOption != null &&
63
- secondFilterValue != null) {
64
- return numberFilter(secondFilterOption, secondFilterValue, value);
65
- }
66
- else if ((secondFilterOption == null || secondFilterValue == null) &&
67
- firstFilterOption != null &&
68
- firstFilterValue != null) {
69
- return numberFilter(firstFilterOption, firstFilterValue, value);
70
- }
71
- return (numberFilter(firstFilterOption, firstFilterValue, value) &&
72
- numberFilter(secondFilterOption, secondFilterValue, value));
73
- };
74
- const stringFilter = ({ filterValue, value }) => {
75
- const [firstFilterOption, firstFilterValue, secondFilterOption, secondFilterValue] = filterValue;
76
- if (!firstFilterValue?.length && !secondFilterValue?.length) {
77
- return true;
78
- }
79
- else if ((!firstFilterOption || !firstFilterValue) &&
80
- secondFilterOption &&
81
- secondFilterValue?.length) {
82
- return textFilter(secondFilterOption, secondFilterValue, value);
83
- }
84
- else if ((!secondFilterOption || !secondFilterValue?.length) &&
85
- firstFilterOption &&
86
- firstFilterValue?.length) {
87
- return textFilter(firstFilterOption, firstFilterValue, value);
88
- }
89
- return (textFilter(firstFilterOption, firstFilterValue, value) &&
90
- textFilter(secondFilterOption, secondFilterValue, value));
91
- };
92
- const dateTypeFilter = ({ filterValue, value }) => {
93
- const [firstFilterOption, firstFilterValue, secondFilterOption, secondFilterValue] = filterValue;
94
- if (!firstFilterValue && !secondFilterValue) {
95
- return true;
96
- }
97
- else if ((!firstFilterOption || !firstFilterValue) && secondFilterOption && secondFilterValue) {
98
- return dateFilter(secondFilterOption, secondFilterValue, value);
99
- }
100
- else if ((!secondFilterOption || !secondFilterValue) && firstFilterOption && firstFilterValue) {
101
- return dateFilter(firstFilterOption, firstFilterValue, value);
102
- }
103
- return (dateFilter(firstFilterOption, firstFilterValue, value) &&
104
- dateFilter(secondFilterOption, secondFilterValue, value));
57
+ const applyFilter = (filterValue, value, filterFn) => {
58
+ let result = true;
59
+ const filters = Object.keys(filterValue).map((key) => ({
60
+ option: key,
61
+ value: filterValue[key]
62
+ }));
63
+ filters.forEach((filter) => {
64
+ result = result && (filter.value ? filterFn(filter.option, filter.value, value) : true);
65
+ });
66
+ return result;
105
67
  };
106
68
  export const columnFilter = ({ filterValue, value }) => {
107
- if (typeof value === 'string') {
108
- return stringFilter({ filterValue, value });
69
+ if (typeof value === 'object' && value instanceof Date) {
70
+ return applyFilter(filterValue, value, dateFilter);
109
71
  }
110
72
  else if (typeof value === 'number') {
111
- return numericFilter({ filterValue, value });
73
+ return applyFilter(filterValue, value, numberFilter);
112
74
  }
113
- else if (typeof value === 'object' && value instanceof Date) {
114
- return dateTypeFilter({ filterValue, value });
75
+ else if (typeof value === 'string') {
76
+ return applyFilter(filterValue, value, textFilter);
115
77
  }
116
78
  return false;
117
79
  };
@@ -0,0 +1,32 @@
1
+ import type { FilterOptionsEnum } from '../../models/Enums';
2
+ import type { Columns, Filter, ServerColumn } from '../../models/Models';
3
+ export declare const minWidth: (id: string, columns: Columns | undefined) => number;
4
+ export declare const fixedWidth: (id: string, columns: Columns | undefined) => number;
5
+ export declare const cellStyle: (id: string, columns: Columns | undefined) => string;
6
+ export declare const normalizeFilters: (filters: {
7
+ [key: string]: {
8
+ e?: string | number | Date | undefined;
9
+ ne?: string | number | Date | undefined;
10
+ gt?: string | number | Date | undefined;
11
+ lt?: string | number | Date | undefined;
12
+ gte?: string | number | Date | undefined;
13
+ lte?: string | number | Date | undefined;
14
+ c?: string | number | Date | undefined;
15
+ nc?: string | number | Date | undefined;
16
+ sw?: string | number | Date | undefined;
17
+ ew?: string | number | Date | undefined;
18
+ o?: string | number | Date | undefined;
19
+ sf?: string | number | Date | undefined;
20
+ a?: string | number | Date | undefined;
21
+ u?: string | number | Date | undefined;
22
+ b?: string | number | Date | undefined;
23
+ no?: string | number | Date | undefined;
24
+ };
25
+ }) => Filter[];
26
+ export declare const exportAsCsv: (tableId: string, exportedData: string) => void;
27
+ export declare const resetResize: (headerRows: any, pageRows: any, tableId: string, columns: Columns | undefined, resizable: 'none' | 'rows' | 'columns' | 'both') => void;
28
+ export declare const missingValuesFn: (key: number, missingValues: {
29
+ [key: string]: string;
30
+ [key: number]: string;
31
+ }) => string;
32
+ export declare const convertServerColumns: (columns: ServerColumn[]) => Columns;
@@ -0,0 +1,117 @@
1
+ // Function to determine minWidth for a column to simplify the logic in the HTML
2
+ export const minWidth = (id, columns) => {
3
+ if (columns && id in columns) {
4
+ return columns[id].minWidth ?? 0;
5
+ }
6
+ return 0;
7
+ };
8
+ // Function to determine fixedWidth for a column to simplify the logic in the HTML
9
+ export const fixedWidth = (id, columns) => {
10
+ if (columns && id in columns) {
11
+ return columns[id].fixedWidth ?? 0;
12
+ }
13
+ return 0;
14
+ };
15
+ // Function to create custom styles for the columns to simplify the logic in the HTML
16
+ export const cellStyle = (id, columns) => {
17
+ const minW = minWidth(id, columns);
18
+ const fixedW = fixedWidth(id, columns);
19
+ const styles = [];
20
+ // If minWidth is provided, add to styles
21
+ minW && styles.push(`min-width: ${minW}px`);
22
+ // If fixedWidth is provided, add to styles
23
+ fixedW && styles.push(`width: ${fixedW}px`);
24
+ // Create and return styles separated by ';'
25
+ return styles.join(';');
26
+ };
27
+ // Function to normalize the filters for back-end
28
+ export const normalizeFilters = (filters) => {
29
+ let filter = [];
30
+ // Add filters to the request
31
+ Object.keys(filters).forEach((key) => {
32
+ Object.keys(filters[key])
33
+ .filter((k) => filters[key][k] !== undefined)
34
+ .forEach((k) => {
35
+ filter.push({
36
+ column: key,
37
+ filterBy: k,
38
+ value: filters[key][k]
39
+ });
40
+ });
41
+ });
42
+ return filter;
43
+ };
44
+ export const exportAsCsv = (tableId, exportedData) => {
45
+ // Creating a hidden anchor element to download the CSV file
46
+ const anchor = document.createElement('a');
47
+ anchor.style.display = 'none';
48
+ anchor.href = `data:text/csv;charset=utf-8,${encodeURIComponent(exportedData)}`;
49
+ anchor.download = `${tableId}.csv`;
50
+ document.body.appendChild(anchor);
51
+ anchor.click();
52
+ document.body.removeChild(anchor);
53
+ };
54
+ // Resetting the resized columns and/or rows
55
+ export const resetResize = (headerRows, pageRows, tableId, columns, resizable) => {
56
+ // Run only if resizable is not none
57
+ if (resizable === 'columns' || resizable === 'both') {
58
+ headerRows.forEach((row) => {
59
+ row.cells.forEach((cell) => {
60
+ const minW = minWidth(cell.id, columns);
61
+ const fixedW = fixedWidth(cell.id, columns);
62
+ // If a fixedWidth is provided for a column, then reset the width to that value
63
+ fixedW &&
64
+ document
65
+ .getElementById(`th-${tableId}-${cell.id}`)
66
+ ?.style.setProperty('width', `${fixedW}px`);
67
+ // If a minWidth is provided for a column, then reset the width to that value
68
+ minW &&
69
+ document
70
+ .getElementById(`th-${tableId}-${cell.id}`)
71
+ ?.style.setProperty('width', `${minW}px`);
72
+ // If neither minWidth nor fixedWidth provided for a column, then reset the width to auto
73
+ !minW &&
74
+ !fixedW &&
75
+ document.getElementById(`th-${tableId}-${cell.id}`)?.style.setProperty('width', 'auto');
76
+ });
77
+ });
78
+ }
79
+ if (resizable === 'rows' || resizable === 'both') {
80
+ pageRows.forEach((row) => {
81
+ row.cells.forEach((cell) => {
82
+ // Reset all row heights to auto
83
+ document
84
+ .getElementById(`${tableId}-${cell.id}-${row.id}`)
85
+ ?.style.setProperty('height', 'auto');
86
+ });
87
+ });
88
+ }
89
+ };
90
+ export const missingValuesFn = (key, missingValues) => {
91
+ return key in missingValues ? missingValues[key] : key.toString();
92
+ };
93
+ export const convertServerColumns = (columns) => {
94
+ const columnsConfig = {};
95
+ columns.forEach((col) => {
96
+ let instructions = {};
97
+ // if (col.instructions?.displayPattern) {
98
+ // instructions = {
99
+ // toStringFn: (date: Date) =>
100
+ // date.toLocaleString('en-US', col.instructions?.displayPattern || {}),
101
+ // toSortableValueFn: (date: Date) => date.getTime(),
102
+ // toFilterableValueFn: (date: Date) => date
103
+ // };
104
+ // }
105
+ if (col.instructions?.missingValues) {
106
+ instructions = {
107
+ ...instructions,
108
+ toStringFn: (key) => missingValuesFn(key, col.instructions?.missingValues || {})
109
+ };
110
+ }
111
+ columnsConfig[col.column] = {
112
+ exclude: col.exclude,
113
+ instructions
114
+ };
115
+ });
116
+ return columnsConfig;
117
+ };
@@ -2,14 +2,14 @@
2
2
  /** @typedef {typeof __propDef.events} DropdownKvPEvents */
3
3
  /** @typedef {typeof __propDef.slots} DropdownKvPSlots */
4
4
  export default class DropdownKvP extends SvelteComponentTyped<{
5
- target: any;
6
5
  id: any;
6
+ target: any;
7
7
  source: any;
8
8
  title: any;
9
- required?: boolean | undefined;
10
9
  invalid?: boolean | undefined;
11
10
  valid?: boolean | undefined;
12
11
  feedback?: string[] | undefined;
12
+ required?: boolean | undefined;
13
13
  complexTarget?: boolean | undefined;
14
14
  help?: boolean | undefined;
15
15
  }, {
@@ -25,14 +25,14 @@ export type DropdownKvPSlots = typeof __propDef.slots;
25
25
  import { SvelteComponentTyped } from "svelte";
26
26
  declare const __propDef: {
27
27
  props: {
28
- target: any;
29
28
  id: any;
29
+ target: any;
30
30
  source: any;
31
31
  title: any;
32
- required?: boolean | undefined;
33
32
  invalid?: boolean | undefined;
34
33
  valid?: boolean | undefined;
35
34
  feedback?: string[] | undefined;
35
+ required?: boolean | undefined;
36
36
  complexTarget?: boolean | undefined;
37
37
  help?: boolean | undefined;
38
38
  };
@@ -2,14 +2,13 @@
2
2
  /** @typedef {typeof __propDef.events} MultiSelectEvents */
3
3
  /** @typedef {typeof __propDef.slots} MultiSelectSlots */
4
4
  export default class MultiSelect extends SvelteComponentTyped<{
5
- target: any;
6
5
  id: any;
6
+ target: any;
7
7
  source: any;
8
8
  title: any;
9
- disabled?: boolean | undefined;
10
- required?: boolean | undefined;
11
9
  invalid?: boolean | undefined;
12
10
  feedback?: string[] | undefined;
11
+ required?: boolean | undefined;
13
12
  complexTarget?: boolean | undefined;
14
13
  help?: boolean | undefined;
15
14
  itemId?: string | undefined;
@@ -20,6 +19,7 @@ export default class MultiSelect extends SvelteComponentTyped<{
20
19
  placeholder?: string | undefined;
21
20
  loading?: boolean | undefined;
22
21
  clearable?: boolean | undefined;
22
+ disabled?: boolean | undefined;
23
23
  }, {
24
24
  change: CustomEvent<any>;
25
25
  input: CustomEvent<any>;
@@ -39,14 +39,13 @@ export type MultiSelectSlots = typeof __propDef.slots;
39
39
  import { SvelteComponentTyped } from "svelte";
40
40
  declare const __propDef: {
41
41
  props: {
42
- target: any;
43
42
  id: any;
43
+ target: any;
44
44
  source: any;
45
45
  title: any;
46
- disabled?: boolean | undefined;
47
- required?: boolean | undefined;
48
46
  invalid?: boolean | undefined;
49
47
  feedback?: string[] | undefined;
48
+ required?: boolean | undefined;
50
49
  complexTarget?: boolean | undefined;
51
50
  help?: boolean | undefined;
52
51
  itemId?: string | undefined;
@@ -57,6 +56,7 @@ declare const __propDef: {
57
56
  placeholder?: string | undefined;
58
57
  loading?: boolean | undefined;
59
58
  clearable?: boolean | undefined;
59
+ disabled?: boolean | undefined;
60
60
  };
61
61
  events: {
62
62
  change: CustomEvent<any>;