From 0da122281e78f3351b3019f7c3f9cc84ddaccdc1 Mon Sep 17 00:00:00 2001 From: Phantom <59059173+EurFelux@users.noreply.github.com> Date: Thu, 21 Aug 2025 15:09:39 +0800 Subject: [PATCH] fix(AttachmentButton): Add selection state to prevent repeated file selection triggering (#9379) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fix(AttachmentButton): 添加选择状态防止重复触发文件选择 添加 selecting 状态变量以防止在文件选择过程中重复触发选择操作,避免潜在的文件选择窗口冲突 --- .../src/pages/home/Inputbar/AttachmentButton.tsx | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/renderer/src/pages/home/Inputbar/AttachmentButton.tsx b/src/renderer/src/pages/home/Inputbar/AttachmentButton.tsx index 7e6d583fc3..8135eecf7c 100644 --- a/src/renderer/src/pages/home/Inputbar/AttachmentButton.tsx +++ b/src/renderer/src/pages/home/Inputbar/AttachmentButton.tsx @@ -2,7 +2,7 @@ import { FileMetadata, FileType } from '@renderer/types' import { filterSupportedFiles } from '@renderer/utils/file' import { Tooltip } from 'antd' import { Paperclip } from 'lucide-react' -import { FC, useCallback, useImperativeHandle } from 'react' +import { FC, useCallback, useImperativeHandle, useState } from 'react' import { useTranslation } from 'react-i18next' export interface AttachmentButtonRef { @@ -29,11 +29,16 @@ const AttachmentButton: FC = ({ disabled }) => { const { t } = useTranslation() + const [selecting, setSelecting] = useState(false) const onSelectFile = useCallback(async () => { + if (selecting) { + return + } // when the number of extensions is greater than 20, use *.* to avoid selecting window lag const useAllFiles = extensions.length > 20 + setSelecting(true) const _files: FileMetadata[] = await window.api.file.select({ properties: ['openFile', 'multiSelections'], filters: [ @@ -43,6 +48,7 @@ const AttachmentButton: FC = ({ } ] }) + setSelecting(false) if (_files) { if (!useAllFiles) { @@ -63,7 +69,7 @@ const AttachmentButton: FC = ({ }) } } - }, [extensions, files, setFiles, t]) + }, [extensions, files, selecting, setFiles, t]) const openQuickPanel = useCallback(() => { onSelectFile()