pkg-components
Version:
40 lines (34 loc) • 1.73 kB
text/typescript
/**
* 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(', ')
}