in newswires/client/src/urlState.ts [29:81]
export function urlToConfig(location: {
pathname: string;
search: string;
}): Config {
const page = location.pathname.slice(1);
const urlSearchParams = new URLSearchParams(location.search);
const queryString = urlSearchParams.get('q');
const startParam = urlSearchParams.get('start');
const start =
!!startParam && isValidDateValue(startParam)
? startParam
: DEFAULT_DATE_RANGE.start;
const endParam = urlSearchParams.get('end');
const end =
!!endParam && isValidDateValue(endParam)
? endParam
: DEFAULT_DATE_RANGE.end;
const supplier = urlSearchParams.getAll('supplier');
const supplierExcl = urlSearchParams.getAll('supplierExcl');
const keywords = urlSearchParams.get('keywords') ?? undefined;
const keywordsExcl = urlSearchParams.get('keywordsExcl') ?? undefined;
const categoryCode = urlSearchParams.getAll('categoryCode');
const categoryCodeExcl = urlSearchParams.getAll('categoryCodeExcl');
const preset = urlSearchParams.get('preset') ?? undefined;
const query: Query = {
q:
typeof queryString === 'string' || typeof queryString === 'number'
? queryString.toString()
: '',
supplier,
supplierExcl,
keywords,
keywordsExcl,
categoryCode,
categoryCodeExcl,
preset,
dateRange: { start, end },
};
if (page === 'feed') {
return { view: 'feed', query };
} else if (page.startsWith('item/') && page.split('/').length === 2) {
return { view: 'item', itemId: page.split('/')[1], query };
} else {
console.log(`Page not found: "${page}", so using defaultConfig`);
return defaultConfig;
}
}