Start mapping selected filters to query variables (#3886)

* Initial variables mapping

* Changeset
This commit is contained in:
Patryk Andrzejewski 2023-07-10 09:47:03 +02:00 committed by GitHub
parent cc0e0e58f3
commit 6d6d1588b3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 31 additions and 1 deletions

View file

@ -0,0 +1,5 @@
---
"saleor-dashboard": patch
---
Start mapping selected filters to query variables

View file

@ -1,7 +1,31 @@
import { FilterContainer } from "./FilterElement"; import { FilterContainer } from "./FilterElement";
type QueryVars =
| { OR: QueryVars, current?: FilterContainer[number] }
| { AND: QueryVars, current?: FilterContainer[number] }
export interface FilterValueProvider { export interface FilterValueProvider {
value: FilterContainer; value: FilterContainer;
queryVars: QueryVars;
loading: boolean; loading: boolean;
persist: (newValue: FilterContainer) => void; 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)

View file

@ -3,7 +3,7 @@ import useRouter from "use-react-router";
import { useInitialAPIState } from "../API/initialState/useInitalAPIState"; import { useInitialAPIState } from "../API/initialState/useInitalAPIState";
import { FilterContainer } from "../FilterElement"; import { FilterContainer } from "../FilterElement";
import { FilterValueProvider } from "../FilterValueProvider"; import { createVariables,FilterValueProvider } from "../FilterValueProvider";
import { useTokenArray } from "./TokenArray"; import { useTokenArray } from "./TokenArray";
import { UrlEntry } from "./UrlToken"; import { UrlEntry } from "./UrlToken";
@ -42,6 +42,7 @@ export const useUrlValueProvider = (): FilterValueProvider => {
return { return {
value, value,
queryVars: createVariables(value),
loading, loading,
persist, persist,
}; };