@omniumretail/component-library 1.0.65 → 1.0.66

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 (176) hide show
  1. package/.storybook/main.js +16 -16
  2. package/.storybook/preview-head.html +20 -20
  3. package/.storybook/preview.js +27 -27
  4. package/README.md +54 -54
  5. package/bitbucket-pipelines.yml +94 -94
  6. package/package.json +198 -198
  7. package/src/assets/scss/_global.scss +89 -89
  8. package/src/assets/scss/index.scss +2 -2
  9. package/src/components/AnalyticsBar/AnalyticsBar.stories.tsx +236 -236
  10. package/src/components/AnalyticsBar/helpers/codeMutation.tsx +19 -19
  11. package/src/components/AnalyticsBar/index.tsx +76 -76
  12. package/src/components/AnalyticsBar/interfaces/analyticsBar.tsx +13 -13
  13. package/src/components/AnalyticsBar/styles.module.scss +108 -108
  14. package/src/components/Button/Button.stories.tsx +26 -26
  15. package/src/components/Button/index.tsx +24 -24
  16. package/src/components/Button/styles.module.scss +65 -65
  17. package/src/components/Category/Category.stories.tsx +88 -88
  18. package/src/components/Category/CategoryContent/index.tsx +188 -188
  19. package/src/components/Category/CategoryContent/styles.module.scss +51 -51
  20. package/src/components/Category/CategorySidebar/index.tsx +268 -268
  21. package/src/components/Category/CategorySidebar/styles.module.scss +28 -28
  22. package/src/components/Category/index.tsx +76 -76
  23. package/src/components/Category/styles.module.scss +13 -13
  24. package/src/components/CategoryReadOnly/CategoryReadOnly.stories.tsx +270 -270
  25. package/src/components/CategoryReadOnly/evaluationOptions.tsx +81 -81
  26. package/src/components/CategoryReadOnly/index.tsx +254 -254
  27. package/src/components/CategoryReadOnly/styles.module.scss +184 -184
  28. package/src/components/CategoryResponse/CategoryResponse.stories.tsx +251 -251
  29. package/src/components/CategoryResponse/evaluationOptions.tsx +81 -81
  30. package/src/components/CategoryResponse/index.tsx +277 -277
  31. package/src/components/CategoryResponse/styles.module.scss +160 -160
  32. package/src/components/DatePicker/DatePicker.stories.tsx +16 -16
  33. package/src/components/DatePicker/index.tsx +38 -38
  34. package/src/components/DatePicker/styles.module.scss +3 -3
  35. package/src/components/DatePickerTag/DatePickerTag.stories.tsx +19 -19
  36. package/src/components/DatePickerTag/index.tsx +89 -89
  37. package/src/components/DatePickerTag/styles.module.scss +31 -31
  38. package/src/components/Footer/Footer.stories.tsx +14 -14
  39. package/src/components/Footer/index.tsx +38 -38
  40. package/src/components/Footer/styles.module.scss +38 -38
  41. package/src/components/Input/Input.stories.tsx +13 -13
  42. package/src/components/Input/index.tsx +31 -31
  43. package/src/components/Input/styles.module.scss +8 -8
  44. package/src/components/InputCountryCode/index.tsx +75 -75
  45. package/src/components/InputCountryCode/inputCountryCode.stories.tsx +55 -55
  46. package/src/components/InputCountryCode/styles.module.scss +3 -3
  47. package/src/components/Label/Label.stories.tsx +21 -21
  48. package/src/components/Label/index.tsx +19 -19
  49. package/src/components/Label/styles.module.scss +16 -16
  50. package/src/components/Link/Link.stories.tsx +30 -30
  51. package/src/components/Link/index.tsx +21 -21
  52. package/src/components/Link/styles.module.scss +24 -24
  53. package/src/components/Menu/Menu.stories.tsx +178 -178
  54. package/src/components/Menu/helpers/codeMutation.tsx +19 -19
  55. package/src/components/Menu/index.tsx +23 -23
  56. package/src/components/ModalConfirmation/ModalConfirmation.stories.tsx +40 -40
  57. package/src/components/ModalConfirmation/ModalStatusList.tsx +5 -5
  58. package/src/components/ModalConfirmation/index.tsx +70 -70
  59. package/src/components/ModalConfirmation/styles.module.scss +62 -62
  60. package/src/components/ModalWithTable/ModalWithTable.stories.tsx +96 -96
  61. package/src/components/ModalWithTable/index.tsx +232 -232
  62. package/src/components/ModalWithTable/styles.module.scss +77 -77
  63. package/src/components/Navigation/Navigation.stories.tsx +17 -17
  64. package/src/components/Navigation/index.tsx +33 -33
  65. package/src/components/Navigation/styles.module.scss +42 -42
  66. package/src/components/Notification/Notification.stories.tsx +29 -29
  67. package/src/components/Notification/index.tsx +21 -21
  68. package/src/components/Questions/Questions.stories.tsx +37 -37
  69. package/src/components/Questions/SingleQuestion/index.tsx +84 -84
  70. package/src/components/Questions/SingleQuestion/styles.module.scss +81 -81
  71. package/src/components/Questions/index.tsx +78 -78
  72. package/src/components/Radio/Radio.stories.tsx +43 -43
  73. package/src/components/Radio/index.tsx +26 -26
  74. package/src/components/Radio/styles.module.scss +23 -23
  75. package/src/components/Select/Select.stories.tsx +39 -39
  76. package/src/components/Select/index.tsx +27 -27
  77. package/src/components/Select/styles.module.scss +13 -13
  78. package/src/components/Separator/Separator.stories.tsx +22 -22
  79. package/src/components/Separator/index.tsx +27 -27
  80. package/src/components/Separator/styles.module.scss +25 -25
  81. package/src/components/Sidebar/Sidebar.stories.tsx +85 -61
  82. package/src/components/Sidebar/index.tsx +104 -58
  83. package/src/components/Sidebar/styles.module.scss +86 -73
  84. package/src/components/Switch/Switch.stories.tsx +14 -14
  85. package/src/components/Switch/index.tsx +8 -8
  86. package/src/components/Switch/styles.module.scss +7 -7
  87. package/src/components/Table/Table.stories.tsx +221 -221
  88. package/src/components/Table/index.tsx +271 -271
  89. package/src/components/Table/styles.module.scss +75 -75
  90. package/src/components/Tag/Tag.stories.tsx +22 -22
  91. package/src/components/Tag/index.tsx +189 -189
  92. package/src/components/Tag/styles.module.scss +60 -60
  93. package/src/components/Upload/Upload.stories.tsx +45 -45
  94. package/src/components/Upload/index.tsx +91 -91
  95. package/src/components/UserInfo/UserInfo.stories.tsx +37 -37
  96. package/src/components/UserInfo/index.tsx +62 -62
  97. package/src/components/UserInfo/styles.module.scss +29 -29
  98. package/src/components/index.tsx +25 -25
  99. package/src/constants/i18n.ts +25 -25
  100. package/src/constants/translationHelper.ts +7 -7
  101. package/src/index.ts +2 -2
  102. package/src/locales/en.json +86 -86
  103. package/src/locales/es.json +86 -86
  104. package/src/locales/pt.json +86 -86
  105. package/src/types/Global.d.ts +4 -4
  106. package/tsconfig.json +29 -29
  107. package/webpack.config.js +51 -51
  108. package/dist/bundle.js +0 -12047
  109. package/dist/main.css +0 -1199
  110. package/dist/types/components/AnalyticsBar/AnalyticsBar.stories.d.ts +0 -5
  111. package/dist/types/components/AnalyticsBar/helpers/codeMutation.d.ts +0 -4
  112. package/dist/types/components/AnalyticsBar/index.d.ts +0 -2
  113. package/dist/types/components/AnalyticsBar/interfaces/analyticsBar.d.ts +0 -12
  114. package/dist/types/components/Button/Button.stories.d.ts +0 -6
  115. package/dist/types/components/Button/index.d.ts +0 -7
  116. package/dist/types/components/Category/Category.stories.d.ts +0 -4
  117. package/dist/types/components/Category/CategoryContent/index.d.ts +0 -7
  118. package/dist/types/components/Category/CategorySidebar/index.d.ts +0 -26
  119. package/dist/types/components/Category/index.d.ts +0 -7
  120. package/dist/types/components/CategoryReadOnly/CategoryReadOnly.stories.d.ts +0 -4
  121. package/dist/types/components/CategoryReadOnly/evaluationOptions.d.ts +0 -10
  122. package/dist/types/components/CategoryReadOnly/index.d.ts +0 -9
  123. package/dist/types/components/CategoryResponse/CategoryResponse.stories.d.ts +0 -4
  124. package/dist/types/components/CategoryResponse/evaluationOptions.d.ts +0 -10
  125. package/dist/types/components/CategoryResponse/index.d.ts +0 -9
  126. package/dist/types/components/DatePicker/DatePicker.stories.d.ts +0 -5
  127. package/dist/types/components/DatePicker/index.d.ts +0 -8
  128. package/dist/types/components/DatePickerTag/DatePickerTag.stories.d.ts +0 -5
  129. package/dist/types/components/DatePickerTag/index.d.ts +0 -6
  130. package/dist/types/components/Footer/Footer.stories.d.ts +0 -5
  131. package/dist/types/components/Footer/index.d.ts +0 -4
  132. package/dist/types/components/Input/Input.stories.d.ts +0 -5
  133. package/dist/types/components/Input/index.d.ts +0 -10
  134. package/dist/types/components/InputCountryCode/index.d.ts +0 -10
  135. package/dist/types/components/InputCountryCode/inputCountryCode.stories.d.ts +0 -5
  136. package/dist/types/components/Label/Label.stories.d.ts +0 -6
  137. package/dist/types/components/Label/index.d.ts +0 -7
  138. package/dist/types/components/Link/Link.stories.d.ts +0 -7
  139. package/dist/types/components/Link/index.d.ts +0 -7
  140. package/dist/types/components/Menu/Menu.stories.d.ts +0 -5
  141. package/dist/types/components/Menu/helpers/codeMutation.d.ts +0 -4
  142. package/dist/types/components/Menu/index.d.ts +0 -2
  143. package/dist/types/components/ModalConfirmation/ModalConfirmation.stories.d.ts +0 -5
  144. package/dist/types/components/ModalConfirmation/ModalStatusList.d.ts +0 -5
  145. package/dist/types/components/ModalConfirmation/index.d.ts +0 -9
  146. package/dist/types/components/ModalWithTable/ModalWithTable.stories.d.ts +0 -5
  147. package/dist/types/components/ModalWithTable/index.d.ts +0 -13
  148. package/dist/types/components/Navigation/Navigation.stories.d.ts +0 -5
  149. package/dist/types/components/Navigation/index.d.ts +0 -10
  150. package/dist/types/components/Notification/Notification.stories.d.ts +0 -5
  151. package/dist/types/components/Notification/index.d.ts +0 -9
  152. package/dist/types/components/Questions/Questions.stories.d.ts +0 -4
  153. package/dist/types/components/Questions/SingleQuestion/index.d.ts +0 -1
  154. package/dist/types/components/Questions/index.d.ts +0 -5
  155. package/dist/types/components/Radio/Radio.stories.d.ts +0 -5
  156. package/dist/types/components/Radio/index.d.ts +0 -10
  157. package/dist/types/components/Select/Select.stories.d.ts +0 -6
  158. package/dist/types/components/Select/index.d.ts +0 -5
  159. package/dist/types/components/Separator/Separator.stories.d.ts +0 -6
  160. package/dist/types/components/Separator/index.d.ts +0 -11
  161. package/dist/types/components/Sidebar/Sidebar.stories.d.ts +0 -6
  162. package/dist/types/components/Sidebar/index.d.ts +0 -13
  163. package/dist/types/components/Switch/Switch.stories.d.ts +0 -5
  164. package/dist/types/components/Switch/index.d.ts +0 -2
  165. package/dist/types/components/Table/Table.stories.d.ts +0 -9
  166. package/dist/types/components/Table/index.d.ts +0 -36
  167. package/dist/types/components/Tag/Tag.stories.d.ts +0 -5
  168. package/dist/types/components/Tag/index.d.ts +0 -8
  169. package/dist/types/components/Upload/Upload.stories.d.ts +0 -4
  170. package/dist/types/components/Upload/index.d.ts +0 -8
  171. package/dist/types/components/UserInfo/UserInfo.stories.d.ts +0 -4
  172. package/dist/types/components/UserInfo/index.d.ts +0 -8
  173. package/dist/types/components/index.d.ts +0 -25
  174. package/dist/types/constants/i18n.d.ts +0 -1
  175. package/dist/types/constants/translationHelper.d.ts +0 -2
  176. package/dist/types/index.d.ts +0 -2
@@ -1,271 +1,271 @@
1
- import { useState, useEffect } from 'react';
2
- import { Space, TableProps, Select, Dropdown, MenuProps } from 'antd';
3
- import { Table as AntdTable } from 'antd';
4
- import type { ColumnsType } from 'antd/es/table/interface';
5
- import styles from './styles.module.scss';
6
- import { useTranslation } from 'react-i18next';
7
- import { MoreOutlined } from '@ant-design/icons';
8
- import classnames from 'classnames';
9
- import { Button } from '../Button';
10
-
11
- export interface FilterOptions {
12
- value: string;
13
- label: string;
14
- direction: string;
15
- }
16
-
17
- export interface Actions {
18
- key: string;
19
- label: string;
20
- }
21
-
22
- export enum sortBy {
23
- asc = 'asc',
24
- desc = 'desc',
25
- }
26
-
27
- export interface TableCustomProps extends TableProps<any> {
28
- fieldsToSort?: any[],
29
- selectPlaceholder?: string,
30
- onSort?: (field: any, sortBy: any) => void;
31
- sortInfo?: any;
32
- paginationInfo?: any;
33
- headingTranslationsKey?: string;
34
- actionsArray?: any;
35
- rowSelectionInfo?: any;
36
- rowKeyValue?: string;
37
- hiddenColumns?: string[];
38
- rowSelection?: any;
39
- onSelectAllButtonClick?: () => void;
40
- AllItemsShowing?: boolean;
41
- selectAllStatus?: any;
42
- isTableDataRefreshed?: any;
43
- tableLoading?: any;
44
- tableMaxHeight?: any;
45
- columnsSortChange?: any;
46
- sortByColumns?: boolean;
47
- }
48
-
49
- export const Table = (props: TableCustomProps) => {
50
- const { t } = useTranslation();
51
-
52
- const {
53
- dataSource = undefined,
54
- fieldsToSort,
55
- selectPlaceholder = 'Sort By',
56
- onSort,
57
- headingTranslationsKey,
58
- actionsArray: items,
59
- rowKeyValue,
60
- hiddenColumns,
61
- rowSelection,
62
- onSelectAllButtonClick,
63
- AllItemsShowing,
64
- selectAllStatus,
65
- isTableDataRefreshed,
66
- tableLoading,
67
- tableMaxHeight,
68
- sortByColumns,
69
- } = props;
70
-
71
- const [customFilters, setCustomFilters] = useState<any>([]);
72
- const [customColumns, setCustomColumns] = useState<ColumnsType<any>>([]);
73
- const [sortInfo, setSortInfo] = useState<any>([]);
74
- const [selectedRowKeys, setselectedRowKeys] = useState<any>(rowSelection?.selectedRowKeys || []);
75
- const [selectedAllRowKeys, setSelectedAllRowKeys] = useState(false);
76
- const [deselectAll, setDeselectAll] = useState(false);
77
-
78
-
79
- const onSelectChange = (newSelectedRowKeys: React.Key[]) => {
80
- if (rowSelection.type === 'radio') {
81
- setselectedRowKeys(newSelectedRowKeys);
82
- return;
83
- }
84
-
85
- setselectedRowKeys((prevKeys: any) => {
86
- const dataSourceIds = dataSource?.map((data) => data[rowKeyValue as any])
87
-
88
- const oldKeys = prevKeys.filter((key: any) => {
89
- return !dataSourceIds?.includes(key)
90
- });
91
-
92
- return [...oldKeys, ...newSelectedRowKeys];
93
- });
94
-
95
- setSelectedAllRowKeys(false);
96
- setDeselectAll(false);
97
- };
98
-
99
- const handleChange: TableProps<any>['onChange'] = (pagination, filters, sorter: any, extra) => {
100
- const getPagination = {
101
- currentPage: pagination.current,
102
- }
103
-
104
- const getSortAndPaginationInfo = { ...sortInfo, ...getPagination }
105
- props.paginationInfo(getSortAndPaginationInfo);
106
-
107
- // SORT
108
- if(sortByColumns) {
109
- const { field, order } = sorter;
110
- let mappedOrder = null;
111
- if(order === "ascend") {
112
- mappedOrder = "asc";
113
- } else if(order === "descend") {
114
- mappedOrder = "desc";
115
- }
116
-
117
- if(field && mappedOrder) {
118
- props.columnsSortChange({ field, order: mappedOrder });
119
- }
120
- }
121
- };
122
-
123
- const setSorter = (option: any) => {
124
- onSort?.(option.value.split('-')[0], option.direction);
125
- const sortData = {
126
- sortDirection: option.direction,
127
- sortValue: option.value.split('-')[0],
128
- }
129
-
130
- setSortInfo(sortData)
131
- };
132
-
133
- const selectAllRows = () => {
134
- if (selectedAllRowKeys) {
135
- setDeselectAll(true);
136
- } else {
137
- onSelectAllButtonClick?.(); // Call the onSelectAllButtonClick callback
138
- }
139
- };
140
-
141
- useEffect(() => {
142
- if (isTableDataRefreshed && !tableLoading || AllItemsShowing) {
143
- if (selectAllStatus && AllItemsShowing) {
144
- const allRowKeys = dataSource?.map((record) => record[rowKeyValue as any]);
145
- setselectedRowKeys(allRowKeys);
146
- setSelectedAllRowKeys(true);
147
- }
148
- }
149
- }, [isTableDataRefreshed, tableLoading, selectAllStatus, AllItemsShowing]);
150
-
151
- useEffect(() => {
152
- if (deselectAll) {
153
- setselectedRowKeys([]);
154
- setDeselectAll(false);
155
- setSelectedAllRowKeys(false);
156
- }
157
- }, [deselectAll]);
158
-
159
- useEffect(() => {
160
- props.rowSelectionInfo(selectedRowKeys);
161
- }, [selectedRowKeys]);
162
-
163
- useEffect(() => {
164
- if (dataSource && (dataSource as any)?.length > 0) {
165
- // Columns
166
- let columns = Object.keys(dataSource?.[0]).map(key => {
167
- if (hiddenColumns?.includes(key)) {
168
- return;
169
- }
170
-
171
- return ({
172
- title: headingTranslationsKey ? t(`${headingTranslationsKey}.${key}`) : key,
173
- dataIndex: key,
174
- key: key,
175
- ellipsis: false,
176
- sorter: sortByColumns,
177
- })
178
- }).filter(el => el !== undefined) as any;
179
-
180
- let columnActions = {
181
- key: 'action',
182
- title: headingTranslationsKey ? t(`${headingTranslationsKey}.${'action'}`) : 'action',
183
- dataIndex: 6,
184
- ellipsis: false,
185
- render: () => (
186
- <Space size="middle">
187
- <Dropdown menu={{ items }}>
188
- <a>
189
- <MoreOutlined style={{ color: 'var(--color-blue)', transform: 'scale(1.6)' }} />
190
- </a>
191
- </Dropdown>
192
- </Space>
193
- ),
194
- };
195
-
196
- items && columns.push(columnActions as any);
197
-
198
- setCustomColumns(columns);
199
-
200
- // Filters
201
- const dataKeysToFilter = Object.keys(dataSource?.[0]).filter((el) => fieldsToSort?.includes(el));
202
-
203
- const filters = ([] as FilterOptions[]).concat(
204
- ...dataKeysToFilter.map(key => ({
205
- value: `${key}-${sortBy.desc}`,
206
- label: `${headingTranslationsKey ? t(`${headingTranslationsKey}.${key}`) : key} (${sortBy.desc})`,
207
- direction: `${sortBy.desc}`,
208
- })),
209
- ...dataKeysToFilter.map(key => ({
210
- value: `${key}-${sortBy.asc}`,
211
- label: `${headingTranslationsKey ? t(`${headingTranslationsKey}.${key}`) : key} (${sortBy.asc})`,
212
- direction: `${sortBy.asc}`,
213
- }))
214
- );
215
-
216
- setCustomFilters(filters);
217
- }
218
- }, [dataSource]);
219
-
220
- const shouldRenderSortDropdown = customFilters.length > 0;
221
-
222
- const tableWrapperClasses = classnames({
223
- [styles.tableWrapperNoSelection]: !rowSelection
224
- }, [styles.tableWrapper]);
225
-
226
- return (
227
- <div className={tableWrapperClasses}>
228
- {shouldRenderSortDropdown &&
229
- <Space style={{ marginBottom: 16 }}>
230
- <Select
231
- style={{ width: 'auto', minWidth: 200 }}
232
- placeholder={selectPlaceholder}
233
- onSelect={(_, option: any) => {
234
- setSorter(option);
235
- }}
236
- optionFilterProp="children"
237
- filterOption={(input, option) => (option?.label ?? '').includes(input)}
238
- filterSort={(optionA, optionB) =>
239
- (optionA?.label ?? '').toLowerCase().localeCompare((optionB?.label ?? '').toLowerCase())
240
- }
241
- options={customFilters}
242
- />
243
- </Space>
244
- }
245
-
246
- <AntdTable
247
- dataSource={dataSource}
248
- onChange={handleChange}
249
- {...props}
250
- columns={customColumns}
251
- {...props.rowSelection ? (
252
- {
253
- rowSelection: {
254
- selectedRowKeys: selectedRowKeys,
255
- onChange: onSelectChange,
256
- type: props.rowSelection?.type,
257
- }
258
- }
259
- ) : null}
260
- rowKey={rowKeyValue}
261
- {...(tableMaxHeight ? { scroll: { y: tableMaxHeight } } : {})}
262
- />
263
- {
264
- onSelectAllButtonClick &&
265
- <Button onClick={selectAllRows} className={styles.selectAllRows}>
266
- {selectedAllRowKeys ? t('components.table.deselectAll') : t('components.table.selectAll')}
267
- </Button>
268
- }
269
- </div>
270
- );
271
- };
1
+ import { useState, useEffect } from 'react';
2
+ import { Space, TableProps, Select, Dropdown, MenuProps } from 'antd';
3
+ import { Table as AntdTable } from 'antd';
4
+ import type { ColumnsType } from 'antd/es/table/interface';
5
+ import styles from './styles.module.scss';
6
+ import { useTranslation } from 'react-i18next';
7
+ import { MoreOutlined } from '@ant-design/icons';
8
+ import classnames from 'classnames';
9
+ import { Button } from '../Button';
10
+
11
+ export interface FilterOptions {
12
+ value: string;
13
+ label: string;
14
+ direction: string;
15
+ }
16
+
17
+ export interface Actions {
18
+ key: string;
19
+ label: string;
20
+ }
21
+
22
+ export enum sortBy {
23
+ asc = 'asc',
24
+ desc = 'desc',
25
+ }
26
+
27
+ export interface TableCustomProps extends TableProps<any> {
28
+ fieldsToSort?: any[],
29
+ selectPlaceholder?: string,
30
+ onSort?: (field: any, sortBy: any) => void;
31
+ sortInfo?: any;
32
+ paginationInfo?: any;
33
+ headingTranslationsKey?: string;
34
+ actionsArray?: any;
35
+ rowSelectionInfo?: any;
36
+ rowKeyValue?: string;
37
+ hiddenColumns?: string[];
38
+ rowSelection?: any;
39
+ onSelectAllButtonClick?: () => void;
40
+ AllItemsShowing?: boolean;
41
+ selectAllStatus?: any;
42
+ isTableDataRefreshed?: any;
43
+ tableLoading?: any;
44
+ tableMaxHeight?: any;
45
+ columnsSortChange?: any;
46
+ sortByColumns?: boolean;
47
+ }
48
+
49
+ export const Table = (props: TableCustomProps) => {
50
+ const { t } = useTranslation();
51
+
52
+ const {
53
+ dataSource = undefined,
54
+ fieldsToSort,
55
+ selectPlaceholder = 'Sort By',
56
+ onSort,
57
+ headingTranslationsKey,
58
+ actionsArray: items,
59
+ rowKeyValue,
60
+ hiddenColumns,
61
+ rowSelection,
62
+ onSelectAllButtonClick,
63
+ AllItemsShowing,
64
+ selectAllStatus,
65
+ isTableDataRefreshed,
66
+ tableLoading,
67
+ tableMaxHeight,
68
+ sortByColumns,
69
+ } = props;
70
+
71
+ const [customFilters, setCustomFilters] = useState<any>([]);
72
+ const [customColumns, setCustomColumns] = useState<ColumnsType<any>>([]);
73
+ const [sortInfo, setSortInfo] = useState<any>([]);
74
+ const [selectedRowKeys, setselectedRowKeys] = useState<any>(rowSelection?.selectedRowKeys || []);
75
+ const [selectedAllRowKeys, setSelectedAllRowKeys] = useState(false);
76
+ const [deselectAll, setDeselectAll] = useState(false);
77
+
78
+
79
+ const onSelectChange = (newSelectedRowKeys: React.Key[]) => {
80
+ if (rowSelection.type === 'radio') {
81
+ setselectedRowKeys(newSelectedRowKeys);
82
+ return;
83
+ }
84
+
85
+ setselectedRowKeys((prevKeys: any) => {
86
+ const dataSourceIds = dataSource?.map((data) => data[rowKeyValue as any])
87
+
88
+ const oldKeys = prevKeys.filter((key: any) => {
89
+ return !dataSourceIds?.includes(key)
90
+ });
91
+
92
+ return [...oldKeys, ...newSelectedRowKeys];
93
+ });
94
+
95
+ setSelectedAllRowKeys(false);
96
+ setDeselectAll(false);
97
+ };
98
+
99
+ const handleChange: TableProps<any>['onChange'] = (pagination, filters, sorter: any, extra) => {
100
+ const getPagination = {
101
+ currentPage: pagination.current,
102
+ }
103
+
104
+ const getSortAndPaginationInfo = { ...sortInfo, ...getPagination }
105
+ props.paginationInfo(getSortAndPaginationInfo);
106
+
107
+ // SORT
108
+ if(sortByColumns) {
109
+ const { field, order } = sorter;
110
+ let mappedOrder = null;
111
+ if(order === "ascend") {
112
+ mappedOrder = "asc";
113
+ } else if(order === "descend") {
114
+ mappedOrder = "desc";
115
+ }
116
+
117
+ if(field && mappedOrder) {
118
+ props.columnsSortChange({ field, order: mappedOrder });
119
+ }
120
+ }
121
+ };
122
+
123
+ const setSorter = (option: any) => {
124
+ onSort?.(option.value.split('-')[0], option.direction);
125
+ const sortData = {
126
+ sortDirection: option.direction,
127
+ sortValue: option.value.split('-')[0],
128
+ }
129
+
130
+ setSortInfo(sortData)
131
+ };
132
+
133
+ const selectAllRows = () => {
134
+ if (selectedAllRowKeys) {
135
+ setDeselectAll(true);
136
+ } else {
137
+ onSelectAllButtonClick?.(); // Call the onSelectAllButtonClick callback
138
+ }
139
+ };
140
+
141
+ useEffect(() => {
142
+ if (isTableDataRefreshed && !tableLoading || AllItemsShowing) {
143
+ if (selectAllStatus && AllItemsShowing) {
144
+ const allRowKeys = dataSource?.map((record) => record[rowKeyValue as any]);
145
+ setselectedRowKeys(allRowKeys);
146
+ setSelectedAllRowKeys(true);
147
+ }
148
+ }
149
+ }, [isTableDataRefreshed, tableLoading, selectAllStatus, AllItemsShowing]);
150
+
151
+ useEffect(() => {
152
+ if (deselectAll) {
153
+ setselectedRowKeys([]);
154
+ setDeselectAll(false);
155
+ setSelectedAllRowKeys(false);
156
+ }
157
+ }, [deselectAll]);
158
+
159
+ useEffect(() => {
160
+ props.rowSelectionInfo(selectedRowKeys);
161
+ }, [selectedRowKeys]);
162
+
163
+ useEffect(() => {
164
+ if (dataSource && (dataSource as any)?.length > 0) {
165
+ // Columns
166
+ let columns = Object.keys(dataSource?.[0]).map(key => {
167
+ if (hiddenColumns?.includes(key)) {
168
+ return;
169
+ }
170
+
171
+ return ({
172
+ title: headingTranslationsKey ? t(`${headingTranslationsKey}.${key}`) : key,
173
+ dataIndex: key,
174
+ key: key,
175
+ ellipsis: false,
176
+ sorter: sortByColumns,
177
+ })
178
+ }).filter(el => el !== undefined) as any;
179
+
180
+ let columnActions = {
181
+ key: 'action',
182
+ title: headingTranslationsKey ? t(`${headingTranslationsKey}.${'action'}`) : 'action',
183
+ dataIndex: 6,
184
+ ellipsis: false,
185
+ render: () => (
186
+ <Space size="middle">
187
+ <Dropdown menu={{ items }}>
188
+ <a>
189
+ <MoreOutlined style={{ color: 'var(--color-blue)', transform: 'scale(1.6)' }} />
190
+ </a>
191
+ </Dropdown>
192
+ </Space>
193
+ ),
194
+ };
195
+
196
+ items && columns.push(columnActions as any);
197
+
198
+ setCustomColumns(columns);
199
+
200
+ // Filters
201
+ const dataKeysToFilter = Object.keys(dataSource?.[0]).filter((el) => fieldsToSort?.includes(el));
202
+
203
+ const filters = ([] as FilterOptions[]).concat(
204
+ ...dataKeysToFilter.map(key => ({
205
+ value: `${key}-${sortBy.desc}`,
206
+ label: `${headingTranslationsKey ? t(`${headingTranslationsKey}.${key}`) : key} (${sortBy.desc})`,
207
+ direction: `${sortBy.desc}`,
208
+ })),
209
+ ...dataKeysToFilter.map(key => ({
210
+ value: `${key}-${sortBy.asc}`,
211
+ label: `${headingTranslationsKey ? t(`${headingTranslationsKey}.${key}`) : key} (${sortBy.asc})`,
212
+ direction: `${sortBy.asc}`,
213
+ }))
214
+ );
215
+
216
+ setCustomFilters(filters);
217
+ }
218
+ }, [dataSource]);
219
+
220
+ const shouldRenderSortDropdown = customFilters.length > 0;
221
+
222
+ const tableWrapperClasses = classnames({
223
+ [styles.tableWrapperNoSelection]: !rowSelection
224
+ }, [styles.tableWrapper]);
225
+
226
+ return (
227
+ <div className={tableWrapperClasses}>
228
+ {shouldRenderSortDropdown &&
229
+ <Space style={{ marginBottom: 16 }}>
230
+ <Select
231
+ style={{ width: 'auto', minWidth: 200 }}
232
+ placeholder={selectPlaceholder}
233
+ onSelect={(_, option: any) => {
234
+ setSorter(option);
235
+ }}
236
+ optionFilterProp="children"
237
+ filterOption={(input, option) => (option?.label ?? '').includes(input)}
238
+ filterSort={(optionA, optionB) =>
239
+ (optionA?.label ?? '').toLowerCase().localeCompare((optionB?.label ?? '').toLowerCase())
240
+ }
241
+ options={customFilters}
242
+ />
243
+ </Space>
244
+ }
245
+
246
+ <AntdTable
247
+ dataSource={dataSource}
248
+ onChange={handleChange}
249
+ {...props}
250
+ columns={customColumns}
251
+ {...props.rowSelection ? (
252
+ {
253
+ rowSelection: {
254
+ selectedRowKeys: selectedRowKeys,
255
+ onChange: onSelectChange,
256
+ type: props.rowSelection?.type,
257
+ }
258
+ }
259
+ ) : null}
260
+ rowKey={rowKeyValue}
261
+ {...(tableMaxHeight ? { scroll: { y: tableMaxHeight } } : {})}
262
+ />
263
+ {
264
+ onSelectAllButtonClick &&
265
+ <Button onClick={selectAllRows} className={styles.selectAllRows}>
266
+ {selectedAllRowKeys ? t('components.table.deselectAll') : t('components.table.selectAll')}
267
+ </Button>
268
+ }
269
+ </div>
270
+ );
271
+ };