@universal-tennis/ui-shared 0.1.65 → 0.1.68

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 (277) hide show
  1. package/.eslintignore +1 -1
  2. package/.eslintrc.js +73 -73
  3. package/.storybook/preview.js +12 -12
  4. package/.storybook/variables.css +15 -15
  5. package/README.md +129 -129
  6. package/dist/App.d.ts +2 -2
  7. package/dist/App.js +12 -12
  8. package/dist/components.d.ts +4 -32
  9. package/dist/components.js +8 -37
  10. package/dist/components.js.map +1 -1
  11. package/dist/index.d.ts +1 -1
  12. package/dist/index.js +12 -12
  13. package/dist/items.d.ts +2 -2
  14. package/dist/items.js +1 -1
  15. package/dist/stories/Button.d.ts +27 -0
  16. package/dist/stories/Button.js +51 -0
  17. package/dist/stories/Button.js.map +1 -0
  18. package/dist/stories/Button.stories.d.ts +15 -0
  19. package/dist/stories/Button.stories.js +34 -0
  20. package/dist/stories/Button.stories.js.map +1 -0
  21. package/dist/stories/Header.d.ts +19 -0
  22. package/dist/stories/Header.js +31 -0
  23. package/dist/stories/Header.js.map +1 -0
  24. package/dist/stories/Header.stories.d.ts +11 -0
  25. package/dist/stories/Header.stories.js +20 -0
  26. package/dist/stories/Header.stories.js.map +1 -0
  27. package/dist/stories/Page.d.ts +1 -0
  28. package/dist/stories/Page.js +38 -0
  29. package/dist/stories/Page.js.map +1 -0
  30. package/dist/stories/Page.stories.d.ts +11 -0
  31. package/dist/stories/Page.stories.js +30 -0
  32. package/dist/stories/Page.stories.js.map +1 -0
  33. package/dist/stories/assets/comments.svg +1 -0
  34. package/dist/stories/assets/css/variables.css +3 -6
  35. package/dist/stories/assets/direction.svg +1 -0
  36. package/dist/stories/assets/icon-chat-blue.svg +10 -10
  37. package/dist/stories/atoms/Button/Button.d.ts +9 -10
  38. package/dist/stories/atoms/Button/Button.js +79 -95
  39. package/dist/stories/atoms/Button/Button.js.map +1 -1
  40. package/dist/stories/atoms/Button/Button.stories.d.ts +16 -17
  41. package/dist/stories/atoms/Button/Button.stories.js +36 -45
  42. package/dist/stories/atoms/Button/Button.stories.js.map +1 -1
  43. package/dist/stories/atoms/Button/index.d.ts +1 -0
  44. package/dist/stories/atoms/Button/index.js +2 -0
  45. package/dist/stories/atoms/Button/index.js.map +1 -0
  46. package/dist/stories/atoms/Button.d.ts +7 -0
  47. package/dist/stories/atoms/Button.js +20 -0
  48. package/dist/stories/atoms/Button.js.map +1 -0
  49. package/dist/stories/atoms/Button.stories.d.ts +13 -0
  50. package/dist/stories/atoms/Button.stories.js +22 -0
  51. package/dist/stories/atoms/Button.stories.js.map +1 -0
  52. package/dist/stories/atoms/Typography/Typography.d.ts +10 -49
  53. package/dist/stories/atoms/Typography/Typography.js +99 -143
  54. package/dist/stories/atoms/Typography/Typography.js.map +1 -1
  55. package/dist/stories/atoms/Typography/Typography.stories.d.ts +37 -37
  56. package/dist/stories/atoms/Typography/Typography.stories.js +190 -190
  57. package/dist/stories/atoms/Typography/index.d.ts +1 -0
  58. package/dist/stories/atoms/Typography/index.js +2 -0
  59. package/dist/stories/atoms/Typography/index.js.map +1 -0
  60. package/dist/stories/molecules/Cards/Cards.stories.d.ts +6 -7
  61. package/dist/stories/molecules/Cards/Cards.stories.js +26 -64
  62. package/dist/stories/molecules/Cards/Cards.stories.js.map +1 -1
  63. package/dist/stories/molecules/Cards/ContactCard.d.ts +9 -3
  64. package/dist/stories/molecules/Cards/ContactCard.js +38 -38
  65. package/dist/stories/molecules/Cards/ContactCard.js.map +1 -1
  66. package/dist/stories/molecules/Cards/TeamCard.d.ts +7 -3
  67. package/dist/stories/molecules/Cards/TeamCard.js +20 -20
  68. package/dist/stories/molecules/Cards/TeamCard.js.map +1 -1
  69. package/dist/stories/molecules/Cards/shared.d.ts +9 -4
  70. package/dist/stories/molecules/Cards/shared.js +12 -12
  71. package/infrastructure/azure-pipelines.yml +112 -110
  72. package/package.json +94 -94
  73. package/src/App.js +25 -25
  74. package/src/components.jsx +41 -41
  75. package/src/custom.d.ts +13 -13
  76. package/src/index.js +17 -17
  77. package/src/items.jsx +1 -1
  78. package/src/stories/assets/css/variables.css +14 -14
  79. package/src/stories/assets/icon-chat-blue.svg +10 -10
  80. package/src/stories/assets/icons/icon-add.svg +7 -7
  81. package/src/stories/assets/icons/icon-availability-maybe.svg +3 -3
  82. package/src/stories/assets/icons/icon-availability-no.svg +3 -3
  83. package/src/stories/assets/icons/icon-availability-not-set.svg +8 -8
  84. package/src/stories/assets/icons/icon-availability-yes.svg +3 -3
  85. package/src/stories/assets/icons/icon-calendar.svg +4 -4
  86. package/src/stories/assets/icons/icon-clock.svg +7 -7
  87. package/src/stories/assets/icons/icon-close.svg +3 -3
  88. package/src/stories/assets/icons/icon-delete.svg +9 -9
  89. package/src/stories/assets/icons/icon-edit.svg +3 -3
  90. package/src/stories/assets/icons/icon-location.svg +6 -6
  91. package/src/stories/assets/icons/icon-message.svg +3 -3
  92. package/src/stories/assets/icons/icon-session.svg +3 -3
  93. package/src/stories/assets/icons/icon-swap.svg +3 -3
  94. package/src/stories/assets/icons/icon-visibility-off.svg +7 -7
  95. package/src/stories/assets/icons/icon-visibility.svg +6 -6
  96. package/src/stories/atoms/Button/Button.stories.tsx +63 -63
  97. package/src/stories/atoms/Button/Button.tsx +145 -145
  98. package/src/stories/atoms/Icons/AddIcon.tsx +13 -13
  99. package/src/stories/atoms/Icons/AvailabilityMaybeIcon.tsx +11 -11
  100. package/src/stories/atoms/Icons/AvailabilityNoIcon.tsx +11 -11
  101. package/src/stories/atoms/Icons/AvailabilityNotSetIcon.tsx +12 -12
  102. package/src/stories/atoms/Icons/AvailabilityYesIcon.tsx +11 -11
  103. package/src/stories/atoms/Icons/CalendarIcon.tsx +11 -11
  104. package/src/stories/atoms/Icons/ClockIcon.tsx +14 -14
  105. package/src/stories/atoms/Icons/CloseIcon.tsx +11 -11
  106. package/src/stories/atoms/Icons/DeleteIcon.tsx +15 -15
  107. package/src/stories/atoms/Icons/EditIcon.tsx +11 -11
  108. package/src/stories/atoms/Icons/Icons.stories.tsx +218 -218
  109. package/src/stories/atoms/Icons/LeftChevronIcon.tsx +13 -13
  110. package/src/stories/atoms/Icons/LocationIcon.tsx +12 -12
  111. package/src/stories/atoms/Icons/MessageIcon.tsx +12 -12
  112. package/src/stories/atoms/Icons/RightChevronIcon.tsx +11 -11
  113. package/src/stories/atoms/Icons/SessionIcon.tsx +16 -16
  114. package/src/stories/atoms/Icons/SwapIcon.tsx +11 -11
  115. package/src/stories/atoms/Icons/VisibilityIcon.tsx +12 -12
  116. package/src/stories/atoms/Icons/VisibilityOffIcon.tsx +13 -13
  117. package/src/stories/atoms/Icons/WinnerIndicatorIcon.tsx +39 -39
  118. package/src/stories/atoms/Icons/sharedTypes.tsx +10 -10
  119. package/src/stories/atoms/Map/Map.stories.tsx +43 -43
  120. package/src/stories/atoms/Map/Map.tsx +25 -25
  121. package/src/stories/atoms/Typography/Typography.tsx +185 -185
  122. package/src/stories/molecules/AvatarWithName/AvatarWithName.stories.tsx +86 -86
  123. package/src/stories/molecules/AvatarWithName/AvatarWithName.tsx +68 -68
  124. package/src/stories/molecules/Cards/Cards.stories.tsx +76 -76
  125. package/src/stories/molecules/Cards/ContactCard.tsx +45 -45
  126. package/src/stories/molecules/Cards/DrawCard.tsx +211 -211
  127. package/src/stories/molecules/Cards/Modals.stories.tsx +137 -137
  128. package/src/stories/molecules/Cards/TeamCard.tsx +14 -14
  129. package/src/stories/molecules/Cards/TeamDrawCard.tsx +135 -134
  130. package/src/stories/molecules/Cards/sharedTypes.ts +67 -67
  131. package/src/stories/molecules/SquareAvatarWithName/SquareAvatarWithName.stories.tsx +77 -77
  132. package/src/stories/molecules/SquareAvatarWithName/SquareAvatarWithName.tsx +84 -84
  133. package/src/stories/organisms/Modals/FullPageModal.tsx +93 -93
  134. package/src/stories/organisms/Modals/Modals.stories.tsx +138 -138
  135. package/src/stories/organisms/Modals/sharedTypes.ts +15 -15
  136. package/src/stories/organisms/Tables/DrawCardTable.tsx +92 -92
  137. package/src/stories/organisms/Tables/SortableTable.tsx +112 -112
  138. package/src/stories/organisms/Tables/Tables.stories.tsx +104 -104
  139. package/src/stories/organisms/Tables/TeamDrawCardTable/DesktopTableRows.tsx +102 -0
  140. package/src/stories/organisms/Tables/TeamDrawCardTable/MobileTableRows.tsx +67 -0
  141. package/src/stories/organisms/Tables/TeamDrawCardTable/TeamDrawCardTable.tsx +24 -0
  142. package/src/stories/organisms/Tables/mockData.tsx +129 -129
  143. package/src/stories/organisms/Tables/sharedTypes.ts +17 -9
  144. package/src/stories/utils/constants.ts +3 -3
  145. package/src/stories/utils/useScreenSize.ts +28 -28
  146. package/src/types/tableDataTypes.ts +42 -42
  147. package/tsconfig.json +23 -23
  148. package/dist/stories/atoms/Icons/AddIcon.d.ts +0 -3
  149. package/dist/stories/atoms/Icons/AddIcon.js +0 -9
  150. package/dist/stories/atoms/Icons/AddIcon.js.map +0 -1
  151. package/dist/stories/atoms/Icons/AvailabilityMaybeIcon.d.ts +0 -3
  152. package/dist/stories/atoms/Icons/AvailabilityMaybeIcon.js +0 -7
  153. package/dist/stories/atoms/Icons/AvailabilityMaybeIcon.js.map +0 -1
  154. package/dist/stories/atoms/Icons/AvailabilityNoIcon.d.ts +0 -3
  155. package/dist/stories/atoms/Icons/AvailabilityNoIcon.js +0 -7
  156. package/dist/stories/atoms/Icons/AvailabilityNoIcon.js.map +0 -1
  157. package/dist/stories/atoms/Icons/AvailabilityNotSetIcon.d.ts +0 -3
  158. package/dist/stories/atoms/Icons/AvailabilityNotSetIcon.js +0 -8
  159. package/dist/stories/atoms/Icons/AvailabilityNotSetIcon.js.map +0 -1
  160. package/dist/stories/atoms/Icons/AvailabilityYesIcon.d.ts +0 -3
  161. package/dist/stories/atoms/Icons/AvailabilityYesIcon.js +0 -7
  162. package/dist/stories/atoms/Icons/AvailabilityYesIcon.js.map +0 -1
  163. package/dist/stories/atoms/Icons/CalendarIcon.d.ts +0 -3
  164. package/dist/stories/atoms/Icons/CalendarIcon.js +0 -7
  165. package/dist/stories/atoms/Icons/CalendarIcon.js.map +0 -1
  166. package/dist/stories/atoms/Icons/ClockIcon.d.ts +0 -3
  167. package/dist/stories/atoms/Icons/ClockIcon.js +0 -9
  168. package/dist/stories/atoms/Icons/ClockIcon.js.map +0 -1
  169. package/dist/stories/atoms/Icons/CloseIcon.d.ts +0 -3
  170. package/dist/stories/atoms/Icons/CloseIcon.js +0 -7
  171. package/dist/stories/atoms/Icons/CloseIcon.js.map +0 -1
  172. package/dist/stories/atoms/Icons/DeleteIcon.d.ts +0 -3
  173. package/dist/stories/atoms/Icons/DeleteIcon.js +0 -11
  174. package/dist/stories/atoms/Icons/DeleteIcon.js.map +0 -1
  175. package/dist/stories/atoms/Icons/EditIcon.d.ts +0 -3
  176. package/dist/stories/atoms/Icons/EditIcon.js +0 -7
  177. package/dist/stories/atoms/Icons/EditIcon.js.map +0 -1
  178. package/dist/stories/atoms/Icons/Icons.stories.d.ts +0 -23
  179. package/dist/stories/atoms/Icons/Icons.stories.js +0 -178
  180. package/dist/stories/atoms/Icons/Icons.stories.js.map +0 -1
  181. package/dist/stories/atoms/Icons/LeftChevronIcon.d.ts +0 -3
  182. package/dist/stories/atoms/Icons/LeftChevronIcon.js +0 -7
  183. package/dist/stories/atoms/Icons/LeftChevronIcon.js.map +0 -1
  184. package/dist/stories/atoms/Icons/LocationIcon.d.ts +0 -3
  185. package/dist/stories/atoms/Icons/LocationIcon.js +0 -8
  186. package/dist/stories/atoms/Icons/LocationIcon.js.map +0 -1
  187. package/dist/stories/atoms/Icons/MessageIcon.d.ts +0 -3
  188. package/dist/stories/atoms/Icons/MessageIcon.js +0 -7
  189. package/dist/stories/atoms/Icons/MessageIcon.js.map +0 -1
  190. package/dist/stories/atoms/Icons/RightChevronIcon.d.ts +0 -3
  191. package/dist/stories/atoms/Icons/RightChevronIcon.js +0 -7
  192. package/dist/stories/atoms/Icons/RightChevronIcon.js.map +0 -1
  193. package/dist/stories/atoms/Icons/SessionIcon.d.ts +0 -3
  194. package/dist/stories/atoms/Icons/SessionIcon.js +0 -7
  195. package/dist/stories/atoms/Icons/SessionIcon.js.map +0 -1
  196. package/dist/stories/atoms/Icons/SwapIcon.d.ts +0 -3
  197. package/dist/stories/atoms/Icons/SwapIcon.js +0 -7
  198. package/dist/stories/atoms/Icons/SwapIcon.js.map +0 -1
  199. package/dist/stories/atoms/Icons/VisibilityIcon.d.ts +0 -3
  200. package/dist/stories/atoms/Icons/VisibilityIcon.js +0 -8
  201. package/dist/stories/atoms/Icons/VisibilityIcon.js.map +0 -1
  202. package/dist/stories/atoms/Icons/VisibilityOffIcon.d.ts +0 -3
  203. package/dist/stories/atoms/Icons/VisibilityOffIcon.js +0 -9
  204. package/dist/stories/atoms/Icons/VisibilityOffIcon.js.map +0 -1
  205. package/dist/stories/atoms/Icons/WinnerIndicatorIcon.d.ts +0 -3
  206. package/dist/stories/atoms/Icons/WinnerIndicatorIcon.js +0 -32
  207. package/dist/stories/atoms/Icons/WinnerIndicatorIcon.js.map +0 -1
  208. package/dist/stories/atoms/Icons/sharedTypes.d.ts +0 -9
  209. package/dist/stories/atoms/Icons/sharedTypes.js +0 -2
  210. package/dist/stories/atoms/Icons/sharedTypes.js.map +0 -1
  211. package/dist/stories/atoms/Map/Map.d.ts +0 -7
  212. package/dist/stories/atoms/Map/Map.js +0 -9
  213. package/dist/stories/atoms/Map/Map.js.map +0 -1
  214. package/dist/stories/atoms/Map/Map.stories.d.ts +0 -9
  215. package/dist/stories/atoms/Map/Map.stories.js +0 -36
  216. package/dist/stories/atoms/Map/Map.stories.js.map +0 -1
  217. package/dist/stories/molecules/AvatarWithName/AvatarWithName.d.ts +0 -27
  218. package/dist/stories/molecules/AvatarWithName/AvatarWithName.js +0 -21
  219. package/dist/stories/molecules/AvatarWithName/AvatarWithName.js.map +0 -1
  220. package/dist/stories/molecules/AvatarWithName/AvatarWithName.stories.d.ts +0 -15
  221. package/dist/stories/molecules/AvatarWithName/AvatarWithName.stories.js +0 -73
  222. package/dist/stories/molecules/AvatarWithName/AvatarWithName.stories.js.map +0 -1
  223. package/dist/stories/molecules/Cards/DrawCard.d.ts +0 -3
  224. package/dist/stories/molecules/Cards/DrawCard.js +0 -117
  225. package/dist/stories/molecules/Cards/DrawCard.js.map +0 -1
  226. package/dist/stories/molecules/Cards/Modals.stories.d.ts +0 -5
  227. package/dist/stories/molecules/Cards/Modals.stories.js +0 -73
  228. package/dist/stories/molecules/Cards/Modals.stories.js.map +0 -1
  229. package/dist/stories/molecules/Cards/TeamDrawCard.d.ts +0 -3
  230. package/dist/stories/molecules/Cards/TeamDrawCard.js +0 -75
  231. package/dist/stories/molecules/Cards/TeamDrawCard.js.map +0 -1
  232. package/dist/stories/molecules/Cards/sharedTypes.d.ts +0 -59
  233. package/dist/stories/molecules/Cards/sharedTypes.js +0 -3
  234. package/dist/stories/molecules/Cards/sharedTypes.js.map +0 -1
  235. package/dist/stories/molecules/SquareAvatarWithName/SquareAvatarWithName.d.ts +0 -27
  236. package/dist/stories/molecules/SquareAvatarWithName/SquareAvatarWithName.js +0 -25
  237. package/dist/stories/molecules/SquareAvatarWithName/SquareAvatarWithName.js.map +0 -1
  238. package/dist/stories/molecules/SquareAvatarWithName/SquareAvatarWithName.stories.d.ts +0 -13
  239. package/dist/stories/molecules/SquareAvatarWithName/SquareAvatarWithName.stories.js +0 -66
  240. package/dist/stories/molecules/SquareAvatarWithName/SquareAvatarWithName.stories.js.map +0 -1
  241. package/dist/stories/organisms/Modals/FullPageModal.d.ts +0 -4
  242. package/dist/stories/organisms/Modals/FullPageModal.js +0 -60
  243. package/dist/stories/organisms/Modals/FullPageModal.js.map +0 -1
  244. package/dist/stories/organisms/Modals/Modals.stories.d.ts +0 -5
  245. package/dist/stories/organisms/Modals/Modals.stories.js +0 -74
  246. package/dist/stories/organisms/Modals/Modals.stories.js.map +0 -1
  247. package/dist/stories/organisms/Modals/sharedTypes.d.ts +0 -14
  248. package/dist/stories/organisms/Modals/sharedTypes.js +0 -2
  249. package/dist/stories/organisms/Modals/sharedTypes.js.map +0 -1
  250. package/dist/stories/organisms/Tables/DrawCardTable.d.ts +0 -3
  251. package/dist/stories/organisms/Tables/DrawCardTable.js +0 -59
  252. package/dist/stories/organisms/Tables/DrawCardTable.js.map +0 -1
  253. package/dist/stories/organisms/Tables/SortableTable.d.ts +0 -23
  254. package/dist/stories/organisms/Tables/SortableTable.js +0 -34
  255. package/dist/stories/organisms/Tables/SortableTable.js.map +0 -1
  256. package/dist/stories/organisms/Tables/Tables.stories.d.ts +0 -8
  257. package/dist/stories/organisms/Tables/Tables.stories.js +0 -91
  258. package/dist/stories/organisms/Tables/Tables.stories.js.map +0 -1
  259. package/dist/stories/organisms/Tables/TeamDrawCardTable.d.ts +0 -3
  260. package/dist/stories/organisms/Tables/TeamDrawCardTable.js +0 -96
  261. package/dist/stories/organisms/Tables/TeamDrawCardTable.js.map +0 -1
  262. package/dist/stories/organisms/Tables/mockData.d.ts +0 -69
  263. package/dist/stories/organisms/Tables/mockData.js +0 -98
  264. package/dist/stories/organisms/Tables/mockData.js.map +0 -1
  265. package/dist/stories/organisms/Tables/sharedTypes.d.ts +0 -8
  266. package/dist/stories/organisms/Tables/sharedTypes.js +0 -2
  267. package/dist/stories/organisms/Tables/sharedTypes.js.map +0 -1
  268. package/dist/stories/utils/constants.d.ts +0 -3
  269. package/dist/stories/utils/constants.js +0 -4
  270. package/dist/stories/utils/constants.js.map +0 -1
  271. package/dist/stories/utils/useScreenSize.d.ts +0 -4
  272. package/dist/stories/utils/useScreenSize.js +0 -28
  273. package/dist/stories/utils/useScreenSize.js.map +0 -1
  274. package/dist/types/tableDataTypes.d.ts +0 -38
  275. package/dist/types/tableDataTypes.js +0 -2
  276. package/dist/types/tableDataTypes.js.map +0 -1
  277. package/src/stories/organisms/Tables/TeamDrawCardTable.tsx +0 -156
@@ -1,112 +1,112 @@
1
- import React, { ComponentType, SyntheticEvent } from "react";
2
-
3
- import Table from "@mui/material/Table";
4
- import TableBody from "@mui/material/TableBody";
5
- import TableCell from "@mui/material/TableCell";
6
- import TableContainer from "@mui/material/TableContainer";
7
- import TableHead from "@mui/material/TableHead";
8
- import MuiTableRow from "@mui/material/TableRow";
9
- import TableSortLabel from "@mui/material/TableSortLabel";
10
- import Toolbar from "@mui/material/Toolbar";
11
- import Paper from "@mui/material/Paper";
12
-
13
- import { TableData } from "types/tableDataTypes";
14
- import Typography from '../../atoms/Typography/Typography';
15
-
16
- type Order = 'asc' | 'desc';
17
- type OrderProperty = string | number;
18
-
19
- interface HeadCell {
20
- id: string;
21
- label?: string;
22
- isSortingDisabled: boolean
23
- }
24
-
25
- export type SortableTableProps = {
26
- headCells: Array<HeadCell>;
27
- tableData: Array<TableData>;
28
- sortOrder: Order;
29
- sortByProperty: OrderProperty;
30
- rowComponent: ComponentType<{rowData: TableData, labelId: string}>;
31
- title?: string;
32
- onOrderPropertyChange?: (property: OrderProperty) => VoidFunction
33
- }
34
-
35
- function SortableTable({
36
- headCells,
37
- tableData,
38
- rowComponent,
39
- sortOrder,
40
- sortByProperty,
41
- title = '',
42
- onOrderPropertyChange,
43
- }: SortableTableProps) {
44
- const TableRow = rowComponent;
45
-
46
- const handleRequestSort = (property: OrderProperty) => (event: SyntheticEvent) => {
47
- event.preventDefault();
48
- if (onOrderPropertyChange) {
49
- onOrderPropertyChange(property);
50
- }
51
- };
52
-
53
- return (
54
- <Paper sx={{ width: "100%", mb: 2 }}>
55
- {title && (
56
- <Toolbar sx={{ pl: { sm: 2 }, pr: { xs: 1, sm: 1 } }}>
57
- <Typography
58
- category="secondary"
59
- size="large-medium"
60
- id="tableTitle"
61
- >
62
- {title}
63
- </Typography>
64
- </Toolbar>
65
- )}
66
- <TableContainer>
67
- <Table
68
- sx={{ minWidth: 750 }}
69
- aria-labelledby="tableTitle"
70
- size="medium"
71
- >
72
- <TableHead>
73
- <MuiTableRow>
74
- {headCells.map((headCell) => (
75
- <TableCell
76
- key={headCell.id}
77
- align="left"
78
- padding="normal"
79
- sortDirection={sortByProperty === headCell.id ? sortOrder : false}
80
- >
81
- <TableSortLabel
82
- disabled={headCell.isSortingDisabled}
83
- hideSortIcon={!headCell?.label}
84
- active={sortByProperty === headCell.id}
85
- direction={sortByProperty === headCell.id ? sortOrder : 'asc'}
86
- onClick={handleRequestSort(headCell.id)}
87
- >
88
- {headCell?.label}
89
- </TableSortLabel>
90
- </TableCell>
91
- ))}
92
- </MuiTableRow>
93
- </TableHead>
94
- <TableBody>
95
- {tableData && tableData.map((data: TableData, index: number) => {
96
- const labelId = `table-${index}`;
97
- return (
98
- <TableRow
99
- key={data.id}
100
- rowData={data}
101
- labelId={labelId}
102
- />
103
- );
104
- })}
105
- </TableBody>
106
- </Table>
107
- </TableContainer>
108
- </Paper>
109
- );
110
- }
111
-
112
- export default SortableTable;
1
+ import React, { ComponentType, SyntheticEvent } from "react";
2
+
3
+ import Table from "@mui/material/Table";
4
+ import TableBody from "@mui/material/TableBody";
5
+ import TableCell from "@mui/material/TableCell";
6
+ import TableContainer from "@mui/material/TableContainer";
7
+ import TableHead from "@mui/material/TableHead";
8
+ import MuiTableRow from "@mui/material/TableRow";
9
+ import TableSortLabel from "@mui/material/TableSortLabel";
10
+ import Toolbar from "@mui/material/Toolbar";
11
+ import Paper from "@mui/material/Paper";
12
+
13
+ import { TableData } from "types/tableDataTypes";
14
+ import Typography from '../../atoms/Typography/Typography';
15
+
16
+ type Order = 'asc' | 'desc';
17
+ type OrderProperty = string | number;
18
+
19
+ interface HeadCell {
20
+ id: string;
21
+ label?: string;
22
+ isSortingDisabled: boolean
23
+ }
24
+
25
+ export type SortableTableProps = {
26
+ headCells: Array<HeadCell>;
27
+ tableData: Array<TableData>;
28
+ sortOrder: Order;
29
+ sortByProperty: OrderProperty;
30
+ rowComponent: ComponentType<{rowData: TableData, labelId: string}>;
31
+ title?: string;
32
+ onOrderPropertyChange?: (property: OrderProperty) => VoidFunction
33
+ }
34
+
35
+ function SortableTable({
36
+ headCells,
37
+ tableData,
38
+ rowComponent,
39
+ sortOrder,
40
+ sortByProperty,
41
+ title = '',
42
+ onOrderPropertyChange,
43
+ }: SortableTableProps) {
44
+ const TableRow = rowComponent;
45
+
46
+ const handleRequestSort = (property: OrderProperty) => (event: SyntheticEvent) => {
47
+ event.preventDefault();
48
+ if (onOrderPropertyChange) {
49
+ onOrderPropertyChange(property);
50
+ }
51
+ };
52
+
53
+ return (
54
+ <Paper sx={{ width: "100%", mb: 2 }}>
55
+ {title && (
56
+ <Toolbar sx={{ pl: { sm: 2 }, pr: { xs: 1, sm: 1 } }}>
57
+ <Typography
58
+ category="secondary"
59
+ size="large-medium"
60
+ id="tableTitle"
61
+ >
62
+ {title}
63
+ </Typography>
64
+ </Toolbar>
65
+ )}
66
+ <TableContainer>
67
+ <Table
68
+ sx={{ minWidth: 750 }}
69
+ aria-labelledby="tableTitle"
70
+ size="medium"
71
+ >
72
+ <TableHead>
73
+ <MuiTableRow>
74
+ {headCells.map((headCell) => (
75
+ <TableCell
76
+ key={headCell.id}
77
+ align="left"
78
+ padding="normal"
79
+ sortDirection={sortByProperty === headCell.id ? sortOrder : false}
80
+ >
81
+ <TableSortLabel
82
+ disabled={headCell.isSortingDisabled}
83
+ hideSortIcon={!headCell?.label}
84
+ active={sortByProperty === headCell.id}
85
+ direction={sortByProperty === headCell.id ? sortOrder : 'asc'}
86
+ onClick={handleRequestSort(headCell.id)}
87
+ >
88
+ {headCell?.label}
89
+ </TableSortLabel>
90
+ </TableCell>
91
+ ))}
92
+ </MuiTableRow>
93
+ </TableHead>
94
+ <TableBody>
95
+ {tableData && tableData.map((data: TableData, index: number) => {
96
+ const labelId = `table-${index}`;
97
+ return (
98
+ <TableRow
99
+ key={data.id}
100
+ rowData={data}
101
+ labelId={labelId}
102
+ />
103
+ );
104
+ })}
105
+ </TableBody>
106
+ </Table>
107
+ </TableContainer>
108
+ </Paper>
109
+ );
110
+ }
111
+
112
+ export default SortableTable;
@@ -1,104 +1,104 @@
1
- import React from 'react';
2
- import TeamDrawCard from 'stories/molecules/Cards/TeamDrawCard';
3
- import DrawCard from '../../molecules/Cards/DrawCard';
4
- import DrawCardTable from './DrawCardTable';
5
- import TeamDrawCardTable from './TeamDrawCardTable';
6
- import { DrawCardTableProps } from './sharedTypes';
7
- import {
8
- MOCK_HEAD_CELLS, mockRowComponent, MOCK_TABLE_DATA, SAMPLE_CARD_DATA, SAMPLE_TEAM_PAGE_CARD_DATA
9
- } from './mockData';
10
-
11
- const onOrderPropertyChange = () => {};
12
-
13
- // Default
14
- export default {
15
- title: 'Organisms/Tables',
16
- };
17
-
18
- // Templates
19
- function DrawCardTableTemplate(args: DrawCardTableProps) {
20
- return <DrawCardTable {...args} />;
21
- }
22
-
23
- function TeamDrawCardTableTemplate(args: DrawCardTableProps) {
24
- return <TeamDrawCardTable {...args} />;
25
- }
26
-
27
- const headerRows = [
28
- { name: 'Round 1' },
29
- { name: 'Quarterfinal' },
30
- { name: 'SemiFinal' },
31
- ];
32
-
33
- const tableRows = [
34
- [
35
- <DrawCard isSelectActive isFlexWidth emptyLabel="Select a team" {...SAMPLE_CARD_DATA} />,
36
- <DrawCard isSelectActive isFlexWidth emptyLabel="Select a team" {...SAMPLE_CARD_DATA} locationLabel="hi" />,
37
- <DrawCard isSelectActive isFlexWidth emptyLabel="Select a team" {...SAMPLE_CARD_DATA} />,
38
- <DrawCard isSelectActive isFlexWidth emptyLabel="Select a team" {...SAMPLE_CARD_DATA} locationLabel="hi" />,
39
- <DrawCard isSelectActive isFlexWidth emptyLabel="Select a team" {...SAMPLE_CARD_DATA} />,
40
- <DrawCard isSelectActive isFlexWidth emptyLabel="Select a team" {...SAMPLE_CARD_DATA} />,
41
- <DrawCard isSelectActive isFlexWidth emptyLabel="Select a team" {...SAMPLE_CARD_DATA} locationLabel="hi" />,
42
- <DrawCard isSelectActive isFlexWidth emptyLabel="Select a team" {...SAMPLE_CARD_DATA} />,
43
- ],
44
- [
45
- <DrawCard emptyLabel="Select a team" {...SAMPLE_CARD_DATA} onViewClick={() => {}} />,
46
- <DrawCard emptyLabel="Select a team" {...SAMPLE_CARD_DATA} />,
47
- <DrawCard isScorelessMatch emptyLabel="Select a team" {...SAMPLE_CARD_DATA} />,
48
- <DrawCard isScorelessMatch emptyLabel="Select a team" {...SAMPLE_CARD_DATA} />,
49
- ],
50
- [
51
- <DrawCard emptyLabel="Select a team" {...SAMPLE_CARD_DATA} />,
52
- <DrawCard emptyLabel="Select a team" {...SAMPLE_CARD_DATA} />,
53
- ],
54
- [
55
- <DrawCard emptyLabel="Select a team" {...SAMPLE_CARD_DATA} />,
56
- ],
57
- ];
58
-
59
- const teamTableRows = [
60
- [
61
- <TeamDrawCard {...SAMPLE_TEAM_PAGE_CARD_DATA} />,
62
- <TeamDrawCard {...SAMPLE_TEAM_PAGE_CARD_DATA} />,
63
- <TeamDrawCard isScorelessMatch {...SAMPLE_TEAM_PAGE_CARD_DATA} />,
64
- <TeamDrawCard isScorelessMatch {...SAMPLE_TEAM_PAGE_CARD_DATA} />,
65
- ],
66
- [
67
- <TeamDrawCard {...SAMPLE_TEAM_PAGE_CARD_DATA} />,
68
- <TeamDrawCard {...SAMPLE_TEAM_PAGE_CARD_DATA} />,
69
- ],
70
- [
71
- <TeamDrawCard {...SAMPLE_TEAM_PAGE_CARD_DATA} />,
72
- ],
73
- ];
74
-
75
- // Stories
76
- export const DrawTable = DrawCardTableTemplate.bind({});
77
- DrawTable.args = {
78
- headerRows,
79
- tableRows,
80
- };
81
-
82
- export const TeamDrawTable = TeamDrawCardTableTemplate.bind({});
83
- TeamDrawTable.args = {
84
- headerRows,
85
- tableRows: teamTableRows,
86
- };
87
-
88
- export const MobileTeamDrawTable = TeamDrawCardTableTemplate.bind({});
89
- MobileTeamDrawTable.args = {
90
- headerRows,
91
- tableRows: teamTableRows,
92
- isMobile: true
93
- };
94
-
95
- export const SortableTable = DrawCardTableTemplate.bind({});
96
- SortableTable.args = {
97
- headCells: MOCK_HEAD_CELLS,
98
- sortOrder: 'asc',
99
- sortByProperty: 'player',
100
- title: 'Player Table',
101
- tableData: MOCK_TABLE_DATA,
102
- rowComponent: mockRowComponent,
103
- onOrderPropertyChange,
104
- };
1
+ import React from 'react';
2
+ import TeamDrawCard from 'stories/molecules/Cards/TeamDrawCard';
3
+ import DrawCard from '../../molecules/Cards/DrawCard';
4
+ import DrawCardTable from './DrawCardTable';
5
+ import TeamDrawCardTable from './TeamDrawCardTable/TeamDrawCardTable';
6
+ import { DrawCardTableProps } from './sharedTypes';
7
+ import {
8
+ MOCK_HEAD_CELLS, mockRowComponent, MOCK_TABLE_DATA, SAMPLE_CARD_DATA, SAMPLE_TEAM_PAGE_CARD_DATA
9
+ } from './mockData';
10
+
11
+ const onOrderPropertyChange = () => {};
12
+
13
+ // Default
14
+ export default {
15
+ title: 'Organisms/Tables',
16
+ };
17
+
18
+ // Templates
19
+ function DrawCardTableTemplate(args: DrawCardTableProps) {
20
+ return <DrawCardTable {...args} />;
21
+ }
22
+
23
+ function TeamDrawCardTableTemplate(args: DrawCardTableProps) {
24
+ return <TeamDrawCardTable {...args} />;
25
+ }
26
+
27
+ const headerRows = [
28
+ { name: 'Round 1' },
29
+ { name: 'Quarterfinal' },
30
+ { name: 'SemiFinal' },
31
+ ];
32
+
33
+ const tableRows = [
34
+ [
35
+ <DrawCard isSelectActive isFlexWidth emptyLabel="Select a team" {...SAMPLE_CARD_DATA} />,
36
+ <DrawCard isSelectActive isFlexWidth emptyLabel="Select a team" {...SAMPLE_CARD_DATA} locationLabel="hi" />,
37
+ <DrawCard isSelectActive isFlexWidth emptyLabel="Select a team" {...SAMPLE_CARD_DATA} />,
38
+ <DrawCard isSelectActive isFlexWidth emptyLabel="Select a team" {...SAMPLE_CARD_DATA} locationLabel="hi" />,
39
+ <DrawCard isSelectActive isFlexWidth emptyLabel="Select a team" {...SAMPLE_CARD_DATA} />,
40
+ <DrawCard isSelectActive isFlexWidth emptyLabel="Select a team" {...SAMPLE_CARD_DATA} />,
41
+ <DrawCard isSelectActive isFlexWidth emptyLabel="Select a team" {...SAMPLE_CARD_DATA} locationLabel="hi" />,
42
+ <DrawCard isSelectActive isFlexWidth emptyLabel="Select a team" {...SAMPLE_CARD_DATA} />,
43
+ ],
44
+ [
45
+ <DrawCard emptyLabel="Select a team" {...SAMPLE_CARD_DATA} onViewClick={() => {}} />,
46
+ <DrawCard emptyLabel="Select a team" {...SAMPLE_CARD_DATA} />,
47
+ <DrawCard isScorelessMatch emptyLabel="Select a team" {...SAMPLE_CARD_DATA} />,
48
+ <DrawCard isScorelessMatch emptyLabel="Select a team" {...SAMPLE_CARD_DATA} />,
49
+ ],
50
+ [
51
+ <DrawCard emptyLabel="Select a team" {...SAMPLE_CARD_DATA} />,
52
+ <DrawCard emptyLabel="Select a team" {...SAMPLE_CARD_DATA} />,
53
+ ],
54
+ [
55
+ <DrawCard emptyLabel="Select a team" {...SAMPLE_CARD_DATA} />,
56
+ ],
57
+ ];
58
+
59
+ const teamTableRows = [
60
+ [
61
+ <TeamDrawCard {...SAMPLE_TEAM_PAGE_CARD_DATA} />,
62
+ <TeamDrawCard {...SAMPLE_TEAM_PAGE_CARD_DATA} />,
63
+ <TeamDrawCard isScorelessMatch {...SAMPLE_TEAM_PAGE_CARD_DATA} />,
64
+ <TeamDrawCard isScorelessMatch {...SAMPLE_TEAM_PAGE_CARD_DATA} />,
65
+ ],
66
+ [
67
+ <TeamDrawCard {...SAMPLE_TEAM_PAGE_CARD_DATA} />,
68
+ <TeamDrawCard {...SAMPLE_TEAM_PAGE_CARD_DATA} />,
69
+ ],
70
+ [
71
+ <TeamDrawCard {...SAMPLE_TEAM_PAGE_CARD_DATA} />,
72
+ ],
73
+ ];
74
+
75
+ // Stories
76
+ export const DrawTable = DrawCardTableTemplate.bind({});
77
+ DrawTable.args = {
78
+ headerRows,
79
+ tableRows,
80
+ };
81
+
82
+ export const TeamDrawTable = TeamDrawCardTableTemplate.bind({});
83
+ TeamDrawTable.args = {
84
+ headerRows,
85
+ tableRows: teamTableRows,
86
+ };
87
+
88
+ export const MobileTeamDrawTable = TeamDrawCardTableTemplate.bind({});
89
+ MobileTeamDrawTable.args = {
90
+ headerRows,
91
+ tableRows: teamTableRows,
92
+ isMobile: true
93
+ };
94
+
95
+ export const SortableTable = DrawCardTableTemplate.bind({});
96
+ SortableTable.args = {
97
+ headCells: MOCK_HEAD_CELLS,
98
+ sortOrder: 'asc',
99
+ sortByProperty: 'player',
100
+ title: 'Player Table',
101
+ tableData: MOCK_TABLE_DATA,
102
+ rowComponent: mockRowComponent,
103
+ onOrderPropertyChange,
104
+ };
@@ -0,0 +1,102 @@
1
+ import React from "react";
2
+ import { styled } from "@mui/material/styles";
3
+ import Grid from "@mui/material/Grid";
4
+ import Box from "@mui/material/Box";
5
+
6
+ import { TableRowProps } from '../sharedTypes';
7
+ import Typography from "../../../atoms/Typography/Typography";
8
+ import { teamDrawCardSideMargin, standardSideMargin } from "../../../utils/constants";
9
+
10
+ const StyledHeader = styled(Grid)({
11
+ alignItems: "center",
12
+ justifyContent: "center",
13
+ display: "flex"
14
+ });
15
+
16
+ const gridCommonStyles = {
17
+ content: "''",
18
+ position: "absolute",
19
+ backgroundColor: "var(--cool-grey-600)",
20
+ };
21
+
22
+ const horizontalLineCommonStyles = {
23
+ height: "1px",
24
+ top: "50%",
25
+ };
26
+
27
+ const StyledGrid = styled(Grid)({
28
+ position: "relative",
29
+
30
+ "&:nth-last-child(-n+2) .team-draw-card": {
31
+ "&:before": {
32
+ ...gridCommonStyles,
33
+ ...horizontalLineCommonStyles,
34
+ width: `${teamDrawCardSideMargin}`,
35
+ left: 0,
36
+ transform: "translateX(-100%)"
37
+ }
38
+ },
39
+ "&:nth-of-type(-n+2) .team-draw-card": {
40
+ "&:after": {
41
+ ...gridCommonStyles,
42
+ ...horizontalLineCommonStyles,
43
+ width: `calc(${standardSideMargin + 1}px)`,
44
+ right: 0,
45
+ transform: "translateX(100%)"
46
+ }
47
+ }
48
+ });
49
+
50
+ const GridSections = styled(Box)({
51
+ display: "flex",
52
+ alignItems: "center",
53
+ position: 'relative',
54
+ });
55
+
56
+ export default function DesktopTableRows({
57
+ headerRows, totalColumns, tableRows
58
+ }: TableRowProps) {
59
+ const formatTableRows = tableRows.map((row, index) => {
60
+ if (index > 2) return; // Table can only support 3 columns
61
+ const rowSectionsHeight = `${100 / tableRows[index].length}%`;
62
+ const sectionAmount = tableRows[index].length;
63
+ const isFirstRow = index === 0;
64
+
65
+ return (
66
+ <StyledGrid key={index} xs={totalColumns}>
67
+ {[...Array(sectionAmount)].map((section, idx) => (
68
+ <GridSections
69
+ key={idx}
70
+ sx={{
71
+ height: rowSectionsHeight,
72
+ '&:before': {
73
+ display: isFirstRow ? 'none' : 'block',
74
+ ...gridCommonStyles,
75
+ height: `calc(50% + 1px)`,
76
+ width: "1px",
77
+ top: `calc(25% - 4px)`
78
+ },
79
+ }}
80
+ >
81
+ {row[idx]}
82
+ </GridSections>
83
+ ))}
84
+ </StyledGrid>
85
+ );
86
+ });
87
+
88
+ return (
89
+ <>
90
+ <Grid container sx={{ height: "60px" }}>
91
+ {headerRows.map((row) => (
92
+ <StyledHeader key={row.name} xs={totalColumns}>
93
+ <Typography category="secondary" size="small-medium-cap">
94
+ {row.name}
95
+ </Typography>
96
+ </StyledHeader>
97
+ ))}
98
+ </Grid>
99
+ <Grid container>{formatTableRows}</Grid>
100
+ </>
101
+ );
102
+ }
@@ -0,0 +1,67 @@
1
+ import React from "react";
2
+ import Box from "@mui/material/Box";
3
+ import Button from "@mui/material/Button";
4
+ import { styled } from "@mui/material/styles";
5
+ import Grid from "@mui/material/Grid";
6
+
7
+ import { TableRowProps } from '../sharedTypes';
8
+ import RightChevronIcon from '../../../atoms/Icons/RightChevronIcon';
9
+ import LeftChevronIcon from '../../../atoms/Icons/LeftChevronIcon';
10
+ import Typography from "../../../atoms/Typography/Typography";
11
+
12
+ const StyledHeader = styled(Grid)({
13
+ alignItems: "center",
14
+ justifyContent: "center",
15
+ display: "flex"
16
+ });
17
+
18
+ const GridSections = styled(Box)({
19
+ display: "flex",
20
+ alignItems: "center",
21
+ position: 'relative',
22
+ });
23
+
24
+ export default function MobileTableRows({
25
+ totalColumns, headerRows, tableRows
26
+ }: TableRowProps) {
27
+ const [activeStep, setActiveStep] = React.useState(0);
28
+
29
+ const handleNext = () => {
30
+ setActiveStep((prevActiveStep) => prevActiveStep + 1);
31
+ };
32
+
33
+ const handleBack = () => {
34
+ setActiveStep((prevActiveStep) => prevActiveStep - 1);
35
+ };
36
+
37
+ const disabledBackButton = activeStep === 0;
38
+ const disabledForwardButton = activeStep === tableRows.length - 1;
39
+
40
+ return (
41
+ <Box>
42
+ <Grid container justifyContent="space-between" mb={1}>
43
+ <Button color="inherit" disabled={disabledBackButton} onClick={handleBack} sx={{ mr: 1, alignSelf: "flex-start" }}>
44
+ <LeftChevronIcon size={16} color={disabledBackButton ? "transparent" : "var(--primary)"} />
45
+ </Button>
46
+ <StyledHeader xs={totalColumns}>
47
+ <Typography category="secondary" size="small-medium-cap">
48
+ {headerRows[activeStep].name}
49
+ </Typography>
50
+ </StyledHeader>
51
+ <Button onClick={handleNext} disabled={disabledForwardButton}>
52
+ <RightChevronIcon size={16} color={disabledForwardButton ? "transparent" : "var(--primary)"} />
53
+ </Button>
54
+ </Grid>
55
+ <Grid flexDirection="column" container>
56
+ <GridSections
57
+ sx={{
58
+ flexDirection: "column",
59
+ gap: "10px",
60
+ }}
61
+ >
62
+ {tableRows[activeStep]}
63
+ </GridSections>
64
+ </Grid>
65
+ </Box>
66
+ );
67
+ }
@@ -0,0 +1,24 @@
1
+ import React from "react";
2
+ import Box from "@mui/material/Box";
3
+
4
+ import DesktopTableRows from './DesktopTableRows';
5
+ import MobileTableRow from './MobileTableRows';
6
+ import { DrawCardTableProps } from "../sharedTypes";
7
+
8
+ export default function TeamDrawCardTable({
9
+ headerRows, tableRows, isMobile, ...props
10
+ }: DrawCardTableProps) {
11
+ if (!headerRows || !tableRows) return null;
12
+
13
+ const totalColumns = Math.floor(12 / headerRows.length);
14
+
15
+ return (
16
+ <Box {...props} sx={{ flexGrow: 1 }} aria-label="draw table">
17
+ {isMobile ? (
18
+ <MobileTableRow totalColumns={totalColumns} tableRows={tableRows} headerRows={headerRows} />
19
+ ) : (
20
+ <DesktopTableRows totalColumns={totalColumns} tableRows={tableRows} headerRows={headerRows} />
21
+ )}
22
+ </Box>
23
+ );
24
+ }