'use client' import React, { useEffect, useState } from 'react' import { Button } from '@nextui-org/react' import { get, post } from '@/lib/Axios' import { useRecoilState } from 'recoil' import { customSettingsState } from '@/store/canvasAtom' export default function Settings() { const [objectNo, setObjectNo] = useState('test123240829010') const [error, setError] = useState(null) const [customSettings, setCustomSettings] = useRecoilState(customSettingsState) // 상태를 하나의 객체로 관리 const [settings, setSettings] = useState({ display1: Array(11).fill(false), // 화면 표시1 display2: Array(3).fill(false), // 화면 표시2 rangeSetting: 0, // 흡착 범위 설정 gridSettings: Array(5).fill(false), // 그리드 설정 }) const gridItems = { display1: [ '할당 표시', '도면 표시', '그리드 표시', '문자 표시', '흐름방향 표시', '복도치수 표시', '실제치수 표시', '치수 표시 없음', '가대 표시', '좌표 표시', '도면전환 표시', ], display2: ['테두리만', '라인해치', 'All Painted'], rangeSetting: ['극소', '소', '중', '대'], gridSettings: ['임의 그리드', '실선 그리드', '점 그리드', '그리드 색 설정', '흡착점 추가'], } // 초기 조회 useEffect(() => { if (!objectNo) { alert('object_no를 입력하세요.') } }, []) // 클릭 시 상태 변경 함수 const handleToggle = (type, index) => { setSettings((prevSettings) => { // prevSettings[type]이 배열인지 확인하고, 그렇지 않은 경우 빈 배열로 초기화 let updated = Array.isArray(prevSettings[type]) ? [...prevSettings[type]] : [] if (type === 'rangeSetting') { return { ...prevSettings, [type]: index } } updated[index] = updated[index] === false ? true : false return { ...prevSettings, [type]: updated } }) } // Canvas Setting 조회 및 초기화 const handleSelect = async () => { try { if (!objectNo) { alert('object_no를 입력하세요.') return } const res = await get({ url: `/api/canvas-management/canvas-settings/by-object/${objectNo}` }) // 데이터가 없는 경우 if (!res) { console.warn('조회 결과가 없습니다.') // 기본값을 설정하거나 사용자에게 알림 표시 setSettings({ display1: Array(11).fill(false), // 화면 표시1 기본값 display2: Array(3).fill(false), // 화면 표시2 기본값 rangeSetting: 0, // 흡착 범위 설정 기본값 gridSettings: Array(5).fill(false), // 그리드 설정 기본값 }) alert('조회된 데이터가 없습니다. 기본 설정이 적용됩니다.') return // 이후 코드 실행을 중단 } const data = { display1: [ res.assignDisplay, res.drawDisplay, res.gridDisplay, res.charDisplay, res.flowDisplay, res.hallwayDimenDisplay, res.actualDimenDisplay, res.noDimenDisplay, res.trestleDisplay, res.coordiDisplay, res.drawConverDisplay, ], display2: [res.onlyBorder, res.lineHatch, res.allPainted], rangeSetting: res.adsorpRangeSetting, gridSettings: [res.randomGrid, res.solidGrid, res.dotGrid, res.gridColorSet, res.adsorpPointAdd], } // 데이터 설정 setSettings({ display1: data.display1, display2: data.display2, rangeSetting: data.rangeSetting, gridSettings: data.gridSettings, }) } catch (error) { console.error('Data fetching error:', error) } } // Canvas Setting 저장 const handleSubmit = async () => { if (!objectNo) { alert('object_no를 입력하세요.') return } const patternData = { objectNo, assignDisplay: settings.display1[0], drawDisplay: settings.display1[1], gridDisplay: settings.display1[2], charDisplay: settings.display1[3], flowDisplay: settings.display1[4], hallwayDimenDisplay: settings.display1[5], actualDimenDisplay: settings.display1[6], noDimenDisplay: settings.display1[7], trestleDisplay: settings.display1[8], coordiDisplay: settings.display1[9], drawConverDisplay: settings.display1[10], onlyBorder: settings.display2[0], lineHatch: settings.display2[1], allPainted: settings.display2[2], adsorpRangeSetting: settings.rangeSetting, randomGrid: settings.gridSettings[0], solidGrid: settings.gridSettings[1], dotGrid: settings.gridSettings[2], gridColorSet: settings.gridSettings[3], adsorpPointAdd: settings.gridSettings[4], } console.log('patternData', patternData) await post({ url: `/api/canvas-management/canvas-settings`, data: patternData }) //Recoil 설정 setCustomSettings({ ...patternData }) // 저장 후 재조회 await handleSelect() } return ( <>