From f25f09a2aa842301ea59d252305b4fe8dc94e318 Mon Sep 17 00:00:00 2001 From: yjnoh Date: Tue, 27 Aug 2024 18:03:44 +0900 Subject: [PATCH] =?UTF-8?q?=EC=B4=88=EA=B8=B0=EC=85=8B=ED=8C=85=20?= =?UTF-8?q?=ED=99=94=EB=A9=B4=20=EC=9E=91=EC=97=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ettingsModal.jsx => GridSettingsModal.jsx} | 1 - src/components/InitSettingsModal.jsx | 163 ++++++++++++++++++ src/components/Roof2.jsx | 15 +- 3 files changed, 176 insertions(+), 3 deletions(-) rename src/components/{SettingsModal.jsx => GridSettingsModal.jsx} (99%) create mode 100644 src/components/InitSettingsModal.jsx diff --git a/src/components/SettingsModal.jsx b/src/components/GridSettingsModal.jsx similarity index 99% rename from src/components/SettingsModal.jsx rename to src/components/GridSettingsModal.jsx index 2db65293..78e3c8a6 100644 --- a/src/components/SettingsModal.jsx +++ b/src/components/GridSettingsModal.jsx @@ -6,7 +6,6 @@ import { guideLineState } from '@/store/canvasAtom' import { fabric } from 'fabric' import { ColorPicker, useColor } from 'react-color-palette' import 'react-color-palette/css' -import { withRouter } from 'next/router' export default function SettingsModal(props) { const { canvasProps } = props diff --git a/src/components/InitSettingsModal.jsx b/src/components/InitSettingsModal.jsx new file mode 100644 index 00000000..8d0299f2 --- /dev/null +++ b/src/components/InitSettingsModal.jsx @@ -0,0 +1,163 @@ +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 { useAxios } from '@/hooks/useAxios' + +export default function InitSettingsModal(props) { + const [open, setOpen] = useRecoilState(modalState) + const [roofMaterials, setRoofMaterials] = useState([]) + const [roofSettings, setRoofSettings] = useState([]) + const { get } = useAxios() + + useEffect(() => { + get({ url: '/api/roof-material/roof-material-infos' }).then((res) => { + //TODO: error handling + if (!res) return + + setRoofMaterials(res) + }) + }, []) + + const addRoofSetting = () => { + if (roofSettings.length === 4) { + alert('지붕재는 최대 4개까지 선택할 수 있습니다.') + return + } + + const newRoofSettings = { + id: roofSettings.length + 1, + roofId: '', + width: '', + height: '', + type: '', + gap: '', + layout: '병렬식', + } + + setRoofSettings([...roofSettings, 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) + } + + return ( + <> +
+
배치면 초기설정
+ +
+
+ + 치수 입력에 의한 물건작성 + +
+
+ +
+
+ + 복사도 입력 + 실측값 입력 + 육지붕 + +
+
+ +
+
+ + 경사 + 각도 + +
+
+ +
+ + ※ 지붕재는 최대 4종까지 선택할 수 있습니다. +
+ + {roofSettings.map((setting, index) => { + return + })} + +
+ + +
+
+ + ) +} + +const RoofSelectBox = (props) => { + return ( +
+ + props.onChange(props.setting.id, e)} + /> + mm + props.onChange(props.setting.id, e)} + /> + mm + props.onChange(props.setting.id, e)} + /> + mm +
+ props.onChange(props.setting.id, e)} + > + 병렬식 + 계단식 + +
+
+ ) +} diff --git a/src/components/Roof2.jsx b/src/components/Roof2.jsx index 217d0521..4e8b5a01 100644 --- a/src/components/Roof2.jsx +++ b/src/components/Roof2.jsx @@ -26,11 +26,13 @@ import { QPolygon } from '@/components/fabric/QPolygon' import ThumbnailList from './ui/ThumbnailLIst' import QContextMenu from './common/context-menu/QContextMenu' import { modalContent, modalState } from '@/store/modalAtom' -import SettingsModal from './SettingsModal' import { useAxios } from '@/hooks/useAxios' import QPolygonContextMenu from '@/components/common/context-menu/QPolygonContextMenu' import QLineContextMenu from '@/components/common/context-menu/QLineContextMenu' +import InitSettingsModal from './InitSettingsModal' +import GridSettingsModal from './GridSettingsModal' + export default function Roof2(props) { const { name, userId, email, isLoggedIn } = props const { canvas, handleRedo, handleUndo, setCanvasBackgroundWithDots, saveImage, addCanvas } = useCanvas('canvas') @@ -578,7 +580,16 @@ export default function Roof2(props) { +