@@ -16,12 +16,53 @@ import { containerStyle } from "../../styles/containerStyles";
1616
1717import ParentProviderDropdown from "./DropdownSelectors/parentProviderDropdown" ;
1818import ChildProviderDropdown from "./DropdownSelectors/childProviderDropdown" ;
19+ import { useSearchParams } from "react-router-dom" ;
1920
2021export 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