pkg-components
Version:
63 lines (53 loc) • 2.45 kB
text/typescript
export const accepts = '.jpg, .png, .jpeg, .gif, .bmp, .tiff, .webp'
export const handleAnimation = (
direction: 'up' | 'down',
setStartAnimateUp: React.Dispatch<React.SetStateAction<string>>,
setAnimateType: React.Dispatch<React.SetStateAction<string>>
): void => {
setStartAnimateUp('')
setAnimateType('')
const delay = direction === 'up' ? 250 : 150
const animationType = direction === 'up' ? 'move-up' : 'move-down'
const startAnimation = direction === 'up' ? 'start-animate-up' : 'start-animate-down'
setTimeout(() => {
setStartAnimateUp(startAnimation)
setTimeout(() => {
setAnimateType(animationType)
setStartAnimateUp('')
}, delay)
}, 0)
}
/**
* Formats extra and optional data into a single formatted string.
* @param {Array} dataExtra - Array of extra products, each with an `extraPrice` and `extraName`.
* @param {Array} dataOptional - Array of optional products, each containing `ExtProductFoodsSubOptionalAll`.
* @returns {string} - Formatted string combining extra and optional product data.
*/
export const formatProductData = (
dataExtra: Array<{ extraPrice: number, extraName: string }>,
dataOptional: Array<{ ExtProductFoodsSubOptionalAll: Array<{ OptionalSubProName: string }> }>,
numberFormat: (value: number) => string = (value: number) => value.toLocaleString('es')
): string => {
// Create formatters
const conjunctionFormatter = new Intl.ListFormat('es', { style: 'long', type: 'conjunction' })
const unitFormatter = new Intl.ListFormat('es', { style: 'narrow', type: 'unit' })
// Format extra data
const formattedExtraData = dataExtra
.slice(0, 4)
.map(product => `${numberFormat(product?.extraPrice)}, ${product.extraName}`)
.filter(item => !(item === null))
const finalExtraFormat = formattedExtraData.length > 0
? conjunctionFormatter.format(formattedExtraData)
: ''
// Format optional data
const formattedOptionalData = dataOptional
.slice(0, 4)
.map(product => product?.ExtProductFoodsSubOptionalAll
?.map(subProduct => subProduct.OptionalSubProName)
.join(', '))
.filter(item => item !== null && item !== undefined && item !== '')
const finalOptionalFormat = formattedOptionalData.length > 0
? unitFormatter.format(formattedOptionalData)
: ''
return [finalExtraFormat, finalOptionalFormat].filter(Boolean).join(', ')
}