import React, { useState, useCallback } from 'react'; import styles from './index.module.scss'; import { Box, Flex, Image, useDisclosure } from '@chakra-ui/react'; import { PageTypeEnum } from '@/constants/user'; import { useGlobalStore } from '@/store/global'; import type { ResLogin } from '@/api/response/user'; import { useRouter } from 'next/router'; import { useUserStore } from '@/store/user'; import { useChatStore } from '@/store/chat'; import LoginForm from './components/LoginForm'; import dynamic from 'next/dynamic'; import { serviceSideProps } from '@/utils/i18n'; import { setToken } from '@/utils/user'; import { feConfigs } from '@/store/static'; import CommunityModal from '@/components/CommunityModal'; const RegisterForm = dynamic(() => import('./components/RegisterForm')); const ForgetPasswordForm = dynamic(() => import('./components/ForgetPasswordForm')); const Login = () => { const router = useRouter(); const { lastRoute = '' } = router.query as { lastRoute: string }; const { isPc } = useGlobalStore(); const [pageType, setPageType] = useState<`${PageTypeEnum}`>(PageTypeEnum.login); const { setUserInfo } = useUserStore(); const { setLastChatId, setLastChatAppId } = useChatStore(); const { isOpen, onOpen, onClose } = useDisclosure(); const loginSuccess = useCallback( (res: ResLogin) => { // init store setLastChatId(''); setLastChatAppId(''); setUserInfo(res.user); setToken(res.token); setTimeout(() => { router.push(lastRoute ? decodeURIComponent(lastRoute) : '/app/list'); }, 100); }, [lastRoute, router, setLastChatId, setLastChatAppId, setUserInfo] ); function DynamicComponent({ type }: { type: `${PageTypeEnum}` }) { const TypeMap = { [PageTypeEnum.login]: LoginForm, [PageTypeEnum.register]: RegisterForm, [PageTypeEnum.forgetPassword]: ForgetPasswordForm }; const Component = TypeMap[type]; return ; } return ( {isPc && ( )} {feConfigs?.show_contact && ( 无法登录,点击联系 )} {isOpen && } ); }; export async function getServerSideProps(context: any) { return { props: { ...(await serviceSideProps(context)) } }; } export default Login;