use-airport-hook
Version:
A React hook for searching airport details
52 lines (43 loc) • 1.47 kB
JavaScript
import { useState, useEffect } from "react";
import { airportDetails } from "./data/data";
export default function useAirport(name = "") {
const [state, setState] = useState({
isLoading: false,
error: null,
data: null,
});
useEffect(() => {
if (name.trim().length < 3) {
if (name.trim().length === 0) {
setState({ isLoading: false, error: null, data: null });
} else {
setState({ isLoading: true, error: null, data: null });
}
return;
}
setState({ isLoading: true, error: null, data: null });
const timeout = setTimeout(() => {
try {
const lowerCaseName = name.toLowerCase().trim();
let result = [];
if (lowerCaseName.length === 3) {
const found = airportDetails.find(
(item) => item.airport_code.toLowerCase() === lowerCaseName
);
result = found ? [found] : [];
} else {
result = airportDetails.filter(
(item) =>
item.country_name.toLowerCase().includes(lowerCaseName) ||
item.country_loc.toLowerCase().includes(lowerCaseName)
);
}
setState({ isLoading: false, error: null, data: result });
} catch (error) {
setState({ isLoading: false, error: error.message, data: null });
}
}, 100);
return () => clearTimeout(timeout);
}, [name]);
return state;
}