Feature/toll house
This commit is contained in:
@@ -1,30 +1,59 @@
|
||||
import { useState, useEffect } from "react";
|
||||
import { useEffect, useReducer } from "react";
|
||||
import { GET_CITY_LISTS } from "@/core/utils/routes";
|
||||
import useRequest from "@/lib/hooks/useRequest";
|
||||
const ACTIONS = {
|
||||
LOADING: "loading",
|
||||
SUCCESS: "success",
|
||||
ERROR: "error",
|
||||
RESET: "reset",
|
||||
};
|
||||
|
||||
const useCities = () => {
|
||||
const initialState = {
|
||||
data: [],
|
||||
loading: true,
|
||||
error: null,
|
||||
};
|
||||
function reducer(state, action) {
|
||||
switch (action.type) {
|
||||
case ACTIONS.LOADING:
|
||||
return { ...state, loading: true, error: null };
|
||||
case ACTIONS.SUCCESS:
|
||||
return { ...state, loading: false, data: action.payload };
|
||||
case ACTIONS.ERROR:
|
||||
return { ...state, loading: false, error: action.payload };
|
||||
case ACTIONS.RESET:
|
||||
return { ...initialState, loading: false };
|
||||
default:
|
||||
return state;
|
||||
}
|
||||
}
|
||||
const useCities = (id) => {
|
||||
const requestServer = useRequest();
|
||||
const [cities, setCities] = useState([]);
|
||||
const [loadingCities, setLoadingCities] = useState(true);
|
||||
const [errorCities, setErrorCities] = useState(null);
|
||||
const [state, dispatch] = useReducer(reducer, initialState);
|
||||
|
||||
useEffect(() => {
|
||||
const fetchCities = async () => {
|
||||
if (!id) {
|
||||
dispatch({ type: ACTIONS.RESET });
|
||||
return;
|
||||
}
|
||||
const fetchCityLists = async () => {
|
||||
dispatch({ type: ACTIONS.LOADING });
|
||||
try {
|
||||
const response = await requestServer(`${GET_CITY_LISTS}`);
|
||||
setCities(response.data.data);
|
||||
setLoadingCities(false);
|
||||
} catch (e) {
|
||||
console.error("Error fetching cities:", e);
|
||||
setErrorCities(e);
|
||||
setLoadingCities(false);
|
||||
const response = await requestServer(`${GET_CITY_LISTS}/${id}`);
|
||||
dispatch({ type: ACTIONS.SUCCESS, payload: response.data.data });
|
||||
} catch (error) {
|
||||
dispatch({ type: ACTIONS.ERROR, payload: error });
|
||||
}
|
||||
};
|
||||
|
||||
fetchCities();
|
||||
}, []);
|
||||
fetchCityLists();
|
||||
}, [id]);
|
||||
|
||||
return { cities, loadingCities, errorCities };
|
||||
return {
|
||||
cityList: state.data,
|
||||
loadingCityList: state.loading,
|
||||
errorCityList: state.error,
|
||||
};
|
||||
};
|
||||
|
||||
export default useCities;
|
||||
|
||||
Reference in New Issue
Block a user