@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,20 +1,22 @@
1
- import * as React from "react";
2
1
  import {Link} from "@mui/material";
3
2
  import {LinkProps} from "@mui/material/Link/Link";
4
- import {nextWidth, useContainerSettingsContext} from "./ContainerSettingsContext";
3
+ import * as React from "react";
5
4
  import {useCallback} from "react";
5
+ import {nextWidth, useContainerSettingsContext} from "./ContainerSettingsContext";
6
6
 
7
7
  interface ContainerWidthControlProps extends Omit<LinkProps, "children"> {
8
8
  }
9
9
 
10
10
  export function ContainerWidthControl(props: ContainerWidthControlProps) {
11
- const {width, setWidth} = useContainerSettingsContext();
11
+ const {width, setWidth} = useContainerSettingsContext();
12
12
 
13
- const handleChangeContainerWidth = useCallback(() => {
14
- setWidth(nextWidth(width));
15
- }, [width]);
13
+ const handleChangeContainerWidth = useCallback(() => {
14
+ setWidth(nextWidth(width));
15
+ }, [width]);
16
16
 
17
- return (
18
- <Link href="#" underline="hover" color="secondary" onClick={handleChangeContainerWidth} {...props}>{width}</Link>
19
- );
17
+ return (
18
+ <Link href="#" underline="hover" color="secondary" onClick={handleChangeContainerWidth} {...props}>
19
+ {width}
20
+ </Link>
21
+ );
20
22
  }
@@ -1,3 +1,8 @@
1
- export {ContainerSettingsContextProvider, useContainerSettingsContext, containerWidthToBreakPoint, nextWidth} from "./ContainerSettingsContext";
2
- export {ContainerLayout} from "./ContainerLayout";
3
- export {ContainerWidthControl} from "./ContainerWidthControl";
1
+ export { ContainerLayout } from "./ContainerLayout";
2
+ export {
3
+ ContainerSettingsContextProvider,
4
+ containerWidthToBreakPoint,
5
+ nextWidth,
6
+ useContainerSettingsContext,
7
+ } from "./ContainerSettingsContext";
8
+ export { ContainerWidthControl } from "./ContainerWidthControl";
@@ -1,214 +1,252 @@
1
- import React, {Fragment, ReactComponentElement, useMemo, useState} from "react";
2
1
  import {
3
- Box,
4
- Button,
5
- Checkbox,
6
- CircularProgress,
7
- Dialog,
8
- DialogActions,
9
- DialogContent,
10
- FormControlLabel,
11
- Grid,
12
- IconButton,
13
- LinearProgress, Paper,
14
- Table,
15
- TableBody,
16
- TableCell,
17
- TableContainer,
18
- TableHead,
19
- TablePagination,
20
- TableRow,
21
- TableSortLabel,
22
- useTheme
2
+ Box,
3
+ Button,
4
+ Checkbox,
5
+ CircularProgress,
6
+ Dialog,
7
+ DialogActions,
8
+ DialogContent,
9
+ FormControlLabel,
10
+ Grid,
11
+ IconButton,
12
+ LinearProgress,
13
+ Paper,
14
+ Table,
15
+ TableBody,
16
+ TableCell,
17
+ TableContainer,
18
+ TableHead,
19
+ TablePagination,
20
+ TableRow,
21
+ TableSortLabel,
22
+ useTheme,
23
23
  } from "@mui/material";
24
+ import React, {Fragment, ReactComponentElement, useMemo, useState} from "react";
24
25
  import {FilterListIcon, TuningIcon} from "../icons";
25
26
  import {Page, PagingSettings} from "../Paging";
26
27
  import {UndrawEmpty} from "./UndrawEmpty";
27
28
 
28
- export type ColumnType = { [sortKey: string]: { show: boolean, name: string, align?: 'left'|'right'|'center', unsortable?: boolean } }
29
+ export type ColumnType = {
30
+ [sortKey: string]: { show: boolean; name: string; align?: "left" | "right" | "center"; unsortable?: boolean };
31
+ };
29
32
 
30
33
  type ContentTableProps<T> = {
31
- pageable: PagingSettings<keyof ColumnType>,
32
- columns: ColumnType,
33
- onPageableChange: (pageable: PagingSettings<keyof ColumnType>) => void,
34
- onColumnsChange: (columns: ColumnType) => void,
35
- page?: Page<T>,
36
- inProgress?: boolean,
37
- onFilterClick?: () => void,
38
- renderEmptyContent?: ReactComponentElement<any>,
39
- renderTableBody?: ReactComponentElement<any>,
40
- renderFilterOptions?: ReactComponentElement<any>
41
- renderColumnFilter?: ReactComponentElement<any>,
42
- }
34
+ pageable: PagingSettings<keyof ColumnType>;
35
+ columns: ColumnType;
36
+ onPageableChange: (pageable: PagingSettings<keyof ColumnType>) => void;
37
+ onColumnsChange: (columns: ColumnType) => void;
38
+ page?: Page<T>;
39
+ inProgress?: boolean;
40
+ onFilterClick?: () => void;
41
+ renderEmptyContent?: ReactComponentElement<any>;
42
+ renderTableBody?: ReactComponentElement<any>;
43
+ renderFilterOptions?: ReactComponentElement<any>;
44
+ renderColumnFilter?: ReactComponentElement<any>;
45
+ };
43
46
 
44
47
  export const ContentTable = <T extends unknown>(props: ContentTableProps<T>) => {
45
- const {
46
- page, pageable, columns,
47
- renderEmptyContent, renderTableBody, renderFilterOptions, renderColumnFilter,
48
- inProgress,
49
- onPageableChange,
50
- onColumnsChange,
51
- onFilterClick,
52
- } = props;
53
- const currentPage = useMemo(() => page, [page]);
54
- const currentPageable = useMemo(() => pageable, [pageable]);
55
- const [showColumnSettings, setShowColumnSettings] = useState(false);
48
+ const {
49
+ page,
50
+ pageable,
51
+ columns,
52
+ renderEmptyContent,
53
+ renderTableBody,
54
+ renderFilterOptions,
55
+ renderColumnFilter,
56
+ inProgress,
57
+ onPageableChange,
58
+ onColumnsChange,
59
+ onFilterClick,
60
+ } = props;
61
+ const currentPage = useMemo(() => page, [page]);
62
+ const currentPageable = useMemo(() => pageable, [pageable]);
63
+ const [showColumnSettings, setShowColumnSettings] = useState(false);
56
64
 
57
- const handleSortColumn = (key: keyof typeof columns) => {
58
- const {sort, direction} = currentPageable;
59
- let oD: 'desc'|'asc';
60
- if (sort == key) {
61
- oD = direction === 'desc' ? 'asc' : 'desc';
62
- } else {
63
- oD = 'desc';
64
- }
65
- updatePageable({
66
- ...currentPageable,
67
- sort: key,
68
- direction: oD
69
- });
70
- };
65
+ const handleSortColumn = (key: keyof typeof columns) => {
66
+ const {sort, direction} = currentPageable;
67
+ let oD: "desc" | "asc";
68
+ if (sort == key) {
69
+ oD = direction === "desc" ? "asc" : "desc";
70
+ } else {
71
+ oD = "desc";
72
+ }
73
+ updatePageable({
74
+ ...currentPageable,
75
+ sort: key,
76
+ direction: oD,
77
+ });
78
+ };
71
79
 
72
- const handlePageChange = (e: any, pageNumber: number) => {
73
- updatePageable({
74
- ...currentPageable,
75
- pageNumber: pageNumber
76
- });
77
- };
80
+ const handlePageChange = (e: any, pageNumber: number) => {
81
+ updatePageable({
82
+ ...currentPageable,
83
+ pageNumber: pageNumber,
84
+ });
85
+ };
78
86
 
79
- const handleRowsPerPageChange = (e: any) => {
80
- updatePageable({
81
- ...currentPageable,
82
- pageSize: e.target.value as number
83
- });
84
- };
87
+ const handleRowsPerPageChange = (e: any) => {
88
+ updatePageable({
89
+ ...currentPageable,
90
+ pageSize: e.target.value as number,
91
+ });
92
+ };
85
93
 
86
- const updatePageable = (settings: PagingSettings<keyof typeof columns>) => {
87
- onPageableChange(settings);
88
- }
94
+ const updatePageable = (settings: PagingSettings<keyof typeof columns>) => {
95
+ onPageableChange(settings);
96
+ };
89
97
 
90
- const toggleColumnSettings = () => setShowColumnSettings(!showColumnSettings);
98
+ const toggleColumnSettings = () => setShowColumnSettings(!showColumnSettings);
91
99
 
92
- const handleColumnsChange = (sortKey: keyof typeof columns, show: boolean) => {
93
- onColumnsChange({
94
- ...columns,
95
- [sortKey]: {
96
- ...columns[sortKey],
97
- show
98
- }
99
- })
100
- }
100
+ const handleColumnsChange = (sortKey: keyof typeof columns, show: boolean) => {
101
+ onColumnsChange({
102
+ ...columns,
103
+ [sortKey]: {
104
+ ...columns[sortKey],
105
+ show,
106
+ },
107
+ });
108
+ };
101
109
 
102
- const theme = useTheme();
103
- return (
104
- <Paper sx={{ maxWidth: `calc(100vw - ${theme.spacing(4)})` }}>
105
- {!currentPage && (
106
- <Box display="flex" flexDirection="column" justifyContent="center" alignItems="center" p={3}>
107
- <CircularProgress />
108
- </Box>
109
- )}
110
- {currentPage && (
111
- <Fragment>
112
- <Box p={1}>
113
- <Grid container>
114
- <Grid item display="flex" flexGrow={1} alignItems="center">
115
- {onFilterClick && (
116
- <IconButton onClick={onFilterClick}>
117
- <FilterListIcon />
118
- </IconButton>
119
- )}
120
- <Box mx={1} />
121
- {renderFilterOptions && ( renderFilterOptions )}
122
- </Grid>
123
- <Grid item>
124
- <IconButton onClick={toggleColumnSettings}>
125
- <TuningIcon />
126
- </IconButton>
127
- </Grid>
128
- </Grid>
129
- </Box>
130
- <TableContainer >
131
- <Table size="small">
132
- <TableHead sx={{
133
- background: theme.palette.mode === 'light' ? theme.palette.grey[200] : theme.palette.grey[600]
134
- }}>
135
- <TableRow>
136
- {Object.keys(columns).filter(k => columns[k].show).map((k) => (
137
- <TableCell key={'data-table-' + k} sx={{ whiteSpace: 'nowrap' }} align={columns[k].align}>
138
- {!columns[k].unsortable && (
139
- <TableSortLabel
140
- active={currentPageable.sort === k}
141
- direction={currentPageable.sort === k ? currentPageable.direction : 'asc'}
142
- onClick={() => handleSortColumn(k)}
143
- >
144
- {columns[k].name}
145
- </TableSortLabel>
146
- )}
147
- {columns[k].unsortable && (columns[k].name)}
148
- </TableCell>
149
- ))}
150
- </TableRow>
151
- </TableHead>
152
- <TableBody sx={{
153
- '& > tr:not(.empty)': {
154
- cursor: 'pointer',
155
- '&:hover': {
156
- background: `${theme.palette.mode === 'light' ? theme.palette.grey[50] : theme.palette.grey[800]} !important`
157
- }
158
- }
159
- }}>
160
- {currentPage.content.length === 0 && (
161
- renderEmptyContent ?
162
- (<Fragment>{renderEmptyContent}</Fragment>) :
163
- (
164
- <TableRow className={'empty'}>
165
- <TableCell colSpan={Object.keys(columns).length}>
166
- <Box display="flex" flexDirection="column" justifyContent="center" alignItems="center" p={3}>
167
- <Box sx={{
168
- height: 300,
169
- [theme.breakpoints.down('md')]: {
170
- height: 150
171
- },
172
- }}>
173
- <UndrawEmpty height="100%" width="auto" />
174
- </Box>
175
- </Box>
176
- </TableCell>
177
- </TableRow>
178
- )
179
- )}
180
- {renderTableBody}
181
- </TableBody>
182
- </Table>
183
- </TableContainer>
184
- <TablePagination
185
- rowsPerPageOptions={[10, 25, 50]}
186
- component="div"
187
- count={currentPage.totalElements}
188
- rowsPerPage={currentPageable.pageSize}
189
- page={currentPageable.pageNumber}
190
- onPageChange={handlePageChange}
191
- onRowsPerPageChange={handleRowsPerPageChange}
192
- />
193
- {inProgress && (
194
- <LinearProgress variant="indeterminate" />
195
- )}
196
- <Dialog fullWidth maxWidth="sm" open={showColumnSettings}>
197
- <DialogContent>
198
- {renderColumnFilter && <Fragment>{renderColumnFilter}</Fragment>}
199
- {!renderColumnFilter && Object.keys(columns).map((k, i) => (
200
- <FormControlLabel key={'column-setting-' + i} label={columns[k].name}
201
- color="primary"
202
- control={<Checkbox checked={columns[k].show} onChange={e => handleColumnsChange(k, e.target.checked)} />}
203
- />
204
- ))}
205
- </DialogContent>
206
- <DialogActions>
207
- <Button variant="contained" color="primary" onClick={toggleColumnSettings}>OK</Button>
208
- </DialogActions>
209
- </Dialog>
210
- </Fragment>
211
- )}
212
- </Paper>
213
- )
214
- }
110
+ const theme = useTheme();
111
+ return (
112
+ <Paper sx={{maxWidth: `calc(100vw - ${theme.spacing(4)})`}}>
113
+ {!currentPage && (
114
+ <Box display="flex" flexDirection="column" justifyContent="center" alignItems="center" p={3}>
115
+ <CircularProgress />
116
+ </Box>
117
+ )}
118
+ {currentPage && (
119
+ <Fragment>
120
+ <Box p={1}>
121
+ <Grid container>
122
+ <Grid item display="flex" flexGrow={1} alignItems="center">
123
+ {onFilterClick && (
124
+ <IconButton onClick={onFilterClick}>
125
+ <FilterListIcon />
126
+ </IconButton>
127
+ )}
128
+ <Box mx={1} />
129
+ {renderFilterOptions && (renderFilterOptions)}
130
+ </Grid>
131
+ <Grid item>
132
+ <IconButton onClick={toggleColumnSettings}>
133
+ <TuningIcon />
134
+ </IconButton>
135
+ </Grid>
136
+ </Grid>
137
+ </Box>
138
+ <TableContainer>
139
+ <Table size="small">
140
+ <TableHead
141
+ sx={{
142
+ background: theme.palette.mode === "light"
143
+ ? theme.palette.grey[200]
144
+ : theme.palette.grey[600],
145
+ }}
146
+ >
147
+ <TableRow>
148
+ {Object.keys(columns).filter(k => columns[k].show).map((k) => (
149
+ <TableCell
150
+ key={"data-table-" + k}
151
+ sx={{whiteSpace: "nowrap"}}
152
+ align={columns[k].align}
153
+ >
154
+ {!columns[k].unsortable && (
155
+ <TableSortLabel
156
+ active={currentPageable.sort === k}
157
+ direction={currentPageable.sort === k
158
+ ? currentPageable.direction
159
+ : "asc"}
160
+ onClick={() => handleSortColumn(k)}
161
+ >
162
+ {columns[k].name}
163
+ </TableSortLabel>
164
+ )}
165
+ {columns[k].unsortable && (columns[k].name)}
166
+ </TableCell>
167
+ ))}
168
+ </TableRow>
169
+ </TableHead>
170
+ <TableBody
171
+ sx={{
172
+ "& > tr:not(.empty)": {
173
+ cursor: "pointer",
174
+ "&:hover": {
175
+ background: `${
176
+ theme.palette.mode === "light"
177
+ ? theme.palette.grey[50]
178
+ : theme.palette.grey[800]
179
+ } !important`,
180
+ },
181
+ },
182
+ }}
183
+ >
184
+ {currentPage.content.length === 0 && (
185
+ renderEmptyContent
186
+ ? <Fragment>{renderEmptyContent}</Fragment>
187
+ : (
188
+ <TableRow className={"empty"}>
189
+ <TableCell colSpan={Object.keys(columns).length}>
190
+ <Box
191
+ display="flex"
192
+ flexDirection="column"
193
+ justifyContent="center"
194
+ alignItems="center"
195
+ p={3}
196
+ >
197
+ <Box
198
+ sx={{
199
+ height: 300,
200
+ [theme.breakpoints.down("md")]: {
201
+ height: 150,
202
+ },
203
+ }}
204
+ >
205
+ <UndrawEmpty height="100%" width="auto" />
206
+ </Box>
207
+ </Box>
208
+ </TableCell>
209
+ </TableRow>
210
+ )
211
+ )}
212
+ {renderTableBody}
213
+ </TableBody>
214
+ </Table>
215
+ </TableContainer>
216
+ <TablePagination
217
+ rowsPerPageOptions={[10, 25, 50]}
218
+ component="div"
219
+ count={currentPage.totalElements}
220
+ rowsPerPage={currentPageable.pageSize}
221
+ page={currentPageable.pageNumber}
222
+ onPageChange={handlePageChange}
223
+ onRowsPerPageChange={handleRowsPerPageChange}
224
+ />
225
+ {inProgress && <LinearProgress variant="indeterminate" />}
226
+ <Dialog fullWidth maxWidth="sm" open={showColumnSettings}>
227
+ <DialogContent>
228
+ {renderColumnFilter && <Fragment>{renderColumnFilter}</Fragment>}
229
+ {!renderColumnFilter
230
+ && Object.keys(columns).map((k, i) => (
231
+ <FormControlLabel
232
+ key={"column-setting-" + i}
233
+ label={columns[k].name}
234
+ color="primary"
235
+ control={
236
+ <Checkbox
237
+ checked={columns[k].show}
238
+ onChange={e => handleColumnsChange(k, e.target.checked)}
239
+ />
240
+ }
241
+ />
242
+ ))}
243
+ </DialogContent>
244
+ <DialogActions>
245
+ <Button variant="contained" color="primary" onClick={toggleColumnSettings}>OK</Button>
246
+ </DialogActions>
247
+ </Dialog>
248
+ </Fragment>
249
+ )}
250
+ </Paper>
251
+ );
252
+ };