@likable-hair/svelte 3.3.21 → 3.3.22

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 (200) hide show
  1. package/dist/components/composed/buttons/ActivableButton.svelte +6 -2
  2. package/dist/components/composed/buttons/ActivableButton.svelte.d.ts +36 -32
  3. package/dist/components/composed/common/MenuOrDrawer.svelte +21 -5
  4. package/dist/components/composed/common/MenuOrDrawer.svelte.d.ts +50 -36
  5. package/dist/components/composed/common/MenuOrDrawerOptions.svelte +29 -13
  6. package/dist/components/composed/common/MenuOrDrawerOptions.svelte.d.ts +34 -30
  7. package/dist/components/composed/common/QuickActions.svelte +52 -20
  8. package/dist/components/composed/common/QuickActions.svelte.d.ts +24 -20
  9. package/dist/components/composed/common/ToolTip.svelte +31 -22
  10. package/dist/components/composed/common/ToolTip.svelte.d.ts +32 -43
  11. package/dist/components/composed/forms/AsyncAutocomplete.svelte +44 -23
  12. package/dist/components/composed/forms/AsyncAutocomplete.svelte.d.ts +44 -39
  13. package/dist/components/composed/forms/AvatarDropdown.svelte +57 -27
  14. package/dist/components/composed/forms/AvatarDropdown.svelte.d.ts +45 -41
  15. package/dist/components/composed/forms/ConfirmOrCancelButtons.svelte +35 -17
  16. package/dist/components/composed/forms/ConfirmOrCancelButtons.svelte.d.ts +41 -37
  17. package/dist/components/composed/forms/CountriesAutocomplete.svelte +16 -7
  18. package/dist/components/composed/forms/CountriesAutocomplete.svelte.d.ts +31 -60
  19. package/dist/components/composed/forms/DatePickerTextField.svelte +166 -114
  20. package/dist/components/composed/forms/DatePickerTextField.svelte.d.ts +67 -63
  21. package/dist/components/composed/forms/Dropdown.svelte +51 -21
  22. package/dist/components/composed/forms/Dropdown.svelte.d.ts +48 -43
  23. package/dist/components/composed/forms/IconsDropdown.svelte +61 -33
  24. package/dist/components/composed/forms/IconsDropdown.svelte.d.ts +30 -26
  25. package/dist/components/composed/forms/LabelAndSelect.svelte +32 -7
  26. package/dist/components/composed/forms/LabelAndSelect.svelte.d.ts +35 -31
  27. package/dist/components/composed/forms/LabelAndTextField.svelte +30 -5
  28. package/dist/components/composed/forms/LabelAndTextField.svelte.d.ts +46 -42
  29. package/dist/components/composed/forms/ToggleList.svelte +59 -33
  30. package/dist/components/composed/forms/ToggleList.svelte.d.ts +21 -17
  31. package/dist/components/composed/forms/YearPickerTextField.svelte +114 -74
  32. package/dist/components/composed/forms/YearPickerTextField.svelte.d.ts +53 -49
  33. package/dist/components/composed/list/DynamicTable.svelte +1102 -707
  34. package/dist/components/composed/list/DynamicTable.svelte.d.ts +369 -365
  35. package/dist/components/composed/list/PaginatedTable.svelte +139 -76
  36. package/dist/components/composed/list/PaginatedTable.svelte.d.ts +108 -108
  37. package/dist/components/composed/progress/HorizontalStackedProgress.svelte +58 -30
  38. package/dist/components/composed/progress/HorizontalStackedProgress.svelte.d.ts +25 -21
  39. package/dist/components/composed/search/DynamicFilters.svelte +103 -82
  40. package/dist/components/composed/search/DynamicFilters.svelte.d.ts +31 -27
  41. package/dist/components/composed/search/FilterEditor.svelte +106 -77
  42. package/dist/components/composed/search/FilterEditor.svelte.d.ts +37 -33
  43. package/dist/components/composed/search/Filters.svelte +361 -292
  44. package/dist/components/composed/search/Filters.svelte.d.ts +55 -51
  45. package/dist/components/composed/search/GlobalSearchTextField.svelte +79 -41
  46. package/dist/components/composed/search/GlobalSearchTextField.svelte.d.ts +43 -39
  47. package/dist/components/composed/search/MobileFilterEditor.svelte +135 -93
  48. package/dist/components/composed/search/MobileFilterEditor.svelte.d.ts +39 -35
  49. package/dist/components/composed/search/SearchBar.svelte +28 -5
  50. package/dist/components/composed/search/SearchBar.svelte.d.ts +34 -30
  51. package/dist/components/composed/search/SearchResults.svelte +42 -7
  52. package/dist/components/composed/search/SearchResults.svelte.d.ts +40 -36
  53. package/dist/components/composed/shop/ProductCard.svelte +18 -4
  54. package/dist/components/composed/shop/ProductCard.svelte.d.ts +32 -28
  55. package/dist/components/composed/shop/ProductsGrid.svelte +22 -2
  56. package/dist/components/composed/shop/ProductsGrid.svelte.d.ts +44 -40
  57. package/dist/components/layouts/CollapsibleSideBarLayout.svelte +77 -38
  58. package/dist/components/layouts/CollapsibleSideBarLayout.svelte.d.ts +109 -69
  59. package/dist/components/layouts/StableDividedSideBarLayout.svelte +47 -17
  60. package/dist/components/layouts/StableDividedSideBarLayout.svelte.d.ts +50 -32
  61. package/dist/components/layouts/UnstableDividedSideBarLayout.svelte +53 -30
  62. package/dist/components/layouts/UnstableDividedSideBarLayout.svelte.d.ts +103 -63
  63. package/dist/components/simple/buttons/Button.svelte +78 -32
  64. package/dist/components/simple/buttons/Button.svelte.d.ts +47 -35
  65. package/dist/components/simple/buttons/LinkButton.svelte +54 -22
  66. package/dist/components/simple/buttons/LinkButton.svelte.d.ts +50 -33
  67. package/dist/components/simple/charts/GanymedeBarChart.svelte +172 -134
  68. package/dist/components/simple/charts/GanymedeBarChart.svelte.d.ts +50 -46
  69. package/dist/components/simple/charts/GanymedeLineChart.svelte +157 -115
  70. package/dist/components/simple/charts/GanymedeLineChart.svelte.d.ts +51 -47
  71. package/dist/components/simple/charts/GanymedePieChart.svelte +62 -39
  72. package/dist/components/simple/charts/GanymedePieChart.svelte.d.ts +37 -33
  73. package/dist/components/simple/common/Card.svelte +20 -1
  74. package/dist/components/simple/common/Card.svelte.d.ts +51 -38
  75. package/dist/components/simple/common/CollapsibleDivider.svelte +23 -11
  76. package/dist/components/simple/common/CollapsibleDivider.svelte.d.ts +29 -25
  77. package/dist/components/simple/common/Divider.svelte +8 -2
  78. package/dist/components/simple/common/Divider.svelte.d.ts +23 -19
  79. package/dist/components/simple/common/Gesture.svelte +64 -46
  80. package/dist/components/simple/common/Gesture.svelte.d.ts +21 -17
  81. package/dist/components/simple/common/InfiniteScroll.svelte +52 -29
  82. package/dist/components/simple/common/InfiniteScroll.svelte.d.ts +24 -20
  83. package/dist/components/simple/common/IntersectionObserver.svelte +45 -32
  84. package/dist/components/simple/common/IntersectionObserver.svelte.d.ts +34 -21
  85. package/dist/components/simple/common/MediaQuery.svelte +30 -21
  86. package/dist/components/simple/common/MediaQuery.svelte.d.ts +34 -30
  87. package/dist/components/simple/common/Menu.svelte +290 -201
  88. package/dist/components/simple/common/Menu.svelte.d.ts +51 -40
  89. package/dist/components/simple/common/Playground.svelte +18 -17
  90. package/dist/components/simple/common/Playground.svelte.d.ts +19 -15
  91. package/dist/components/simple/common/VerticalDraggableList.svelte +35 -16
  92. package/dist/components/simple/common/VerticalDraggableList.svelte.d.ts +33 -29
  93. package/dist/components/simple/dashboards/DashboardGridShaper.svelte +32 -26
  94. package/dist/components/simple/dashboards/DashboardGridShaper.svelte.d.ts +16 -12
  95. package/dist/components/simple/dates/Calendar.svelte +52 -28
  96. package/dist/components/simple/dates/Calendar.svelte.d.ts +45 -41
  97. package/dist/components/simple/dates/DatePicker.svelte +90 -60
  98. package/dist/components/simple/dates/DatePicker.svelte.d.ts +44 -40
  99. package/dist/components/simple/dates/MonthSelector.svelte +37 -15
  100. package/dist/components/simple/dates/MonthSelector.svelte.d.ts +35 -31
  101. package/dist/components/simple/dates/TimePicker.svelte +45 -31
  102. package/dist/components/simple/dates/TimePicker.svelte.d.ts +24 -20
  103. package/dist/components/simple/dates/TimePickerTextField.svelte +56 -35
  104. package/dist/components/simple/dates/TimePickerTextField.svelte.d.ts +28 -24
  105. package/dist/components/simple/dates/YearSelector.svelte +54 -29
  106. package/dist/components/simple/dates/YearSelector.svelte.d.ts +35 -31
  107. package/dist/components/simple/dialogs/Dialog.svelte +92 -62
  108. package/dist/components/simple/dialogs/Dialog.svelte.d.ts +42 -28
  109. package/dist/components/simple/forms/Autocomplete.svelte +201 -142
  110. package/dist/components/simple/forms/Autocomplete.svelte.d.ts +83 -79
  111. package/dist/components/simple/forms/Checkbox.svelte +40 -24
  112. package/dist/components/simple/forms/Checkbox.svelte.d.ts +25 -21
  113. package/dist/components/simple/forms/FileInput.svelte +88 -48
  114. package/dist/components/simple/forms/FileInput.svelte.d.ts +37 -33
  115. package/dist/components/simple/forms/FileInputList.svelte +52 -34
  116. package/dist/components/simple/forms/FileInputList.svelte.d.ts +43 -39
  117. package/dist/components/simple/forms/RadioButton.svelte +11 -3
  118. package/dist/components/simple/forms/RadioButton.svelte.d.ts +31 -27
  119. package/dist/components/simple/forms/Select.svelte +16 -3
  120. package/dist/components/simple/forms/Select.svelte.d.ts +24 -20
  121. package/dist/components/simple/forms/SimpleTextField.svelte +53 -6
  122. package/dist/components/simple/forms/SimpleTextField.svelte.d.ts +64 -60
  123. package/dist/components/simple/forms/Switch.svelte +30 -16
  124. package/dist/components/simple/forms/Switch.svelte.d.ts +25 -21
  125. package/dist/components/simple/forms/Textarea.svelte +27 -2
  126. package/dist/components/simple/forms/Textarea.svelte.d.ts +41 -37
  127. package/dist/components/simple/forms/Textfield.svelte +56 -18
  128. package/dist/components/simple/forms/Textfield.svelte.d.ts +55 -51
  129. package/dist/components/simple/forms/TreeEditor.svelte +141 -95
  130. package/dist/components/simple/forms/TreeEditor.svelte.d.ts +42 -38
  131. package/dist/components/simple/forms/TreeEditorItem.svelte +77 -42
  132. package/dist/components/simple/forms/TreeEditorItem.svelte.d.ts +54 -50
  133. package/dist/components/simple/forms/VerticalSwitch.svelte +11 -1
  134. package/dist/components/simple/forms/VerticalSwitch.svelte.d.ts +32 -28
  135. package/dist/components/simple/forms/VerticalTextSwitch.svelte +15 -3
  136. package/dist/components/simple/forms/VerticalTextSwitch.svelte.d.ts +30 -26
  137. package/dist/components/simple/lists/ColorInvertedSelector.svelte +53 -23
  138. package/dist/components/simple/lists/ColorInvertedSelector.svelte.d.ts +46 -42
  139. package/dist/components/simple/lists/HierarchyMenu.svelte +38 -19
  140. package/dist/components/simple/lists/HierarchyMenu.svelte.d.ts +34 -30
  141. package/dist/components/simple/lists/Paginator.svelte +50 -41
  142. package/dist/components/simple/lists/Paginator.svelte.d.ts +23 -19
  143. package/dist/components/simple/lists/SelectableMenuList.svelte +43 -15
  144. package/dist/components/simple/lists/SelectableMenuList.svelte.d.ts +24 -20
  145. package/dist/components/simple/lists/SelectableVerticalList.svelte +99 -57
  146. package/dist/components/simple/lists/SelectableVerticalList.svelte.d.ts +51 -47
  147. package/dist/components/simple/lists/SidebarMenuList.svelte +115 -70
  148. package/dist/components/simple/lists/SidebarMenuList.svelte.d.ts +26 -22
  149. package/dist/components/simple/lists/SimpleTable.svelte +264 -154
  150. package/dist/components/simple/lists/SimpleTable.svelte.d.ts +70 -66
  151. package/dist/components/simple/loaders/CircularLoader.svelte +16 -5
  152. package/dist/components/simple/loaders/CircularLoader.svelte.d.ts +19 -15
  153. package/dist/components/simple/loaders/Skeleton.svelte +3 -2
  154. package/dist/components/simple/loaders/Skeleton.svelte.d.ts +16 -12
  155. package/dist/components/simple/media/AttachmentDownloader.svelte +17 -3
  156. package/dist/components/simple/media/AttachmentDownloader.svelte.d.ts +32 -28
  157. package/dist/components/simple/media/Avatar.svelte +18 -12
  158. package/dist/components/simple/media/Avatar.svelte.d.ts +31 -20
  159. package/dist/components/simple/media/Carousel.svelte +29 -11
  160. package/dist/components/simple/media/Carousel.svelte.d.ts +28 -24
  161. package/dist/components/simple/media/DescriptiveAvatar.svelte +12 -4
  162. package/dist/components/simple/media/DescriptiveAvatar.svelte.d.ts +44 -28
  163. package/dist/components/simple/media/FlagIcon.svelte +8 -5
  164. package/dist/components/simple/media/FlagIcon.svelte.d.ts +19 -15
  165. package/dist/components/simple/media/Gallery.svelte +49 -29
  166. package/dist/components/simple/media/Gallery.svelte.d.ts +27 -23
  167. package/dist/components/simple/media/Icon.svelte +9 -4
  168. package/dist/components/simple/media/Icon.svelte.d.ts +24 -20
  169. package/dist/components/simple/media/Image.svelte +42 -20
  170. package/dist/components/simple/media/Image.svelte.d.ts +44 -33
  171. package/dist/components/simple/media/ImageGrid.svelte +37 -12
  172. package/dist/components/simple/media/ImageGrid.svelte.d.ts +32 -28
  173. package/dist/components/simple/navigation/Breadcrumb.svelte +28 -10
  174. package/dist/components/simple/navigation/Breadcrumb.svelte.d.ts +26 -22
  175. package/dist/components/simple/navigation/Chip.svelte +44 -23
  176. package/dist/components/simple/navigation/Chip.svelte.d.ts +42 -31
  177. package/dist/components/simple/navigation/Drawer.svelte +107 -65
  178. package/dist/components/simple/navigation/Drawer.svelte.d.ts +50 -37
  179. package/dist/components/simple/navigation/HeaderMenu.svelte +40 -23
  180. package/dist/components/simple/navigation/HeaderMenu.svelte.d.ts +39 -35
  181. package/dist/components/simple/navigation/Navigator.svelte +30 -8
  182. package/dist/components/simple/navigation/Navigator.svelte.d.ts +28 -24
  183. package/dist/components/simple/navigation/TabSwitcher.svelte +83 -47
  184. package/dist/components/simple/navigation/TabSwitcher.svelte.d.ts +38 -34
  185. package/dist/components/simple/notifiers/AlertBanner.svelte +43 -15
  186. package/dist/components/simple/notifiers/AlertBanner.svelte.d.ts +41 -37
  187. package/dist/components/simple/progress/ProgressBar.svelte +20 -13
  188. package/dist/components/simple/progress/ProgressBar.svelte.d.ts +21 -17
  189. package/dist/components/simple/timeline/SimpleTimeLine.svelte +19 -5
  190. package/dist/components/simple/timeline/SimpleTimeLine.svelte.d.ts +39 -35
  191. package/dist/components/simple/typography/Code.svelte +27 -12
  192. package/dist/components/simple/typography/Code.svelte.d.ts +28 -24
  193. package/dist/stores/debounce.d.ts +0 -1
  194. package/dist/stores/layouts/unstableSidebarOpened.d.ts +0 -1
  195. package/dist/stores/mediaQuery.d.ts +0 -1
  196. package/dist/stores/theme.d.ts +0 -1
  197. package/dist/utils/filters/builder.d.ts +2 -0
  198. package/dist/utils/filters/builder.js +20 -0
  199. package/dist/utils/filters/modifiers/where.d.ts +10 -3
  200. package/package.json +1 -1
@@ -1,798 +1,1193 @@
1
- <script>import {
2
- Checkbox,
3
- Chip,
4
- Converter,
5
- CountriesAutocomplete,
6
- DatePickerTextField,
7
- Drawer,
8
- FilterBuilder,
9
- FlagIcon,
10
- Icon,
11
- MediaQuery,
12
- Menu,
13
- ToolTip
14
- } from "../../..";
15
- import { DateTime } from "luxon";
16
- import { createEventDispatcher, onMount, tick } from "svelte";
17
- import { quintOut } from "svelte/easing";
18
- import { crossfade, fade } from "svelte/transition";
19
- import Filters from "../search/Filters.svelte";
20
- import ConfirmOrCancelButtons from "../forms/ConfirmOrCancelButtons.svelte";
21
- import { flip } from "svelte/animate";
22
- import InfiniteScroll from "../../simple/common/InfiniteScroll.svelte";
23
- import Divider from "../../simple/common/Divider.svelte";
24
- import VerticalDraggableList from "../../simple/common/VerticalDraggableList.svelte";
25
- import Button from "../../simple/buttons/Button.svelte";
26
- import SimpleTextField from "../../simple/forms/SimpleTextField.svelte";
27
- import Autocomplete from "../../simple/forms/Autocomplete.svelte";
28
- import LabelAndSelect from "../forms/LabelAndSelect.svelte";
29
- import LabelAndTextField from "../forms/LabelAndTextField.svelte";
30
- import DynamicFilters from "../search/DynamicFilters.svelte";
31
- import QuickActions, {} from "../common/QuickActions.svelte";
32
- import "./DynamicTable.css";
33
- import Switch from "../../simple/forms/Switch.svelte";
34
- import CircularLoader from "../../simple/loaders/CircularLoader.svelte";
35
- onMount(() => {
36
- updateHeaderHeight();
37
- window.addEventListener("resize", updateHeaderHeight);
38
- tableContainer.addEventListener("scroll", setReachedBottomOrTop);
39
- hideScrollbar = tableContainer.scrollHeight > tableContainer.clientHeight;
40
- for (const head of [...headers, { value: "non-resizable", minWidth: DEFAULT_MIN_WIDTH_PX + "px", maxWidth: DEFAULT_MAX_WIDTH_PX + "px" }, { value: "customize-headers", minWidth: DEFAULT_MIN_WIDTH_PX + "px", maxWidth: DEFAULT_MAX_WIDTH_PX + "px" }]) {
41
- let th = headersHTML[head.value];
42
- if (!!th) {
43
- resizeHeader(th, head);
44
- }
45
- }
46
- tableHTML.classList.add("dynamic-resizable");
47
- resizeObserver = new ResizeObserver(() => {
48
- updateRemainingWidth();
1
+ <script lang="ts">
2
+ import {
3
+ Checkbox,
4
+ Chip,
5
+ Converter,
6
+ CountriesAutocomplete,
7
+ DatePickerTextField,
8
+ Drawer,
9
+ FilterBuilder,
10
+ FlagIcon,
11
+ Icon,
12
+ MediaQuery,
13
+ Menu,
14
+ ToolTip,
15
+ type PaginatedTable
16
+ } from "../../..";
17
+ import { DateTime } from "luxon";
18
+ import { createEventDispatcher, onMount, tick, type ComponentProps } from "svelte";
19
+ import { quintOut } from "svelte/easing";
20
+ import { crossfade, fade } from "svelte/transition";
21
+ import Filters from "../search/Filters.svelte";
22
+ import ConfirmOrCancelButtons from "../forms/ConfirmOrCancelButtons.svelte";
23
+ import { flip } from "svelte/animate";
24
+ import InfiniteScroll from "../../simple/common/InfiniteScroll.svelte";
25
+ import Divider from "../../simple/common/Divider.svelte";
26
+ import VerticalDraggableList from "../../simple/common/VerticalDraggableList.svelte";
27
+ import Button from "../../simple/buttons/Button.svelte";
28
+ import SimpleTextField from "../../simple/forms/SimpleTextField.svelte";
29
+ import Autocomplete from "../../simple/forms/Autocomplete.svelte";
30
+ import LabelAndSelect from "../forms/LabelAndSelect.svelte";
31
+ import LabelAndTextField from "../forms/LabelAndTextField.svelte";
32
+ import DynamicFilters from "../search/DynamicFilters.svelte";
33
+ import type { DateMode, Filter, NumberMode, SelectMode, StringMode } from "../../../utils/filters/filters";
34
+ import QuickActions, { type Action } from "../common/QuickActions.svelte";
35
+ import './DynamicTable.css'
36
+ import type { QuickFilter } from "../../../utils/filters/quickFilters";
37
+ import Switch from "../../simple/forms/Switch.svelte";
38
+ import CircularLoader from "../../simple/loaders/CircularLoader.svelte";
39
+
40
+ onMount(() => {
49
41
  updateHeaderHeight();
42
+ window.addEventListener('resize', updateHeaderHeight);
43
+ tableContainer.addEventListener("scroll", setReachedBottomOrTop);
44
+
45
+ hideScrollbar = tableContainer.scrollHeight > tableContainer.clientHeight
46
+
47
+ for(const head of [...headers, { value: 'non-resizable', minWidth: DEFAULT_MIN_WIDTH_PX + 'px', maxWidth: DEFAULT_MAX_WIDTH_PX + 'px' }, { value: 'customize-headers', minWidth: DEFAULT_MIN_WIDTH_PX + 'px', maxWidth: DEFAULT_MAX_WIDTH_PX + 'px' }]) {
48
+ let th = headersHTML[head.value]
49
+ if(!!th) {
50
+ resizeHeader(th, head)
51
+ }
52
+ }
53
+
54
+ tableHTML.classList.add('dynamic-resizable')
55
+
56
+ resizeObserver = new ResizeObserver(() => {
57
+ updateRemainingWidth();
58
+ updateHeaderHeight();
59
+ });
60
+ resizeObserver.observe(tableContainer);
61
+
62
+ return () => {
63
+ window.removeEventListener('resize', updateHeaderHeight);
64
+ tableContainer.removeEventListener("scroll", setReachedBottomOrTop);
65
+ resizeObserver?.disconnect();
66
+ }
50
67
  });
51
- resizeObserver.observe(tableContainer);
52
- return () => {
53
- window.removeEventListener("resize", updateHeaderHeight);
54
- tableContainer.removeEventListener("scroll", setReachedBottomOrTop);
55
- resizeObserver?.disconnect();
56
- };
57
- });
58
- function updateHeaderHeight() {
59
- if (mainHeader) {
60
- const headerHeight = mainHeader.getBoundingClientRect().height;
61
- document.documentElement.style.setProperty("--main-header-height", headerHeight + "px");
68
+
69
+ function updateHeaderHeight() {
70
+ if (mainHeader) {
71
+ const headerHeight = mainHeader.getBoundingClientRect().height;
72
+ document.documentElement.style.setProperty('--main-header-height', headerHeight + 'px');
73
+ }
62
74
  }
63
- }
64
- function setReachedBottomOrTop() {
65
- reachedBottom = tableContainer.scrollHeight - tableContainer.scrollTop === tableContainer.clientHeight;
66
- reachedTop = tableContainer.scrollTop === 0;
67
- hideScrollbar = tableContainer.scrollHeight > tableContainer.clientHeight;
68
- }
69
- $:
70
- if (reachedBottom && rows.length < totalRows) {
75
+
76
+ function setReachedBottomOrTop(){
77
+ reachedBottom = tableContainer.scrollHeight - tableContainer.scrollTop === tableContainer.clientHeight
78
+ reachedTop = tableContainer.scrollTop === 0
79
+ hideScrollbar = tableContainer.scrollHeight > tableContainer.clientHeight
80
+ }
81
+
82
+ $: if(reachedBottom && rows.length < totalRows) {
71
83
  setTimeout(() => {
72
- if (reachedBottom) {
73
- handleLoadForward();
84
+ if(reachedBottom) {
85
+ handleLoadForward()
74
86
  }
75
- }, 30);
87
+ }, 30)
76
88
  }
77
- $:
78
- if (reachedTop && currentSectionNumber > 0) {
89
+
90
+ $: if(reachedTop && currentSectionNumber > 0) {
79
91
  setTimeout(() => {
80
- if (reachedTop) {
81
- handleLoadBackward();
92
+ if(reachedTop) {
93
+ handleLoadBackward()
82
94
  }
83
- }, 30);
84
- }
85
- const [send, receive] = crossfade({
86
- duration: 500,
87
- fallback(node, params) {
88
- const style = getComputedStyle(node);
89
- const transform = style.transform === "none" ? "" : style.transform;
90
- return {
91
- duration: 500,
92
- easing: quintOut,
93
- css: (t) => `
95
+ }, 30)
96
+ }
97
+
98
+ const [send, receive] = crossfade({
99
+ duration: 500,
100
+ fallback(node, params) {
101
+ const style = getComputedStyle(node);
102
+ const transform = style.transform === "none" ? "" : style.transform;
103
+
104
+ return {
105
+ duration: 500,
106
+ easing: quintOut,
107
+ css: (t) => `
94
108
  transform: ${transform} scale(${t});
95
109
  opacity: ${t}
96
- `
110
+ `,
111
+ };
112
+ },
113
+ });
114
+
115
+ type Item = {
116
+ [key: string]: any;
117
+ disableEdit?: boolean,
118
+ rowDisableBackgroundColor?: string
119
+ };
120
+
121
+ type Row = {
122
+ item: Item;
123
+ subItems: Item[];
124
+ };
125
+
126
+ type MenuStringType = {
127
+ key: "string";
128
+ };
129
+
130
+ type MenuNumberType = {
131
+ key: "number";
132
+ params?: {
133
+ min?: number;
134
+ max?: number;
97
135
  };
98
- }
99
- });
100
- let clazz = {};
101
- export { clazz as class };
102
- const dispatch = createEventDispatcher();
103
- export let headers = [], headersToShowInTable = headers, subHeaders = [], customizeHeaders = false, rows = [], sortedBy = void 0, sortDirection = "asc", cellEdit = false, lang = "en", dateLocale = void 0, noItemsText = lang == "en" ? "No items to show" : "Nessun elemento da visualizzare", showSelect = false, showActions = true, selectMode = "single", selectedItems = [], unselectedItems = [], selectedAll = false, showExpand = false, loading = false, disabled = false, filters = [], searchBarColumns = void 0, searchBarVisible = false, searchBarPlaceholder = lang == "en" ? "Type to search..." : "Scrivi per cercare...", filtersVisible = false, quickFiltersVisible = false, editFilterMode = "one-edit", showActiveFilters = true, quickFilters = [], actionsForSelectedItems = [], quickActionsDisabled = false, totalRows = rows.length, searchText = void 0, renderedRowsNumber = 100, sectionRowsNumber = 20, sectionThreshold = 2, backwardThresholdPixel = 100, forwardThresholdPixel = 100, uniqueKey = "id", numberOfResultsVisible = false, endLineVisible = false, resizableColumns = false, resizedColumnSizeWithPadding = {}, dynamicFilters = true, useSelectedItemsOnly = false;
104
- let openCellEditor = false, cellEditorActivator, cellEditorContainer, menuElementCellEditor, menuElementQuickFilters, cellEditorInfoActive, saveEditDisabled = false, searchBarInput = void 0, openQuickFilter = false, quickFilterActivator, quickFilterActive, globalBuilder = new FilterBuilder(), calendarOpened = false, calendarOpened2 = false, selectedIndexes = [], cellEditorIndexRow, cellEditorIndexHeader, cellEditorSubItem, currentSectionNumber = 0, tableBody, tableContainer, tableHTML, headersHTML = {}, userScrolling = true, reachedBottom = false, reachedTop = false, resizing = false, remainingWidth = 0, hideScrollbar = false, sortModify, mainHeader, resizeObserver, ignoreSelectAll = rows.length == totalRows && useSelectedItemsOnly;
105
- const DEFAULT_MIN_WIDTH_PX = 100, DEFAULT_MAX_WIDTH_PX = 400;
106
- $:
107
- totalSections = (totalRows - renderedRowsNumber) / sectionRowsNumber;
108
- $:
109
- hasMoreToRender = totalSections > currentSectionNumber;
110
- $:
111
- totalCachedSections = (rows.length - renderedRowsNumber) / sectionRowsNumber;
112
- $:
113
- renderedRows = rows.slice(currentSectionNumber * sectionRowsNumber, currentSectionNumber * sectionRowsNumber + renderedRowsNumber);
114
- let openHeaderDrawer = false, headersToSelect = !!headers ? headers.filter((h) => {
115
- return !headersToShowInTable.find((hst) => hst.value == h.value);
116
- }).map((h) => {
117
- return {
118
- id: h.value,
119
- name: h.label
120
136
  };
121
- }) : [], headersToShow = headersToShowInTable.map((h) => {
122
- return {
123
- id: h.value,
124
- name: h.label
137
+
138
+ type MenuDateType = {
139
+ key: "date";
140
+ };
141
+
142
+ type MenuSelectType = {
143
+ key: "select";
144
+ params: {
145
+ options: {
146
+ icon?: string;
147
+ value: string | number | undefined;
148
+ id?: number | undefined;
149
+ text: string;
150
+ }[];
151
+ };
125
152
  };
126
- }), infoActivators = Array(headersToShowInTable.length);
127
- let totalBatchLength = 0, expandedRows = [];
128
- function saveHeadersToShow() {
129
- dispatch("saveHeadersToShow", {
130
- headersToShow
131
- });
132
- openHeaderDrawer = false;
133
- }
134
- function handleHeaderClick(header) {
135
- if (header.sortable && !loading && !resizing) {
136
- if (!!sortedBy && header.value == sortedBy) {
137
- if (sortDirection == "asc")
138
- sortDirection = "desc";
139
- else if (sortDirection == "desc") {
140
- sortedBy = void 0;
141
- sortModify = void 0;
142
- }
143
- } else {
144
- sortedBy = header.value;
145
- sortDirection = "asc";
146
- sortModify = header.sortModify;
153
+
154
+ type MenuBooleanType = {
155
+ key: "boolean";
156
+ };
157
+
158
+ type CellEditorInfoType =
159
+ | MenuStringType
160
+ | MenuNumberType
161
+ | MenuDateType
162
+ | MenuSelectType
163
+ | MenuBooleanType;
164
+
165
+ type CellEditorInfo = {
166
+ title: string;
167
+ description: string;
168
+ type: CellEditorInfoType;
169
+ column: string;
170
+ info?: string;
171
+ };
172
+
173
+ type Headers = NonNullable<ComponentProps<PaginatedTable>["headers"]>;
174
+ type Header = Headers[number] & {
175
+ cellEditorInfo?: CellEditorInfo;
176
+ info?: string;
177
+ maxWidth?: string
178
+ };
179
+ type HeaderType = Header["type"];
180
+
181
+ let clazz: {
182
+ container?: string;
183
+ header?: string;
184
+ row?: string;
185
+ cell?: string;
186
+ } = {};
187
+ export { clazz as class };
188
+
189
+ const dispatch = createEventDispatcher<{
190
+ sort: {
191
+ sortedBy: string | undefined;
192
+ sortDirection: string;
193
+ };
194
+ rowClick: {
195
+ item: Item;
196
+ };
197
+ cellClick: {
198
+ item: Item;
199
+ };
200
+ saveCellEdit: {
201
+ item: any;
202
+ };
203
+ saveHeadersToShow: {
204
+ headersToShow: {
205
+ id: string;
206
+ name: string;
207
+ }[];
208
+ };
209
+ filtersChange: {
210
+ builder: FilterBuilder;
211
+ };
212
+ fetchData: {};
213
+ removeFilter: {filter: Filter}
214
+ removeAllFilters: {}
215
+ removeCustomQuickFilter: {
216
+ quickFilter: QuickFilter
147
217
  }
148
- handleSearchChange(searchText);
149
- dispatch("sort", {
150
- sortedBy,
151
- sortDirection
218
+ applyCustomQuickFilter: {
219
+ quickFilter: QuickFilter
220
+ setQuickFilterValue: (quickFilter: QuickFilter, value?: any) => void
221
+ }
222
+ columnResize: {
223
+ id: string,
224
+ newWidthPx: number
225
+ }
226
+ }>();
227
+
228
+ export let headers: Header[] = [],
229
+ headersToShowInTable: Header[] = headers,
230
+ subHeaders: Header[] = [],
231
+ customizeHeaders: boolean = false,
232
+ rows: Row[] = [],
233
+ sortedBy: string | undefined = undefined,
234
+ sortDirection: "asc" | "desc" = "asc",
235
+ cellEdit: boolean = false,
236
+ lang: "it" | "en" = "en",
237
+ dateLocale: "it" | "en" | undefined = undefined,
238
+ noItemsText: string = lang == 'en' ? "No items to show" : 'Nessun elemento da visualizzare',
239
+ showSelect: boolean = false,
240
+ showActions: boolean = true,
241
+ selectMode: "single" | "multiple" = "single",
242
+ selectedItems: Item[] = [],
243
+ unselectedItems: Item[] = [],
244
+ selectedAll: boolean = false,
245
+ showExpand: boolean = false,
246
+ loading: boolean = false,
247
+ disabled: boolean = false,
248
+ filters: ComponentProps<Filters>["filters"] = [],
249
+ searchBarColumns: string[] | undefined = undefined,
250
+ searchBarVisible: boolean = false,
251
+ searchBarPlaceholder: string = lang == 'en' ? "Type to search..." : 'Scrivi per cercare...',
252
+ filtersVisible: boolean = false,
253
+ quickFiltersVisible: boolean = false,
254
+ editFilterMode: "one-edit" | "multi-edit" = "one-edit",
255
+ showActiveFilters: boolean = true,
256
+ quickFilters: QuickFilter[] = [],
257
+ actionsForSelectedItems: Action[] = [],
258
+ quickActionsDisabled: boolean = false,
259
+ totalRows: number = rows.length,
260
+ searchText: string | undefined = undefined,
261
+ renderedRowsNumber = 100,
262
+ sectionRowsNumber = 20,
263
+ sectionThreshold = 2,
264
+ backwardThresholdPixel = 100,
265
+ forwardThresholdPixel = 100,
266
+ uniqueKey: keyof Item = 'id',
267
+ numberOfResultsVisible: boolean = false,
268
+ endLineVisible: boolean = false,
269
+ resizableColumns: boolean= false,
270
+ resizedColumnSizeWithPadding: { [value: string]: number } = {},
271
+ dynamicFilters: boolean = true,
272
+ useSelectedItemsOnly = false
273
+
274
+ let openCellEditor: boolean = false,
275
+ cellEditorActivator: HTMLElement | undefined,
276
+ cellEditorContainer: HTMLElement | undefined,
277
+ menuElementCellEditor: HTMLElement,
278
+ menuElementQuickFilters: HTMLElement,
279
+ cellEditorInfoActive: CellEditorInfo & {
280
+ value?: any;
281
+ item?: Item;
282
+ },
283
+ saveEditDisabled: boolean = false,
284
+ searchBarInput: HTMLElement | undefined = undefined,
285
+ openQuickFilter: boolean = false,
286
+ quickFilterActivator: HTMLElement | undefined,
287
+ quickFilterActive: QuickFilter,
288
+ globalBuilder: FilterBuilder = new FilterBuilder(),
289
+ calendarOpened: boolean = false,
290
+ calendarOpened2: boolean = false,
291
+ selectedIndexes: number[] = [],
292
+ cellEditorIndexRow: number | undefined,
293
+ cellEditorIndexHeader: number | undefined,
294
+ cellEditorSubItem: boolean | undefined,
295
+ currentSectionNumber = 0,
296
+ tableBody: HTMLElement,
297
+ tableContainer: HTMLElement,
298
+ tableHTML: HTMLElement,
299
+ headersHTML: { [value: string]: HTMLElement } = {},
300
+ userScrolling = true,
301
+ reachedBottom = false,
302
+ reachedTop = false,
303
+ resizing = false,
304
+ remainingWidth = 0,
305
+ hideScrollbar = false,
306
+ sortModify: Header['sortModify'],
307
+ mainHeader: Element,
308
+ resizeObserver: ResizeObserver,
309
+ ignoreSelectAll = rows.length == totalRows && useSelectedItemsOnly
310
+
311
+ const DEFAULT_MIN_WIDTH_PX = 100,
312
+ DEFAULT_MAX_WIDTH_PX = 400
313
+
314
+ $: totalSections = (totalRows - renderedRowsNumber) / sectionRowsNumber
315
+ $: hasMoreToRender = totalSections > currentSectionNumber
316
+ $: totalCachedSections = (rows.length - renderedRowsNumber) / sectionRowsNumber
317
+ $: renderedRows = rows.slice(currentSectionNumber * sectionRowsNumber, currentSectionNumber * sectionRowsNumber + renderedRowsNumber)
318
+
319
+ let openHeaderDrawer: boolean = false,
320
+ headersToSelect: {
321
+ id: string;
322
+ name: string;
323
+ }[] = !!headers
324
+ ? headers
325
+ .filter((h) => {
326
+ return !headersToShowInTable.find((hst) => hst.value == h.value);
327
+ })
328
+ .map((h) => {
329
+ return {
330
+ id: h.value,
331
+ name: h.label,
332
+ };
333
+ })
334
+ : [],
335
+ headersToShow: {
336
+ id: string;
337
+ name: string;
338
+ }[] = headersToShowInTable.map((h) => {
339
+ return {
340
+ id: h.value,
341
+ name: h.label,
342
+ };
343
+ }),
344
+ infoActivators = Array(headersToShowInTable.length)
345
+
346
+ let totalBatchLength: number = 0,
347
+ expandedRows: Row[] = [];
348
+
349
+ function saveHeadersToShow() {
350
+ dispatch("saveHeadersToShow", {
351
+ headersToShow: headersToShow,
152
352
  });
353
+ openHeaderDrawer = false;
153
354
  }
154
- }
155
- function handleRowClick(item) {
156
- if (disabled || loading)
157
- return;
158
- dispatch("rowClick", {
159
- item
160
- });
161
- }
162
- function handleCellClick(mouseEvent, item, cellEditorInfo, value, indexRow, indexHeader, subItem) {
163
- if (disabled || loading)
164
- return;
165
- if (cellEdit && cellEditorInfo && !item.disableEdit) {
166
- if (!cellEditorActivator) {
167
- let target = mouseEvent.target;
168
- cellEditorActivator = target;
169
- cellEditorIndexRow = indexRow;
170
- cellEditorIndexHeader = indexHeader;
171
- cellEditorSubItem = subItem;
172
- cellEditorInfoActive = {
173
- ...cellEditorInfo,
174
- value,
175
- item
176
- };
177
- openCellEditor = !openCellEditor;
178
- const element = target.getBoundingClientRect();
179
- const windowHeight = window.innerHeight;
180
- const windowWidth = window.innerWidth;
181
- if (openCellEditor) {
182
- setTimeout(() => {
183
- if (windowHeight - element.bottom < 300) {
184
- cellEditorContainer.style.bottom = `${windowHeight - element.top}px`;
185
- } else {
186
- cellEditorContainer.style.top = `${element.bottom}px`;
187
- }
188
- if (windowWidth - element.right < 400) {
189
- cellEditorContainer.style.right = `${windowWidth - element.left - cellEditorActivator.clientWidth}px`;
190
- }
191
- }, 0);
355
+
356
+ function handleHeaderClick(header: Header) {
357
+ if (header.sortable && !loading && !resizing) {
358
+ if (!!sortedBy && header.value == sortedBy) {
359
+ if (sortDirection == "asc") sortDirection = "desc";
360
+ else if (sortDirection == "desc") {
361
+ sortedBy = undefined;
362
+ sortModify = undefined
363
+ }
364
+ } else {
365
+ sortedBy = header.value;
366
+ sortDirection = "asc";
367
+ sortModify = header.sortModify
192
368
  }
369
+
370
+ handleSearchChange(searchText);
371
+
372
+ dispatch("sort", {
373
+ sortedBy,
374
+ sortDirection,
375
+ });
193
376
  }
194
377
  }
195
- dispatch("cellClick", {
196
- item
197
- });
198
- }
199
- function handleSaveClick() {
200
- cellEditorIndexHeader = void 0;
201
- cellEditorIndexRow = void 0;
202
- cellEditorSubItem = void 0;
203
- dispatch("saveCellEdit", {
204
- item: cellEditorInfoActive
205
- });
206
- cellEditorActivator = void 0;
207
- openCellEditor = false;
208
- }
209
- function handleCancelClick() {
210
- cellEditorIndexHeader = void 0;
211
- cellEditorIndexRow = void 0;
212
- cellEditorSubItem = void 0;
213
- cellEditorActivator = void 0;
214
- openCellEditor = false;
215
- quickFilterActivator = void 0;
216
- openQuickFilter = false;
217
- }
218
- function handleSelect(item, shiftKeyPressed) {
219
- let index = -1;
220
- if (selectedAll && !ignoreSelectAll) {
221
- index = unselectedItems.findIndex((i) => i[uniqueKey] == item[uniqueKey]);
222
- } else {
223
- index = selectedItems.findIndex((i) => i[uniqueKey] == item[uniqueKey]);
224
- }
225
- if (index == -1) {
226
- if (selectMode == "single") {
227
- selectedItems = [item];
228
- selectedIndexes = [rows.findIndex((r) => r.item[uniqueKey] == item[uniqueKey])];
229
- } else if (selectMode == "multiple") {
230
- if (shiftKeyPressed && selectedIndexes.length > 0) {
231
- let lastSelectedIndex = selectedIndexes[selectedIndexes.length - 1], selectedIndex = rows.findIndex((r) => r.item[uniqueKey] == item[uniqueKey]);
232
- if (selectedIndex != -1) {
233
- if (selectedIndex < lastSelectedIndex) {
234
- let x = lastSelectedIndex;
235
- lastSelectedIndex = selectedIndex - 1;
236
- selectedIndex = x;
237
- }
238
- for (let i = lastSelectedIndex + 1; i <= selectedIndex; i++) {
239
- if (selectedAll && !ignoreSelectAll) {
240
- if (!unselectedItems.find((unselectedItem) => unselectedItem[uniqueKey] == rows[i].item[uniqueKey])) {
241
- unselectedItems = [...unselectedItems, rows[i].item];
242
- }
378
+
379
+ function handleRowClick(item: { [key: string]: any }) {
380
+ if (disabled || loading) return;
381
+ dispatch("rowClick", {
382
+ item,
383
+ });
384
+ }
385
+
386
+ function handleCellClick(
387
+ mouseEvent: MouseEvent & {
388
+ currentTarget: EventTarget & HTMLTableCellElement;
389
+ },
390
+ item: Item,
391
+ cellEditorInfo?: CellEditorInfo,
392
+ value?: any,
393
+ indexRow?: number,
394
+ indexHeader?: number,
395
+ subItem?: boolean
396
+ ) {
397
+ if (disabled || loading) return;
398
+ if (cellEdit && cellEditorInfo && !item.disableEdit) {
399
+ if (!cellEditorActivator) {
400
+ let target = mouseEvent.target as unknown as HTMLElement;
401
+ cellEditorActivator = target;
402
+
403
+ cellEditorIndexRow = indexRow
404
+ cellEditorIndexHeader = indexHeader
405
+ cellEditorSubItem = subItem
406
+
407
+ cellEditorInfoActive = {
408
+ ...cellEditorInfo,
409
+ value: value,
410
+ item: item,
411
+ };
412
+
413
+ openCellEditor = !openCellEditor;
414
+
415
+ const element = target.getBoundingClientRect();
416
+ const windowHeight = window.innerHeight;
417
+ const windowWidth = window.innerWidth;
418
+
419
+ if (openCellEditor) {
420
+ setTimeout(() => {
421
+ if (windowHeight - element.bottom < 300) {
422
+ cellEditorContainer!.style.bottom = `${
423
+ windowHeight - element.top
424
+ }px`;
243
425
  } else {
244
- if (!selectedItems.find((selectedItem) => selectedItem[uniqueKey] == rows[i].item[uniqueKey])) {
245
- selectedItems = [...selectedItems, rows[i].item];
426
+ cellEditorContainer!.style.top = `${element.bottom}px`;
427
+ }
428
+
429
+ if (windowWidth - element.right < 400) {
430
+ cellEditorContainer!.style.right = `${
431
+ windowWidth - element.left - cellEditorActivator!.clientWidth
432
+ }px`;
433
+ }
434
+ }, 0);
435
+ }
436
+ }
437
+ }
438
+
439
+ dispatch("cellClick", {
440
+ item,
441
+ });
442
+ }
443
+
444
+ function handleSaveClick() {
445
+ cellEditorIndexHeader = undefined
446
+ cellEditorIndexRow = undefined
447
+ cellEditorSubItem = undefined
448
+
449
+ dispatch("saveCellEdit", {
450
+ item: cellEditorInfoActive,
451
+ });
452
+
453
+ cellEditorActivator = undefined;
454
+ openCellEditor = false;
455
+ }
456
+
457
+ function handleCancelClick() {
458
+ cellEditorIndexHeader = undefined
459
+ cellEditorIndexRow = undefined
460
+ cellEditorSubItem = undefined
461
+
462
+ cellEditorActivator = undefined;
463
+ openCellEditor = false;
464
+
465
+ quickFilterActivator = undefined;
466
+ openQuickFilter = false;
467
+ }
468
+
469
+ function handleSelect(item: Item, shiftKeyPressed: boolean) {
470
+ let index = -1
471
+ if(selectedAll && !ignoreSelectAll) {
472
+ index = unselectedItems.findIndex((i) => i[uniqueKey] == item[uniqueKey]);
473
+ } else {
474
+ index = selectedItems.findIndex((i) => i[uniqueKey] == item[uniqueKey]);
475
+ }
476
+ // if item is not in the selected/unselected items array, add it
477
+ if (index == -1) {
478
+ if (selectMode == "single") {
479
+ selectedItems = [item];
480
+ selectedIndexes = [rows.findIndex(r => r.item[uniqueKey] == item[uniqueKey])]
481
+ } else if (selectMode == "multiple") {
482
+ if(shiftKeyPressed && selectedIndexes.length > 0) {
483
+ let lastSelectedIndex = selectedIndexes[selectedIndexes.length - 1],
484
+ selectedIndex = rows.findIndex(r => r.item[uniqueKey] == item[uniqueKey])
485
+ if(selectedIndex != -1) {
486
+ if(selectedIndex < lastSelectedIndex) {
487
+ let x = lastSelectedIndex
488
+ lastSelectedIndex = selectedIndex - 1
489
+ selectedIndex = x
490
+ }
491
+ for (let i = lastSelectedIndex + 1; i <= selectedIndex; i++) {
492
+ if(selectedAll && !ignoreSelectAll) {
493
+ if(!unselectedItems.find((unselectedItem) => unselectedItem[uniqueKey] == rows[i].item[uniqueKey])) {
494
+ unselectedItems = [...unselectedItems, rows[i].item]
495
+ }
496
+ } else {
497
+ if(!selectedItems.find((selectedItem) => selectedItem[uniqueKey] == rows[i].item[uniqueKey])) {
498
+ selectedItems = [...selectedItems, rows[i].item]
499
+ }
246
500
  }
247
501
  }
248
502
  }
249
503
  }
250
- } else {
251
- if (selectedAll && !ignoreSelectAll) {
252
- unselectedItems = [...unselectedItems, item];
253
- } else {
254
- selectedItems = [...selectedItems, item];
504
+ else {
505
+ if(selectedAll && !ignoreSelectAll) {
506
+ unselectedItems = [...unselectedItems, item];
507
+ } else {
508
+ selectedItems = [...selectedItems, item];
509
+ }
510
+ selectedIndexes.push(rows.findIndex(r => r.item[uniqueKey] == item[uniqueKey]))
255
511
  }
256
- selectedIndexes.push(rows.findIndex((r) => r.item[uniqueKey] == item[uniqueKey]));
257
512
  }
258
- }
259
- } else {
260
- if (selectedAll && !ignoreSelectAll) {
261
- unselectedItems = unselectedItems.filter((i) => i[uniqueKey] != item[uniqueKey]);
262
513
  } else {
263
- selectedItems = selectedItems.filter((i) => i[uniqueKey] != item[uniqueKey]);
514
+ if(selectedAll && !ignoreSelectAll) {
515
+ unselectedItems = unselectedItems.filter((i) => i[uniqueKey] != item[uniqueKey]);
516
+ } else {
517
+ selectedItems = selectedItems.filter((i) => i[uniqueKey] != item[uniqueKey]);
518
+ }
519
+ selectedIndexes = selectedIndexes.filter(r => r != rows.findIndex(r => r.item[uniqueKey] == item[uniqueKey]))
264
520
  }
265
- selectedIndexes = selectedIndexes.filter((r) => r != rows.findIndex((r2) => r2.item[uniqueKey] == item[uniqueKey]));
266
521
  }
267
- }
268
- function handleSelectAll() {
269
- if (selectMode == "multiple") {
270
- if (!selectedAll && ignoreSelectAll) {
271
- selectedItems = rows.map((r) => r.item);
272
- } else {
273
- selectedItems = [];
522
+
523
+ function handleSelectAll() {
524
+ if (selectMode == "multiple") {
525
+ if(!selectedAll && ignoreSelectAll) {
526
+ selectedItems = rows.map(r => r.item)
527
+ }
528
+ else {
529
+ selectedItems = []
530
+ }
531
+ selectedIndexes = []
532
+ unselectedItems = []
533
+ selectedAll = !selectedAll
274
534
  }
275
- selectedIndexes = [];
276
- unselectedItems = [];
277
- selectedAll = !selectedAll;
278
- }
279
- }
280
- function expandRow(row) {
281
- let index = expandedRows.findIndex((r) => r.item[uniqueKey] == row.item[uniqueKey]);
282
- if (index == -1) {
283
- expandedRows = [...expandedRows, row];
284
- } else {
285
- expandedRows = expandedRows.filter((r) => r.item[uniqueKey] != row.item[uniqueKey]);
286
535
  }
287
- }
288
- function formatDate(dateTime, dateFormat) {
289
- return dateTime.setLocale(dateFormat.locale).toFormat(dateFormat.format);
290
- }
291
- $: {
292
- if (!showExpand) {
293
- totalBatchLength = rows.length;
294
- } else {
295
- totalBatchLength = rows.reduce(
296
- (acc, row) => acc + row.subItems.length,
297
- rows.length
298
- );
299
- }
300
- if (!!cellEditorInfoActive && cellEditorInfoActive.type.key == "number" && (cellEditorInfoActive.type.params?.min != void 0 && cellEditorInfoActive.value < cellEditorInfoActive.type.params.min || cellEditorInfoActive.type.params?.max != void 0 && cellEditorInfoActive.value > cellEditorInfoActive.type.params.max)) {
301
- saveEditDisabled = true;
302
- } else {
303
- saveEditDisabled = false;
536
+
537
+ function expandRow(row: Row) {
538
+ let index = expandedRows.findIndex((r) => r.item[uniqueKey] == row.item[uniqueKey]);
539
+ if (index == -1) {
540
+ expandedRows = [...expandedRows, row];
541
+ } else {
542
+ expandedRows = expandedRows.filter((r) => r.item[uniqueKey] != row.item[uniqueKey]);
543
+ }
304
544
  }
305
- }
306
- function searchTextBuilder(searchText2) {
307
- let builder;
308
- let converter = new Converter();
309
- builder = converter.createBuilder({
310
- filters: filters || []
311
- });
312
- if (!!searchText2 && !!searchBarColumns && searchBarColumns.length > 0) {
313
- builder.where((b) => {
314
- b.where(searchBarColumns[0], "ilike", "%" + searchText2 + "%");
315
- for (let i = 1; i < searchBarColumns.length; i += 1) {
316
- b.orWhere(searchBarColumns[i], "ilike", "%" + searchText2 + "%");
317
- }
318
- });
545
+
546
+ function formatDate(
547
+ dateTime: DateTime,
548
+ dateFormat: Extract<HeaderType, { key: "date" }>["params"]
549
+ ): string {
550
+ return dateTime.setLocale(dateFormat.locale).toFormat(dateFormat.format);
319
551
  }
320
- return builder;
321
- }
322
- let syncTimer;
323
- function handleSearchChange(searchText2) {
324
- clearTimeout(syncTimer);
325
- syncTimer = setTimeout(async () => {
326
- globalBuilder = searchTextBuilder(searchText2);
327
- for (let i = 0; i < quickFilters.length; i++) {
328
- globalBuilder = quickFilterBuilder(globalBuilder, quickFilters[i]);
552
+
553
+ $: {
554
+ if (!showExpand) {
555
+ totalBatchLength = rows.length;
556
+ } else {
557
+ totalBatchLength = rows.reduce(
558
+ (acc, row) => acc + row.subItems.length,
559
+ rows.length
560
+ );
329
561
  }
330
- handleFiltersChange();
331
- }, 800);
332
- }
333
- $:
334
- if (searchText != void 0)
335
- handleSearchChange(searchText);
336
- function handleFiltersChange() {
337
- if (!!tableContainer) {
338
- userScrolling = false;
339
- currentSectionNumber = 0;
340
- tableContainer.scrollTop = 0;
341
- setTimeout(() => userScrolling = true, 20);
342
- }
343
- if (!!sortedBy) {
344
- if (sortModify) {
345
- globalBuilder = sortModify({ builder: globalBuilder, sortDirection });
562
+
563
+ if (
564
+ !!cellEditorInfoActive &&
565
+ cellEditorInfoActive.type.key == "number" &&
566
+ ((cellEditorInfoActive.type.params?.min != undefined &&
567
+ cellEditorInfoActive.value < cellEditorInfoActive.type.params.min) ||
568
+ (cellEditorInfoActive.type.params?.max != undefined &&
569
+ cellEditorInfoActive.value > cellEditorInfoActive.type.params.max))
570
+ ) {
571
+ saveEditDisabled = true;
346
572
  } else {
347
- globalBuilder.orderBy(sortedBy, sortDirection || "asc");
573
+ saveEditDisabled = false;
348
574
  }
349
575
  }
350
- dispatch("filtersChange", {
351
- builder: globalBuilder
352
- });
353
- }
354
- function handleClearQuickFilter(quickFilter, dispatchFiltersChange = true) {
355
- if (quickFilter.type.key == "custom") {
356
- quickFilter.type.value = void 0;
357
- quickFilter.type.missingValue = void 0;
358
- if (dispatchFiltersChange) {
359
- dispatch("removeCustomQuickFilter", { quickFilter });
360
- }
361
- } else if (quickFilter.type.key == "string") {
362
- quickFilter.type.value = void 0;
363
- quickFilter.type.missingValue = void 0;
364
- } else if (quickFilter.type.key == "number") {
365
- quickFilter.type.value = void 0;
366
- quickFilter.type.missingValue = void 0;
367
- } else if (quickFilter.type.key == "boolean") {
368
- quickFilter.type.value = void 0;
369
- } else if (quickFilter.type.key == "country") {
370
- quickFilter.type.selected = void 0;
371
- quickFilter.type.missingValue = void 0;
372
- } else if (quickFilter.type.key == "date") {
373
- quickFilter.type.from = void 0;
374
- quickFilter.type.to = void 0;
375
- } else if (quickFilter.type.key == "multi-select") {
376
- quickFilter.type.values = [];
377
- quickFilter.type.missingValue = false;
378
- quickFilter.type.missingValue = void 0;
379
- }
380
- if (dispatchFiltersChange) {
381
- quickFilter.active = false;
382
- }
383
- globalBuilder = searchTextBuilder(searchText);
384
- for (let i = 0; i < quickFilters.length; i++) {
385
- if (quickFilters[i].active) {
386
- globalBuilder = quickFilterBuilder(
387
- globalBuilder,
388
- quickFilters[i],
389
- false
390
- );
576
+
577
+ function searchTextBuilder(searchText?: string) {
578
+ let builder: FilterBuilder;
579
+
580
+ let converter = new Converter();
581
+ builder = converter.createBuilder({
582
+ filters: filters || [],
583
+ });
584
+
585
+ if (!!searchText && !!searchBarColumns && searchBarColumns.length > 0) {
586
+ builder.where((b) => {
587
+ b.where(searchBarColumns![0], "ilike", "%" + searchText + "%");
588
+ for (let i = 1; i < searchBarColumns!.length; i += 1) {
589
+ b.orWhere(searchBarColumns![i], "ilike", "%" + searchText + "%");
590
+ }
591
+ });
391
592
  }
593
+
594
+ return builder;
392
595
  }
393
- if (dispatchFiltersChange) {
394
- quickFilters = quickFilters;
395
- handleFiltersChange();
396
- }
397
- return globalBuilder;
398
- }
399
- function handleSearchBoxKeydown(e) {
400
- if (e.key == "Enter") {
401
- handleFiltersChange();
596
+
597
+ let syncTimer: NodeJS.Timeout;
598
+ function handleSearchChange(searchText: string | undefined) {
599
+ clearTimeout(syncTimer);
600
+ syncTimer = setTimeout(async () => {
601
+ globalBuilder = searchTextBuilder(searchText);
602
+ for (let i = 0; i < quickFilters.length; i++) {
603
+ globalBuilder = quickFilterBuilder(globalBuilder, quickFilters[i]);
604
+ }
605
+
606
+ handleFiltersChange();
607
+ }, 800);
402
608
  }
403
- }
404
- function handleQuickFilterClick(mouseEvent, quickFilter) {
405
- handleCancelClick();
406
- setTimeout(() => {
407
- if (quickFilter) {
408
- if (!quickFilterActivator) {
409
- let target = mouseEvent.target;
410
- quickFilterActivator = target;
411
- quickFilterActive = quickFilter;
412
- openQuickFilter = !openQuickFilter;
609
+
610
+ $: if (searchText != undefined) handleSearchChange(searchText);
611
+
612
+ function handleFiltersChange() {
613
+ if(!!tableContainer) {
614
+ userScrolling = false
615
+ currentSectionNumber = 0
616
+ tableContainer.scrollTop = 0
617
+ setTimeout(() => userScrolling = true, 20)
618
+ }
619
+
620
+ if (!!sortedBy) {
621
+ if(sortModify){
622
+ globalBuilder = sortModify({ builder: globalBuilder, sortDirection })
623
+ }
624
+ else {
625
+ globalBuilder.orderBy(sortedBy, sortDirection || "asc");
413
626
  }
414
627
  }
415
- }, 300);
416
- }
417
- function setQuickFilterMissingValue(quickFilter) {
418
- if (quickFilter.type.key == "custom") {
419
- quickFilter.type.missingValue = true;
420
- quickFilter.type.value = void 0;
421
- } else if (quickFilter.type.key == "multi-select") {
422
- quickFilter.type.missingValue = true;
423
- quickFilter.type.values = [];
424
- } else if (quickFilter.type.key == "string") {
425
- quickFilter.type.missingValue = true;
426
- quickFilter.type.value = void 0;
427
- } else if (quickFilter.type.key == "country") {
428
- quickFilter.type.missingValue = true;
429
- quickFilter.type.selected = void 0;
430
- } else if (quickFilter.type.key == "number") {
431
- quickFilter.type.missingValue = true;
432
- quickFilter.type.value = void 0;
433
- }
434
- handleApplyClick(quickFilter);
435
- }
436
- function setQuickFilterValue(quickFilter, value) {
437
- if (quickFilter.type.key == "custom") {
438
- quickFilter.type.value = value;
439
- } else if (quickFilter.type.key == "boolean") {
440
- quickFilter.type.value = value;
441
- }
442
- handleApplyClick(quickFilter);
443
- }
444
- function handleApplyClick(quickFilter, dispatchCustomFilterClick = false) {
445
- if (quickFilter.type.key == "custom" && dispatchCustomFilterClick) {
446
- dispatch("applyCustomQuickFilter", { quickFilter, setQuickFilterValue });
447
- } else {
448
- quickFilter.active = true;
449
- quickFilters = quickFilters;
450
- globalBuilder = quickFilterBuilder(globalBuilder, quickFilter);
451
- handleFiltersChange();
452
- quickFilterActivator = void 0;
453
- openQuickFilter = false;
628
+
629
+ dispatch("filtersChange", {
630
+ builder: globalBuilder,
631
+ });
454
632
  }
455
- }
456
- function quickFilterBuilder(builder, quickFilter, clearPreaviousValue = true) {
457
- if (quickFilter.type.key == "custom") {
458
- let value = quickFilter.type.value, missingValue = quickFilter.type.missingValue;
459
- if (clearPreaviousValue) {
460
- builder = handleClearQuickFilter(quickFilter, false);
633
+
634
+ function handleClearQuickFilter(
635
+ quickFilter: QuickFilter,
636
+ dispatchFiltersChange: boolean = true
637
+ ) {
638
+ if (quickFilter.type.key == 'custom') {
639
+ quickFilter.type.value = undefined;
640
+ quickFilter.type.missingValue = undefined;
641
+ if(dispatchFiltersChange) {
642
+ dispatch('removeCustomQuickFilter', { quickFilter })
643
+ }
461
644
  }
462
- quickFilter.type.value = value;
463
- quickFilter.type.missingValue = missingValue;
464
- builder = quickFilter.type.modify({
465
- builder,
466
- value: { value, missingValue }
467
- });
468
- } else if (quickFilter.type.key == "string") {
469
- let value = quickFilter.type.value, missingValue = quickFilter.type.missingValue;
470
- if (clearPreaviousValue) {
471
- builder = handleClearQuickFilter(quickFilter, false);
645
+ else if (quickFilter.type.key == "string") {
646
+ quickFilter.type.value = undefined;
647
+ quickFilter.type.missingValue = undefined;
648
+ } else if (quickFilter.type.key == "number") {
649
+ quickFilter.type.value = undefined;
650
+ quickFilter.type.missingValue = undefined;
651
+ } else if (quickFilter.type.key == "boolean") {
652
+ quickFilter.type.value = undefined;
653
+ } else if (quickFilter.type.key == "country") {
654
+ quickFilter.type.selected = undefined;
655
+ quickFilter.type.missingValue = undefined;
656
+ } else if (quickFilter.type.key == "date") {
657
+ quickFilter.type.from = undefined;
658
+ quickFilter.type.to = undefined;
659
+ } else if (quickFilter.type.key == "multi-select") {
660
+ quickFilter.type.values = [];
661
+ quickFilter.type.missingValue = false;
662
+ quickFilter.type.missingValue = undefined;
472
663
  }
473
- quickFilter.type.value = value;
474
- quickFilter.type.missingValue = missingValue;
475
- if (quickFilter.type.modify) {
476
- builder = quickFilter.type.modify({
477
- builder,
478
- value: { value, missingValue }
479
- });
664
+
665
+ if (dispatchFiltersChange) {
666
+ quickFilter.active = false;
480
667
  }
481
- if (!!quickFilter.column) {
482
- if (missingValue) {
483
- builder.whereNull(quickFilter.column);
484
- } else if (!!value) {
485
- builder.where(
486
- quickFilter.column,
487
- quickFilter.type.mode ?? "equal",
488
- value
668
+
669
+ globalBuilder = searchTextBuilder(searchText);
670
+
671
+ for (let i = 0; i < quickFilters.length; i++) {
672
+ if (quickFilters[i].active) {
673
+ globalBuilder = quickFilterBuilder(
674
+ globalBuilder,
675
+ quickFilters[i],
676
+ false
489
677
  );
490
678
  }
491
679
  }
492
- } else if (quickFilter.type.key == "boolean") {
493
- let value = quickFilter.type.value;
494
- if (clearPreaviousValue) {
495
- builder = handleClearQuickFilter(quickFilter, false);
496
- }
497
- quickFilter.type.value = value;
498
- if (quickFilter.type.modify) {
499
- builder = quickFilter.type.modify({
500
- builder,
501
- value
502
- });
503
- }
504
- if (!!quickFilter.column && value != void 0) {
505
- builder.where(quickFilter.column, value);
506
- }
507
- } else if (quickFilter.type.key == "country") {
508
- let value = quickFilter.type.selected, missingValue = quickFilter.type.missingValue;
509
- if (clearPreaviousValue) {
510
- builder = handleClearQuickFilter(quickFilter, false);
680
+
681
+ if (dispatchFiltersChange) {
682
+ quickFilters = quickFilters;
683
+ handleFiltersChange();
511
684
  }
512
- quickFilter.type.selected = value;
513
- quickFilter.type.missingValue = missingValue;
514
- const values = value?.map((item) => item.value);
515
- if (quickFilter.type.modify) {
516
- builder = quickFilter.type.modify({
517
- builder,
518
- value: { values, missingValue }
519
- });
685
+
686
+ return globalBuilder;
687
+ }
688
+
689
+ function handleSearchBoxKeydown(e: KeyboardEvent) {
690
+ if (e.key == "Enter") {
691
+ handleFiltersChange();
520
692
  }
521
- if (!!quickFilter.column) {
522
- if (missingValue) {
523
- builder.whereNull(quickFilter.column);
524
- } else if (!!values && values.length > 0) {
525
- builder.whereIn(quickFilter.column, values);
693
+ }
694
+
695
+ function handleQuickFilterClick(
696
+ mouseEvent: MouseEvent & {
697
+ currentTarget: EventTarget & HTMLButtonElement;
698
+ },
699
+ quickFilter?: QuickFilter
700
+ ) {
701
+ handleCancelClick();
702
+ setTimeout(() => {
703
+ if (quickFilter) {
704
+ if (!quickFilterActivator) {
705
+ let target = mouseEvent.target as unknown as HTMLElement;
706
+ quickFilterActivator = target;
707
+ quickFilterActive = quickFilter;
708
+ openQuickFilter = !openQuickFilter;
709
+ }
526
710
  }
711
+ }, 300);
712
+ }
713
+
714
+ function setQuickFilterMissingValue(quickFilter: QuickFilter) {
715
+ if (quickFilter.type.key == 'custom') {
716
+ quickFilter.type.missingValue = true;
717
+ quickFilter.type.value = undefined;
527
718
  }
528
- } else if (quickFilter.type.key == "date") {
529
- let from = quickFilter.type.from, to = quickFilter.type.to;
530
- if (clearPreaviousValue) {
531
- builder = handleClearQuickFilter(quickFilter, false);
719
+ else if (quickFilter.type.key == "multi-select") {
720
+ quickFilter.type.missingValue = true;
721
+ quickFilter.type.values = [];
722
+ } else if (quickFilter.type.key == "string") {
723
+ quickFilter.type.missingValue = true;
724
+ quickFilter.type.value = undefined;
725
+ } else if (quickFilter.type.key == "country") {
726
+ quickFilter.type.missingValue = true;
727
+ quickFilter.type.selected = undefined;
728
+ } else if (quickFilter.type.key == "number") {
729
+ quickFilter.type.missingValue = true;
730
+ quickFilter.type.value = undefined;
532
731
  }
533
- quickFilter.type.from = from;
534
- quickFilter.type.to = to;
535
- if (quickFilter.type.modify) {
536
- builder = quickFilter.type.modify({
537
- builder,
538
- value: { from, to }
539
- });
540
- } else if (!!quickFilter.column) {
541
- if (!!from) {
542
- builder.where(
543
- quickFilter.column,
544
- ">=",
545
- DateTime.fromJSDate(from).setLocale("it-IT").startOf("day").toString()
546
- );
547
- }
548
- if (!!to) {
549
- builder.where(
550
- quickFilter.column,
551
- "<=",
552
- DateTime.fromJSDate(to).setLocale("it-IT").endOf("day").toString()
553
- );
554
- }
732
+
733
+ handleApplyClick(quickFilter);
734
+ }
735
+
736
+ function setQuickFilterValue(quickFilter: QuickFilter, value?: any) {
737
+ if (quickFilter.type.key == "custom") {
738
+ quickFilter.type.value = value;
739
+ }
740
+ else if (quickFilter.type.key == "boolean") {
741
+ quickFilter.type.value = value;
742
+ }
743
+
744
+ handleApplyClick(quickFilter);
745
+ }
746
+
747
+ function handleApplyClick(quickFilter: QuickFilter, dispatchCustomFilterClick: boolean = false) {
748
+ if(quickFilter.type.key == 'custom' && dispatchCustomFilterClick) {
749
+ dispatch('applyCustomQuickFilter', { quickFilter, setQuickFilterValue})
555
750
  }
556
- } else if (quickFilter.type.key == "multi-select") {
557
- let value = quickFilter.type.values, missingValue = quickFilter.type.missingValue;
558
- if (clearPreaviousValue) {
559
- builder = handleClearQuickFilter(quickFilter, false);
751
+ else {
752
+ quickFilter.active = true;
753
+ quickFilters = quickFilters;
754
+ globalBuilder = quickFilterBuilder(globalBuilder, quickFilter);
755
+
756
+ handleFiltersChange();
757
+
758
+ quickFilterActivator = undefined;
759
+ openQuickFilter = false;
560
760
  }
561
- quickFilter.type.values = value;
562
- quickFilter.type.missingValue = missingValue;
563
- const values = value.map((item) => item.value);
564
- if (quickFilter.type.modify) {
565
- builder = quickFilter.type.modify({
566
- builder,
567
- value: { values, missingValue }
568
- });
569
- } else if (quickFilter.column) {
570
- if (missingValue) {
571
- builder.whereNull(quickFilter.column);
572
- } else if (values.length > 0) {
573
- builder.whereIn(quickFilter.column, values);
761
+ }
762
+
763
+ function quickFilterBuilder(
764
+ builder: FilterBuilder,
765
+ quickFilter: QuickFilter,
766
+ clearPreaviousValue: boolean = true
767
+ ) {
768
+ if (quickFilter.type.key == 'custom') {
769
+ let value = quickFilter.type.value,
770
+ missingValue = quickFilter.type.missingValue;
771
+ if (clearPreaviousValue) {
772
+ builder = handleClearQuickFilter(quickFilter, false);
574
773
  }
575
- }
576
- } else if (quickFilter.type.key == "number") {
577
- let value = quickFilter.type.value, missingValue = quickFilter.type.missingValue;
578
- if (clearPreaviousValue) {
579
- builder = handleClearQuickFilter(quickFilter, false);
580
- }
581
- quickFilter.type.value = value;
582
- quickFilter.type.missingValue = missingValue;
583
- if (quickFilter.type.modify) {
774
+ quickFilter.type.value = value;
775
+ quickFilter.type.missingValue = missingValue;
776
+
584
777
  builder = quickFilter.type.modify({
585
778
  builder,
586
- value: { value, missingValue }
779
+ value: { value, missingValue },
587
780
  });
588
781
  }
589
- if (quickFilter.column) {
590
- if (missingValue) {
591
- builder.whereNull(quickFilter.column);
592
- } else if (!!value) {
782
+ else if (quickFilter.type.key == "string") {
783
+ let value = quickFilter.type.value,
784
+ missingValue = quickFilter.type.missingValue;
785
+ if (clearPreaviousValue) {
786
+ builder = handleClearQuickFilter(quickFilter, false);
787
+ }
788
+ quickFilter.type.value = value;
789
+ quickFilter.type.missingValue = missingValue;
790
+
791
+ if (quickFilter.type.modify) {
792
+ builder = quickFilter.type.modify({
793
+ builder,
794
+ value: { value, missingValue },
795
+ });
796
+ }
797
+
798
+ if (!!quickFilter.column) {
799
+ if (missingValue) {
800
+ builder.whereNull(quickFilter.column);
801
+ } else if (!!value) {
802
+ builder.where(
803
+ quickFilter.column,
804
+ quickFilter.type.mode ?? "equal",
805
+ value
806
+ );
807
+ }
808
+ }
809
+ } else if (quickFilter.type.key == "boolean") {
810
+ let value = quickFilter.type.value;
811
+ if (clearPreaviousValue) {
812
+ builder = handleClearQuickFilter(quickFilter, false);
813
+ }
814
+ quickFilter.type.value = value;
815
+
816
+ if (quickFilter.type.modify) {
817
+ builder = quickFilter.type.modify({
818
+ builder,
819
+ value,
820
+ });
821
+ }
822
+
823
+ if (!!quickFilter.column && value != undefined) {
593
824
  builder.where(quickFilter.column, value);
594
825
  }
826
+ } else if (quickFilter.type.key == "country") {
827
+ let value = quickFilter.type.selected,
828
+ missingValue = quickFilter.type.missingValue;
829
+ if (clearPreaviousValue) {
830
+ builder = handleClearQuickFilter(quickFilter, false);
831
+ }
832
+ quickFilter.type.selected = value;
833
+ quickFilter.type.missingValue = missingValue;
834
+
835
+ const values = value?.map((item) => item.value);
836
+ if (quickFilter.type.modify) {
837
+ builder = quickFilter.type.modify({
838
+ builder,
839
+ value: { values, missingValue },
840
+ });
841
+ }
842
+
843
+ if (!!quickFilter.column) {
844
+ if (missingValue) {
845
+ builder.whereNull(quickFilter.column);
846
+ } else if (!!values && values.length > 0) {
847
+ builder.whereIn(quickFilter.column, values);
848
+ }
849
+ }
850
+ } else if (quickFilter.type.key == "date") {
851
+ let from = quickFilter.type.from,
852
+ to = quickFilter.type.to;
853
+ if (clearPreaviousValue) {
854
+ builder = handleClearQuickFilter(quickFilter, false);
855
+ }
856
+ quickFilter.type.from = from;
857
+ quickFilter.type.to = to;
858
+
859
+ if (quickFilter.type.modify) {
860
+ builder = quickFilter.type.modify({
861
+ builder,
862
+ value: { from, to },
863
+ });
864
+ } else if (!!quickFilter.column) {
865
+ if (!!from) {
866
+ builder.where(
867
+ quickFilter.column,
868
+ ">=",
869
+ DateTime.fromJSDate(from).setLocale('it-IT').startOf('day').toString()
870
+ );
871
+ }
872
+ if (!!to) {
873
+ builder.where(
874
+ quickFilter.column,
875
+ "<=",
876
+ DateTime.fromJSDate(to).setLocale('it-IT').endOf('day').toString() );
877
+ }
878
+ }
879
+ } else if (quickFilter.type.key == "multi-select") {
880
+ let value = quickFilter.type.values,
881
+ missingValue = quickFilter.type.missingValue;
882
+ if (clearPreaviousValue) {
883
+ builder = handleClearQuickFilter(quickFilter, false);
884
+ }
885
+ quickFilter.type.values = value;
886
+ quickFilter.type.missingValue = missingValue;
887
+
888
+ const values = value.map(item => item.value);
889
+
890
+ if (quickFilter.type.modify) {
891
+ builder = quickFilter.type.modify({
892
+ builder,
893
+ value: { values: values, missingValue },
894
+ });
895
+ } else if (quickFilter.column) {
896
+ if (missingValue) {
897
+ builder.whereNull(quickFilter.column);
898
+ } else if (values.length > 0) {
899
+ builder.whereIn(quickFilter.column, values);
900
+ }
901
+ }
902
+ } else if (quickFilter.type.key == "number") {
903
+ let value = quickFilter.type.value,
904
+ missingValue = quickFilter.type.missingValue;
905
+ if (clearPreaviousValue) {
906
+ builder = handleClearQuickFilter(quickFilter, false);
907
+ }
908
+ quickFilter.type.value = value;
909
+ quickFilter.type.missingValue = missingValue;
910
+
911
+ if (quickFilter.type.modify) {
912
+ builder = quickFilter.type.modify({
913
+ builder,
914
+ value: { value, missingValue },
915
+ });
916
+ }
917
+
918
+ if (quickFilter.column) {
919
+ if (missingValue) {
920
+ builder.whereNull(quickFilter.column);
921
+ } else if (!!value) {
922
+ builder.where(quickFilter.column, value);
923
+ }
924
+ }
595
925
  }
926
+
927
+ return builder;
596
928
  }
597
- return builder;
598
- }
599
- function updateFilterValues(filter, updateMultiFilterValues) {
600
- let newValue = {}, newValid = false, newMode = filter.type == "date" || filter.type == "number" || filter.type == "select" || filter.type == "string" ? filter.mode : void 0;
601
- if (filter.type == "select") {
602
- newValue = filter.values;
603
- if (newValue.length > 0) {
604
- newValid = true;
605
- }
606
- } else if ("mode" in filter && filter.mode == "between") {
607
- newValue.to = filter.to;
608
- newValue.from = filter.from;
609
- if (!!newValue.from || !!newValue.to) {
610
- newValid = true;
611
- }
612
- } else {
613
- newValue = filter.value;
614
- if (!!newValue) {
615
- newValid = true;
929
+
930
+ function updateFilterValues(filter: Filter, updateMultiFilterValues: (filterName: string, newValue: any, newValid: boolean, newMode?: NumberMode | StringMode | SelectMode | DateMode) => void) {
931
+ let newValue: any = {},
932
+ newValid: boolean = false,
933
+ newMode = filter.type == 'date' ||
934
+ filter.type == 'number' ||
935
+ filter.type == 'select' ||
936
+ filter.type == 'string' ?
937
+ filter.mode :
938
+ undefined
939
+ if(filter.type == 'select') {
940
+ newValue = filter.values
941
+ if(newValue.length > 0) {
942
+ newValid = true
943
+ }
944
+ } else if('mode' in filter && filter.mode == 'between') {
945
+ newValue.to = filter.to
946
+ newValue.from = filter.from
947
+ if(!!newValue.from || !!newValue.to) {
948
+ newValid = true
949
+ }
950
+ } else {
951
+ newValue = filter.value
952
+ if(!!newValue) {
953
+ newValid = true
954
+ }
616
955
  }
956
+ updateMultiFilterValues(filter.name, newValue, newValid, newMode)
617
957
  }
618
- updateMultiFilterValues(filter.name, newValue, newValid, newMode);
619
- }
620
- function handleRemoveAllFilters() {
621
- dispatch("removeAllFilters", {});
622
- handleSearchChange(searchText);
623
- }
624
- function handleRemoveFilter(filter) {
625
- dispatch("removeFilter", { filter });
626
- handleSearchChange(searchText);
627
- }
628
- async function handleLoadForward() {
629
- if (renderedRows.length >= renderedRowsNumber) {
630
- userScrolling = false;
631
- const anchorIndex = renderedRowsNumber - 1;
632
- const anchorUniqueKey = renderedRows[anchorIndex].item[uniqueKey];
633
- const anchorElement = findAnchorElement(anchorUniqueKey);
634
- const anchorOffsetBefore = anchorElement?.getBoundingClientRect().top || 0;
635
- let removedRowCount = 0;
636
- for (let i = 0; removedRowCount < sectionRowsNumber; i++) {
637
- let row = tableBody.children.item(i);
638
- removedRowCount++;
639
- const rowKey = row?.getAttribute("data-key");
640
- const isExpanded = expandedRows.some((r) => r.item[uniqueKey] == rowKey);
641
- if (isExpanded) {
642
- i++;
958
+
959
+ function handleRemoveAllFilters() {
960
+ dispatch('removeAllFilters', {})
961
+ handleSearchChange(searchText);
962
+ }
963
+
964
+ function handleRemoveFilter(filter: Filter) {
965
+ dispatch('removeFilter', { filter})
966
+ handleSearchChange(searchText);
967
+ }
968
+
969
+ async function handleLoadForward() {
970
+ if(renderedRows.length >= renderedRowsNumber) {
971
+ userScrolling = false
972
+
973
+ const anchorIndex = renderedRowsNumber - 1
974
+ const anchorUniqueKey = renderedRows[anchorIndex].item[uniqueKey]
975
+ const anchorElement = findAnchorElement(anchorUniqueKey)
976
+ const anchorOffsetBefore = anchorElement?.getBoundingClientRect().top || 0
977
+
978
+ let removedRowCount = 0
979
+
980
+ for (let i = 0; removedRowCount < sectionRowsNumber; i++) {
981
+ let row = tableBody.children.item(i)
982
+ removedRowCount++
983
+
984
+ const rowKey = row?.getAttribute("data-key")
985
+ const isExpanded = expandedRows.some(r => r.item[uniqueKey] == rowKey)
986
+
987
+ if (isExpanded) {
988
+ i++
989
+ }
643
990
  }
991
+
992
+ currentSectionNumber = currentSectionNumber + 1
993
+
994
+ await tick()
995
+ const anchorElementAfter = findAnchorElement(anchorUniqueKey)
996
+ const anchorOffsetAfter = anchorElementAfter?.getBoundingClientRect().top || 0
997
+ const offsetDiff = anchorOffsetAfter - anchorOffsetBefore
998
+ tableContainer.scrollTop += offsetDiff
999
+
1000
+ userScrolling = true
1001
+ }
1002
+
1003
+ if(totalCachedSections - sectionThreshold <= currentSectionNumber
1004
+ && !loading
1005
+ && totalRows > rows.length
1006
+ ) {
1007
+ dispatch("fetchData", {});
644
1008
  }
645
- currentSectionNumber = currentSectionNumber + 1;
646
- await tick();
647
- const anchorElementAfter = findAnchorElement(anchorUniqueKey);
648
- const anchorOffsetAfter = anchorElementAfter?.getBoundingClientRect().top || 0;
649
- const offsetDiff = anchorOffsetAfter - anchorOffsetBefore;
650
- tableContainer.scrollTop += offsetDiff;
651
- userScrolling = true;
652
- }
653
- if (totalCachedSections - sectionThreshold <= currentSectionNumber && !loading && totalRows > rows.length) {
654
- dispatch("fetchData", {});
655
1009
  }
656
- }
657
- async function handleLoadBackward() {
658
- if (currentSectionNumber > 0) {
659
- userScrolling = false;
660
- const anchorIndex = 0;
661
- const anchorUniqueKey = renderedRows[anchorIndex].item[uniqueKey];
662
- const anchorElement = findAnchorElement(anchorUniqueKey);
663
- const anchorOffsetBefore = anchorElement?.getBoundingClientRect().top || 0;
664
- let removedRowCount = 0;
665
- for (let i = renderedRows.length - 1; removedRowCount < sectionRowsNumber; i--) {
666
- let row = tableBody.children.item(i);
667
- removedRowCount++;
668
- const rowKey = row?.getAttribute("data-key");
669
- const isExpanded = expandedRows.some((r) => r.item[uniqueKey] == rowKey);
670
- if (isExpanded) {
671
- i--;
1010
+
1011
+ async function handleLoadBackward() {
1012
+ if(currentSectionNumber > 0) {
1013
+ userScrolling = false
1014
+
1015
+ const anchorIndex = 0
1016
+ const anchorUniqueKey = renderedRows[anchorIndex].item[uniqueKey]
1017
+ const anchorElement = findAnchorElement(anchorUniqueKey)
1018
+ const anchorOffsetBefore = anchorElement?.getBoundingClientRect().top || 0
1019
+
1020
+ let removedRowCount = 0
1021
+
1022
+ for (let i = renderedRows.length - 1; removedRowCount < sectionRowsNumber; i--) {
1023
+ let row = tableBody.children.item(i)
1024
+ removedRowCount++
1025
+
1026
+ const rowKey = row?.getAttribute("data-key")
1027
+ const isExpanded = expandedRows.some(r => r.item[uniqueKey] == rowKey)
1028
+
1029
+ if (isExpanded) {
1030
+ i--
1031
+ }
672
1032
  }
1033
+
1034
+ currentSectionNumber = currentSectionNumber - 1
1035
+
1036
+ await tick()
1037
+ const anchorElementAfter = findAnchorElement(anchorUniqueKey)
1038
+ const anchorOffsetAfter = anchorElementAfter?.getBoundingClientRect().top || 0
1039
+ const offsetDiff = anchorOffsetAfter - anchorOffsetBefore
1040
+ tableContainer.scrollTop += offsetDiff
1041
+
1042
+ userScrolling = true
673
1043
  }
674
- currentSectionNumber = currentSectionNumber - 1;
675
- await tick();
676
- const anchorElementAfter = findAnchorElement(anchorUniqueKey);
677
- const anchorOffsetAfter = anchorElementAfter?.getBoundingClientRect().top || 0;
678
- const offsetDiff = anchorOffsetAfter - anchorOffsetBefore;
679
- tableContainer.scrollTop += offsetDiff;
680
- userScrolling = true;
681
1044
  }
682
- }
683
- function findAnchorElement(key) {
684
- for (let i = 0; i < tableBody.children.length; i++) {
685
- const child = tableBody.children.item(i);
686
- if (child?.getAttribute("data-key") == key) {
687
- return child;
1045
+
1046
+ function findAnchorElement(key: keyof Item) {
1047
+ for (let i = 0; i < tableBody.children.length; i++) {
1048
+ const child = tableBody.children.item(i)
1049
+ if (child?.getAttribute("data-key") == key) {
1050
+ return child
1051
+ }
688
1052
  }
1053
+ return undefined
689
1054
  }
690
- return void 0;
691
- }
692
- function resize(node) {
693
- let th = node.parentElement;
694
- let resizingInner = false;
695
- if (!!th) {
696
- let mouseMoveHandler = function(e) {
697
- if (resizingInner && !!th && !!tableContainer) {
698
- width += e.movementX;
699
- const { paddingLeft, paddingRight } = getComputedStyle(th);
700
- const minWidth = headers.find((h) => h.value === th.id)?.minWidth;
701
- let minWidthPx;
702
- if (!!minWidth && minWidth.endsWith("px")) {
703
- minWidthPx = parseInt(minWidth, 10);
704
- }
705
- const maxWidth = headers.find((h) => h.value === th.id)?.maxWidth;
706
- let maxWidthPx;
707
- if (!!maxWidth && maxWidth.endsWith("px")) {
708
- maxWidthPx = parseInt(maxWidth, 10);
709
- }
710
- const actualMinWidth = (minWidthPx || DEFAULT_MIN_WIDTH_PX) - parseFloat(paddingLeft) - parseFloat(paddingRight);
711
- const actualMaxWidth = (maxWidthPx || DEFAULT_MAX_WIDTH_PX) - parseFloat(paddingLeft) - parseFloat(paddingRight);
712
- if (width > actualMinWidth && width < actualMaxWidth) {
713
- th.style.width = width + "px";
714
- resizedColumnSizeWithPadding[th.id] = th.getBoundingClientRect().width;
715
- resizedColumnSizeWithPadding = resizedColumnSizeWithPadding;
1055
+
1056
+ function resize(node: HTMLElement) {
1057
+ let th: HTMLElement | null = node.parentElement
1058
+ let resizingInner = false
1059
+
1060
+ if(!!th) {
1061
+ let { width } = th.getBoundingClientRect()
1062
+
1063
+ function mouseMoveHandler(e: MouseEvent) {
1064
+ if (resizingInner && !!th && !!tableContainer) {
1065
+ width += e.movementX;
1066
+ const { paddingLeft, paddingRight } = getComputedStyle(th);
1067
+
1068
+ const minWidth: string | undefined = headers.find(h => h.value === th.id)?.minWidth;
1069
+ let minWidthPx: number | undefined;
1070
+ if (!!minWidth && minWidth.endsWith('px')) {
1071
+ minWidthPx = parseInt(minWidth, 10);
1072
+ }
1073
+
1074
+ const maxWidth: string | undefined = headers.find(h => h.value === th.id)?.maxWidth;
1075
+ let maxWidthPx: number | undefined;
1076
+ if (!!maxWidth && maxWidth.endsWith('px')) {
1077
+ maxWidthPx = parseInt(maxWidth, 10);
1078
+ }
1079
+
1080
+ const actualMinWidth = (minWidthPx || DEFAULT_MIN_WIDTH_PX) - parseFloat(paddingLeft) - parseFloat(paddingRight);
1081
+ const actualMaxWidth = (maxWidthPx || DEFAULT_MAX_WIDTH_PX) - parseFloat(paddingLeft) - parseFloat(paddingRight);
1082
+
1083
+ if (width > actualMinWidth && width < actualMaxWidth) {
1084
+ th.style.width = width + 'px';
1085
+ resizedColumnSizeWithPadding[th.id] = th.getBoundingClientRect().width;
1086
+ resizedColumnSizeWithPadding = resizedColumnSizeWithPadding
1087
+ }
716
1088
  }
717
1089
  }
718
- }, mouseUpHandler = function(e, setResize = true) {
719
- if (!!th) {
720
- resizingInner = false;
721
- let { paddingLeft, paddingRight } = getComputedStyle(th);
722
- width = th.getBoundingClientRect().width - parseFloat(paddingLeft) - parseFloat(paddingRight);
723
- if (setResize) {
724
- setTimeout(() => resizing = false, 20);
1090
+
1091
+
1092
+ function mouseUpHandler(e: MouseEvent, setResize: boolean = true) {
1093
+ if(!!th) {
1094
+ resizingInner = false
1095
+ let { paddingLeft, paddingRight } = getComputedStyle(th)
1096
+ width = th.getBoundingClientRect().width - parseFloat(paddingLeft) - parseFloat(paddingRight)
1097
+ if(setResize){
1098
+ setTimeout(() => resizing = false, 20)
1099
+ }
1100
+ dispatch('columnResize', {
1101
+ id: th.id,
1102
+ newWidthPx: width
1103
+ })
725
1104
  }
726
- dispatch("columnResize", {
727
- id: th.id,
728
- newWidthPx: width
729
- });
730
1105
  }
731
- }, mouseDownHandler = function(e) {
732
- if (!!th) {
733
- resizing = true;
734
- resizingInner = true;
735
- let { paddingLeft, paddingRight } = getComputedStyle(th);
736
- width = th.getBoundingClientRect().width - parseFloat(paddingLeft) - parseFloat(paddingRight);
1106
+
1107
+ function mouseDownHandler(e: MouseEvent) {
1108
+ if(!!th) {
1109
+ resizing = true
1110
+ resizingInner = true
1111
+ let { paddingLeft, paddingRight } = getComputedStyle(th)
1112
+ width = th.getBoundingClientRect().width - parseFloat(paddingLeft) - parseFloat(paddingRight)
1113
+ }
737
1114
  }
738
- };
739
- let { width } = th.getBoundingClientRect();
740
- node.addEventListener("mousedown", mouseDownHandler);
741
- document.addEventListener("mouseup", mouseUpHandler);
742
- document.addEventListener("mousemove", mouseMoveHandler);
743
- return {
744
- destroy() {
745
- node.removeEventListener("mousedown", mouseDownHandler);
746
- document.removeEventListener("mouseup", mouseUpHandler);
747
- document.removeEventListener("mousemove", mouseMoveHandler);
1115
+
1116
+ node.addEventListener('mousedown', mouseDownHandler)
1117
+ document.addEventListener('mouseup', mouseUpHandler)
1118
+ document.addEventListener('mousemove', mouseMoveHandler)
1119
+
1120
+
1121
+ return {
1122
+ destroy() {
1123
+ node.removeEventListener('mousedown', mouseDownHandler)
1124
+ document.removeEventListener('mouseup', mouseUpHandler)
1125
+ document.removeEventListener('mousemove', mouseMoveHandler)
1126
+ }
748
1127
  }
749
- };
1128
+ }
750
1129
  }
751
- }
752
- $:
753
- if (!!tableContainer && headersToShowInTable.length > 0 && resizedColumnSizeWithPadding && headersToShow.length > 0 && mainHeader) {
1130
+
1131
+ $: if (
1132
+ !!tableContainer &&
1133
+ headersToShowInTable.length > 0 &&
1134
+ resizedColumnSizeWithPadding &&
1135
+ headersToShow.length > 0 &&
1136
+ mainHeader
1137
+ ) {
754
1138
  tick().then(updateRemainingWidth);
755
1139
  }
756
- async function updateRemainingWidth() {
757
- if (tableContainer != null && !!tableContainer) {
758
- const containerWidth = tableContainer?.getBoundingClientRect().width - 30;
759
- if (containerWidth) {
760
- const totalResizableWidth = headersToShowInTable.reduce((sum, head) => {
761
- let th = headersHTML[head.value];
762
- if (!!th) {
763
- resizeHeader(th, head);
764
- }
765
- const width = th?.getBoundingClientRect().width || 0;
766
- return sum + width + 1;
767
- }, 0);
768
- const extraStaticWidth = Array.from(mainHeader.querySelectorAll("th.non-resizable, th.customize-headers")).reduce((sum, th) => sum + th.getBoundingClientRect().width + 1, 0);
769
- remainingWidth = Math.max(0, containerWidth - totalResizableWidth - extraStaticWidth);
1140
+
1141
+ async function updateRemainingWidth() {
1142
+ if(tableContainer != null && !!tableContainer) {
1143
+ const containerWidth = tableContainer?.getBoundingClientRect().width - 30;
1144
+
1145
+ if(containerWidth){
1146
+ const totalResizableWidth = headersToShowInTable.reduce((sum, head) => {
1147
+ let th = headersHTML[head.value]
1148
+ if(!!th) {
1149
+ resizeHeader(th, head)
1150
+ }
1151
+ const width = th?.getBoundingClientRect().width || 0
1152
+ return sum + width + 1;
1153
+ }, 0);
1154
+
1155
+ const extraStaticWidth = Array.from(mainHeader.querySelectorAll('th.non-resizable, th.customize-headers'))
1156
+ .reduce((sum, th) => sum + th.getBoundingClientRect().width + 1, 0);
1157
+
1158
+ remainingWidth = Math.max(0, containerWidth - totalResizableWidth - extraStaticWidth);
1159
+ }
770
1160
  }
771
1161
  }
772
- }
773
- function resizeHeader(th, header) {
774
- if (!resizedColumnSizeWithPadding[header.value]) {
775
- let widthWihtPadding = th.getBoundingClientRect().width;
776
- let minWidth = header.minWidth, minWidthPx = DEFAULT_MIN_WIDTH_PX;
777
- if (!!minWidth && minWidth.endsWith("px")) {
778
- minWidthPx = parseInt(minWidth, 10);
779
- }
780
- if (widthWihtPadding < minWidthPx) {
781
- widthWihtPadding = minWidthPx;
782
- }
783
- let maxWidth = header.maxWidth, maxWidthPx = DEFAULT_MAX_WIDTH_PX;
784
- if (!!maxWidth && maxWidth.endsWith("px")) {
785
- maxWidthPx = parseInt(maxWidth, 10);
786
- }
787
- if (widthWihtPadding > maxWidthPx) {
788
- widthWihtPadding = maxWidthPx;
1162
+
1163
+ function resizeHeader(th: HTMLElement, header: { value: string, minWidth?: string, maxWidth?: string }){
1164
+ if (!resizedColumnSizeWithPadding[header.value]) {
1165
+ let widthWihtPadding = th.getBoundingClientRect().width
1166
+
1167
+ let minWidth = header.minWidth,
1168
+ minWidthPx = DEFAULT_MIN_WIDTH_PX
1169
+ if (!!minWidth && minWidth.endsWith('px')) {
1170
+ minWidthPx = parseInt(minWidth, 10);
1171
+ }
1172
+ if(widthWihtPadding < minWidthPx) {
1173
+ widthWihtPadding = minWidthPx
1174
+ }
1175
+
1176
+ let maxWidth = header.maxWidth,
1177
+ maxWidthPx = DEFAULT_MAX_WIDTH_PX
1178
+ if (!!maxWidth && maxWidth.endsWith('px')) {
1179
+ maxWidthPx = parseInt(maxWidth, 10);
1180
+ }
1181
+ if(widthWihtPadding > maxWidthPx) {
1182
+ widthWihtPadding = maxWidthPx
1183
+ }
1184
+
1185
+ resizedColumnSizeWithPadding[header.value] = widthWihtPadding;
789
1186
  }
790
- resizedColumnSizeWithPadding[header.value] = widthWihtPadding;
1187
+ let { paddingLeft, paddingRight } = getComputedStyle(th);
1188
+ let width = resizedColumnSizeWithPadding[header.value] - parseFloat(paddingLeft) - parseFloat(paddingRight);
1189
+ th.style.width = `${width}px`
791
1190
  }
792
- let { paddingLeft, paddingRight } = getComputedStyle(th);
793
- let width = resizedColumnSizeWithPadding[header.value] - parseFloat(paddingLeft) - parseFloat(paddingRight);
794
- th.style.width = `${width}px`;
795
- }
796
1191
  </script>
797
1192
 
798
1193
  {#if !!rows && Array.isArray(rows) && !!headersToShowInTable && Array.isArray(headersToShowInTable)}