fix: title case campaign product names

This commit is contained in:
Cauê Faleiros
2026-06-01 09:47:35 -03:00
parent a1aa071e1d
commit fce7bbf975
2 changed files with 28 additions and 8 deletions

View File

@@ -1,9 +1,19 @@
const formatProductNameForDisplay = (name) => {
return String(name || '')
.toLocaleLowerCase('pt-BR')
.replace(/(^|[\s/-])(\p{L})/gu, (_, separator, letter) => {
return `${separator}${letter.toLocaleUpperCase('pt-BR')}`;
});
};
const formatProductList = (productNames) => {
if (productNames.length <= 2) {
return productNames.join(' e ');
const displayNames = productNames.map(formatProductNameForDisplay);
if (displayNames.length <= 2) {
return displayNames.join(' e ');
}
return `${productNames.slice(0, -1).join(', ')} e ${productNames[productNames.length - 1]}`;
return `${displayNames.slice(0, -1).join(', ')} e ${displayNames[displayNames.length - 1]}`;
};
const groupCampaignRowsByBaseProduct = (rows) => {
@@ -23,7 +33,7 @@ const mapCampaignProducts = (groups) => {
const sortedItems = [...items].sort((a, b) => String(a.nome).localeCompare(String(b.nome), 'pt-BR'));
return {
baseProduct: baseProductName,
baseProduct: formatProductNameForDisplay(baseProductName),
total_delta: sortedItems.reduce((sum, item) => sum + Number(item.delta_estoque || 0), 0),
sizes: sortedItems.map(item => ({
id: item.produto_id,
@@ -85,6 +95,7 @@ const groupCampaignRows = (rows) => {
module.exports = {
buildWhatsappCampaignPayload,
formatProductNameForDisplay,
formatProductList,
groupCampaignRows,
groupCampaignRowsByBaseProduct,