@zauru-sdk/components 2.0.202 → 2.0.203

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 (33) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/Containers/ButtonSectionContainer.d.ts +0 -1
  3. package/dist/DynamicTable/DynamicPrintTable.d.ts +0 -1
  4. package/dist/Form/DynamicBaculoForm/index.d.ts +2 -0
  5. package/dist/Form/FileUpload/index.d.ts +2 -1
  6. package/dist/Form/TimePicker/index.d.ts +0 -1
  7. package/dist/Form/YesNo/index.d.ts +0 -1
  8. package/dist/Modal/ItemModal.d.ts +1 -1
  9. package/dist/esm/BlockUI/BlockUI.js +1 -1
  10. package/dist/esm/Buttons/Button.js +7 -8
  11. package/dist/esm/Containers/ButtonSectionContainer.js +2 -2
  12. package/dist/esm/Containers/OutletContainer.js +2 -2
  13. package/dist/esm/DynamicTable/DynamicPrintTable.js +13 -14
  14. package/dist/esm/DynamicTable/GenericDynamicTable.js +1 -1
  15. package/dist/esm/Form/DynamicBaculoForm/index.js +21 -57
  16. package/dist/esm/Form/FileUpload/index.js +197 -103
  17. package/dist/esm/Layouts/errorLayout/index.js +3 -5
  18. package/dist/esm/Modal/ItemModal.js +21 -10
  19. package/dist/esm/Skeletons/LoadingWindow.js +8 -0
  20. package/package.json +6 -6
  21. package/src/BlockUI/BlockUI.tsx +2 -4
  22. package/src/Buttons/Button.tsx +28 -32
  23. package/src/Containers/ButtonSectionContainer.tsx +2 -5
  24. package/src/Containers/OutletContainer.tsx +3 -3
  25. package/src/DynamicTable/DynamicPrintTable.tsx +1 -4
  26. package/src/DynamicTable/GenericDynamicTable.tsx +1 -1
  27. package/src/Form/DynamicBaculoForm/index.tsx +55 -66
  28. package/src/Form/FileUpload/index.tsx +365 -150
  29. package/src/Form/TimePicker/index.tsx +0 -1
  30. package/src/Form/YesNo/index.tsx +0 -1
  31. package/src/Layouts/errorLayout/index.tsx +4 -11
  32. package/src/Modal/ItemModal.tsx +44 -13
  33. package/src/Skeletons/LoadingWindow.tsx +11 -1
@@ -6,7 +6,7 @@ type Item = {
6
6
  item_id: string;
7
7
  name: string;
8
8
  code: string;
9
- unitPrice: number;
9
+ unit_price: number;
10
10
  stock: number;
11
11
  currencyPrefix: string;
12
12
  imageUrl: string;
@@ -36,6 +36,36 @@ type ItemModalProps = {
36
36
  categoryViewMode?: "text" | "card";
37
37
  };
38
38
 
39
+ const ExpandableText: React.FC<{ text: string; threshold?: number }> = ({
40
+ text,
41
+ threshold = 30,
42
+ }) => {
43
+ const [expanded, setExpanded] = useState(false);
44
+ const toggleExpanded = (e: React.MouseEvent<HTMLSpanElement>) => {
45
+ e.stopPropagation();
46
+ setExpanded(!expanded);
47
+ };
48
+
49
+ if (text.length <= threshold) {
50
+ return <span>{text}</span>;
51
+ }
52
+
53
+ return (
54
+ <span onClick={toggleExpanded} style={{ cursor: "pointer" }}>
55
+ {expanded ? (
56
+ <span className="text-base font-semibold">
57
+ {text} <span className="ml-1">&#9650;</span>
58
+ </span>
59
+ ) : (
60
+ <span className="text-sm font-semibold">
61
+ {text.substring(0, threshold)}...{" "}
62
+ <span className="ml-1">&#9660;</span>
63
+ </span>
64
+ )}
65
+ </span>
66
+ );
67
+ };
68
+
39
69
  const ItemSelectionModal: React.FC<ItemModalProps> = ({
40
70
  itemList,
41
71
  onClose,
@@ -84,7 +114,7 @@ const ItemSelectionModal: React.FC<ItemModalProps> = ({
84
114
  setSelectedItem(item);
85
115
  setQuantity(1);
86
116
  // Si el ítem tiene precio flexible, inicializamos el customPrice con su precio actual
87
- setCustomPrice(item.flexiblePrice ? item.unitPrice : null);
117
+ setCustomPrice(item.flexiblePrice ? item.unit_price : null);
88
118
 
89
119
  // Forzar scroll a la parte superior del contenido, ya que antes se iniciaba el scroll desde donde se había quedado.
90
120
  if (modalContentRef.current) {
@@ -97,14 +127,14 @@ const ItemSelectionModal: React.FC<ItemModalProps> = ({
97
127
  // (5) Devolver el precio correcto
98
128
  const finalPrice = selectedItem.flexiblePrice
99
129
  ? // si el precio es flexible, tomar lo que el usuario haya ingresado (o fallback al precio original)
100
- customPrice ?? selectedItem.unitPrice
130
+ customPrice ?? selectedItem.unit_price
101
131
  : // si NO es flexible, solo usamos el precio que ya tenía
102
- selectedItem.unitPrice;
132
+ selectedItem.unit_price;
103
133
 
104
134
  onClose({
105
135
  ...selectedItem,
106
136
  quantity,
107
- unitPrice: finalPrice,
137
+ unit_price: finalPrice,
108
138
  });
109
139
  }
110
140
  };
@@ -178,7 +208,7 @@ const ItemSelectionModal: React.FC<ItemModalProps> = ({
178
208
  No se encontraron resultados.
179
209
  </p>
180
210
  ) : (
181
- filteredList.map((category) => {
211
+ filteredList.map((category, index) => {
182
212
  const isExpanded = expandedCategories[category.name];
183
213
 
184
214
  // Estilos condicionales para "text" vs. "card"
@@ -188,7 +218,7 @@ const ItemSelectionModal: React.FC<ItemModalProps> = ({
188
218
  : "text-lg font-semibold mb-2 cursor-pointer flex justify-between items-center hover:text-blue-600";
189
219
 
190
220
  return (
191
- <div key={category.name} className="mb-4">
221
+ <div key={index} className="mb-4">
192
222
  {/* Cabecera de la categoría (texto o card) */}
193
223
  <div
194
224
  className={categoryContainerClasses}
@@ -223,7 +253,7 @@ const ItemSelectionModal: React.FC<ItemModalProps> = ({
223
253
 
224
254
  return (
225
255
  <div
226
- key={item.code}
256
+ key={item.item_id}
227
257
  onClick={() => handleItemClick(item)}
228
258
  className={`border rounded-lg shadow-lg hover:shadow-xl cursor-pointer relative ${
229
259
  isPackage ? "bg-yellow-50" : ""
@@ -244,9 +274,10 @@ const ItemSelectionModal: React.FC<ItemModalProps> = ({
244
274
  : "bg-white bg-opacity-80"
245
275
  }`}
246
276
  >
247
- <h4 className="font-semibold text-sm text-center">
248
- {item.name}
249
- </h4>
277
+ <ExpandableText
278
+ text={item.name}
279
+ threshold={30}
280
+ />
250
281
  </div>
251
282
  <div
252
283
  className={`absolute bottom-0 left-0 p-2 rounded ${
@@ -327,7 +358,7 @@ const ItemSelectionModal: React.FC<ItemModalProps> = ({
327
358
  -
328
359
  </button>
329
360
  <input
330
- className="w-16 text-center border rounded text-lg"
361
+ className="w-20 text-center border rounded text-lg"
331
362
  type="number"
332
363
  min={1}
333
364
  value={quantity}
@@ -366,7 +397,7 @@ const ItemSelectionModal: React.FC<ItemModalProps> = ({
366
397
  -
367
398
  </button>
368
399
  <input
369
- className="w-16 text-center border rounded text-lg"
400
+ className="w-24 text-center border rounded text-lg"
370
401
  type="number"
371
402
  min={0}
372
403
  value={customPrice ?? 0}
@@ -1,4 +1,4 @@
1
- import React from "react";
1
+ import React, { useState, useEffect } from "react";
2
2
  import { motion } from "framer-motion";
3
3
 
4
4
  interface LoadingItem {
@@ -15,6 +15,16 @@ export const LoadingWindow: React.FC<LoadingWindowProps> = ({
15
15
  loadingItems = [],
16
16
  description = "Por favor, espere mientras se carga la página.",
17
17
  }) => {
18
+ const [hasMounted, setHasMounted] = useState(false);
19
+
20
+ useEffect(() => {
21
+ setHasMounted(true);
22
+ }, []);
23
+
24
+ if (!hasMounted) {
25
+ return null;
26
+ }
27
+
18
28
  return (
19
29
  <div className="min-h-screen bg-gray-200 flex flex-col justify-center items-center">
20
30
  <motion.div