'use client' 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' import { get, post } from '@/lib/Axios' export default function InitSettingsModal(props) { const [objectNo, setObjectNo] = useState('test123240909003') // 후에 삭제 필요 const [open, setOpen] = useRecoilState(modalState) const [canvasSetting, setCanvasSetting] = useRecoilState(canvasSettingState) const [roofMaterials, setRoofMaterials] = useState([]) const [basicSetting, setBasicSettings] = useState({ roofDrawingSet: '1', roofSizeSet: '1', roofAngleSet: 'slope', roofs: [{ roofSeq: '1', roofType: '3', roofWidth: '200', roofHeight: '200', roofGap: '0', roofLayout: 'parallel' }], }) const modelProps = { open, setOpen, } //const { get, post } = useAxios() useEffect(() => { get({ url: '/api/roof-material/roof-material-infos' }).then((res) => { //TODO: error handling if (!res) return setRoofMaterials(res) }) get({ url: `/api/canvas-management/canvas-basic-settings/by-object/${objectNo}` }).then((res) => { if (res.length == 0) return // 'roofs' 배열을 생성하여 각 항목을 추가 const roofsRow = res.map((item) => { return { roofDrawingSet: String(item.roofDrawingSet), roofSizeSet: String(item.roofSizeSet), roofAngleSet: item.roofAngleSet, } }) const roofsArray = res.some((item) => !item.roofSeq) ? //최초 지붕재 추가 정보의 경우 roofsArray를 초기화 설정 [{ roofSeq: '1', roofType: '3', roofWidth: '200', roofHeight: '200', roofGap: '0', roofLayout: 'parallel' }] : res.map((item) => ({ roofSeq: String(item.roofSeq), roofType: String(item.roofType), roofWidth: String(item.roofWidth), roofHeight: String(item.roofHeight), roofGap: String(item.roofGap), roofLayout: item.roofLayout, })) // 나머지 데이터와 함께 'roofs' 배열을 patternData에 넣음 const patternData = { roofDrawingSet: roofsRow[0].roofDrawingSet, // 첫 번째 항목의 값을 사용 roofSizeSet: roofsRow[0].roofSizeSet, // 첫 번째 항목의 값을 사용 roofAngleSet: roofsRow[0].roofAngleSet, // 첫 번째 항목의 값을 사용 roofs: roofsArray, // 만들어진 roofs 배열 } // 데이터 설정 setBasicSettings({ ...patternData }) }) 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 handleRoofSettings = (id, event) => { // 기본 세팅에서 roofs 배열을 복사 const updatedRoofs = [...basicSetting.roofs] // roofSeq가 id와 일치하는 항목의 인덱스 찾기 const index = updatedRoofs.findIndex((roof) => roof.roofSeq === id) if (index !== -1) { // 해당 인덱스의 항목을 수정 updatedRoofs[index] = { ...updatedRoofs[index], [event.target.name]: event.target.value, } // 수정된 배열을 상태에 반영 setBasicSettings((prevState) => ({ ...prevState, roofs: updatedRoofs, })) } } //저장 const submitCanvasConfig = async () => { if (!objectNo) { alert('object_no를 입력하세요.') return } const patternData = { objectNo, roofDrawingSet: basicSetting.roofDrawingSet, roofSizeSet: basicSetting.roofSizeSet, roofAngleSet: basicSetting.roofAngleSet, roofMaterialsAddList: basicSetting.roofs, } await post({ url: `/api/canvas-management/canvas-basic-settings`, data: patternData }) //Recoil 설정 setCanvasSetting({ ...basicSetting }) // 저장 후 재조회 //await handleSelect() } return ( <>