Start mapping selected filters to query variables (#3886)
* Initial variables mapping * Changeset
This commit is contained in:
parent
cc0e0e58f3
commit
6d6d1588b3
3 changed files with 31 additions and 1 deletions
5
.changeset/polite-eyes-look.md
Normal file
5
.changeset/polite-eyes-look.md
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
---
|
||||||
|
"saleor-dashboard": patch
|
||||||
|
---
|
||||||
|
|
||||||
|
Start mapping selected filters to query variables
|
|
@ -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)
|
|
@ -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,
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue