Files
vf_react/src/views/Community/components/EventCard/KeywordsCarousel.js
2025-11-14 16:15:13 +08:00

87 lines
2.7 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// src/views/Community/components/EventCard/KeywordsCarousel.js
// Keywords标签组件点击切换
import React, { useState } from 'react';
import { Box, Text, Tooltip } from '@chakra-ui/react';
import { PROFESSIONAL_COLORS } from '../../../../constants/professionalTheme';
/**
* Keywords标签组件点击切换下一个
* @param {Array} keywords - 关键词数组
* @param {Function} onKeywordClick - 关键词点击回调
*/
const KeywordsCarousel = ({
keywords = [],
onKeywordClick
}) => {
const [currentIndex, setCurrentIndex] = useState(0);
// 如果没有keywords不渲染
if (!keywords || keywords.length === 0) {
return null;
}
const currentKeyword = keywords[currentIndex];
// 点击切换到下一个关键词
const handleClick = (e) => {
e.stopPropagation();
// 切换到下一个
const nextIndex = (currentIndex + 1) % keywords.length;
setCurrentIndex(nextIndex);
// 触发回调
if (onKeywordClick) {
onKeywordClick(keywords[nextIndex]);
}
};
return (
<Tooltip
label={keywords.length > 1
? `点击切换下一个标签 (${currentIndex + 1}/${keywords.length})`
: '事件标签'}
placement="top"
hasArrow
bg="rgba(20, 20, 20, 0.95)"
color={PROFESSIONAL_COLORS.gold[500]}
fontSize="sm"
>
<Box
position="absolute"
right={4}
top="50%"
transform="translateY(-50%)"
pointerEvents="auto"
zIndex={1}
cursor={keywords.length > 1 ? "pointer" : "default"}
onClick={keywords.length > 1 ? handleClick : undefined}
px={3}
py={1.5}
borderRadius="full"
bg="transparent"
transition="all 0.3s ease"
_hover={keywords.length > 1 ? {
bg: 'rgba(255, 195, 0, 0.15)',
transform: 'translateY(-50%) scale(1.05)',
} : {}}
>
<Text
color={PROFESSIONAL_COLORS.gold[500]}
fontSize="md"
fontWeight="bold"
letterSpacing="wide"
whiteSpace="nowrap"
textShadow="0 0 20px rgba(255, 195, 0, 0.3)"
>
{typeof currentKeyword === 'string'
? currentKeyword
: currentKeyword?.concept || '未知标签'}
</Text>
</Box>
</Tooltip>
);
};
export default KeywordsCarousel;