@quillsql/react 2.12.52 → 2.13.0

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 (263) hide show
  1. package/dist/cjs/Chart.d.ts.map +1 -1
  2. package/dist/cjs/Chart.js +5 -3
  3. package/dist/cjs/ChartBuilder.d.ts +10 -3
  4. package/dist/cjs/ChartBuilder.d.ts.map +1 -1
  5. package/dist/cjs/ChartBuilder.js +62 -26
  6. package/dist/cjs/ChartEditor.d.ts +3 -1
  7. package/dist/cjs/ChartEditor.d.ts.map +1 -1
  8. package/dist/cjs/ChartEditor.js +74 -16
  9. package/dist/cjs/Context.d.ts +17 -6
  10. package/dist/cjs/Context.d.ts.map +1 -1
  11. package/dist/cjs/Context.js +138 -73
  12. package/dist/cjs/Dashboard.d.ts +8 -4
  13. package/dist/cjs/Dashboard.d.ts.map +1 -1
  14. package/dist/cjs/Dashboard.js +146 -367
  15. package/dist/cjs/DateRangePicker/QuillDateRangePicker.d.ts.map +1 -1
  16. package/dist/cjs/DateRangePicker/QuillDateRangePicker.js +20 -14
  17. package/dist/cjs/DateRangePicker/dateRangePickerUtils.d.ts +1 -0
  18. package/dist/cjs/DateRangePicker/dateRangePickerUtils.d.ts.map +1 -1
  19. package/dist/cjs/DateRangePicker/dateRangePickerUtils.js +1 -1
  20. package/dist/cjs/QuillProvider.js +1 -1
  21. package/dist/cjs/ReportBuilder.d.ts +8 -12
  22. package/dist/cjs/ReportBuilder.d.ts.map +1 -1
  23. package/dist/cjs/ReportBuilder.js +163 -83
  24. package/dist/cjs/SQLEditor.d.ts +8 -1
  25. package/dist/cjs/SQLEditor.d.ts.map +1 -1
  26. package/dist/cjs/SQLEditor.js +81 -28
  27. package/dist/cjs/Table.d.ts.map +1 -1
  28. package/dist/cjs/Table.js +6 -3
  29. package/dist/cjs/assets/AdjustmentsIcon.d.ts +5 -0
  30. package/dist/cjs/assets/AdjustmentsIcon.d.ts.map +1 -0
  31. package/dist/cjs/assets/AdjustmentsIcon.js +5 -0
  32. package/dist/cjs/assets/ArrowDownHeadIcon.d.ts.map +1 -1
  33. package/dist/cjs/components/Chart/ChartError.js +2 -2
  34. package/dist/cjs/components/Dashboard/DashboardFilter.d.ts +4 -3
  35. package/dist/cjs/components/Dashboard/DashboardFilter.d.ts.map +1 -1
  36. package/dist/cjs/components/Dashboard/DashboardFilter.js +12 -12
  37. package/dist/cjs/components/Dashboard/DashboardTemplate.d.ts +2 -2
  38. package/dist/cjs/components/Dashboard/DashboardTemplate.d.ts.map +1 -1
  39. package/dist/cjs/components/Dashboard/DataLoader.d.ts +11 -5
  40. package/dist/cjs/components/Dashboard/DataLoader.d.ts.map +1 -1
  41. package/dist/cjs/components/Dashboard/DataLoader.js +91 -32
  42. package/dist/cjs/components/Dashboard/TableComponent.d.ts +2 -1
  43. package/dist/cjs/components/Dashboard/TableComponent.d.ts.map +1 -1
  44. package/dist/cjs/components/Dashboard/TableComponent.js +10 -3
  45. package/dist/cjs/components/Dashboard/util.d.ts +2 -2
  46. package/dist/cjs/components/Dashboard/util.d.ts.map +1 -1
  47. package/dist/cjs/components/Dashboard/util.js +2 -2
  48. package/dist/cjs/components/QuillMultiSelect.d.ts.map +1 -1
  49. package/dist/cjs/components/QuillMultiSelect.js +18 -13
  50. package/dist/cjs/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
  51. package/dist/cjs/components/QuillMultiSelectWithCombo.js +67 -45
  52. package/dist/cjs/components/QuillSelect.d.ts +1 -1
  53. package/dist/cjs/components/QuillSelect.d.ts.map +1 -1
  54. package/dist/cjs/components/QuillSelect.js +29 -7
  55. package/dist/cjs/components/QuillSelectWithCombo.d.ts +1 -1
  56. package/dist/cjs/components/QuillSelectWithCombo.d.ts.map +1 -1
  57. package/dist/cjs/components/QuillSelectWithCombo.js +47 -26
  58. package/dist/cjs/components/QuillTable.d.ts +3 -2
  59. package/dist/cjs/components/QuillTable.d.ts.map +1 -1
  60. package/dist/cjs/components/QuillTable.js +32 -19
  61. package/dist/cjs/components/ReportBuilder/AddLimitPopover.d.ts +2 -1
  62. package/dist/cjs/components/ReportBuilder/AddLimitPopover.d.ts.map +1 -1
  63. package/dist/cjs/components/ReportBuilder/AddLimitPopover.js +2 -2
  64. package/dist/cjs/components/ReportBuilder/AddSortPopover.d.ts +2 -1
  65. package/dist/cjs/components/ReportBuilder/AddSortPopover.d.ts.map +1 -1
  66. package/dist/cjs/components/ReportBuilder/AddSortPopover.js +2 -2
  67. package/dist/cjs/components/ReportBuilder/FilterModal.d.ts +2 -1
  68. package/dist/cjs/components/ReportBuilder/FilterModal.d.ts.map +1 -1
  69. package/dist/cjs/components/ReportBuilder/FilterModal.js +17 -4
  70. package/dist/cjs/components/ReportBuilder/ui.d.ts +13 -8
  71. package/dist/cjs/components/ReportBuilder/ui.d.ts.map +1 -1
  72. package/dist/cjs/components/ReportBuilder/ui.js +15 -24
  73. package/dist/cjs/components/UiComponents.d.ts +17 -9
  74. package/dist/cjs/components/UiComponents.d.ts.map +1 -1
  75. package/dist/cjs/components/UiComponents.js +30 -24
  76. package/dist/cjs/hooks/useAstToFilterTree.d.ts +2 -2
  77. package/dist/cjs/hooks/useAstToFilterTree.d.ts.map +1 -1
  78. package/dist/cjs/hooks/useDashboard.d.ts +13 -5
  79. package/dist/cjs/hooks/useDashboard.d.ts.map +1 -1
  80. package/dist/cjs/hooks/useDashboard.js +158 -70
  81. package/dist/cjs/hooks/useExport.d.ts.map +1 -1
  82. package/dist/cjs/hooks/useExport.js +9 -3
  83. package/dist/cjs/hooks/useQuill.d.ts.map +1 -1
  84. package/dist/cjs/hooks/useQuill.js +15 -15
  85. package/dist/cjs/hooks/useVirtualTables.d.ts +12 -3
  86. package/dist/cjs/hooks/useVirtualTables.d.ts.map +1 -1
  87. package/dist/cjs/hooks/useVirtualTables.js +105 -1
  88. package/dist/cjs/internals/ReportBuilder/PivotForm.d.ts +3 -1
  89. package/dist/cjs/internals/ReportBuilder/PivotForm.d.ts.map +1 -1
  90. package/dist/cjs/internals/ReportBuilder/PivotForm.js +9 -9
  91. package/dist/cjs/internals/ReportBuilder/PivotList.d.ts.map +1 -1
  92. package/dist/cjs/internals/ReportBuilder/PivotList.js +21 -15
  93. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts +3 -2
  94. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  95. package/dist/cjs/internals/ReportBuilder/PivotModal.js +9 -9
  96. package/dist/cjs/models/Client.d.ts +16 -2
  97. package/dist/cjs/models/Client.d.ts.map +1 -1
  98. package/dist/cjs/models/Dashboard.d.ts +1 -1
  99. package/dist/cjs/models/Dashboard.d.ts.map +1 -1
  100. package/dist/cjs/models/Filter.d.ts +4 -3
  101. package/dist/cjs/models/Filter.d.ts.map +1 -1
  102. package/dist/cjs/models/Filter.js +38 -1
  103. package/dist/cjs/utils/astProcessing.d.ts +3 -3
  104. package/dist/cjs/utils/astProcessing.d.ts.map +1 -1
  105. package/dist/cjs/utils/client.d.ts.map +1 -1
  106. package/dist/cjs/utils/client.js +2 -7
  107. package/dist/cjs/utils/dashboard.d.ts +5 -5
  108. package/dist/cjs/utils/dashboard.d.ts.map +1 -1
  109. package/dist/cjs/utils/dashboard.js +90 -9
  110. package/dist/cjs/utils/dataFetcher.d.ts +4 -4
  111. package/dist/cjs/utils/dataFetcher.d.ts.map +1 -1
  112. package/dist/cjs/utils/dataFetcher.js +1 -1
  113. package/dist/cjs/utils/filterProcessing.d.ts.map +1 -1
  114. package/dist/cjs/utils/filterProcessing.js +2 -8
  115. package/dist/cjs/utils/paginationProcessing.js +1 -1
  116. package/dist/cjs/utils/pivotConstructor.d.ts +2 -2
  117. package/dist/cjs/utils/pivotConstructor.d.ts.map +1 -1
  118. package/dist/cjs/utils/pivotConstructor.js +1 -1
  119. package/dist/cjs/utils/pivotProcessing.d.ts.map +1 -1
  120. package/dist/cjs/utils/pivotProcessing.js +6 -2
  121. package/dist/cjs/utils/queryConstructor.d.ts.map +1 -1
  122. package/dist/cjs/utils/queryConstructor.js +12 -9
  123. package/dist/cjs/utils/report.d.ts +6 -5
  124. package/dist/cjs/utils/report.d.ts.map +1 -1
  125. package/dist/cjs/utils/report.js +71 -25
  126. package/dist/cjs/utils/schema.d.ts +3 -3
  127. package/dist/cjs/utils/schema.d.ts.map +1 -1
  128. package/dist/cjs/utils/schema.js +39 -35
  129. package/dist/cjs/utils/tableProcessing.d.ts +18 -11
  130. package/dist/cjs/utils/tableProcessing.d.ts.map +1 -1
  131. package/dist/cjs/utils/tableProcessing.js +44 -23
  132. package/dist/esm/Chart.d.ts.map +1 -1
  133. package/dist/esm/Chart.js +6 -4
  134. package/dist/esm/ChartBuilder.d.ts +10 -3
  135. package/dist/esm/ChartBuilder.d.ts.map +1 -1
  136. package/dist/esm/ChartBuilder.js +59 -26
  137. package/dist/esm/ChartEditor.d.ts +3 -1
  138. package/dist/esm/ChartEditor.d.ts.map +1 -1
  139. package/dist/esm/ChartEditor.js +76 -18
  140. package/dist/esm/Context.d.ts +17 -6
  141. package/dist/esm/Context.d.ts.map +1 -1
  142. package/dist/esm/Context.js +139 -74
  143. package/dist/esm/Dashboard.d.ts +8 -4
  144. package/dist/esm/Dashboard.d.ts.map +1 -1
  145. package/dist/esm/Dashboard.js +146 -367
  146. package/dist/esm/DateRangePicker/QuillDateRangePicker.d.ts.map +1 -1
  147. package/dist/esm/DateRangePicker/QuillDateRangePicker.js +21 -15
  148. package/dist/esm/DateRangePicker/dateRangePickerUtils.d.ts +1 -0
  149. package/dist/esm/DateRangePicker/dateRangePickerUtils.d.ts.map +1 -1
  150. package/dist/esm/DateRangePicker/dateRangePickerUtils.js +1 -1
  151. package/dist/esm/QuillProvider.js +1 -1
  152. package/dist/esm/ReportBuilder.d.ts +8 -12
  153. package/dist/esm/ReportBuilder.d.ts.map +1 -1
  154. package/dist/esm/ReportBuilder.js +167 -87
  155. package/dist/esm/SQLEditor.d.ts +8 -1
  156. package/dist/esm/SQLEditor.d.ts.map +1 -1
  157. package/dist/esm/SQLEditor.js +84 -31
  158. package/dist/esm/Table.d.ts.map +1 -1
  159. package/dist/esm/Table.js +7 -4
  160. package/dist/esm/assets/AdjustmentsIcon.d.ts +5 -0
  161. package/dist/esm/assets/AdjustmentsIcon.d.ts.map +1 -0
  162. package/dist/esm/assets/AdjustmentsIcon.js +3 -0
  163. package/dist/esm/assets/ArrowDownHeadIcon.d.ts.map +1 -1
  164. package/dist/esm/components/Chart/ChartError.js +2 -2
  165. package/dist/esm/components/Dashboard/DashboardFilter.d.ts +4 -3
  166. package/dist/esm/components/Dashboard/DashboardFilter.d.ts.map +1 -1
  167. package/dist/esm/components/Dashboard/DashboardFilter.js +12 -12
  168. package/dist/esm/components/Dashboard/DashboardTemplate.d.ts +2 -2
  169. package/dist/esm/components/Dashboard/DashboardTemplate.d.ts.map +1 -1
  170. package/dist/esm/components/Dashboard/DataLoader.d.ts +11 -5
  171. package/dist/esm/components/Dashboard/DataLoader.d.ts.map +1 -1
  172. package/dist/esm/components/Dashboard/DataLoader.js +94 -35
  173. package/dist/esm/components/Dashboard/TableComponent.d.ts +2 -1
  174. package/dist/esm/components/Dashboard/TableComponent.d.ts.map +1 -1
  175. package/dist/esm/components/Dashboard/TableComponent.js +10 -3
  176. package/dist/esm/components/Dashboard/util.d.ts +2 -2
  177. package/dist/esm/components/Dashboard/util.d.ts.map +1 -1
  178. package/dist/esm/components/Dashboard/util.js +2 -2
  179. package/dist/esm/components/QuillMultiSelect.d.ts.map +1 -1
  180. package/dist/esm/components/QuillMultiSelect.js +19 -14
  181. package/dist/esm/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
  182. package/dist/esm/components/QuillMultiSelectWithCombo.js +68 -46
  183. package/dist/esm/components/QuillSelect.d.ts +1 -1
  184. package/dist/esm/components/QuillSelect.d.ts.map +1 -1
  185. package/dist/esm/components/QuillSelect.js +30 -8
  186. package/dist/esm/components/QuillSelectWithCombo.d.ts +1 -1
  187. package/dist/esm/components/QuillSelectWithCombo.d.ts.map +1 -1
  188. package/dist/esm/components/QuillSelectWithCombo.js +48 -27
  189. package/dist/esm/components/QuillTable.d.ts +3 -2
  190. package/dist/esm/components/QuillTable.d.ts.map +1 -1
  191. package/dist/esm/components/QuillTable.js +32 -19
  192. package/dist/esm/components/ReportBuilder/AddLimitPopover.d.ts +2 -1
  193. package/dist/esm/components/ReportBuilder/AddLimitPopover.d.ts.map +1 -1
  194. package/dist/esm/components/ReportBuilder/AddLimitPopover.js +2 -2
  195. package/dist/esm/components/ReportBuilder/AddSortPopover.d.ts +2 -1
  196. package/dist/esm/components/ReportBuilder/AddSortPopover.d.ts.map +1 -1
  197. package/dist/esm/components/ReportBuilder/AddSortPopover.js +2 -2
  198. package/dist/esm/components/ReportBuilder/FilterModal.d.ts +2 -1
  199. package/dist/esm/components/ReportBuilder/FilterModal.d.ts.map +1 -1
  200. package/dist/esm/components/ReportBuilder/FilterModal.js +17 -4
  201. package/dist/esm/components/ReportBuilder/ui.d.ts +13 -8
  202. package/dist/esm/components/ReportBuilder/ui.d.ts.map +1 -1
  203. package/dist/esm/components/ReportBuilder/ui.js +14 -19
  204. package/dist/esm/components/UiComponents.d.ts +17 -9
  205. package/dist/esm/components/UiComponents.d.ts.map +1 -1
  206. package/dist/esm/components/UiComponents.js +30 -24
  207. package/dist/esm/hooks/useAstToFilterTree.d.ts +2 -2
  208. package/dist/esm/hooks/useAstToFilterTree.d.ts.map +1 -1
  209. package/dist/esm/hooks/useDashboard.d.ts +13 -5
  210. package/dist/esm/hooks/useDashboard.d.ts.map +1 -1
  211. package/dist/esm/hooks/useDashboard.js +158 -73
  212. package/dist/esm/hooks/useExport.d.ts.map +1 -1
  213. package/dist/esm/hooks/useExport.js +10 -4
  214. package/dist/esm/hooks/useQuill.d.ts.map +1 -1
  215. package/dist/esm/hooks/useQuill.js +17 -17
  216. package/dist/esm/hooks/useVirtualTables.d.ts +12 -3
  217. package/dist/esm/hooks/useVirtualTables.d.ts.map +1 -1
  218. package/dist/esm/hooks/useVirtualTables.js +106 -2
  219. package/dist/esm/internals/ReportBuilder/PivotForm.d.ts +3 -1
  220. package/dist/esm/internals/ReportBuilder/PivotForm.d.ts.map +1 -1
  221. package/dist/esm/internals/ReportBuilder/PivotForm.js +9 -9
  222. package/dist/esm/internals/ReportBuilder/PivotList.d.ts.map +1 -1
  223. package/dist/esm/internals/ReportBuilder/PivotList.js +21 -15
  224. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts +3 -2
  225. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  226. package/dist/esm/internals/ReportBuilder/PivotModal.js +9 -9
  227. package/dist/esm/models/Client.d.ts +16 -2
  228. package/dist/esm/models/Client.d.ts.map +1 -1
  229. package/dist/esm/models/Dashboard.d.ts +1 -1
  230. package/dist/esm/models/Dashboard.d.ts.map +1 -1
  231. package/dist/esm/models/Filter.d.ts +4 -3
  232. package/dist/esm/models/Filter.d.ts.map +1 -1
  233. package/dist/esm/models/Filter.js +36 -0
  234. package/dist/esm/utils/astProcessing.d.ts +3 -3
  235. package/dist/esm/utils/astProcessing.d.ts.map +1 -1
  236. package/dist/esm/utils/client.d.ts.map +1 -1
  237. package/dist/esm/utils/client.js +2 -7
  238. package/dist/esm/utils/dashboard.d.ts +5 -5
  239. package/dist/esm/utils/dashboard.d.ts.map +1 -1
  240. package/dist/esm/utils/dashboard.js +90 -9
  241. package/dist/esm/utils/dataFetcher.d.ts +4 -4
  242. package/dist/esm/utils/dataFetcher.d.ts.map +1 -1
  243. package/dist/esm/utils/dataFetcher.js +1 -1
  244. package/dist/esm/utils/filterProcessing.d.ts.map +1 -1
  245. package/dist/esm/utils/filterProcessing.js +2 -8
  246. package/dist/esm/utils/paginationProcessing.js +1 -1
  247. package/dist/esm/utils/pivotConstructor.d.ts +2 -2
  248. package/dist/esm/utils/pivotConstructor.d.ts.map +1 -1
  249. package/dist/esm/utils/pivotConstructor.js +1 -1
  250. package/dist/esm/utils/pivotProcessing.d.ts.map +1 -1
  251. package/dist/esm/utils/pivotProcessing.js +6 -2
  252. package/dist/esm/utils/queryConstructor.d.ts.map +1 -1
  253. package/dist/esm/utils/queryConstructor.js +12 -9
  254. package/dist/esm/utils/report.d.ts +6 -5
  255. package/dist/esm/utils/report.d.ts.map +1 -1
  256. package/dist/esm/utils/report.js +70 -25
  257. package/dist/esm/utils/schema.d.ts +3 -3
  258. package/dist/esm/utils/schema.d.ts.map +1 -1
  259. package/dist/esm/utils/schema.js +39 -35
  260. package/dist/esm/utils/tableProcessing.d.ts +18 -11
  261. package/dist/esm/utils/tableProcessing.d.ts.map +1 -1
  262. package/dist/esm/utils/tableProcessing.js +41 -20
  263. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useOnClickOutside } from '../hooks';
3
3
  import { LoadingSpinner } from './UiComponents';
4
- import React, { useContext, useEffect, useRef, useState, } from 'react';
4
+ import React, { useContext, useEffect, useMemo, useRef, useState, } from 'react';
5
5
  import { ThemeContext } from '../Context';
6
6
  /**
7
7
  * Helper function for displaying option labels
@@ -28,27 +28,15 @@ export function QuillMultiSelectComponentWithCombo({ options, width, onChange, l
28
28
  const modalRef = useRef(null);
29
29
  const debounceTimeoutId = useRef(null);
30
30
  const [searchQuery, setSearchQuery] = React.useState('');
31
- const [filteredItems, setFilteredItems] = React.useState(options.slice(0, 20));
31
+ const [exceedsLimit, setExceedsLimit] = useState(false);
32
32
  useEffect(() => {
33
- setFilteredItems(options.slice(0, 20));
33
+ if (options.length > 0 && options?.[0]?.value === 'EXCEEDS_LIMIT') {
34
+ setExceedsLimit(true);
35
+ }
36
+ else {
37
+ setExceedsLimit(false);
38
+ }
34
39
  }, [options]);
35
- const handleSearchChange = (value) => {
36
- setSearchQuery(value);
37
- const curFilteredItems = value === ''
38
- ? options.slice(0, 20)
39
- : options
40
- .filter((option) => {
41
- if (!option) {
42
- return false;
43
- }
44
- return option.value
45
- .toLowerCase()
46
- .replace(/\s+/g, '')
47
- .includes(value.toLowerCase().replace(/\s+/g, ''));
48
- })
49
- .slice(0, 20);
50
- setFilteredItems(curFilteredItems);
51
- };
52
40
  useOnClickOutside(modalRef, () => setShowModal(false));
53
41
  useEffect(() => {
54
42
  if (!value) {
@@ -66,14 +54,43 @@ export function QuillMultiSelectComponentWithCombo({ options, width, onChange, l
66
54
  onChange(updatedChangeEvent);
67
55
  }, 500);
68
56
  };
69
- // const filterOptions = (query: string) => {
70
- // setSearchQuery(query);
71
- // setFilteredOptions(
72
- // options.filter((option) =>
73
- // option.label.toLowerCase().includes(query.toLowerCase()),
74
- // ),
75
- // );
76
- // };
57
+ const filteredItems = React.useMemo(function () {
58
+ // Sort null to top
59
+ if (searchQuery === '') {
60
+ return options.sort((a, b) => {
61
+ if (a.value === null) {
62
+ return -1;
63
+ }
64
+ if (b.value === null) {
65
+ return 1;
66
+ }
67
+ return 0;
68
+ });
69
+ }
70
+ return options
71
+ .filter((option) => {
72
+ if (!option) {
73
+ return false;
74
+ }
75
+ return option.value
76
+ .toLowerCase()
77
+ .replace(/\s+/g, '')
78
+ .includes(searchQuery.toLowerCase().replace(/\s+/g, ''));
79
+ })
80
+ .sort((a, b) => {
81
+ if (a.value === null) {
82
+ return -1;
83
+ }
84
+ if (b.value === null) {
85
+ return 1;
86
+ }
87
+ return a.label.localeCompare(b.label);
88
+ })
89
+ .slice(0, 20);
90
+ }, [options, searchQuery]);
91
+ const nullLabel = useMemo(() => {
92
+ return filteredItems.some((item) => item.value === '-') ? 'None' : '-';
93
+ }, [filteredItems]);
77
94
  return (_jsxs("div", { style: {
78
95
  position: 'relative',
79
96
  borderRadius: '6px',
@@ -85,7 +102,7 @@ export function QuillMultiSelectComponentWithCombo({ options, width, onChange, l
85
102
  fontFamily: theme?.fontFamily,
86
103
  paddingBottom: 5,
87
104
  fontWeight: 600,
88
- }, children: label })), _jsxs("button", { style: {
105
+ }, children: label ?? nullLabel })), _jsxs("button", { style: {
89
106
  fontFamily: theme?.fontFamily,
90
107
  color: theme?.primaryTextColor,
91
108
  width: '100%',
@@ -134,9 +151,14 @@ export function QuillMultiSelectComponentWithCombo({ options, width, onChange, l
134
151
  maxHeight: '50vh',
135
152
  overflow: 'scroll',
136
153
  fontSize: 14,
137
- }, children: [options && options.length > 20 && !isLoading && (_jsx(ListboxTextInput, { value: searchQuery, placeholder: "Search", onChange: (value) => {
138
- handleSearchChange(value);
139
- } })), options && options.length > 20 && (_jsx("div", { style: { height: 9, width: 230, borderTop: '1px solid #e7e7e7' } })), (!filteredItems || filteredItems.length === 0) && !isLoading && (_jsxs("div", { style: {
154
+ }, children: [!exceedsLimit && options && options.length > 20 && (_jsx(ListboxTextInput, { value: searchQuery, placeholder: "Search", onChange: (value) => {
155
+ setSearchQuery(value);
156
+ } })), !exceedsLimit && options && options.length > 20 && (_jsx("div", { style: {
157
+ height: 9,
158
+ width: 230,
159
+ borderTop: '1px solid #e7e7e7',
160
+ } })), !isLoading &&
161
+ (!filteredItems || filteredItems.length === 0 || exceedsLimit) && (_jsxs("div", { style: {
140
162
  display: 'flex',
141
163
  alignItems: 'center',
142
164
  padding: 8,
@@ -155,18 +177,18 @@ export function QuillMultiSelectComponentWithCombo({ options, width, onChange, l
155
177
  gap: 6,
156
178
  overflow: 'hidden',
157
179
  }, children: [_jsx("style", { children: `
158
- .quill-option {
159
- background: white;
160
- }
161
- .quill-option:hover {
162
- background: #F4F4F5;
180
+ .quill-option {
181
+ background: white;
163
182
  }
164
- ` }), _jsx("span", { style: {
183
+ .quill-option:hover {
184
+ background: #F4F4F5;
185
+ }
186
+ ` }), _jsx("span", { style: {
165
187
  textOverflow: 'ellipsis',
166
188
  whiteSpace: 'nowrap',
167
189
  overflow: 'hidden',
168
190
  cursor: 'default',
169
- }, children: "No options available" })] })), !isLoading ? (filteredItems.map((option) => (_jsxs("button", { style: {
191
+ }, children: exceedsLimit ? 'Too many options' : 'No options available' })] })), !exceedsLimit && !isLoading ? (filteredItems.map((option) => (_jsxs("button", { style: {
170
192
  display: 'flex',
171
193
  alignItems: 'center',
172
194
  padding: 8,
@@ -207,17 +229,17 @@ export function QuillMultiSelectComponentWithCombo({ options, width, onChange, l
207
229
  }
208
230
  debounce(updatedChangeEvent);
209
231
  }, children: [_jsx("style", { children: `
210
- .quill-option {
211
- background: white;
212
- }
213
- .quill-option:hover {
214
- background: #F4F4F5;
232
+ .quill-option {
233
+ background: white;
215
234
  }
216
- ` }), _jsx("input", { type: "checkbox", checked: selectedOptions.includes(option.value), style: { width: '14px', height: '14px', margin: 'auto 0' }, readOnly: true }), _jsx("span", { style: {
235
+ .quill-option:hover {
236
+ background: #F4F4F5;
237
+ }
238
+ ` }), _jsx("input", { type: "checkbox", checked: selectedOptions.includes(option.value), style: { width: '14px', height: '14px', margin: 'auto 0' }, readOnly: true }), _jsx("span", { style: {
217
239
  textOverflow: 'ellipsis',
218
240
  whiteSpace: 'nowrap',
219
241
  overflow: 'hidden',
220
- }, children: option.label })] }, option.value)))) : (_jsx(LoadingSpinner, {}))] }))] }));
242
+ }, children: option.label ?? nullLabel })] }, option.value)))) : isLoading ? (_jsx("div", { children: _jsx(LoadingSpinner, {}) })) : null] }))] }));
221
243
  }
222
244
  export const ListboxTextInput = ({ value, onChange, placeholder, }) => {
223
245
  return (_jsxs("div", { style: {
@@ -2,5 +2,5 @@ import { SelectComponentProps } from './UiComponents';
2
2
  /**
3
3
  * A robust select component that implements the new minimal Select interface.
4
4
  */
5
- export declare function QuillSelectComponent({ options, value, width, onChange, label, isLoading, }: SelectComponentProps): import("react/jsx-runtime").JSX.Element;
5
+ export declare function QuillSelectComponent({ options, value, width, onChange, label, isLoading, disabled, hideEmptyOption, }: SelectComponentProps): import("react/jsx-runtime").JSX.Element;
6
6
  //# sourceMappingURL=QuillSelect.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"QuillSelect.d.ts","sourceRoot":"","sources":["../../../src/components/QuillSelect.tsx"],"names":[],"mappings":"AACA,OAAO,EAAkB,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAItE;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,EACnC,OAAO,EACP,KAAK,EACL,KAAK,EACL,QAAQ,EACR,KAAK,EACL,SAAS,GACV,EAAE,oBAAoB,2CAiNtB"}
1
+ {"version":3,"file":"QuillSelect.d.ts","sourceRoot":"","sources":["../../../src/components/QuillSelect.tsx"],"names":[],"mappings":"AACA,OAAO,EAAkB,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAItE;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,EACnC,OAAO,EACP,KAAK,EACL,KAAK,EACL,QAAQ,EACR,KAAK,EACL,SAAS,EACT,QAAQ,EACR,eAAe,GAChB,EAAE,oBAAoB,2CA8OtB"}
@@ -1,16 +1,31 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useOnClickOutside } from '../hooks';
3
3
  import { LoadingSpinner } from './UiComponents';
4
- import { useContext, useRef, useState } from 'react';
4
+ import { useContext, useMemo, useRef, useState } from 'react';
5
5
  import { ThemeContext } from '../Context';
6
6
  /**
7
7
  * A robust select component that implements the new minimal Select interface.
8
8
  */
9
- export function QuillSelectComponent({ options, value, width, onChange, label, isLoading, }) {
9
+ export function QuillSelectComponent({ options, value, width, onChange, label, isLoading, disabled, hideEmptyOption, }) {
10
10
  const [theme] = useContext(ThemeContext);
11
11
  const [showModal, setShowModal] = useState(false);
12
12
  const modalRef = useRef(null);
13
13
  useOnClickOutside(modalRef, () => setShowModal(false));
14
+ const sortedItems = useMemo(() => {
15
+ // Sort null to top
16
+ return options.sort((a, b) => {
17
+ if (a.value === null) {
18
+ return -1;
19
+ }
20
+ if (b.value === null) {
21
+ return 1;
22
+ }
23
+ return 0;
24
+ });
25
+ }, [options]);
26
+ const nullLabel = useMemo(() => {
27
+ return sortedItems.some((item) => item.value === '-') ? 'None' : '-';
28
+ }, [sortedItems]);
14
29
  return (_jsxs("div", { style: {
15
30
  position: 'relative',
16
31
  // width: 200,
@@ -24,7 +39,7 @@ export function QuillSelectComponent({ options, value, width, onChange, label, i
24
39
  fontFamily: theme?.fontFamily,
25
40
  paddingBottom: 5,
26
41
  fontWeight: 600,
27
- }, children: label })), _jsxs("button", { style: {
42
+ }, children: label ?? nullLabel })), _jsxs("button", { style: {
28
43
  fontFamily: theme?.fontFamily,
29
44
  color: theme?.primaryTextColor,
30
45
  width: '100%',
@@ -45,7 +60,14 @@ export function QuillSelectComponent({ options, value, width, onChange, label, i
45
60
  height: 40,
46
61
  minHeight: 40,
47
62
  maxHeight: 40,
48
- }, className: "quill-select-button", onClick: () => setShowModal((showModal) => !showModal), children: [_jsx("style", { children: ` .quill-select-button { background: ${theme?.backgroundColor}; } .quill-select-button:hover { background: ${theme?.hoverBackgroundColor}; }` }), _jsx("span", { style: {
63
+ }, className: "quill-select-button", onClick: () => setShowModal((showModal) => !showModal), disabled: disabled, children: [_jsx("style", { children: `
64
+ .quill-select-button { background: ${theme?.backgroundColor}; }
65
+ .quill-select-button:hover { background: ${theme?.hoverBackgroundColor}; }
66
+ .quill-select-button:disabled {
67
+ opacity: 0.5;
68
+ cursor: not-allowed;
69
+ }
70
+ ` }), _jsx("span", { style: {
49
71
  textOverflow: 'ellipsis',
50
72
  whiteSpace: 'nowrap',
51
73
  overflow: 'hidden',
@@ -69,7 +91,7 @@ export function QuillSelectComponent({ options, value, width, onChange, label, i
69
91
  fontFamily: theme?.fontFamily,
70
92
  maxHeight: '50vh',
71
93
  overflow: 'scroll',
72
- }, children: [!isLoading && (_jsxs("button", { style: {
94
+ }, children: [!isLoading && !hideEmptyOption && (_jsxs("button", { style: {
73
95
  display: 'flex',
74
96
  alignItems: 'center',
75
97
  justifyContent: 'space-between',
@@ -92,7 +114,7 @@ export function QuillSelectComponent({ options, value, width, onChange, label, i
92
114
  const changeEvent = { target: { value: '' } };
93
115
  onChange(changeEvent);
94
116
  setShowModal(false);
95
- }, children: [_jsx("style", { children: `
117
+ }, disabled: disabled, children: [_jsx("style", { children: `
96
118
  .quill-option {
97
119
  background: white;
98
120
  }
@@ -122,7 +144,7 @@ export function QuillSelectComponent({ options, value, width, onChange, label, i
122
144
  const changeEvent = { target: { value: option.value } };
123
145
  onChange(changeEvent);
124
146
  setShowModal(false);
125
- }, children: [_jsx("style", { children: `
147
+ }, disabled: disabled, children: [_jsx("style", { children: `
126
148
  .quill-option {
127
149
  background: white;
128
150
  }
@@ -133,5 +155,5 @@ export function QuillSelectComponent({ options, value, width, onChange, label, i
133
155
  textOverflow: 'ellipsis',
134
156
  whiteSpace: 'nowrap',
135
157
  overflow: 'hidden',
136
- }, children: option.label })] }, option.label)))) : (_jsx(LoadingSpinner, {}))] }))] }));
158
+ }, children: option.label ?? '-' })] }, option.label)))) : (_jsx(LoadingSpinner, {}))] }))] }));
137
159
  }
@@ -2,5 +2,5 @@ import { SelectComponentProps } from './UiComponents';
2
2
  /**
3
3
  * A robust select component that implements the new minimal Select interface.
4
4
  */
5
- export declare function QuillSelectComponentWithCombo({ options, value, width, onChange, label, isLoading, }: SelectComponentProps): import("react/jsx-runtime").JSX.Element;
5
+ export declare function QuillSelectComponentWithCombo({ options, value, width, onChange, label, isLoading, hideEmptyOption, }: SelectComponentProps): import("react/jsx-runtime").JSX.Element;
6
6
  //# sourceMappingURL=QuillSelectWithCombo.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"QuillSelectWithCombo.d.ts","sourceRoot":"","sources":["../../../src/components/QuillSelectWithCombo.tsx"],"names":[],"mappings":"AACA,OAAO,EAAkB,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAWtE;;GAEG;AACH,wBAAgB,6BAA6B,CAAC,EAC5C,OAAO,EACP,KAAK,EACL,KAAK,EACL,QAAQ,EACR,KAAK,EACL,SAAS,GACV,EAAE,oBAAoB,2CAwPtB"}
1
+ {"version":3,"file":"QuillSelectWithCombo.d.ts","sourceRoot":"","sources":["../../../src/components/QuillSelectWithCombo.tsx"],"names":[],"mappings":"AACA,OAAO,EAAkB,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAWtE;;GAEG;AACH,wBAAgB,6BAA6B,CAAC,EAC5C,OAAO,EACP,KAAK,EACL,KAAK,EACL,QAAQ,EACR,KAAK,EACL,SAAS,EACT,eAAe,GAChB,EAAE,oBAAoB,2CA8QtB"}
@@ -1,39 +1,60 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useOnClickOutside } from '../hooks';
3
3
  import { LoadingSpinner } from './UiComponents';
4
- import React, { useContext, useEffect, useRef, useState, } from 'react';
4
+ import React, { useContext, useMemo, useRef, useState, } from 'react';
5
5
  import { ThemeContext } from '../Context';
6
6
  import { ListboxTextInput } from './QuillMultiSelectWithCombo';
7
7
  /**
8
8
  * A robust select component that implements the new minimal Select interface.
9
9
  */
10
- export function QuillSelectComponentWithCombo({ options, value, width, onChange, label, isLoading, }) {
10
+ export function QuillSelectComponentWithCombo({ options, value, width, onChange, label, isLoading, hideEmptyOption, }) {
11
11
  const [theme] = useContext(ThemeContext);
12
12
  const [showModal, setShowModal] = useState(false);
13
13
  const modalRef = useRef(null);
14
14
  const [searchQuery, setSearchQuery] = React.useState('');
15
- const [filteredItems, setFilteredItems] = React.useState([]);
16
- useOnClickOutside(modalRef, () => setShowModal(false));
17
- useEffect(() => {
18
- setFilteredItems(options.slice(0, 20));
19
- }, [options]);
20
- const handleSearchChange = (value) => {
21
- setSearchQuery(value);
22
- const curFilteredItems = value === ''
23
- ? options.slice(0, 20)
24
- : options
25
- .filter((option) => {
26
- if (!option) {
27
- return false;
15
+ const filteredItems = React.useMemo(function () {
16
+ // Sort null to top
17
+ if (searchQuery === '') {
18
+ return options.sort((a, b) => {
19
+ if (a.value === null) {
20
+ return -1;
21
+ }
22
+ if (b.value === null) {
23
+ return 1;
28
24
  }
29
- return option.value
30
- .toLowerCase()
31
- .replace(/\s+/g, '')
32
- .includes(value.toLowerCase().replace(/\s+/g, ''));
33
- })
34
- .slice(0, 20);
35
- setFilteredItems(curFilteredItems);
36
- };
25
+ return 0;
26
+ });
27
+ }
28
+ return options
29
+ .filter((option) => {
30
+ if (!option) {
31
+ return false;
32
+ }
33
+ return option.value
34
+ .toLowerCase()
35
+ .replace(/\s+/g, '')
36
+ .includes(searchQuery.toLowerCase().replace(/\s+/g, ''));
37
+ })
38
+ .sort((a, b) => {
39
+ if (a.value === null) {
40
+ return -1;
41
+ }
42
+ if (b.value === null) {
43
+ return 1;
44
+ }
45
+ return a.label.localeCompare(b.label);
46
+ })
47
+ .slice(0, 20);
48
+ }, [options, searchQuery]);
49
+ const nullLabel = useMemo(() => {
50
+ return filteredItems.some((item) => item.value === '-') ? 'None' : '-';
51
+ }, [filteredItems]);
52
+ const selectedLabel = useMemo(() => {
53
+ const selectedOption = options.find((elem) => elem.value === value);
54
+ return selectedOption && selectedOption.label == null
55
+ ? nullLabel
56
+ : selectedOption?.label ?? 'Select';
57
+ }, [value, options, nullLabel]);
37
58
  useOnClickOutside(modalRef, () => setShowModal(false));
38
59
  return (_jsxs("div", { style: {
39
60
  position: 'relative',
@@ -73,7 +94,7 @@ export function QuillSelectComponentWithCombo({ options, value, width, onChange,
73
94
  textOverflow: 'ellipsis',
74
95
  whiteSpace: 'nowrap',
75
96
  overflow: 'hidden',
76
- }, children: options.find((elem) => elem.value === value)?.label || 'Select' }), _jsx("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 20 20", fill: "currentColor", "aria-hidden": "true", "data-slot": "icon", height: 20, width: 20, style: { minHeight: 20, minWidth: 20 }, children: _jsx("path", { fillRule: "evenodd", d: "M5.22 8.22a.75.75 0 0 1 1.06 0L10 11.94l3.72-3.72a.75.75 0 1 1 1.06 1.06l-4.25 4.25a.75.75 0 0 1-1.06 0L5.22 9.28a.75.75 0 0 1 0-1.06Z", clipRule: "evenodd" }) })] }), showModal && (_jsxs("div", { ref: modalRef, style: {
97
+ }, children: selectedLabel }), _jsx("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 20 20", fill: "currentColor", "aria-hidden": "true", "data-slot": "icon", height: 20, width: 20, style: { minHeight: 20, minWidth: 20 }, children: _jsx("path", { fillRule: "evenodd", d: "M5.22 8.22a.75.75 0 0 1 1.06 0L10 11.94l3.72-3.72a.75.75 0 1 1 1.06 1.06l-4.25 4.25a.75.75 0 0 1-1.06 0L5.22 9.28a.75.75 0 0 1 0-1.06Z", clipRule: "evenodd" }) })] }), showModal && (_jsxs("div", { ref: modalRef, style: {
77
98
  position: 'absolute',
78
99
  width: '100%',
79
100
  display: 'flex',
@@ -95,8 +116,8 @@ export function QuillSelectComponentWithCombo({ options, value, width, onChange,
95
116
  overflow: 'scroll',
96
117
  fontSize: 14,
97
118
  }, children: [options && options.length > 20 && !isLoading && (_jsx(ListboxTextInput, { value: searchQuery, placeholder: "Search", onChange: (value) => {
98
- handleSearchChange(value);
99
- } })), searchQuery === '' && !isLoading && (_jsxs("button", { style: {
119
+ setSearchQuery(value);
120
+ } })), searchQuery === '' && !isLoading && !hideEmptyOption && (_jsxs("button", { style: {
100
121
  display: 'flex',
101
122
  alignItems: 'center',
102
123
  justifyContent: 'space-between',
@@ -160,5 +181,5 @@ export function QuillSelectComponentWithCombo({ options, value, width, onChange,
160
181
  textOverflow: 'ellipsis',
161
182
  whiteSpace: 'nowrap',
162
183
  overflow: 'hidden',
163
- }, children: option.label })] }, option.value)))) : (_jsx(LoadingSpinner, {}))] }))] }));
184
+ }, children: option.label ?? nullLabel })] }, option.value)))) : (_jsx(LoadingSpinner, {}))] }))] }));
164
185
  }
@@ -3,11 +3,12 @@ import { ButtonComponentProps } from './UiComponents';
3
3
  export interface TableComponentProps {
4
4
  rows: object[];
5
5
  rowCount?: number;
6
+ rowCountIsLoading?: boolean;
6
7
  columns: {
7
8
  label: string;
8
9
  field: string;
9
10
  }[];
10
- currentPage?: number;
11
+ currentPage: number;
11
12
  sort?: {
12
13
  field: string;
13
14
  direction: string;
@@ -27,5 +28,5 @@ export interface TableComponentProps {
27
28
  direction: string;
28
29
  }) => void;
29
30
  }
30
- export default function QuillTable({ rows, rowCount, columns, isLoading, currentPage, sort, hideCSVDownloadButton, containerStyle, className, LoadingComponent, rowsPerPage, emptyStateLabel, downloadCSV, onPageChange, onSortChange, }: TableComponentProps): import("react/jsx-runtime").JSX.Element;
31
+ export default function QuillTable({ rows, rowCount, rowCountIsLoading, columns, isLoading, currentPage, sort, hideCSVDownloadButton, containerStyle, className, LoadingComponent, rowsPerPage, emptyStateLabel, downloadCSV, onPageChange, onSortChange, }: TableComponentProps): import("react/jsx-runtime").JSX.Element;
31
32
  //# sourceMappingURL=QuillTable.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"QuillTable.d.ts","sourceRoot":"","sources":["../../../src/components/QuillTable.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA0C,MAAM,OAAO,CAAC;AAG/D,OAAO,EAAE,oBAAoB,EAAyB,MAAM,gBAAgB,CAAC;AAE7E,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACrC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;IACrC,0BAA0B,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC1E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CACrE;AAED,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EACjC,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,SAAS,EACT,WAAW,EACX,IAAI,EACJ,qBAA4B,EAC5B,cAAc,EACd,SAAS,EACT,gBAAwC,EACxC,WAAgB,EAChB,eAA8B,EAC9B,WAAW,EACX,YAAY,EACZ,YAAY,GACb,EAAE,mBAAmB,2CA+crB"}
1
+ {"version":3,"file":"QuillTable.d.ts","sourceRoot":"","sources":["../../../src/components/QuillTable.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA0C,MAAM,OAAO,CAAC;AAG/D,OAAO,EAAE,oBAAoB,EAAyB,MAAM,gBAAgB,CAAC;AAE7E,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC5C,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACrC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;IACrC,0BAA0B,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC1E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CACrE;AAED,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EACjC,IAAI,EACJ,QAAQ,EACR,iBAAiB,EACjB,OAAO,EACP,SAAS,EACT,WAAW,EACX,IAAI,EACJ,qBAA4B,EAC5B,cAAc,EACd,SAAS,EACT,gBAAwC,EACxC,WAAgB,EAChB,eAA8B,EAC9B,WAAW,EACX,YAAY,EACZ,YAAY,GACb,EAAE,mBAAmB,2CA+drB"}
@@ -3,26 +3,25 @@ import { useContext, useEffect, useState } from 'react';
3
3
  import { compareValues } from '../utils/valueFormatter';
4
4
  import { ThemeContext } from '../Context';
5
5
  import { QuillLoadingComponent } from './UiComponents';
6
- export default function QuillTable({ rows, rowCount, columns, isLoading, currentPage, sort, hideCSVDownloadButton = true, containerStyle, className, LoadingComponent = QuillLoadingComponent, rowsPerPage = 10, emptyStateLabel = 'No results', downloadCSV, onPageChange, onSortChange, }) {
6
+ export default function QuillTable({ rows, rowCount, rowCountIsLoading, columns, isLoading, currentPage, sort, hideCSVDownloadButton = true, containerStyle, className, LoadingComponent = QuillLoadingComponent, rowsPerPage = 10, emptyStateLabel = 'No results', downloadCSV, onPageChange, onSortChange, }) {
7
7
  const [activeRows, setActiveRows] = useState([]);
8
- const [pageIndex, setPageIndex] = useState(currentPage || 0);
9
8
  const [maxPage, setMaxPage] = useState(1);
10
9
  const [sortColumn, setSortColumn] = useState(sort?.field || '');
11
10
  const [sortDirection, setSortDirection] = useState(sort?.direction || 'desc');
12
11
  const [theme] = useContext(ThemeContext);
13
12
  const [isPaginating, setIsPaginating] = useState(true);
14
- const [initialLoad, setInitialLoad] = useState(isLoading);
13
+ const [initialLoad, setInitialLoad] = useState(true);
15
14
  useEffect(() => {
16
15
  setSortColumn(sort?.field || '');
17
16
  setSortDirection(sort?.direction || 'desc');
18
17
  }, [sort]);
19
18
  useEffect(() => {
20
- setIsPaginating(true);
21
19
  if (rows?.length === 0 && isLoading) {
22
20
  return;
23
21
  }
24
- const start = pageIndex * rowsPerPage;
25
- const end = (pageIndex + 1) * rowsPerPage;
22
+ setIsPaginating(true);
23
+ const start = currentPage * rowsPerPage;
24
+ const end = (currentPage + 1) * rowsPerPage;
26
25
  if (rowCount && onSortChange && rowCount !== rows.length) {
27
26
  setMaxPage(Math.ceil(rowCount / rowsPerPage));
28
27
  setActiveRows(rows.slice(start, end));
@@ -40,25 +39,29 @@ export default function QuillTable({ rows, rowCount, columns, isLoading, current
40
39
  }
41
40
  setIsPaginating(false);
42
41
  setInitialLoad(false);
43
- }, [pageIndex, rows, sortColumn, sortDirection, columns, rowCount]);
42
+ }, [currentPage, rows, sortColumn, sortDirection, columns, rowCount]);
43
+ useEffect(() => {
44
+ if (rows.length < (currentPage + 1) * rowsPerPage) {
45
+ onPageChange && onPageChange(0);
46
+ setMaxPage(1);
47
+ }
48
+ }, [rows]);
44
49
  const increasePage = () => {
45
- if (pageIndex + 1 === maxPage) {
50
+ if (!rowCountIsLoading && currentPage + 1 === maxPage) {
46
51
  return;
47
52
  }
48
- setPageIndex((pageIndex) => pageIndex + 1);
49
- onPageChange && onPageChange(pageIndex + 1);
53
+ onPageChange && onPageChange(currentPage + 1);
50
54
  };
51
55
  const decreasePage = () => {
52
- if (pageIndex === 0) {
56
+ if (currentPage === 0) {
53
57
  return;
54
58
  }
55
- setPageIndex((pageIndex) => pageIndex - 1);
56
- onPageChange && onPageChange(pageIndex - 1);
59
+ onPageChange && onPageChange(currentPage - 1);
57
60
  };
58
61
  const toggleSort = (column) => {
59
62
  if (sortColumn === column.field) {
60
63
  setSortDirection(sortDirection === 'asc' ? 'desc' : 'asc');
61
- setPageIndex(0);
64
+ onPageChange && onPageChange(0);
62
65
  if (onSortChange) {
63
66
  onSortChange({
64
67
  field: column.field,
@@ -69,7 +72,7 @@ export default function QuillTable({ rows, rowCount, columns, isLoading, current
69
72
  else {
70
73
  setSortColumn(column.field);
71
74
  setSortDirection('desc');
72
- setPageIndex(0);
75
+ onPageChange && onPageChange(0);
73
76
  if (onSortChange) {
74
77
  onSortChange({
75
78
  field: column.field,
@@ -102,6 +105,7 @@ export default function QuillTable({ rows, rowCount, columns, isLoading, current
102
105
  margin: 0,
103
106
  boxSizing: 'border-box',
104
107
  outline: 'none',
108
+ position: 'relative',
105
109
  }, children: _jsxs("div", { role: "table", className: "table", style: {
106
110
  display: 'flex',
107
111
  flexDirection: 'column',
@@ -121,8 +125,9 @@ export default function QuillTable({ rows, rowCount, columns, isLoading, current
121
125
  boxSizing: 'border-box',
122
126
  marginBottom: '-1px', // avoid double border
123
127
  }, children: columns &&
124
- columns.map((column, index) => (_jsxs("div", { onClick: () => {
128
+ columns.map((column, index) => (_jsxs("div", { onClick: (e) => {
125
129
  toggleSort(column);
130
+ e.stopPropagation();
126
131
  }, style: {
127
132
  boxSizing: 'border-box',
128
133
  flex: '150 0 auto',
@@ -165,7 +170,7 @@ export default function QuillTable({ rows, rowCount, columns, isLoading, current
165
170
  transform: sortDirection === 'desc'
166
171
  ? 'rotate(180deg)'
167
172
  : undefined,
168
- }, children: _jsx("path", { fillRule: "evenodd", d: "M10 3a.75.75 0 01.75.75v10.638l3.96-4.158a.75.75 0 111.08 1.04l-5.25 5.5a.75.75 0 01-1.08 0l-5.25-5.5a.75.75 0 111.08-1.04l3.96 4.158V3.75A.75.75 0 0110 3z", clipRule: "evenodd" }) }))] }, 'sqlcol' + index))) }) }), (isPaginating || isLoading) && (_jsx("div", { className: className, children: _jsx(LoadingComponent, {}) })), (activeRows && activeRows.length === 0) ||
173
+ }, children: _jsx("path", { fillRule: "evenodd", d: "M10 3a.75.75 0 01.75.75v10.638l3.96-4.158a.75.75 0 111.08 1.04l-5.25 5.5a.75.75 0 01-1.08 0l-5.25-5.5a.75.75 0 111.08-1.04l3.96 4.158V3.75A.75.75 0 0110 3z", clipRule: "evenodd" }) }))] }, 'sqlcol' + index))) }) }), (isPaginating || isLoading) && (_jsx("div", { className: className, style: { position: 'absolute', width: '100%' }, children: _jsx(LoadingComponent, {}) })), (activeRows && activeRows.length === 0) ||
169
174
  (columns && columns.length === 0) ? (_jsx("div", { style: {
170
175
  padding: '30px 0',
171
176
  display: isPaginating || isLoading ? 'none' : 'flex',
@@ -175,6 +180,8 @@ export default function QuillTable({ rows, rowCount, columns, isLoading, current
175
180
  alignItems: 'center',
176
181
  fontSize: 13,
177
182
  color: theme?.secondaryTextColor || 'rgb(55, 65, 81)',
183
+ position: 'absolute',
184
+ width: '100%',
178
185
  }, children: emptyStateLabel })) : (_jsx("div", { role: "rowgroup", className: "tbody", children: activeRows &&
179
186
  activeRows.map((row, rowIndex) => (_jsx("div", { role: "row", className: "tr", style: {
180
187
  display: isPaginating || isLoading ? 'none' : 'flex',
@@ -259,11 +266,17 @@ export default function QuillTable({ rows, rowCount, columns, isLoading, current
259
266
  fontSize: 12,
260
267
  fontFamily: theme?.fontFamily,
261
268
  color: theme?.primaryTextColor,
262
- }, children: [pageIndex + 1, ' of ', maxPage] }), _jsx("div", { style: { width: 8 } }), _jsx("button", { onClick: decreasePage, style: {
269
+ }, children: [currentPage + 1, ' of ', rowCountIsLoading && maxPage > 1 ? 'many' : maxPage] }), _jsx("div", { style: { width: 8 } }), _jsx("button", { onClick: (e) => {
270
+ decreasePage();
271
+ e.stopPropagation();
272
+ }, style: {
263
273
  cursor: 'pointer',
264
274
  border: 'none',
265
275
  background: 'transparent',
266
- }, children: _jsx("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 20 20", fill: theme?.chartLabelFontFamily || theme?.fontFamily, height: "16px", width: "16px", children: _jsx("path", { fillRule: "evenodd", d: "M12.79 5.23a.75.75 0 01-.02 1.06L8.832 10l3.938 3.71a.75.75 0 11-1.04 1.08l-4.5-4.25a.75.75 0 010-1.08l4.5-4.25a.75.75 0 011.06.02z", clipRule: "evenodd" }) }) }), _jsx("button", { onClick: increasePage, style: {
276
+ }, children: _jsx("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 20 20", fill: theme?.chartLabelFontFamily || theme?.fontFamily, height: "16px", width: "16px", children: _jsx("path", { fillRule: "evenodd", d: "M12.79 5.23a.75.75 0 01-.02 1.06L8.832 10l3.938 3.71a.75.75 0 11-1.04 1.08l-4.5-4.25a.75.75 0 010-1.08l4.5-4.25a.75.75 0 011.06.02z", clipRule: "evenodd" }) }) }), _jsx("button", { onClick: (e) => {
277
+ increasePage();
278
+ e.stopPropagation();
279
+ }, style: {
267
280
  cursor: 'pointer',
268
281
  border: 'none',
269
282
  background: 'transparent',
@@ -1,7 +1,7 @@
1
1
  /// <reference types="react" />
2
2
  import { ButtonComponentProps, TextInputComponentProps } from '../UiComponents';
3
3
  import { LimitPopoverComponentProps } from './ui';
4
- export declare const LimitSentence: ({ limit, handleDelete, setOpenPopover, onSave, popoverTitle, LimitPopover, EditPopover, TextInput, Button, SecondaryButton, }: {
4
+ export declare const LimitSentence: ({ limit, handleDelete, setOpenPopover, onSave, popoverTitle, LimitPopover, EditPopover, TextInput, Button, SecondaryButton, disabled, }: {
5
5
  limit: any;
6
6
  handleDelete: () => void;
7
7
  setOpenPopover: (arg: any) => void;
@@ -12,6 +12,7 @@ export declare const LimitSentence: ({ limit, handleDelete, setOpenPopover, onSa
12
12
  TextInput: any;
13
13
  Button: (props: ButtonComponentProps) => JSX.Element;
14
14
  SecondaryButton: (props: ButtonComponentProps) => JSX.Element;
15
+ disabled?: boolean | undefined;
15
16
  }) => import("react/jsx-runtime").JSX.Element;
16
17
  export interface AddLimitPopoverProps {
17
18
  onSave: (limit: number) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"AddLimitPopover.d.ts","sourceRoot":"","sources":["../../../../src/components/ReportBuilder/AddLimitPopover.tsx"],"names":[],"mappings":";AACA,OAAO,EACL,oBAAoB,EAIpB,uBAAuB,EACxB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,0BAA0B,EAAE,MAAM,MAAM,CAAC;AAElD,eAAO,MAAM,aAAa;WAYjB,GAAG;kBACI,MAAM,IAAI;0BACF,GAAG,KAAK,IAAI;qBACjB,GAAG,aAAa,GAAG,KAAK,IAAI;;0BAEvB,0BAA0B,KAAK,WAAW;iBACnD,GAAG;eACL,GAAG;oBACE,oBAAoB,KAAK,WAAW;6BAC3B,oBAAoB,KAAK,WAAW;6CAiC9D,CAAC;AAEF,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,kBAAkB,CAAC,EACf,CAAC,CAAC,KAAK,EAAE,uBAAuB,KAAK,GAAG,CAAC,OAAO,CAAC,GACjD,KAAK,CAAC,yBAAyB,CAC7B,uBAAuB,GAAG,KAAK,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAChE,CAAC;IACN,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IACtD,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;CAChE;AAED,eAAO,MAAM,eAAe,6FAQzB,oBAAoB,4CAwEtB,CAAC"}
1
+ {"version":3,"file":"AddLimitPopover.d.ts","sourceRoot":"","sources":["../../../../src/components/ReportBuilder/AddLimitPopover.tsx"],"names":[],"mappings":";AACA,OAAO,EACL,oBAAoB,EAIpB,uBAAuB,EACxB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,0BAA0B,EAAE,MAAM,MAAM,CAAC;AAElD,eAAO,MAAM,aAAa;WAajB,GAAG;kBACI,MAAM,IAAI;0BACF,GAAG,KAAK,IAAI;qBACjB,GAAG,aAAa,GAAG,KAAK,IAAI;;0BAEvB,0BAA0B,KAAK,WAAW;iBACnD,GAAG;eACL,GAAG;oBACE,oBAAoB,KAAK,WAAW;6BAC3B,oBAAoB,KAAK,WAAW;;6CAmC9D,CAAC;AAEF,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,kBAAkB,CAAC,EACf,CAAC,CAAC,KAAK,EAAE,uBAAuB,KAAK,GAAG,CAAC,OAAO,CAAC,GACjD,KAAK,CAAC,yBAAyB,CAC7B,uBAAuB,GAAG,KAAK,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAChE,CAAC;IACN,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IACtD,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;CAChE;AAED,eAAO,MAAM,eAAe,6FAQzB,oBAAoB,4CAwEtB,CAAC"}
@@ -1,13 +1,13 @@
1
1
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useState } from 'react';
3
3
  import { MemoizedButton, MemoizedSecondaryButton, QuillTextInput, } from '../UiComponents';
4
- export const LimitSentence = ({ limit, handleDelete, setOpenPopover, onSave, popoverTitle = 'Edit limit', LimitPopover, EditPopover, TextInput = QuillTextInput, Button = MemoizedButton, SecondaryButton = MemoizedSecondaryButton, }) => {
4
+ export const LimitSentence = ({ limit, handleDelete, setOpenPopover, onSave, popoverTitle = 'Edit limit', LimitPopover, EditPopover, TextInput = QuillTextInput, Button = MemoizedButton, SecondaryButton = MemoizedSecondaryButton, disabled = false, }) => {
5
5
  const [isOpen, setIsOpen] = useState(false);
6
6
  const handleClickDelete = () => {
7
7
  setOpenPopover(null);
8
8
  handleDelete();
9
9
  };
10
- return (_jsx("div", { style: { width: '100%' }, children: _jsx(LimitPopover, { isOpen: isOpen, setIsOpen: setIsOpen, limitLabel: `limit ${limit.value[0].value}`, onClickDelete: handleClickDelete, popoverTitle: popoverTitle, popoverChildren: _jsx(EditPopover, { onSave: (column, direction) => {
10
+ return (_jsx("div", { style: { width: '100%' }, children: _jsx(LimitPopover, { isOpen: isOpen, setIsOpen: setIsOpen, limitLabel: `limit ${limit.value[0].value}`, onClickDelete: handleClickDelete, disabled: disabled, popoverTitle: popoverTitle, popoverChildren: _jsx(EditPopover, { onSave: (column, direction) => {
11
11
  setIsOpen(false);
12
12
  onSave(column, direction);
13
13
  }, isEdit: true, onDelete: handleClickDelete, initialLimit: limit.value[0].value, TextInput: TextInput, Button: Button, SecondaryButton: SecondaryButton }) }) }));