From e1b9abc07f9dd8f5bb5aec6c82ec1b7da879379b Mon Sep 17 00:00:00 2001 From: Joakim Larsson Date: Wed, 19 Feb 2025 13:59:03 +0100 Subject: [PATCH] place and pickup location filtering --- .../components/SelectPickupLocation.tsx | 4 +- .../AdvertsTable/components/SelectPlace.tsx | 4 +- src/phrases/defaults/common.ts | 1 + src/url-params/url-params-context.ts | 42 +++++++++++-------- 4 files changed, 31 insertions(+), 20 deletions(-) diff --git a/src/adverts/dashboard/AdvertsTable/components/SelectPickupLocation.tsx b/src/adverts/dashboard/AdvertsTable/components/SelectPickupLocation.tsx index 1e75811..87dc7b9 100644 --- a/src/adverts/dashboard/AdvertsTable/components/SelectPickupLocation.tsx +++ b/src/adverts/dashboard/AdvertsTable/components/SelectPickupLocation.tsx @@ -26,7 +26,6 @@ export const SelectPickupLocation: FC<{ {label} + + {phrase('VALUE_EMPTY', '(inget värde)')} + {places.map((p) => ( {p} ))} diff --git a/src/phrases/defaults/common.ts b/src/phrases/defaults/common.ts index 3d9a6ea..829479e 100644 --- a/src/phrases/defaults/common.ts +++ b/src/phrases/defaults/common.ts @@ -2,4 +2,5 @@ export default { ACTION_CLOSE: 'Stäng', ACTION_UPDATE: 'Uppdatera', VALUE_CLEAR: '(rensa värde)', + VALUE_EMPTY: '(inget värde)', } diff --git a/src/url-params/url-params-context.ts b/src/url-params/url-params-context.ts index ffe4027..d8b41e2 100644 --- a/src/url-params/url-params-context.ts +++ b/src/url-params/url-params-context.ts @@ -18,32 +18,29 @@ const createUrlParamsContext = ( ): boolean | undefined => // eslint-disable-next-line no-nested-ternary params[name] === '1' ? true : params[name] === '0' ? false : d + const parseStringArray = (name: string): string[] | undefined => + params[name] + ?.split(',') + .map((s) => s.trim()) + .map((s) => decodeURIComponent(s)) + .filter((v) => v) + const search = params.s || '' - const categories = (params.c || '') - .split(',') - .map((s) => s.trim()) - .map((s) => decodeURIComponent(s)) - .filter((v) => v) - const tags = (params.tags || '') - .split(',') - .map((s) => s.trim()) - .map((s) => decodeURIComponent(s)) - .filter((v) => v) - const size = (params.size || '') - .split(',') - .map((s) => s.trim()) - .map((s) => decodeURIComponent(s)) - .filter((v) => v) + const categories = parseStringArray('c') + const tags = parseStringArray('tags') + const size = parseStringArray('size') const sorting = params.sf || '' + const places = parseStringArray('places') + const pickupLocationTrackingNames = parseStringArray('pltn') const page = parseInt(params.p, 10) || 0 return { ...filter, search, fields: { ...filter.fields, - category: categories.length ? { in: categories } : undefined, - tags: tags.length ? { in: tags } : undefined, - size: size.length ? { in: size } : undefined, + category: categories ? { in: categories } : undefined, + tags: tags ? { in: tags } : undefined, + size: size ? { in: size } : undefined, }, sorting: sortableFields.find((sf) => sf.key === sorting)?.sorting || @@ -72,6 +69,11 @@ const createUrlParamsContext = ( ), }, paging: { pageSize: 25, ...filter.paging, pageIndex: page }, + workflow: { + ...filter.workflow, + pickupLocationTrackingNames, + places, + }, } }, updateUrlFromAdvertFilterInput: (prefix, filter, { sortableFields }) => { @@ -94,6 +96,10 @@ const createUrlParamsContext = ( collects: mapRestriction(filter.restrictions?.hasCollects), reservations: mapRestriction(filter.restrictions?.hasReservations), reserveable: mapRestriction(filter.restrictions?.canBeReserved), + places: encode(filter.workflow?.places)?.join(','), + pltn: encode(filter.workflow?.pickupLocationTrackingNames)?.join( + ',' + ), }) }, makeAdvertSubscriptionUrl: (basePath, filter) =>