norma-library 0.5.811 → 0.5.812

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 (239) hide show
  1. package/dist/esm/components/Box/index.d.ts +4 -0
  2. package/dist/esm/components/Box/index.js +8 -0
  3. package/dist/esm/components/Box/index.js.map +1 -0
  4. package/dist/esm/components/Box/interfaces.d.ts +5 -0
  5. package/dist/esm/components/Box/interfaces.js +2 -0
  6. package/dist/esm/components/Box/interfaces.js.map +1 -0
  7. package/dist/esm/components/Box/styles.d.ts +3 -0
  8. package/dist/esm/components/Box/styles.js +17 -0
  9. package/dist/esm/components/Box/styles.js.map +1 -0
  10. package/dist/esm/components/Breadcrumb/index.d.ts +4 -0
  11. package/dist/esm/components/Breadcrumb/index.js +18 -0
  12. package/dist/esm/components/Breadcrumb/index.js.map +1 -0
  13. package/dist/esm/components/Breadcrumb/interface.d.ts +8 -0
  14. package/dist/esm/components/Breadcrumb/interface.js +2 -0
  15. package/dist/esm/components/Breadcrumb/interface.js.map +1 -0
  16. package/dist/esm/components/Breadcrumb/styles.d.ts +5 -0
  17. package/dist/esm/components/Breadcrumb/styles.js +8 -0
  18. package/dist/esm/components/Breadcrumb/styles.js.map +1 -0
  19. package/dist/esm/components/ChatMessageBalloon/ChatMessageBalloon.style.d.ts +1 -1
  20. package/dist/esm/components/DataGrid/base/dropdown.d.ts +4 -4
  21. package/dist/esm/components/DataGrid/base/dropdown.js +125 -125
  22. package/dist/esm/components/DataGrid/base/dropdown.js.map +1 -1
  23. package/dist/esm/components/DataGrid/base/number-filter.d.ts +4 -4
  24. package/dist/esm/components/DataGrid/base/number-filter.js +29 -29
  25. package/dist/esm/components/DataGrid/base/sorting.d.ts +5 -5
  26. package/dist/esm/components/DataGrid/base/sorting.js +14 -14
  27. package/dist/esm/components/DataGrid/icons.d.ts +5 -4
  28. package/dist/esm/components/DataGrid/icons.js +19 -14
  29. package/dist/esm/components/DataGrid/icons.js.map +1 -1
  30. package/dist/esm/components/DataGrid/index.d.ts +3 -5
  31. package/dist/esm/components/DataGrid/index.js +213 -145
  32. package/dist/esm/components/DataGrid/index.js.map +1 -1
  33. package/dist/esm/components/DataGrid/shared.d.ts +20 -20
  34. package/dist/esm/components/DataGrid/shared.js +118 -127
  35. package/dist/esm/components/DataGrid/shared.js.map +1 -1
  36. package/dist/esm/components/DataGrid/styled.d.ts +11 -11
  37. package/dist/esm/components/DataGrid/styled.js +85 -85
  38. package/dist/esm/components/DateInput/index.d.ts +4 -0
  39. package/dist/esm/components/DateInput/index.js +15 -0
  40. package/dist/esm/components/DateInput/index.js.map +1 -0
  41. package/dist/esm/components/DateInput/interface.d.ts +12 -0
  42. package/dist/esm/components/DateInput/interface.js +2 -0
  43. package/dist/esm/components/DateInput/interface.js.map +1 -0
  44. package/dist/esm/components/DateInput/styles.d.ts +5 -0
  45. package/dist/esm/components/DateInput/styles.js +7 -0
  46. package/dist/esm/components/DateInput/styles.js.map +1 -0
  47. package/dist/esm/components/Icons.d.ts +1 -1
  48. package/dist/esm/components/Icons.js.map +1 -1
  49. package/dist/esm/components/MultiSelectInput/components/MultiValue/index.d.ts +3 -0
  50. package/dist/esm/components/MultiSelectInput/components/MultiValue/index.js +30 -0
  51. package/dist/esm/components/MultiSelectInput/components/MultiValue/index.js.map +1 -0
  52. package/dist/esm/components/MultiSelectInput/components/Option/index.d.ts +3 -0
  53. package/dist/esm/components/MultiSelectInput/components/Option/index.js +36 -0
  54. package/dist/esm/components/MultiSelectInput/components/Option/index.js.map +1 -0
  55. package/dist/esm/components/MultiSelectInput/components/Option/styles.d.ts +2 -0
  56. package/dist/esm/components/MultiSelectInput/components/Option/styles.js +5 -0
  57. package/dist/esm/components/MultiSelectInput/components/Option/styles.js.map +1 -0
  58. package/dist/esm/components/MultiSelectInput/index.d.ts +4 -0
  59. package/dist/esm/components/MultiSelectInput/index.js +33 -0
  60. package/dist/esm/components/MultiSelectInput/index.js.map +1 -0
  61. package/dist/esm/components/MultiSelectInput/interfaces.d.ts +15 -0
  62. package/dist/esm/components/MultiSelectInput/interfaces.js +2 -0
  63. package/dist/esm/components/MultiSelectInput/interfaces.js.map +1 -0
  64. package/dist/esm/components/MultiSelectInput/styles.d.ts +3 -0
  65. package/dist/esm/components/MultiSelectInput/styles.js +6 -0
  66. package/dist/esm/components/MultiSelectInput/styles.js.map +1 -0
  67. package/dist/esm/components/SelectInput/components/Option/index.d.ts +3 -0
  68. package/dist/esm/components/SelectInput/components/Option/index.js +34 -0
  69. package/dist/esm/components/SelectInput/components/Option/index.js.map +1 -0
  70. package/dist/esm/components/SelectInput/components/Option/styles.d.ts +2 -0
  71. package/dist/esm/components/SelectInput/components/Option/styles.js +5 -0
  72. package/dist/esm/components/SelectInput/components/Option/styles.js.map +1 -0
  73. package/dist/esm/components/SelectInput/index.d.ts +4 -0
  74. package/dist/esm/components/SelectInput/index.js +19 -0
  75. package/dist/esm/components/SelectInput/index.js.map +1 -0
  76. package/dist/esm/components/SelectInput/interfaces.d.ts +15 -0
  77. package/dist/esm/components/SelectInput/interfaces.js +2 -0
  78. package/dist/esm/components/SelectInput/interfaces.js.map +1 -0
  79. package/dist/esm/components/SelectInput/styles.d.ts +3 -0
  80. package/dist/esm/components/SelectInput/styles.js +6 -0
  81. package/dist/esm/components/SelectInput/styles.js.map +1 -0
  82. package/dist/esm/components/Table/components/header/index.d.ts +3 -0
  83. package/dist/esm/components/Table/components/header/index.js +35 -0
  84. package/dist/esm/components/Table/components/header/index.js.map +1 -0
  85. package/dist/esm/components/Table/components/header/styles.d.ts +8 -0
  86. package/dist/esm/components/Table/components/header/styles.js +11 -0
  87. package/dist/esm/components/Table/components/header/styles.js.map +1 -0
  88. package/dist/esm/components/Table/components/index.d.ts +4 -0
  89. package/dist/esm/components/Table/components/index.js +5 -0
  90. package/dist/esm/components/Table/components/index.js.map +1 -0
  91. package/dist/esm/components/Table/components/pagination/index.d.ts +3 -0
  92. package/dist/esm/components/Table/components/pagination/index.js +16 -0
  93. package/dist/esm/components/Table/components/pagination/index.js.map +1 -0
  94. package/dist/esm/components/Table/components/pagination/styles.d.ts +2 -0
  95. package/dist/esm/components/Table/components/pagination/styles.js +5 -0
  96. package/dist/esm/components/Table/components/pagination/styles.js.map +1 -0
  97. package/dist/esm/components/Table/components/tbody/index.d.ts +3 -0
  98. package/dist/esm/components/Table/components/tbody/index.js +8 -0
  99. package/dist/esm/components/Table/components/tbody/index.js.map +1 -0
  100. package/dist/esm/components/Table/components/tbody/styles.d.ts +0 -0
  101. package/dist/esm/components/Table/components/tbody/styles.js +2 -0
  102. package/dist/esm/components/Table/components/tbody/styles.js.map +1 -0
  103. package/dist/esm/components/Table/index-old.d.ts +4 -0
  104. package/dist/esm/components/Table/index-old.js +249 -0
  105. package/dist/esm/components/Table/index-old.js.map +1 -0
  106. package/dist/esm/components/Table/index.d.ts +4 -0
  107. package/dist/esm/components/Table/index.js +215 -0
  108. package/dist/esm/components/Table/index.js.map +1 -0
  109. package/dist/esm/components/Table/interface.d.ts +12 -0
  110. package/dist/esm/components/Table/interface.js +2 -0
  111. package/dist/esm/components/Table/interface.js.map +1 -0
  112. package/dist/esm/components/Table/styles.d.ts +10 -0
  113. package/dist/esm/components/Table/styles.js +13 -0
  114. package/dist/esm/components/Table/styles.js.map +1 -0
  115. package/dist/esm/components/Table-old/index.d.ts +3 -0
  116. package/dist/esm/components/Table-old/index.js +71 -0
  117. package/dist/esm/components/Table-old/index.js.map +1 -0
  118. package/dist/esm/components/Table-old/styles.d.ts +3004 -0
  119. package/dist/esm/components/Table-old/styles.js +15 -0
  120. package/dist/esm/components/Table-old/styles.js.map +1 -0
  121. package/dist/esm/components/TextInput/index.d.ts +4 -0
  122. package/dist/esm/components/TextInput/index.js +16 -0
  123. package/dist/esm/components/TextInput/index.js.map +1 -0
  124. package/dist/esm/components/TextInput/interface.d.ts +10 -0
  125. package/dist/esm/components/TextInput/interface.js +2 -0
  126. package/dist/esm/components/TextInput/interface.js.map +1 -0
  127. package/dist/esm/components/TextInput/styles.d.ts +4 -0
  128. package/dist/esm/components/TextInput/styles.js +7 -0
  129. package/dist/esm/components/TextInput/styles.js.map +1 -0
  130. package/dist/esm/components/Typography/Text/index.d.ts +4 -0
  131. package/dist/esm/components/Typography/Text/index.js +8 -0
  132. package/dist/esm/components/Typography/Text/index.js.map +1 -0
  133. package/dist/esm/components/Typography/Text/interfaces.d.ts +7 -0
  134. package/dist/esm/components/Typography/Text/interfaces.js +2 -0
  135. package/dist/esm/components/Typography/Text/interfaces.js.map +1 -0
  136. package/dist/esm/components/Typography/Text/styles.d.ts +3 -0
  137. package/dist/esm/components/Typography/Text/styles.js +35 -0
  138. package/dist/esm/components/Typography/Text/styles.js.map +1 -0
  139. package/dist/esm/components/Typography/Title/index.d.ts +4 -0
  140. package/dist/esm/components/Typography/Title/index.js +8 -0
  141. package/dist/esm/components/Typography/Title/index.js.map +1 -0
  142. package/dist/esm/components/Typography/Title/interfaces.d.ts +8 -0
  143. package/dist/esm/components/Typography/Title/interfaces.js +2 -0
  144. package/dist/esm/components/Typography/Title/interfaces.js.map +1 -0
  145. package/dist/esm/components/Typography/Title/styles.d.ts +3 -0
  146. package/dist/esm/components/Typography/Title/styles.js +35 -0
  147. package/dist/esm/components/Typography/Title/styles.js.map +1 -0
  148. package/dist/esm/components/Typography/index.d.ts +3 -0
  149. package/dist/esm/components/Typography/index.js +4 -0
  150. package/dist/esm/components/Typography/index.js.map +1 -0
  151. package/dist/esm/components/index.d.ts +1 -1
  152. package/dist/esm/components/index.js +1 -1
  153. package/dist/esm/components/index.js.map +1 -1
  154. package/dist/esm/helpers/alignments.js.map +1 -1
  155. package/dist/esm/helpers/borders.js.map +1 -1
  156. package/dist/esm/helpers/colors.js.map +1 -1
  157. package/dist/esm/helpers/radios.js.map +1 -1
  158. package/dist/esm/helpers/sizes.js.map +1 -1
  159. package/dist/esm/index.d.ts +10 -2
  160. package/dist/esm/index.js +10 -2
  161. package/dist/esm/index.js.map +1 -1
  162. package/dist/esm/interfaces/DataGrid.d.ts +42 -42
  163. package/dist/esm/interfaces/DataGrid.js +1 -1
  164. package/dist/esm/interfaces/index.d.ts +0 -1
  165. package/dist/esm/interfaces/index.js +0 -1
  166. package/dist/esm/interfaces/index.js.map +1 -1
  167. package/package.json +6 -4
  168. package/src/components/Box/index.tsx +13 -0
  169. package/src/components/Box/interfaces.ts +4 -0
  170. package/src/components/Box/styles.tsx +23 -0
  171. package/src/components/Breadcrumb/index.tsx +27 -0
  172. package/src/components/Breadcrumb/interface.ts +9 -0
  173. package/src/components/Breadcrumb/styles.tsx +33 -0
  174. package/src/components/DateInput/index.tsx +35 -0
  175. package/src/components/DateInput/interface.ts +14 -0
  176. package/src/components/DateInput/styles.tsx +28 -0
  177. package/src/components/MultiSelectInput/components/MultiValue/index.tsx +44 -0
  178. package/src/components/MultiSelectInput/components/Option/index.tsx +63 -0
  179. package/src/components/MultiSelectInput/components/Option/styles.tsx +9 -0
  180. package/src/components/MultiSelectInput/index.tsx +61 -0
  181. package/src/components/MultiSelectInput/interfaces.ts +16 -0
  182. package/src/components/MultiSelectInput/styles.tsx +44 -0
  183. package/src/components/SelectInput/components/Option/index.tsx +62 -0
  184. package/src/components/SelectInput/components/Option/styles.tsx +9 -0
  185. package/src/components/SelectInput/index.tsx +46 -0
  186. package/src/components/SelectInput/interfaces.ts +16 -0
  187. package/src/components/SelectInput/styles.tsx +32 -0
  188. package/src/components/Table/components/header/index.tsx +59 -0
  189. package/src/components/Table/components/header/styles.tsx +55 -0
  190. package/src/components/Table/components/index.tsx +9 -0
  191. package/src/components/Table/components/pagination/index.tsx +42 -0
  192. package/src/components/Table/components/pagination/styles.tsx +19 -0
  193. package/src/components/Table/components/tbody/index.tsx +20 -0
  194. package/src/components/Table/components/tbody/styles.tsx +0 -0
  195. package/src/components/Table/index.tsx +295 -0
  196. package/src/components/Table/interface.ts +14 -0
  197. package/src/components/Table/styles.tsx +113 -0
  198. package/src/components/TextInput/index.tsx +38 -0
  199. package/src/components/TextInput/interface.ts +10 -0
  200. package/src/components/TextInput/styles.tsx +24 -0
  201. package/src/components/Typography/Text/index.tsx +21 -0
  202. package/src/components/Typography/Text/interfaces.ts +6 -0
  203. package/src/components/Typography/Text/styles.tsx +41 -0
  204. package/src/components/Typography/Title/index.tsx +23 -0
  205. package/src/components/Typography/Title/interfaces.ts +7 -0
  206. package/src/components/Typography/Title/styles.tsx +41 -0
  207. package/src/components/Typography/index.tsx +7 -0
  208. package/src/components/index.ts +1 -1
  209. package/src/index.css +0 -2
  210. package/src/index.ts +19 -2
  211. package/src/interfaces/index.ts +0 -1
  212. package/src/sample-data.json +2 -3
  213. package/src/stories/Box.stories.tsx +36 -0
  214. package/src/stories/Breadcrumb.stories.tsx +45 -0
  215. package/src/stories/DateInput.stories.tsx +52 -0
  216. package/src/stories/MultiSelectInput.stories.tsx +91 -0
  217. package/src/stories/SelectInput.stories.tsx +79 -0
  218. package/src/stories/Table.stories.tsx +222 -0
  219. package/src/stories/Text.stories.tsx +38 -0
  220. package/src/stories/TextInput.stories.tsx +53 -0
  221. package/src/stories/Title.stories.tsx +44 -0
  222. package/src/styles/custom.css +1 -0
  223. package/src/styles/{globals.css → globals.scss} +1 -4
  224. package/tsconfig.json +1 -1
  225. package/vite.config.ts +15 -0
  226. package/.husky/commit-msg +0 -4
  227. package/src/components/DataGrid/allData.json +0 -2918
  228. package/src/components/DataGrid/base/dropdown.tsx +0 -212
  229. package/src/components/DataGrid/base/number-filter.tsx +0 -43
  230. package/src/components/DataGrid/base/sorting.tsx +0 -29
  231. package/src/components/DataGrid/icons.tsx +0 -53
  232. package/src/components/DataGrid/index.tsx +0 -259
  233. package/src/components/DataGrid/shared.ts +0 -154
  234. package/src/components/DataGrid/styled.ts +0 -107
  235. package/src/components/DataGrid/styles/dropdown.module.css +0 -86
  236. package/src/components/DataGrid/styles/number-filter.module.css +0 -16
  237. package/src/components/DataGrid/styles/styles.module.css +0 -107
  238. package/src/interfaces/DataGrid.ts +0 -47
  239. package/src/stories/DataGrid.stories.tsx +0 -31
@@ -1,212 +0,0 @@
1
- import React, { useState, useEffect, Fragment } from 'react';
2
- import NumberFilter from './number-filter';
3
- import { Button, Typography, FormControl, InputLabel, OutlinedInput, InputAdornment, IconButton } from '@mui/material';
4
- import Divider from '@mui/material/Divider';
5
- import MenuList from '@mui/material/MenuList';
6
- import MenuItem from '@mui/material/MenuItem';
7
- import ListItemIcon from '@mui/material/ListItemIcon';
8
- import ListItemText from '@mui/material/ListItemText';
9
-
10
- import List from '@mui/material/List';
11
- import ListItem from '@mui/material/ListItem';
12
- import ListItemButton from '@mui/material/ListItemButton';
13
- import Checkbox from '@mui/material/Checkbox';
14
-
15
- import { Search } from '@mui/icons-material';
16
- import { DropdownFilterProps } from '@/interfaces';
17
- import KeyboardArrowRightIcon from '@mui/icons-material/KeyboardArrowRight';
18
-
19
- import { DropDownStyled } from '../styled';
20
-
21
- import { ArrowSmallDownIcon, ArrowSmallUpIcon, FunnelIcon } from '../icons';
22
-
23
- const DropdownFilter = ({
24
- onOrder,
25
- onFilter,
26
- onSelected,
27
- onFilterSelected,
28
- itemsSelected,
29
- onSelectAll,
30
- onChecketAll,
31
- data,
32
- }: DropdownFilterProps) => {
33
- const [openFilter, setOpenFilter] = useState<boolean>(false);
34
- const [selectAll, setSelectAll] = useState(onSelectAll);
35
- const [selecteds, setItemsSelected] = useState<(string | number)[]>(itemsSelected);
36
-
37
- const handleFilter = () => {
38
- setOpenFilter(prevState => !prevState);
39
- };
40
-
41
- const handleFilterSelected = () => {
42
- if (itemsSelected.length > 0) {
43
- onFilterSelected();
44
- } else {
45
- onSelected([]);
46
- onFilter('');
47
- onFilterSelected();
48
- }
49
- };
50
-
51
- const handleCheckboxChange = (option: string) => {
52
- const updatedSelection = selecteds.includes(option)
53
- ? selecteds.filter(selected => selected !== option)
54
- : [...selecteds, option];
55
-
56
- setItemsSelected(updatedSelection);
57
- onSelected(updatedSelection);
58
- };
59
-
60
- const handleSelectAll = () => {
61
- setSelectAll(selectAll ? false : true);
62
- onChecketAll(selectAll ? false : true);
63
-
64
- if (!selectAll) {
65
- const allItems = data.map((item: any) => item.toString());
66
- setItemsSelected(allItems);
67
- onSelected(allItems);
68
- } else {
69
- setItemsSelected([]);
70
- onSelected([]);
71
- }
72
- };
73
-
74
- useEffect(() => {
75
- setItemsSelected(selectAll ? data.map(String) : []);
76
- onSelected(selectAll ? data.map(String) : []);
77
- }, [selectAll]);
78
-
79
- useEffect(() => {
80
- setItemsSelected(itemsSelected);
81
- }, [selecteds]);
82
-
83
- return (
84
- <DropDownStyled>
85
- <Fragment>
86
- <MenuList>
87
- <MenuItem
88
- onClick={() => {
89
- onOrder('down');
90
- setOpenFilter(false);
91
- }}
92
- >
93
- <ListItemIcon>
94
- <ArrowSmallUpIcon width="16" height="16" />
95
- </ListItemIcon>
96
- <ListItemText>Classify from A to Z</ListItemText>
97
- </MenuItem>
98
- <MenuItem
99
- onClick={() => {
100
- onOrder('up');
101
- setOpenFilter(false);
102
- }}
103
- >
104
- <ListItemIcon>
105
- <ArrowSmallDownIcon width="16" height="16" />
106
- </ListItemIcon>
107
- <ListItemText>Classify from A to Z</ListItemText>
108
- </MenuItem>
109
- <MenuItem onClick={handleFilter}>
110
- <ListItemIcon>
111
- <FunnelIcon width="16" height="16" />
112
- </ListItemIcon>
113
- <ListItemText>Filter by numbers</ListItemText>
114
- <Typography variant="body2" color="text.secondary">
115
- <KeyboardArrowRightIcon fontSize="medium" style={{ position: 'relative', top: '5px' }} />
116
- </Typography>
117
- {openFilter && (
118
- <React.Fragment>
119
- <NumberFilter onClick={() => console.log('Me clicou')} />
120
- </React.Fragment>
121
- )}
122
- </MenuItem>
123
- <Divider />
124
- <FormControl sx={{ m: 1 }} variant="outlined">
125
- <InputLabel htmlFor="outlined-adornment-search" size="small">
126
- Search
127
- </InputLabel>
128
- <OutlinedInput
129
- id="outlined-adornment-search"
130
- endAdornment={
131
- <InputAdornment position="end">
132
- <IconButton edge="end">
133
- <Search />
134
- </IconButton>
135
- </InputAdornment>
136
- }
137
- onChange={event => {
138
- onFilter(event.target.value);
139
- }}
140
- label="Search"
141
- fullWidth
142
- size="small"
143
- />
144
- </FormControl>
145
- <Divider />
146
- <List
147
- sx={{
148
- bgcolor: '#f2f2f2',
149
- padding: ' 5px',
150
- overflow: ' auto',
151
- width: ' 100%',
152
- height: ' 120px',
153
- }}
154
- >
155
- <ListItem disablePadding onClick={handleSelectAll}>
156
- <ListItemButton role={undefined} sx={{ py: 0, minHeight: 32 }}>
157
- <ListItemIcon>
158
- <Checkbox
159
- edge="start"
160
- tabIndex={-1}
161
- checked={selectAll}
162
- disableRipple
163
- inputProps={{ 'aria-labelledby': 'all' }}
164
- />
165
- </ListItemIcon>
166
- <ListItemText
167
- id={'all'}
168
- primary={selectAll ? 'Deselect All' : 'Select All'}
169
- primaryTypographyProps={{
170
- fontSize: 14,
171
- fontWeight: 'medium',
172
- }}
173
- />
174
- </ListItemButton>
175
- </ListItem>
176
- {data.map((item: any, key: number) => {
177
- const labelId = `checkbox-list-label-${item.toString()}`;
178
- return (
179
- <ListItem key={key} disablePadding onClick={() => handleCheckboxChange(item.toString())}>
180
- <ListItemButton role={undefined} sx={{ py: 0, minHeight: 32 }}>
181
- <ListItemIcon>
182
- <Checkbox
183
- edge="start"
184
- tabIndex={-1}
185
- disableRipple
186
- inputProps={{ 'aria-labelledby': labelId }}
187
- checked={selecteds.includes(item.toString())}
188
- />
189
- </ListItemIcon>
190
- <ListItemText
191
- id={labelId}
192
- primary={`${item}`}
193
- primaryTypographyProps={{
194
- fontSize: 14,
195
- fontWeight: 'medium',
196
- }}
197
- />
198
- </ListItemButton>
199
- </ListItem>
200
- );
201
- })}
202
- </List>
203
- </MenuList>
204
- <Button variant="outlined" sx={{ align: 'right' }} onClick={handleFilterSelected}>
205
- Confirm
206
- </Button>
207
- </Fragment>
208
- </DropDownStyled>
209
- );
210
- };
211
-
212
- export default DropdownFilter;
@@ -1,43 +0,0 @@
1
- import React from 'react';
2
-
3
- import List from '@mui/material/List';
4
- import ListItem from '@mui/material/ListItem';
5
- import ListItemText from '@mui/material/ListItemText';
6
- import { NumberFilterProps } from '@/interfaces';
7
-
8
- const items = [
9
- 'Equal',
10
- 'Does not equal',
11
- 'Greater than',
12
- 'Greater than or equal to',
13
- 'Less than',
14
- 'Less than or equal to',
15
- 'Between',
16
- ];
17
-
18
- const NumberFilter: React.FC<NumberFilterProps> = () => {
19
- return (
20
- <List
21
- sx={{
22
- bgcolor: '#FFF',
23
- position: 'absolute',
24
- minHeight: '190px',
25
- top: '0',
26
- left: 'auto',
27
- right: 'auto',
28
- minWidth: '240px',
29
- zIndex: '9',
30
- padding: '5px 10px',
31
- boxShadow: '0 0 10px #ccc',
32
- }}
33
- >
34
- {items.map((value, key) => (
35
- <ListItem key={key} disableGutters>
36
- <ListItemText primary={`${value}...`} />
37
- </ListItem>
38
- ))}
39
- </List>
40
- );
41
- };
42
-
43
- export default NumberFilter;
@@ -1,29 +0,0 @@
1
- import React from 'react';
2
-
3
- import { SortingProps } from '@/interfaces';
4
- // import { Icons } from "@/components/Icons";
5
-
6
- export function ArrowSmallUpIcon(props: any) {
7
- return (
8
- <svg fill="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" {...props}>
9
- <path
10
- clipRule="evenodd"
11
- fillRule="evenodd"
12
- d="M12 20.25a.75.75 0 01-.75-.75V6.31l-5.47 5.47a.75.75 0 01-1.06-1.06l6.75-6.75a.75.75 0 011.06 0l6.75 6.75a.75.75 0 11-1.06 1.06l-5.47-5.47V19.5a.75.75 0 01-.75.75z"
13
- />
14
- </svg>
15
- );
16
- }
17
-
18
- const Sorting: React.FC<SortingProps> = ({ sort, active }) => {
19
- const sortIcon = <ArrowSmallUpIcon />;
20
- const opacityValue = active ? 1 : 0.5;
21
-
22
- return (
23
- <button type="button" style={{ opacity: opacityValue }} className="arrows">
24
- {sort && sortIcon}
25
- </button>
26
- );
27
- };
28
-
29
- export default Sorting;
@@ -1,53 +0,0 @@
1
- import React from 'react';
2
-
3
- export function FunnelIcon(props: any) {
4
- return (
5
- <svg
6
- fill="none"
7
- stroke="currentColor"
8
- strokeWidth={1.5}
9
- viewBox="0 0 24 24"
10
- xmlns="http://www.w3.org/2000/svg"
11
- aria-hidden="true"
12
- {...props}
13
- >
14
- <path
15
- strokeLinecap="round"
16
- strokeLinejoin="round"
17
- d="M12 3c2.755 0 5.455.232 8.083.678.533.09.917.556.917 1.096v1.044a2.25 2.25 0 01-.659 1.591l-5.432 5.432a2.25 2.25 0 00-.659 1.591v2.927a2.25 2.25 0 01-1.244 2.013L9.75 21v-6.568a2.25 2.25 0 00-.659-1.591L3.659 7.409A2.25 2.25 0 013 5.818V4.774c0-.54.384-1.006.917-1.096A48.32 48.32 0 0112 3z"
18
- />
19
- </svg>
20
- );
21
- }
22
-
23
- export function ArrowSmallUpIcon(props: any) {
24
- return (
25
- <svg
26
- fill="none"
27
- stroke="currentColor"
28
- strokeWidth={1.5}
29
- viewBox="0 0 24 24"
30
- xmlns="http://www.w3.org/2000/svg"
31
- aria-hidden="true"
32
- {...props}
33
- >
34
- <path strokeLinecap="round" strokeLinejoin="round" d="M12 19.5v-15m0 0l-6.75 6.75M12 4.5l6.75 6.75" />
35
- </svg>
36
- );
37
- }
38
-
39
- export function ArrowSmallDownIcon(props: any) {
40
- return (
41
- <svg
42
- fill="none"
43
- stroke="currentColor"
44
- strokeWidth={1.5}
45
- viewBox="0 0 24 24"
46
- xmlns="http://www.w3.org/2000/svg"
47
- aria-hidden="true"
48
- {...props}
49
- >
50
- <path strokeLinecap="round" strokeLinejoin="round" d="M12 4.5v15m0 0l6.75-6.75M12 19.5l-6.75-6.75" />
51
- </svg>
52
- );
53
- }
@@ -1,259 +0,0 @@
1
- import React, { useEffect, useState, useRef, useMemo } from 'react';
2
-
3
- import { Box, Stack, Paper } from '@mui/material';
4
-
5
- import Table from '@mui/material/Table';
6
- import TableBody from '@mui/material/TableBody';
7
- import TableContainer from '@mui/material/TableContainer';
8
- import TableHead from '@mui/material/TableHead';
9
- import TableRow from '@mui/material/TableRow';
10
-
11
- import ArrowDropUpIcon from '@mui/icons-material/ArrowDropUp';
12
- import ArrowDropDownIcon from '@mui/icons-material/ArrowDropDown';
13
-
14
- import { DataGridBaseProps, DataSourceItem } from '../../interfaces';
15
-
16
- import DropdownFilter from './base/dropdown';
17
- import { Pagination as MuiPagination } from '@mui/material';
18
-
19
- import { filterDataSource, groupByDataSource, sortDataSourceByColumn } from './shared';
20
-
21
- import {
22
- ButtonStyled,
23
- DataGridHeaderStyled,
24
- HeaderCogStyled,
25
- TableCellStyled,
26
- TableRowStyled,
27
- TotalRecordsStyled,
28
- TableCellBodyStyled
29
- } from './styled';
30
-
31
- export function ArrowSmallUpIcon(props: any) {
32
- return (
33
- <svg fill="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" {...props}>
34
- <path
35
- clipRule="evenodd"
36
- fillRule="evenodd"
37
- d="M12 20.25a.75.75 0 01-.75-.75V6.31l-5.47 5.47a.75.75 0 01-1.06-1.06l6.75-6.75a.75.75 0 011.06 0l6.75 6.75a.75.75 0 11-1.06 1.06l-5.47-5.47V19.5a.75.75 0 01-.75.75z"
38
- />
39
- </svg>
40
- );
41
- }
42
-
43
- export function Cog6ToothIcon(props: any) {
44
- return (
45
- <svg
46
- fill="none"
47
- stroke="currentColor"
48
- strokeWidth={1.5}
49
- viewBox="0 0 24 24"
50
- xmlns="http://www.w3.org/2000/svg"
51
- aria-hidden="true"
52
- {...props}
53
- >
54
- <path
55
- strokeLinecap="round"
56
- strokeLinejoin="round"
57
- d="M9.594 3.94c.09-.542.56-.94 1.11-.94h2.593c.55 0 1.02.398 1.11.94l.213 1.281c.063.374.313.686.645.87.074.04.147.083.22.127.324.196.72.257 1.075.124l1.217-.456a1.125 1.125 0 011.37.49l1.296 2.247a1.125 1.125 0 01-.26 1.431l-1.003.827c-.293.24-.438.613-.431.992a6.759 6.759 0 010 .255c-.007.378.138.75.43.99l1.005.828c.424.35.534.954.26 1.43l-1.298 2.247a1.125 1.125 0 01-1.369.491l-1.217-.456c-.355-.133-.75-.072-1.076.124a6.57 6.57 0 01-.22.128c-.331.183-.581.495-.644.869l-.213 1.28c-.09.543-.56.941-1.11.941h-2.594c-.55 0-1.02-.398-1.11-.94l-.213-1.281c-.062-.374-.312-.686-.644-.87a6.52 6.52 0 01-.22-.127c-.325-.196-.72-.257-1.076-.124l-1.217.456a1.125 1.125 0 01-1.369-.49l-1.297-2.247a1.125 1.125 0 01.26-1.431l1.004-.827c.292-.24.437-.613.43-.992a6.932 6.932 0 010-.255c.007-.378-.138-.75-.43-.99l-1.004-.828a1.125 1.125 0 01-.26-1.43l1.297-2.247a1.125 1.125 0 011.37-.491l1.216.456c.356.133.751.072 1.076-.124.072-.044.146-.087.22-.128.332-.183.582-.495.644-.869l.214-1.281z"
58
- />
59
- <path strokeLinecap="round" strokeLinejoin="round" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z" />
60
- </svg>
61
- );
62
- }
63
-
64
- // const dataSource = generateRandomDataSource(30);
65
-
66
- export const DataGrid: React.FC<DataGridBaseProps> = ({ data = [], onRowClick }) => {
67
- const pageSize = 10;
68
- const columns = useMemo(() => {
69
- return data[0].columns;
70
- }, [data]);
71
- const dataSource = useMemo(() => {
72
- return data[0].dataSource;
73
- }, [data]);
74
-
75
- const [selectedItems, setSelectedItems] = useState<(string | number)[]>([]);
76
-
77
- const [sorting, setSorting] = useState('down');
78
- const [selectAll, setSelectAll] = useState<boolean>(false);
79
-
80
- const [currentActiveSorting, setCurrentActiveSorting] = useState<string>('id');
81
-
82
- const [currentDropDownActive, setCurrentDropDownActive] = useState<string | null>(null);
83
-
84
- const [originalDataSource, setOriginalDataSource] = useState<DataSourceItem[]>([]);
85
- const [newDataSource, setDataSource] = useState<DataSourceItem[]>([]);
86
- const [totalRecords, setTotalRecords] = useState(0);
87
- const [totalPages, setTotalPages] = useState(0);
88
-
89
- const [currentPage, setCurrentPage] = useState(1);
90
- const startIndex = (currentPage - 1) * pageSize;
91
- const endIndex = Math.min(startIndex + pageSize, totalRecords);
92
-
93
- const sortRefs = useRef<(React.RefObject<HTMLTableCellElement> | null)[]>(new Array(columns.length).fill(null));
94
-
95
- const handleItemSelected = (items: (string | number)[]) => {
96
- setSelectedItems(items);
97
- };
98
-
99
- const handleDropDown = (item: any) => {
100
- setCurrentDropDownActive(item === currentDropDownActive ? null : item);
101
- if (item !== currentDropDownActive) {
102
- setCurrentActiveSorting(item);
103
- setSorting('down');
104
- }
105
- };
106
-
107
- const handleSorting = (sort: string) => {
108
- setSorting(sort === 'up' ? 'up' : 'down');
109
- currentDropDownActive && setCurrentActiveSorting(currentDropDownActive);
110
- handleDropDown(currentDropDownActive);
111
- };
112
-
113
- const handleFilter = (filter: string) => {
114
- const dataSourceFiltered = filterDataSource(originalDataSource, currentActiveSorting, filter);
115
- setOriginalDataSource(dataSourceFiltered);
116
- setCurrentPage(1);
117
- };
118
-
119
- const handleFilterSelected = () => {
120
- if (selectedItems.length > 0) {
121
- const filteredData = originalDataSource.filter((item: DataSourceItem) => {
122
- const columnValue = currentActiveSorting ? item[currentActiveSorting] : undefined;
123
-
124
- if (typeof columnValue === 'string') {
125
- return selectedItems.includes(columnValue);
126
- } else if (typeof columnValue === 'number') {
127
- return selectedItems.includes(columnValue.toString());
128
- }
129
- return false;
130
- });
131
-
132
- const sortedData = sortDataSourceByColumn(filteredData, currentActiveSorting, sorting);
133
- setTotalRecords(sortedData.length);
134
- setTotalPages(Math.ceil(sortedData.length / pageSize));
135
- setCurrentPage(1);
136
- setDataSource(sortedData.slice(startIndex, endIndex));
137
- } else {
138
- const sortedData = sortDataSourceByColumn(newDataSource, currentActiveSorting, sorting);
139
- setTotalRecords(sortedData.length);
140
- setTotalPages(Math.ceil(sortedData.length / pageSize));
141
- setCurrentPage(1);
142
- setDataSource(sortedData.slice(startIndex, endIndex));
143
- }
144
- handleDropDown(currentDropDownActive);
145
- };
146
-
147
- const handleChangePage = (page: number) => {
148
- setCurrentPage(page);
149
- const startIndex = (page - 1) * pageSize;
150
- const endIndex = Math.min(startIndex + pageSize, totalRecords);
151
- setDataSource(originalDataSource.slice(startIndex, endIndex));
152
- };
153
-
154
- useEffect(() => {
155
- if (selectedItems.length <= 0) {
156
- const sortedData = sortDataSourceByColumn(newDataSource, currentActiveSorting, sorting);
157
- setDataSource(sortedData.slice(startIndex, endIndex));
158
- setTotalRecords(sortedData.length);
159
- setTotalPages(Math.ceil(sortedData.length / pageSize));
160
- setCurrentPage(1);
161
- }
162
- }, [selectedItems, dataSource]);
163
-
164
- useEffect(() => {
165
- setOriginalDataSource(dataSource)
166
- setDataSource(dataSource)
167
- setTotalRecords(dataSource.length)
168
- setTotalPages(Math.ceil(dataSource.length / pageSize))
169
- }, [dataSource])
170
-
171
- return (
172
- <Box sx={{ width: '100%', minHeight: 480 }}>
173
- <DataGridHeaderStyled>
174
- <TotalRecordsStyled>{totalRecords} results found for this search</TotalRecordsStyled>
175
- <HeaderCogStyled type="button">
176
- <Cog6ToothIcon width={24} height={24} />
177
- </HeaderCogStyled>
178
- </DataGridHeaderStyled>
179
- <TableContainer component={Paper} sx={{ overflowX: 'inherit' }}>
180
- <Table sx={{ minWidth: 650, width: '100%' }} aria-label="a dense table">
181
- <TableHead>
182
- <TableRow>
183
- {columns &&
184
- columns.map((item: any, key: any) => (
185
- <TableCellStyled
186
- key={key}
187
- ref={ref => (sortRefs.current[key] = ref as React.RefObject<HTMLTableCellElement> | null)}
188
- >
189
- <Stack direction="row" spacing={2} sx={{ position: 'relative' }}>
190
- <ButtonStyled
191
- variant="text"
192
- size="small"
193
- color={currentActiveSorting === item.field ? 'primary' : 'inherit'}
194
- endIcon={
195
- currentActiveSorting === item.field && sorting === 'up' ? (
196
- <ArrowDropUpIcon />
197
- ) : (
198
- <ArrowDropDownIcon />
199
- )
200
- }
201
- onClick={() => {
202
- handleDropDown(item.field);
203
- }}
204
- >
205
- {item.headerText}
206
- </ButtonStyled>
207
- {currentDropDownActive && currentDropDownActive === item.field && (
208
- <DropdownFilter
209
- format={item.format}
210
- onOrder={handleSorting}
211
- onFilter={handleFilter}
212
- onSelected={handleItemSelected}
213
- itemsSelected={selectedItems}
214
- onFilterSelected={handleFilterSelected}
215
- onChecketAll={setSelectAll}
216
- onSelectAll={selectAll}
217
- data={groupByDataSource(newDataSource, item.field)}
218
- />
219
- )}
220
- </Stack>
221
- </TableCellStyled>
222
- ))}
223
- </TableRow>
224
- </TableHead>
225
- <TableBody>
226
- {newDataSource &&
227
- newDataSource.map((item: DataSourceItem, key: number) => (
228
- <TableRowStyled key={key} sx={{ '&:last-child td, &:last-child th': { border: 0 } }}>
229
- {Object.keys(item).map(columnKey => (
230
- <TableCellBodyStyled className={!!onRowClick ? 'is-interactive' : ''} onClick={(e) => { !!onRowClick && onRowClick(e) }} component="th" scope="row" key={columnKey} sx={{ textAlign: columns.find((c:any) => c.field === columnKey)?.textAlign || "center"}}>
231
- {item[columnKey]}
232
- </TableCellBodyStyled>
233
- ))}
234
- </TableRowStyled>
235
- ))}
236
- </TableBody>
237
- </Table>
238
- <Stack
239
- spacing={2}
240
- sx={{
241
- display: 'flex',
242
- justifyContent: 'center',
243
- alignItems: 'center',
244
- borderTop: '1px solid #ccc',
245
- padding: 2,
246
- }}
247
- >
248
- <MuiPagination
249
- variant="outlined"
250
- shape="rounded"
251
- count={totalPages}
252
- page={currentPage}
253
- onChange={(_event, page) => handleChangePage(page)}
254
- />
255
- </Stack>
256
- </TableContainer>
257
- </Box>
258
- );
259
- };