CEC-5135: remove prop from useEffect deps (#459)

* resolve localStorage race condition

* fix

* fix

* CEC-5135: remove prop from deps

* update test
This commit is contained in:
Tristan Timblin
2023-10-03 17:10:54 -07:00
committed by GitHub
parent e5ccb23443
commit eae44c9249
4 changed files with 32 additions and 36 deletions

View File

@@ -35,42 +35,40 @@ function parseQueryPart(part) {
export default function useQuery() {
const [query, setQuery] = useLocalStorage("VEHICLE_SEARCH", "");
const [parts, setParts] = useState([]);
const [search, setSearch] = useState(null);
const [vins, setVins] = useState("");
const [payload, setPayload] = useState({});
const [loading, setLoading] = useState(true);
function reset() {
setSearch("");
setVins([]);
}
useEffect(() => {
reset();
setLoading(true);
let vins = [];
let search = "";
const parts = query.replaceAll(" ", ",").split(",").map(parseQueryPart);
setParts(parts);
parts.forEach(([type, value]) => {
if (type === "vin") {
setVins(vins => {
if (vins.length) {
return `${vins},${value}`;
}
return value;
});
vins.push(value);
}
if (type === "search") {
setSearch(search => `${search} ${value}`.trim());
search = `${search} ${value}`.trim();
}
});
setPayload({
search,
vins: vins.join(","),
})
}, [query, setPayload]);
useEffect(() => {
setLoading(false);
}, [query]);
}, [payload, setLoading])
return {
parts,
search,
vins,
payload,
query,
setQuery,
loading,