From cad50d4d625cec610bc3985db95a5025cc044157 Mon Sep 17 00:00:00 2001
From: joonhoekim <26rote@gmail.com>
Date: Mon, 10 Nov 2025 17:42:02 +0900
Subject: (김준회) 기본계약문서관리: pdftron이 보여줄 템플릿 파일을 못찾았을
 경우의 폴백 추가
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../template/template-editor-wrapper.tsx           | 78 +++++++++++++++++-----
 1 file changed, 61 insertions(+), 17 deletions(-)

(limited to 'lib/basic-contract/template/template-editor-wrapper.tsx')

diff --git a/lib/basic-contract/template/template-editor-wrapper.tsx b/lib/basic-contract/template/template-editor-wrapper.tsx
index 8d2ce97f..be5e6856 100644
--- a/lib/basic-contract/template/template-editor-wrapper.tsx
+++ b/lib/basic-contract/template/template-editor-wrapper.tsx
@@ -102,6 +102,7 @@ export function TemplateEditorWrapper({
   const [templateName, setTemplateName] = React.useState<string>("");
   const [predefinedVariables, setPredefinedVariables] = React.useState<string[]>([]);
   const [signatureVariables, setSignatureVariables] = React.useState<string[]>([]); // 서명란 변수
+  const [fileLoadError, setFileLoadError] = React.useState<Error | null>(null); // 파일 로드 오류
 
   // 템플릿 이름 로드 및 변수 설정
   React.useEffect(() => {
@@ -503,23 +504,66 @@ export function TemplateEditorWrapper({
 
       {/* 뷰어 영역 (확대 문제 해결을 위한 컨테이너 격리) */}
       <div className="flex-1 relative overflow-hidden">
-        <div className="absolute inset-0">
-          <BasicContractTemplateViewer
-            templateId={templateId}
-            filePath={filePath}
-            instance={instance}
-            setInstance={setInstance}
-            onSignatureFieldFound={(searchText) => {
-              // 서명란 발견 시 원본 텍스트를 그대로 추가 (자동 서명 기능을 위해)
-              setSignatureVariables(prev => {
-                if (!prev.includes(searchText)) {
-                  return [...prev, searchText];
-                }
-                return prev;
-              });
-            }}
-          />
-        </div>
+        {fileLoadError ? (
+          <div className="absolute inset-0 flex flex-col items-center justify-center bg-gray-50 p-8">
+            <div className="max-w-md text-center space-y-4">
+              <AlertCircle className="h-16 w-16 text-red-500 mx-auto" />
+              <div>
+                <h3 className="text-lg font-semibold text-gray-900">파일을 불러올 수 없습니다</h3>
+                <p className="text-sm text-gray-600 mt-2">
+                  {fileLoadError.message}
+                </p>
+              </div>
+              <div className="bg-yellow-50 border border-yellow-200 rounded-lg p-4 text-left">
+                <p className="text-sm text-yellow-800">
+                  <strong>가능한 원인:</strong>
+                </p>
+                <ul className="text-sm text-yellow-700 mt-2 space-y-1 list-disc list-inside">
+                  <li>템플릿이 폐기되어 파일이 삭제되었습니다</li>
+                  <li>템플릿이 DB에서 삭제되었습니다</li>
+                  <li>파일 경로가 변경되었거나 손상되었습니다</li>
+                </ul>
+              </div>
+              <div className="flex gap-2 justify-center">
+                <Button
+                  variant="outline"
+                  onClick={() => window.history.back()}
+                >
+                  목록으로 돌아가기
+                </Button>
+                <Button
+                  onClick={() => {
+                    setFileLoadError(null);
+                    window.location.reload();
+                  }}
+                >
+                  새로고침
+                </Button>
+              </div>
+            </div>
+          </div>
+        ) : (
+          <div className="absolute inset-0">
+            <BasicContractTemplateViewer
+              templateId={templateId}
+              filePath={filePath}
+              instance={instance}
+              setInstance={setInstance}
+              onSignatureFieldFound={(searchText) => {
+                // 서명란 발견 시 원본 텍스트를 그대로 추가 (자동 서명 기능을 위해)
+                setSignatureVariables(prev => {
+                  if (!prev.includes(searchText)) {
+                    return [...prev, searchText];
+                  }
+                  return prev;
+                });
+              }}
+              onLoadError={(error) => {
+                setFileLoadError(error);
+              }}
+            />
+          </div>
+        )}
       </div>
 
       {/* 하단 안내 (한글 입력 팁 포함) */}
-- 
cgit v1.2.3

