diff --git a/public/drawTemplates/153302.svg b/public/drawTemplates/153302.svg new file mode 100644 index 00000000..3b1c97b0 --- /dev/null +++ b/public/drawTemplates/153302.svg @@ -0,0 +1,23 @@ + + + diff --git a/public/drawTemplates/shape21.svg b/public/drawTemplates/shape21.svg new file mode 100644 index 00000000..a2d901e7 --- /dev/null +++ b/public/drawTemplates/shape21.svg @@ -0,0 +1,4 @@ + + diff --git a/src/components/GridSettingsModal.jsx b/src/components/GridSettingsModal.jsx index f1e77c94..35bb1793 100644 --- a/src/components/GridSettingsModal.jsx +++ b/src/components/GridSettingsModal.jsx @@ -7,7 +7,7 @@ import { fabric } from 'fabric' import { ColorPicker, useColor } from 'react-color-palette' import 'react-color-palette/css' -export default function SettingsModal(props) { +export default function GridSettingsModal(props) { const { canvasProps } = props const [isCustomGridSetting, setIsCustomGridSetting] = useState(true) const [gridCheckedValue, setGridCheckValue] = useState([]) diff --git a/src/components/InitSettingsModal.jsx b/src/components/InitSettingsModal.jsx index 8d0299f2..a79c7a9e 100644 --- a/src/components/InitSettingsModal.jsx +++ b/src/components/InitSettingsModal.jsx @@ -2,13 +2,21 @@ 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 [roofSettings, setRoofSettings] = useState([]) - const { get } = useAxios() + 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) => { @@ -17,32 +25,56 @@ export default function InitSettingsModal(props) { 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 (roofSettings.length === 4) { - alert('지붕재는 최대 4개까지 선택할 수 있습니다.') + if (basicSetting.roofs.length === 4) { + alert('지붕재는 최대 4종까지 선택할 수 있습니다.') return } + //기본값 const newRoofSettings = { - id: roofSettings.length + 1, - roofId: '', - width: '', - height: '', - type: '', - gap: '', - layout: '병렬식', + id: basicSetting.roofs.length + 1, + roofId: '3', + width: '200', + height: '200', + gap: '0', + layout: 'parallel', } - setRoofSettings([...roofSettings, newRoofSettings]) + setBasicSettings((prevState) => ({ + ...prevState, + roofs: [...prevState.roofs, newRoofSettings], + })) } + //배열 값 변경 함수 const handleRoofSettings = (id, event) => { - const newRoofSettings = [...roofSettings] - let setting = newRoofSettings.find((setting) => setting.id === id) - setting[event.target.name] = event.target.value - setRoofSettings(newRoofSettings) + 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 ( @@ -52,7 +84,7 @@ export default function InitSettingsModal(props) {