import { useEffect, useState, memo, useCallback } from 'react' import { Button, Checkbox, CheckboxGroup, RadioGroup, Radio, Input, Select, SelectItem } from '@nextui-org/react' import { useRecoilState, useRecoilValue } from 'recoil' import { modalContent, modalState } from '@/store/modalAtom' import { canvasSettingState } from '@/store/canvasAtom' import { useAxios } from '@/hooks/useAxios' export default function InitSettingsModal(props) { const [open, setOpen] = useRecoilState(modalState) const [canvasSetting, setCanvasSetting] = useRecoilState(canvasSettingState) const [roofMaterials, setRoofMaterials] = useState([]) const [basicSetting, setBasicSettings] = useState({ type: '1', inputType: '1', angleType: 'slope', roofs: [], }) const { get, post } = useAxios() useEffect(() => { get({ url: '/api/roof-material/roof-material-infos' }).then((res) => { //TODO: error handling if (!res) return setRoofMaterials(res) }) if (!(Object.keys(canvasSetting).length === 0 && canvasSetting.constructor === Object)) { setBasicSettings({ ...canvasSetting }) } }, []) //기본 설정값 변경 함수 const handleBasicSetting = (event) => { const newBasicSetting = { ...basicSetting, [event.target.name]: event.target.value } setBasicSettings(newBasicSetting) } //배열 추가 함수 const addRoofSetting = () => { if (basicSetting.roofs.length === 4) { alert('지붕재는 최대 4종까지 선택할 수 있습니다.') return } //기본값 const newRoofSettings = { id: basicSetting.roofs.length + 1, roofId: '3', width: '200', height: '200', gap: '0', layout: 'parallel', } setBasicSettings((prevState) => ({ ...prevState, roofs: [...prevState.roofs, newRoofSettings], })) } //배열 값 변경 함수 const handleRoofSettings = (id, event) => { const roof = basicSetting.roofs.map((roof, i) => (id === roof.id ? { ...roof, [event.target.name]: event.target.value } : roof)) setBasicSettings((prevState) => ({ ...prevState, roofs: [...roof], })) } const submitCanvasConfig = () => { post({ url: '/api/canvas-config', data: basicSetting }).then((res) => { if (!res) { setCanvasSetting({ ...basicSetting }) } }) } return ( <>