@zauru-sdk/components 1.0.52 → 1.0.53

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 (261) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/Alerts/ErrorBoundaryAlert/ErrorBoundaryAlert.d.ts +6 -0
  3. package/dist/Alerts/StaticAlert.d.ts +11 -0
  4. package/dist/Alerts/index.d.ts +2 -0
  5. package/dist/BlockUI/BlockUI.d.ts +8 -0
  6. package/dist/BlockUI/index.d.ts +1 -0
  7. package/dist/Buttons/Button.d.ts +15 -0
  8. package/dist/Buttons/index.d.ts +1 -0
  9. package/dist/Card/Card.d.ts +8 -0
  10. package/dist/Card/index.d.ts +1 -0
  11. package/dist/Chat/ChatLayout.d.ts +17 -0
  12. package/dist/Chat/ChatMessageHistory.d.ts +12 -0
  13. package/dist/Chat/index.d.ts +2 -0
  14. package/dist/ConnectionState/ConnectionState.d.ts +1 -0
  15. package/dist/ConnectionState/index.d.ts +1 -0
  16. package/dist/Containers/BodyContainer.d.ts +6 -0
  17. package/dist/Containers/ButtonSectionContainer.d.ts +8 -0
  18. package/dist/Containers/Container.d.ts +10 -0
  19. package/dist/Containers/DoubleContainer.d.ts +9 -0
  20. package/dist/Containers/MainContainer.d.ts +6 -0
  21. package/dist/Containers/OutletContainer.d.ts +6 -0
  22. package/dist/Containers/SubContainer.d.ts +10 -0
  23. package/dist/Containers/index.d.ts +7 -0
  24. package/dist/DynamicTable/BasicPrintDynamicTable.d.ts +10 -0
  25. package/dist/DynamicTable/DynamicPrintTable.d.ts +23 -0
  26. package/dist/DynamicTable/DynamicTable.d.ts +24 -0
  27. package/dist/DynamicTable/GenericDynamicTable.d.ts +21 -0
  28. package/dist/DynamicTable/index.d.ts +4 -0
  29. package/dist/Footer/Footer.d.ts +7 -0
  30. package/dist/Footer/index.d.ts +1 -0
  31. package/dist/Form/Checkbox/index.d.ts +17 -0
  32. package/dist/Form/Checklist/index.d.ts +14 -0
  33. package/dist/Form/DatePicker/index.d.ts +18 -0
  34. package/dist/Form/DynamicBaculoForm/index.d.ts +18 -0
  35. package/dist/Form/FieldContainer/DoubleFieldContainer.d.ts +8 -0
  36. package/dist/Form/FieldContainer/QuadrupleFieldContainer.d.ts +7 -0
  37. package/dist/Form/FieldContainer/TripleFieldContainer.d.ts +7 -0
  38. package/dist/Form/FieldContainer/index.d.ts +3 -0
  39. package/dist/Form/FileUpload/index.d.ts +21 -0
  40. package/dist/Form/FormButtons/index.d.ts +16 -0
  41. package/dist/Form/FormLayout/index.d.ts +11 -0
  42. package/dist/Form/SelectField/index.d.ts +27 -0
  43. package/dist/Form/TextArea/index.d.ts +23 -0
  44. package/dist/Form/TextField/index.d.ts +25 -0
  45. package/dist/Form/TimePicker/index.d.ts +16 -0
  46. package/dist/Form/YesNo/index.d.ts +12 -0
  47. package/dist/Form/index.d.ts +13 -0
  48. package/dist/Labels/InfoLabel/index.d.ts +7 -0
  49. package/dist/Labels/index.d.ts +1 -0
  50. package/dist/Layouts/homeLayout/index.d.ts +6 -0
  51. package/dist/Layouts/index.d.ts +1 -0
  52. package/dist/LineSeparator/LineSeparator.d.ts +1 -0
  53. package/dist/LineSeparator/index.d.ts +1 -0
  54. package/dist/Modal/Modal.d.ts +10 -0
  55. package/dist/Modal/index.d.ts +1 -0
  56. package/dist/NavBar/NavBar.d.ts +2 -0
  57. package/dist/NavBar/NavBar.types.d.ts +50 -0
  58. package/dist/NavBar/NavBar.utils.d.ts +58 -0
  59. package/dist/NavBar/index.d.ts +3 -0
  60. package/dist/ProgressBar/ProgressBar.d.ts +6 -0
  61. package/dist/ProgressBar/ProgressCircle.d.ts +6 -0
  62. package/dist/ProgressBar/index.d.ts +2 -0
  63. package/dist/Skeletons/LoadingInputSkeleton.d.ts +1 -0
  64. package/dist/Skeletons/index.d.ts +1 -0
  65. package/dist/Tab/Tab.d.ts +9 -0
  66. package/dist/Tab/index.d.ts +1 -0
  67. package/dist/Table/ZauruTable.d.ts +25 -0
  68. package/dist/Table/index.d.ts +1 -0
  69. package/dist/TaskList/TaskList.d.ts +14 -0
  70. package/dist/TaskList/index.d.ts +1 -0
  71. package/dist/Titles/LabelArray.d.ts +4 -0
  72. package/dist/Titles/TableColumnTitle.d.ts +4 -0
  73. package/dist/Titles/TitleH1.d.ts +1 -0
  74. package/dist/Titles/TitleH2.d.ts +1 -0
  75. package/dist/Titles/TitleH3.d.ts +1 -0
  76. package/dist/Titles/index.d.ts +5 -0
  77. package/dist/Tooltip/Tooltip.d.ts +7 -0
  78. package/dist/Tooltip/index.d.ts +1 -0
  79. package/dist/WithTooltip/WithTooltip.d.ts +7 -0
  80. package/dist/WithTooltip/index.d.ts +1 -0
  81. package/dist/Wizards/StepWizard.d.ts +14 -0
  82. package/dist/Wizards/index.d.ts +1 -0
  83. package/dist/Zendesk/Chat.d.ts +14 -0
  84. package/dist/Zendesk/index.d.ts +2 -0
  85. package/dist/Zendesk/zendesk.config.d.ts +9 -0
  86. package/dist/cjs/Alerts/ErrorBoundaryAlert/ErrorBoundaryAlert.js +9 -0
  87. package/dist/cjs/Alerts/StaticAlert.js +32 -0
  88. package/dist/cjs/Alerts/index.js +18 -0
  89. package/dist/cjs/BlockUI/BlockUI.js +12 -0
  90. package/dist/cjs/BlockUI/index.js +17 -0
  91. package/dist/cjs/Buttons/Button.js +47 -0
  92. package/dist/cjs/Buttons/index.js +17 -0
  93. package/dist/cjs/Card/Card.js +9 -0
  94. package/dist/cjs/Card/index.js +17 -0
  95. package/dist/cjs/Chat/ChatLayout.js +31 -0
  96. package/dist/cjs/Chat/ChatMessageHistory.js +57 -0
  97. package/dist/cjs/Chat/index.js +18 -0
  98. package/dist/cjs/ConnectionState/ConnectionState.js +25 -0
  99. package/dist/cjs/ConnectionState/index.js +17 -0
  100. package/dist/cjs/Containers/BodyContainer.js +9 -0
  101. package/dist/cjs/Containers/ButtonSectionContainer.js +9 -0
  102. package/dist/cjs/Containers/Container.js +10 -0
  103. package/dist/cjs/Containers/DoubleContainer.js +18 -0
  104. package/dist/cjs/Containers/MainContainer.js +9 -0
  105. package/dist/cjs/Containers/OutletContainer.js +9 -0
  106. package/dist/cjs/Containers/SubContainer.js +10 -0
  107. package/dist/cjs/Containers/index.js +23 -0
  108. package/dist/cjs/DynamicTable/BasicPrintDynamicTable.js +31 -0
  109. package/dist/cjs/DynamicTable/DynamicPrintTable.js +158 -0
  110. package/dist/cjs/DynamicTable/DynamicTable.js +219 -0
  111. package/dist/cjs/DynamicTable/GenericDynamicTable.js +200 -0
  112. package/dist/cjs/DynamicTable/index.js +20 -0
  113. package/dist/cjs/Footer/Footer.js +20 -0
  114. package/dist/cjs/Footer/index.js +17 -0
  115. package/dist/cjs/Form/Checkbox/index.js +39 -0
  116. package/dist/cjs/Form/Checklist/index.js +14 -0
  117. package/dist/cjs/Form/DatePicker/index.js +36 -0
  118. package/dist/cjs/Form/DynamicBaculoForm/index.js +144 -0
  119. package/dist/cjs/Form/FieldContainer/DoubleFieldContainer.js +18 -0
  120. package/dist/cjs/Form/FieldContainer/QuadrupleFieldContainer.js +18 -0
  121. package/dist/cjs/Form/FieldContainer/TripleFieldContainer.js +18 -0
  122. package/dist/cjs/Form/FieldContainer/index.js +19 -0
  123. package/dist/cjs/Form/FileUpload/index.js +59 -0
  124. package/dist/cjs/Form/FormButtons/index.js +9 -0
  125. package/dist/cjs/Form/FormLayout/index.js +11 -0
  126. package/dist/cjs/Form/SelectField/index.js +102 -0
  127. package/dist/cjs/Form/TextArea/index.js +41 -0
  128. package/dist/cjs/Form/TextField/index.js +75 -0
  129. package/dist/cjs/Form/TimePicker/index.js +36 -0
  130. package/dist/cjs/Form/YesNo/index.js +22 -0
  131. package/dist/cjs/Form/index.js +29 -0
  132. package/dist/cjs/Labels/InfoLabel/index.js +9 -0
  133. package/dist/cjs/Labels/index.js +17 -0
  134. package/dist/cjs/Layouts/homeLayout/index.js +14 -0
  135. package/dist/cjs/Layouts/index.js +17 -0
  136. package/dist/cjs/LineSeparator/LineSeparator.js +8 -0
  137. package/dist/cjs/LineSeparator/index.js +17 -0
  138. package/dist/cjs/Modal/Modal.js +36 -0
  139. package/dist/cjs/Modal/index.js +17 -0
  140. package/dist/cjs/NavBar/NavBar.js +36 -0
  141. package/dist/cjs/NavBar/NavBar.types.js +2 -0
  142. package/dist/cjs/NavBar/NavBar.utils.js +61 -0
  143. package/dist/cjs/NavBar/index.js +19 -0
  144. package/dist/cjs/ProgressBar/ProgressBar.js +9 -0
  145. package/dist/cjs/ProgressBar/ProgressCircle.js +26 -0
  146. package/dist/cjs/ProgressBar/index.js +18 -0
  147. package/dist/cjs/Skeletons/LoadingInputSkeleton.js +12 -0
  148. package/dist/cjs/Skeletons/index.js +17 -0
  149. package/dist/cjs/Tab/Tab.js +26 -0
  150. package/dist/cjs/Tab/index.js +17 -0
  151. package/dist/cjs/Table/ZauruTable.js +177 -0
  152. package/dist/cjs/Table/index.js +17 -0
  153. package/dist/cjs/TaskList/TaskList.js +40 -0
  154. package/dist/cjs/TaskList/index.js +17 -0
  155. package/dist/cjs/Titles/LabelArray.js +11 -0
  156. package/dist/cjs/Titles/TableColumnTitle.js +9 -0
  157. package/dist/cjs/Titles/TitleH1.js +9 -0
  158. package/dist/cjs/Titles/TitleH2.js +9 -0
  159. package/dist/cjs/Titles/TitleH3.js +9 -0
  160. package/dist/cjs/Titles/index.js +21 -0
  161. package/dist/cjs/Tooltip/Tooltip.js +18 -0
  162. package/dist/cjs/Tooltip/index.js +17 -0
  163. package/dist/cjs/WithTooltip/WithTooltip.js +9 -0
  164. package/dist/cjs/WithTooltip/index.js +17 -0
  165. package/dist/cjs/Wizards/StepWizard.js +18 -0
  166. package/dist/cjs/Wizards/index.js +17 -0
  167. package/dist/cjs/Zendesk/Chat.js +69 -0
  168. package/dist/cjs/Zendesk/index.js +18 -0
  169. package/dist/cjs/Zendesk/zendesk.config.js +31 -0
  170. package/dist/cjs/index.js +40 -0
  171. package/dist/cjs/tailwind.config.js +9 -0
  172. package/dist/esm/Alerts/ErrorBoundaryAlert/ErrorBoundaryAlert.js +5 -0
  173. package/dist/esm/Alerts/StaticAlert.js +28 -0
  174. package/dist/esm/Alerts/index.js +2 -0
  175. package/dist/esm/BlockUI/BlockUI.js +8 -0
  176. package/dist/esm/BlockUI/index.js +1 -0
  177. package/dist/esm/Buttons/Button.js +43 -0
  178. package/dist/esm/Buttons/index.js +1 -0
  179. package/dist/esm/Card/Card.js +5 -0
  180. package/dist/esm/Card/index.js +1 -0
  181. package/dist/esm/Chat/ChatLayout.js +27 -0
  182. package/dist/esm/Chat/ChatMessageHistory.js +53 -0
  183. package/dist/esm/Chat/index.js +2 -0
  184. package/dist/esm/ConnectionState/ConnectionState.js +21 -0
  185. package/dist/esm/ConnectionState/index.js +1 -0
  186. package/dist/esm/Containers/BodyContainer.js +5 -0
  187. package/dist/esm/Containers/ButtonSectionContainer.js +5 -0
  188. package/dist/esm/Containers/Container.js +6 -0
  189. package/dist/esm/Containers/DoubleContainer.js +14 -0
  190. package/dist/esm/Containers/MainContainer.js +5 -0
  191. package/dist/esm/Containers/OutletContainer.js +5 -0
  192. package/dist/esm/Containers/SubContainer.js +6 -0
  193. package/dist/esm/Containers/index.js +7 -0
  194. package/dist/esm/DynamicTable/BasicPrintDynamicTable.js +27 -0
  195. package/dist/esm/DynamicTable/DynamicPrintTable.js +131 -0
  196. package/dist/esm/DynamicTable/DynamicTable.js +192 -0
  197. package/dist/esm/DynamicTable/GenericDynamicTable.js +196 -0
  198. package/dist/esm/DynamicTable/index.js +4 -0
  199. package/dist/esm/Footer/Footer.js +16 -0
  200. package/dist/esm/Footer/index.js +1 -0
  201. package/dist/esm/Form/Checkbox/index.js +34 -0
  202. package/dist/esm/Form/Checklist/index.js +10 -0
  203. package/dist/esm/Form/DatePicker/index.js +31 -0
  204. package/dist/esm/Form/DynamicBaculoForm/index.js +140 -0
  205. package/dist/esm/Form/FieldContainer/DoubleFieldContainer.js +14 -0
  206. package/dist/esm/Form/FieldContainer/QuadrupleFieldContainer.js +14 -0
  207. package/dist/esm/Form/FieldContainer/TripleFieldContainer.js +14 -0
  208. package/dist/esm/Form/FieldContainer/index.js +3 -0
  209. package/dist/esm/Form/FileUpload/index.js +54 -0
  210. package/dist/esm/Form/FormButtons/index.js +5 -0
  211. package/dist/esm/Form/FormLayout/index.js +7 -0
  212. package/dist/esm/Form/SelectField/index.js +74 -0
  213. package/dist/esm/Form/TextArea/index.js +36 -0
  214. package/dist/esm/Form/TextField/index.js +70 -0
  215. package/dist/esm/Form/TimePicker/index.js +31 -0
  216. package/dist/esm/Form/YesNo/index.js +18 -0
  217. package/dist/esm/Form/index.js +13 -0
  218. package/dist/esm/Labels/InfoLabel/index.js +5 -0
  219. package/dist/esm/Labels/index.js +1 -0
  220. package/dist/esm/Layouts/homeLayout/index.js +10 -0
  221. package/dist/esm/Layouts/index.js +1 -0
  222. package/dist/esm/LineSeparator/LineSeparator.js +4 -0
  223. package/dist/esm/LineSeparator/index.js +1 -0
  224. package/dist/esm/Modal/Modal.js +32 -0
  225. package/dist/esm/Modal/index.js +1 -0
  226. package/dist/esm/NavBar/NavBar.js +32 -0
  227. package/dist/esm/NavBar/NavBar.types.js +1 -0
  228. package/dist/esm/NavBar/NavBar.utils.js +58 -0
  229. package/dist/esm/NavBar/index.js +3 -0
  230. package/dist/esm/ProgressBar/ProgressBar.js +5 -0
  231. package/dist/esm/ProgressBar/ProgressCircle.js +22 -0
  232. package/dist/esm/ProgressBar/index.js +2 -0
  233. package/dist/esm/Skeletons/LoadingInputSkeleton.js +8 -0
  234. package/dist/esm/Skeletons/index.js +1 -0
  235. package/dist/esm/Tab/Tab.js +19 -0
  236. package/dist/esm/Tab/index.js +1 -0
  237. package/dist/esm/Table/ZauruTable.js +150 -0
  238. package/dist/esm/Table/index.js +1 -0
  239. package/dist/esm/TaskList/TaskList.js +35 -0
  240. package/dist/esm/TaskList/index.js +1 -0
  241. package/dist/esm/Titles/LabelArray.js +7 -0
  242. package/dist/esm/Titles/TableColumnTitle.js +5 -0
  243. package/dist/esm/Titles/TitleH1.js +5 -0
  244. package/dist/esm/Titles/TitleH2.js +5 -0
  245. package/dist/esm/Titles/TitleH3.js +5 -0
  246. package/dist/esm/Titles/index.js +5 -0
  247. package/dist/esm/Tooltip/Tooltip.js +14 -0
  248. package/dist/esm/Tooltip/index.js +1 -0
  249. package/dist/esm/WithTooltip/WithTooltip.js +5 -0
  250. package/dist/esm/WithTooltip/index.js +1 -0
  251. package/dist/esm/Wizards/StepWizard.js +14 -0
  252. package/dist/esm/Wizards/index.js +1 -0
  253. package/dist/esm/Zendesk/Chat.js +63 -0
  254. package/dist/esm/Zendesk/index.js +2 -0
  255. package/dist/esm/Zendesk/zendesk.config.js +24 -0
  256. package/dist/esm/index.js +24 -0
  257. package/dist/esm/tailwind.config.js +8 -0
  258. package/dist/index.d.ts +24 -0
  259. package/dist/tailwind.config.d.ts +1 -0
  260. package/package.json +4 -3
  261. package/src/Table/ZauruTable.tsx +4 -2
@@ -0,0 +1,131 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import React, { useEffect, useCallback, useState } from "react";
3
+ import { TextFieldWithoutValidation } from "../Form/TextField/index.js";
4
+ import { SelectFieldWithoutValidation } from "../Form/SelectField/index.js";
5
+ import { useAppSelector } from "@zauru-sdk/redux";
6
+ const errorAnimation = {
7
+ hidden: { opacity: 0, y: -10 },
8
+ visible: { opacity: 1, y: 0 },
9
+ };
10
+ export const DynamicPrintTable = ({ forwardedRef, ...props }) => {
11
+ const { items, onChange, className } = props;
12
+ const { formValidations } = useAppSelector((state) => state.formValidation);
13
+ const createItemSelect = (rowIndex, defaultValue) => (_jsx(SelectFieldWithoutValidation, { name: "item_select", isClearable: true, onChange: (value) => {
14
+ const selectedItem = items?.find((x) => x.value === value?.value);
15
+ updateRow(rowIndex, selectedItem);
16
+ }, options: items, defaultValue: defaultValue }, rowIndex));
17
+ const createItemQuantity = (rowIndex, defaultValue) => (_jsx(TextFieldWithoutValidation, { name: "item_quantity", type: "number", integer: true, defaultValue: defaultValue ?? 1, min: 1, onChange: (value) => {
18
+ updateRow(rowIndex, undefined, Number(value));
19
+ } }, rowIndex));
20
+ const createTemplateName = (rowIndex, defaultValue) => (_jsx("div", { children: defaultValue != "" ? defaultValue : "No hay etiqueta" }, rowIndex));
21
+ const createRow = (rowIndex, item, quantity) => {
22
+ const itemCreated = createItemSelect(rowIndex, item ?? undefined);
23
+ const quantityCreated = createItemQuantity(rowIndex, quantity ?? 1);
24
+ const templateCreated = createTemplateName(rowIndex, item ? item.template : "Seleccione un item para visualizar su etiqueta.");
25
+ return [itemCreated, quantityCreated, templateCreated];
26
+ };
27
+ const [tableData, setTableData] = useState([]);
28
+ const [isInitialItemAdded, setIsInitialItemAdded] = useState(false);
29
+ const insertItems = useCallback((newItems) => {
30
+ setTableData((prevData) => [
31
+ ...(prevData ?? []),
32
+ ...newItems.map((item, index) => {
33
+ const rowIndex = (prevData?.length ?? 0) + index;
34
+ const [itemCreated, quantityCreated, templateCreated] = createRow(rowIndex, item);
35
+ updateRow(rowIndex, item, 1);
36
+ return [itemCreated, quantityCreated, templateCreated];
37
+ }),
38
+ ]);
39
+ }, [items]);
40
+ const getTableState = (temp) => {
41
+ const updatedData = temp ?? tableData;
42
+ const tableState = updatedData?.map((rowData) => {
43
+ const firstElement = rowData[0];
44
+ const item_id = React.isValidElement(firstElement)
45
+ ? firstElement.props.defaultValue?.value
46
+ : undefined;
47
+ const secondElement = rowData[1];
48
+ const quantity = React.isValidElement(secondElement)
49
+ ? secondElement.props.defaultValue
50
+ : undefined;
51
+ return {
52
+ item_id,
53
+ quantity,
54
+ };
55
+ });
56
+ return tableState;
57
+ };
58
+ const updateRow = (rowIndex, item, quantity) => {
59
+ setTableData((prevData) => {
60
+ const updatedData = prevData?.map((_, index) => {
61
+ if (index === rowIndex) {
62
+ const firstElement = prevData[index][0];
63
+ const selectedItem = item ??
64
+ (React.isValidElement(firstElement)
65
+ ? items?.find((x) => x.value === firstElement.props.defaultValue?.value)
66
+ : undefined);
67
+ const secondElement = prevData[index][1];
68
+ const newQuantity = quantity
69
+ ? quantity
70
+ : React.isValidElement(secondElement)
71
+ ? secondElement.props.defaultValue
72
+ : undefined;
73
+ return createRow(rowIndex, selectedItem, newQuantity);
74
+ }
75
+ else {
76
+ return prevData[index];
77
+ }
78
+ });
79
+ if (onChange) {
80
+ const tableState = getTableState(updatedData);
81
+ onChange(tableState);
82
+ }
83
+ return updatedData;
84
+ });
85
+ };
86
+ const addRow = () => {
87
+ setTableData((prevData) => [
88
+ ...(prevData ?? []),
89
+ createRow(prevData?.length ?? 0),
90
+ ]);
91
+ };
92
+ const removeRow = (rowIndex) => {
93
+ setTableData((prevData) => prevData?.filter((_, index) => index !== rowIndex));
94
+ };
95
+ React.useImperativeHandle(forwardedRef, () => ({
96
+ insertItems,
97
+ getTableState,
98
+ }));
99
+ const pastelGrayBackground = {
100
+ backgroundColor: "#B69E99",
101
+ };
102
+ const renderHeader = () => (_jsxs("tr", { style: { ...pastelGrayBackground }, children: [_jsx("th", { className: "text-left align-middle p-2", children: "Item" }), _jsx("th", { className: "text-left align-middle p-2", children: "Cantidad" }), _jsx("th", { className: "text-left align-middle p-2", children: "Etiqueta" }), _jsx("th", { className: "w-16" })] }));
103
+ const renderRow = (rowData, rowIndex) => (_jsxs("tr", { children: [rowData.map((cellData, cellIndex) => (_jsx("td", { className: "align-middle p-2", children: cellData }, cellIndex))), rowIndex !== 0 && (_jsx("td", { className: "align-middle w-16", children: _jsx("button", { className: "bg-red-500 hover:bg-red-600 font-bold py-1 px-2 rounded ml-2", onClick: (event) => {
104
+ event.preventDefault();
105
+ event.stopPropagation();
106
+ removeRow(rowIndex);
107
+ }, type: "button", children: "x" }) }))] }, rowIndex));
108
+ const renderRows = () => {
109
+ return tableData?.map((rowData, rowIndex) => renderRow(rowData, rowIndex));
110
+ };
111
+ const error = formValidations[props.formName ?? "-1"][props.name];
112
+ const borderColor = error ? "border-red-500" : "border-transparent";
113
+ useEffect(() => {
114
+ if (!isInitialItemAdded && items?.length > 0) {
115
+ insertItems([items[0]]);
116
+ setIsInitialItemAdded(true);
117
+ }
118
+ }, [isInitialItemAdded, items, insertItems]);
119
+ return (_jsxs("div", { className: `${className} ${borderColor} border-2`, style: { overflowX: "auto" }, children: [!!error && _jsx("div", { className: "text-red-500 text-sm mb-2", children: error }), _jsxs("table", { className: "w-full", children: [_jsx("thead", { children: renderHeader() }), _jsx("tbody", { children: renderRows() }), _jsx("tfoot", { children: _jsxs("tr", { children: [_jsx("td", { className: "align-middle", children: _jsx("button", { className: "bg-blue-500 hover:bg-blue-600 font-bold py-2 px-4 rounded", onClick: (event) => {
120
+ event.preventDefault();
121
+ event.stopPropagation();
122
+ addRow();
123
+ }, type: "button", children: "+" }) }), _jsxs("td", { colSpan: 2, children: ["Total de etiquetas a imprimir:", " ", tableData?.reduce((sum, x) => {
124
+ const val = React.isValidElement(x[1])
125
+ ? x[1]?.props?.defaultValue
126
+ : undefined;
127
+ if (!sum)
128
+ return val;
129
+ return sum + val;
130
+ }, 0)] })] }) })] })] }));
131
+ };
@@ -0,0 +1,192 @@
1
+ import { jsxs as _jsxs, Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
2
+ import React, { useEffect, useState } from "react";
3
+ import { TextAreaWithoutValidation } from "../Form/TextArea/index.js";
4
+ import { TextFieldWithoutValidation } from "../Form/TextField/index.js";
5
+ import { CheckboxWithoutValidation } from "../Form/Checkbox/index.js";
6
+ export const DynamicTable = ({ forwardedRef, ...props }, ref) => {
7
+ const [tableData, setTableData] = useState({});
8
+ const { cellInputs, intersectionTitle, className, onChange, defaultValue, margins, } = props;
9
+ useEffect(() => {
10
+ if (onChange) {
11
+ onChange(JSON.stringify(tableData));
12
+ }
13
+ // eslint-disable-next-line react-hooks/exhaustive-deps
14
+ }, [tableData]);
15
+ useEffect(() => {
16
+ if (defaultValue) {
17
+ initializeTable(defaultValue);
18
+ }
19
+ else {
20
+ initializeTableWithDefaults();
21
+ }
22
+ }, [defaultValue]);
23
+ const getRows = () => {
24
+ const rowsIds = Object.keys(tableData)
25
+ .filter((key) => key.startsWith("row"))
26
+ .map((key) => parseInt(key.slice(3)));
27
+ return rowsIds.sort().map((id) => ({ id }));
28
+ };
29
+ const getCols = () => {
30
+ const colsIds = Object.keys(tableData)
31
+ .filter((key) => key.startsWith("column"))
32
+ .map((key) => parseInt(key.slice(6)));
33
+ return colsIds.sort().map((id) => ({ id }));
34
+ };
35
+ const addRow = (event) => {
36
+ event.stopPropagation();
37
+ event.preventDefault();
38
+ const rows = getRows();
39
+ const lastId = rows[rows.length - 1].id;
40
+ handleInputChange(`row${lastId + 1}`, 1);
41
+ };
42
+ const addCol = (event) => {
43
+ event.stopPropagation();
44
+ event.preventDefault();
45
+ const cols = getCols();
46
+ const lastId = cols[cols.length - 1].id;
47
+ handleInputChange(`column${lastId + 1}`, 1);
48
+ };
49
+ const removeRow = (rowId) => {
50
+ const newRowData = { ...tableData };
51
+ for (const key in newRowData) {
52
+ if (key.startsWith(`row${rowId}`) || key.startsWith(`cell-${rowId}-`)) {
53
+ delete newRowData[key];
54
+ }
55
+ }
56
+ setTableData(newRowData);
57
+ };
58
+ const removeCol = (colId) => {
59
+ const newRowData = { ...tableData };
60
+ for (const key in newRowData) {
61
+ if (key.startsWith(`column${colId}`) || key.endsWith(`-${colId}`)) {
62
+ delete newRowData[key];
63
+ }
64
+ }
65
+ setTableData(newRowData);
66
+ };
67
+ const getTotalForRow = (rowId) => {
68
+ return Number(tableData[`row${rowId}`] ?? 0) ?? 0;
69
+ };
70
+ const getTotalForColumn = (colId) => {
71
+ return Number(tableData[`column${colId}`] ?? 0) ?? 0;
72
+ };
73
+ const getTotalForRows = () => {
74
+ return getRows()
75
+ .map((row) => getTotalForRow(row.id))
76
+ .reduce((a, b) => a + b, 0);
77
+ };
78
+ const getTotalForColumns = () => {
79
+ return getCols()
80
+ .map((col) => getTotalForColumn(col.id))
81
+ .reduce((a, b) => a + b, 0);
82
+ };
83
+ const getRowsCount = () => {
84
+ return getRows().length;
85
+ };
86
+ const getColumnsCount = () => {
87
+ return getCols().length;
88
+ };
89
+ const handleInputChange = (name, value) => {
90
+ setTableData((prevData) => ({ ...prevData, [name]: value }));
91
+ };
92
+ const handleValidation = (cellId, colId, rowId) => {
93
+ const headerValue = tableData[`column${colId}`];
94
+ const rowValue = tableData[`row${rowId}`];
95
+ if (props.onValidate && props.onValidate(headerValue, rowValue)) {
96
+ return handleInputChange(cellId, true);
97
+ }
98
+ return { stopUIChange: true };
99
+ };
100
+ const handleRemoveValidation = (cellId) => {
101
+ handleInputChange(cellId, false);
102
+ };
103
+ const initializeTableWithDefaults = () => {
104
+ const initialData = { row0: 1, column0: 1 };
105
+ setTableData(initialData);
106
+ };
107
+ const initializeTable = (tableJson) => {
108
+ try {
109
+ const initialData = JSON.parse(tableJson);
110
+ setTableData(initialData);
111
+ }
112
+ catch (error) {
113
+ console.error("Error al inicializar la tabla:", error);
114
+ }
115
+ };
116
+ const cellBordered = {
117
+ border: "1px solid #ccc",
118
+ };
119
+ const pastelGrayBackground = {
120
+ backgroundColor: "#B69E99",
121
+ };
122
+ const cellCenteredContent = {
123
+ textAlign: "center",
124
+ verticalAlign: "middle",
125
+ };
126
+ const renderTotalHeight = () => {
127
+ const sumaFilas = getRows()
128
+ .map((row) => getTotalForRow(row.id))
129
+ .reduce((a, b) => a + b, 0);
130
+ const sumTotalFilas = sumaFilas +
131
+ (margins?.marginTop ?? 0) +
132
+ (getRows().length - 1) * (margins?.verticalGap ?? 0);
133
+ return (_jsxs("div", { className: "ml-4 inline-block", children: [_jsxs("strong", { children: ["Total alto: ", sumTotalFilas, " "] }), margins && (_jsxs(_Fragment, { children: ["(Celdas: ", sumaFilas, " + M\u00E1rgen superior: ", margins?.marginTop ?? 0, " +", " ", getRows().length - 1, " Brechas verticales:", " ", Math.round((getRows().length - 1) * (margins?.verticalGap ?? 0)), ")"] }))] }));
134
+ };
135
+ const renderTotalWidth = () => {
136
+ const cols = getCols();
137
+ const sumaColumnas = cols
138
+ .map((col) => getTotalForColumn(col.id))
139
+ .reduce((a, b) => a + b, 0);
140
+ const sumaTotal = sumaColumnas +
141
+ (margins?.marginLeft ?? 0) +
142
+ (getCols().length - 1) * (margins?.horizontalGap ?? 0);
143
+ return (_jsxs("div", { className: "ml-4 inline-block", children: [_jsxs("strong", { children: ["Total ancho: ", sumaTotal, " "] }), margins && (_jsxs(_Fragment, { children: ["(Celdas: ", sumaColumnas, " + M\u00E1rgen izquierdo:", " ", margins?.marginLeft ?? 0, " + ", getCols().length - 1, " Brechas horizontales:", " ", Math.round((getCols().length - 1) * (margins?.horizontalGap ?? 0)), ")"] }))] }));
144
+ };
145
+ const renderHeader = () => {
146
+ const cols = getCols();
147
+ return (_jsxs("tr", { children: [_jsx("th", { className: "align-middle py-2 text-center", style: {
148
+ ...cellBordered,
149
+ ...pastelGrayBackground,
150
+ }, children: intersectionTitle ?? "" }), cols.map((col) => (_jsx("th", { className: "align-middle py-2 text-center", style: { ...cellBordered, ...pastelGrayBackground }, children: _jsxs("div", { className: "inline-flex", children: [_jsx(TextFieldWithoutValidation, { style: { maxWidth: "45%", minWidth: "45%" }, name: `column${col.id}`, defaultValue: tableData[`column${col.id}`] || 1, type: "number", onChange: (value) => handleInputChange(`column${col.id}`, value) }), col.id > 0 && (_jsx("button", { className: "bg-red-500 hover:bg-red-600 font-bold py-1 px-2 rounded ml-2", onClick: () => removeCol(col.id), children: "x" }))] }) }, col.id))), _jsx("th", { children: _jsx("button", { className: "bg-blue-500 hover:bg-blue-600 font-bold py-2 px-4 rounded", onClick: addCol, children: "+" }) })] }));
151
+ };
152
+ const renderRow = (rowId) => {
153
+ const cols = getCols();
154
+ return (_jsxs("tr", { children: [_jsx("td", { className: "align-middle", style: {
155
+ ...cellBordered,
156
+ ...pastelGrayBackground,
157
+ textOverflow: "ellipsis",
158
+ msTextOverflow: "ellipsis",
159
+ maxWidth: "200px",
160
+ }, children: _jsxs("div", { className: "inline-flex", children: [_jsx(TextFieldWithoutValidation, { style: { maxWidth: "45%", minWidth: "45%" }, name: `row${rowId}`, defaultValue: tableData[`row${rowId}`] || 1, type: "number", onChange: (value) => handleInputChange(`row${rowId}`, value) }), rowId > 0 && (_jsx("button", { className: "bg-red-500 hover:bg-red-600 font-bold py-1 px-2 rounded ml-2", onClick: () => {
161
+ removeRow(rowId);
162
+ }, children: "x" }))] }) }), cols.map((col) => {
163
+ const cellId = `cell-${rowId}-${col.id}`;
164
+ const cellValidation = tableData[cellId] === true;
165
+ if (!cellInputs)
166
+ tableData[cellId] = cellValidation;
167
+ return (_jsx("td", { id: cellId, style: { ...cellBordered, ...cellCenteredContent }, children: cellInputs ? (_jsx(TextAreaWithoutValidation, { name: cellId, defaultValue: tableData[cellId] || "", onChange: (value) => handleInputChange(cellId, value) })) : (_jsx(CheckboxWithoutValidation, { name: cellId, defaultValue: cellValidation, onChange: (value) => {
168
+ if (value) {
169
+ return handleValidation(cellId, col.id, rowId);
170
+ }
171
+ else {
172
+ handleRemoveValidation(cellId);
173
+ }
174
+ } })) }, col.id));
175
+ }), rowId === 0 && (_jsx("td", { rowSpan: getRows().length, style: { maxWidth: "100px" }, children: renderTotalHeight() }))] }, rowId));
176
+ };
177
+ const renderRows = () => {
178
+ const rows = getRows();
179
+ return rows.map((row) => renderRow(row.id));
180
+ };
181
+ // Use el "useImperativeHandle" para que el componente padre pueda acceder a los métodos deseados
182
+ React.useImperativeHandle(forwardedRef, () => ({
183
+ getTotalForRows,
184
+ getTotalForColumns,
185
+ getColumnsCount,
186
+ getRowsCount,
187
+ }));
188
+ return (_jsx("div", { className: `${className}`, children: _jsxs("table", { className: "border-collapse", children: [_jsx("thead", { children: renderHeader() }), _jsx("tbody", { children: renderRows() }), _jsx("tfoot", { children: _jsxs("tr", { children: [_jsx("td", { children: _jsx("button", { className: "bg-blue-500 hover:bg-blue-600 font-bold py-2 px-4 rounded", onClick: addRow, children: "+" }) }), _jsx("td", { colSpan: getCols().length + 1, className: "text-left align-middle", style: {
189
+ textOverflow: "ellipsis",
190
+ msTextOverflow: "ellipsis",
191
+ }, children: renderTotalWidth() })] }) })] }) }));
192
+ };
@@ -0,0 +1,196 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useEffect, useState } from "react";
3
+ import { SelectFieldWithoutValidation } from "../Form/SelectField/index.js";
4
+ import { TextFieldWithoutValidation } from "../Form/TextField/index.js";
5
+ import { CheckboxWithoutValidation } from "../Form/Checkbox/index.js";
6
+ import { createModal } from "../Modal/index.js";
7
+ import { Button } from "../Buttons/index.js";
8
+ import { useAppSelector } from "@zauru-sdk/redux";
9
+ import { generateClientUUID } from "@zauru-sdk/common";
10
+ import { LoadingInputSkeleton } from "../Skeletons/index.js";
11
+ import { WithTooltip } from "../WithTooltip/index.js";
12
+ import { TrashSvg } from "@zauru-sdk/icons";
13
+ const GenericDynamicTableErrorComponent = ({ name, formName, }) => {
14
+ const { formValidations } = useAppSelector((state) => state.formValidation);
15
+ const error = formValidations[formName ?? "-1"]?.[name ?? "-1"];
16
+ return error ? (_jsxs("p", { className: `mt-2 text-sm text-red-600 dark:text-red-500`, children: [_jsx("span", { className: "font-medium", children: "Oops!" }), " ", error] })) : (_jsx(_Fragment, {}));
17
+ };
18
+ export const GenericDynamicTable = (props) => {
19
+ const { columns, onChange, className, footerRow, defaultValue = [], thCSSProperties, thElementsClassName = "", editable = true, searcheables = [], loading = false, paginated = true, defaultItemsPerPage = 10, itemsPerPageOptions = [10, 50, 100], name, withoutBg = false, } = props;
20
+ const [tableData, setTableData] = useState(defaultValue);
21
+ const [deletedData, setDeletedData] = useState([]);
22
+ const [search, setSearch] = useState("");
23
+ const [filteredTableData, setFilteredTableData] = useState(tableData);
24
+ const [currentPage, setCurrentPage] = useState(1);
25
+ const [itemsPerPage, setItemsPerPage] = useState(defaultItemsPerPage);
26
+ useEffect(() => {
27
+ if (defaultValue.length) {
28
+ setTableData(defaultValue);
29
+ }
30
+ }, []);
31
+ useEffect(() => {
32
+ setFilteredTableData(tableData);
33
+ }, [tableData]);
34
+ useEffect(() => {
35
+ changeFilteredData();
36
+ }, [tableData, search]);
37
+ const totalPages = () => {
38
+ return Math.ceil(filteredTableData.length / itemsPerPage);
39
+ };
40
+ const addRow = () => {
41
+ const defs = {};
42
+ columns.forEach((x) => {
43
+ defs[`${x.name}`] =
44
+ x.type == "label" || x.type == "textField"
45
+ ? ""
46
+ : x.type == "selectField"
47
+ ? 0
48
+ : x.type == "checkbox"
49
+ ? false
50
+ : 0;
51
+ });
52
+ setTableData((prevData) => [
53
+ ...prevData,
54
+ { id: generateClientUUID(), ...defs },
55
+ ]);
56
+ };
57
+ const removeRow = (rowId) => {
58
+ const newDeletedData = [...deletedData];
59
+ const deletedItem = tableData?.find((x) => x.id === rowId);
60
+ if (deletedItem && !isNaN(deletedItem.id)) {
61
+ newDeletedData.push(deletedItem);
62
+ }
63
+ setDeletedData(newDeletedData);
64
+ setTableData((prevData) => prevData?.filter((x) => x.id !== rowId));
65
+ };
66
+ const handleChange = (name, value, rowId) => {
67
+ // Encontrar el índice de la fila que está cambiando
68
+ const rowIndex = tableData.findIndex((x) => x.id === rowId);
69
+ // Crear una copia del objeto en esa fila
70
+ const updatedRow = { ...tableData[rowIndex], [name]: value };
71
+ // Copiar todo el array
72
+ const updatedData = [...tableData];
73
+ // Reemplazar el objeto en la fila que cambió
74
+ updatedData[rowIndex] = updatedRow;
75
+ // Actualizar el estado con el nuevo array
76
+ setTableData(updatedData);
77
+ onChange && onChange(updatedData);
78
+ };
79
+ const renderHeader = () => (_jsxs("tr", { style: { ...thCSSProperties }, children: [columns.map((column, index) => {
80
+ const ancho = column.width ?? (editable ? 94 : 100) / (columns.length ?? 1);
81
+ return (_jsx("th", { className: `text-left align-middle p-2 ${thElementsClassName}`, style: { width: `${ancho}%` }, children: column.label }, index));
82
+ }), editable && _jsx("th", { style: { width: "4%" } })] }));
83
+ const renderRow = (rowData, index) => {
84
+ return (_jsxs("tr", { className: index % 2 === 0 ? `${withoutBg ? "" : "bg-gray-200"}` : "", children: [columns.map((column) => {
85
+ if (loading) {
86
+ return (_jsx("td", { className: "align-middle p-1", children: _jsx(LoadingInputSkeleton, {}) }, `${rowData.id}-${column.name}`));
87
+ }
88
+ const tempVal = rowData[column.name];
89
+ const defaultVal = column.type === "selectField"
90
+ ? column.options?.find((x) => x.value === tempVal)
91
+ : tempVal;
92
+ if (column.type === "label") {
93
+ return (_jsx("td", { className: "align-middle p-1", children: _jsx("div", { children: defaultVal }) }, `${rowData.id}-${column.name}`));
94
+ }
95
+ const FieldComponent = column.type === "textField"
96
+ ? TextFieldWithoutValidation
97
+ : column.type === "checkbox"
98
+ ? CheckboxWithoutValidation
99
+ : SelectFieldWithoutValidation;
100
+ const setTableValue = (columnName, newValue) => {
101
+ setTableData((prevState) => {
102
+ // Encontrar el índice de la fila que está cambiando
103
+ const rowIndex = prevState.findIndex((x) => x.id === rowData.id);
104
+ // Crear una copia del objeto en esa fila
105
+ const updatedRow = {
106
+ ...prevState[rowIndex],
107
+ [columnName]: newValue,
108
+ };
109
+ // Copiar todo el array
110
+ const updatedData = [...prevState];
111
+ // Reemplazar el objeto en la fila que cambió
112
+ updatedData[rowIndex] = updatedRow;
113
+ return updatedData;
114
+ });
115
+ };
116
+ return (_jsx("td", { className: "align-middle p-1", children: column.loadingOptions ? (_jsx(LoadingInputSkeleton, {})) : (_jsx(FieldComponent, {
117
+ //name={column.name}
118
+ type: column.textFieldType, integer: !!column.integer, disabled: column.disabled, isClearable: true, onChange: (value) => {
119
+ const sendValue = value?.value ?? value;
120
+ handleChange(column.name, sendValue, rowData.id);
121
+ column.onChange &&
122
+ column.onChange(rowData, sendValue, setTableValue);
123
+ }, defaultValue: defaultVal, options: column.options ?? [] }, `${rowData.id}-${column.name}`)) }, `${rowData.id}-${column.name}`));
124
+ }), editable && (_jsx("td", { className: "align-middle w-16", children: _jsx(WithTooltip, { text: "Eliminar", children: _jsx("button", { className: "bg-red-500 hover:bg-red-600 font-bold py-1 px-2 rounded ml-2", onClick: (event) => {
125
+ event.preventDefault();
126
+ event.stopPropagation();
127
+ createModal({
128
+ title: "¿Está seguro que quiere eliminar este registro?",
129
+ description: "Una vez eliminada la información no podrá ser recuperada.",
130
+ }).then((response) => {
131
+ if (response === "OK") {
132
+ removeRow(rowData.id);
133
+ }
134
+ });
135
+ }, type: "button", children: _jsx(TrashSvg, {}) }) }) }))] }, rowData.id));
136
+ };
137
+ const renderRows = () => {
138
+ let mapeable = filteredTableData.slice((currentPage - 1) * itemsPerPage, currentPage * itemsPerPage);
139
+ if (loading) {
140
+ mapeable = [
141
+ { id: 1 },
142
+ { id: 2 },
143
+ { id: 3 },
144
+ { id: 4 },
145
+ { id: 5 },
146
+ { id: 6 },
147
+ { id: 7 },
148
+ { id: 8 },
149
+ { id: 9 },
150
+ { id: 10 },
151
+ ];
152
+ }
153
+ return mapeable.map((rowData, index) => renderRow(rowData, index));
154
+ };
155
+ const handleChangeSearch = (newSearch) => {
156
+ setSearch(newSearch);
157
+ };
158
+ const changeFilteredData = () => {
159
+ if (search) {
160
+ const filteredData = tableData.filter((rowData) => {
161
+ for (const searchable of searcheables) {
162
+ const column = columns.find((col) => col.name === searchable.value);
163
+ if (column) {
164
+ const tempVal = rowData[column.name];
165
+ const defaultVal = column.type === "selectField"
166
+ ? column.options?.find((x) => x.value === tempVal)?.label
167
+ : tempVal;
168
+ if (defaultVal
169
+ ?.toString()
170
+ .toLowerCase()
171
+ .includes(search.toLowerCase())) {
172
+ return true;
173
+ }
174
+ }
175
+ }
176
+ return false;
177
+ });
178
+ setFilteredTableData(filteredData);
179
+ }
180
+ else {
181
+ setFilteredTableData(tableData);
182
+ }
183
+ };
184
+ return (_jsxs(_Fragment, { children: [name && (_jsxs(_Fragment, { children: [_jsx(GenericDynamicTableErrorComponent, { name: name }), _jsx("input", { name: name, type: "hidden", value: JSON.stringify(tableData), hidden: true }), _jsx("input", { name: `deleted_${name}`, type: "hidden", value: JSON.stringify(deletedData), hidden: true })] })), _jsxs("div", { className: `${className}`, children: [searcheables.length > 0 && (_jsx("div", { children: _jsx(TextFieldWithoutValidation, { className: "mb-2", name: "search", title: `Buscar por: ${searcheables
185
+ .map((x) => x.label)
186
+ .join(", ")}`, onChange: handleChangeSearch, disabled: loading }) })), _jsxs("table", { className: "w-full", children: [_jsx("thead", { children: renderHeader() }), _jsx("tbody", { children: renderRows() }), footerRow && !editable ? (_jsx("tfoot", { className: "border-t-2 border-black", children: _jsx("tr", { children: Object.keys(footerRow ?? {})?.map((x, indx) => {
187
+ return (_jsx("td", { className: "align-middle", children: footerRow[x] }, indx));
188
+ }) }) })) : editable ? (_jsx("tfoot", { children: _jsx("tr", { children: _jsx("td", { className: "align-middle", children: _jsx("button", { className: "bg-blue-500 hover:bg-blue-600 font-bold py-2 px-4 rounded", onClick: (event) => {
189
+ event.preventDefault();
190
+ event.stopPropagation();
191
+ addRow();
192
+ }, type: "button", children: "+" }) }) }) })) : (_jsx(_Fragment, {}))] }), paginated && totalPages() > 1 && (_jsxs("div", { className: "flex justify-between items-center mt-4", children: [_jsxs("div", { className: "flex items-center", children: [_jsx(Button, { type: "button", disabled: currentPage === 1, onClickSave: () => setCurrentPage((old) => Math.max(old - 1, 1)), children: "Anterior" }), _jsx("span", { className: "mx-2", children: `Página ${currentPage} de ${totalPages()}` }), _jsx(Button, { type: "button", disabled: currentPage === totalPages(), onClickSave: () => setCurrentPage((old) => Math.min(old + 1, totalPages())), children: "Siguiente" })] }), _jsx("div", { children: _jsx("select", { value: itemsPerPage, onChange: (e) => {
193
+ setItemsPerPage(Number(e.target.value));
194
+ setCurrentPage(1); // resetear la página al cambiar los elementos por página
195
+ }, children: itemsPerPageOptions.map((option) => (_jsxs("option", { value: option, children: [option, " elementos por p\u00E1gina"] }, option))) }) })] }))] })] }));
196
+ };
@@ -0,0 +1,4 @@
1
+ export * from "./BasicPrintDynamicTable.js";
2
+ export * from "./DynamicPrintTable.js";
3
+ export * from "./DynamicTable.js";
4
+ export * from "./GenericDynamicTable.js";
@@ -0,0 +1,16 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { ConnectionState } from "./../ConnectionState/index.js";
3
+ const COLORS = {
4
+ purple: "bg-purple-500",
5
+ pink: "bg-pink-500",
6
+ indigo: "bg-indigo-500",
7
+ cyan: "bg-cyan-500",
8
+ slate: "bg-slate-500",
9
+ green: "bg-green-500",
10
+ red: "bg-red-500",
11
+ sky: "bg-sky-500",
12
+ };
13
+ export const Footer = ({ href, selectedColor, showConnection = false, }) => {
14
+ const color = COLORS[selectedColor];
15
+ return (_jsx("footer", { className: `inset-x-0 bottom-0 px-2 py-[20px] ${color}`, children: _jsxs("div", { className: "px-4 mx-auto flex flex-wrap items-center justify-center", children: [_jsxs("p", { className: "text-white text-[1.2rem]", children: [`Creado en `, " ", _jsx("a", { href: href, children: "Zauru" }), " ", `con ❤️ ${new Date().getFullYear()} v.3.2`] }), showConnection && (_jsx("div", { className: "ml-5", children: _jsx(ConnectionState, {}) }))] }) }));
16
+ };
@@ -0,0 +1 @@
1
+ export * from "./Footer.js";
@@ -0,0 +1,34 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useAppSelector } from "@zauru-sdk/redux";
3
+ import { useEffect, useState } from "react";
4
+ export const CheckboxWithoutValidation = (props) => {
5
+ const { id, name, defaultValue = false, onChange, disabled = false, error, label, } = props;
6
+ const [checked, setChecked] = useState(defaultValue);
7
+ useEffect(() => {
8
+ setChecked(defaultValue);
9
+ }, [defaultValue]);
10
+ const handleInputChange = (event) => {
11
+ const isChecked = event.target.checked;
12
+ if (onChange) {
13
+ const result = onChange(isChecked, event);
14
+ if (result?.stopUIChange) {
15
+ return;
16
+ }
17
+ }
18
+ setChecked(isChecked);
19
+ };
20
+ const color = error ? "red" : "gray";
21
+ const borderColor = disabled ? "border-gray-300" : `border-${color}-500`;
22
+ const inputComponent = (_jsx("input", { type: "checkbox", id: id ?? name, name: name, checked: checked, onChange: handleInputChange, className: `form-checkbox h-4 w-4 text-indigo-600 ${borderColor} focus:border-indigo-500 focus:ring-indigo-500`, disabled: disabled }));
23
+ if (!error && !label) {
24
+ return inputComponent;
25
+ }
26
+ return (_jsxs("div", { className: "col-span-6 sm:col-span-3", children: [_jsxs("div", { className: `flex items-center ${borderColor}`, children: [inputComponent, label && (_jsx("label", { htmlFor: id ?? name, className: `ml-2 block text-sm font-medium text-${color}-700 dark:text-${color}-500`, children: label }))] }), error && (_jsxs("p", { className: `mt-2 text-sm text-${color}-600 dark:text-${color}-500`, children: [_jsx("span", { className: "font-medium", children: "Oops!" }), " ", error] }))] }));
27
+ };
28
+ //<reference> https://tailwindui.com/components/application-ui/forms/form-layouts
29
+ export const CheckBox = (props) => {
30
+ const { formValidations } = useAppSelector((state) => state.formValidation);
31
+ const error = formValidations[props.formName ?? "-1"]?.[props.name ?? "-1"];
32
+ props = { ...props, error };
33
+ return _jsx(CheckboxWithoutValidation, { ...props });
34
+ };
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { CheckboxWithoutValidation } from "../Checkbox/index.js";
3
+ export const Checklist = ({ items, onChange }) => {
4
+ const handleCheckboxChange = (name, value) => {
5
+ if (onChange) {
6
+ onChange(name, value);
7
+ }
8
+ };
9
+ return (_jsx("div", { children: items.map((item) => (_jsx(CheckboxWithoutValidation, { ...item, onChange: (value) => handleCheckboxChange(item.name, value) }, item.id))) }));
10
+ };
@@ -0,0 +1,31 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useEffect, useState } from "react";
3
+ import { CalendarIconSVG, CloseSvgIcon, IdeaIconSVG } from "@zauru-sdk/icons";
4
+ import { useAppSelector } from "@zauru-sdk/redux";
5
+ export const FormDatePickerWithoutValidation = (props) => {
6
+ const { id, name, title, defaultValue = "", hint, helpText, onChange, tabIndex, error, disabled = false, className = "", isClearable = false, } = props;
7
+ const [value, setValue] = useState(defaultValue);
8
+ const [showTooltip, setShowTooltip] = useState(false);
9
+ const color = error ? "red" : "gray";
10
+ const isReadOnly = disabled;
11
+ const bgColor = isReadOnly ? "bg-gray-200" : `bg-${color}-50`;
12
+ const textColor = isReadOnly ? "text-gray-500" : `text-${color}-500`;
13
+ const borderColor = isReadOnly ? "border-gray-300" : `border-${color}-200`;
14
+ useEffect(() => {
15
+ setValue(defaultValue);
16
+ }, [defaultValue]);
17
+ const clearValue = () => {
18
+ setValue("");
19
+ onChange && onChange("");
20
+ };
21
+ return (_jsxs(_Fragment, { children: [title && (_jsx("label", { htmlFor: error ? `${name}-error` : `${name}-success`, className: `block text-sm font-medium ${textColor} ${className}`, children: title })), _jsxs("div", { className: "flex relative items-center", children: [_jsx("div", { className: "absolute left-0 flex items-center pl-3 pointer-events-none", children: _jsx(CalendarIconSVG, {}) }), _jsx("input", { id: id, name: name, tabIndex: tabIndex, type: "date", onChange: (e) => {
22
+ setValue(e.target.value);
23
+ onChange && onChange(e.target.value);
24
+ }, value: value ?? "", pattern: "\\d{4}-\\d{2}-\\d{2}", className: `${bgColor} ${borderColor} ${textColor} text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full pl-10 p-2.5` }), value && isClearable && (_jsx("button", { type: "button", onClick: clearValue, className: "absolute right-0 mr-10", children: _jsx(CloseSvgIcon, {}) })), helpText && (_jsx("div", { className: "flex items-center relative ml-3", children: _jsxs("div", { className: "relative cursor-pointer", onMouseEnter: () => setShowTooltip(true), onMouseLeave: () => setShowTooltip(false), children: [_jsx(IdeaIconSVG, {}), showTooltip && (_jsx("div", { className: "absolute -left-48 top-0 mt-8 p-2 bg-white border rounded shadow text-black", children: helpText }))] }) }))] }), error && (_jsxs("p", { className: `mt-2 text-sm text-${color}-600 dark:text-${color}-500`, children: [_jsx("span", { className: "font-medium", children: "Oops!" }), " ", error] })), !error && hint && (_jsx("p", { className: `mt-2 italic text-sm text-${color}-500 dark:text-${color}-400`, children: hint }))] }));
25
+ };
26
+ export const FormDatePicker = (props) => {
27
+ const { formValidations } = useAppSelector((state) => state.formValidation);
28
+ const error = formValidations[props.formName ?? "-1"]?.[props.name ?? "-1"];
29
+ props = { ...props, error };
30
+ return _jsx(FormDatePickerWithoutValidation, { ...props });
31
+ };