提交 49abf5dd 作者: 翁进城

增加其它组件调用登录modal的方法

上级 8be05b97
...@@ -43,7 +43,8 @@ const items: TabsProps["items"] = [ ...@@ -43,7 +43,8 @@ const items: TabsProps["items"] = [
export default function NavHeader() { export default function NavHeader() {
const router = useRouter(); const router = useRouter();
const [currentPath, setCurrentPath] = useState(""); const [currentPath, setCurrentPath] = useState("");
const { userInfo, testLogin, logout } = useContext(UserContext); const { userInfo, testLogin, logout, setNeedLogin, needLogin } =
useContext(UserContext);
useEffect(() => { useEffect(() => {
setCurrentPath(router.route); setCurrentPath(router.route);
...@@ -92,6 +93,13 @@ export default function NavHeader() { ...@@ -92,6 +93,13 @@ export default function NavHeader() {
} }
} }
//从其它组件通知需要登录
useEffect(() => {
if (needLogin) {
setOpenLoginModal(true);
}
}, [needLogin]);
return ( return (
<div className={styles.navHeader}> <div className={styles.navHeader}>
<div className={styles.nav}> <div className={styles.nav}>
...@@ -138,7 +146,10 @@ export default function NavHeader() { ...@@ -138,7 +146,10 @@ export default function NavHeader() {
</div> </div>
<LoginModal <LoginModal
open={openLoginModal} open={openLoginModal}
onCancel={() => setOpenLoginModal(false)} onCancel={() => {
setOpenLoginModal(false);
setNeedLogin(false);
}}
></LoginModal> ></LoginModal>
<PublishModal <PublishModal
open={openPublishModal} open={openPublishModal}
......
import React, { createContext, Dispatch, SetStateAction, useEffect, useState } from "react"; import React, {
createContext,
Dispatch,
SetStateAction,
useEffect,
useState,
} from "react";
import api, { UserInfoResp } from "~/api"; import api, { UserInfoResp } from "~/api";
export const UserContext = createContext<{ export const UserContext = createContext<{
...@@ -6,11 +12,15 @@ export const UserContext = createContext<{ ...@@ -6,11 +12,15 @@ export const UserContext = createContext<{
logout: () => void; logout: () => void;
userInfo: UserInfoResp | null; userInfo: UserInfoResp | null;
setUserInfo: Dispatch<SetStateAction<UserInfoResp | null>>; setUserInfo: Dispatch<SetStateAction<UserInfoResp | null>>;
needLogin: Boolean;
setNeedLogin: Dispatch<SetStateAction<Boolean>>;
}>({ }>({
testLogin() {}, testLogin() {},
logout() {}, logout() {},
userInfo: null, userInfo: null,
setUserInfo() {}, setUserInfo() {},
needLogin: false,
setNeedLogin() {},
}); });
type Props = { type Props = {
...@@ -18,6 +28,7 @@ type Props = { ...@@ -18,6 +28,7 @@ type Props = {
}; };
const UserProvider = ({ children }: Props) => { const UserProvider = ({ children }: Props) => {
const [userInfo, setUserInfo] = useState<UserInfoResp | null>(null); const [userInfo, setUserInfo] = useState<UserInfoResp | null>(null);
const [needLogin, setNeedLogin] = useState<Boolean>(false); //用于通知登录modal需要打开
useEffect(() => { useEffect(() => {
try { try {
...@@ -48,7 +59,16 @@ const UserProvider = ({ children }: Props) => { ...@@ -48,7 +59,16 @@ const UserProvider = ({ children }: Props) => {
} }
return ( return (
<UserContext.Provider value={{ userInfo, setUserInfo, testLogin, logout }}> <UserContext.Provider
value={{
userInfo,
setUserInfo,
testLogin,
logout,
needLogin,
setNeedLogin,
}}
>
{children} {children}
</UserContext.Provider> </UserContext.Provider>
); );
......
...@@ -13,11 +13,12 @@ import Layout from "~/components/layout"; ...@@ -13,11 +13,12 @@ import Layout from "~/components/layout";
import styles from "./index.module.scss"; import styles from "./index.module.scss";
import errImg from "~/assets/errImg"; import errImg from "~/assets/errImg";
import { RightOutlined } from "@ant-design/icons"; import { RightOutlined } from "@ant-design/icons";
import { useEffect, useState } from "react"; import { useContext, useEffect, useState } from "react";
import PublishMessage from "./components/publishMessage"; import PublishMessage from "./components/publishMessage";
import api, { ByDynamicParams, Dynamic } from "./api"; import api, { ByDynamicParams, Dynamic } from "./api";
import InfiniteScroll from "react-infinite-scroll-component"; import InfiniteScroll from "react-infinite-scroll-component";
import { useUser } from "~/lib/hooks"; import { useUser } from "~/lib/hooks";
import { UserContext } from "~/lib/userProvider";
interface Item extends Dynamic { interface Item extends Dynamic {
openComment?: boolean; //是否开启评论 openComment?: boolean; //是否开启评论
...@@ -32,8 +33,8 @@ export default function Forum() { ...@@ -32,8 +33,8 @@ export default function Forum() {
pageNo: 1, pageNo: 1,
pageSize: 16, pageSize: 16,
}); });
const [count, setCount] = useState(0); //动态总数 const [count, setCount] = useState(0); //动态总数
const userInfo = useUser(); //获取信息 const { userInfo, setNeedLogin } = useContext(UserContext);
useEffect(() => { useEffect(() => {
api api
...@@ -56,7 +57,11 @@ export default function Forum() { ...@@ -56,7 +57,11 @@ export default function Forum() {
* 展示发布模态框 * 展示发布模态框
*/ */
const showModal = () => { const showModal = () => {
setIsModalOpen(true); if (userInfo) {
setIsModalOpen(true);
} else {
setNeedLogin(true);
}
}; };
/** /**
...@@ -78,16 +83,26 @@ export default function Forum() { ...@@ -78,16 +83,26 @@ export default function Forum() {
//评论内容 //评论内容
const onComment = (values: any, id: number, i: number) => { const onComment = (values: any, id: number, i: number) => {
api.comment({ api
content: values.content, .comment({
dynamicId: id, content: values.content,
userId: userInfo!.id, dynamicId: id,
}).then(res => { userId: userInfo!.id,
if(res.code === '200'){ })
.then((res) => {
} if (res.code === "200") {
}); }
});
}; };
//评论内容
const onCommentContent = () => {
if(userInfo){
}else{
setNeedLogin(true);
}
}
return ( return (
<Layout> <Layout>
<div className={styles.forum}> <div className={styles.forum}>
...@@ -165,8 +180,17 @@ export default function Forum() { ...@@ -165,8 +180,17 @@ export default function Forum() {
</Space> </Space>
{item.openComment && ( {item.openComment && (
<div className={styles.commentWrap}> <div className={styles.commentWrap}>
<Form onFinish={(values) => {onComment(values, item.id, i)}}> <Form
<Form.Item name="content" rules={[{ required: true }]} help="" style={{marginBottom: 0}}> onFinish={(values) => {
onComment(values, item.id, i);
}}
>
<Form.Item
name="content"
rules={[{ required: true }]}
help=""
style={{ marginBottom: 0 }}
>
<div className={styles.draftWrap}> <div className={styles.draftWrap}>
<div className={styles.commentHeadImg}>自已</div> <div className={styles.commentHeadImg}>自已</div>
<Input <Input
...@@ -176,7 +200,12 @@ export default function Forum() { ...@@ -176,7 +200,12 @@ export default function Forum() {
</div> </div>
</Form.Item> </Form.Item>
<div className={styles.btnCommentWrap}> <div className={styles.btnCommentWrap}>
<Button type="primary" htmlType="submit" className="btnComment"> <Button
type="primary"
htmlType="submit"
className="btnComment"
onClick={onCommentContent}
>
评论 评论
</Button> </Button>
</div> </div>
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论