feat: 事件中心h5去掉,通知弹窗
This commit is contained in:
@@ -2,6 +2,8 @@
|
|||||||
// 统一的认证表单组件
|
// 统一的认证表单组件
|
||||||
import React, { useState, useEffect, useRef } from "react";
|
import React, { useState, useEffect, useRef } from "react";
|
||||||
import { useNavigate } from "react-router-dom";
|
import { useNavigate } from "react-router-dom";
|
||||||
|
import { useSelector } from "react-redux";
|
||||||
|
import { selectIsMobile } from "@/store/slices/deviceSlice";
|
||||||
import {
|
import {
|
||||||
Box,
|
Box,
|
||||||
Button,
|
Button,
|
||||||
@@ -69,6 +71,7 @@ export default function AuthFormContent() {
|
|||||||
const { checkSession } = useAuth();
|
const { checkSession } = useAuth();
|
||||||
const { handleLoginSuccess } = useAuthModal();
|
const { handleLoginSuccess } = useAuthModal();
|
||||||
const { showWelcomeGuide } = useNotification();
|
const { showWelcomeGuide } = useNotification();
|
||||||
|
const isMobile = useSelector(selectIsMobile);
|
||||||
|
|
||||||
// 使用统一配置
|
// 使用统一配置
|
||||||
const config = AUTH_CONFIG;
|
const config = AUTH_CONFIG;
|
||||||
@@ -380,9 +383,9 @@ export default function AuthFormContent() {
|
|||||||
}, config.features.successDelay);
|
}, config.features.successDelay);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ⚡ 延迟 10 秒显示权限引导(温和、非侵入)
|
// ⚡ 延迟 10 秒显示权限引导(温和、非侵入,移动端不显示)
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
if (showWelcomeGuide) {
|
if (!isMobile && showWelcomeGuide) {
|
||||||
logger.info('AuthFormContent', '显示欢迎引导');
|
logger.info('AuthFormContent', '显示欢迎引导');
|
||||||
showWelcomeGuide();
|
showWelcomeGuide();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,13 @@
|
|||||||
// src/contexts/AuthContext.js - Session版本
|
// src/contexts/AuthContext.js - Session版本
|
||||||
import React, { createContext, useContext, useState, useEffect } from 'react';
|
import React, { createContext, useContext, useState, useEffect } from 'react';
|
||||||
|
import { useSelector } from 'react-redux';
|
||||||
import { useNavigate } from 'react-router-dom';
|
import { useNavigate } from 'react-router-dom';
|
||||||
import { useToast } from '@chakra-ui/react';
|
import { useToast } from '@chakra-ui/react';
|
||||||
import { logger } from '../utils/logger';
|
import { logger } from '../utils/logger';
|
||||||
import { useNotification } from '../contexts/NotificationContext';
|
import { useNotification } from '../contexts/NotificationContext';
|
||||||
import { identifyUser, resetUser, trackEvent } from '@lib/posthog';
|
import { identifyUser, resetUser, trackEvent } from '@lib/posthog';
|
||||||
import { SPECIAL_EVENTS } from '@lib/constants';
|
import { SPECIAL_EVENTS } from '@lib/constants';
|
||||||
|
import { selectIsMobile } from '@/store/slices/deviceSlice';
|
||||||
|
|
||||||
// 创建认证上下文
|
// 创建认证上下文
|
||||||
const AuthContext = createContext();
|
const AuthContext = createContext();
|
||||||
@@ -27,6 +29,7 @@ export const AuthProvider = ({ children }) => {
|
|||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
const toast = useToast();
|
const toast = useToast();
|
||||||
const { showWelcomeGuide } = useNotification();
|
const { showWelcomeGuide } = useNotification();
|
||||||
|
const isMobile = useSelector(selectIsMobile);
|
||||||
|
|
||||||
// ⚡ 使用 ref 保存最新的 isAuthenticated 值,避免事件监听器重复注册
|
// ⚡ 使用 ref 保存最新的 isAuthenticated 值,避免事件监听器重复注册
|
||||||
const isAuthenticatedRef = React.useRef(isAuthenticated);
|
const isAuthenticatedRef = React.useRef(isAuthenticated);
|
||||||
@@ -235,9 +238,11 @@ export const AuthProvider = ({ children }) => {
|
|||||||
// isClosable: true,
|
// isClosable: true,
|
||||||
// });
|
// });
|
||||||
|
|
||||||
// ⚡ 登录成功后显示欢迎引导(延迟2秒,避免与登录Toast冲突)
|
// ⚡ 登录成功后显示欢迎引导(延迟2秒,避免与登录Toast冲突,移动端不显示)
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
showWelcomeGuide();
|
if (!isMobile) {
|
||||||
|
showWelcomeGuide();
|
||||||
|
}
|
||||||
}, 2000);
|
}, 2000);
|
||||||
|
|
||||||
return { success: true };
|
return { success: true };
|
||||||
@@ -293,9 +298,11 @@ export const AuthProvider = ({ children }) => {
|
|||||||
isClosable: true,
|
isClosable: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
// ⚡ 注册成功后显示欢迎引导(延迟2秒)
|
// ⚡ 注册成功后显示欢迎引导(延迟2秒,移动端不显示)
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
showWelcomeGuide();
|
if (!isMobile) {
|
||||||
|
showWelcomeGuide();
|
||||||
|
}
|
||||||
}, 2000);
|
}, 2000);
|
||||||
|
|
||||||
return { success: true };
|
return { success: true };
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import {
|
|||||||
fetchPopularKeywords,
|
fetchPopularKeywords,
|
||||||
fetchHotEvents
|
fetchHotEvents
|
||||||
} from '@/store/slices/communityDataSlice';
|
} from '@/store/slices/communityDataSlice';
|
||||||
|
import { selectIsMobile } from '@/store/slices/deviceSlice';
|
||||||
import {
|
import {
|
||||||
Box,
|
Box,
|
||||||
Container,
|
Container,
|
||||||
@@ -75,6 +76,9 @@ const Community = () => {
|
|||||||
// ⚡ 通知权限引导
|
// ⚡ 通知权限引导
|
||||||
const { browserPermission, requestBrowserPermission, registerEventUpdateCallback } = useNotification();
|
const { browserPermission, requestBrowserPermission, registerEventUpdateCallback } = useNotification();
|
||||||
|
|
||||||
|
// ⚡ 设备检测
|
||||||
|
const isMobile = useSelector(selectIsMobile);
|
||||||
|
|
||||||
// ⚡ DynamicNewsCard 的 ref(用于触发刷新)
|
// ⚡ DynamicNewsCard 的 ref(用于触发刷新)
|
||||||
const dynamicNewsCardRef = useRef(null);
|
const dynamicNewsCardRef = useRef(null);
|
||||||
|
|
||||||
@@ -123,8 +127,8 @@ const Community = () => {
|
|||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
// 延迟3秒显示,让用户先浏览页面
|
// 延迟3秒显示,让用户先浏览页面
|
||||||
const timer = setTimeout(() => {
|
const timer = setTimeout(() => {
|
||||||
// 如果未授权或未请求过权限,显示横幅
|
// 移动端不显示通知横幅
|
||||||
if (browserPermission !== 'granted') {
|
if (!isMobile && browserPermission !== 'granted') {
|
||||||
const hasClosedBanner = localStorage.getItem('notification_banner_closed');
|
const hasClosedBanner = localStorage.getItem('notification_banner_closed');
|
||||||
if (!hasClosedBanner) {
|
if (!hasClosedBanner) {
|
||||||
setShowNotificationBanner(true);
|
setShowNotificationBanner(true);
|
||||||
|
|||||||
Reference in New Issue
Block a user