@inceptionbg/iui 2.0.24 → 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 (208) hide show
  1. package/dist/NoAccessPage-DTPU8bP2.js +2 -0
  2. package/dist/{NoAccessPage-CJisyKrk.js.map → NoAccessPage-DTPU8bP2.js.map} +1 -1
  3. package/dist/NotFoundPage-PZunMooy.js +2 -0
  4. package/dist/{NotFoundPage-BeRit0kr.js.map → NotFoundPage-PZunMooy.js.map} +1 -1
  5. package/dist/icons/index.d.ts +3 -1
  6. package/dist/icons/index.js +1 -1
  7. package/dist/index.d.ts +44 -31
  8. package/dist/index.js +1 -1
  9. package/dist/index.js.map +1 -1
  10. package/dist/iui.css +1 -1
  11. package/package.json +1 -1
  12. package/src/assets/icons/duotone/faBell.ts +17 -17
  13. package/src/assets/icons/duotone/faCircleUser.ts +17 -17
  14. package/src/assets/icons/index.ts +26 -25
  15. package/src/assets/icons/light/faArrowDownShortWide.ts +15 -15
  16. package/src/assets/icons/light/faArrowDownWideShort.ts +15 -15
  17. package/src/assets/icons/light/faArrowLeft.ts +15 -15
  18. package/src/assets/icons/light/faArrowRight.ts +15 -15
  19. package/src/assets/icons/light/faArrowUpArrowDown.ts +15 -15
  20. package/src/assets/icons/light/faArrowUpRightFromSquare.ts +15 -15
  21. package/src/assets/icons/light/faArrowsToLine.ts +15 -15
  22. package/src/assets/icons/light/faArrowsUpDown.ts +15 -15
  23. package/src/assets/icons/light/faBell.ts +15 -15
  24. package/src/assets/icons/light/faBookmark.ts +15 -15
  25. package/src/assets/icons/light/faBookmarkSlash.ts +15 -15
  26. package/src/assets/icons/light/faCalendarPlus.ts +15 -15
  27. package/src/assets/icons/light/faCheck.ts +15 -15
  28. package/src/assets/icons/light/faChevronDown.ts +15 -15
  29. package/src/assets/icons/light/faChevronRight.ts +15 -15
  30. package/src/assets/icons/light/faCircleCheck.ts +15 -0
  31. package/src/assets/icons/light/faCircleInfo.ts +15 -15
  32. package/src/assets/icons/light/faCircleXmark.ts +15 -15
  33. package/src/assets/icons/light/faClipboardCheck.ts +15 -15
  34. package/src/assets/icons/light/faClockRotateLeft.ts +15 -15
  35. package/src/assets/icons/light/faEllipsisVertical.ts +15 -15
  36. package/src/assets/icons/light/faEnvelope.ts +15 -15
  37. package/src/assets/icons/light/faEye.ts +15 -15
  38. package/src/assets/icons/light/faEyeSlash.ts +15 -15
  39. package/src/assets/icons/light/faFilter.ts +15 -15
  40. package/src/assets/icons/light/faGear.ts +15 -15
  41. package/src/assets/icons/light/faHouse.ts +15 -15
  42. package/src/assets/icons/light/faIdBadge.ts +15 -15
  43. package/src/assets/icons/light/faLineColumns.ts +15 -15
  44. package/src/assets/icons/light/faLink.ts +15 -15
  45. package/src/assets/icons/light/faMagnifyingGlass.ts +15 -15
  46. package/src/assets/icons/light/faPen.ts +15 -15
  47. package/src/assets/icons/light/faPrint.ts +15 -15
  48. package/src/assets/icons/light/faQuestion.ts +15 -15
  49. package/src/assets/icons/light/faRotateRight.ts +15 -15
  50. package/src/assets/icons/light/faTrashCan.ts +15 -15
  51. package/src/assets/icons/light/faTriangleExclamation.ts +15 -15
  52. package/src/assets/icons/light/faXmark.ts +15 -15
  53. package/src/assets/icons/regular/faArrowLeft.ts +15 -15
  54. package/src/assets/icons/regular/faArrowRightArrowLeft.ts +15 -15
  55. package/src/assets/icons/regular/faCircleCheck.ts +15 -15
  56. package/src/assets/icons/regular/faCircleExclamation.ts +15 -15
  57. package/src/assets/icons/regular/faCircleInfo.ts +15 -15
  58. package/src/assets/icons/regular/faFileArrowDown.ts +15 -15
  59. package/src/assets/icons/regular/faFilterCircleXmark.ts +15 -15
  60. package/src/assets/icons/regular/faTriangleExclamation.ts +15 -15
  61. package/src/assets/icons/solid/faAngleLeft.ts +15 -15
  62. package/src/assets/icons/solid/faAngleRight.ts +15 -15
  63. package/src/assets/icons/solid/faArrowDownWideShort.ts +15 -15
  64. package/src/assets/icons/solid/faCaretDown.ts +15 -15
  65. package/src/assets/icons/solid/faCheck.ts +15 -15
  66. package/src/assets/icons/solid/faEllipsisVertical.ts +15 -15
  67. package/src/assets/icons/solid/faEnvelopeDot.ts +15 -15
  68. package/src/assets/icons/solid/faFilter.ts +15 -15
  69. package/src/assets/icons/solid/faFloppyDisk.ts +15 -15
  70. package/src/assets/icons/solid/faGripDotsVertical.ts +15 -15
  71. package/src/assets/icons/solid/faListUl.ts +15 -15
  72. package/src/assets/icons/solid/faMinus.ts +15 -15
  73. package/src/assets/icons/solid/faPlus.ts +15 -15
  74. package/src/assets/icons/solid/faPrint.ts +15 -15
  75. package/src/assets/icons/solid/faRotateRight.ts +15 -15
  76. package/src/assets/icons/solid/faXmark.ts +15 -15
  77. package/src/components/Accordions/Accordions.tsx +75 -75
  78. package/src/components/Alert/Alert.tsx +31 -31
  79. package/src/components/Badge/DotBadge.tsx +16 -16
  80. package/src/components/Badge/NotificationBadge.tsx +29 -29
  81. package/src/components/Badge/PillBadge.tsx +13 -13
  82. package/src/components/Button/Button.tsx +56 -56
  83. package/src/components/Button/IconButton.tsx +51 -51
  84. package/src/components/Button/SplitButton.tsx +91 -91
  85. package/src/components/Dashboard/Dashboard.tsx +9 -9
  86. package/src/components/Dashboard/DashboardWidget.tsx +44 -44
  87. package/src/components/Dashboard/FastLinksWidget/FastLinksWidget.tsx +37 -37
  88. package/src/components/Dialog/Dialog.tsx +166 -166
  89. package/src/components/Dialog/components/DialogFooter.tsx +100 -100
  90. package/src/components/Header/Components/EnvBadge.tsx +17 -17
  91. package/src/components/Header/Components/ModuleSelect.tsx +68 -68
  92. package/src/components/Header/Components/Notifications.tsx +202 -202
  93. package/src/components/Header/Components/UserMenu.tsx +52 -52
  94. package/src/components/Header/Header.tsx +45 -37
  95. package/src/components/Helper/Collapse.tsx +53 -53
  96. package/src/components/Inputs/Checkbox.tsx +53 -53
  97. package/src/components/Inputs/CurrencyInput.tsx +124 -124
  98. package/src/components/Inputs/DateInput/DateInput.tsx +184 -184
  99. package/src/components/Inputs/DateInput/components/DatePartInput.tsx +159 -159
  100. package/src/components/Inputs/InputWrapper.tsx +95 -95
  101. package/src/components/Inputs/NumberInput.tsx +86 -86
  102. package/src/components/Inputs/PasswordInput.tsx +40 -40
  103. package/src/components/Inputs/PhoneInput/PhoneInput.tsx +108 -108
  104. package/src/components/Inputs/PhoneInput/utils/countryCode.ts +20 -20
  105. package/src/components/Inputs/Radio.tsx +59 -59
  106. package/src/components/Inputs/RadioGroup.tsx +48 -48
  107. package/src/components/Inputs/RadioLarge.tsx +39 -39
  108. package/src/components/Inputs/SearchInput.tsx +46 -46
  109. package/src/components/Inputs/Selects/Select.tsx +17 -17
  110. package/src/components/Inputs/Selects/components/CustomSelectComponents.tsx +19 -20
  111. package/src/components/Inputs/Selects/components/SelectWrapper.tsx +118 -118
  112. package/src/components/Inputs/Selects/utils/selectStyles.ts +101 -101
  113. package/src/components/Inputs/TextAreaInput.tsx +68 -68
  114. package/src/components/Inputs/TextInput.tsx +100 -100
  115. package/src/components/Inputs/TimeInput/TimeInput.tsx +81 -81
  116. package/src/components/List/List.tsx +21 -21
  117. package/src/components/List/ListItem.tsx +70 -70
  118. package/src/components/Loader/Loader.tsx +59 -59
  119. package/src/components/Loader/ProgressBar.tsx +41 -41
  120. package/src/components/Menu/Menu.tsx +81 -81
  121. package/src/components/Menu/MenuItem.tsx +46 -46
  122. package/src/components/Menu/NewMenu.tsx +63 -63
  123. package/src/components/Menu/hooks/useMenuPosition.tsx +116 -116
  124. package/src/components/PageComponents/ScrollableContent.tsx +11 -0
  125. package/src/components/Pullover/Pullover.tsx +197 -197
  126. package/src/components/Router/Router.tsx +52 -52
  127. package/src/components/Sidebar/AddButton.tsx +22 -22
  128. package/src/components/Sidebar/Sidebar.tsx +85 -85
  129. package/src/components/Sidebar/SidebarItem.tsx +84 -84
  130. package/src/components/Sidebar/types/ISidebar.ts +28 -28
  131. package/src/components/Table/Table.tsx +259 -259
  132. package/src/components/Table/components/columns/ColumnsList.tsx +60 -60
  133. package/src/components/Table/components/columns/TableColumnsEdit.tsx +114 -114
  134. package/src/components/Table/components/edit/TableEditRow.tsx +78 -78
  135. package/src/components/Table/components/filters/FilterItem.tsx +15 -15
  136. package/src/components/Table/components/filters/TableFilters.tsx +126 -126
  137. package/src/components/Table/components/footer/TableFooter.tsx +126 -126
  138. package/src/components/Table/components/header/TableHeader.tsx +40 -40
  139. package/src/components/Table/components/header/TableHeaderRow.tsx +57 -57
  140. package/src/components/Table/components/items/TableItemActions.tsx +78 -78
  141. package/src/components/Table/components/print/TablePrint.tsx +200 -200
  142. package/src/components/Table/components/select/TableSelect.tsx +50 -50
  143. package/src/components/Table/components/sort/TableSort.tsx +73 -73
  144. package/src/components/Table/components/templates/CreateTemplateDialog.tsx +58 -58
  145. package/src/components/Table/components/templates/TableTemplates.tsx +65 -65
  146. package/src/components/Table/components/templates/TemplatesPullover.tsx +88 -88
  147. package/src/components/Table/contexts/TableContext.tsx +116 -116
  148. package/src/components/Table/hooks/localHooks/useLocalTableColumns.tsx +70 -70
  149. package/src/components/Table/hooks/localHooks/useLocalTableData.tsx +84 -84
  150. package/src/components/Table/hooks/localHooks/useLocalTableKeyboard.ts +176 -176
  151. package/src/components/Table/hooks/localHooks/useLocalTablePagination.ts +12 -12
  152. package/src/components/Table/hooks/useTableColumns.ts +34 -34
  153. package/src/components/Table/hooks/useTableEdit.tsx +140 -140
  154. package/src/components/Table/hooks/useTableFilterFields.tsx +150 -150
  155. package/src/components/Table/hooks/useTablePagination.ts +19 -19
  156. package/src/components/Table/hooks/useTablePrint.ts +83 -83
  157. package/src/components/Table/hooks/useTableSearch.ts +31 -31
  158. package/src/components/Table/hooks/useTableSelect.ts +19 -19
  159. package/src/components/Table/hooks/useTableSort.ts +8 -8
  160. package/src/components/Tabs/Tabs.tsx +68 -68
  161. package/src/components/Tooltip/Tooltip.tsx +191 -191
  162. package/src/components/Tree/Tree.tsx +22 -22
  163. package/src/components/Tree/TreeItem.tsx +57 -57
  164. package/src/components/Wrappers/AppLayout.tsx +17 -17
  165. package/src/components/Wrappers/ConditionalWrapper.tsx +10 -10
  166. package/src/components/Wrappers/FormWrapper.tsx +84 -84
  167. package/src/components/Wrappers/PageLayout.tsx +164 -156
  168. package/src/hooks/useBackgroundClose.ts +19 -19
  169. package/src/hooks/useGetFocusableElements.ts +43 -43
  170. package/src/hooks/useIsMenuOpen.ts +11 -11
  171. package/src/hooks/useLocalPopoverControl.ts +32 -32
  172. package/src/hooks/usePopupControl.ts +22 -22
  173. package/src/hooks/useZendesk.ts +21 -21
  174. package/src/index.ts +381 -379
  175. package/src/pages/NoAccessPage.tsx +27 -27
  176. package/src/pages/NotFoundPage.tsx +26 -26
  177. package/src/styles/common/helpers/_color.scss +3 -0
  178. package/src/styles/components/_page.scss +0 -13
  179. package/src/types/IBasic.ts +32 -32
  180. package/src/types/IHeader.ts +40 -40
  181. package/src/types/IInfo.ts +1 -1
  182. package/src/types/IKeyboard.ts +33 -33
  183. package/src/types/IMenu.ts +19 -19
  184. package/src/types/INotifications.ts +15 -15
  185. package/src/types/IPopup.ts +17 -17
  186. package/src/types/IRouter.ts +6 -6
  187. package/src/types/ISelect.ts +54 -54
  188. package/src/types/ITab.ts +10 -10
  189. package/src/types/ITable.ts +290 -290
  190. package/src/utils/InputPatternValidation.ts +12 -12
  191. package/src/utils/dateUtils.ts +32 -32
  192. package/src/utils/fileUtils.ts +177 -177
  193. package/src/utils/i18n/i18nIUICyrilic.ts +119 -119
  194. package/src/utils/i18n/i18nIUILatin.ts +120 -120
  195. package/src/utils/i18n/i18nIUIMe.ts +118 -118
  196. package/src/utils/icons.ts +13 -13
  197. package/src/utils/localStorageHelper.ts +24 -24
  198. package/src/utils/logoUtils.ts +7 -7
  199. package/src/utils/numberUtils.ts +21 -21
  200. package/src/utils/objectUtils.ts +114 -114
  201. package/src/utils/popupUtils.ts +82 -82
  202. package/src/utils/rootDir.ts +1 -1
  203. package/src/utils/stringUtils.ts +18 -18
  204. package/src/utils/tableUtils.ts +130 -130
  205. package/src/utils/toasts.ts +6 -6
  206. package/src/utils/urlUtils.ts +4 -4
  207. package/dist/NoAccessPage-CJisyKrk.js +0 -2
  208. package/dist/NotFoundPage-BeRit0kr.js +0 -2
@@ -1,200 +1,200 @@
1
- import type { FC } from 'react';
2
- import type { IPrintData } from '../../../../types/ITable';
3
- import { useEffect, useMemo } from 'react';
4
- import clsx from 'clsx';
5
- import { useTranslation } from 'react-i18next';
6
- import { faPrint } from '../../../../assets/icons';
7
- import { faFileArrowDown } from '../../../../assets/icons/regular/faFileArrowDown';
8
- import { useHideZendesk } from '../../../../hooks/useZendesk';
9
- import { formatDate, getCurrentDateFormatted } from '../../../../utils/dateUtils';
10
- import { IconButton } from '../../../Button/IconButton';
11
- import { ProgressBar } from '../../../Loader/ProgressBar';
12
- import { Pullover } from '../../../Pullover/Pullover';
13
- import { useTableContext } from '../../contexts/TableContext';
14
- import { HeaderTable } from '../header/TableHeader';
15
-
16
- export const TablePrint: FC = () => {
17
- const { t } = useTranslation();
18
- useHideZendesk();
19
- const {
20
- columnData: { columns },
21
- printData,
22
- } = useTableContext();
23
-
24
- const {
25
- label,
26
- tableData: data,
27
- isLoading,
28
- progress,
29
- paginationControl,
30
- printPopupControl,
31
- customHeader,
32
- filters,
33
- optionalNode,
34
- organization,
35
- saveXlsx,
36
- totals,
37
- } = useMemo(() => (printData ?? {}) as IPrintData, [printData]);
38
- const { control, onOpen } = printPopupControl;
39
-
40
- const cols = useMemo(() => columns.filter(e => !e.hidden && !e.printHidden), [columns]);
41
-
42
- useEffect(() => {
43
- if (control.isOpen) {
44
- paginationControl?.setLimit(1000);
45
- paginationControl?.setOffset(0);
46
- }
47
- }, [paginationControl, control.isOpen]);
48
-
49
- return (
50
- printData && (
51
- <>
52
- <IconButton
53
- tooltip={t('PrintExport')}
54
- icon={faPrint}
55
- onClick={onOpen}
56
- size="s"
57
- variant="outlined"
58
- />
59
-
60
- <Pullover
61
- control={control}
62
- header={{ title: t('PrintExport') }}
63
- footer={{
64
- confirmButton: {
65
- label: t('Print'),
66
- onClick: window.print,
67
- // type: 'submit',
68
- },
69
- additionalButton: saveXlsx
70
- ? {
71
- label: t('SaveXlsx'),
72
- icon: faFileArrowDown,
73
- onClick: saveXlsx,
74
- }
75
- : undefined,
76
- }}
77
- contentClassName="iui-print"
78
- size="vw100"
79
- portalTarget={document.body}
80
- >
81
- <div className="print-content">
82
- <div className="flex justify-between">
83
- {organization ? (
84
- <div>
85
- <p className="name">{organization.name}</p>
86
- {organization.taxId && <p>{`${t('TaxId')}: ${organization.taxId}`}</p>}
87
- {organization.registrationNumber && (
88
- <p>{`${t('BusinessCode')}: ${organization.registrationNumber}`}</p>
89
- )}
90
- {organization.jbkjs && <p>JBKJS: {organization.jbkjs}</p>}
91
- {organization.email && <p>Email: {organization.email}</p>}
92
- </div>
93
- ) : (
94
- <div />
95
- )}
96
- <div className="text-right">
97
- <p>{`${t('PrintDate')}: ${getCurrentDateFormatted()}`}</p>
98
- </div>
99
- </div>
100
- <h3 className="my-3 text-center">{label}</h3>
101
- {filters && (
102
- <div className="flex justify-between">
103
- <div>
104
- {filters.basic?.map(
105
- e =>
106
- !!e.value && (
107
- <div key={e.value} className="mb-2">
108
- <p>{`${e.label}: ${e.value}`}</p>
109
- </div>
110
- )
111
- )}
112
- </div>
113
- {filters.date && (
114
- <div>
115
- {filters.date.map(
116
- e =>
117
- (!!e.from || !!e.to) && (
118
- <div key={e.label} className="mb-2 text-right">
119
- <p>
120
- {e.label} {!!e.from && `${t('from')} ${formatDate(e.from)}`}{' '}
121
- {`${t('to')} ${formatDate(e.to || new Date().toString())}`}
122
- </p>
123
- </div>
124
- )
125
- )}
126
- </div>
127
- )}
128
- </div>
129
- )}
130
- {optionalNode?.aboveTable}
131
- {isLoading ? (
132
- <ProgressBar progress={progress} />
133
- ) : (
134
- data && (
135
- <table width="100%" className="print-table">
136
- <HeaderTable
137
- columns={cols}
138
- customHeader={customHeader}
139
- headerWrap
140
- print
141
- />
142
- <tbody>
143
- {data.map(row => {
144
- let totalColsSpan = 0;
145
- return (
146
- <tr key={row.uuid} className={row.className}>
147
- {cols.map(column => {
148
- const cell = row.cells[column.id];
149
-
150
- totalColsSpan += cell?.span
151
- ? // If span is -1 or larger then the number of columns
152
- cell.span === -1 || cell.span > cols.length
153
- ? // ...fill the rest of the table
154
- cols.length - totalColsSpan
155
- : cell.span
156
- : 1;
157
-
158
- return (
159
- cols.length >= totalColsSpan && (
160
- <td
161
- key={column.id}
162
- align={cell?.align || column.align}
163
- className={clsx(column.color, cell?.className, {
164
- 'word-break': column.break,
165
- })}
166
- colSpan={cell?.span === -1 ? cols.length : cell?.span}
167
- >
168
- {cell?.printValue ?? cell?.value}
169
- </td>
170
- )
171
- );
172
- })}
173
- </tr>
174
- );
175
- })}
176
- {!!totals && (
177
- <tr>
178
- {cols.map(({ id: columnId }) => (
179
- <td
180
- key={columnId}
181
- align={totals.cells[columnId]?.align || 'right'}
182
- colSpan={totals.cells[columnId]?.span}
183
- className="py-3"
184
- >
185
- <strong>{totals.cells[columnId]?.value}</strong>
186
- </td>
187
- ))}
188
- </tr>
189
- )}
190
- </tbody>
191
- </table>
192
- )
193
- )}
194
- {optionalNode?.bellowTable}
195
- </div>
196
- </Pullover>
197
- </>
198
- )
199
- );
200
- };
1
+ import type { FC } from 'react';
2
+ import type { IPrintData } from '../../../../types/ITable';
3
+ import { useEffect, useMemo } from 'react';
4
+ import clsx from 'clsx';
5
+ import { useTranslation } from 'react-i18next';
6
+ import { faPrint } from '../../../../assets/icons';
7
+ import { faFileArrowDown } from '../../../../assets/icons/regular/faFileArrowDown';
8
+ import { useHideZendesk } from '../../../../hooks/useZendesk';
9
+ import { formatDate, getCurrentDateFormatted } from '../../../../utils/dateUtils';
10
+ import { IconButton } from '../../../Button/IconButton';
11
+ import { ProgressBar } from '../../../Loader/ProgressBar';
12
+ import { Pullover } from '../../../Pullover/Pullover';
13
+ import { useTableContext } from '../../contexts/TableContext';
14
+ import { HeaderTable } from '../header/TableHeader';
15
+
16
+ export const TablePrint: FC = () => {
17
+ const { t } = useTranslation();
18
+ useHideZendesk();
19
+ const {
20
+ columnData: { columns },
21
+ printData,
22
+ } = useTableContext();
23
+
24
+ const {
25
+ label,
26
+ tableData: data,
27
+ isLoading,
28
+ progress,
29
+ paginationControl,
30
+ printPopupControl,
31
+ customHeader,
32
+ filters,
33
+ optionalNode,
34
+ organization,
35
+ saveXlsx,
36
+ totals,
37
+ } = useMemo(() => (printData ?? {}) as IPrintData, [printData]);
38
+ const { control, onOpen } = printPopupControl;
39
+
40
+ const cols = useMemo(() => columns.filter(e => !e.hidden && !e.printHidden), [columns]);
41
+
42
+ useEffect(() => {
43
+ if (control.isOpen) {
44
+ paginationControl?.setLimit(1000);
45
+ paginationControl?.setOffset(0);
46
+ }
47
+ }, [paginationControl, control.isOpen]);
48
+
49
+ return (
50
+ printData && (
51
+ <>
52
+ <IconButton
53
+ tooltip={t('PrintExport')}
54
+ icon={faPrint}
55
+ onClick={onOpen}
56
+ size="s"
57
+ variant="outlined"
58
+ />
59
+
60
+ <Pullover
61
+ control={control}
62
+ header={{ title: t('PrintExport') }}
63
+ footer={{
64
+ confirmButton: {
65
+ label: t('Print'),
66
+ onClick: window.print,
67
+ // type: 'submit',
68
+ },
69
+ additionalButton: saveXlsx
70
+ ? {
71
+ label: t('SaveXlsx'),
72
+ icon: faFileArrowDown,
73
+ onClick: saveXlsx,
74
+ }
75
+ : undefined,
76
+ }}
77
+ contentClassName="iui-print"
78
+ size="vw100"
79
+ portalTarget={document.body}
80
+ >
81
+ <div className="print-content">
82
+ <div className="flex justify-between">
83
+ {organization ? (
84
+ <div>
85
+ <p className="name">{organization.name}</p>
86
+ {organization.taxId && <p>{`${t('TaxId')}: ${organization.taxId}`}</p>}
87
+ {organization.registrationNumber && (
88
+ <p>{`${t('BusinessCode')}: ${organization.registrationNumber}`}</p>
89
+ )}
90
+ {organization.jbkjs && <p>JBKJS: {organization.jbkjs}</p>}
91
+ {organization.email && <p>Email: {organization.email}</p>}
92
+ </div>
93
+ ) : (
94
+ <div />
95
+ )}
96
+ <div className="text-right">
97
+ <p>{`${t('PrintDate')}: ${getCurrentDateFormatted()}`}</p>
98
+ </div>
99
+ </div>
100
+ <h3 className="my-3 text-center">{label}</h3>
101
+ {filters && (
102
+ <div className="flex justify-between">
103
+ <div>
104
+ {filters.basic?.map(
105
+ e =>
106
+ !!e.value && (
107
+ <div key={e.value} className="mb-2">
108
+ <p>{`${e.label}: ${e.value}`}</p>
109
+ </div>
110
+ )
111
+ )}
112
+ </div>
113
+ {filters.date && (
114
+ <div>
115
+ {filters.date.map(
116
+ e =>
117
+ (!!e.from || !!e.to) && (
118
+ <div key={e.label} className="mb-2 text-right">
119
+ <p>
120
+ {e.label} {!!e.from && `${t('from')} ${formatDate(e.from)}`}{' '}
121
+ {`${t('to')} ${formatDate(e.to || new Date().toString())}`}
122
+ </p>
123
+ </div>
124
+ )
125
+ )}
126
+ </div>
127
+ )}
128
+ </div>
129
+ )}
130
+ {optionalNode?.aboveTable}
131
+ {isLoading ? (
132
+ <ProgressBar progress={progress} />
133
+ ) : (
134
+ data && (
135
+ <table width="100%" className="print-table">
136
+ <HeaderTable
137
+ columns={cols}
138
+ customHeader={customHeader}
139
+ headerWrap
140
+ print
141
+ />
142
+ <tbody>
143
+ {data.map(row => {
144
+ let totalColsSpan = 0;
145
+ return (
146
+ <tr key={row.uuid} className={row.className}>
147
+ {cols.map(column => {
148
+ const cell = row.cells[column.id];
149
+
150
+ totalColsSpan += cell?.span
151
+ ? // If span is -1 or larger then the number of columns
152
+ cell.span === -1 || cell.span > cols.length
153
+ ? // ...fill the rest of the table
154
+ cols.length - totalColsSpan
155
+ : cell.span
156
+ : 1;
157
+
158
+ return (
159
+ cols.length >= totalColsSpan && (
160
+ <td
161
+ key={column.id}
162
+ align={cell?.align || column.align}
163
+ className={clsx(column.color, cell?.className, {
164
+ 'word-break': column.break,
165
+ })}
166
+ colSpan={cell?.span === -1 ? cols.length : cell?.span}
167
+ >
168
+ {cell?.printValue ?? cell?.value}
169
+ </td>
170
+ )
171
+ );
172
+ })}
173
+ </tr>
174
+ );
175
+ })}
176
+ {!!totals && (
177
+ <tr>
178
+ {cols.map(({ id: columnId }) => (
179
+ <td
180
+ key={columnId}
181
+ align={totals.cells[columnId]?.align || 'right'}
182
+ colSpan={totals.cells[columnId]?.span}
183
+ className="py-3"
184
+ >
185
+ <strong>{totals.cells[columnId]?.value}</strong>
186
+ </td>
187
+ ))}
188
+ </tr>
189
+ )}
190
+ </tbody>
191
+ </table>
192
+ )
193
+ )}
194
+ {optionalNode?.bellowTable}
195
+ </div>
196
+ </Pullover>
197
+ </>
198
+ )
199
+ );
200
+ };
@@ -1,50 +1,50 @@
1
- import type { FC } from 'react';
2
- import { useState } from 'react';
3
- import { useTranslation } from 'react-i18next';
4
- import { faClipboardCheck } from '../../../../assets/icons/light/faClipboardCheck';
5
- import { NotificationBadge } from '../../../Badge/NotificationBadge';
6
- import { IconButton } from '../../../Button/IconButton';
7
- import { Menu } from '../../../Menu/Menu';
8
- import { Tooltip } from '../../../Tooltip/Tooltip';
9
- import { useTableContext } from '../../contexts/TableContext';
10
-
11
- export const TableSelect: FC = () => {
12
- const [isOpen, setIsOpen] = useState(false);
13
-
14
- const { t } = useTranslation();
15
- const { rowSelect, selectActions } = useTableContext();
16
-
17
- return !!rowSelect && selectActions.length > 0 ? (
18
- <Menu
19
- isOpen={isOpen}
20
- onClose={() => setIsOpen(false)}
21
- placement="bottom-left"
22
- renderButton={ref => (
23
- <NotificationBadge number={rowSelect.selectedRows.size}>
24
- <Tooltip
25
- ref={ref}
26
- label={t('TableSelect')}
27
- disabled={!rowSelect.selectedRows.size}
28
- >
29
- <IconButton
30
- icon={faClipboardCheck}
31
- active={isOpen}
32
- onClick={() => setIsOpen(!isOpen)}
33
- disabled={!rowSelect.selectedRows.size}
34
- variant="outlined"
35
- size="s"
36
- />
37
- </Tooltip>
38
- </NotificationBadge>
39
- )}
40
- items={selectActions.map(action => ({
41
- ...action,
42
- onClick: () => {
43
- action.onClick!(rowSelect.selectedRows);
44
- setIsOpen(false);
45
- action.clearSelected && rowSelect.setSelectedRows(new Set<string>());
46
- },
47
- }))}
48
- />
49
- ) : null;
50
- };
1
+ import type { FC } from 'react';
2
+ import { useState } from 'react';
3
+ import { useTranslation } from 'react-i18next';
4
+ import { faClipboardCheck } from '../../../../assets/icons/light/faClipboardCheck';
5
+ import { NotificationBadge } from '../../../Badge/NotificationBadge';
6
+ import { IconButton } from '../../../Button/IconButton';
7
+ import { Menu } from '../../../Menu/Menu';
8
+ import { Tooltip } from '../../../Tooltip/Tooltip';
9
+ import { useTableContext } from '../../contexts/TableContext';
10
+
11
+ export const TableSelect: FC = () => {
12
+ const [isOpen, setIsOpen] = useState(false);
13
+
14
+ const { t } = useTranslation();
15
+ const { rowSelect, selectActions } = useTableContext();
16
+
17
+ return !!rowSelect && selectActions.length > 0 ? (
18
+ <Menu
19
+ isOpen={isOpen}
20
+ onClose={() => setIsOpen(false)}
21
+ placement="bottom-left"
22
+ renderButton={ref => (
23
+ <NotificationBadge number={rowSelect.selectedRows.size}>
24
+ <Tooltip
25
+ ref={ref}
26
+ label={t('TableSelect')}
27
+ disabled={!rowSelect.selectedRows.size}
28
+ >
29
+ <IconButton
30
+ icon={faClipboardCheck}
31
+ active={isOpen}
32
+ onClick={() => setIsOpen(!isOpen)}
33
+ disabled={!rowSelect.selectedRows.size}
34
+ variant="outlined"
35
+ size="s"
36
+ />
37
+ </Tooltip>
38
+ </NotificationBadge>
39
+ )}
40
+ items={selectActions.map(action => ({
41
+ ...action,
42
+ onClick: () => {
43
+ action.onClick!(rowSelect.selectedRows);
44
+ setIsOpen(false);
45
+ action.clearSelected && rowSelect.setSelectedRows(new Set<string>());
46
+ },
47
+ }))}
48
+ />
49
+ ) : null;
50
+ };
@@ -1,73 +1,73 @@
1
- import type { FC } from 'react';
2
- import { useEffect, useState } from 'react';
3
- import { useTranslation } from 'react-i18next';
4
- import { faArrowDownShortWide } from '../../../../assets/icons/light/faArrowDownShortWide';
5
- import { faArrowDownWideShort } from '../../../../assets/icons/light/faArrowDownWideShort';
6
- import { faArrowUpArrowDown } from '../../../../assets/icons/light/faArrowUpArrowDown';
7
- import { IconButton } from '../../../Button/IconButton';
8
- import { Menu } from '../../../Menu/Menu';
9
- import { Tooltip } from '../../../Tooltip/Tooltip';
10
- import { useTableContext } from '../../contexts/TableContext';
11
-
12
- export const TableSort: FC = () => {
13
- const [isOpen, setIsOpen] = useState(false);
14
-
15
- const { t } = useTranslation();
16
- const { sortData } = useTableContext();
17
- const { sort, setSort, sortOptions } = sortData ?? {};
18
-
19
- useEffect(() => {
20
- if (isOpen) {
21
- const handleKeyDown = (event: KeyboardEvent) => {
22
- event.stopPropagation();
23
- if (event.key === 'Escape') {
24
- event.preventDefault();
25
- event.stopPropagation();
26
- setIsOpen(false);
27
- }
28
- };
29
-
30
- document.addEventListener('keydown', handleKeyDown);
31
- return () => {
32
- document.removeEventListener('keydown', handleKeyDown);
33
- };
34
- }
35
- }, [isOpen]);
36
-
37
- return sortData ? (
38
- <Menu
39
- isOpen={isOpen}
40
- onClose={() => setIsOpen(false)}
41
- renderButton={ref => (
42
- <Tooltip label={t('Sort')} ref={ref}>
43
- <IconButton
44
- icon={faArrowUpArrowDown}
45
- active={isOpen}
46
- onClick={() => setIsOpen(!isOpen)}
47
- size="s"
48
- variant="outlined"
49
- />
50
- </Tooltip>
51
- )}
52
- size={sortData.menuSize}
53
- items={sortOptions?.map(e => {
54
- const valueAsc = e.value + '_ASC';
55
- const valueDesc = e.value + '_DESC';
56
-
57
- return {
58
- label: e.label,
59
- onClick: () => setSort?.(sort === valueDesc ? valueAsc : valueDesc),
60
- active: sort?.startsWith(e.value),
61
- className: 'table-sort-item',
62
- keepOpen: true,
63
- icon:
64
- sort === valueDesc
65
- ? faArrowDownWideShort
66
- : sort === valueAsc
67
- ? faArrowDownShortWide
68
- : undefined,
69
- };
70
- })}
71
- />
72
- ) : null;
73
- };
1
+ import type { FC } from 'react';
2
+ import { useEffect, useState } from 'react';
3
+ import { useTranslation } from 'react-i18next';
4
+ import { faArrowDownShortWide } from '../../../../assets/icons/light/faArrowDownShortWide';
5
+ import { faArrowDownWideShort } from '../../../../assets/icons/light/faArrowDownWideShort';
6
+ import { faArrowUpArrowDown } from '../../../../assets/icons/light/faArrowUpArrowDown';
7
+ import { IconButton } from '../../../Button/IconButton';
8
+ import { Menu } from '../../../Menu/Menu';
9
+ import { Tooltip } from '../../../Tooltip/Tooltip';
10
+ import { useTableContext } from '../../contexts/TableContext';
11
+
12
+ export const TableSort: FC = () => {
13
+ const [isOpen, setIsOpen] = useState(false);
14
+
15
+ const { t } = useTranslation();
16
+ const { sortData } = useTableContext();
17
+ const { sort, setSort, sortOptions } = sortData ?? {};
18
+
19
+ useEffect(() => {
20
+ if (isOpen) {
21
+ const handleKeyDown = (event: KeyboardEvent) => {
22
+ event.stopPropagation();
23
+ if (event.key === 'Escape') {
24
+ event.preventDefault();
25
+ event.stopPropagation();
26
+ setIsOpen(false);
27
+ }
28
+ };
29
+
30
+ document.addEventListener('keydown', handleKeyDown);
31
+ return () => {
32
+ document.removeEventListener('keydown', handleKeyDown);
33
+ };
34
+ }
35
+ }, [isOpen]);
36
+
37
+ return sortData ? (
38
+ <Menu
39
+ isOpen={isOpen}
40
+ onClose={() => setIsOpen(false)}
41
+ renderButton={ref => (
42
+ <Tooltip label={t('Sort')} ref={ref}>
43
+ <IconButton
44
+ icon={faArrowUpArrowDown}
45
+ active={isOpen}
46
+ onClick={() => setIsOpen(!isOpen)}
47
+ size="s"
48
+ variant="outlined"
49
+ />
50
+ </Tooltip>
51
+ )}
52
+ size={sortData.menuSize}
53
+ items={sortOptions?.map(e => {
54
+ const valueAsc = e.value + '_ASC';
55
+ const valueDesc = e.value + '_DESC';
56
+
57
+ return {
58
+ label: e.label,
59
+ onClick: () => setSort?.(sort === valueDesc ? valueAsc : valueDesc),
60
+ active: sort?.startsWith(e.value),
61
+ className: 'table-sort-item',
62
+ keepOpen: true,
63
+ icon:
64
+ sort === valueDesc
65
+ ? faArrowDownWideShort
66
+ : sort === valueAsc
67
+ ? faArrowDownShortWide
68
+ : undefined,
69
+ };
70
+ })}
71
+ />
72
+ ) : null;
73
+ };