From 6d6d1588b3ba75211ca3e46add807016f212313f Mon Sep 17 00:00:00 2001 From: Patryk Andrzejewski Date: Mon, 10 Jul 2023 09:47:03 +0200 Subject: [PATCH] Start mapping selected filters to query variables (#3886) * Initial variables mapping * Changeset --- .changeset/polite-eyes-look.md | 5 ++++ .../ConditionalFilter/FilterValueProvider.ts | 24 +++++++++++++++++++ .../ValueProvider/useUrlValueProvider.ts | 3 ++- 3 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 .changeset/polite-eyes-look.md diff --git a/.changeset/polite-eyes-look.md b/.changeset/polite-eyes-look.md new file mode 100644 index 000000000..268e7eca5 --- /dev/null +++ b/.changeset/polite-eyes-look.md @@ -0,0 +1,5 @@ +--- +"saleor-dashboard": patch +--- + +Start mapping selected filters to query variables diff --git a/src/components/ConditionalFilter/FilterValueProvider.ts b/src/components/ConditionalFilter/FilterValueProvider.ts index 078c41ead..89c23a995 100644 --- a/src/components/ConditionalFilter/FilterValueProvider.ts +++ b/src/components/ConditionalFilter/FilterValueProvider.ts @@ -1,7 +1,31 @@ import { FilterContainer } from "./FilterElement"; +type QueryVars = + | { OR: QueryVars, current?: FilterContainer[number] } + | { AND: QueryVars, current?: FilterContainer[number] } + export interface FilterValueProvider { value: FilterContainer; + queryVars: QueryVars; loading: boolean; persist: (newValue: FilterContainer) => void; } + +const toNested = (p: QueryVars, current: FilterContainer[number]): QueryVars => { + if (typeof current !== "string") { + return { ...p, current } + } + + if (current === "AND") { + return { AND: p } + } + + if (current === "OR") { + return { OR: p } + } + + return p +} + +export const createVariables = (filter: FilterContainer) => + filter.reduceRight(toNested, {} as QueryVars) \ No newline at end of file diff --git a/src/components/ConditionalFilter/ValueProvider/useUrlValueProvider.ts b/src/components/ConditionalFilter/ValueProvider/useUrlValueProvider.ts index 472b13e55..8586a0008 100644 --- a/src/components/ConditionalFilter/ValueProvider/useUrlValueProvider.ts +++ b/src/components/ConditionalFilter/ValueProvider/useUrlValueProvider.ts @@ -3,7 +3,7 @@ import useRouter from "use-react-router"; import { useInitialAPIState } from "../API/initialState/useInitalAPIState"; import { FilterContainer } from "../FilterElement"; -import { FilterValueProvider } from "../FilterValueProvider"; +import { createVariables,FilterValueProvider } from "../FilterValueProvider"; import { useTokenArray } from "./TokenArray"; import { UrlEntry } from "./UrlToken"; @@ -42,6 +42,7 @@ export const useUrlValueProvider = (): FilterValueProvider => { return { value, + queryVars: createVariables(value), loading, persist, };