refactor(qrcode): 组件化重构,采用 Context + Hook 模式
- 创建 QrCodeContext 和 QrCodeProvider 管理共享状态 - 提取 useQrCode Hook 封装所有状态和业务逻辑 - 创建 GeneratePanel 组件处理二维码生成模式 - 创建 ParsePanel 组件处理二维码解析模式 - 简化 index.tsx 为容器组件 (340行 → 47行) - 删除未使用的旧组件文件 (QrCodeToUrlSection, UrlToQrCodeSection) - 清理 types.ts 中未使用的类型定义 - 603 个测试全部通过
This commit is contained in:
@@ -32,93 +32,3 @@ export interface QrCodeParserState {
|
||||
/** 是否正在拖拽 */
|
||||
dragging: boolean;
|
||||
}
|
||||
|
||||
/** 二维码生成器组件的 Props */
|
||||
export interface QrCodeGeneratorProps {
|
||||
/** 输入文本 */
|
||||
textToEncode: string;
|
||||
/** 输入文本变更回调 */
|
||||
onTextChange: (text: string) => void;
|
||||
/** 生成的二维码 Data URL */
|
||||
qrCodeDataUrl: string;
|
||||
/** 二维码 Data URL 变更回调 */
|
||||
onQrCodeDataUrlChange: (dataUrl: string) => void;
|
||||
/** 是否正在生成 */
|
||||
generating: boolean;
|
||||
/** 生成状态变更回调 */
|
||||
onGeneratingChange: (generating: boolean) => void;
|
||||
/** 输入错误信息 */
|
||||
inputError: string;
|
||||
/** 输入错误变更回调 */
|
||||
onInputErrorChange: (error: string) => void;
|
||||
/** 展开状态 */
|
||||
expanded: boolean;
|
||||
/** 展开状态变更回调 */
|
||||
onExpandedChange: (expanded: boolean) => void;
|
||||
/** 是否强制展开(桌面端) */
|
||||
forceExpanded?: boolean;
|
||||
}
|
||||
|
||||
/** 二维码预览组件的 Props */
|
||||
export interface QrCodePreviewProps {
|
||||
/** 二维码 Data URL */
|
||||
qrCodeDataUrl: string;
|
||||
/** 下载回调 */
|
||||
onDownload: () => void;
|
||||
/** 复制回调 */
|
||||
onCopy: () => void;
|
||||
/** 是否正在生成 */
|
||||
generating?: boolean;
|
||||
}
|
||||
|
||||
/** 图片上传器组件的 Props */
|
||||
export interface ImageUploaderProps {
|
||||
/** 选中的文件 */
|
||||
selectedFile: File | null;
|
||||
/** 文件变更回调 */
|
||||
onFileChange: (file: File) => void;
|
||||
/** 清除文件回调 */
|
||||
onClearFile: () => void;
|
||||
/** 文件预览 URL */
|
||||
previewUrl: string;
|
||||
/** 是否正在拖拽 */
|
||||
dragging: boolean;
|
||||
/** 拖拽状态变更回调 */
|
||||
onDraggingChange: (dragging: boolean) => void;
|
||||
}
|
||||
|
||||
/** 二维码解析器组件的 Props */
|
||||
export interface QrCodeParserProps {
|
||||
/** 解析结果文本 */
|
||||
decodedResult: string;
|
||||
/** 解析结果变更回调 */
|
||||
onDecodedResultChange: (result: string) => void;
|
||||
/** 是否正在解析 */
|
||||
parsing: boolean;
|
||||
/** 解析状态变更回调 */
|
||||
onParsingChange: (parsing: boolean) => void;
|
||||
/** 解析错误信息 */
|
||||
parseError: string;
|
||||
/** 解析错误变更回调 */
|
||||
onParseErrorChange: (error: string) => void;
|
||||
/** 选中的文件 */
|
||||
selectedFile: File | null;
|
||||
/** 文件变更回调 */
|
||||
onFileChange: (file: File) => void;
|
||||
/** 清除文件回调 */
|
||||
onClearFile: () => void;
|
||||
/** 文件预览 URL */
|
||||
previewUrl: string;
|
||||
/** 预览 URL 变更回调 */
|
||||
onPreviewUrlChange: (url: string) => void;
|
||||
/** 是否正在拖拽 */
|
||||
dragging: boolean;
|
||||
/** 拖拽状态变更回调 */
|
||||
onDraggingChange: (dragging: boolean) => void;
|
||||
/** 展开状态 */
|
||||
expanded: boolean;
|
||||
/** 展开状态变更回调 */
|
||||
onExpandedChange: (expanded: boolean) => void;
|
||||
/** 是否强制展开(桌面端) */
|
||||
forceExpanded?: boolean;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user