diff --git a/src/app/[locale]/roof2/RoofSelect.jsx b/src/app/[locale]/roof2/RoofSelect.jsx index 3d14d535..0dc5645d 100644 --- a/src/app/[locale]/roof2/RoofSelect.jsx +++ b/src/app/[locale]/roof2/RoofSelect.jsx @@ -6,23 +6,68 @@ import { useAxios } from '@/hooks/useAxios' export default function RoofSelect() { const [roofMaterials, setRoofMaterials] = useState([]) + const [manufacturers, setManufacturers] = useState([]) const [trestles, setTrestles] = useState([]) + const [originTrestles, setOriginTrestles] = useState([]) + + const [roofMaterialId, setRoofMaterialId] = useState(null) + const [manufacturerId, setManufacturerId] = useState(null) const { get } = useAxios() - const handleRoofMaterialOnChange = (e) => { - const id = e.target.value - setTrestles([]) - get({ url: `/api/trestle/v1.0/trestles/${id}` }).then((res) => { - setTrestles(res) - }) - } - useEffect(() => { get({ url: '/api/roof-material/v1.0/roof-materials' }).then((res) => { + if (res.length === 0) { + return + } setRoofMaterials(res) }) }, []) + + useEffect(() => { + if (!roofMaterialId) { + return + } + + get({ url: `/api/trestle/v1.0/trestles/${roofMaterialId}` }).then((res) => { + if (res.length === 0) { + return + } + setOriginTrestles(res) + const manufactural = res.map((trestle) => { + return { id: trestle.manufacturerId, name: trestle.manufacturerName } + }) + // Remove duplicates + const uniqueManufactural = Array.from(new Set(manufactural.map((a) => a.id))).map((id) => { + return manufactural.find((a) => a.id === id) + }) + + setManufacturers(uniqueManufactural) + }) + }, [roofMaterialId]) + + useEffect(() => { + if (!manufacturerId) { + return + } + + const trestles = originTrestles.filter((trestle) => trestle.manufacturerId === manufacturerId) + setTrestles(trestles) + }, [manufacturerId]) + + const handleRoofMaterialOnChange = (e) => { + const id = e.target.value + setRoofMaterialId(id) + setManufacturers([]) + setManufacturerId(null) + setTrestles([]) + } + + const handleManufacturersOnChange = (e) => { + const id = Number(e.target.value) + setTrestles([]) + setManufacturerId(id) + } return ( <>
@@ -33,7 +78,13 @@ export default function RoofSelect() { ))} )} - + {manufacturers.length > 0 && ( + + )} {trestles.length > 0 && (