From eb8717da8e6b2faddfc157490941f343b7e91c1e Mon Sep 17 00:00:00 2001 From: zerosoul Date: Fri, 15 Apr 2022 13:16:45 +0800 Subject: [PATCH] feat: channel invite modal --- .../{InviteModal.js => ChannelInviteModal.js} | 13 ++++-- src/common/hook/useInviteLink.js | 41 ++++++++++++++----- 2 files changed, 41 insertions(+), 13 deletions(-) rename src/common/component/{InviteModal.js => ChannelInviteModal.js} (90%) diff --git a/src/common/component/InviteModal.js b/src/common/component/ChannelInviteModal.js similarity index 90% rename from src/common/component/InviteModal.js rename to src/common/component/ChannelInviteModal.js index b28fd9d7..c7d1cd1d 100644 --- a/src/common/component/InviteModal.js +++ b/src/common/component/ChannelInviteModal.js @@ -77,7 +77,7 @@ const Styled = styled.div` import Modal from "./Modal"; import Button from "./styled/Button"; import Input from "./styled/Input"; -export default function InviteModal({ title, closeModal }) { +export default function ChannelInviteModal({ cid = null, title, closeModal }) { const { enableSMTP, linkCopied, @@ -85,7 +85,8 @@ export default function InviteModal({ title, closeModal }) { copyLink, generateNewLink, generating, - } = useInviteLink(); + } = useInviteLink(cid); + if (!cid) return null; return ( @@ -98,6 +99,7 @@ export default function InviteModal({ title, closeModal }) {
- + diff --git a/src/common/hook/useInviteLink.js b/src/common/hook/useInviteLink.js index 1001ab8d..aabd31fc 100644 --- a/src/common/hook/useInviteLink.js +++ b/src/common/hook/useInviteLink.js @@ -1,33 +1,54 @@ import { useState, useEffect } from "react"; import useCopy from "./useCopy"; import { - useCreateInviteLinkQuery, + useLazyCreateInviteLinkQuery as useCreateServerInviteLinkQuery, useGetSMTPConfigQuery, } from "../../app/services/server"; -export default function useInviteLink() { +import { useLazyCreateInviteLinkQuery as useCreateChannelInviteLinkQuery } from "../../app/services/channel"; +export default function useInviteLink(cid = null) { const [finalLink, setFinalLink] = useState(""); const { data: config, - isSuccess: configQuerySuccess, } = useGetSMTPConfigQuery(); - const { data: link, isLoading, refetch } = useCreateInviteLinkQuery(); + const [ + generateChannelInviteLink, + { data: channelInviteLink, isFetching: generatingChannelLink }, + ] = useCreateChannelInviteLinkQuery(); + const [ + generateServerInviteLink, + { data: serverInviteLink, isFetching: generatingServerLink }, + ] = useCreateServerInviteLinkQuery(); const [linkCopied, copy] = useCopy(); const copyLink = () => { copy(finalLink); }; + const regenLink = cid + ? () => { + generateChannelInviteLink(cid); + } + : generateServerInviteLink; useEffect(() => { - if (link && config) { - const tmpURL = new URL(link); + if (cid) { + generateChannelInviteLink(cid); + } else { + generateServerInviteLink(); + } + }, [cid]); + + useEffect(() => { + const _link = serverInviteLink || channelInviteLink; + console.log("fetching", serverInviteLink, channelInviteLink); + if (_link && config) { + const tmpURL = new URL(_link); tmpURL.searchParams.set("code", config.enabled); setFinalLink(tmpURL.href); } - }, [link, config]); - + }, [serverInviteLink, channelInviteLink, config]); return { enableSMTP: config?.enabled, - generating: isLoading, - generateNewLink: refetch, + generating: generatingChannelLink || generatingServerLink, + generateNewLink: regenLink, link: finalLink, linkCopied, copyLink,