@pautena/react-design-system 0.0.1 → 0.1.2

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 (279) hide show
  1. package/dist/cjs/index.js +28 -28
  2. package/dist/cjs/index.js.map +1 -1
  3. package/dist/cjs/types/components/app-bar/app-bar.types.d.ts +2 -1
  4. package/dist/cjs/types/components/content/content.d.ts +2 -0
  5. package/dist/cjs/types/components/content/content.types.d.ts +4 -0
  6. package/dist/cjs/types/components/content/index.d.ts +2 -0
  7. package/dist/cjs/types/components/header/header.d.ts +2 -61
  8. package/dist/cjs/types/components/header/header.types.d.ts +55 -0
  9. package/dist/cjs/types/components/header/index.d.ts +1 -0
  10. package/dist/cjs/types/components/index.d.ts +1 -0
  11. package/dist/cjs/types/components/tab/index.d.ts +0 -1
  12. package/dist/cjs/types/components/tab/tab-card/tab-card.d.ts +1 -2
  13. package/dist/cjs/types/components/table-list/table-list.d.ts +4 -7
  14. package/dist/cjs/types/generators/generators.mock.d.ts +22 -1
  15. package/dist/cjs/types/generators/generators.model.d.ts +5 -1
  16. package/dist/cjs/types/generators/model-form/model-form.d.ts +5 -5
  17. package/dist/cjs/types/generators/model-router/model-router.d.ts +4 -35
  18. package/dist/cjs/types/generators/model-router/model-router.types.d.ts +8 -0
  19. package/dist/cjs/types/generators/model-router/screens/add-screen.d.ts +16 -2
  20. package/dist/cjs/types/generators/model-router/screens/details-screen.d.ts +20 -2
  21. package/dist/cjs/types/generators/model-router/screens/list-screen.d.ts +30 -2
  22. package/dist/cjs/types/generators/model-router/screens/screens.types.d.ts +11 -0
  23. package/dist/cjs/types/generators/model-router/screens/update-screen.d.ts +29 -2
  24. package/dist/cjs/types/generators/model-router/stories/templates.d.ts +23 -0
  25. package/dist/cjs/types/generators/object-details/object-details.d.ts +4 -4
  26. package/dist/cjs/types/layouts/app-bar-with-drawer-layout/app-bar-with-drawer-layout.d.ts +5 -8
  27. package/dist/cjs/types/layouts/header-layout/header-layout.d.ts +4 -5
  28. package/dist/cjs/types/layouts/index.d.ts +1 -6
  29. package/dist/cjs/types/providers/index.d.ts +1 -0
  30. package/dist/cjs/types/providers/notification-center/index.d.ts +1 -0
  31. package/dist/cjs/types/providers/tab-provider/index.d.ts +2 -0
  32. package/dist/cjs/types/providers/tab-provider/tab-provider.context.d.ts +4 -0
  33. package/dist/cjs/types/providers/tab-provider/tab-provider.provider.d.ts +6 -0
  34. package/dist/cjs/types/utils/theme.d.ts +7 -4
  35. package/dist/esm/index.js +28 -28
  36. package/dist/esm/index.js.map +1 -1
  37. package/dist/esm/types/components/app-bar/app-bar.types.d.ts +2 -1
  38. package/dist/esm/types/components/content/content.d.ts +2 -0
  39. package/dist/esm/types/components/content/content.types.d.ts +4 -0
  40. package/dist/esm/types/components/content/index.d.ts +2 -0
  41. package/dist/esm/types/components/header/header.d.ts +2 -61
  42. package/dist/esm/types/components/header/header.types.d.ts +55 -0
  43. package/dist/esm/types/components/header/index.d.ts +1 -0
  44. package/dist/esm/types/components/index.d.ts +1 -0
  45. package/dist/esm/types/components/tab/index.d.ts +0 -1
  46. package/dist/esm/types/components/tab/tab-card/tab-card.d.ts +1 -2
  47. package/dist/esm/types/components/table-list/table-list.d.ts +4 -7
  48. package/dist/esm/types/generators/generators.mock.d.ts +22 -1
  49. package/dist/esm/types/generators/generators.model.d.ts +5 -1
  50. package/dist/esm/types/generators/model-form/model-form.d.ts +5 -5
  51. package/dist/esm/types/generators/model-router/model-router.d.ts +4 -35
  52. package/dist/esm/types/generators/model-router/model-router.types.d.ts +8 -0
  53. package/dist/esm/types/generators/model-router/screens/add-screen.d.ts +16 -2
  54. package/dist/esm/types/generators/model-router/screens/details-screen.d.ts +20 -2
  55. package/dist/esm/types/generators/model-router/screens/list-screen.d.ts +30 -2
  56. package/dist/esm/types/generators/model-router/screens/screens.types.d.ts +11 -0
  57. package/dist/esm/types/generators/model-router/screens/update-screen.d.ts +29 -2
  58. package/dist/esm/types/generators/model-router/stories/templates.d.ts +23 -0
  59. package/dist/esm/types/generators/object-details/object-details.d.ts +4 -4
  60. package/dist/esm/types/layouts/app-bar-with-drawer-layout/app-bar-with-drawer-layout.d.ts +5 -8
  61. package/dist/esm/types/layouts/header-layout/header-layout.d.ts +4 -5
  62. package/dist/esm/types/layouts/index.d.ts +1 -6
  63. package/dist/esm/types/providers/index.d.ts +1 -0
  64. package/dist/esm/types/providers/notification-center/index.d.ts +1 -0
  65. package/dist/esm/types/providers/tab-provider/index.d.ts +2 -0
  66. package/dist/esm/types/providers/tab-provider/tab-provider.context.d.ts +4 -0
  67. package/dist/esm/types/providers/tab-provider/tab-provider.provider.d.ts +6 -0
  68. package/dist/esm/types/utils/theme.d.ts +7 -4
  69. package/dist/index.d.ts +146 -122
  70. package/package.json +4 -1
  71. package/.eslintrc.js +0 -26
  72. package/.github/workflows/ci.yml +0 -23
  73. package/.github/workflows/deploy-storybook.yaml +0 -23
  74. package/.github/workflows/publish.yml +0 -31
  75. package/.husky/pre-commit +0 -5
  76. package/.prettierignore +0 -4
  77. package/.storybook/main.js +0 -10
  78. package/.storybook/preview.js +0 -36
  79. package/babel.config.js +0 -3
  80. package/dist/cjs/types/components/tab/tab.context.d.ts +0 -4
  81. package/dist/cjs/types/layouts/data-table-layout/data-table-layout.d.ts +0 -12
  82. package/dist/cjs/types/layouts/data-table-layout/index.d.ts +0 -1
  83. package/dist/cjs/types/layouts/details-layout/details-layout.d.ts +0 -12
  84. package/dist/cjs/types/layouts/details-layout/index.d.ts +0 -1
  85. package/dist/cjs/types/layouts/form-layout/form-layout.d.ts +0 -8
  86. package/dist/cjs/types/layouts/form-layout/index.d.ts +0 -1
  87. package/dist/cjs/types/layouts/list-layout/index.d.ts +0 -1
  88. package/dist/cjs/types/layouts/list-layout/list-layout.d.ts +0 -8
  89. package/dist/cjs/types/layouts/tab-layout/index.d.ts +0 -1
  90. package/dist/cjs/types/layouts/tab-layout/tab-layout.d.ts +0 -7
  91. package/dist/esm/types/components/tab/tab.context.d.ts +0 -4
  92. package/dist/esm/types/layouts/data-table-layout/data-table-layout.d.ts +0 -12
  93. package/dist/esm/types/layouts/data-table-layout/index.d.ts +0 -1
  94. package/dist/esm/types/layouts/details-layout/details-layout.d.ts +0 -12
  95. package/dist/esm/types/layouts/details-layout/index.d.ts +0 -1
  96. package/dist/esm/types/layouts/form-layout/form-layout.d.ts +0 -8
  97. package/dist/esm/types/layouts/form-layout/index.d.ts +0 -1
  98. package/dist/esm/types/layouts/list-layout/index.d.ts +0 -1
  99. package/dist/esm/types/layouts/list-layout/list-layout.d.ts +0 -8
  100. package/dist/esm/types/layouts/tab-layout/index.d.ts +0 -1
  101. package/dist/esm/types/layouts/tab-layout/tab-layout.d.ts +0 -7
  102. package/jest.config.js +0 -14
  103. package/jest.setup.ts +0 -5
  104. package/rollup.config.js +0 -40
  105. package/src/components/app-bar/app-bar.stories.tsx +0 -54
  106. package/src/components/app-bar/app-bar.test.tsx +0 -142
  107. package/src/components/app-bar/app-bar.tsx +0 -150
  108. package/src/components/app-bar/app-bar.types.ts +0 -16
  109. package/src/components/app-bar/index.ts +0 -3
  110. package/src/components/app-bar/mini-app-bar/index.ts +0 -1
  111. package/src/components/app-bar/mini-app-bar/mini-app-bar.tsx +0 -31
  112. package/src/components/bullet/bullet.stories.tsx +0 -43
  113. package/src/components/bullet/bullet.test.tsx +0 -24
  114. package/src/components/bullet/bullet.tsx +0 -30
  115. package/src/components/bullet/index.ts +0 -1
  116. package/src/components/center-container/center-container.stories.tsx +0 -50
  117. package/src/components/center-container/center-container.test.tsx +0 -16
  118. package/src/components/center-container/center-container.tsx +0 -32
  119. package/src/components/center-container/index.ts +0 -1
  120. package/src/components/drawer/__snapshots__/drawer.test.tsx.snap +0 -20
  121. package/src/components/drawer/drawer.context.ts +0 -20
  122. package/src/components/drawer/drawer.mixins.ts +0 -24
  123. package/src/components/drawer/drawer.mock.tsx +0 -100
  124. package/src/components/drawer/drawer.provider.tsx +0 -23
  125. package/src/components/drawer/drawer.test.tsx +0 -97
  126. package/src/components/drawer/drawer.tsx +0 -30
  127. package/src/components/drawer/drawer.types.ts +0 -53
  128. package/src/components/drawer/index.ts +0 -5
  129. package/src/components/drawer/mini-drawer/index.ts +0 -1
  130. package/src/components/drawer/mini-drawer/mini-drawer.stories.tsx +0 -34
  131. package/src/components/drawer/mini-drawer/mini-drawer.tsx +0 -67
  132. package/src/components/drawer-content/drawer-content.stories.tsx +0 -29
  133. package/src/components/drawer-content/drawer-content.test.tsx +0 -34
  134. package/src/components/drawer-content/drawer-content.tsx +0 -18
  135. package/src/components/drawer-content/index.ts +0 -1
  136. package/src/components/drawer-item/drawer-item.stories.tsx +0 -62
  137. package/src/components/drawer-item/drawer-item.test.tsx +0 -119
  138. package/src/components/drawer-item/drawer-item.tsx +0 -69
  139. package/src/components/drawer-item/index.ts +0 -1
  140. package/src/components/drawer-section/drawer-section.mock.tsx +0 -39
  141. package/src/components/drawer-section/drawer-section.stories.tsx +0 -28
  142. package/src/components/drawer-section/drawer-section.test.tsx +0 -44
  143. package/src/components/drawer-section/drawer-section.tsx +0 -40
  144. package/src/components/drawer-section/index.ts +0 -1
  145. package/src/components/header/header.dummy.ts +0 -55
  146. package/src/components/header/header.stories.tsx +0 -116
  147. package/src/components/header/header.test.tsx +0 -167
  148. package/src/components/header/header.tsx +0 -185
  149. package/src/components/header/index.ts +0 -1
  150. package/src/components/index.ts +0 -17
  151. package/src/components/label/index.ts +0 -1
  152. package/src/components/label/label.stories.tsx +0 -49
  153. package/src/components/label/label.test.tsx +0 -30
  154. package/src/components/label/label.tsx +0 -60
  155. package/src/components/link/index.ts +0 -1
  156. package/src/components/link/link.tsx +0 -17
  157. package/src/components/loading-area/index.ts +0 -1
  158. package/src/components/loading-area/loading-area.stories.tsx +0 -17
  159. package/src/components/loading-area/loading-area.test.tsx +0 -11
  160. package/src/components/loading-area/loading-area.tsx +0 -13
  161. package/src/components/placeholder/index.ts +0 -1
  162. package/src/components/placeholder/placeholder.mock.ts +0 -15
  163. package/src/components/placeholder/placeholder.stories.tsx +0 -44
  164. package/src/components/placeholder/placeholder.test.tsx +0 -76
  165. package/src/components/placeholder/placeholder.tsx +0 -75
  166. package/src/components/query-container/index.ts +0 -1
  167. package/src/components/query-container/query-container.stories.tsx +0 -68
  168. package/src/components/query-container/query-container.test.tsx +0 -95
  169. package/src/components/query-container/query-container.tsx +0 -71
  170. package/src/components/sign-in/index.ts +0 -1
  171. package/src/components/sign-in/sign-in.stories.tsx +0 -36
  172. package/src/components/sign-in/sign-in.test.tsx +0 -95
  173. package/src/components/sign-in/sign-in.tsx +0 -97
  174. package/src/components/tab/index.ts +0 -3
  175. package/src/components/tab/tab-card/index.ts +0 -1
  176. package/src/components/tab/tab-card/tab-card.dummy.tsx +0 -27
  177. package/src/components/tab/tab-card/tab-card.stories.tsx +0 -22
  178. package/src/components/tab/tab-card/tab-card.test.tsx +0 -53
  179. package/src/components/tab/tab-card/tab-card.tsx +0 -30
  180. package/src/components/tab/tab-panel/index.ts +0 -1
  181. package/src/components/tab/tab-panel/tab-panel.test.tsx +0 -26
  182. package/src/components/tab/tab-panel/tab-panel.tsx +0 -27
  183. package/src/components/tab/tab.context.ts +0 -5
  184. package/src/components/table/enhanced-remote-table/enhanced-remote-table.mock.tsx +0 -27
  185. package/src/components/table/enhanced-remote-table/enhanced-remote-table.stories.tsx +0 -24
  186. package/src/components/table/enhanced-remote-table/enhanced-remote-table.test.tsx +0 -77
  187. package/src/components/table/enhanced-remote-table/enhanced-remote-table.tsx +0 -74
  188. package/src/components/table/enhanced-remote-table/index.ts +0 -1
  189. package/src/components/table/enhanced-table/enhanced-table-head.tsx +0 -58
  190. package/src/components/table/enhanced-table/enhanced-table.mock.tsx +0 -93
  191. package/src/components/table/enhanced-table/enhanced-table.stories.tsx +0 -21
  192. package/src/components/table/enhanced-table/enhanced-table.test.tsx +0 -107
  193. package/src/components/table/enhanced-table/enhanced-table.tsx +0 -136
  194. package/src/components/table/enhanced-table/index.ts +0 -2
  195. package/src/components/table/index.ts +0 -2
  196. package/src/components/table-list/index.ts +0 -1
  197. package/src/components/table-list/table-list.stories.tsx +0 -75
  198. package/src/components/table-list/table-list.test.tsx +0 -283
  199. package/src/components/table-list/table-list.tsx +0 -131
  200. package/src/components/value-displays/group-value-card/group-value-card.mock.tsx +0 -35
  201. package/src/components/value-displays/group-value-card/group-value-card.stories.tsx +0 -26
  202. package/src/components/value-displays/group-value-card/group-value-card.test.tsx +0 -58
  203. package/src/components/value-displays/group-value-card/group-value-card.tsx +0 -65
  204. package/src/components/value-displays/group-value-card/index.ts +0 -1
  205. package/src/components/value-displays/index.ts +0 -4
  206. package/src/components/value-displays/value-boolean/index.ts +0 -1
  207. package/src/components/value-displays/value-boolean/value-boolean.stories.tsx +0 -25
  208. package/src/components/value-displays/value-boolean/value-boolean.test.tsx +0 -27
  209. package/src/components/value-displays/value-boolean/value-boolean.tsx +0 -33
  210. package/src/components/value-displays/value-card/index.ts +0 -1
  211. package/src/components/value-displays/value-card/value-card.stories.tsx +0 -22
  212. package/src/components/value-displays/value-card/value-card.test.tsx +0 -18
  213. package/src/components/value-displays/value-card/value-card.tsx +0 -12
  214. package/src/components/value-displays/value-text/index.ts +0 -1
  215. package/src/components/value-displays/value-text/value-test.test.tsx +0 -21
  216. package/src/components/value-displays/value-text/value-text.stories.tsx +0 -26
  217. package/src/components/value-displays/value-text/value-text.tsx +0 -32
  218. package/src/generators/generators.mock.ts +0 -215
  219. package/src/generators/generators.model.ts +0 -41
  220. package/src/generators/index.ts +0 -4
  221. package/src/generators/model-form/index.ts +0 -1
  222. package/src/generators/model-form/model-form.stories.tsx +0 -30
  223. package/src/generators/model-form/model-form.test.tsx +0 -98
  224. package/src/generators/model-form/model-form.tsx +0 -97
  225. package/src/generators/model-router/index.ts +0 -1
  226. package/src/generators/model-router/model-router.stories.tsx +0 -160
  227. package/src/generators/model-router/model-router.test.tsx +0 -633
  228. package/src/generators/model-router/model-router.tsx +0 -54
  229. package/src/generators/model-router/screens/add-screen.tsx +0 -52
  230. package/src/generators/model-router/screens/details-screen.tsx +0 -53
  231. package/src/generators/model-router/screens/index.ts +0 -4
  232. package/src/generators/model-router/screens/list-screen.tsx +0 -81
  233. package/src/generators/model-router/screens/update-screen.tsx +0 -62
  234. package/src/generators/object-details/index.ts +0 -1
  235. package/src/generators/object-details/object-details.stories.tsx +0 -20
  236. package/src/generators/object-details/object-details.test.tsx +0 -21
  237. package/src/generators/object-details/object-details.tsx +0 -70
  238. package/src/index.ts +0 -4
  239. package/src/layouts/app-bar-with-drawer-layout/app-bar-with-drawer-layout.stories.tsx +0 -29
  240. package/src/layouts/app-bar-with-drawer-layout/app-bar-with-drawer-layout.tsx +0 -34
  241. package/src/layouts/app-bar-with-drawer-layout/index.ts +0 -1
  242. package/src/layouts/data-table-layout/data-table-layout.stories.tsx +0 -94
  243. package/src/layouts/data-table-layout/data-table-layout.tsx +0 -30
  244. package/src/layouts/data-table-layout/index.ts +0 -1
  245. package/src/layouts/details-layout/details-layout.stories.tsx +0 -81
  246. package/src/layouts/details-layout/details-layout.tsx +0 -33
  247. package/src/layouts/details-layout/index.ts +0 -1
  248. package/src/layouts/form-layout/form-layout.stories.tsx +0 -65
  249. package/src/layouts/form-layout/form-layout.tsx +0 -18
  250. package/src/layouts/form-layout/index.ts +0 -1
  251. package/src/layouts/header-layout/header-layout.stories.tsx +0 -68
  252. package/src/layouts/header-layout/header-layout.tsx +0 -24
  253. package/src/layouts/header-layout/index.ts +0 -1
  254. package/src/layouts/index.ts +0 -7
  255. package/src/layouts/list-layout/index.ts +0 -1
  256. package/src/layouts/list-layout/list-layout.stories.tsx +0 -102
  257. package/src/layouts/list-layout/list-layout.tsx +0 -36
  258. package/src/layouts/tab-layout/index.ts +0 -1
  259. package/src/layouts/tab-layout/tab-layout.stories.tsx +0 -88
  260. package/src/layouts/tab-layout/tab-layout.tsx +0 -11
  261. package/src/providers/index.ts +0 -1
  262. package/src/providers/notification-center/index.ts +0 -1
  263. package/src/providers/notification-center/notification-center.context.ts +0 -37
  264. package/src/providers/notification-center/notification-center.provider.tsx +0 -51
  265. package/src/providers/notification-center/notification-center.stories.tsx +0 -52
  266. package/src/providers/notification-center/notification-center.test.tsx +0 -112
  267. package/src/storybook.tsx +0 -56
  268. package/src/tests/assertions.ts +0 -72
  269. package/src/tests/components.tsx +0 -60
  270. package/src/tests/content-placeholder.stories.tsx +0 -16
  271. package/src/tests/index.ts +0 -3
  272. package/src/tests/skeleton-card.stories.tsx +0 -18
  273. package/src/tests/testing-library.tsx +0 -65
  274. package/src/utils/arrays.test.ts +0 -9
  275. package/src/utils/arrays.ts +0 -7
  276. package/src/utils/index.ts +0 -2
  277. package/src/utils/theme.ts +0 -6
  278. package/tsconfig.json +0 -27
  279. package/tsconfig.rollup.json +0 -26
@@ -1,136 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-explicit-any */
2
- import React from "react";
3
- import { ReactNode, useState } from "react";
4
- import {
5
- Box,
6
- TableContainer,
7
- TextField,
8
- TableBody,
9
- InputAdornment,
10
- Table,
11
- CircularProgress,
12
- TableCell,
13
- TableRow,
14
- } from "@mui/material";
15
- import Search from "@mui/icons-material/Search";
16
- import { EnhancedTableHead, HeadCell, Order } from "./enhanced-table-head";
17
-
18
- function getFilter<T>(columns: HeadCell[], search: string) {
19
- return (d: T) => {
20
- return (
21
- !search ||
22
- columns.some((col) => {
23
- let value = (d as any)[col.id];
24
- if (value?.toLowerCase) {
25
- value = value.toLowerCase();
26
- }
27
- return value?.toString().includes(search.toLowerCase());
28
- })
29
- );
30
- };
31
- }
32
-
33
- function getComparator(order: Order, orderBy: any): (a: any, b: any) => number {
34
- return order === "desc"
35
- ? (a, b) => descendingComparator(a, b, orderBy)
36
- : (a, b) => -descendingComparator(a, b, orderBy);
37
- }
38
- function descendingComparator<T>(a: T, b: T, orderBy: keyof T) {
39
- if (b[orderBy] < a[orderBy]) {
40
- return -1;
41
- }
42
- if (b[orderBy] > a[orderBy]) {
43
- return 1;
44
- }
45
- return 0;
46
- }
47
-
48
- interface Props<T> {
49
- readonly data: T[];
50
- search?: boolean;
51
- defaultSort: string;
52
- defaultOrder?: Order;
53
- loading?: boolean;
54
- columns: HeadCell[];
55
- children: (data: T[]) => ReactNode;
56
- }
57
-
58
- export const EnhancedTable = <T,>({
59
- children,
60
- data,
61
- search,
62
- columns,
63
- defaultSort,
64
- defaultOrder = "asc",
65
- loading = false,
66
- }: Props<T>) => {
67
- const [searchFilter, setSearchFilter] = useState<string>("");
68
- const [order, setOrder] = useState<Order>(defaultOrder);
69
- const [orderBy, setOrderBy] = useState(defaultSort);
70
-
71
- const handleRequestSort = (property: string) => {
72
- const isAsc = orderBy === property && order === "asc";
73
- setOrder(isAsc ? "desc" : "asc");
74
- setOrderBy(property);
75
- };
76
-
77
- const filteredData = data
78
- .slice()
79
- .filter(getFilter<T>(columns, searchFilter))
80
- .sort(getComparator(order, orderBy));
81
-
82
- return (
83
- <>
84
- <Box sx={{ paddingX: 1, paddingBottom: 2 }}>
85
- {search && (
86
- <Box paddingY={2}>
87
- <TextField
88
- fullWidth
89
- placeholder="Search"
90
- InputProps={{
91
- role: "search",
92
- startAdornment: (
93
- <InputAdornment position="start">
94
- <Search />
95
- </InputAdornment>
96
- ),
97
- }}
98
- onChange={(e) => setSearchFilter(e.target.value)}
99
- />
100
- </Box>
101
- )}
102
- <TableContainer>
103
- <Table>
104
- <EnhancedTableHead
105
- order={order}
106
- orderBy={orderBy}
107
- headCells={columns}
108
- onRequestSort={handleRequestSort}
109
- />
110
- <TableBody>
111
- {loading ? (
112
- <TableRow>
113
- <TableCell colSpan={columns.length} sx={{ textAlign: "center" }}>
114
- <CircularProgress />
115
- </TableCell>
116
- </TableRow>
117
- ) : filteredData.length === 0 ? (
118
- <TableRow>
119
- <TableCell colSpan={columns.length} sx={{ textAlign: "center" }}>
120
- No data
121
- </TableCell>
122
- </TableRow>
123
- ) : (
124
- children(filteredData)
125
- )}
126
- </TableBody>
127
- </Table>
128
- </TableContainer>
129
- </Box>
130
- </>
131
- );
132
- };
133
-
134
- EnhancedTable.defaultProps = {
135
- defaultOrder: "asc",
136
- };
@@ -1,2 +0,0 @@
1
- export * from "./enhanced-table";
2
- export * from "./enhanced-table-head";
@@ -1,2 +0,0 @@
1
- export * from "./enhanced-table";
2
- export * from "./enhanced-remote-table";
@@ -1 +0,0 @@
1
- export * from "./table-list";
@@ -1,75 +0,0 @@
1
- import React from "react";
2
- import { useDemoData } from "@mui/x-data-grid-generator";
3
- import { ComponentMeta } from "@storybook/react";
4
- import { createTemplate } from "../../storybook";
5
- import { TableList } from "./table-list";
6
- import { action } from "@storybook/addon-actions";
7
-
8
- const maxColumns = 3;
9
-
10
- export default {
11
- title: "Tables/TableList",
12
- component: TableList,
13
- parameters: {
14
- layout: "fullscreen",
15
- },
16
- } as ComponentMeta<typeof TableList>;
17
-
18
- const Template = createTemplate(({ dataSetType, size, ...rest }) => {
19
- const { data } = useDemoData({
20
- dataSet: dataSetType,
21
- rowLength: size,
22
- maxColumns,
23
- });
24
- const { rows } = data;
25
- const columns = data.columns.map(({ field, headerName }) => ({
26
- id: field,
27
- label: headerName,
28
- sort: true,
29
- disablePadding: false,
30
- numeric: false,
31
- }));
32
-
33
- return <TableList {...rest} columns={columns} data={rows} onClick={action("onClick row")} />;
34
- });
35
-
36
- export const Default = Template.bind({});
37
- Default.args = {
38
- size: 40,
39
- dataSetType: "Commodity",
40
- search: true,
41
- };
42
-
43
- export const Loading = Template.bind({});
44
- Loading.args = {
45
- size: 40,
46
- dataSetType: "Commodity",
47
- search: true,
48
- loading: true,
49
- };
50
-
51
- export const WihtoutSearch = Template.bind({});
52
- WihtoutSearch.args = {
53
- size: 40,
54
- dataSetType: "Commodity",
55
- search: false,
56
- };
57
-
58
- export const WithOptions = Template.bind({});
59
- WithOptions.args = {
60
- size: 40,
61
- dataSetType: "Commodity",
62
- search: false,
63
- options: [
64
- {
65
- id: "edit",
66
- label: "Edit",
67
- onClick: action("Option edit"),
68
- },
69
- {
70
- id: "remove",
71
- label: "Remove",
72
- onClick: action("Option remove"),
73
- },
74
- ],
75
- };
@@ -1,283 +0,0 @@
1
- import React from "react";
2
- import { expectProgressIndicator, render } from "../../tests";
3
- import { screen } from "@testing-library/react";
4
- import userEvents from "@testing-library/user-event";
5
- import { BasicData, TableRowOption, TableList } from "./table-list";
6
- import { HeadCell } from "../table/enhanced-table";
7
-
8
- const columns: HeadCell[] = [
9
- {
10
- id: "id",
11
- numeric: true,
12
- disablePadding: false,
13
- label: "Item ID",
14
- sort: false,
15
- },
16
- {
17
- id: "name",
18
- numeric: false,
19
- disablePadding: false,
20
- label: "Name",
21
- sort: true,
22
- },
23
- {
24
- id: "value",
25
- numeric: true,
26
- disablePadding: false,
27
- label: "Value",
28
- sort: true,
29
- },
30
- ];
31
- const data: BasicData[] = [
32
- {
33
- id: "item-c",
34
- name: "fg Item 1",
35
- value: 1,
36
- },
37
- {
38
- id: "item-a",
39
- name: "aa Item 2",
40
- value: 2,
41
- },
42
- {
43
- id: "item-l",
44
- name: "ba Item 3",
45
- value: 3,
46
- },
47
- {
48
- id: "item-j",
49
- name: "aa Item 4",
50
- value: 4,
51
- },
52
- {
53
- id: "item-w",
54
- name: "cd Item 5",
55
- value: 5,
56
- },
57
- ];
58
-
59
- const options = [
60
- {
61
- id: "edit",
62
- label: "Edit",
63
- onClick: jest.fn(),
64
- },
65
- {
66
- id: "remove",
67
- label: "Remove",
68
- onClick: jest.fn(),
69
- },
70
- ];
71
-
72
- describe("TableList", () => {
73
- const renderInstance = ({
74
- search = false,
75
- defaultSort = "value",
76
- loading = false,
77
- options = undefined,
78
- }: {
79
- defaultSort?: string;
80
- loading?: boolean;
81
- search?: boolean;
82
- options?: TableRowOption<any>[];
83
- } = {}) => {
84
- const onClick = jest.fn();
85
- const instance = render(
86
- <TableList
87
- search={search}
88
- data={data}
89
- columns={columns}
90
- defaultSort={defaultSort}
91
- defaultOrder="asc"
92
- loading={loading}
93
- options={options}
94
- onClick={onClick}
95
- />,
96
- );
97
-
98
- return { ...instance, onClick };
99
- };
100
-
101
- const openOptionsMenu = async (index = 0) => {
102
- await userEvents.click(screen.getAllByTestId("MoreVertIcon")[index]);
103
- };
104
-
105
- it("would render all items and its values", () => {
106
- renderInstance();
107
-
108
- data.forEach(({ id, name, value }) => {
109
- expect(screen.getByRole("cell", { name: id })).toBeInTheDocument();
110
- expect(screen.getByRole("cell", { name: name })).toBeInTheDocument();
111
- expect(screen.getByRole("cell", { name: value })).toBeInTheDocument();
112
- });
113
- });
114
-
115
- it("all items are rendered in the correct default order", async () => {
116
- renderInstance();
117
-
118
- [/item 1/i, /item 2/i, /item 3/i, /item 4/i, /item 5/i].forEach((item, index) => {
119
- expect(screen.getByRole("cell", { name: item })).toHaveAttribute(
120
- "aria-rowindex",
121
- index.toString(),
122
- );
123
- });
124
- });
125
-
126
- it("loading is true a loading indicator is displayed", () => {
127
- renderInstance({ loading: true });
128
-
129
- expectProgressIndicator();
130
- });
131
-
132
- describe("search", () => {
133
- it("would render a search input if search is true", () => {
134
- renderInstance({ search: true });
135
-
136
- expect(screen.getByRole("search")).toBeInTheDocument();
137
- });
138
-
139
- it("wouldn't render a search input if search is false", () => {
140
- renderInstance({ search: false });
141
-
142
- expect(screen.queryByRole("search")).not.toBeInTheDocument();
143
- });
144
- });
145
-
146
- describe("if I search an 'a'", () => {
147
- it("would render the items 2,3 and 4", async () => {
148
- renderInstance({ search: true });
149
-
150
- await userEvents.type(screen.getByPlaceholderText(/search/i), "a");
151
-
152
- expect(screen.getByText(/item 2/i)).toBeInTheDocument();
153
- expect(screen.getByText(/item 3/i)).toBeInTheDocument();
154
- expect(screen.getByText(/item 4/i)).toBeInTheDocument();
155
-
156
- expect(screen.queryByText(/item 1/i)).not.toBeInTheDocument();
157
- expect(screen.queryByText(/item 5/i)).not.toBeInTheDocument();
158
- });
159
-
160
- it("would render all the items if I remove the search", async () => {
161
- renderInstance({ search: true });
162
-
163
- const search = screen.getByPlaceholderText(/search/i);
164
- await userEvents.type(search, "a");
165
- await userEvents.clear(search);
166
-
167
- expect(screen.getByText(/item 1/i)).toBeInTheDocument();
168
- expect(screen.getByText(/item 2/i)).toBeInTheDocument();
169
- expect(screen.getByText(/item 3/i)).toBeInTheDocument();
170
- expect(screen.getByText(/item 4/i)).toBeInTheDocument();
171
- expect(screen.getByText(/item 5/i)).toBeInTheDocument();
172
- });
173
- });
174
-
175
- describe("sort by a sortable column", () => {
176
- it("once it will be asc sorted", async () => {
177
- renderInstance();
178
-
179
- await userEvents.click(screen.getByText(/name/i));
180
-
181
- expect(screen.getByRole("cell", { name: /item 2/i })).toHaveAttribute("aria-rowindex", "0");
182
- expect(screen.getByRole("cell", { name: /item 4/i })).toHaveAttribute("aria-rowindex", "1");
183
- expect(screen.getByRole("cell", { name: /item 3/i })).toHaveAttribute("aria-rowindex", "2");
184
- expect(screen.getByRole("cell", { name: /item 5/i })).toHaveAttribute("aria-rowindex", "3");
185
- expect(screen.getByRole("cell", { name: /item 1/i })).toHaveAttribute("aria-rowindex", "4");
186
- });
187
-
188
- it("two times it will be desc sorted", async () => {
189
- renderInstance();
190
-
191
- await userEvents.click(screen.getByText(/name/i));
192
- await userEvents.click(screen.getByText(/name/i));
193
-
194
- expect(screen.getByRole("cell", { name: /item 1/i })).toHaveAttribute("aria-rowindex", "0");
195
- expect(screen.getByRole("cell", { name: /item 5/i })).toHaveAttribute("aria-rowindex", "1");
196
- expect(screen.getByRole("cell", { name: /item 3/i })).toHaveAttribute("aria-rowindex", "2");
197
- expect(screen.getByRole("cell", { name: /item 4/i })).toHaveAttribute("aria-rowindex", "3");
198
- expect(screen.getByRole("cell", { name: /item 2/i })).toHaveAttribute("aria-rowindex", "4");
199
- });
200
- });
201
-
202
- it("sort a non sortable column", async () => {
203
- renderInstance();
204
-
205
- await userEvents.click(screen.getByText(/id/i));
206
-
207
- expect(screen.getByRole("cell", { name: /item 1/i })).toHaveAttribute("aria-rowindex", "0");
208
- expect(screen.getByRole("cell", { name: /item 2/i })).toHaveAttribute("aria-rowindex", "1");
209
- expect(screen.getByRole("cell", { name: /item 3/i })).toHaveAttribute("aria-rowindex", "2");
210
- expect(screen.getByRole("cell", { name: /item 4/i })).toHaveAttribute("aria-rowindex", "3");
211
- expect(screen.getByRole("cell", { name: /item 5/i })).toHaveAttribute("aria-rowindex", "4");
212
- });
213
-
214
- it("would call onClick if a row is clicked", async () => {
215
- const { onClick } = renderInstance();
216
-
217
- await userEvents.click(screen.getByRole("row", { name: /item 3/i }));
218
-
219
- expect(onClick).toHaveBeenCalledTimes(1);
220
- expect(onClick).toHaveBeenCalledWith(data[2]);
221
- });
222
-
223
- describe("options menu", () => {
224
- it("would render a button to open the menu if doesn't have options", () => {
225
- renderInstance({ options: undefined });
226
-
227
- expect(screen.queryByTestId("MoreVertIcon")).not.toBeInTheDocument();
228
- });
229
-
230
- it("would render a button to open the menu if has options", () => {
231
- renderInstance({ options });
232
-
233
- screen.getAllByTestId("MoreVertIcon");
234
- });
235
-
236
- it("would render a menu if has options", async () => {
237
- renderInstance({ options });
238
-
239
- await openOptionsMenu();
240
-
241
- expect(await screen.findByRole("menu")).toBeInTheDocument();
242
- });
243
-
244
- it.each([
245
- [/edit/i, 0],
246
- [/remove/i, 1],
247
- ])("would call the option onClick with the row if %s option is clicked", async (name, i) => {
248
- const index = 1;
249
- const item = data[index];
250
- const option = options[i];
251
-
252
- renderInstance({ options });
253
-
254
- await openOptionsMenu(index);
255
-
256
- await userEvents.click(screen.getByRole("menuitem", { name }));
257
-
258
- expect(option.onClick).toHaveBeenCalledTimes(1);
259
- expect(option.onClick).toHaveBeenCalledWith(item);
260
- });
261
-
262
- it("would close the menu when an option is clicked", async () => {
263
- const index = 1;
264
-
265
- renderInstance({ options });
266
-
267
- await openOptionsMenu(index);
268
- await userEvents.click(screen.getByRole("menuitem", { name: /edit/i }));
269
-
270
- expect(screen.queryByRole("menu")).not.toBeInTheDocument();
271
- });
272
-
273
- it("wouldn't call the component onClick if an option if clicked", async () => {
274
- const { onClick } = renderInstance({ options });
275
-
276
- await openOptionsMenu();
277
-
278
- await userEvents.click(screen.getByRole("menuitem", { name: /edit/i }));
279
-
280
- expect(onClick).not.toHaveBeenCalled();
281
- });
282
- });
283
- });
@@ -1,131 +0,0 @@
1
- import { TableRow, TableCell, IconButton, MenuItem, Menu } from "@mui/material";
2
- import React from "react";
3
- import { EnhancedTable, HeadCell, Order } from "../table/enhanced-table";
4
- import MoreVertIcon from "@mui/icons-material/MoreVert";
5
-
6
- const OptionsId = "__options";
7
-
8
- export interface BasicData {
9
- id: string;
10
- [key: string]: any;
11
- }
12
-
13
- export interface TableRowOption<T extends BasicData> {
14
- id: string;
15
- label: string;
16
- onClick: (item: T) => void;
17
- }
18
-
19
- export interface TableListProps<T extends BasicData> {
20
- columns: HeadCell[];
21
- data: T[];
22
- search?: boolean;
23
- defaultSort: string;
24
- defaultOrder?: Order;
25
- loading?: boolean;
26
- options?: TableRowOption<T>[];
27
- onClick?: (d: T) => void;
28
- }
29
-
30
- export const TableList = <T extends BasicData>({
31
- columns: columnsProp,
32
- options,
33
- data,
34
- onClick = () => null,
35
- search,
36
- defaultSort,
37
- defaultOrder,
38
- loading,
39
- }: TableListProps<T>) => {
40
- const columns = columnsProp;
41
- const [anchorMenuEl, setAnchorMenuEl] = React.useState<null | { item: T; anchor: HTMLElement }>(
42
- null,
43
- );
44
- if (options && !columns.some((c) => c.id === OptionsId)) {
45
- columns.push({
46
- id: OptionsId,
47
- label: "",
48
- disablePadding: false,
49
- numeric: false,
50
- sort: false,
51
- });
52
- }
53
-
54
- return (
55
- <>
56
- <EnhancedTable<T>
57
- columns={columns}
58
- data={data}
59
- search={search}
60
- defaultSort={defaultSort}
61
- defaultOrder={defaultOrder}
62
- loading={loading}
63
- >
64
- {(filteredData) =>
65
- filteredData.map((row, i) => {
66
- return (
67
- <TableRow
68
- key={row.id}
69
- onClick={() => onClick(row)}
70
- role="row"
71
- aria-rowindex={i}
72
- sx={{ cursor: "pointer" }}
73
- >
74
- {columns.map(({ id }, j) => (
75
- <TableCell role="cell" scope="row" key={id} aria-rowindex={i} aria-colindex={j}>
76
- {row[id]}
77
- </TableCell>
78
- ))}
79
- {options && (
80
- <TableCell>
81
- <IconButton
82
- data-testid={`options-${row.id}`}
83
- onClick={(event) => {
84
- event.stopPropagation();
85
- setAnchorMenuEl({
86
- item: row,
87
- anchor: event.currentTarget,
88
- });
89
- }}
90
- >
91
- <MoreVertIcon />
92
- </IconButton>
93
- </TableCell>
94
- )}
95
- </TableRow>
96
- );
97
- })
98
- }
99
- </EnhancedTable>
100
- {options && (
101
- <Menu
102
- anchorEl={anchorMenuEl?.anchor}
103
- open={!!anchorMenuEl}
104
- onClose={() => setAnchorMenuEl(null)}
105
- anchorOrigin={{
106
- vertical: "top",
107
- horizontal: "left",
108
- }}
109
- transformOrigin={{
110
- vertical: "top",
111
- horizontal: "left",
112
- }}
113
- >
114
- {options.map(({ id, label, onClick }) => (
115
- <MenuItem
116
- key={id}
117
- onClick={() => {
118
- if (anchorMenuEl) {
119
- onClick(anchorMenuEl?.item);
120
- }
121
- setAnchorMenuEl(null);
122
- }}
123
- >
124
- {label}
125
- </MenuItem>
126
- ))}
127
- </Menu>
128
- )}
129
- </>
130
- );
131
- };
@@ -1,35 +0,0 @@
1
- import React from "react";
2
- import { ValueBoolean } from "../value-boolean/value-boolean";
3
- import { ValueText } from "../value-text";
4
- import { GroupValueCard, GroupValueItem } from "./group-value-card";
5
-
6
- export const GroupValueCardDummy = (props) => {
7
- return (
8
- <GroupValueCard {...props}>
9
- <GroupValueItem xs={12} sm={6} md={4}>
10
- <ValueText label="Hello world" value="Lorem ipsum sit amet" />
11
- </GroupValueItem>
12
- <GroupValueItem xs={12} sm={6} md={2}>
13
- <ValueBoolean label="Enabled" value />
14
- </GroupValueItem>
15
- <GroupValueItem xs={12} sm={6} md={3}>
16
- <ValueText label="Quantity" value="1200" />
17
- </GroupValueItem>
18
- <GroupValueItem xs={12} sm={6} md={3}>
19
- <ValueText label="Currency" value="EUR" />
20
- </GroupValueItem>
21
- <GroupValueItem xs={12} sm={6} md={6}>
22
- <ValueText
23
- label="I am Batman"
24
- value=" Does it come in black? It's ends here. Hero can be anyone"
25
- />
26
- </GroupValueItem>
27
- <GroupValueItem xs={12} sm={6} md={3}>
28
- <ValueText label="Status" value="Open" />
29
- </GroupValueItem>
30
- <GroupValueItem xs={12} sm={6} md={3}>
31
- <ValueText label="Level" value="2144" />
32
- </GroupValueItem>
33
- </GroupValueCard>
34
- );
35
- };
@@ -1,26 +0,0 @@
1
- import { ComponentMeta } from "@storybook/react";
2
- import { GroupValueCard } from "./group-value-card";
3
- import { createTemplate, withPadding } from "../../../storybook";
4
- import { GroupValueCardDummy } from "./group-value-card.mock";
5
-
6
- export default {
7
- title: "Value displays/GroupValueCard",
8
- component: GroupValueCard,
9
- decorators: [withPadding(2)],
10
- parameters: {
11
- layout: "fullscreen",
12
- },
13
- } as ComponentMeta<typeof GroupValueCard>;
14
-
15
- const Template = createTemplate(GroupValueCardDummy);
16
-
17
- export const Default = Template.bind({});
18
- Default.args = {
19
- title: "Hello world",
20
- subtitle: "Lorem ipsum sit amet",
21
- };
22
-
23
- export const WihtoutSubtitle = Template.bind({});
24
- WihtoutSubtitle.args = {
25
- title: "Hello world",
26
- };