export function urlToConfig()

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;
	}
}