summaryrefslogtreecommitdiff
path: root/lib/basic-contract/template/template-editor-wrapper.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'lib/basic-contract/template/template-editor-wrapper.tsx')
-rw-r--r--lib/basic-contract/template/template-editor-wrapper.tsx78
1 files changed, 61 insertions, 17 deletions
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>
{/* 하단 안내 (한글 입력 팁 포함) */}