refactor: conditional props example
This commit is contained in:
@@ -98,11 +98,11 @@ const Styled = styled.div`
|
|||||||
`;
|
`;
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
cid: null | number;
|
cid?: number;
|
||||||
closeModal: () => void;
|
closeModal: () => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
const AddMembers: FC<Props> = ({ cid = null, closeModal }) => {
|
const AddMembers: FC<Props> = ({ cid, closeModal }) => {
|
||||||
const [addMembers, { isLoading: isAdding, isSuccess }] = useAddMembersMutation();
|
const [addMembers, { isLoading: isAdding, isSuccess }] = useAddMembersMutation();
|
||||||
const [selects, setSelects] = useState([]);
|
const [selects, setSelects] = useState([]);
|
||||||
const { channel, contactData } = useAppSelector((store) => {
|
const { channel, contactData } = useAppSelector((store) => {
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { useEffect, useState, ChangeEvent } from "react";
|
import { useEffect, useState, ChangeEvent, FC } from "react";
|
||||||
import toast from "react-hot-toast";
|
import toast from "react-hot-toast";
|
||||||
import styled from "styled-components";
|
import styled from "styled-components";
|
||||||
import useInviteLink from "../../hook/useInviteLink";
|
import useInviteLink from "../../hook/useInviteLink";
|
||||||
@@ -68,7 +68,11 @@ const Styled = styled.div`
|
|||||||
}
|
}
|
||||||
`;
|
`;
|
||||||
|
|
||||||
export default function InviteByEmail({ cid = null }) {
|
interface Props {
|
||||||
|
cid?: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
const InviteByEmail: FC<Props> = ({ cid }) => {
|
||||||
const [email, setEmail] = useState("");
|
const [email, setEmail] = useState("");
|
||||||
const { enableSMTP, linkCopied, link, copyLink, generateNewLink, generating } =
|
const { enableSMTP, linkCopied, link, copyLink, generateNewLink, generating } =
|
||||||
useInviteLink(cid);
|
useInviteLink(cid);
|
||||||
@@ -110,10 +114,12 @@ export default function InviteByEmail({ cid = null }) {
|
|||||||
</div>
|
</div>
|
||||||
<div className="tip">
|
<div className="tip">
|
||||||
Invite link expires in 7 days.{" "}
|
Invite link expires in 7 days.{" "}
|
||||||
<button disabled={generating} className="new" onClick={generateNewLink}>
|
<button disabled={generating} className="new" onClick={() => generateNewLink()}>
|
||||||
Generate New Link
|
Generate New Link
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</Styled>
|
</Styled>
|
||||||
);
|
);
|
||||||
}
|
};
|
||||||
|
|
||||||
|
export default InviteByEmail;
|
||||||
|
|||||||
@@ -33,12 +33,12 @@ const Styled = styled.div`
|
|||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
type?: "server" | "channel";
|
type?: "server" | "channel";
|
||||||
cid?: null | number;
|
cid?: number;
|
||||||
title?: string;
|
title?: string;
|
||||||
closeModal: () => void;
|
closeModal: () => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
const InviteModal: FC<Props> = ({ type = "server", cid = null, title = "", closeModal }) => {
|
const InviteModal: FC<Props> = ({ type = "server", cid, title = "", closeModal }) => {
|
||||||
const { channel, server } = useAppSelector((store) => {
|
const { channel, server } = useAppSelector((store) => {
|
||||||
return {
|
return {
|
||||||
channel: store.channels.byId[cid],
|
channel: store.channels.byId[cid],
|
||||||
@@ -54,7 +54,7 @@ const InviteModal: FC<Props> = ({ type = "server", cid = null, title = "", close
|
|||||||
<CloseIcon className="close" onClick={closeModal} />
|
<CloseIcon className="close" onClick={closeModal} />
|
||||||
</h2>
|
</h2>
|
||||||
{!channel?.is_public && <AddMembers cid={cid} closeModal={closeModal} />}
|
{!channel?.is_public && <AddMembers cid={cid} closeModal={closeModal} />}
|
||||||
<InviteByEmail cid={channel?.is_public ? null : cid} />
|
<InviteByEmail cid={channel?.is_public ? undefined : cid} />
|
||||||
</Styled>
|
</Styled>
|
||||||
</Modal>
|
</Modal>
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user