@variocube/app-ui 1.14.5 → 1.16.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 (323) hide show
  1. package/esm/AppShell/AppShell.js +12 -12
  2. package/esm/AppShell/AppShell.js.map +1 -1
  3. package/esm/AppShell/index.js.map +1 -1
  4. package/esm/Input/ActionsMenu.js +1 -1
  5. package/esm/Input/ActionsMenu.js.map +1 -1
  6. package/esm/Input/EmailSenderField.js +3 -3
  7. package/esm/Input/EmailSenderField.js.map +1 -1
  8. package/esm/Input/Selector.js +2 -2
  9. package/esm/Input/Selector.js.map +1 -1
  10. package/esm/Paging/Paging.d.ts +1 -1
  11. package/esm/Paging/Paging.js +5 -5
  12. package/esm/Paging/Paging.js.map +1 -1
  13. package/esm/Paging/index.d.ts +2 -1
  14. package/esm/Paging/index.js.map +1 -1
  15. package/esm/VCThemeProvider/JetbrainsMonoFont.js +8 -8
  16. package/esm/VCThemeProvider/JetbrainsMonoFont.js.map +1 -1
  17. package/esm/VCThemeProvider/RobotoFont.js +8 -8
  18. package/esm/VCThemeProvider/RobotoFont.js.map +1 -1
  19. package/esm/VCThemeProvider/ThemeModeSwitcher.js +5 -5
  20. package/esm/VCThemeProvider/ThemeModeSwitcher.js.map +1 -1
  21. package/esm/VCThemeProvider/VCThemeProvider.d.ts +1 -1
  22. package/esm/VCThemeProvider/VCThemeProvider.js +21 -21
  23. package/esm/VCThemeProvider/VCThemeProvider.js.map +1 -1
  24. package/esm/audit/AuditChanges.js +9 -5
  25. package/esm/audit/AuditChanges.js.map +1 -1
  26. package/esm/audit/AuditTimeline.js +1 -1
  27. package/esm/audit/AuditTimeline.js.map +1 -1
  28. package/esm/audit/AuditTimelineItem.js +3 -3
  29. package/esm/audit/AuditTimelineItem.js.map +1 -1
  30. package/esm/audit/index.d.ts +1 -1
  31. package/esm/audit/index.js +1 -1
  32. package/esm/audit/index.js.map +1 -1
  33. package/esm/breadcrumbs.d.ts +2 -2
  34. package/esm/breadcrumbs.js +3 -3
  35. package/esm/breadcrumbs.js.map +1 -1
  36. package/esm/code/CodeBlock.d.ts +1 -1
  37. package/esm/code/CodeBlock.js +1 -1
  38. package/esm/code/CodeBlock.js.map +1 -1
  39. package/esm/confirm/ConfirmButton.js.map +1 -1
  40. package/esm/confirm/ConfirmDialog.js +1 -1
  41. package/esm/confirm/ConfirmDialog.js.map +1 -1
  42. package/esm/confirm/ConfirmMenuItem.js +1 -1
  43. package/esm/confirm/ConfirmMenuItem.js.map +1 -1
  44. package/esm/container/ContainerLayout.d.ts +1 -1
  45. package/esm/container/ContainerLayout.js +5 -5
  46. package/esm/container/ContainerLayout.js.map +1 -1
  47. package/esm/container/ContainerSettingsContext.d.ts +2 -2
  48. package/esm/container/ContainerSettingsContext.js +6 -6
  49. package/esm/container/ContainerSettingsContext.js.map +1 -1
  50. package/esm/container/ContainerWidthControl.js +2 -2
  51. package/esm/container/ContainerWidthControl.js.map +1 -1
  52. package/esm/container/index.d.ts +1 -1
  53. package/esm/container/index.js +1 -1
  54. package/esm/container/index.js.map +1 -1
  55. package/esm/content-table/ContentTable.d.ts +1 -1
  56. package/esm/content-table/ContentTable.js +26 -19
  57. package/esm/content-table/ContentTable.js.map +1 -1
  58. package/esm/content-table/UndrawEmpty.js.map +1 -1
  59. package/esm/content-table/index.js.map +1 -1
  60. package/esm/country/country-select.js.map +1 -1
  61. package/esm/country/index.d.ts +3 -3
  62. package/esm/country/index.js +3 -3
  63. package/esm/country/index.js.map +1 -1
  64. package/esm/country/locale-select.js +1 -1
  65. package/esm/country/locale-select.js.map +1 -1
  66. package/esm/country/locales.js +1 -1
  67. package/esm/country/locales.js.map +1 -1
  68. package/esm/country/phone-prefix-select.js +1 -1
  69. package/esm/country/phone-prefix-select.js.map +1 -1
  70. package/esm/cube/accessibility.js +2 -1
  71. package/esm/cube/accessibility.js.map +1 -1
  72. package/esm/data-table/DataTableColumnSettings.d.ts +1 -1
  73. package/esm/data-table/DataTableColumnSettings.js +2 -2
  74. package/esm/data-table/DataTableColumnSettings.js.map +1 -1
  75. package/esm/data-table/DataTableHeader.js +1 -1
  76. package/esm/data-table/DataTableHeader.js.map +1 -1
  77. package/esm/data-table/DataTableToolbar.js +1 -1
  78. package/esm/data-table/DataTableToolbar.js.map +1 -1
  79. package/esm/data-table/index.d.ts +4 -4
  80. package/esm/data-table/index.js +4 -4
  81. package/esm/data-table/index.js.map +1 -1
  82. package/esm/data-table/useDataTableColumnStorage.d.ts +9 -1
  83. package/esm/data-table/useDataTableColumnStorage.js +12 -5
  84. package/esm/data-table/useDataTableColumnStorage.js.map +1 -1
  85. package/esm/data-table/useDataTableStorage.d.ts +31 -6
  86. package/esm/data-table/useDataTableStorage.js +25 -5
  87. package/esm/data-table/useDataTableStorage.js.map +1 -1
  88. package/esm/date-pickers/PlainAdapterCommon.d.ts +1 -1
  89. package/esm/date-pickers/PlainAdapterCommon.js.map +1 -1
  90. package/esm/date-pickers/PlainDateAdapter.js.map +1 -1
  91. package/esm/date-pickers/PlainDatePicker.js +1 -1
  92. package/esm/date-pickers/PlainDatePicker.js.map +1 -1
  93. package/esm/date-pickers/PlainDatePicker.spec.js +2 -2
  94. package/esm/date-pickers/PlainDatePicker.spec.js.map +1 -1
  95. package/esm/date-pickers/PlainDateTimeAdapter.js.map +1 -1
  96. package/esm/date-pickers/PlainDateTimePicker.js +2 -2
  97. package/esm/date-pickers/PlainDateTimePicker.js.map +1 -1
  98. package/esm/date-pickers/PlainDateTimePicker.spec.js +2 -2
  99. package/esm/date-pickers/PlainDateTimePicker.spec.js.map +1 -1
  100. package/esm/date-pickers/PlainTimeAdapter.js.map +1 -1
  101. package/esm/date-pickers/PlainTimePicker.js +2 -2
  102. package/esm/date-pickers/PlainTimePicker.js.map +1 -1
  103. package/esm/date-pickers/PlainTimePicker.spec.js +2 -2
  104. package/esm/date-pickers/PlainTimePicker.spec.js.map +1 -1
  105. package/esm/date-pickers/TemporalAdapter.d.ts +1 -1
  106. package/esm/date-pickers/TemporalAdapter.js +1 -1
  107. package/esm/date-pickers/TemporalAdapter.js.map +1 -1
  108. package/esm/date-pickers/TimezoneSelect.js +348 -348
  109. package/esm/date-pickers/TimezoneSelect.js.map +1 -1
  110. package/esm/date-pickers/getFormatString.js.map +1 -1
  111. package/esm/date-pickers/index.d.ts +2 -1
  112. package/esm/date-pickers/index.js +1 -1
  113. package/esm/date-pickers/index.js.map +1 -1
  114. package/esm/date-pickers/parse.js.map +1 -1
  115. package/esm/date-pickers/timeframe-picker.js +7 -7
  116. package/esm/date-pickers/timeframe-picker.js.map +1 -1
  117. package/esm/date-pickers/useLocale.js.map +1 -1
  118. package/esm/date-pickers/useRenderInput.js +5 -3
  119. package/esm/date-pickers/useRenderInput.js.map +1 -1
  120. package/esm/fetch.d.ts +2 -3
  121. package/esm/fetch.js +4 -4
  122. package/esm/fetch.js.map +1 -1
  123. package/esm/formats/CompactFormat.js +1 -1
  124. package/esm/formats/CompactFormat.js.map +1 -1
  125. package/esm/formats/CompactFormat.spec.js +1 -1
  126. package/esm/formats/CompactFormat.spec.js.map +1 -1
  127. package/esm/formats/CurrencyFormat.js +1 -1
  128. package/esm/formats/CurrencyFormat.js.map +1 -1
  129. package/esm/formats/CurrencyFormat.spec.js +1 -1
  130. package/esm/formats/CurrencyFormat.spec.js.map +1 -1
  131. package/esm/formats/DecimalFormat.js +1 -1
  132. package/esm/formats/DecimalFormat.js.map +1 -1
  133. package/esm/formats/DecimalFormat.spec.js +1 -1
  134. package/esm/formats/DecimalFormat.spec.js.map +1 -1
  135. package/esm/formats/DurationFormat.js +2 -2
  136. package/esm/formats/DurationFormat.js.map +1 -1
  137. package/esm/formats/DurationFormat.spec.js +2 -2
  138. package/esm/formats/DurationFormat.spec.js.map +1 -1
  139. package/esm/formats/TemporalFormat.spec.js +2 -2
  140. package/esm/formats/TemporalFormat.spec.js.map +1 -1
  141. package/esm/formats/TemporalRangeFormat.js +1 -1
  142. package/esm/formats/TemporalRangeFormat.js.map +1 -1
  143. package/esm/formats/TemporalRangeFormat.spec.js +2 -2
  144. package/esm/formats/TemporalRangeFormat.spec.js.map +1 -1
  145. package/esm/formats/useDateTimeFormat.js +5 -2
  146. package/esm/formats/useDateTimeFormat.js.map +1 -1
  147. package/esm/formats/useNumberFormat.js +1 -1
  148. package/esm/formats/useNumberFormat.js.map +1 -1
  149. package/esm/formats/useRelativeTimeFormat.js +4 -2
  150. package/esm/formats/useRelativeTimeFormat.js.map +1 -1
  151. package/esm/forms/SearchForm.js +1 -1
  152. package/esm/forms/SearchForm.js.map +1 -1
  153. package/esm/getNavigatorLanguages.js.map +1 -1
  154. package/esm/getSupportedFormatLocale.js.map +1 -1
  155. package/esm/help/HelpDrawer.js +12 -8
  156. package/esm/help/HelpDrawer.js.map +1 -1
  157. package/esm/help/index.d.ts +1 -1
  158. package/esm/help/index.js +1 -1
  159. package/esm/help/index.js.map +1 -1
  160. package/esm/icons.d.ts +13 -13
  161. package/esm/icons.js +13 -13
  162. package/esm/icons.js.map +1 -1
  163. package/esm/layout/ErrorBoundary.js +36 -36
  164. package/esm/layout/ErrorBoundary.js.map +1 -1
  165. package/esm/layout/NotFound.js +6 -6
  166. package/esm/layout/NotFound.js.map +1 -1
  167. package/esm/layout/NotFoundSvg.js.map +1 -1
  168. package/esm/layout/UserNav.js +18 -18
  169. package/esm/layout/UserNav.js.map +1 -1
  170. package/esm/layout/index.d.ts +2 -2
  171. package/esm/layout/index.js +2 -2
  172. package/esm/layout/index.js.map +1 -1
  173. package/esm/logo/Logo.js +2 -2
  174. package/esm/logo/Logo.js.map +1 -1
  175. package/esm/logo/VCAppLogo.js +1 -1
  176. package/esm/logo/VCAppLogo.js.map +1 -1
  177. package/esm/logo/index.d.ts +3 -3
  178. package/esm/logo/index.js +3 -3
  179. package/esm/logo/index.js.map +1 -1
  180. package/esm/splash/index.js +2 -2
  181. package/esm/splash/index.js.map +1 -1
  182. package/esm/storage/MemoryStorage.d.ts +6 -4
  183. package/esm/storage/MemoryStorage.js +13 -4
  184. package/esm/storage/MemoryStorage.js.map +1 -1
  185. package/esm/storage/index.d.ts +2 -1
  186. package/esm/storage/index.js +1 -1
  187. package/esm/storage/index.js.map +1 -1
  188. package/esm/storage/storage.d.ts +6 -4
  189. package/esm/storage/storage.js +35 -15
  190. package/esm/storage/storage.js.map +1 -1
  191. package/esm/storage/types.d.ts +6 -0
  192. package/esm/storage/types.js +2 -0
  193. package/esm/storage/types.js.map +1 -0
  194. package/esm/storage/useStorage.d.ts +10 -1
  195. package/esm/storage/useStorage.js +18 -6
  196. package/esm/storage/useStorage.js.map +1 -1
  197. package/esm/tabs/Tabs.d.ts +2 -2
  198. package/esm/tabs/Tabs.js +15 -15
  199. package/esm/tabs/Tabs.js.map +1 -1
  200. package/esm/tabs/index.js.map +1 -1
  201. package/esm/temporal/index.d.ts +1 -1
  202. package/esm/temporal/index.js +1 -1
  203. package/esm/temporal/index.js.map +1 -1
  204. package/esm/temporal/parse.js.map +1 -1
  205. package/esm/temporal/polyfill.d.ts +1 -1
  206. package/esm/temporal/polyfill.js +3 -3
  207. package/esm/temporal/polyfill.js.map +1 -1
  208. package/esm/utils/defined.js.map +1 -1
  209. package/esm/utils/index.d.ts +1 -1
  210. package/esm/utils/index.js +1 -1
  211. package/esm/utils/index.js.map +1 -1
  212. package/esm/utils/useFlag.js.map +1 -1
  213. package/esm/utils/useIsMounted.js.map +1 -1
  214. package/package.json +8 -9
  215. package/src/AppShell/AppShell.tsx +147 -140
  216. package/src/AppShell/index.tsx +1 -1
  217. package/src/Input/ActionsMenu.tsx +70 -73
  218. package/src/Input/EmailSenderField.tsx +59 -52
  219. package/src/Input/Selector.tsx +15 -15
  220. package/src/LanguageSwitcher/index.ts +1 -1
  221. package/src/Paging/Paging.ts +56 -57
  222. package/src/Paging/index.ts +2 -1
  223. package/src/VCThemeProvider/JetbrainsMonoFont.tsx +52 -42
  224. package/src/VCThemeProvider/RobotoFont.tsx +47 -39
  225. package/src/VCThemeProvider/ThemeModeSwitcher.tsx +17 -17
  226. package/src/VCThemeProvider/VCThemeProvider.tsx +149 -145
  227. package/src/audit/AuditChanges.tsx +18 -12
  228. package/src/audit/AuditTimeline.tsx +16 -17
  229. package/src/audit/AuditTimelineItem.tsx +58 -61
  230. package/src/audit/index.ts +2 -2
  231. package/src/audit/types.ts +27 -28
  232. package/src/breadcrumbs.tsx +11 -15
  233. package/src/code/CodeBlock.tsx +10 -10
  234. package/src/confirm/ConfirmButton.tsx +56 -56
  235. package/src/confirm/ConfirmDialog.tsx +54 -54
  236. package/src/confirm/ConfirmMenuItem.tsx +51 -53
  237. package/src/container/ContainerLayout.tsx +7 -8
  238. package/src/container/ContainerSettingsContext.tsx +49 -46
  239. package/src/container/ContainerWidthControl.tsx +11 -9
  240. package/src/container/index.ts +8 -3
  241. package/src/content-table/ContentTable.tsx +235 -197
  242. package/src/content-table/UndrawEmpty.tsx +281 -281
  243. package/src/content-table/index.ts +1 -1
  244. package/src/country/country-select.tsx +0 -1
  245. package/src/country/index.ts +3 -3
  246. package/src/country/locale-select.tsx +36 -36
  247. package/src/country/locales.ts +185 -187
  248. package/src/country/phone-prefix-select.tsx +4 -5
  249. package/src/cube/accessibility.tsx +2 -1
  250. package/src/data-table/DataTableColumnSettings.tsx +181 -181
  251. package/src/data-table/DataTableHeader.tsx +6 -6
  252. package/src/data-table/DataTableToolbar.tsx +6 -6
  253. package/src/data-table/index.tsx +4 -4
  254. package/src/data-table/useDataTableColumnStorage.ts +30 -19
  255. package/src/data-table/useDataTableStorage.spec.ts +108 -0
  256. package/src/data-table/useDataTableStorage.ts +91 -36
  257. package/src/date-pickers/PlainAdapterCommon.ts +118 -120
  258. package/src/date-pickers/PlainDateAdapter.spec.ts +44 -46
  259. package/src/date-pickers/PlainDateAdapter.ts +130 -132
  260. package/src/date-pickers/PlainDatePicker.spec.tsx +17 -18
  261. package/src/date-pickers/PlainDatePicker.tsx +33 -36
  262. package/src/date-pickers/PlainDateTimeAdapter.spec.ts +44 -46
  263. package/src/date-pickers/PlainDateTimeAdapter.ts +141 -134
  264. package/src/date-pickers/PlainDateTimePicker.spec.tsx +17 -18
  265. package/src/date-pickers/PlainDateTimePicker.tsx +35 -36
  266. package/src/date-pickers/PlainTimeAdapter.ts +219 -221
  267. package/src/date-pickers/PlainTimePicker.spec.tsx +17 -18
  268. package/src/date-pickers/PlainTimePicker.tsx +35 -34
  269. package/src/date-pickers/TemporalAdapter.ts +110 -111
  270. package/src/date-pickers/TimezoneSelect.tsx +375 -375
  271. package/src/date-pickers/getFormatString.ts +29 -29
  272. package/src/date-pickers/index.ts +6 -5
  273. package/src/date-pickers/parse.spec.ts +37 -40
  274. package/src/date-pickers/parse.ts +44 -47
  275. package/src/date-pickers/timeframe-picker.tsx +16 -17
  276. package/src/date-pickers/useLocale.ts +1 -1
  277. package/src/date-pickers/useRenderInput.tsx +24 -15
  278. package/src/fetch.ts +4 -5
  279. package/src/formats/CompactFormat.spec.tsx +18 -20
  280. package/src/formats/CompactFormat.tsx +30 -30
  281. package/src/formats/CurrencyFormat.spec.tsx +18 -20
  282. package/src/formats/CurrencyFormat.tsx +52 -52
  283. package/src/formats/DecimalFormat.spec.tsx +18 -20
  284. package/src/formats/DecimalFormat.tsx +47 -47
  285. package/src/formats/DurationFormat.spec.tsx +48 -49
  286. package/src/formats/DurationFormat.tsx +51 -51
  287. package/src/formats/TemporalFormat.spec.tsx +93 -95
  288. package/src/formats/TemporalRangeFormat.spec.tsx +143 -144
  289. package/src/formats/TemporalRangeFormat.tsx +54 -54
  290. package/src/formats/types.ts +1 -3
  291. package/src/formats/useDateTimeFormat.ts +5 -2
  292. package/src/formats/useNumberFormat.ts +3 -3
  293. package/src/formats/useRelativeTimeFormat.ts +5 -3
  294. package/src/forms/SearchForm.tsx +37 -38
  295. package/src/getNavigatorLanguages.ts +4 -5
  296. package/src/getSupportedFormatLocale.ts +10 -10
  297. package/src/help/HelpDrawer.tsx +76 -55
  298. package/src/help/index.ts +3 -3
  299. package/src/icons.ts +21 -21
  300. package/src/layout/ErrorBoundary.tsx +226 -215
  301. package/src/layout/NotFound.tsx +36 -39
  302. package/src/layout/NotFoundSvg.tsx +193 -169
  303. package/src/layout/UserNav.tsx +98 -98
  304. package/src/layout/index.ts +3 -3
  305. package/src/logo/Logo.tsx +6 -7
  306. package/src/logo/VCAppLogo.tsx +22 -20
  307. package/src/logo/index.tsx +3 -3
  308. package/src/splash/index.tsx +25 -25
  309. package/src/storage/MemoryStorage.ts +22 -15
  310. package/src/storage/index.ts +2 -1
  311. package/src/storage/storage.spec.ts +184 -0
  312. package/src/storage/storage.ts +37 -15
  313. package/src/storage/types.ts +6 -0
  314. package/src/storage/useStorage.ts +21 -6
  315. package/src/tabs/Tabs.tsx +172 -170
  316. package/src/tabs/index.ts +1 -1
  317. package/src/temporal/index.ts +1 -1
  318. package/src/temporal/parse.ts +1 -2
  319. package/src/temporal/polyfill.ts +11 -11
  320. package/src/utils/defined.ts +2 -3
  321. package/src/utils/index.ts +1 -1
  322. package/src/utils/useFlag.ts +5 -5
  323. package/src/utils/useIsMounted.ts +9 -9
@@ -1,43 +1,98 @@
1
- import {useStorage} from "../storage";
2
1
  import {SortDirection} from "@mui/material";
3
2
  import {useCallback} from "react";
3
+ import {StorageType, useStorage} from "../storage";
4
4
  import {DataTablePage} from "./DataTable";
5
5
 
6
6
  export interface DataTableStorage {
7
- pageIndex?: number;
8
- pageSize?: number;
9
- sortField?: string;
10
- sortDirection?: SortDirection;
7
+ pageIndex?: number;
8
+ pageSize?: number;
9
+ sortField?: string;
10
+ sortDirection?: SortDirection;
11
11
  }
12
12
 
13
- export function useDataTableStorage(key: string, defaults?: DataTableStorage) {
14
- const [storage, setStorage] = useStorage<DataTableStorage>(key, {
15
- pageIndex: 0,
16
- pageSize: 10,
17
- sortDirection: "asc",
18
- ...defaults,
19
- });
20
-
21
- const onPageChange = useCallback(({pageSize, pageIndex}: DataTablePage) => {
22
- setStorage({...storage, pageSize, pageIndex});
23
- }, [storage]);
24
-
25
- const onSort = useCallback((field: string) => {
26
- if (storage.sortField == field) {
27
- setStorage({...storage, sortDirection: storage.sortDirection == "desc" ? "asc" : "desc" });
28
- }
29
- else {
30
- setStorage({
31
- ...storage,
32
- sortDirection: "asc",
33
- sortField: field,
34
- });
35
- }
36
- }, [storage]);
37
-
38
- return {
39
- ...storage,
40
- onPageChange,
41
- onSort,
42
- }
43
- }
13
+ export interface DataTableStorageOptions {
14
+ defaults?: DataTableStorage;
15
+ storageType?: StorageType;
16
+ }
17
+
18
+ type UseDataTableStorageResult = DataTableStorage & {
19
+ onPageChange: (page: DataTablePage) => void;
20
+ onSort: (field: string) => void;
21
+ };
22
+
23
+ function isDataTableStorageOptions(value: unknown): value is DataTableStorageOptions {
24
+ return typeof value === "object" && value !== null && ("defaults" in value || "storageType" in value);
25
+ }
26
+
27
+ /**
28
+ * Hook for persisting DataTable state to browser storage.
29
+ *
30
+ * @example
31
+ * // Default - uses localStorage
32
+ * const tableState = useDataTableStorage("my-table");
33
+ *
34
+ * @example
35
+ * // With defaults (backwards compatible)
36
+ * const tableState = useDataTableStorage("my-table", { pageSize: 25 });
37
+ *
38
+ * @example
39
+ * // With sessionStorage
40
+ * const tableState = useDataTableStorage("my-table", "session");
41
+ *
42
+ * @example
43
+ * // With both defaults and storageType
44
+ * const tableState = useDataTableStorage("my-table", { defaults: { pageSize: 25 }, storageType: "session" });
45
+ */
46
+ export function useDataTableStorage(key: string): UseDataTableStorageResult;
47
+ export function useDataTableStorage(key: string, storageType: StorageType): UseDataTableStorageResult;
48
+ export function useDataTableStorage(key: string, defaults: DataTableStorage): UseDataTableStorageResult;
49
+ export function useDataTableStorage(key: string, options: DataTableStorageOptions): UseDataTableStorageResult;
50
+ export function useDataTableStorage(
51
+ key: string,
52
+ optionsOrDefaultsOrType?: StorageType | DataTableStorage | DataTableStorageOptions,
53
+ ): UseDataTableStorageResult {
54
+ // Normalize parameters
55
+ let defaults: DataTableStorage = {};
56
+ let storageType: StorageType | undefined;
57
+
58
+ if (typeof optionsOrDefaultsOrType === "string") {
59
+ // It's a StorageType
60
+ storageType = optionsOrDefaultsOrType;
61
+ } else if (isDataTableStorageOptions(optionsOrDefaultsOrType)) {
62
+ // It's DataTableStorageOptions
63
+ defaults = optionsOrDefaultsOrType.defaults ?? {};
64
+ storageType = optionsOrDefaultsOrType.storageType;
65
+ } else if (optionsOrDefaultsOrType) {
66
+ // It's DataTableStorage (backwards compat)
67
+ defaults = optionsOrDefaultsOrType;
68
+ }
69
+
70
+ const [storage, setStorage] = useStorage<DataTableStorage>(key, {
71
+ pageIndex: 0,
72
+ pageSize: 10,
73
+ sortDirection: "asc",
74
+ ...defaults,
75
+ }, storageType);
76
+
77
+ const onPageChange = useCallback(({pageSize, pageIndex}: DataTablePage) => {
78
+ setStorage({...storage, pageSize, pageIndex});
79
+ }, [storage, setStorage]);
80
+
81
+ const onSort = useCallback((field: string) => {
82
+ if (storage.sortField == field) {
83
+ setStorage({...storage, sortDirection: storage.sortDirection == "desc" ? "asc" : "desc"});
84
+ } else {
85
+ setStorage({
86
+ ...storage,
87
+ sortDirection: "asc",
88
+ sortField: field,
89
+ });
90
+ }
91
+ }, [storage, setStorage]);
92
+
93
+ return {
94
+ ...storage,
95
+ onPageChange,
96
+ onSort,
97
+ };
98
+ }
@@ -1,125 +1,123 @@
1
- import {Now, PlainDate, PlainDateTime} from "../temporal";
2
1
  import {Unit} from "@date-io/core/IUtils";
2
+ import {Now, PlainDate, PlainDateTime} from "../temporal";
3
3
  import {durationToUnit, TemporalAdapter} from "./TemporalAdapter";
4
4
 
5
5
  export class PlainAdapterCommon<T extends PlainDate | PlainDateTime> extends TemporalAdapter<T> {
6
-
7
- startOfYear(value: T): T {
8
- return value.with({day: 1, month: 1}) as T;
9
- }
10
-
11
- endOfYear(value: T): T {
12
- return value.with({day: 31, month: 12}) as T;
13
- }
14
-
15
- startOfMonth(value: T): T {
16
- return value.with({day: 1}) as T;
17
- }
18
-
19
- endOfMonth(value: T): T {
20
- return value.add({months: 1})
21
- .with({day: 1})
22
- .subtract({days: 1}) as T;
23
- }
24
-
25
- startOfWeek(value: T): T {
26
- return value.subtract({days: value.dayOfWeek - 1}) as T;
27
- }
28
-
29
- endOfWeek(value: T): T {
30
- return value.add({days: 7 - value.dayOfWeek}) as T;
31
- }
32
-
33
- getNextMonth(value: T): T {
34
- return value.add({months: 1}) as T;
35
- }
36
-
37
- getPreviousMonth(value: T): T {
38
- return value.subtract({months: 1}) as T;
39
- }
40
-
41
- isBefore(value: T, comparing: T): boolean {
42
- return PlainDateTime.compare(value, comparing) < 0;
43
- }
44
-
45
- isAfter(value: T, comparing: T): boolean {
46
- return PlainDateTime.compare(value, comparing) > 0;
47
- }
48
-
49
- isSameDay(value: T, comparing: T): boolean {
50
- return PlainDate.compare(value, comparing) == 0;
51
- }
52
-
53
- isSameMonth(value: T, comparing: T): boolean {
54
- return value.toPlainYearMonth().equals(comparing.toPlainYearMonth());
55
- }
56
-
57
- isSameYear(value: T, comparing: T): boolean {
58
- return value.year == comparing.year;
59
- }
60
-
61
- isWithinRange(value: T, [start, end]: [T, T]): boolean {
62
- return !this.isBefore(value, start) && !this.isAfter(value, end);
63
- }
64
-
65
- isBeforeDay(value: T, comparing: T): boolean {
66
- return PlainDate.compare(value, comparing) < 0;
67
- }
68
-
69
- isAfterDay(value: T, comparing: T): boolean {
70
- return PlainDate.compare(value, comparing) > 0;
71
- }
72
-
73
- isBeforeYear(value: T, comparing: T): boolean {
74
- return value.year < comparing.year;
75
- }
76
-
77
- isAfterYear(value: T, comparing: T): boolean {
78
- return value.year > comparing.year;
79
- }
80
-
81
- getMonth(value: T): number {
82
- return value.month;
83
- }
84
-
85
- getDaysInMonth(value: T): number {
86
- return value.daysInMonth;
87
- }
88
-
89
- getYear(value: T): number {
90
- return value.year;
91
- }
92
-
93
- getWeekdays(): string[] {
94
- const today = Now.plainDateISO();
95
- const startOfWeek = today.subtract({days: today.dayOfWeek - 1});
96
- return [...Array(7).keys()]
97
- .map(index => this.formats.weekday.format(startOfWeek.add({days: index})));
98
- }
99
-
100
- getMonthArray(value: T): T[] {
101
- return [...Array(12).keys()]
102
- .map(index => value.with({day: 1, month: index + 1}) as T);
103
- }
104
-
105
- getWeekArray(date: T): T[][] {
106
- const start = this.startOfWeek(this.startOfMonth(date));
107
- const end = this.endOfWeek(this.endOfMonth(date));
108
- const weeks = (start.until(end).total("days") + 1) / 7;
109
- return [...Array(weeks).keys()].map(weekIndex => {
110
- const weekStart = start.add({weeks: weekIndex});
111
- return [...Array(7).keys()]
112
- .map(index => weekStart.add({days: index}) as T);
113
- });
114
- }
115
-
116
- getYearRange(start: T, end: T): T[] {
117
- return [...Array(end.year - start.year).keys()]
118
- .map(yearIndex => start.add({years: yearIndex}) as T);
119
- }
120
-
121
- getDiff(value: T, comparing: T | string, unit?: Unit) {
122
- return durationToUnit(value.until(comparing), unit);
123
- }
6
+ startOfYear(value: T): T {
7
+ return value.with({day: 1, month: 1}) as T;
8
+ }
9
+
10
+ endOfYear(value: T): T {
11
+ return value.with({day: 31, month: 12}) as T;
12
+ }
13
+
14
+ startOfMonth(value: T): T {
15
+ return value.with({day: 1}) as T;
16
+ }
17
+
18
+ endOfMonth(value: T): T {
19
+ return value.add({months: 1})
20
+ .with({day: 1})
21
+ .subtract({days: 1}) as T;
22
+ }
23
+
24
+ startOfWeek(value: T): T {
25
+ return value.subtract({days: value.dayOfWeek - 1}) as T;
26
+ }
27
+
28
+ endOfWeek(value: T): T {
29
+ return value.add({days: 7 - value.dayOfWeek}) as T;
30
+ }
31
+
32
+ getNextMonth(value: T): T {
33
+ return value.add({months: 1}) as T;
34
+ }
35
+
36
+ getPreviousMonth(value: T): T {
37
+ return value.subtract({months: 1}) as T;
38
+ }
39
+
40
+ isBefore(value: T, comparing: T): boolean {
41
+ return PlainDateTime.compare(value, comparing) < 0;
42
+ }
43
+
44
+ isAfter(value: T, comparing: T): boolean {
45
+ return PlainDateTime.compare(value, comparing) > 0;
46
+ }
47
+
48
+ isSameDay(value: T, comparing: T): boolean {
49
+ return PlainDate.compare(value, comparing) == 0;
50
+ }
51
+
52
+ isSameMonth(value: T, comparing: T): boolean {
53
+ return value.toPlainYearMonth().equals(comparing.toPlainYearMonth());
54
+ }
55
+
56
+ isSameYear(value: T, comparing: T): boolean {
57
+ return value.year == comparing.year;
58
+ }
59
+
60
+ isWithinRange(value: T, [start, end]: [T, T]): boolean {
61
+ return !this.isBefore(value, start) && !this.isAfter(value, end);
62
+ }
63
+
64
+ isBeforeDay(value: T, comparing: T): boolean {
65
+ return PlainDate.compare(value, comparing) < 0;
66
+ }
67
+
68
+ isAfterDay(value: T, comparing: T): boolean {
69
+ return PlainDate.compare(value, comparing) > 0;
70
+ }
71
+
72
+ isBeforeYear(value: T, comparing: T): boolean {
73
+ return value.year < comparing.year;
74
+ }
75
+
76
+ isAfterYear(value: T, comparing: T): boolean {
77
+ return value.year > comparing.year;
78
+ }
79
+
80
+ getMonth(value: T): number {
81
+ return value.month;
82
+ }
83
+
84
+ getDaysInMonth(value: T): number {
85
+ return value.daysInMonth;
86
+ }
87
+
88
+ getYear(value: T): number {
89
+ return value.year;
90
+ }
91
+
92
+ getWeekdays(): string[] {
93
+ const today = Now.plainDateISO();
94
+ const startOfWeek = today.subtract({days: today.dayOfWeek - 1});
95
+ return [...Array(7).keys()]
96
+ .map(index => this.formats.weekday.format(startOfWeek.add({days: index})));
97
+ }
98
+
99
+ getMonthArray(value: T): T[] {
100
+ return [...Array(12).keys()]
101
+ .map(index => value.with({day: 1, month: index + 1}) as T);
102
+ }
103
+
104
+ getWeekArray(date: T): T[][] {
105
+ const start = this.startOfWeek(this.startOfMonth(date));
106
+ const end = this.endOfWeek(this.endOfMonth(date));
107
+ const weeks = (start.until(end).total("days") + 1) / 7;
108
+ return [...Array(weeks).keys()].map(weekIndex => {
109
+ const weekStart = start.add({weeks: weekIndex});
110
+ return [...Array(7).keys()]
111
+ .map(index => weekStart.add({days: index}) as T);
112
+ });
113
+ }
114
+
115
+ getYearRange(start: T, end: T): T[] {
116
+ return [...Array(end.year - start.year).keys()]
117
+ .map(yearIndex => start.add({years: yearIndex}) as T);
118
+ }
119
+
120
+ getDiff(value: T, comparing: T | string, unit?: Unit) {
121
+ return durationToUnit(value.until(comparing), unit);
122
+ }
124
123
  }
125
-
@@ -2,49 +2,47 @@ import {PlainDate} from "../temporal";
2
2
  import {PlainDateAdapter} from "./PlainDateAdapter";
3
3
 
4
4
  describe("PlainDateAdapter", () => {
5
-
6
- const adapter = new PlainDateAdapter({locale: "de"});
7
-
8
- test("isSameDay", () => {
9
- expect(adapter.isSameDay(new PlainDate(2022, 5, 30), new PlainDate(2022, 5, 30))).toBe(true);
10
- expect(adapter.isSameDay(new PlainDate(2022, 4, 30), new PlainDate(2022, 5, 30))).toBe(false);
11
- });
12
-
13
- test("isSameYear", () => {
14
- expect(adapter.isSameYear(new PlainDate(2022, 5, 30), new PlainDate(2022, 5, 30))).toBe(true);
15
- expect(adapter.isSameYear(new PlainDate(2022, 4, 30), new PlainDate(2022, 5, 30))).toBe(true);
16
- expect(adapter.isSameYear(new PlainDate(2020, 4, 30), new PlainDate(2022, 5, 30))).toBe(false);
17
- });
18
-
19
- test("startOfWeek", () => {
20
- const startOfWeek = adapter.startOfWeek(new PlainDate(2022, 5, 31));
21
- expect(startOfWeek.year).toBe(2022);
22
- expect(startOfWeek.month).toBe(5);
23
- expect(startOfWeek.day).toBe(30);
24
- });
25
-
26
- test("endOfWeek", () => {
27
- const startOfWeek = adapter.endOfWeek(new PlainDate(2022, 5, 31));
28
- expect(startOfWeek.year).toBe(2022);
29
- expect(startOfWeek.month).toBe(6);
30
- expect(startOfWeek.day).toBe(5);
31
- });
32
-
33
- test("getYearRange", () => {
34
- const range = adapter.getYearRange(PlainDate.from("2020-05-05"), PlainDate.from("2025-05-05"));
35
- expect(range).toHaveLength(5);
36
- });
37
-
38
- test("getWeekArray", () => {
39
- const weekArray = adapter.getWeekArray(new PlainDate(2022, 5, 30));
40
- expect(weekArray).toHaveLength(6);
41
- expect(weekArray[0][0].toString()).toBe("2022-04-25"); // monday of first week
42
- expect(weekArray[5][6].toString()).toBe("2022-06-05"); // sunday of last week
43
- });
44
-
45
- test("getYearRange", () => {
46
- const yearRange = adapter.getYearRange(new PlainDate(1995, 1, 1), new PlainDate(2020, 1, 1));
47
- expect(yearRange).toHaveLength(25);
48
- })
49
-
50
- });
5
+ const adapter = new PlainDateAdapter({locale: "de"});
6
+
7
+ test("isSameDay", () => {
8
+ expect(adapter.isSameDay(new PlainDate(2022, 5, 30), new PlainDate(2022, 5, 30))).toBe(true);
9
+ expect(adapter.isSameDay(new PlainDate(2022, 4, 30), new PlainDate(2022, 5, 30))).toBe(false);
10
+ });
11
+
12
+ test("isSameYear", () => {
13
+ expect(adapter.isSameYear(new PlainDate(2022, 5, 30), new PlainDate(2022, 5, 30))).toBe(true);
14
+ expect(adapter.isSameYear(new PlainDate(2022, 4, 30), new PlainDate(2022, 5, 30))).toBe(true);
15
+ expect(adapter.isSameYear(new PlainDate(2020, 4, 30), new PlainDate(2022, 5, 30))).toBe(false);
16
+ });
17
+
18
+ test("startOfWeek", () => {
19
+ const startOfWeek = adapter.startOfWeek(new PlainDate(2022, 5, 31));
20
+ expect(startOfWeek.year).toBe(2022);
21
+ expect(startOfWeek.month).toBe(5);
22
+ expect(startOfWeek.day).toBe(30);
23
+ });
24
+
25
+ test("endOfWeek", () => {
26
+ const startOfWeek = adapter.endOfWeek(new PlainDate(2022, 5, 31));
27
+ expect(startOfWeek.year).toBe(2022);
28
+ expect(startOfWeek.month).toBe(6);
29
+ expect(startOfWeek.day).toBe(5);
30
+ });
31
+
32
+ test("getYearRange", () => {
33
+ const range = adapter.getYearRange(PlainDate.from("2020-05-05"), PlainDate.from("2025-05-05"));
34
+ expect(range).toHaveLength(5);
35
+ });
36
+
37
+ test("getWeekArray", () => {
38
+ const weekArray = adapter.getWeekArray(new PlainDate(2022, 5, 30));
39
+ expect(weekArray).toHaveLength(6);
40
+ expect(weekArray[0][0].toString()).toBe("2022-04-25"); // monday of first week
41
+ expect(weekArray[5][6].toString()).toBe("2022-06-05"); // sunday of last week
42
+ });
43
+
44
+ test("getYearRange", () => {
45
+ const yearRange = adapter.getYearRange(new PlainDate(1995, 1, 1), new PlainDate(2020, 1, 1));
46
+ expect(yearRange).toHaveLength(25);
47
+ });
48
+ });