/** * 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(', ') }