Add File
This commit is contained in:
56
src/elderly/components/LogNotification.tsx
Normal file
56
src/elderly/components/LogNotification.tsx
Normal file
@@ -0,0 +1,56 @@
|
||||
import React, { useEffect, useState } from 'react';
|
||||
|
||||
interface LogNotificationProps {
|
||||
message: string | null;
|
||||
onHide?: () => void;
|
||||
}
|
||||
|
||||
/**
|
||||
* Log通知组件
|
||||
* 从麦克风按钮向右延伸显示WebSocket log信息
|
||||
* 5秒后自动消失
|
||||
*/
|
||||
export const LogNotification: React.FC<LogNotificationProps> = ({ message, onHide }) => {
|
||||
const [isVisible, setIsVisible] = useState(false);
|
||||
|
||||
useEffect(() => {
|
||||
if (message) {
|
||||
setIsVisible(true);
|
||||
|
||||
// 5秒后自动隐藏
|
||||
const timer = setTimeout(() => {
|
||||
setIsVisible(false);
|
||||
setTimeout(() => {
|
||||
onHide?.();
|
||||
}, 300); // 等待淡出动画完成
|
||||
}, 5000);
|
||||
|
||||
return () => clearTimeout(timer);
|
||||
} else {
|
||||
setIsVisible(false);
|
||||
}
|
||||
}, [message, onHide]);
|
||||
|
||||
if (!message) return null;
|
||||
|
||||
return (
|
||||
<div
|
||||
className={`
|
||||
absolute left-20 w-64 px-4 py-3
|
||||
bg-black/30 backdrop-blur-md
|
||||
border border-white/20 rounded-r-2xl
|
||||
text-white text-base
|
||||
transition-all duration-300
|
||||
${isVisible ? 'opacity-100 translate-x-0' : 'opacity-0 -translate-x-4'}
|
||||
`}
|
||||
style={{
|
||||
top: '50%',
|
||||
transform: isVisible ? 'translateY(-50%)' : 'translate(-1rem, -50%)',
|
||||
}}
|
||||
>
|
||||
<div className="flex items-center gap-2">
|
||||
<span className="font-medium">{message}</span>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
Reference in New Issue
Block a user