feat: 에러 처리 개선 + 커스텀 확인 모달 + 관리자 테스트
- 에러 코드 기반 한국어 매핑 (8개 코드, parseError 개선) - window.confirm → 커스텀 ConfirmDialog (다크 테마, Promise 기반) - launch URL 파라미터 ticket → token 통일 - 관리자 테스트 27개 추가 (공지사항 12 + 다운로드 6 + 유저 9) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
46
src/components/confirm/ConfirmProvider.jsx
Normal file
46
src/components/confirm/ConfirmProvider.jsx
Normal file
@@ -0,0 +1,46 @@
|
||||
import { useState, useCallback, useMemo, useRef } from 'react';
|
||||
import { ConfirmContext } from './confirmContextValue';
|
||||
import './Confirm.css';
|
||||
|
||||
export function ConfirmProvider({ children }) {
|
||||
const [dialog, setDialog] = useState(null);
|
||||
const resolveRef = useRef(null);
|
||||
|
||||
const confirm = useCallback((message) => {
|
||||
return new Promise((resolve) => {
|
||||
resolveRef.current = resolve;
|
||||
setDialog({ message });
|
||||
});
|
||||
}, []);
|
||||
|
||||
const handleConfirm = useCallback(() => {
|
||||
resolveRef.current?.(true);
|
||||
resolveRef.current = null;
|
||||
setDialog(null);
|
||||
}, []);
|
||||
|
||||
const handleCancel = useCallback(() => {
|
||||
resolveRef.current?.(false);
|
||||
resolveRef.current = null;
|
||||
setDialog(null);
|
||||
}, []);
|
||||
|
||||
const value = useMemo(() => confirm, [confirm]);
|
||||
|
||||
return (
|
||||
<ConfirmContext.Provider value={value}>
|
||||
{children}
|
||||
{dialog && (
|
||||
<div className="confirm-overlay" onClick={handleCancel}>
|
||||
<div className="confirm-dialog" role="alertdialog" aria-modal="true" aria-label={dialog.message} onClick={(e) => e.stopPropagation()}>
|
||||
<p className="confirm-message">{dialog.message}</p>
|
||||
<div className="confirm-actions">
|
||||
<button className="confirm-btn confirm-btn-cancel" onClick={handleCancel}>취소</button>
|
||||
<button className="confirm-btn confirm-btn-ok" onClick={handleConfirm} autoFocus>확인</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
</ConfirmContext.Provider>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user