@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.
- package/CHANGELOG.md +8 -0
- package/dist/Containers/ButtonSectionContainer.d.ts +0 -1
- package/dist/DynamicTable/DynamicPrintTable.d.ts +0 -1
- package/dist/Form/DynamicBaculoForm/index.d.ts +2 -0
- package/dist/Form/FileUpload/index.d.ts +2 -1
- package/dist/Form/TimePicker/index.d.ts +0 -1
- package/dist/Form/YesNo/index.d.ts +0 -1
- package/dist/Modal/ItemModal.d.ts +1 -1
- package/dist/esm/BlockUI/BlockUI.js +1 -1
- package/dist/esm/Buttons/Button.js +7 -8
- package/dist/esm/Containers/ButtonSectionContainer.js +2 -2
- package/dist/esm/Containers/OutletContainer.js +2 -2
- package/dist/esm/DynamicTable/DynamicPrintTable.js +13 -14
- package/dist/esm/DynamicTable/GenericDynamicTable.js +1 -1
- package/dist/esm/Form/DynamicBaculoForm/index.js +21 -57
- package/dist/esm/Form/FileUpload/index.js +197 -103
- package/dist/esm/Layouts/errorLayout/index.js +3 -5
- package/dist/esm/Modal/ItemModal.js +21 -10
- package/dist/esm/Skeletons/LoadingWindow.js +8 -0
- package/package.json +6 -6
- package/src/BlockUI/BlockUI.tsx +2 -4
- package/src/Buttons/Button.tsx +28 -32
- package/src/Containers/ButtonSectionContainer.tsx +2 -5
- package/src/Containers/OutletContainer.tsx +3 -3
- package/src/DynamicTable/DynamicPrintTable.tsx +1 -4
- package/src/DynamicTable/GenericDynamicTable.tsx +1 -1
- package/src/Form/DynamicBaculoForm/index.tsx +55 -66
- package/src/Form/FileUpload/index.tsx +365 -150
- package/src/Form/TimePicker/index.tsx +0 -1
- package/src/Form/YesNo/index.tsx +0 -1
- package/src/Layouts/errorLayout/index.tsx +4 -11
- package/src/Modal/ItemModal.tsx +44 -13
- package/src/Skeletons/LoadingWindow.tsx +11 -1
package/src/Modal/ItemModal.tsx
CHANGED
|
@@ -6,7 +6,7 @@ type Item = {
|
|
|
6
6
|
item_id: string;
|
|
7
7
|
name: string;
|
|
8
8
|
code: string;
|
|
9
|
-
|
|
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">▲</span>
|
|
58
|
+
</span>
|
|
59
|
+
) : (
|
|
60
|
+
<span className="text-sm font-semibold">
|
|
61
|
+
{text.substring(0, threshold)}...{" "}
|
|
62
|
+
<span className="ml-1">▼</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.
|
|
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.
|
|
130
|
+
customPrice ?? selectedItem.unit_price
|
|
101
131
|
: // si NO es flexible, solo usamos el precio que ya tenía
|
|
102
|
-
selectedItem.
|
|
132
|
+
selectedItem.unit_price;
|
|
103
133
|
|
|
104
134
|
onClose({
|
|
105
135
|
...selectedItem,
|
|
106
136
|
quantity,
|
|
107
|
-
|
|
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={
|
|
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.
|
|
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
|
-
<
|
|
248
|
-
{item.name}
|
|
249
|
-
|
|
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-
|
|
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-
|
|
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
|