Skip to content

Commit cba48bd

Browse files
committed
fix: erd 디폴트 스케일 100으로 수정
1 parent 3749808 commit cba48bd

1 file changed

Lines changed: 23 additions & 11 deletions

File tree

src/app/pages/ERDPage.tsx

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -162,8 +162,9 @@ const entityCardWidth = 226;
162162
const entityColumnWidth = 264;
163163
const entityLeftInset = 24;
164164
const diagramCanvasWidth = entityLeftInset * 2 + entityColumnWidth * (diagramColumns - 1) + entityCardWidth;
165-
const minDiagramZoom = 0.06;
165+
const minDiagramZoom = 0.1;
166166
const maxDiagramZoom = 1.8;
167+
const defaultDiagramZoom = 1;
167168
const diagramZoomStep = 0.1;
168169
const defaultRepositoryName = "codedock-backend";
169170
const erdDocumentsStorageKey = "codedock-erd-documents";
@@ -458,7 +459,7 @@ export function ERDPage({ embedded = false, repositoryName = defaultRepositoryNa
458459
const downloadMenuRef = useRef<HTMLDivElement>(null);
459460
const hasAutoFitCanvasRef = useRef(false);
460461
const repositoryKey = repositoryId ?? repositoryName;
461-
const [diagramZoom, setDiagramZoom] = useState(0.42);
462+
const [diagramZoom, setDiagramZoom] = useState(defaultDiagramZoom);
462463
const [viewportSize, setViewportSize] = useState({ width: 0, height: 0 });
463464
const [mermaidSvg, setMermaidSvg] = useState("");
464465
const [mermaidError, setMermaidError] = useState("");
@@ -584,12 +585,22 @@ export function ERDPage({ embedded = false, repositoryName = defaultRepositoryNa
584585

585586
if (!hasAutoFitCanvasRef.current) {
586587
hasAutoFitCanvasRef.current = true;
587-
setDiagramZoom(minCanvasZoom);
588+
setDiagramZoom(defaultDiagramZoom);
589+
590+
const viewport = diagramViewportRef.current;
591+
if (viewport) {
592+
window.requestAnimationFrame(() => {
593+
const insetX = Math.max(0, (viewportSize.width - worldCanvasWidth * defaultDiagramZoom) / 2);
594+
const insetY = Math.max(0, (viewportSize.height - worldCanvasHeight * defaultDiagramZoom) / 2);
595+
viewport.scrollLeft = (diagramFrameOffsetX + diagramFrameWidth / 2) * defaultDiagramZoom + insetX - viewportSize.width / 2;
596+
viewport.scrollTop = (diagramFrameOffsetY + diagramFrameHeight / 2) * defaultDiagramZoom + insetY - viewportSize.height / 2;
597+
});
598+
}
588599
return;
589600
}
590601

591-
setDiagramZoom((prev) => clampDiagramZoom(prev, minCanvasZoom));
592-
}, [minCanvasZoom, viewportSize.width, viewportSize.height]);
602+
setDiagramZoom((prev) => clampDiagramZoom(prev, minDiagramZoom));
603+
}, [diagramFrameHeight, diagramFrameWidth, viewportSize.width, viewportSize.height, worldCanvasWidth, worldCanvasHeight]);
593604

594605
const updateSelectedErdCode = (nextCode: string) => {
595606
if (!selectedErdId) return;
@@ -771,7 +782,7 @@ export function ERDPage({ embedded = false, repositoryName = defaultRepositoryNa
771782
};
772783

773784
const handleZoomChange = (delta: number) => {
774-
setDiagramZoom((prev) => clampDiagramZoom(prev + delta, minCanvasZoom));
785+
setDiagramZoom((prev) => clampDiagramZoom(prev + delta, minDiagramZoom));
775786
};
776787

777788
const getCanvasInset = (zoom: number) => ({
@@ -801,7 +812,7 @@ export function ERDPage({ embedded = false, repositoryName = defaultRepositoryNa
801812
</button>
802813
<button
803814
type="button"
804-
onClick={() => setDiagramZoom(minCanvasZoom)}
815+
onClick={() => setDiagramZoom(defaultDiagramZoom)}
805816
className="inline-flex h-9 items-center justify-center gap-1 rounded-lg border-0 px-3 font-mono transition-all hover:scale-105"
806817
style={{
807818
background: "rgba(32, 227, 255, 0.10)",
@@ -811,8 +822,8 @@ export function ERDPage({ embedded = false, repositoryName = defaultRepositoryNa
811822
fontSize: "12px",
812823
fontWeight: 950
813824
}}
814-
aria-label="ERD 캔버스 맞춤"
815-
title="캔버스 맞춤 · Ctrl + 휠로 확대/축소"
825+
aria-label="ERD 100%로 보기"
826+
title="100%로 보기 · Ctrl + 휠로 확대/축소"
816827
>
817828
<RotateCcw size={14} />
818829
{zoomPercent}%
@@ -850,8 +861,9 @@ export function ERDPage({ embedded = false, repositoryName = defaultRepositoryNa
850861
const delta = event.deltaY < 0 ? diagramZoomStep : -diagramZoomStep;
851862

852863
setDiagramZoom((prev) => {
853-
const nextZoom = clampDiagramZoom(prev + delta, minCanvasZoom);
864+
const nextZoom = clampDiagramZoom(prev + delta, minDiagramZoom);
854865
if (nextZoom === prev) return prev;
866+
if (prev <= 0) return nextZoom;
855867
const zoomRatio = nextZoom / prev;
856868
const currentInset = getCanvasInset(prev);
857869
const nextInset = getCanvasInset(nextZoom);
@@ -872,7 +884,7 @@ export function ERDPage({ embedded = false, repositoryName = defaultRepositoryNa
872884
return () => {
873885
viewport.removeEventListener("wheel", handleDiagramWheel);
874886
};
875-
}, [minCanvasZoom, viewportSize.width, viewportSize.height, worldCanvasWidth, worldCanvasHeight]);
887+
}, [viewportSize.width, viewportSize.height, worldCanvasWidth, worldCanvasHeight]);
876888

877889
return (
878890
<div

0 commit comments

Comments
 (0)