-
Notifications
You must be signed in to change notification settings - Fork 0
/
useCitySearchParams.ts
41 lines (33 loc) · 1.08 KB
/
useCitySearchParams.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import { useSearchParams } from "react-router-dom";
import { format } from "date-fns";
import type { CityFormInputs } from "../components/CityForm";
import type { City } from "../api/cities";
function useCitySearchParams(): [
CityFormInputs,
(cityFormInputs: CityFormInputs) => void,
] {
const [searchParams, setSearchParams] = useSearchParams();
const citySearchParams: CityFormInputs = {
cities: [{}, {}] as City[],
passengers: "1",
date: format(new Date(), "yyyy-MM-dd"),
};
for (const [key, value] of searchParams) {
if (key === "cities") {
citySearchParams.cities = JSON.parse(value);
} else if (key === "passengers") {
citySearchParams.passengers = value;
} else if (key === "date") {
citySearchParams.date = value;
}
}
const setCitySearchParams = (citySearchParams: CityFormInputs) => {
const serialized = {
...citySearchParams,
cities: JSON.stringify(citySearchParams.cities),
};
setSearchParams(serialized);
};
return [citySearchParams, setCitySearchParams];
}
export default useCitySearchParams;