@inceptionbg/iui 2.0.25 → 2.0.26

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 (202) hide show
  1. package/dist/icons/index.d.ts +3 -1
  2. package/dist/icons/index.js +1 -1
  3. package/dist/index.d.ts +44 -31
  4. package/dist/index.js +1 -1
  5. package/dist/index.js.map +1 -1
  6. package/dist/iui.css +1 -1
  7. package/package.json +1 -1
  8. package/src/assets/icons/duotone/faBell.ts +17 -17
  9. package/src/assets/icons/duotone/faCircleUser.ts +17 -17
  10. package/src/assets/icons/index.ts +26 -25
  11. package/src/assets/icons/light/faArrowDownShortWide.ts +15 -15
  12. package/src/assets/icons/light/faArrowDownWideShort.ts +15 -15
  13. package/src/assets/icons/light/faArrowLeft.ts +15 -15
  14. package/src/assets/icons/light/faArrowRight.ts +15 -15
  15. package/src/assets/icons/light/faArrowUpArrowDown.ts +15 -15
  16. package/src/assets/icons/light/faArrowUpRightFromSquare.ts +15 -15
  17. package/src/assets/icons/light/faArrowsToLine.ts +15 -15
  18. package/src/assets/icons/light/faArrowsUpDown.ts +15 -15
  19. package/src/assets/icons/light/faBell.ts +15 -15
  20. package/src/assets/icons/light/faBookmark.ts +15 -15
  21. package/src/assets/icons/light/faBookmarkSlash.ts +15 -15
  22. package/src/assets/icons/light/faCalendarPlus.ts +15 -15
  23. package/src/assets/icons/light/faCheck.ts +15 -15
  24. package/src/assets/icons/light/faChevronDown.ts +15 -15
  25. package/src/assets/icons/light/faChevronRight.ts +15 -15
  26. package/src/assets/icons/light/faCircleCheck.ts +15 -0
  27. package/src/assets/icons/light/faCircleInfo.ts +15 -15
  28. package/src/assets/icons/light/faCircleXmark.ts +15 -15
  29. package/src/assets/icons/light/faClipboardCheck.ts +15 -15
  30. package/src/assets/icons/light/faClockRotateLeft.ts +15 -15
  31. package/src/assets/icons/light/faEllipsisVertical.ts +15 -15
  32. package/src/assets/icons/light/faEnvelope.ts +15 -15
  33. package/src/assets/icons/light/faEye.ts +15 -15
  34. package/src/assets/icons/light/faEyeSlash.ts +15 -15
  35. package/src/assets/icons/light/faFilter.ts +15 -15
  36. package/src/assets/icons/light/faGear.ts +15 -15
  37. package/src/assets/icons/light/faHouse.ts +15 -15
  38. package/src/assets/icons/light/faIdBadge.ts +15 -15
  39. package/src/assets/icons/light/faLineColumns.ts +15 -15
  40. package/src/assets/icons/light/faLink.ts +15 -15
  41. package/src/assets/icons/light/faMagnifyingGlass.ts +15 -15
  42. package/src/assets/icons/light/faPen.ts +15 -15
  43. package/src/assets/icons/light/faPrint.ts +15 -15
  44. package/src/assets/icons/light/faQuestion.ts +15 -15
  45. package/src/assets/icons/light/faRotateRight.ts +15 -15
  46. package/src/assets/icons/light/faTrashCan.ts +15 -15
  47. package/src/assets/icons/light/faTriangleExclamation.ts +15 -15
  48. package/src/assets/icons/light/faXmark.ts +15 -15
  49. package/src/assets/icons/regular/faArrowLeft.ts +15 -15
  50. package/src/assets/icons/regular/faArrowRightArrowLeft.ts +15 -15
  51. package/src/assets/icons/regular/faCircleCheck.ts +15 -15
  52. package/src/assets/icons/regular/faCircleExclamation.ts +15 -15
  53. package/src/assets/icons/regular/faCircleInfo.ts +15 -15
  54. package/src/assets/icons/regular/faFileArrowDown.ts +15 -15
  55. package/src/assets/icons/regular/faFilterCircleXmark.ts +15 -15
  56. package/src/assets/icons/regular/faTriangleExclamation.ts +15 -15
  57. package/src/assets/icons/solid/faAngleLeft.ts +15 -15
  58. package/src/assets/icons/solid/faAngleRight.ts +15 -15
  59. package/src/assets/icons/solid/faArrowDownWideShort.ts +15 -15
  60. package/src/assets/icons/solid/faCaretDown.ts +15 -15
  61. package/src/assets/icons/solid/faCheck.ts +15 -15
  62. package/src/assets/icons/solid/faEllipsisVertical.ts +15 -15
  63. package/src/assets/icons/solid/faEnvelopeDot.ts +15 -15
  64. package/src/assets/icons/solid/faFilter.ts +15 -15
  65. package/src/assets/icons/solid/faFloppyDisk.ts +15 -15
  66. package/src/assets/icons/solid/faGripDotsVertical.ts +15 -15
  67. package/src/assets/icons/solid/faListUl.ts +15 -15
  68. package/src/assets/icons/solid/faMinus.ts +15 -15
  69. package/src/assets/icons/solid/faPlus.ts +15 -15
  70. package/src/assets/icons/solid/faPrint.ts +15 -15
  71. package/src/assets/icons/solid/faRotateRight.ts +15 -15
  72. package/src/assets/icons/solid/faXmark.ts +15 -15
  73. package/src/components/Accordions/Accordions.tsx +75 -75
  74. package/src/components/Alert/Alert.tsx +31 -31
  75. package/src/components/Badge/DotBadge.tsx +16 -16
  76. package/src/components/Badge/NotificationBadge.tsx +29 -29
  77. package/src/components/Badge/PillBadge.tsx +13 -13
  78. package/src/components/Button/Button.tsx +56 -56
  79. package/src/components/Button/IconButton.tsx +51 -51
  80. package/src/components/Button/SplitButton.tsx +91 -91
  81. package/src/components/Dashboard/Dashboard.tsx +9 -9
  82. package/src/components/Dashboard/DashboardWidget.tsx +44 -44
  83. package/src/components/Dashboard/FastLinksWidget/FastLinksWidget.tsx +37 -37
  84. package/src/components/Dialog/Dialog.tsx +166 -166
  85. package/src/components/Dialog/components/DialogFooter.tsx +100 -100
  86. package/src/components/Header/Components/EnvBadge.tsx +17 -17
  87. package/src/components/Header/Components/ModuleSelect.tsx +68 -68
  88. package/src/components/Header/Components/Notifications.tsx +202 -202
  89. package/src/components/Header/Components/UserMenu.tsx +52 -52
  90. package/src/components/Header/Header.tsx +45 -37
  91. package/src/components/Helper/Collapse.tsx +53 -53
  92. package/src/components/Inputs/Checkbox.tsx +53 -53
  93. package/src/components/Inputs/CurrencyInput.tsx +124 -124
  94. package/src/components/Inputs/DateInput/DateInput.tsx +184 -184
  95. package/src/components/Inputs/DateInput/components/DatePartInput.tsx +159 -159
  96. package/src/components/Inputs/InputWrapper.tsx +95 -95
  97. package/src/components/Inputs/NumberInput.tsx +86 -86
  98. package/src/components/Inputs/PasswordInput.tsx +40 -40
  99. package/src/components/Inputs/PhoneInput/PhoneInput.tsx +108 -108
  100. package/src/components/Inputs/PhoneInput/utils/countryCode.ts +20 -20
  101. package/src/components/Inputs/Radio.tsx +59 -59
  102. package/src/components/Inputs/RadioGroup.tsx +48 -48
  103. package/src/components/Inputs/RadioLarge.tsx +39 -39
  104. package/src/components/Inputs/SearchInput.tsx +46 -46
  105. package/src/components/Inputs/Selects/Select.tsx +17 -17
  106. package/src/components/Inputs/Selects/components/CustomSelectComponents.tsx +19 -19
  107. package/src/components/Inputs/Selects/components/SelectWrapper.tsx +118 -118
  108. package/src/components/Inputs/Selects/utils/selectStyles.ts +101 -101
  109. package/src/components/Inputs/TextAreaInput.tsx +68 -68
  110. package/src/components/Inputs/TextInput.tsx +100 -100
  111. package/src/components/Inputs/TimeInput/TimeInput.tsx +81 -81
  112. package/src/components/List/List.tsx +21 -21
  113. package/src/components/List/ListItem.tsx +70 -70
  114. package/src/components/Loader/Loader.tsx +59 -59
  115. package/src/components/Loader/ProgressBar.tsx +41 -41
  116. package/src/components/Menu/Menu.tsx +81 -81
  117. package/src/components/Menu/MenuItem.tsx +46 -46
  118. package/src/components/Menu/NewMenu.tsx +63 -63
  119. package/src/components/Menu/hooks/useMenuPosition.tsx +116 -116
  120. package/src/components/PageComponents/ScrollableContent.tsx +11 -0
  121. package/src/components/Pullover/Pullover.tsx +197 -197
  122. package/src/components/Router/Router.tsx +52 -52
  123. package/src/components/Sidebar/AddButton.tsx +22 -22
  124. package/src/components/Sidebar/Sidebar.tsx +85 -85
  125. package/src/components/Sidebar/SidebarItem.tsx +84 -84
  126. package/src/components/Sidebar/types/ISidebar.ts +28 -28
  127. package/src/components/Table/Table.tsx +259 -259
  128. package/src/components/Table/components/columns/ColumnsList.tsx +60 -60
  129. package/src/components/Table/components/columns/TableColumnsEdit.tsx +114 -114
  130. package/src/components/Table/components/edit/TableEditRow.tsx +78 -78
  131. package/src/components/Table/components/filters/FilterItem.tsx +15 -15
  132. package/src/components/Table/components/filters/TableFilters.tsx +126 -126
  133. package/src/components/Table/components/footer/TableFooter.tsx +126 -126
  134. package/src/components/Table/components/header/TableHeader.tsx +40 -40
  135. package/src/components/Table/components/header/TableHeaderRow.tsx +57 -57
  136. package/src/components/Table/components/items/TableItemActions.tsx +78 -78
  137. package/src/components/Table/components/print/TablePrint.tsx +200 -200
  138. package/src/components/Table/components/select/TableSelect.tsx +50 -50
  139. package/src/components/Table/components/sort/TableSort.tsx +73 -73
  140. package/src/components/Table/components/templates/CreateTemplateDialog.tsx +58 -58
  141. package/src/components/Table/components/templates/TableTemplates.tsx +65 -65
  142. package/src/components/Table/components/templates/TemplatesPullover.tsx +88 -88
  143. package/src/components/Table/contexts/TableContext.tsx +116 -116
  144. package/src/components/Table/hooks/localHooks/useLocalTableColumns.tsx +70 -70
  145. package/src/components/Table/hooks/localHooks/useLocalTableData.tsx +84 -84
  146. package/src/components/Table/hooks/localHooks/useLocalTableKeyboard.ts +176 -176
  147. package/src/components/Table/hooks/localHooks/useLocalTablePagination.ts +12 -12
  148. package/src/components/Table/hooks/useTableColumns.ts +34 -34
  149. package/src/components/Table/hooks/useTableEdit.tsx +140 -140
  150. package/src/components/Table/hooks/useTableFilterFields.tsx +150 -150
  151. package/src/components/Table/hooks/useTablePagination.ts +19 -19
  152. package/src/components/Table/hooks/useTablePrint.ts +83 -83
  153. package/src/components/Table/hooks/useTableSearch.ts +31 -31
  154. package/src/components/Table/hooks/useTableSelect.ts +19 -19
  155. package/src/components/Table/hooks/useTableSort.ts +8 -8
  156. package/src/components/Tabs/Tabs.tsx +68 -68
  157. package/src/components/Tooltip/Tooltip.tsx +191 -191
  158. package/src/components/Tree/Tree.tsx +22 -22
  159. package/src/components/Tree/TreeItem.tsx +57 -57
  160. package/src/components/Wrappers/AppLayout.tsx +17 -17
  161. package/src/components/Wrappers/ConditionalWrapper.tsx +10 -10
  162. package/src/components/Wrappers/FormWrapper.tsx +84 -84
  163. package/src/components/Wrappers/PageLayout.tsx +164 -156
  164. package/src/hooks/useBackgroundClose.ts +19 -19
  165. package/src/hooks/useGetFocusableElements.ts +43 -43
  166. package/src/hooks/useIsMenuOpen.ts +11 -11
  167. package/src/hooks/useLocalPopoverControl.ts +32 -32
  168. package/src/hooks/usePopupControl.ts +22 -22
  169. package/src/hooks/useZendesk.ts +21 -21
  170. package/src/index.ts +381 -379
  171. package/src/pages/NoAccessPage.tsx +27 -27
  172. package/src/pages/NotFoundPage.tsx +26 -26
  173. package/src/styles/common/helpers/_color.scss +3 -0
  174. package/src/styles/components/_page.scss +0 -13
  175. package/src/types/IBasic.ts +32 -32
  176. package/src/types/IHeader.ts +40 -40
  177. package/src/types/IInfo.ts +1 -1
  178. package/src/types/IKeyboard.ts +33 -33
  179. package/src/types/IMenu.ts +19 -19
  180. package/src/types/INotifications.ts +15 -15
  181. package/src/types/IPopup.ts +17 -17
  182. package/src/types/IRouter.ts +6 -6
  183. package/src/types/ISelect.ts +54 -54
  184. package/src/types/ITab.ts +10 -10
  185. package/src/types/ITable.ts +290 -290
  186. package/src/utils/InputPatternValidation.ts +12 -12
  187. package/src/utils/dateUtils.ts +32 -32
  188. package/src/utils/fileUtils.ts +177 -177
  189. package/src/utils/i18n/i18nIUICyrilic.ts +119 -119
  190. package/src/utils/i18n/i18nIUILatin.ts +120 -120
  191. package/src/utils/i18n/i18nIUIMe.ts +118 -118
  192. package/src/utils/icons.ts +13 -13
  193. package/src/utils/localStorageHelper.ts +24 -24
  194. package/src/utils/logoUtils.ts +7 -7
  195. package/src/utils/numberUtils.ts +21 -21
  196. package/src/utils/objectUtils.ts +114 -114
  197. package/src/utils/popupUtils.ts +82 -82
  198. package/src/utils/rootDir.ts +1 -1
  199. package/src/utils/stringUtils.ts +18 -18
  200. package/src/utils/tableUtils.ts +130 -130
  201. package/src/utils/toasts.ts +6 -6
  202. package/src/utils/urlUtils.ts +4 -4
@@ -1,12 +1,12 @@
1
- import { useState } from 'react';
2
-
3
- interface Props {
4
- defaultLimit?: number;
5
- }
6
-
7
- export const useLocalTablePagination = ({ defaultLimit }: Props) => {
8
- const [limit, setLimit] = useState(defaultLimit ?? 5);
9
- const [offset, setOffset] = useState(0);
10
-
11
- return { limit, offset, setLimit, setOffset };
12
- };
1
+ import { useState } from 'react';
2
+
3
+ interface Props {
4
+ defaultLimit?: number;
5
+ }
6
+
7
+ export const useLocalTablePagination = ({ defaultLimit }: Props) => {
8
+ const [limit, setLimit] = useState(defaultLimit ?? 5);
9
+ const [offset, setOffset] = useState(0);
10
+
11
+ return { limit, offset, setLimit, setOffset };
12
+ };
@@ -1,34 +1,34 @@
1
- import type { ITableColumn, ITableColumnsData } from '../../../types/ITable';
2
- import { useLayoutEffect, useMemo, useState } from 'react';
3
-
4
- export interface ITableColumnsProps {
5
- defaultColumns: ITableColumn[];
6
- enableEdit?: boolean;
7
- }
8
-
9
- export const useTableColumns = ({
10
- defaultColumns,
11
- enableEdit,
12
- }: ITableColumnsProps): ITableColumnsData => {
13
- const [columns, setColumns] = useState<ITableColumn[]>([]);
14
-
15
- const availableColumns = useMemo(
16
- () => defaultColumns.filter(e => !e.unavailable),
17
- [defaultColumns]
18
- );
19
-
20
- useLayoutEffect(() => {
21
- setColumns(availableColumns);
22
- }, [availableColumns]);
23
-
24
- const columnData = useMemo(
25
- () => ({
26
- defaultColumns: availableColumns,
27
- columns,
28
- setColumns: enableEdit ? setColumns : undefined,
29
- }),
30
- [availableColumns, columns, enableEdit]
31
- );
32
-
33
- return columnData;
34
- };
1
+ import type { ITableColumn, ITableColumnsData } from '../../../types/ITable';
2
+ import { useLayoutEffect, useMemo, useState } from 'react';
3
+
4
+ export interface ITableColumnsProps {
5
+ defaultColumns: ITableColumn[];
6
+ enableEdit?: boolean;
7
+ }
8
+
9
+ export const useTableColumns = ({
10
+ defaultColumns,
11
+ enableEdit,
12
+ }: ITableColumnsProps): ITableColumnsData => {
13
+ const [columns, setColumns] = useState<ITableColumn[]>([]);
14
+
15
+ const availableColumns = useMemo(
16
+ () => defaultColumns.filter(e => !e.unavailable),
17
+ [defaultColumns]
18
+ );
19
+
20
+ useLayoutEffect(() => {
21
+ setColumns(availableColumns);
22
+ }, [availableColumns]);
23
+
24
+ const columnData = useMemo(
25
+ () => ({
26
+ defaultColumns: availableColumns,
27
+ columns,
28
+ setColumns: enableEdit ? setColumns : undefined,
29
+ }),
30
+ [availableColumns, columns, enableEdit]
31
+ );
32
+
33
+ return columnData;
34
+ };
@@ -1,140 +1,140 @@
1
- import type { ITableDataItem, ITableEdit } from '../../../types/ITable';
2
- import { useState } from 'react';
3
- import { deleteProps, hasValue } from '../../../utils/objectUtils';
4
- import { DateInput } from '../../Inputs/DateInput/DateInput';
5
- import { NumberInput } from '../../Inputs/NumberInput';
6
- import { Select } from '../../Inputs/Selects/Select';
7
- import { TextInput } from '../../Inputs/TextInput';
8
-
9
- interface BaseItemProps<T> {
10
- id: keyof T;
11
- placeholder?: string;
12
- required?: boolean;
13
- additionalClearIds?: (keyof T)[];
14
- inputProps?: React.InputHTMLAttributes<HTMLInputElement>;
15
- }
16
- interface SelectProps<T> extends BaseItemProps<T> {
17
- options: readonly (string | boolean)[] | (string | boolean)[];
18
- minWidth?: number;
19
- formatOption: (value: string | boolean) => {
20
- value: string | boolean;
21
- label: string;
22
- };
23
- }
24
-
25
- export const useTableEdit = <T extends Record<string, any>>() => {
26
- const [selectedItem, setSelectedItem] = useState<ITableDataItem<T> | null>(null);
27
- const [editData, setEditData] = useState<Partial<T>>({});
28
-
29
- // Text
30
- const textEditCell = ({
31
- placeholder,
32
- required,
33
- id,
34
- additionalClearIds = [],
35
- inputProps,
36
- }: BaseItemProps<T>) => ({
37
- value: (
38
- <TextInput
39
- placeholder={placeholder}
40
- required={required}
41
- value={editData[id]}
42
- setValue={e =>
43
- setEditData(e ? { ...editData, [id]: e } : deleteProps(editData as T, [id]))
44
- }
45
- inputProps={inputProps}
46
- onClear={() => deleteProps(editData as T, [id, ...additionalClearIds])}
47
- />
48
- ),
49
- });
50
-
51
- // Number
52
- const numberEditCell = ({
53
- placeholder,
54
- required,
55
- id,
56
- additionalClearIds = [],
57
- inputProps,
58
- }: BaseItemProps<T>) => ({
59
- value: (
60
- <NumberInput
61
- placeholder={placeholder}
62
- required={required}
63
- value={editData[id]}
64
- setValue={e =>
65
- setEditData(e ? { ...editData, [id]: e } : deleteProps(editData as T, [id]))
66
- }
67
- inputProps={inputProps}
68
- onClear={() => deleteProps(editData as T, [id, ...additionalClearIds])}
69
- />
70
- ),
71
- });
72
-
73
- // Date
74
- const dateEditCell = ({
75
- id,
76
- required,
77
- additionalClearIds,
78
- }: Omit<BaseItemProps<T>, 'placeholder' | 'inputProps'>) => ({
79
- value: (
80
- <DateInput
81
- required={required}
82
- date={editData[id]}
83
- setDate={e => setEditData({ ...editData, [id]: e })}
84
- onClear={
85
- additionalClearIds
86
- ? () => setEditData(deleteProps(editData as T, additionalClearIds))
87
- : undefined
88
- }
89
- />
90
- ),
91
- });
92
-
93
- // Select
94
- const selectEditCell = ({
95
- id,
96
- placeholder,
97
- required,
98
- options,
99
- formatOption,
100
- additionalClearIds = [],
101
- minWidth = 110,
102
- }: SelectProps<T>) => ({
103
- value: (
104
- <Select
105
- required={required}
106
- placeholder={placeholder}
107
- value={hasValue(editData[id]) ? formatOption(editData[id]!) : null}
108
- options={options.map(formatOption)}
109
- minWidth={minWidth}
110
- onChange={e => {
111
- e
112
- ? setEditData({
113
- ...editData,
114
- [id]: e.value,
115
- })
116
- : setEditData(deleteProps(editData as T, [id, ...additionalClearIds]));
117
- }}
118
- isClearable
119
- />
120
- ),
121
- });
122
-
123
- const returnEditable: Pick<
124
- ITableEdit<T>,
125
- 'selectedItem' | 'setSelectedItem' | 'editData' | 'setEditData'
126
- > = {
127
- selectedItem,
128
- setSelectedItem,
129
- editData,
130
- setEditData,
131
- };
132
-
133
- return {
134
- editable: returnEditable,
135
- textEditCell,
136
- numberEditCell,
137
- dateEditCell,
138
- selectEditCell,
139
- };
140
- };
1
+ import type { ITableDataItem, ITableEdit } from '../../../types/ITable';
2
+ import { useState } from 'react';
3
+ import { deleteProps, hasValue } from '../../../utils/objectUtils';
4
+ import { DateInput } from '../../Inputs/DateInput/DateInput';
5
+ import { NumberInput } from '../../Inputs/NumberInput';
6
+ import { Select } from '../../Inputs/Selects/Select';
7
+ import { TextInput } from '../../Inputs/TextInput';
8
+
9
+ interface BaseItemProps<T> {
10
+ id: keyof T;
11
+ placeholder?: string;
12
+ required?: boolean;
13
+ additionalClearIds?: (keyof T)[];
14
+ inputProps?: React.InputHTMLAttributes<HTMLInputElement>;
15
+ }
16
+ interface SelectProps<T> extends BaseItemProps<T> {
17
+ options: readonly (string | boolean)[] | (string | boolean)[];
18
+ minWidth?: number;
19
+ formatOption: (value: string | boolean) => {
20
+ value: string | boolean;
21
+ label: string;
22
+ };
23
+ }
24
+
25
+ export const useTableEdit = <T extends Record<string, any>>() => {
26
+ const [selectedItem, setSelectedItem] = useState<ITableDataItem<T> | null>(null);
27
+ const [editData, setEditData] = useState<Partial<T>>({});
28
+
29
+ // Text
30
+ const textEditCell = ({
31
+ placeholder,
32
+ required,
33
+ id,
34
+ additionalClearIds = [],
35
+ inputProps,
36
+ }: BaseItemProps<T>) => ({
37
+ value: (
38
+ <TextInput
39
+ placeholder={placeholder}
40
+ required={required}
41
+ value={editData[id]}
42
+ setValue={e =>
43
+ setEditData(e ? { ...editData, [id]: e } : deleteProps(editData as T, [id]))
44
+ }
45
+ inputProps={inputProps}
46
+ onClear={() => deleteProps(editData as T, [id, ...additionalClearIds])}
47
+ />
48
+ ),
49
+ });
50
+
51
+ // Number
52
+ const numberEditCell = ({
53
+ placeholder,
54
+ required,
55
+ id,
56
+ additionalClearIds = [],
57
+ inputProps,
58
+ }: BaseItemProps<T>) => ({
59
+ value: (
60
+ <NumberInput
61
+ placeholder={placeholder}
62
+ required={required}
63
+ value={editData[id]}
64
+ setValue={e =>
65
+ setEditData(e ? { ...editData, [id]: e } : deleteProps(editData as T, [id]))
66
+ }
67
+ inputProps={inputProps}
68
+ onClear={() => deleteProps(editData as T, [id, ...additionalClearIds])}
69
+ />
70
+ ),
71
+ });
72
+
73
+ // Date
74
+ const dateEditCell = ({
75
+ id,
76
+ required,
77
+ additionalClearIds,
78
+ }: Omit<BaseItemProps<T>, 'placeholder' | 'inputProps'>) => ({
79
+ value: (
80
+ <DateInput
81
+ required={required}
82
+ date={editData[id]}
83
+ setDate={e => setEditData({ ...editData, [id]: e })}
84
+ onClear={
85
+ additionalClearIds
86
+ ? () => setEditData(deleteProps(editData as T, additionalClearIds))
87
+ : undefined
88
+ }
89
+ />
90
+ ),
91
+ });
92
+
93
+ // Select
94
+ const selectEditCell = ({
95
+ id,
96
+ placeholder,
97
+ required,
98
+ options,
99
+ formatOption,
100
+ additionalClearIds = [],
101
+ minWidth = 110,
102
+ }: SelectProps<T>) => ({
103
+ value: (
104
+ <Select
105
+ required={required}
106
+ placeholder={placeholder}
107
+ value={hasValue(editData[id]) ? formatOption(editData[id]!) : null}
108
+ options={options.map(formatOption)}
109
+ minWidth={minWidth}
110
+ onChange={e => {
111
+ e
112
+ ? setEditData({
113
+ ...editData,
114
+ [id]: e.value,
115
+ })
116
+ : setEditData(deleteProps(editData as T, [id, ...additionalClearIds]));
117
+ }}
118
+ isClearable
119
+ />
120
+ ),
121
+ });
122
+
123
+ const returnEditable: Pick<
124
+ ITableEdit<T>,
125
+ 'selectedItem' | 'setSelectedItem' | 'editData' | 'setEditData'
126
+ > = {
127
+ selectedItem,
128
+ setSelectedItem,
129
+ editData,
130
+ setEditData,
131
+ };
132
+
133
+ return {
134
+ editable: returnEditable,
135
+ textEditCell,
136
+ numberEditCell,
137
+ dateEditCell,
138
+ selectEditCell,
139
+ };
140
+ };
@@ -1,150 +1,150 @@
1
- import type { Dispatch, SetStateAction } from 'react';
2
- import { useTranslation } from 'react-i18next';
3
- import { deleteProps } from '../../../utils/objectUtils';
4
- import { DateInput } from '../../Inputs/DateInput/DateInput';
5
- import { Select } from '../../Inputs/Selects/Select';
6
- import { TextInput } from '../../Inputs/TextInput';
7
-
8
- interface Props<T> {
9
- searchData: T;
10
- setSearchData: Dispatch<SetStateAction<Partial<T>>>;
11
- }
12
-
13
- interface BaseItemField<T> {
14
- id: keyof T;
15
- additionalClearIds?: (keyof T)[];
16
- }
17
- interface BaseItemProps<T> extends BaseItemField<T> {
18
- label: string;
19
- }
20
- interface DateFilterProps<T> {
21
- label: string;
22
- from: BaseItemField<T>;
23
- to: BaseItemField<T>;
24
- }
25
- interface SelectProps<T> extends BaseItemProps<T> {
26
- options: readonly string[] | string[];
27
- formatOption: (value: string) => {
28
- value: string;
29
- label: string;
30
- };
31
- }
32
- interface BooleanSelectProps<T> extends BaseItemProps<T> {
33
- labelTrue?: string;
34
- labelFalse?: string;
35
- }
36
-
37
- export const useTableFilterFields = <T extends Record<string, any>>({
38
- searchData,
39
- setSearchData,
40
- }: Props<T>) => {
41
- const { t } = useTranslation();
42
-
43
- // Text
44
- const textFilter = ({ label, id, additionalClearIds = [] }: BaseItemProps<T>) => ({
45
- label,
46
- field: (
47
- <TextInput
48
- placeholder={t('AddInput') + '...'}
49
- value={searchData[id]}
50
- setValue={e => setSearchData({ ...searchData, [id]: e })}
51
- onClear={() =>
52
- setSearchData(deleteProps(searchData, [id, ...additionalClearIds]))
53
- }
54
- />
55
- ),
56
- });
57
-
58
- // Date From - To
59
- const dateFilter = ({ label, from, to }: DateFilterProps<T>) => ({
60
- label,
61
- field: (
62
- <div className="flex center full-width gap-2">
63
- <DateInput
64
- date={searchData[from.id]}
65
- setDate={e => setSearchData({ ...searchData, [from.id]: e })}
66
- onClear={() =>
67
- setSearchData(
68
- deleteProps(searchData, [from.id, ...(from.additionalClearIds ?? [])])
69
- )
70
- }
71
- />
72
- <p>{t('to')}</p>
73
- <DateInput
74
- date={searchData[to.id]}
75
- setDate={e => setSearchData({ ...searchData, [to.id]: e })}
76
- onClear={() =>
77
- setSearchData(
78
- deleteProps(searchData, [to.id, ...(to.additionalClearIds ?? [])])
79
- )
80
- }
81
- calendarPlacement="bottom-right"
82
- />
83
- </div>
84
- ),
85
- });
86
-
87
- // Select
88
- const selectFilter = ({ label, id, options, formatOption }: SelectProps<T>) => ({
89
- label,
90
- field: (
91
- <Select
92
- placeholder={t('Choose')}
93
- isClearable
94
- value={searchData[id] ? formatOption(searchData[id]) : null}
95
- options={options.map(formatOption)}
96
- onChange={data => {
97
- data
98
- ? setSearchData({
99
- ...searchData,
100
- [id]: data.value,
101
- })
102
- : setSearchData(deleteProps(searchData, [id]));
103
- }}
104
- />
105
- ),
106
- });
107
-
108
- // Select Boolean
109
- const booleanSelectFilter = ({
110
- label,
111
- id,
112
- labelFalse,
113
- labelTrue,
114
- }: BooleanSelectProps<T>) => ({
115
- label,
116
- field: (
117
- <Select
118
- placeholder={t('Choose')}
119
- isClearable
120
- value={
121
- searchData[id] !== undefined
122
- ? {
123
- value: searchData[id],
124
- label: searchData[id] ? (labelTrue ?? t('Yes')) : (labelFalse ?? t('No')),
125
- }
126
- : null
127
- }
128
- options={[true, false].map(e => ({
129
- value: e,
130
- label: e ? (labelTrue ?? t('Yes')) : (labelFalse ?? t('No')),
131
- }))}
132
- onChange={data => {
133
- data
134
- ? setSearchData({
135
- ...searchData,
136
- [id]: data.value,
137
- })
138
- : setSearchData(deleteProps(searchData, [id]));
139
- }}
140
- />
141
- ),
142
- });
143
-
144
- return {
145
- textFilter,
146
- dateFilter,
147
- selectFilter,
148
- booleanSelectFilter,
149
- };
150
- };
1
+ import type { Dispatch, SetStateAction } from 'react';
2
+ import { useTranslation } from 'react-i18next';
3
+ import { deleteProps } from '../../../utils/objectUtils';
4
+ import { DateInput } from '../../Inputs/DateInput/DateInput';
5
+ import { Select } from '../../Inputs/Selects/Select';
6
+ import { TextInput } from '../../Inputs/TextInput';
7
+
8
+ interface Props<T> {
9
+ searchData: T;
10
+ setSearchData: Dispatch<SetStateAction<Partial<T>>>;
11
+ }
12
+
13
+ interface BaseItemField<T> {
14
+ id: keyof T;
15
+ additionalClearIds?: (keyof T)[];
16
+ }
17
+ interface BaseItemProps<T> extends BaseItemField<T> {
18
+ label: string;
19
+ }
20
+ interface DateFilterProps<T> {
21
+ label: string;
22
+ from: BaseItemField<T>;
23
+ to: BaseItemField<T>;
24
+ }
25
+ interface SelectProps<T> extends BaseItemProps<T> {
26
+ options: readonly string[] | string[];
27
+ formatOption: (value: string) => {
28
+ value: string;
29
+ label: string;
30
+ };
31
+ }
32
+ interface BooleanSelectProps<T> extends BaseItemProps<T> {
33
+ labelTrue?: string;
34
+ labelFalse?: string;
35
+ }
36
+
37
+ export const useTableFilterFields = <T extends Record<string, any>>({
38
+ searchData,
39
+ setSearchData,
40
+ }: Props<T>) => {
41
+ const { t } = useTranslation();
42
+
43
+ // Text
44
+ const textFilter = ({ label, id, additionalClearIds = [] }: BaseItemProps<T>) => ({
45
+ label,
46
+ field: (
47
+ <TextInput
48
+ placeholder={t('AddInput') + '...'}
49
+ value={searchData[id]}
50
+ setValue={e => setSearchData({ ...searchData, [id]: e })}
51
+ onClear={() =>
52
+ setSearchData(deleteProps(searchData, [id, ...additionalClearIds]))
53
+ }
54
+ />
55
+ ),
56
+ });
57
+
58
+ // Date From - To
59
+ const dateFilter = ({ label, from, to }: DateFilterProps<T>) => ({
60
+ label,
61
+ field: (
62
+ <div className="flex center full-width gap-2">
63
+ <DateInput
64
+ date={searchData[from.id]}
65
+ setDate={e => setSearchData({ ...searchData, [from.id]: e })}
66
+ onClear={() =>
67
+ setSearchData(
68
+ deleteProps(searchData, [from.id, ...(from.additionalClearIds ?? [])])
69
+ )
70
+ }
71
+ />
72
+ <p>{t('to')}</p>
73
+ <DateInput
74
+ date={searchData[to.id]}
75
+ setDate={e => setSearchData({ ...searchData, [to.id]: e })}
76
+ onClear={() =>
77
+ setSearchData(
78
+ deleteProps(searchData, [to.id, ...(to.additionalClearIds ?? [])])
79
+ )
80
+ }
81
+ calendarPlacement="bottom-right"
82
+ />
83
+ </div>
84
+ ),
85
+ });
86
+
87
+ // Select
88
+ const selectFilter = ({ label, id, options, formatOption }: SelectProps<T>) => ({
89
+ label,
90
+ field: (
91
+ <Select
92
+ placeholder={t('Choose')}
93
+ isClearable
94
+ value={searchData[id] ? formatOption(searchData[id]) : null}
95
+ options={options.map(formatOption)}
96
+ onChange={data => {
97
+ data
98
+ ? setSearchData({
99
+ ...searchData,
100
+ [id]: data.value,
101
+ })
102
+ : setSearchData(deleteProps(searchData, [id]));
103
+ }}
104
+ />
105
+ ),
106
+ });
107
+
108
+ // Select Boolean
109
+ const booleanSelectFilter = ({
110
+ label,
111
+ id,
112
+ labelFalse,
113
+ labelTrue,
114
+ }: BooleanSelectProps<T>) => ({
115
+ label,
116
+ field: (
117
+ <Select
118
+ placeholder={t('Choose')}
119
+ isClearable
120
+ value={
121
+ searchData[id] !== undefined
122
+ ? {
123
+ value: searchData[id],
124
+ label: searchData[id] ? (labelTrue ?? t('Yes')) : (labelFalse ?? t('No')),
125
+ }
126
+ : null
127
+ }
128
+ options={[true, false].map(e => ({
129
+ value: e,
130
+ label: e ? (labelTrue ?? t('Yes')) : (labelFalse ?? t('No')),
131
+ }))}
132
+ onChange={data => {
133
+ data
134
+ ? setSearchData({
135
+ ...searchData,
136
+ [id]: data.value,
137
+ })
138
+ : setSearchData(deleteProps(searchData, [id]));
139
+ }}
140
+ />
141
+ ),
142
+ });
143
+
144
+ return {
145
+ textFilter,
146
+ dateFilter,
147
+ selectFilter,
148
+ booleanSelectFilter,
149
+ };
150
+ };