@dartech/arsenal-ui 1.2.4 → 1.2.6

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 (271) hide show
  1. package/.babelrc +13 -0
  2. package/.eslintrc.json +22 -0
  3. package/{index.d.ts → index.ts} +5 -5
  4. package/jest.config.ts +11 -0
  5. package/package.json +3 -12
  6. package/project.json +94 -0
  7. package/rollup.config.js +146 -0
  8. package/src/assets/chevron_left_gray.svg +3 -0
  9. package/src/consts/index.ts +13 -0
  10. package/src/interfaces/common.ts +18 -0
  11. package/src/interfaces/definition.ts +143 -0
  12. package/src/interfaces/{index.d.ts → index.ts} +3 -3
  13. package/src/interfaces/ui.ts +80 -0
  14. package/src/lib/Alert/Alert.tsx +108 -0
  15. package/src/lib/Alert/index.ts +1 -0
  16. package/src/lib/Breadcrumbs/Breadcrumbs.styled.tsx +16 -0
  17. package/src/lib/Breadcrumbs/Breadcrumbs.tsx +40 -0
  18. package/src/lib/Breadcrumbs/{index.d.ts → index.ts} +1 -1
  19. package/src/lib/ContentLayout/ContentLayout.tsx +31 -0
  20. package/src/lib/ContentLayout/index.ts +1 -0
  21. package/src/lib/Definition/CreateDefinition/CreateDefinition.tsx +78 -0
  22. package/src/lib/Definition/CreateDefinition/{index.d.ts → index.ts} +1 -1
  23. package/src/lib/Definition/DefinitionFiller/DefinitionFiller.tsx +71 -0
  24. package/src/lib/Definition/DefinitionFiller/{index.d.ts → index.ts} +1 -1
  25. package/src/lib/Definition/DefinitionValueView/DefinitionValueView.tsx +54 -0
  26. package/src/lib/Definition/DefinitionValueView/PropertyDataView.tsx +67 -0
  27. package/src/lib/Definition/DefinitionValueView/{index.d.ts → index.ts} +1 -1
  28. package/src/lib/Definition/{index.d.ts → index.ts} +3 -3
  29. package/src/lib/Forms/BackButton.tsx +46 -0
  30. package/src/lib/Forms/ControlAceEditor.tsx +125 -0
  31. package/src/lib/Forms/ControlAutocomplete.tsx +145 -0
  32. package/src/lib/Forms/ControlCheckbox.tsx +113 -0
  33. package/src/lib/Forms/ControlDate.tsx +75 -0
  34. package/src/lib/Forms/ControlDateTime.tsx +77 -0
  35. package/src/lib/Forms/ControlDebouncedInput.tsx +80 -0
  36. package/src/lib/Forms/ControlInput.tsx +111 -0
  37. package/src/lib/Forms/ControlNumberInput.tsx +121 -0
  38. package/src/lib/Forms/ControlQueryAutocomplete.tsx +197 -0
  39. package/src/lib/Forms/ControlRadio.tsx +136 -0
  40. package/src/lib/Forms/ControlSelect.tsx +164 -0
  41. package/src/lib/Forms/ControlSwitch.tsx +71 -0
  42. package/src/lib/Forms/ControlTime.tsx +93 -0
  43. package/src/lib/Forms/CopyButton.tsx +46 -0
  44. package/src/lib/Forms/{index.d.ts → index.ts} +15 -15
  45. package/src/lib/Forms/useAutocomplete.tsx +47 -0
  46. package/src/lib/InfoItem/InfoItem.tsx +40 -0
  47. package/src/lib/InfoItem/{index.d.ts → index.ts} +1 -1
  48. package/src/lib/InfoItem/styles.ts +17 -0
  49. package/src/lib/JsonPathPicker/JsonPathPicker.tsx +73 -0
  50. package/src/lib/JsonPathPicker/PropertyStep.tsx +70 -0
  51. package/src/lib/JsonPathPicker/{index.d.ts → index.ts} +1 -1
  52. package/src/lib/JsonView/JsonView.tsx +41 -0
  53. package/src/lib/JsonView/{index.d.ts → index.ts} +1 -1
  54. package/src/lib/Loader/Loader.tsx +41 -0
  55. package/src/lib/Loader/{index.d.ts → index.ts} +1 -1
  56. package/src/lib/Modals/JsonModalView.tsx +53 -0
  57. package/src/lib/Modals/{index.d.ts → index.ts} +1 -1
  58. package/src/lib/Property/PropertyFiller/JsonEditor.tsx +58 -0
  59. package/src/lib/Property/PropertyFiller/MultiplePropertyFiller.tsx +129 -0
  60. package/src/lib/Property/PropertyFiller/MultiplePropertyWidget.tsx +85 -0
  61. package/src/lib/Property/PropertyFiller/PropertyFiller.tsx +199 -0
  62. package/src/lib/Property/PropertyFiller/{index.d.ts → index.ts} +2 -2
  63. package/src/lib/Property/PropertyFiller/usePropertyFiller.ts +72 -0
  64. package/src/lib/Property/PropertyFiller/useStyles.ts +12 -0
  65. package/src/lib/Property/PropertyValidator/NodeValidator.tsx +92 -0
  66. package/src/lib/Property/PropertyValidator/NodesList.tsx +26 -0
  67. package/src/lib/Property/PropertyValidator/NumericTypeValidator.tsx +59 -0
  68. package/src/lib/Property/PropertyValidator/PropertyValidator.tsx +42 -0
  69. package/src/lib/Property/PropertyValidator/PropertyValidatorContext.tsx +4 -0
  70. package/src/lib/Property/PropertyValidator/StringTypeValidator.tsx +36 -0
  71. package/src/lib/Property/PropertyValidator/ValidationNodeSelector.tsx +62 -0
  72. package/src/lib/Property/PropertyValidator/index.ts +1 -0
  73. package/src/lib/Property/PropertyValueField/BooleanValueField.tsx +49 -0
  74. package/src/lib/Property/PropertyValueField/DateTimeValueField.tsx +58 -0
  75. package/src/lib/Property/PropertyValueField/DateValueField.tsx +58 -0
  76. package/src/lib/Property/PropertyValueField/JsonValueField.tsx +65 -0
  77. package/src/lib/Property/PropertyValueField/PropertyValueField.tsx +49 -0
  78. package/src/lib/Property/PropertyValueField/StringValueField.tsx +50 -0
  79. package/src/lib/Property/PropertyValueField/TimeValueField.tsx +67 -0
  80. package/src/lib/Property/PropertyValueField/{index.d.ts → index.ts} +1 -1
  81. package/src/lib/Property/PropertyWidget/PropertyWidget.tsx +115 -0
  82. package/src/lib/Property/PropertyWidget/{index.d.ts → index.ts} +1 -1
  83. package/src/lib/Property/UpsertProperty/CreatePropertiesList.tsx +148 -0
  84. package/src/lib/Property/UpsertProperty/CreatePropertyFormFields.tsx +158 -0
  85. package/src/lib/Property/UpsertProperty/CustomPropertyField.tsx +40 -0
  86. package/src/lib/Property/UpsertProperty/PropertyAdditionalFields/BigDecimalPropertyFields.tsx +41 -0
  87. package/src/lib/Property/UpsertProperty/PropertyAdditionalFields/DateAdditionalFields.tsx +27 -0
  88. package/src/lib/Property/UpsertProperty/PropertyAdditionalFields/EntityAdditionalFields.tsx +133 -0
  89. package/src/lib/Property/UpsertProperty/PropertyAdditionalFields/EntityReferencePropertyFields.tsx +46 -0
  90. package/src/lib/Property/UpsertProperty/PropertyAdditionalFields/PropertyAdditionalFields.tsx +52 -0
  91. package/src/lib/Property/UpsertProperty/PropertyAdditionalFields/StringPropertyFields.tsx +103 -0
  92. package/src/lib/Property/UpsertProperty/PropertyAdditionalFields/{index.d.ts → index.ts} +1 -1
  93. package/src/lib/Property/UpsertProperty/{index.d.ts → index.ts} +2 -2
  94. package/src/lib/Property/UpsertProperty/useCustomFields.ts +22 -0
  95. package/src/lib/Property/ViewPropertiesList/ViewPropertiesList.tsx +37 -0
  96. package/src/lib/Property/ViewPropertiesList/{index.d.ts → index.ts} +1 -1
  97. package/src/lib/Property/ViewProperty/EntityPropertiesShortView.tsx +40 -0
  98. package/src/lib/Property/ViewProperty/EntityPropertiesView.tsx +48 -0
  99. package/src/lib/Property/ViewProperty/PropertyDataTable.tsx +148 -0
  100. package/src/lib/Property/ViewProperty/PropertyItem.tsx +43 -0
  101. package/src/lib/Property/ViewProperty/ViewProperty.tsx +52 -0
  102. package/src/lib/Property/ViewProperty/{index.d.ts → index.ts} +1 -1
  103. package/src/lib/Property/{index.d.ts → index.ts} +5 -5
  104. package/src/lib/Sidebar/Sidebar.styled.tsx +157 -0
  105. package/src/lib/Sidebar/Sidebar.tsx +27 -0
  106. package/src/lib/Sidebar/SidebarContext.tsx +37 -0
  107. package/src/lib/Sidebar/SidebarDrawer.tsx +50 -0
  108. package/src/lib/Sidebar/SidebarLink/MenuIcon.tsx +16 -0
  109. package/src/lib/Sidebar/SidebarLink/SidebarLink.tsx +54 -0
  110. package/src/lib/Sidebar/SidebarLink/SidebarLinkItem.tsx +54 -0
  111. package/src/lib/Sidebar/SidebarLink/SidebarNestedItem.tsx +62 -0
  112. package/src/lib/Sidebar/SidebarLink/{index.d.ts → index.ts} +2 -2
  113. package/src/lib/Sidebar/index.ts +2 -0
  114. package/src/lib/Status/Status.tsx +16 -0
  115. package/src/lib/Status/{index.d.ts → index.ts} +1 -1
  116. package/src/lib/Status/styles.ts +21 -0
  117. package/src/lib/StepperView/StepperView.tsx +73 -0
  118. package/src/lib/StepperView/{index.d.ts → index.ts} +1 -1
  119. package/src/lib/Table/DataGrid/JsonTypeCell.tsx +51 -0
  120. package/src/lib/Table/DataGrid/Table.tsx +117 -0
  121. package/src/lib/Table/DataGrid/TableAction.tsx +43 -0
  122. package/src/lib/Table/DataGrid/TableColumnMenu.tsx +12 -0
  123. package/src/lib/Table/DataGrid/TablePagination.tsx +42 -0
  124. package/src/lib/Table/DataGrid/index.ts +2 -0
  125. package/src/lib/Table/DataGrid/styles.ts +59 -0
  126. package/src/lib/Table/DataGrid/usePagination.ts +15 -0
  127. package/src/lib/Table/DataGrid/useTableQueryPagination.ts +47 -0
  128. package/src/lib/Table/DataGrid/useTableQuerySorting.ts +47 -0
  129. package/src/lib/Table/SimpleTable/SimpleTable.tsx +138 -0
  130. package/src/lib/Table/SimpleTable/TableActionCell.tsx +67 -0
  131. package/src/lib/Table/SimpleTable/index.ts +2 -0
  132. package/src/lib/Table/SimpleTable/useTablePagination.ts +54 -0
  133. package/src/lib/Table/SimpleTable/useTableSorting.ts +50 -0
  134. package/src/lib/Table/index.ts +2 -0
  135. package/src/lib/Tabs/RouteTabs.tsx +54 -0
  136. package/src/lib/Tabs/TabPanel.tsx +42 -0
  137. package/src/lib/Tabs/{index.d.ts → index.ts} +2 -2
  138. package/src/lib/{index.d.ts → index.ts} +16 -16
  139. package/src/theme/baseTheme.ts +128 -0
  140. package/src/theme/fonts.d.ts +2 -0
  141. package/src/theme/index.ts +126 -0
  142. package/src/theme/inputThemeOptions.ts +126 -0
  143. package/src/theme/stepperThemeOptions.ts +20 -0
  144. package/src/theme/tableThemeOptions.ts +50 -0
  145. package/src/theme/typographyThemeOptions.ts +32 -0
  146. package/src/utils/common.ts +73 -0
  147. package/src/utils/dem.ts +431 -0
  148. package/src/utils/hooks.ts +41 -0
  149. package/src/utils/{index.d.ts → index.ts} +5 -5
  150. package/src/utils/ui-utils.tsx +132 -0
  151. package/src/utils/validators.ts +14 -0
  152. package/tsconfig.json +25 -0
  153. package/tsconfig.lib.json +23 -0
  154. package/tsconfig.spec.json +20 -0
  155. package/index.js +0 -1
  156. package/src/consts/index.d.ts +0 -12
  157. package/src/interfaces/common.d.ts +0 -17
  158. package/src/interfaces/definition.d.ts +0 -107
  159. package/src/interfaces/ui.d.ts +0 -70
  160. package/src/lib/Alert/Alert.d.ts +0 -53
  161. package/src/lib/Alert/index.d.ts +0 -1
  162. package/src/lib/Breadcrumbs/Breadcrumbs.d.ts +0 -9
  163. package/src/lib/Breadcrumbs/Breadcrumbs.styled.d.ts +0 -2
  164. package/src/lib/ContentLayout/ContentLayout.d.ts +0 -9
  165. package/src/lib/ContentLayout/index.d.ts +0 -1
  166. package/src/lib/Definition/CreateDefinition/CreateDefinition.d.ts +0 -11
  167. package/src/lib/Definition/DefinitionFiller/DefinitionFiller.d.ts +0 -10
  168. package/src/lib/Definition/DefinitionValueView/DefinitionValueView.d.ts +0 -8
  169. package/src/lib/Definition/DefinitionValueView/PropertyDataView.d.ts +0 -9
  170. package/src/lib/Forms/BackButton.d.ts +0 -7
  171. package/src/lib/Forms/ControlAceEditor.d.ts +0 -24
  172. package/src/lib/Forms/ControlAutocomplete.d.ts +0 -69
  173. package/src/lib/Forms/ControlCheckbox.d.ts +0 -51
  174. package/src/lib/Forms/ControlDate.d.ts +0 -18
  175. package/src/lib/Forms/ControlDateTime.d.ts +0 -18
  176. package/src/lib/Forms/ControlDebouncedInput.d.ts +0 -4
  177. package/src/lib/Forms/ControlInput.d.ts +0 -59
  178. package/src/lib/Forms/ControlNumberInput.d.ts +0 -51
  179. package/src/lib/Forms/ControlQueryAutocomplete.d.ts +0 -16
  180. package/src/lib/Forms/ControlRadio.d.ts +0 -66
  181. package/src/lib/Forms/ControlSelect.d.ts +0 -67
  182. package/src/lib/Forms/ControlSwitch.d.ts +0 -19
  183. package/src/lib/Forms/ControlTime.d.ts +0 -18
  184. package/src/lib/Forms/CopyButton.d.ts +0 -20
  185. package/src/lib/Forms/useAutocomplete.d.ts +0 -10
  186. package/src/lib/InfoItem/InfoItem.d.ts +0 -10
  187. package/src/lib/InfoItem/styles.d.ts +0 -12
  188. package/src/lib/JsonPathPicker/JsonPathPicker.d.ts +0 -10
  189. package/src/lib/JsonPathPicker/PropertyStep.d.ts +0 -11
  190. package/src/lib/JsonView/JsonView.d.ts +0 -7
  191. package/src/lib/Loader/Loader.d.ts +0 -21
  192. package/src/lib/Modals/JsonModalView.d.ts +0 -10
  193. package/src/lib/Property/PropertyFiller/JsonEditor.d.ts +0 -10
  194. package/src/lib/Property/PropertyFiller/MultiplePropertyFiller.d.ts +0 -12
  195. package/src/lib/Property/PropertyFiller/MultiplePropertyWidget.d.ts +0 -11
  196. package/src/lib/Property/PropertyFiller/PropertyFiller.d.ts +0 -12
  197. package/src/lib/Property/PropertyFiller/usePropertyFiller.d.ts +0 -24
  198. package/src/lib/Property/PropertyFiller/useStyles.d.ts +0 -12
  199. package/src/lib/Property/PropertyValidator/NodeValidator.d.ts +0 -6
  200. package/src/lib/Property/PropertyValidator/NodesList.d.ts +0 -6
  201. package/src/lib/Property/PropertyValidator/NumericTypeValidator.d.ts +0 -8
  202. package/src/lib/Property/PropertyValidator/PropertyValidator.d.ts +0 -6
  203. package/src/lib/Property/PropertyValidator/PropertyValidatorContext.d.ts +0 -3
  204. package/src/lib/Property/PropertyValidator/StringTypeValidator.d.ts +0 -8
  205. package/src/lib/Property/PropertyValidator/ValidationNodeSelector.d.ts +0 -7
  206. package/src/lib/Property/PropertyValidator/index.d.ts +0 -1
  207. package/src/lib/Property/PropertyValueField/BooleanValueField.d.ts +0 -7
  208. package/src/lib/Property/PropertyValueField/DateTimeValueField.d.ts +0 -9
  209. package/src/lib/Property/PropertyValueField/DateValueField.d.ts +0 -9
  210. package/src/lib/Property/PropertyValueField/JsonValueField.d.ts +0 -10
  211. package/src/lib/Property/PropertyValueField/PropertyValueField.d.ts +0 -9
  212. package/src/lib/Property/PropertyValueField/StringValueField.d.ts +0 -9
  213. package/src/lib/Property/PropertyValueField/TimeValueField.d.ts +0 -9
  214. package/src/lib/Property/PropertyWidget/PropertyWidget.d.ts +0 -13
  215. package/src/lib/Property/UpsertProperty/CreatePropertiesList.d.ts +0 -13
  216. package/src/lib/Property/UpsertProperty/CreatePropertyFormFields.d.ts +0 -10
  217. package/src/lib/Property/UpsertProperty/CustomPropertyField.d.ts +0 -7
  218. package/src/lib/Property/UpsertProperty/PropertyAdditionalFields/BigDecimalPropertyFields.d.ts +0 -6
  219. package/src/lib/Property/UpsertProperty/PropertyAdditionalFields/DateAdditionalFields.d.ts +0 -7
  220. package/src/lib/Property/UpsertProperty/PropertyAdditionalFields/EntityAdditionalFields.d.ts +0 -8
  221. package/src/lib/Property/UpsertProperty/PropertyAdditionalFields/EntityReferencePropertyFields.d.ts +0 -6
  222. package/src/lib/Property/UpsertProperty/PropertyAdditionalFields/PropertyAdditionalFields.d.ts +0 -10
  223. package/src/lib/Property/UpsertProperty/PropertyAdditionalFields/StringPropertyFields.d.ts +0 -6
  224. package/src/lib/Property/UpsertProperty/useCustomFields.d.ts +0 -6
  225. package/src/lib/Property/ViewPropertiesList/ViewPropertiesList.d.ts +0 -8
  226. package/src/lib/Property/ViewProperty/EntityPropertiesShortView.d.ts +0 -7
  227. package/src/lib/Property/ViewProperty/EntityPropertiesView.d.ts +0 -8
  228. package/src/lib/Property/ViewProperty/PropertyDataTable.d.ts +0 -7
  229. package/src/lib/Property/ViewProperty/PropertyItem.d.ts +0 -9
  230. package/src/lib/Property/ViewProperty/ViewProperty.d.ts +0 -9
  231. package/src/lib/Sidebar/Sidebar.d.ts +0 -10
  232. package/src/lib/Sidebar/Sidebar.styled.d.ts +0 -117
  233. package/src/lib/Sidebar/SidebarContext.d.ts +0 -11
  234. package/src/lib/Sidebar/SidebarDrawer.d.ts +0 -9
  235. package/src/lib/Sidebar/SidebarLink/MenuIcon.d.ts +0 -7
  236. package/src/lib/Sidebar/SidebarLink/SidebarLink.d.ts +0 -7
  237. package/src/lib/Sidebar/SidebarLink/SidebarLinkItem.d.ts +0 -8
  238. package/src/lib/Sidebar/SidebarLink/SidebarNestedItem.d.ts +0 -10
  239. package/src/lib/Sidebar/index.d.ts +0 -2
  240. package/src/lib/Status/Status.d.ts +0 -8
  241. package/src/lib/Status/styles.d.ts +0 -12
  242. package/src/lib/StepperView/StepperView.d.ts +0 -11
  243. package/src/lib/Table/DataGrid/JsonTypeCell.d.ts +0 -7
  244. package/src/lib/Table/DataGrid/Table.d.ts +0 -49
  245. package/src/lib/Table/DataGrid/TableAction.d.ts +0 -13
  246. package/src/lib/Table/DataGrid/TableColumnMenu.d.ts +0 -3
  247. package/src/lib/Table/DataGrid/TablePagination.d.ts +0 -3
  248. package/src/lib/Table/DataGrid/index.d.ts +0 -2
  249. package/src/lib/Table/DataGrid/styles.d.ts +0 -12
  250. package/src/lib/Table/DataGrid/usePagination.d.ts +0 -5
  251. package/src/lib/Table/DataGrid/useTableQueryPagination.d.ts +0 -11
  252. package/src/lib/Table/DataGrid/useTableQuerySorting.d.ts +0 -6
  253. package/src/lib/Table/SimpleTable/SimpleTable.d.ts +0 -17
  254. package/src/lib/Table/SimpleTable/TableActionCell.d.ts +0 -10
  255. package/src/lib/Table/SimpleTable/index.d.ts +0 -2
  256. package/src/lib/Table/SimpleTable/useTablePagination.d.ts +0 -7
  257. package/src/lib/Table/SimpleTable/useTableSorting.d.ts +0 -6
  258. package/src/lib/Table/index.d.ts +0 -2
  259. package/src/lib/Tabs/RouteTabs.d.ts +0 -11
  260. package/src/lib/Tabs/TabPanel.d.ts +0 -25
  261. package/src/theme/baseTheme.d.ts +0 -2
  262. package/src/theme/index.d.ts +0 -1
  263. package/src/theme/inputThemeOptions.d.ts +0 -117
  264. package/src/theme/stepperThemeOptions.d.ts +0 -16
  265. package/src/theme/tableThemeOptions.d.ts +0 -47
  266. package/src/theme/typographyThemeOptions.d.ts +0 -29
  267. package/src/utils/common.d.ts +0 -7
  268. package/src/utils/dem.d.ts +0 -27
  269. package/src/utils/hooks.d.ts +0 -7
  270. package/src/utils/ui-utils.d.ts +0 -8
  271. package/src/utils/validators.d.ts +0 -5
@@ -0,0 +1,42 @@
1
+ import React from 'react';
2
+ import Box from '@mui/material/Box';
3
+ import Pagination from '@mui/material/Pagination';
4
+ import MuiTablePagination from '@mui/material/TablePagination';
5
+ import {
6
+ gridPageCountSelector,
7
+ gridPageSelector,
8
+ gridRowCountSelector,
9
+ gridPageSizeSelector,
10
+ useGridApiContext,
11
+ useGridSelector,
12
+ } from '@mui/x-data-grid';
13
+
14
+ const TablePagination = () => {
15
+ const apiRef = useGridApiContext();
16
+ const page = useGridSelector(apiRef, gridPageSelector);
17
+ const pageCount = useGridSelector(apiRef, gridPageCountSelector);
18
+ const rowCount = useGridSelector(apiRef, gridRowCountSelector);
19
+ const pageSize = useGridSelector(apiRef, gridPageSizeSelector);
20
+
21
+ const onPageChange = (value) => apiRef.current.setPage(value);
22
+ const onRowsPerPageChange = (event: React.ChangeEvent<HTMLInputElement>) =>
23
+ apiRef.current.setPageSize(parseInt(event.target.value, 10));
24
+
25
+ return (
26
+ <Box px={2} display="flex" alignItems="center">
27
+ <MuiTablePagination
28
+ component="div"
29
+ page={page}
30
+ count={rowCount}
31
+ rowsPerPage={pageSize}
32
+ rowsPerPageOptions={[10, 20, 50, 100]}
33
+ onPageChange={(event, value) => onPageChange(value)}
34
+ onRowsPerPageChange={onRowsPerPageChange}
35
+ ActionsComponent={undefined}
36
+ />
37
+ <Pagination count={pageCount} page={page + 1} onChange={(event, value) => onPageChange(value - 1)} />
38
+ </Box>
39
+ );
40
+ };
41
+
42
+ export default TablePagination;
@@ -0,0 +1,2 @@
1
+ export * from './Table';
2
+ export * from './TableAction';
@@ -0,0 +1,59 @@
1
+ import { makeStyles } from 'tss-react/mui';
2
+
3
+ export default makeStyles()({
4
+ root: {
5
+ width: '100%',
6
+
7
+ '& .MuiDataGrid-virtualScrollerContent': {
8
+ height: 'auto !important',
9
+ minHeight: '56px !important',
10
+ },
11
+
12
+ '& .MuiDataGrid-virtualScrollerRenderZone': {
13
+ position: 'static',
14
+ },
15
+
16
+ '& .MuiDataGrid-renderingZone': {
17
+ maxHeight: 'none !important',
18
+ },
19
+
20
+ '& .MuiDataGrid-cell': {
21
+ maxHeight: 'none !important',
22
+ lineHeight: 'unset !important',
23
+ // whiteSpace: 'normal !important',
24
+ textOverflow: 'ellipsis',
25
+ wordBreak: 'break-all',
26
+
27
+ '& .MuiDataGrid-actionsCell': {
28
+ width: '100%',
29
+ gridGap: '4px',
30
+ flexWrap: 'wrap',
31
+
32
+ '& > button[aria-label="more"]': {
33
+ marginLeft: 'auto',
34
+ },
35
+ },
36
+ },
37
+
38
+ '& .MuiDataGrid-row': {
39
+ maxHeight: 'none !important',
40
+ },
41
+
42
+ '& .Sorted': {
43
+ '& .MuiDataGrid-iconButtonContainer': {
44
+ visibility: 'visible',
45
+ width: 'auto',
46
+
47
+ '& svg': {
48
+ opacity: '1 !important',
49
+ },
50
+ },
51
+
52
+ '&.--desc': {
53
+ '& svg': {
54
+ transform: 'rotate(180deg)',
55
+ },
56
+ },
57
+ },
58
+ },
59
+ });
@@ -0,0 +1,15 @@
1
+ import { useEffect, useState } from 'react';
2
+
3
+ const usePagination = (initialPageSize?: number) => {
4
+ const [pageSize, setPageSize] = useState(10);
5
+
6
+ useEffect(() => {
7
+ setPageSize(initialPageSize);
8
+ }, [initialPageSize]);
9
+
10
+ const handlePageSizeChange = (size) => setPageSize(size);
11
+
12
+ return { pageSize, handlePageSizeChange };
13
+ };
14
+
15
+ export default usePagination;
@@ -0,0 +1,47 @@
1
+ import { useEffect } from 'react';
2
+ import { useSearchParams } from 'react-router-dom';
3
+ import { GridFeatureMode } from '@mui/x-data-grid';
4
+
5
+ interface Props {
6
+ mode: GridFeatureMode;
7
+ }
8
+
9
+ export const useTableQueryPagination = ({ mode }: Props) => {
10
+ const [queryParams, setQueryParams] = useSearchParams();
11
+
12
+ const page = +queryParams.get('page') || 0;
13
+ const size = +queryParams.get('size') || 10;
14
+
15
+ const onPageChange = (newPage: number) => {
16
+ queryParams.set('page', `${newPage}`);
17
+ setQueryParams(queryParams, { replace: true });
18
+ };
19
+
20
+ const onSizeChange = (count: number) => {
21
+ queryParams.set('size', `${count}`);
22
+ setQueryParams(queryParams, { replace: true });
23
+ };
24
+
25
+ useEffect(() => {
26
+ if (mode === 'server') {
27
+ if (!queryParams.has('page')) {
28
+ queryParams.set('page', '0');
29
+ }
30
+
31
+ if (!queryParams.has('size')) {
32
+ queryParams.set('size', `10`);
33
+ }
34
+
35
+ setQueryParams(queryParams, { replace: true });
36
+ }
37
+ }, [mode, queryParams, setQueryParams]);
38
+
39
+ return {
40
+ page,
41
+ size,
42
+ onPageChange,
43
+ onSizeChange,
44
+ };
45
+ };
46
+
47
+ export default useTableQueryPagination;
@@ -0,0 +1,47 @@
1
+ import { useSearchParams } from 'react-router-dom';
2
+ import { GridColumnHeaderParams, GridColumns } from '@mui/x-data-grid';
3
+
4
+ export const useTableQuerySorting = () => {
5
+ const [queryParams, setQueryParams] = useSearchParams();
6
+ const sortParams = queryParams.getAll('sort').map((param) => param.split(','));
7
+
8
+ const onColumnHeaderClick = ({ field }: GridColumnHeaderParams) => {
9
+ let keyFound = false;
10
+
11
+ const sortValues = queryParams.getAll('sort');
12
+ queryParams.delete('sort');
13
+
14
+ sortValues.forEach((sortValue) => {
15
+ const [key, sort] = sortValue.split(',');
16
+ if (key === field) {
17
+ keyFound = true;
18
+ if (sort === 'asc') {
19
+ queryParams.append('sort', `${key},desc`);
20
+ }
21
+ } else {
22
+ queryParams.append('sort', `${key},${sort}`);
23
+ }
24
+ });
25
+
26
+ if (!keyFound) {
27
+ queryParams.append('sort', `${field},asc`);
28
+ }
29
+ setQueryParams(queryParams, { replace: true });
30
+ };
31
+
32
+ const getSortedColumns = (columns: GridColumns): GridColumns => {
33
+ return columns.map((column) => {
34
+ const columnSort = sortParams.find((param) => param[0] === column.field);
35
+ if (columnSort) {
36
+ column.headerClassName = `Sorted --${columnSort[1]} `;
37
+ } else {
38
+ column.headerClassName = '';
39
+ }
40
+ return column;
41
+ });
42
+ };
43
+
44
+ return { onColumnHeaderClick, getSortedColumns };
45
+ };
46
+
47
+ export default useTableQuerySorting;
@@ -0,0 +1,138 @@
1
+ import { ReactNode, forwardRef, ForwardedRef } from 'react';
2
+ import MuiTable from '@mui/material/Table';
3
+ import TableBody from '@mui/material/TableBody';
4
+ import TableCell from '@mui/material/TableCell';
5
+ import TableContainer from '@mui/material/TableContainer';
6
+ import TableHead from '@mui/material/TableHead';
7
+ import TablePagination from '@mui/material/TablePagination';
8
+ import TableRow from '@mui/material/TableRow';
9
+ import TableSortLabel from '@mui/material/TableSortLabel';
10
+ import TableFooter from '@mui/material/TableFooter';
11
+
12
+ import { Column, Row } from '../../../interfaces';
13
+ import { Loader } from '../../Loader';
14
+ import Backdrop from '@mui/material/Backdrop';
15
+ import useTablePagination from './useTablePagination';
16
+ import useTableSorting from './useTableSorting';
17
+
18
+ type SortDirection = "asc" | "desc";
19
+
20
+ interface Props<T> {
21
+ columns: Column<T>[];
22
+ rows: Row<T>[];
23
+ totalCount: number;
24
+ loading?: boolean;
25
+ pagination?: boolean;
26
+ onRowClick?: (row: Row<T>) => void;
27
+ children?: ReactNode;
28
+ verticalAlign?: 'top' | 'middle' | 'bottom' | 'sub' | 'baseline';
29
+ }
30
+
31
+ function TableInner<T>({
32
+ columns = [],
33
+ rows = [],
34
+ totalCount,
35
+ children,
36
+ pagination = true,
37
+ loading = false,
38
+ onRowClick,
39
+ verticalAlign = 'middle'
40
+ }: Props<T>, ref: ForwardedRef<HTMLTableElement>) {
41
+ const { page, size, onPageChange, onSizeChange } = useTablePagination();
42
+ const { onSortChanged, getColumnSorting } = useTableSorting();
43
+
44
+ return (
45
+ <TableContainer sx={{ position: 'relative', overflow: 'visible' }}>
46
+ <Backdrop open={loading} sx={{ position: 'absolute', top: 0, left: 0 }}>
47
+ <Loader />
48
+ </Backdrop>
49
+ <MuiTable ref={ref}>
50
+ <TableHead>
51
+ <TableRow>
52
+ {columns.map((column, index) => {
53
+ const sortDirection = column.sortKey
54
+ ? getColumnSorting(column.sortKey)
55
+ : false;
56
+ return (
57
+ <TableCell
58
+ key={index}
59
+ align={column.align ? column.align : 'left'}
60
+ sortDirection={sortDirection as SortDirection}
61
+ sx={{ width: column.width ? `${column.width}%` : 'unset' }}
62
+ >
63
+ <TableSortLabel
64
+ active={!!sortDirection}
65
+ hideSortIcon={!column.sortKey}
66
+ direction={(sortDirection as SortDirection) || 'asc'}
67
+ onClick={() =>
68
+ column.sortKey ? onSortChanged(column.sortKey) : {}
69
+ }
70
+ >
71
+ {column.label}
72
+ </TableSortLabel>
73
+ </TableCell>
74
+ );
75
+ })}
76
+ </TableRow>
77
+ </TableHead>
78
+ <TableBody>
79
+ {rows.map((row, index) => (
80
+ <TableRow
81
+ hover
82
+ onClick={onRowClick ? () => onRowClick(row) : row.onClick}
83
+ key={index}
84
+ sx={{ verticalAlign }}
85
+ >
86
+ {columns.map((column, idx) => (
87
+ <TableCell
88
+ key={idx}
89
+ align={column.align ? column.align : 'left'}
90
+ sx={{ width: column.width ? `${column.width}%` : 'unset' }}
91
+ >
92
+ {column.renderCell
93
+ ? column.renderCell(row, index)
94
+ : ((row as any)[column.id] as string)}
95
+ </TableCell>
96
+ ))}
97
+ </TableRow>
98
+ ))}
99
+ </TableBody>
100
+ {(pagination || children) ? (
101
+ <TableFooter>
102
+ <TableRow>
103
+ {
104
+ children && (
105
+ <TableCell
106
+ colSpan={columns.length}
107
+ sx={{ background: '#F0F0F7', px: 4, py: 3 }}
108
+ >
109
+ {children}
110
+ </TableCell>
111
+ )
112
+ }
113
+ {
114
+ pagination && rows.length && (
115
+ <TablePagination
116
+ rowsPerPageOptions={[5, 10, 25]}
117
+ count={totalCount}
118
+ rowsPerPage={+size}
119
+ page={+page}
120
+ sx={{ borderBottom: 'none' }}
121
+ onPageChange={(_, page) => onPageChange(page)}
122
+ onRowsPerPageChange={(event) =>
123
+ onSizeChange(+event.target.value)
124
+ }
125
+ />
126
+ )
127
+ }
128
+ </TableRow>
129
+ </TableFooter>
130
+ ) : null}
131
+ </MuiTable>
132
+ </TableContainer>
133
+ );
134
+ }
135
+ export const SimpleTable = forwardRef(TableInner) as <T>(
136
+ props: Props<T> & { ref?: ForwardedRef<HTMLTableElement> }
137
+ ) => ReturnType<typeof TableInner>;
138
+ export default SimpleTable;
@@ -0,0 +1,67 @@
1
+ import { useState, MouseEvent } from 'react';
2
+ import IconButton from '@mui/material/IconButton';
3
+ import Menu from '@mui/material/Menu';
4
+ import MenuItem from '@mui/material/MenuItem';
5
+ import MoreHorizIcon from '@mui/icons-material/MoreHoriz';
6
+
7
+ type ActionItem = {
8
+ title: string;
9
+ onClick: (e?: MouseEvent<HTMLElement>) => void;
10
+ }
11
+
12
+ type Props = {
13
+ actionsList: ActionItem[]
14
+ }
15
+
16
+ export const TableActionCell = ({ actionsList }: Props) => {
17
+ const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null);
18
+ const open = Boolean(anchorEl);
19
+ const handleClick = (e: MouseEvent<HTMLElement>) => {
20
+ e.stopPropagation();
21
+ setAnchorEl(e.currentTarget);
22
+ };
23
+ const handleClose = () => {
24
+ setAnchorEl(null);
25
+ };
26
+ return (
27
+ <div>
28
+ <IconButton
29
+ aria-label="more"
30
+ id="more-button"
31
+ aria-controls={open ? 'more-menu' : undefined}
32
+ aria-expanded={open ? 'true' : undefined}
33
+ aria-haspopup="true"
34
+ onClick={handleClick}
35
+ >
36
+ <MoreHorizIcon />
37
+ </IconButton>
38
+ <Menu
39
+ id="more-menu"
40
+ MenuListProps={{
41
+ 'aria-labelledby': 'more-button',
42
+ }}
43
+ anchorEl={anchorEl}
44
+ open={open}
45
+ onClose={(e: MouseEvent<HTMLElement>) => {
46
+ e.stopPropagation();
47
+ handleClose();
48
+ }}
49
+ PaperProps={{
50
+ style: {
51
+ minWidth: '127px'
52
+ }
53
+ }}
54
+ >
55
+ {actionsList.map((option) => (
56
+ <MenuItem key={option.title} onClick={(e: MouseEvent<HTMLElement>) => {
57
+ e.stopPropagation();
58
+ if (option.onClick) option.onClick();
59
+ handleClose();
60
+ }}>
61
+ {option.title}
62
+ </MenuItem>
63
+ ))}
64
+ </Menu>
65
+ </div>
66
+ )
67
+ }
@@ -0,0 +1,2 @@
1
+ export * from './SimpleTable';
2
+ export * from './TableActionCell';
@@ -0,0 +1,54 @@
1
+ import { useCallback, useEffect, useMemo } from 'react';
2
+ import { useSearchParams } from 'react-router-dom';
3
+
4
+ const useTablePagination = () => {
5
+ const [searchParams, setSearchParams] = useSearchParams();
6
+
7
+ const page = useMemo(
8
+ () => searchParams.get('page') ?? 0,
9
+ [searchParams]
10
+ );
11
+ const size = useMemo(
12
+ () => searchParams.get('size') ?? 10,
13
+ [searchParams]
14
+ );
15
+
16
+ const onPageChange = useCallback(
17
+ (newPage: number) => {
18
+ setSearchParams((params) => {
19
+ params.set('page', `${newPage}`);
20
+ return params;
21
+ });
22
+ },
23
+ [setSearchParams]
24
+ );
25
+
26
+ const onSizeChange = useCallback(
27
+ (newSize: number) => {
28
+ setSearchParams((params) => {
29
+ params.set('size', `${newSize}`);
30
+ return params;
31
+ });
32
+ },
33
+ [setSearchParams]
34
+ );
35
+
36
+ useEffect(() => {
37
+ if (!searchParams.has('page')) {
38
+ setSearchParams((params) => {
39
+ params.set('page', '0');
40
+ return params;
41
+ });
42
+ }
43
+ if (!searchParams.has('size')) {
44
+ setSearchParams((params) => {
45
+ params.set('size', '10');
46
+ return params;
47
+ });
48
+ }
49
+ }, [searchParams, setSearchParams]);
50
+
51
+ return { page, size, onPageChange, onSizeChange };
52
+ };
53
+
54
+ export default useTablePagination;
@@ -0,0 +1,50 @@
1
+ import { useCallback, useMemo } from 'react';
2
+ import { useSearchParams } from 'react-router-dom';
3
+
4
+ const useTableSorting = () => {
5
+ const [searchParams, setSearchParams] = useSearchParams();
6
+
7
+ const sortParams = useMemo(
8
+ () => searchParams.getAll('sort').map((param) => param.split(',')),
9
+ [searchParams]
10
+ );
11
+
12
+ const onSortChanged = useCallback(
13
+ (sortKey: string) => {
14
+ setSearchParams((params) => {
15
+ console.log(sortKey, params.get('page'));
16
+ params.delete('sort');
17
+
18
+ let keyFound = false;
19
+ sortParams.forEach(([key, value]) => {
20
+ if (key === sortKey) {
21
+ keyFound = true;
22
+ if (value === 'asc') {
23
+ params.append('sort', `${key},desc`);
24
+ }
25
+ } else {
26
+ params.append('sort', `${key},${value}`);
27
+ }
28
+ });
29
+
30
+ if (!keyFound) {
31
+ params.append('sort', `${sortKey},asc`);
32
+ }
33
+
34
+ return params;
35
+ });
36
+ },
37
+ [sortParams, setSearchParams]
38
+ );
39
+
40
+ const getColumnSorting = useCallback(
41
+ (sortKey: string) => {
42
+ const sort = sortParams.find(([key, _]) => key === sortKey);
43
+ return sort ? sort[1] : false;
44
+ },
45
+ [sortParams]
46
+ );
47
+
48
+ return { sortParams, onSortChanged, getColumnSorting };
49
+ };
50
+ export default useTableSorting;
@@ -0,0 +1,2 @@
1
+ export * from './DataGrid';
2
+ export * from './SimpleTable';
@@ -0,0 +1,54 @@
1
+ import { useMemo } from 'react';
2
+ import Box from '@mui/material/Box';
3
+ import Paper from '@mui/material/Paper';
4
+ import Tab from '@mui/material/Tab';
5
+ import Tabs from '@mui/material/Tabs';
6
+ import TabPanel from './TabPanel';
7
+
8
+ import { useNavigate, useLocation } from 'react-router-dom';
9
+
10
+ interface RouteTab {
11
+ name: string;
12
+ label: string;
13
+ component: React.ReactElement;
14
+ }
15
+
16
+ interface Props {
17
+ tabs: RouteTab[];
18
+ }
19
+
20
+ export const RouteTabs = (props: Props) => {
21
+ const { tabs } = props;
22
+
23
+ const navigate = useNavigate();
24
+ const location = useLocation();
25
+
26
+ const queryParams = useMemo(() => new URLSearchParams(location.search), [location.search]);
27
+ const value = queryParams.get('tab');
28
+
29
+ const handleChange = (event, newValue: string) => {
30
+ queryParams.set('tab', newValue);
31
+ navigate({ pathname: location.pathname, search: queryParams.toString() }, { replace: true });
32
+ };
33
+
34
+ return (
35
+ <Box>
36
+ <Paper>
37
+ <Tabs value={value || tabs[0]?.name} indicatorColor="primary" textColor="primary" onChange={handleChange}>
38
+ {tabs.map((tab) => (
39
+ <Tab key={tab.name} value={tab.name} label={tab.label} />
40
+ ))}
41
+ </Tabs>
42
+ </Paper>
43
+ <Box mt={2}>
44
+ {tabs.map((tab) => (
45
+ <TabPanel key={tab.name} value={value || tabs[0]?.name} index={tab.name}>
46
+ {tab.component}
47
+ </TabPanel>
48
+ ))}
49
+ </Box>
50
+ </Box>
51
+ );
52
+ };
53
+
54
+ export default RouteTabs;
@@ -0,0 +1,42 @@
1
+ import React from 'react';
2
+
3
+ /**
4
+ * This interface is referencing the [[TabPanel]] component props.
5
+ * @category Common UI components
6
+ */
7
+ export interface TabPanelProps {
8
+ /**
9
+ * Active tab value
10
+ */
11
+ value: number | string;
12
+ /**
13
+ * Index of current panel
14
+ */
15
+ index: number | string;
16
+ /**
17
+ * Rendered children component
18
+ */
19
+ children: React.ReactElement;
20
+ }
21
+
22
+ /**
23
+ * Tab panel component. Used with tabs component
24
+ * @category Common UI components
25
+ */
26
+ export const TabPanel = (props: TabPanelProps) => {
27
+ const { children, value, index, ...other } = props;
28
+
29
+ return (
30
+ <div
31
+ role="tabpanel"
32
+ hidden={value !== index}
33
+ id={`simple-tabpanel-${index}`}
34
+ aria-labelledby={`simple-tab-${index}`}
35
+ {...other}
36
+ >
37
+ {value === index ? children : null}
38
+ </div>
39
+ );
40
+ };
41
+
42
+ export default TabPanel;
@@ -1,2 +1,2 @@
1
- export * from './TabPanel';
2
- export * from './RouteTabs';
1
+ export * from './TabPanel';
2
+ export * from './RouteTabs';
@@ -1,16 +1,16 @@
1
- export * from './Alert';
2
- export * from './Forms';
3
- export * from './Loader';
4
- export * from './Table';
5
- export * from './Tabs';
6
- export * from './Modals';
7
- export * from './InfoItem';
8
- export * from './Definition';
9
- export * from './Property';
10
- export * from './Status';
11
- export * from './JsonView';
12
- export * from './JsonPathPicker';
13
- export * from './StepperView';
14
- export * from './Sidebar';
15
- export * from './ContentLayout';
16
- export * from './Breadcrumbs';
1
+ export * from './Alert';
2
+ export * from './Forms';
3
+ export * from './Loader';
4
+ export * from './Table';
5
+ export * from './Tabs';
6
+ export * from './Modals';
7
+ export * from './InfoItem';
8
+ export * from './Definition';
9
+ export * from './Property';
10
+ export * from './Status';
11
+ export * from './JsonView';
12
+ export * from './JsonPathPicker';
13
+ export * from './StepperView';
14
+ export * from './Sidebar';
15
+ export * from './ContentLayout';
16
+ export * from './Breadcrumbs';