npm-pkg-hook 1.4.2 → 1.4.4
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/package.json +1 -1
- package/src/hooks/index.js +1 -0
- package/src/hooks/useChartData/index.js +1 -2
- package/src/hooks/useDessert/index.js +23 -5
- package/src/hooks/useDessertWithPrice/index.js +327 -0
- package/src/hooks/useDessertWithPrice/queries.js +18 -0
- package/src/hooks/useProductsFood/index.js +2 -2
- package/src/hooks/useProductsFood/queriesStore.js +0 -18
- package/src/hooks/useRoads/queries.js +1 -1
- package/src/hooks/useSales/index.js +37 -34
- package/src/hooks/useUpdateMultipleExtProductFoods/index.js +17 -0
- package/src/hooks/useUpdateMultipleExtProductFoods/queries.js +19 -0
- package/src/services/index.js +0 -0
- package/src/utils/index.js +29 -2
package/package.json
CHANGED
package/src/hooks/index.js
CHANGED
|
@@ -14,6 +14,7 @@ export * from './usePushNotifications'
|
|
|
14
14
|
export * from './useLocationManager'
|
|
15
15
|
export * from './useFingerprintjs'
|
|
16
16
|
export * from './useCountries'
|
|
17
|
+
export * from './useDessertWithPrice'
|
|
17
18
|
export * from './generateStoreURL'
|
|
18
19
|
export * from './useCreateStorePendingToRegister'
|
|
19
20
|
export * from './useDepartments'
|
|
@@ -5,9 +5,8 @@ import { GET_ALL_SALES } from '../useReport/queries'
|
|
|
5
5
|
export * from './useChartDataAllOrders'
|
|
6
6
|
|
|
7
7
|
export const useChartData = ({ year }) => {
|
|
8
|
-
// Construcción del nuevo array:
|
|
9
8
|
const { data, loading } = useQuery(GET_ALL_SALES)
|
|
10
|
-
const [chartType, setChartType] = useState('
|
|
9
|
+
const [chartType, setChartType] = useState('line')
|
|
11
10
|
const [chartTypeYear, setChartTypeYear] = useState(new Date().getFullYear())
|
|
12
11
|
const [asFilter, setFilter] = useState(false)
|
|
13
12
|
const [newResult, setNewResult] = useState([])
|
|
@@ -17,6 +17,10 @@ export const useDessert = ({
|
|
|
17
17
|
initialData = null,
|
|
18
18
|
sendNotification = () => { }
|
|
19
19
|
}) => {
|
|
20
|
+
const [selectedExtra, setSelectedExtra] = useState({})
|
|
21
|
+
const [openModalEditExtra, setOpenModalEditExtra] = useState(false)
|
|
22
|
+
const [selectedItem, setSelectedItem] = useState({})
|
|
23
|
+
|
|
20
24
|
// Initialize state variables using the useState hook
|
|
21
25
|
const [setCheck, setChecker] = useState({
|
|
22
26
|
exState: false
|
|
@@ -202,8 +206,24 @@ export const useDessert = ({
|
|
|
202
206
|
console.error(error)
|
|
203
207
|
}
|
|
204
208
|
}
|
|
205
|
-
const [selectedItem, setSelectedItem] = useState({})
|
|
206
209
|
|
|
210
|
+
/**
|
|
211
|
+
* Edits a single item within a list.
|
|
212
|
+
*
|
|
213
|
+
* The `editOneItem` function is responsible for editing the title of a specific item in a list.
|
|
214
|
+
* It first updates the state of the selected item, then searches for the item in the current list
|
|
215
|
+
* using its ID, and compares the existing title with the new title provided. If the title is
|
|
216
|
+
* different and not null, it makes an API call (`editExtFoodSubsOptional`) to update the
|
|
217
|
+
* title in the database. If the update is successful, a success notification is sent, and
|
|
218
|
+
* the local state is updated to reflect the changes in the item. The function handles errors
|
|
219
|
+
* internally and logs them to the console.
|
|
220
|
+
*
|
|
221
|
+
* @param {Object} params - Parameters for editing an item.
|
|
222
|
+
* @param {string} params.listID - The ID of the list containing the item to be edited.
|
|
223
|
+
* @param {string} params.id - The ID of the specific item to be edited.
|
|
224
|
+
* @param {string|null} [params.title=null] - The new title for the item. If null, no
|
|
225
|
+
* update is performed.
|
|
226
|
+
*/
|
|
207
227
|
const editOneItem = ({
|
|
208
228
|
listID = '',
|
|
209
229
|
id = '',
|
|
@@ -214,7 +234,7 @@ export const useDessert = ({
|
|
|
214
234
|
return { listID, id }
|
|
215
235
|
})
|
|
216
236
|
const currentList = data.lists[listID]
|
|
217
|
-
const findItem = currentList?.cards?.find(item => item.id === id)
|
|
237
|
+
const findItem = currentList?.cards?.find(item => { return item.id === id })
|
|
218
238
|
const checkDifferentText = findItem?.title !== title
|
|
219
239
|
if (title && checkDifferentText) {
|
|
220
240
|
editExtFoodSubsOptional({
|
|
@@ -228,7 +248,7 @@ export const useDessert = ({
|
|
|
228
248
|
const { success } = editExtFoodSubsOptional || { success: false }
|
|
229
249
|
if (success) {
|
|
230
250
|
sendNotification({
|
|
231
|
-
description: 'El sub item actualizado con
|
|
251
|
+
description: 'El sub item actualizado con éxito',
|
|
232
252
|
title: 'Actualizado',
|
|
233
253
|
backgroundColor: 'success'
|
|
234
254
|
})
|
|
@@ -259,8 +279,6 @@ export const useDessert = ({
|
|
|
259
279
|
console.error(error)
|
|
260
280
|
}
|
|
261
281
|
}
|
|
262
|
-
const [selectedExtra, setSelectedExtra] = useState({})
|
|
263
|
-
const [openModalEditExtra, setOpenModalEditExtra] = useState(false)
|
|
264
282
|
|
|
265
283
|
const updateListById = (listId, updatedFields) => {
|
|
266
284
|
setData((prevData) => {
|
|
@@ -0,0 +1,327 @@
|
|
|
1
|
+
import { useCallback, useEffect, useMemo, useRef, useState, createRef } from 'react'
|
|
2
|
+
import { useUpdateMultipleExtProductFoods } from '../useUpdateMultipleExtProductFoods'
|
|
3
|
+
import { useMutation } from '@apollo/client'
|
|
4
|
+
import { DELETE_EXTRA_PRODUCTS, EDIT_EXTRA_PRODUCT_FOODS } from './queries'
|
|
5
|
+
|
|
6
|
+
export const useDessertWithPrice = ({
|
|
7
|
+
dataExtra = [],
|
|
8
|
+
sendNotification = () => { },
|
|
9
|
+
setAlertBox = () => { }
|
|
10
|
+
} = {}) => {
|
|
11
|
+
const [selected, setSelected] = useState({
|
|
12
|
+
loading: false,
|
|
13
|
+
exPid: null
|
|
14
|
+
})
|
|
15
|
+
const [editExtraProductFoods] = useMutation(EDIT_EXTRA_PRODUCT_FOODS)
|
|
16
|
+
|
|
17
|
+
const initialLine = useMemo(() => {
|
|
18
|
+
return {
|
|
19
|
+
extraName: '',
|
|
20
|
+
extraPrice: '',
|
|
21
|
+
exState: false
|
|
22
|
+
}
|
|
23
|
+
}, [])
|
|
24
|
+
|
|
25
|
+
const initialLineItems = useMemo(() => {
|
|
26
|
+
return {
|
|
27
|
+
Lines: [
|
|
28
|
+
{
|
|
29
|
+
extraName: '',
|
|
30
|
+
extraPrice: '',
|
|
31
|
+
exState: false
|
|
32
|
+
},
|
|
33
|
+
(initialLine)
|
|
34
|
+
]
|
|
35
|
+
}
|
|
36
|
+
}, [initialLine])
|
|
37
|
+
const transformedData = dataExtra?.map(item => ({
|
|
38
|
+
extraName: item.extraName || '',
|
|
39
|
+
extraPrice: item?.extraPrice?.toString() || '', // Convierte a string si es necesario
|
|
40
|
+
exState: !!item.exState,
|
|
41
|
+
forEdit: true,
|
|
42
|
+
...item
|
|
43
|
+
}))
|
|
44
|
+
const [LineItems, setLine] = useState(
|
|
45
|
+
Array.isArray(dataExtra) && dataExtra.length > 0 ? { Lines: transformedData } : initialLineItems
|
|
46
|
+
)
|
|
47
|
+
useEffect(() => {
|
|
48
|
+
setLine(Array.isArray(dataExtra) && dataExtra.length > 0 ? { Lines: transformedData } : initialLineItems)
|
|
49
|
+
}, [dataExtra.length])
|
|
50
|
+
|
|
51
|
+
const inputRefs = useRef(LineItems.Lines.map(() => createRef()))
|
|
52
|
+
|
|
53
|
+
const handleSelect = (item, index) => {
|
|
54
|
+
try {
|
|
55
|
+
const { exPid } = item || {}
|
|
56
|
+
setSelected({ exPid, loading: false })
|
|
57
|
+
if (inputRefs?.current[index]) {
|
|
58
|
+
inputRefs.current[index].current.focus()
|
|
59
|
+
}
|
|
60
|
+
} catch (error) {
|
|
61
|
+
console.log(error)
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
useEffect(() => {
|
|
66
|
+
// Asegurándote de que las referencias se actualicen si LineItems cambia
|
|
67
|
+
inputRefs.current = LineItems.Lines.map((_, i) => inputRefs.current[i] || createRef())
|
|
68
|
+
}, [LineItems])
|
|
69
|
+
const handleCleanLines = useCallback(() => {
|
|
70
|
+
setLine(initialLineItems)
|
|
71
|
+
}, [initialLineItems])
|
|
72
|
+
|
|
73
|
+
const [updateMultipleExtProductFoods, { loading }] = useUpdateMultipleExtProductFoods({ handleCleanLines: () => { } })
|
|
74
|
+
/**
|
|
75
|
+
* Handles the addition of two new lines to the Lines array in LineItems state.
|
|
76
|
+
*/
|
|
77
|
+
const handleAdd = useCallback(() => {
|
|
78
|
+
try {
|
|
79
|
+
// Ensure that LineItems and initialLine are not null or undefined
|
|
80
|
+
if (!LineItems || !initialLine) {
|
|
81
|
+
throw new Error('Han ocurrido un error.')
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// Ensure that LineItems.Lines is an array
|
|
85
|
+
if (!Array.isArray(LineItems.Lines)) {
|
|
86
|
+
throw new Error('Han ocurrido un error.')
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// Clone the existing Lines array and add two new objects (clones of initialLine) to it
|
|
90
|
+
const Lines = [...LineItems.Lines, { ...initialLine }]
|
|
91
|
+
|
|
92
|
+
// Update the LineItems state with the new Lines array
|
|
93
|
+
setLine((prevLineItems) => { return { ...prevLineItems, Lines } })
|
|
94
|
+
} catch (error) {
|
|
95
|
+
sendNotification({
|
|
96
|
+
title: error.message,
|
|
97
|
+
description: 'Error',
|
|
98
|
+
backgroundColor: 'error'
|
|
99
|
+
})
|
|
100
|
+
}
|
|
101
|
+
}, [LineItems, initialLine, setLine])
|
|
102
|
+
|
|
103
|
+
const handleFocusChange = (index) => {
|
|
104
|
+
const lastItem = LineItems.Lines.length - 1
|
|
105
|
+
if (lastItem === index) {
|
|
106
|
+
handleAdd()
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Handles changes in line items, updating the state accordingly.
|
|
112
|
+
* @param {number} index - The index of the line item being updated.
|
|
113
|
+
* @param {string} name - The name of the attribute being changed.
|
|
114
|
+
* @param {any} value - The new value of the attribute.
|
|
115
|
+
*/
|
|
116
|
+
const handleLineChange = (index, name, value) => {
|
|
117
|
+
const newLines = LineItems.Lines.map((line, i) => {
|
|
118
|
+
if (i !== index) return { ...line }
|
|
119
|
+
|
|
120
|
+
const newLine = { ...line }
|
|
121
|
+
|
|
122
|
+
if (name === 'extraName' || name === 'extraPrice') {
|
|
123
|
+
newLine[name] = value
|
|
124
|
+
} else if (name === 'exState') {
|
|
125
|
+
newLine[name] = value.target.checked
|
|
126
|
+
} else {
|
|
127
|
+
newLine[name] = value
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
return newLine
|
|
131
|
+
})
|
|
132
|
+
|
|
133
|
+
setLine({ ...LineItems, Lines: newLines })
|
|
134
|
+
}
|
|
135
|
+
const [deleteExtraProductFoods] = useMutation(DELETE_EXTRA_PRODUCTS)
|
|
136
|
+
|
|
137
|
+
const filterOneLine = (index) => {
|
|
138
|
+
console.log(index)
|
|
139
|
+
const Lines = LineItems?.Lines?.filter((_, i) => { return i !== index })
|
|
140
|
+
return setLine({ ...LineItems, Lines })
|
|
141
|
+
}
|
|
142
|
+
const handleRemove = async (i, exPid) => {
|
|
143
|
+
try {
|
|
144
|
+
if (exPid) {
|
|
145
|
+
const findDataExtra = dataExtra?.find(x => { return x?.exPid === exPid })
|
|
146
|
+
if (findDataExtra) {
|
|
147
|
+
const data = await deleteExtraProductFoods({
|
|
148
|
+
variables: {
|
|
149
|
+
state: 1,
|
|
150
|
+
id: exPid
|
|
151
|
+
}
|
|
152
|
+
})
|
|
153
|
+
const { success } = data?.data?.deleteextraproductfoods || {}
|
|
154
|
+
if (success) {
|
|
155
|
+
console.log(i, exPid)
|
|
156
|
+
return filterOneLine(i)
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
if (!exPid) {
|
|
161
|
+
return filterOneLine(i)
|
|
162
|
+
}
|
|
163
|
+
} catch (error) {
|
|
164
|
+
sendNotification({
|
|
165
|
+
title: 'error',
|
|
166
|
+
description: 'Ocurrió un error',
|
|
167
|
+
backgroundColor: 'error'
|
|
168
|
+
})
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
// Prepares and validates data for submission.
|
|
173
|
+
const prepareAndValidateData = useCallback((pId) => {
|
|
174
|
+
const dataArr = LineItems?.Lines?.map(({ extraPrice, exState, extraName }) => ({
|
|
175
|
+
extraPrice: parseFloat(extraPrice),
|
|
176
|
+
exState: exState === true ? 1 : 0,
|
|
177
|
+
extraName,
|
|
178
|
+
pId
|
|
179
|
+
}))
|
|
180
|
+
|
|
181
|
+
const message = 'Complete los campos vacíos'
|
|
182
|
+
const findInputEmpty = dataArr.find(({ extraName }) => extraName === '')
|
|
183
|
+
const findInputEmptyPrice = dataArr.find(({ extraPrice }) => isNaN(extraPrice) || extraPrice === '')
|
|
184
|
+
|
|
185
|
+
if (findInputEmpty || findInputEmptyPrice) {
|
|
186
|
+
setAlertBox({ message })
|
|
187
|
+
return null
|
|
188
|
+
}
|
|
189
|
+
return dataArr
|
|
190
|
+
}, [LineItems])
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* Convierte un string con números y puntos en un número entero.
|
|
194
|
+
* @param {string} str - El string a convertir.
|
|
195
|
+
* @returns {number} El número entero resultante.
|
|
196
|
+
*/
|
|
197
|
+
function stringToInt (str) {
|
|
198
|
+
try {
|
|
199
|
+
// Verifica si el string es válido
|
|
200
|
+
if (!str || typeof str !== 'string') {
|
|
201
|
+
throw new Error('Input must be a valid string.')
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
// Elimina los puntos y convierte a número
|
|
205
|
+
const num = parseInt(str.replace(/\./g, ''), 10)
|
|
206
|
+
|
|
207
|
+
// Verifica si el resultado es un número válido
|
|
208
|
+
if (isNaN(num)) {
|
|
209
|
+
throw new Error('The string must contain only numbers and dots.')
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
return num
|
|
213
|
+
} catch (_error) {
|
|
214
|
+
return 0
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
const handleEdit = async (i, exPid) => {
|
|
218
|
+
setSelected({ exPid: null, loading: true })
|
|
219
|
+
const findOneExtra = LineItems?.Lines?.find((x, i) => { return x?.exPid === exPid })
|
|
220
|
+
const { extraName, extraPrice: price } = findOneExtra || {}
|
|
221
|
+
const extraPrice = stringToInt(price)
|
|
222
|
+
const { data } = await editExtraProductFoods({
|
|
223
|
+
variables: {
|
|
224
|
+
exPid,
|
|
225
|
+
extraName,
|
|
226
|
+
extraPrice
|
|
227
|
+
},
|
|
228
|
+
update: (cache) => {
|
|
229
|
+
cache.modify({
|
|
230
|
+
fields: {
|
|
231
|
+
ExtProductFoodsAll: () => {
|
|
232
|
+
return LineItems?.Lines || []
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
})
|
|
236
|
+
}
|
|
237
|
+
})
|
|
238
|
+
if (!data?.editExtraProductFoods?.success) {
|
|
239
|
+
return sendNotification({
|
|
240
|
+
title: 'Error',
|
|
241
|
+
description: data?.editExtraProductFoods?.message || '',
|
|
242
|
+
backgroundColor: 'error'
|
|
243
|
+
})
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
if (data?.editExtraProductFoods?.success) {
|
|
247
|
+
return sendNotification({
|
|
248
|
+
title: 'Producto actualizado',
|
|
249
|
+
description: data?.editExtraProductFoods?.message || '',
|
|
250
|
+
backgroundColor: 'success'
|
|
251
|
+
})
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
function filterItemsWithValidExPid (items, pId) {
|
|
255
|
+
// Primero, filtrar los elementos basados en exPid
|
|
256
|
+
const filteredItems = items.filter(({ exPid }) => {
|
|
257
|
+
const isExPidValid = !exPid
|
|
258
|
+
return isExPidValid
|
|
259
|
+
})
|
|
260
|
+
|
|
261
|
+
// Luego, transformar los elementos filtrados
|
|
262
|
+
return filteredItems.map(({ exPid, extraPrice, exState, extraName }) => ({
|
|
263
|
+
exPid,
|
|
264
|
+
extraPrice: stringToInt(extraPrice), // Asumiendo que tienes una función stringToInt definida
|
|
265
|
+
exState: exState === true ? 1 : 0,
|
|
266
|
+
extraName,
|
|
267
|
+
pId
|
|
268
|
+
}))
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
const handleSubmit = ({ pId }) => {
|
|
272
|
+
try {
|
|
273
|
+
if (!prepareAndValidateData(pId)) return
|
|
274
|
+
const dataArr = LineItems?.Lines?.map(x => {
|
|
275
|
+
const extraPrice = stringToInt(x.extraPrice)
|
|
276
|
+
const extraName = x.extraName
|
|
277
|
+
return {
|
|
278
|
+
extraPrice,
|
|
279
|
+
exState: x.exState === true ? 1 : 0,
|
|
280
|
+
extraName,
|
|
281
|
+
pId
|
|
282
|
+
}
|
|
283
|
+
})
|
|
284
|
+
const filteredItems = filterItemsWithValidExPid(LineItems?.Lines, pId)
|
|
285
|
+
|
|
286
|
+
return updateMultipleExtProductFoods({
|
|
287
|
+
variables: {
|
|
288
|
+
inputLineItems: {
|
|
289
|
+
setData: filteredItems
|
|
290
|
+
}
|
|
291
|
+
},
|
|
292
|
+
update: (cache) => {
|
|
293
|
+
cache.modify({
|
|
294
|
+
fields: {
|
|
295
|
+
ExtProductFoodsAll: () => {
|
|
296
|
+
return dataArr
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
})
|
|
300
|
+
}
|
|
301
|
+
}).then((res) => {
|
|
302
|
+
setAlertBox({ message: 'Se ha creado correctamente', duration: 7000, success: true })
|
|
303
|
+
})
|
|
304
|
+
} catch (error) {
|
|
305
|
+
setAlertBox({ message: `${error}`, duration: 7000 })
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
const isLoading = loading
|
|
309
|
+
|
|
310
|
+
return {
|
|
311
|
+
initialLine,
|
|
312
|
+
inputRefs,
|
|
313
|
+
selected,
|
|
314
|
+
loading: isLoading,
|
|
315
|
+
initialLineItems,
|
|
316
|
+
LineItems,
|
|
317
|
+
handleCleanLines,
|
|
318
|
+
handleLineChange,
|
|
319
|
+
handleSelect,
|
|
320
|
+
handleFocusChange,
|
|
321
|
+
setLine,
|
|
322
|
+
handleEdit,
|
|
323
|
+
handleRemove,
|
|
324
|
+
handleAdd,
|
|
325
|
+
handleSubmit
|
|
326
|
+
}
|
|
327
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { gql } from '@apollo/client'
|
|
2
|
+
|
|
3
|
+
export const DELETE_EXTRA_PRODUCTS = gql`
|
|
4
|
+
mutation deleteextraproductfoods($id: ID, $state: Int){
|
|
5
|
+
deleteextraproductfoods(id: $id, state: $state){
|
|
6
|
+
success,
|
|
7
|
+
message
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
`
|
|
11
|
+
export const EDIT_EXTRA_PRODUCT_FOODS = gql`
|
|
12
|
+
mutation EditExtraProductFoods($exPid: ID, $state: Int, $extraName: String, $extraPrice: Float) {
|
|
13
|
+
editExtraProductFoods(exPid: $exPid, state: $state, extraName: $extraName, extraPrice: $extraPrice) {
|
|
14
|
+
success
|
|
15
|
+
message
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
`
|
|
@@ -75,9 +75,9 @@ export const useProductsFood = ({
|
|
|
75
75
|
export const useDeleteProductsFood = ({ sendNotification = () => { } } = {}) => {
|
|
76
76
|
const [updateProductFoods, { data, loading, error }] = useMutation(UPDATE_PRODUCT_FOOD)
|
|
77
77
|
|
|
78
|
-
const handleDelete = product => {
|
|
78
|
+
const handleDelete = async product => {
|
|
79
79
|
const { pId, pState } = product || {}
|
|
80
|
-
updateProductFoods({
|
|
80
|
+
return await updateProductFoods({
|
|
81
81
|
variables: {
|
|
82
82
|
input: {
|
|
83
83
|
pId,
|
|
@@ -435,24 +435,6 @@ export const GET_EXTRAS_PRODUCT_FOOD_SUB_OPTIONAL = gql`
|
|
|
435
435
|
}
|
|
436
436
|
`
|
|
437
437
|
|
|
438
|
-
// CREATE EXTRAS PRODUCT
|
|
439
|
-
export const UPDATE_MULTI_EXTRAS_PRODUCT_FOOD = gql`
|
|
440
|
-
mutation updateMultipleExtProductFoods(
|
|
441
|
-
$inputLineItems: ILineItemsExtraFinal
|
|
442
|
-
) {
|
|
443
|
-
updateMultipleExtProductFoods(inputLineItems: $inputLineItems) {
|
|
444
|
-
pId
|
|
445
|
-
exPid
|
|
446
|
-
exState
|
|
447
|
-
extraName
|
|
448
|
-
extraPrice
|
|
449
|
-
state
|
|
450
|
-
pDatCre
|
|
451
|
-
pDatMod
|
|
452
|
-
}
|
|
453
|
-
}
|
|
454
|
-
`
|
|
455
|
-
|
|
456
438
|
export const DELETE_ONE_PRODUCT = gql`
|
|
457
439
|
mutation deleteProducts($input: IDeleteProduct) {
|
|
458
440
|
deleteProducts(input: $input) {
|
|
@@ -26,9 +26,9 @@ import {
|
|
|
26
26
|
} from './queries'
|
|
27
27
|
import { updateExistingOrders } from '../useUpdateExistingOrders'
|
|
28
28
|
import { useGetSale } from './useGetSale'
|
|
29
|
-
import {
|
|
30
|
-
import {
|
|
31
|
-
import {
|
|
29
|
+
import { useCatWithProduct } from './../useCatWithProduct/index'
|
|
30
|
+
import { useCheckboxState } from '../useCheckbox'
|
|
31
|
+
import { useLogout } from '../useLogout'
|
|
32
32
|
export * from './useGetAllSales'
|
|
33
33
|
export { GET_ALL_COUNT_SALES } from './queries'
|
|
34
34
|
|
|
@@ -62,6 +62,8 @@ export const useSales = ({
|
|
|
62
62
|
const domain = getCurrentDomain()
|
|
63
63
|
const [loadingSale, setLoadingSale] = useState(false)
|
|
64
64
|
const [errorSale, setErrorSale] = useState(false)
|
|
65
|
+
const [onClickLogout] = useLogout({})
|
|
66
|
+
|
|
65
67
|
const [modalItem, setModalItem] = useState(false)
|
|
66
68
|
const [openCommentModal, setOpenCommentModal] = useState(false)
|
|
67
69
|
const keyToSaveData = process.env.LOCAL_SALES_STORE
|
|
@@ -74,7 +76,7 @@ export const useSales = ({
|
|
|
74
76
|
setCheckedItems,
|
|
75
77
|
handleChangeCheck
|
|
76
78
|
} = useCheckboxState(datCat, [], [])
|
|
77
|
-
|
|
79
|
+
const arr = checkedItems ? Array.from(checkedItems) : []
|
|
78
80
|
const [totalProductPrice, setTotalProductPrice] = useState(0)
|
|
79
81
|
const [showMore, setShowMore] = useState(100)
|
|
80
82
|
const [inputValue, setInputValue] = useState('')
|
|
@@ -117,6 +119,9 @@ export const useSales = ({
|
|
|
117
119
|
description: message
|
|
118
120
|
})
|
|
119
121
|
setAlertBox({ message, type: 'success' })
|
|
122
|
+
if (message === 'Token expired') {
|
|
123
|
+
onClickLogout()
|
|
124
|
+
}
|
|
120
125
|
setOpenCurrentSale(data?.registerSalesStore?.Response.success)
|
|
121
126
|
},
|
|
122
127
|
onError: (error) => {
|
|
@@ -188,12 +193,12 @@ export const useSales = ({
|
|
|
188
193
|
return setSearch(e.target.value)
|
|
189
194
|
}
|
|
190
195
|
const handleChange = (e, error) => {
|
|
191
|
-
const { name, value } = e.target
|
|
196
|
+
const { name, value } = e.target
|
|
192
197
|
setErrors({ ...errors, [e.target.name]: error })
|
|
193
198
|
setValues((prevValues) => ({
|
|
194
199
|
...prevValues,
|
|
195
|
-
[name]: value
|
|
196
|
-
}))
|
|
200
|
+
[name]: value
|
|
201
|
+
}))
|
|
197
202
|
}
|
|
198
203
|
const onChangeInput = (e) => {
|
|
199
204
|
return setValuesDates({ ...valuesDates, [e.target.name]: e.target.value })
|
|
@@ -462,15 +467,15 @@ export const useSales = ({
|
|
|
462
467
|
return { ...obj, ExtProductFoodsSubOptionalAll: filteredSubOptions }
|
|
463
468
|
})
|
|
464
469
|
.filter((obj) => obj !== null) // Elimine todos los objetos nulos del arreglo
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
470
|
+
const filteredDataExtra = dataExtra?.filter((p) => p?.quantity !== undefined && p?.quantity !== 0)
|
|
471
|
+
if (product?.PRODUCT?.pId) {
|
|
472
|
+
dispatch({
|
|
473
|
+
type: 'PUT_EXTRA_PRODUCTS_AND_OPTIONAL_PRODUCT',
|
|
474
|
+
payload: product.PRODUCT.pId,
|
|
475
|
+
dataOptional: filteredDataOptional,
|
|
476
|
+
dataExtra: filteredDataExtra
|
|
477
|
+
})
|
|
478
|
+
}
|
|
474
479
|
} catch (_error) {
|
|
475
480
|
return sendNotification({
|
|
476
481
|
title: 'Error',
|
|
@@ -480,34 +485,33 @@ export const useSales = ({
|
|
|
480
485
|
}
|
|
481
486
|
}
|
|
482
487
|
|
|
483
|
-
function handleIncrementExtra({ Adicionales, index }) {
|
|
484
|
-
const { pId } = product?.PRODUCT || {}
|
|
485
|
-
const exPid = Adicionales
|
|
488
|
+
function handleIncrementExtra ({ Adicionales, index }) {
|
|
489
|
+
const { pId } = product?.PRODUCT || {}
|
|
490
|
+
const exPid = Adicionales?.exPid || null
|
|
486
491
|
|
|
487
492
|
if (exPid && pId) {
|
|
488
493
|
const newExtra = dataExtra.map((producto) => {
|
|
489
494
|
if (exPid === producto.exPid) {
|
|
490
|
-
const initialQuantity = producto?.quantity ? producto?.quantity : 0
|
|
491
|
-
const newQuantity = initialQuantity + 1
|
|
492
|
-
const newExtraPrice = producto.extraPrice * newQuantity
|
|
495
|
+
const initialQuantity = producto?.quantity ? producto?.quantity : 0
|
|
496
|
+
const newQuantity = initialQuantity + 1
|
|
497
|
+
const newExtraPrice = producto.extraPrice * newQuantity
|
|
493
498
|
|
|
494
499
|
return {
|
|
495
500
|
...producto,
|
|
496
501
|
quantity: newQuantity,
|
|
497
|
-
newExtraPrice
|
|
498
|
-
}
|
|
502
|
+
newExtraPrice
|
|
503
|
+
}
|
|
499
504
|
}
|
|
500
|
-
return producto
|
|
501
|
-
})
|
|
505
|
+
return producto
|
|
506
|
+
})
|
|
502
507
|
|
|
503
|
-
setDataExtra(newExtra)
|
|
508
|
+
setDataExtra(newExtra)
|
|
504
509
|
}
|
|
505
510
|
}
|
|
506
511
|
|
|
507
|
-
|
|
508
512
|
function handleDecrementExtra ({ Adicionales, index }) {
|
|
509
513
|
const { pId } = product?.PRODUCT || {}
|
|
510
|
-
const exPid = Adicionales
|
|
514
|
+
const exPid = Adicionales?.exPid || null
|
|
511
515
|
|
|
512
516
|
// Comprobar que el objeto Adicionales existe en dataExtra
|
|
513
517
|
const extraIndex = dataExtra.findIndex((extra) => extra.exPid === exPid)
|
|
@@ -823,8 +827,7 @@ export const useSales = ({
|
|
|
823
827
|
const client = useApolloClient()
|
|
824
828
|
const { getOnePedidoStore } = useGetSale()
|
|
825
829
|
const handleSubmit = () => {
|
|
826
|
-
|
|
827
|
-
if (errors?.change || errors?.valueDelivery) {
|
|
830
|
+
if (errors?.change || errors?.valueDelivery) {
|
|
828
831
|
return sendNotification({
|
|
829
832
|
title: 'error',
|
|
830
833
|
backgroundColor: 'warning',
|
|
@@ -834,12 +837,12 @@ export const useSales = ({
|
|
|
834
837
|
setLoadingSale(true)
|
|
835
838
|
const code = RandomCode(10)
|
|
836
839
|
setCode(code)
|
|
837
|
-
function convertirAEntero(cadena) {
|
|
840
|
+
function convertirAEntero (cadena) {
|
|
838
841
|
if (typeof cadena === 'string') {
|
|
839
|
-
const numeroEntero = parseInt(cadena?.replace('.', ''))
|
|
842
|
+
const numeroEntero = parseInt(cadena?.replace('.', ''))
|
|
840
843
|
return numeroEntero
|
|
841
844
|
}
|
|
842
|
-
return cadena ||
|
|
845
|
+
return cadena || 0
|
|
843
846
|
}
|
|
844
847
|
return registerSalesStore({
|
|
845
848
|
variables: {
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { useMutation } from '@apollo/client'
|
|
2
|
+
import { UPDATE_MULTI_EXTRAS_PRODUCT_FOOD } from './queries'
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Custom hook para manejar la actualización de múltiples extras de productos alimenticios.
|
|
6
|
+
* @param {Function} cleanLines - Función para limpiar líneas después de completar la mutación.
|
|
7
|
+
* @returns {Array} Retorna un array con la función de mutación y el estado de carga.
|
|
8
|
+
*/
|
|
9
|
+
export const useUpdateMultipleExtProductFoods = ({ cleanLines = () => { } } = {}) => {
|
|
10
|
+
const [updateMultipleExtProductFoods, { loading }] = useMutation(UPDATE_MULTI_EXTRAS_PRODUCT_FOOD, {
|
|
11
|
+
onCompleted: () => {
|
|
12
|
+
cleanLines()
|
|
13
|
+
}
|
|
14
|
+
})
|
|
15
|
+
|
|
16
|
+
return [updateMultipleExtProductFoods, { loading }]
|
|
17
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { gql } from '@apollo/client'
|
|
2
|
+
|
|
3
|
+
// CREATE EXTRAS PRODUCT
|
|
4
|
+
export const UPDATE_MULTI_EXTRAS_PRODUCT_FOOD = gql`
|
|
5
|
+
mutation updateMultipleExtProductFoods(
|
|
6
|
+
$inputLineItems: ILineItemsExtraFinal
|
|
7
|
+
) {
|
|
8
|
+
updateMultipleExtProductFoods(inputLineItems: $inputLineItems) {
|
|
9
|
+
pId
|
|
10
|
+
exPid
|
|
11
|
+
exState
|
|
12
|
+
extraName
|
|
13
|
+
extraPrice
|
|
14
|
+
state
|
|
15
|
+
pDatCre
|
|
16
|
+
pDatMod
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
`
|
|
File without changes
|
package/src/utils/index.js
CHANGED
|
@@ -37,7 +37,7 @@ export const validationSubmitHooks = elements => {
|
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
export const getCurrentDomain = () => {
|
|
40
|
-
return typeof window !== 'undefined' && window.location.hostname
|
|
40
|
+
return typeof window !== 'undefined' && window.location.hostname
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
export function RandomCode (length) {
|
|
@@ -70,8 +70,35 @@ export const updateCacheMod = async ({ cache, query, nameFun, dataNew, type, id
|
|
|
70
70
|
const initialState = {}
|
|
71
71
|
export const initializer = (initialValue = initialState) => { return JSON.parse(localStorage.getItem(process.env.LOCAL_SALES_STORE)) || initialValue }
|
|
72
72
|
|
|
73
|
-
|
|
73
|
+
/**
|
|
74
|
+
* Formatea un valor como un número siguiendo el formato de Colombia.
|
|
75
|
+
* Si el valor no es un número válido, lo devuelve tal como está.
|
|
76
|
+
*
|
|
77
|
+
* @param {string|number} value - El valor a formatear.
|
|
78
|
+
* @returns {string} El valor formateado como número o el valor original si no es numérico.
|
|
79
|
+
*/
|
|
80
|
+
export const numberFormat = value => {
|
|
81
|
+
// Verifica si el valor es nulo o indefinido, devolviendo el mismo valor.
|
|
82
|
+
if (value === null || value === undefined) {
|
|
83
|
+
return value
|
|
84
|
+
}
|
|
74
85
|
|
|
86
|
+
// Convierte el valor a string y elimina puntos.
|
|
87
|
+
const stringValue = `${value}`.replace(/\./g, '')
|
|
88
|
+
|
|
89
|
+
// Intenta convertir a número y formatear si es posible.
|
|
90
|
+
const numberValue = parseFloat(stringValue)
|
|
91
|
+
if (!isNaN(numberValue)) {
|
|
92
|
+
return new Intl.NumberFormat('es-CO', {
|
|
93
|
+
minimumFractionDigits: 0,
|
|
94
|
+
style: 'decimal',
|
|
95
|
+
maximumFractionDigits: 0
|
|
96
|
+
}).format(numberValue)
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// Devuelve el valor original si no es un número.
|
|
100
|
+
return value
|
|
101
|
+
}
|
|
75
102
|
/**
|
|
76
103
|
*
|
|
77
104
|
* @param {Object} data objeto a filtrar
|