feat(roof-shape): PDF 지붕형상 매칭 버튼 자동 선택(pre-select)
[작업내용] : - 마운트 시 pdfRoofShapeDescriptorState → matchRoofShapePattern → setShapeNum(매칭 버튼 pre-select) - pre-select only: handleSave 비자동(사용자 [적용]) - consume-once: 매칭 시도 후 atom 리셋(비-PDF 재진입 stale 방지) - 매처 null(복합형) 시 강제 선택 없이 기본값 유지 - 런타임(실제 분기별 pre-select) 수동 검증 잔여 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
28ea1e9b8e
commit
edeb766b3a
@ -1,12 +1,13 @@
|
|||||||
import { useEffect, useRef, useState } from 'react'
|
import { useEffect, useRef, useState } from 'react'
|
||||||
import { useMessage } from '@/hooks/useMessage'
|
import { useMessage } from '@/hooks/useMessage'
|
||||||
import { useRecoilState, useRecoilValue, useSetRecoilState } from 'recoil'
|
import { useRecoilState, useRecoilValue, useResetRecoilState, useSetRecoilState } from 'recoil'
|
||||||
import { ANGLE_TYPE, canvasState, currentAngleTypeSelector, currentMenuState, currentObjectState, pitchTextSelector } from '@/store/canvasAtom'
|
import { ANGLE_TYPE, canvasState, currentAngleTypeSelector, currentMenuState, currentObjectState, pitchTextSelector } from '@/store/canvasAtom'
|
||||||
import { LINE_TYPE, POLYGON_TYPE } from '@/common/common'
|
import { LINE_TYPE, POLYGON_TYPE } from '@/common/common'
|
||||||
import { usePolygon } from '@/hooks/usePolygon'
|
import { usePolygon } from '@/hooks/usePolygon'
|
||||||
import { useMode } from '@/hooks/useMode'
|
import { useMode } from '@/hooks/useMode'
|
||||||
import { useLine } from '@/hooks/useLine'
|
import { useLine } from '@/hooks/useLine'
|
||||||
import { outerLineFixState } from '@/store/outerLineAtom'
|
import { outerLineFixState, pdfRoofShapeDescriptorState } from '@/store/outerLineAtom'
|
||||||
|
import { matchRoofShapePattern } from '@/common/roofShapePattern'
|
||||||
import { useSwal } from '@/hooks/useSwal'
|
import { useSwal } from '@/hooks/useSwal'
|
||||||
import { usePopup } from '@/hooks/usePopup'
|
import { usePopup } from '@/hooks/usePopup'
|
||||||
import { getChonByDegree, getDegreeByChon } from '@/util/canvas-util'
|
import { getChonByDegree, getDegreeByChon } from '@/util/canvas-util'
|
||||||
@ -49,6 +50,8 @@ export function useRoofShapeSetting(id) {
|
|||||||
|
|
||||||
const setCurrentMenu = useSetRecoilState(currentMenuState)
|
const setCurrentMenu = useSetRecoilState(currentMenuState)
|
||||||
const outerLineFix = useRecoilValue(outerLineFixState)
|
const outerLineFix = useRecoilValue(outerLineFixState)
|
||||||
|
const pdfRoofShapeDescriptor = useRecoilValue(pdfRoofShapeDescriptorState)
|
||||||
|
const resetPdfRoofShapeDescriptor = useResetRecoilState(pdfRoofShapeDescriptorState)
|
||||||
|
|
||||||
const isFixRef = useRef(false)
|
const isFixRef = useRef(false)
|
||||||
|
|
||||||
@ -87,6 +90,14 @@ export function useRoofShapeSetting(id) {
|
|||||||
closePopup(id)
|
closePopup(id)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// PDF 분석 지붕형상 descriptor 가 있으면 매칭 버튼을 pre-select 한다(자동 선택만 — handleSave 는 사용자 [적용]).
|
||||||
|
if (pdfRoofShapeDescriptor) {
|
||||||
|
const matched = matchRoofShapePattern(pdfRoofShapeDescriptor)
|
||||||
|
if (matched != null) setShapeNum(matched)
|
||||||
|
resetPdfRoofShapeDescriptor() // consume-once: 비-PDF 재진입 시 stale 적용 방지
|
||||||
|
}
|
||||||
|
|
||||||
return () => {
|
return () => {
|
||||||
if (!isFixRef.current) {
|
if (!isFixRef.current) {
|
||||||
return
|
return
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user