Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 14 additions & 3 deletions src/components/RepositoryCard.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -686,6 +686,14 @@ const RepositoryCardComponent: React.FC<RepositoryCardProps> = ({
// 使用 ref 来跟踪是否已经处理了点击
const isProcessingClickRef = useRef(false);

const hideDescriptionTooltip = useCallback(() => {
if (tooltipHideTimerRef.current) {
clearTimeout(tooltipHideTimerRef.current);
tooltipHideTimerRef.current = null;
}
setShowTooltip(false);
}, []);

// 使用 useCallback 优化事件处理函数
const handleCardClick = useCallback((event: React.MouseEvent<HTMLDivElement>) => {
// 防止重复处理
Expand Down Expand Up @@ -726,9 +734,10 @@ const RepositoryCardComponent: React.FC<RepositoryCardProps> = ({
return;
}

// 打开 README 模态框
// 打开 README 模态框前隐藏描述悬浮提示,避免遮挡预览层
hideDescriptionTooltip();
setReadmeModalOpen(true);
}, [selectionMode, onSelect, repository.id]);
}, [selectionMode, onSelect, repository.id, hideDescriptionTooltip]);

// 处理鼠标按下事件,阻止焦点变化导致页面滚动
const handleMouseDown = useCallback((event: React.MouseEvent<HTMLDivElement>) => {
Expand All @@ -749,12 +758,14 @@ const RepositoryCardComponent: React.FC<RepositoryCardProps> = ({
if (event.key === 'Enter' || event.key === ' ') {
event.preventDefault();
if (selectionMode && onSelect) {
hideDescriptionTooltip();
onSelect(repository.id);
} else {
hideDescriptionTooltip();
setReadmeModalOpen(true);
}
}
}, [selectionMode, onSelect, repository.id, isModalOpen]);
}, [selectionMode, onSelect, repository.id, isModalOpen, hideDescriptionTooltip]);

// 使用 useMemo 缓存卡片类名,避免重复计算
const cardClassName = useMemo(() => {
Expand Down
16 changes: 15 additions & 1 deletion src/components/SubscriptionRepoCard.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,19 @@ export const SubscriptionRepoCard: React.FC<SubscriptionRepoCardProps> = ({ repo
if (aiHideTimerRef.current) clearTimeout(aiHideTimerRef.current);
}, []);

const hideFloatingTooltips = useCallback(() => {
if (descHideTimerRef.current) {
clearTimeout(descHideTimerRef.current);
descHideTimerRef.current = null;
}
if (aiHideTimerRef.current) {
clearTimeout(aiHideTimerRef.current);
aiHideTimerRef.current = null;
}
setDescTooltip(false);
setAiTooltip(false);
}, []);

const abortControllerRef = useRef<AbortController | null>(null);

useEffect(() => {
Expand Down Expand Up @@ -314,8 +327,9 @@ export const SubscriptionRepoCard: React.FC<SubscriptionRepoCardProps> = ({ repo

// 点击卡片打开 README
const handleCardClick = useCallback(() => {
hideFloatingTooltips();
setReadmeModalOpen(true);
}, []);
}, [hideFloatingTooltips]);

const cardTitle = repo.full_name || `${repo.owner?.login || ''}/${repo.name || ''}`;

Expand Down
Loading