mirror of
https://github.com/LHY0125/PathEditor.git
synced 2026-06-30 18:45:55 +08:00
d28861ff9c
- 新增 Modal 组件,消除 3 个 Dialog 中重复的遮罩层/Escape/stopPropagation 代码 - PathEditDialog/HelpDialog/ImportDialog 改用 Modal 包裹 - handleExport 支持 JSON/CSV 两种格式(CSV 导出代码之前存在但从未接线) - App.tsx 移除冗余的 initDarkMode 后重复设 store 的逻辑 - ErrorBoundary 添加 componentDidCatch 日志和 console.error Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
41 lines
1.6 KiB
TypeScript
41 lines
1.6 KiB
TypeScript
import { useState, useEffect } from 'react';
|
|
import { useTranslation } from 'react-i18next';
|
|
import { Modal } from '@/components/ui/Modal';
|
|
|
|
interface PathEditDialogProps {
|
|
open: boolean;
|
|
title: string;
|
|
initialValue: string;
|
|
onConfirm: (value: string) => void;
|
|
onCancel: () => void;
|
|
}
|
|
|
|
export function PathEditDialog({ open, title, initialValue, onConfirm, onCancel }: PathEditDialogProps) {
|
|
const { t } = useTranslation();
|
|
const [value, setValue] = useState(initialValue);
|
|
|
|
useEffect(() => { if (open) setValue(initialValue); }, [open, initialValue]);
|
|
|
|
return (
|
|
<Modal open={open} onClose={onCancel}>
|
|
<h2 className="text-lg font-semibold mb-4">{title}</h2>
|
|
<label className="text-sm mb-2 block">{t('dialog.pathLabel')}</label>
|
|
<input
|
|
type="text" autoFocus value={value}
|
|
onChange={(e) => setValue(e.target.value)}
|
|
onKeyDown={(e) => { if (e.key === 'Enter') onConfirm(value); }}
|
|
className="w-full min-w-[400px] px-3 py-2 rounded border text-sm outline-none"
|
|
style={{ backgroundColor: 'var(--app-list-bg)', color: 'var(--app-fg)', borderColor: 'var(--app-border)' }}
|
|
/>
|
|
<div className="flex justify-end gap-2 mt-4">
|
|
<button className="px-4 py-1.5 text-sm rounded border" style={{ borderColor: 'var(--app-border)' }} onClick={onCancel}>
|
|
{t('dialog.cancel')}
|
|
</button>
|
|
<button className="px-4 py-1.5 text-sm rounded text-white" style={{ backgroundColor: '#2563eb' }} onClick={() => onConfirm(value)}>
|
|
{t('dialog.confirm')}
|
|
</button>
|
|
</div>
|
|
</Modal>
|
|
);
|
|
}
|