Skip to content

Commit be955c2

Browse files
committed
searchparams 'custom/custom_url statemanagment
1 parent 7a4162d commit be955c2

1 file changed

Lines changed: 43 additions & 2 deletions

File tree

src/components/OptimadeClient/index.jsx

Lines changed: 43 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,53 @@ import { containerStyle } from "../../styles/containerStyles";
1616

1717
import ParentProviderDropdown from "./DropdownSelectors/parentProviderDropdown";
1818
import ChildProviderDropdown from "./DropdownSelectors/childProviderDropdown";
19+
import { useSearchParams } from "react-router-dom";
1920

2021
export function OptimadeClient({ hideProviderList = ["exmpl", "matcloud"] }) {
22+
const [searchParams, setSearchParams] = useSearchParams();
2123
const [providers, setProviders] = useState([]);
22-
const [selectedProvider, setSelectedProvider] = useState(null);
23-
const [selectedChild, setSelectedChild] = useState(null);
2424

25+
const customProvider = searchParams.has("custom");
26+
const customUrl = searchParams.get("custom_url");
27+
28+
// set selectedProvider when URL search params is in the custom state
29+
const [selectedProvider, setSelectedProvider] = useState(
30+
customProvider ? { id: "__custom__", base_url: "" } : null
31+
);
32+
33+
// set selectedChild when URL search params is in the custom state
34+
const [selectedChild, setSelectedChild] = useState(
35+
customUrl ? { id: "__custom__", base_url: customUrl } : null
36+
);
37+
38+
// remove search params when selected child is not in the custom state
39+
useEffect(() => {
40+
if (!selectedProvider || selectedProvider.id !== "__custom__") {
41+
if (searchParams.has("custom")) {
42+
const next = new URLSearchParams(searchParams);
43+
next.delete("custom");
44+
next.delete("custom_url");
45+
setSearchParams(next, { replace: true });
46+
}
47+
}
48+
}, [selectedProvider]);
49+
50+
// add URL search params when selectedChild is in the custom state
51+
useEffect(() => {
52+
const next = new URLSearchParams(searchParams);
53+
54+
if (selectedChild?.id === "__custom__" && selectedChild.base_url) {
55+
next.set("custom", "");
56+
next.set("custom_url", selectedChild.base_url);
57+
} else {
58+
next.delete("custom");
59+
next.delete("custom_url");
60+
}
61+
62+
setSearchParams(next, { replace: true });
63+
}, [selectedChild]);
64+
65+
// filter and pages useStates
2566
const [currentFilter, setCurrentFilter] = useState("");
2667
const [currentPage, setCurrentPage] = useState(1);
2768
const [results, setResults] = useState(null);

0 commit comments

Comments
 (0)