diff options
Diffstat (limited to 'lib/basic-contract/template/template-editor-wrapper.tsx')
| -rw-r--r-- | lib/basic-contract/template/template-editor-wrapper.tsx | 78 |
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> {/* 하단 안내 (한글 입력 팁 포함) */} |
