From 9eabd1da8fe6af0cfdf031c9df81c45ca4a8634e Mon Sep 17 00:00:00 2001 From: Carlos Miqueo Date: Tue, 9 Dec 2025 17:37:02 -0800 Subject: [PATCH 1/3] Adds categoryMappings array to config from json file --- libs/blocks/caas-config/caas-config.js | 13 +++++++++++- libs/blocks/caas/utils.js | 20 +++++++++++++++++++ .../expectedConfigs/defaultConfig.js | 1 + 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/libs/blocks/caas-config/caas-config.js b/libs/blocks/caas-config/caas-config.js index e0b691dc0d7..e6364fcf7eb 100644 --- a/libs/blocks/caas-config/caas-config.js +++ b/libs/blocks/caas-config/caas-config.js @@ -597,12 +597,23 @@ const FilterPanel = ({ tagsData }) => { }); }; + const categoriesMappingFile = html` + <${Input} + label="Categories mapping file (optional)" + prop="categoriesMappingFile" + type="text" + value=${context.state.categoriesMappingFile}/> + `; + const FilterOptions = html` <${Input} label="Show Empty Filters" prop="filtersShowEmpty" type="checkbox" /> <${Select} label="Filter Location" prop="filterLocation" options=${defaultOptions.filterLocation} /> <${Select} label="Filter logic within each tag panel" prop="filterLogic" options=${defaultOptions.filterLogic} /> <${Select} label="Automatic or Custom Panel" prop="filterBuildPanel" options=${defaultOptions.filterBuildPanel} /> - `; + <${Input} label="Categories mapping file (optional)" type="text" + prop="categoriesMappingFile" + value=${context.state.categoriesMappingFile}/> + `; const FilterBuildPanel = html` <${FilterOptions}> diff --git a/libs/blocks/caas/utils.js b/libs/blocks/caas/utils.js index ae791dbaf29..2b60aaed9e1 100644 --- a/libs/blocks/caas/utils.js +++ b/libs/blocks/caas/utils.js @@ -517,6 +517,24 @@ const getFilterArray = async (state, country, lang, strs) => { return filters; }; +const getCategoryMappings = async (state) => { + if (!state.categoriesMappingFile) return {}; + const mappings = await fetch(state.categoriesMappingFile); + if (mappings.ok) { + const json = await mappings.json(); + const data = json.data || []; + // Convert array to object keyed by id + return data.reduce((mappings, entry) => { + mappings[entry.id] = { + label: entry.label, + items: entry.items ? entry.items.split(',').map((item) => item.trim()) : [], + }; + return mappings; + }, {}); + } + return {}; +}; + export async function getCountryAndLang({ autoCountryLang, country, language, source }) { const locales = getMetadata('caas-locales') || ''; const langFirst = getMetadata('langfirst'); @@ -839,6 +857,7 @@ export const getConfig = async (originalState, strs = {}) => { filters: await getFilterArray(state, country, language, strs), categories: await getCategoryArray(state, country, language), filterLogic: state.filterLogic, + categoryMappings: await getCategoryMappings(state) || {}, i18n: { leftPanel: { header: strs.filterLeftPanel || 'Refine Your Results', @@ -1004,6 +1023,7 @@ export const defaultState = { filterBuildPanel: 'automatic', filterLocation: 'left', filterLogic: 'or', + categoriesMappingFile: '', filters: [], filtersCustom: [], filtersShowEmpty: false, diff --git a/test/blocks/caas-config/expectedConfigs/defaultConfig.js b/test/blocks/caas-config/expectedConfigs/defaultConfig.js index a421dd39f59..4ebbff252d3 100644 --- a/test/blocks/caas-config/expectedConfigs/defaultConfig.js +++ b/test/blocks/caas-config/expectedConfigs/defaultConfig.js @@ -129,6 +129,7 @@ const defaultConfig = { showEmptyFilters: false, filters: [], filterLogic: 'or', + categoryMappings: {}, i18n: { leftPanel: { header: 'Refine Your Results', From 3ce010837362eee0f6b53a50c4ed339fae538599 Mon Sep 17 00:00:00 2001 From: Carlos Miqueo Date: Tue, 9 Dec 2025 18:10:42 -0800 Subject: [PATCH 2/3] Fixes linting errors --- libs/blocks/caas-config/caas-config.js | 8 -------- libs/blocks/caas/utils.js | 6 +++--- 2 files changed, 3 insertions(+), 11 deletions(-) diff --git a/libs/blocks/caas-config/caas-config.js b/libs/blocks/caas-config/caas-config.js index e6364fcf7eb..d423a63c31f 100644 --- a/libs/blocks/caas-config/caas-config.js +++ b/libs/blocks/caas-config/caas-config.js @@ -597,14 +597,6 @@ const FilterPanel = ({ tagsData }) => { }); }; - const categoriesMappingFile = html` - <${Input} - label="Categories mapping file (optional)" - prop="categoriesMappingFile" - type="text" - value=${context.state.categoriesMappingFile}/> - `; - const FilterOptions = html` <${Input} label="Show Empty Filters" prop="filtersShowEmpty" type="checkbox" /> <${Select} label="Filter Location" prop="filterLocation" options=${defaultOptions.filterLocation} /> diff --git a/libs/blocks/caas/utils.js b/libs/blocks/caas/utils.js index 2b60aaed9e1..49fd3dce57c 100644 --- a/libs/blocks/caas/utils.js +++ b/libs/blocks/caas/utils.js @@ -524,12 +524,12 @@ const getCategoryMappings = async (state) => { const json = await mappings.json(); const data = json.data || []; // Convert array to object keyed by id - return data.reduce((mappings, entry) => { - mappings[entry.id] = { + return data.reduce((entries, entry) => { + entries[entry.id] = { label: entry.label, items: entry.items ? entry.items.split(',').map((item) => item.trim()) : [], }; - return mappings; + return entries; }, {}); } return {}; From 60284f64be114bcb82d26b09fa2151b94ce993ac Mon Sep 17 00:00:00 2001 From: Carlos Miqueo Date: Tue, 9 Dec 2025 18:34:53 -0800 Subject: [PATCH 3/3] updates unit test files --- test/blocks/caas/utils.test.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/blocks/caas/utils.test.js b/test/blocks/caas/utils.test.js index 87c407c48ad..1ee904329c2 100644 --- a/test/blocks/caas/utils.test.js +++ b/test/blocks/caas/utils.test.js @@ -220,6 +220,7 @@ describe('getConfig', () => { eventFilter: [], type: 'left', showEmptyFilters: false, + categoryMappings: {}, categories: [ { group: 'All Topics', @@ -493,6 +494,7 @@ describe('getConfig', () => { eventFilter: [], type: 'left', showEmptyFilters: false, + categoryMappings: {}, categories: [ { group: 'All Topics', @@ -931,6 +933,7 @@ describe('getFloodgateCaasConfig', () => { eventFilter: [], type: 'left', showEmptyFilters: false, + categoryMappings: {}, categories: [ { group: 'All Topics',