import { Button, Form, Input } from "antd"; import { ContentLayout } from "../../Components/ContentLayout"; import { CreatorsList } from "../../Components/Creators"; import { FormInstance } from "antd-latest"; import { IOView, NLView } from "../../types"; import { IUserInvite } from "./interfaces/IUser"; import { ProgressButton } from "../../Components/ProgressButton"; import { SocialMediaInputs } from "../../Components/Input/SocialMediaInputs"; import { Spin } from "../../Components/Spin"; import { UserInvitationReadPublicResponse } from "@newstackdev/iosdk-newgraph-client-js"; import { phoneNumberReformat } from "../../utils/phoneNumberReformat"; import { useActions, useAppState } from "../../overmind"; import { useCachedInvitees } from "../../hooks/useCached"; import { useForm } from "antd/lib/form/Form"; import { useState } from "react"; import UserInviteInfo from "./UserInviteInfo"; export const UserInvite: NLView = () => { const [form] = useForm(); const actions = useActions(); const state = useAppState(); const [status, setStatus] = useState<"start" | "inprogress" | "failed" | "done">("start"); const [fullName, setFullName] = useState(undefined); const [hash, setHash] = useState(); const [visibleForm, setVisibleForm] = useState(false); const user = state.api.auth.user; const numberOfInvites = user.availableInvites || undefined; const onFinish = async (data: IUserInvite) => { try { setFullName(data.fullName); const responseHash = await actions.api.user.invite({ userInvite: data }); setHash(responseHash); setStatus("done"); } catch (ex) { setStatus("failed"); } }; switch (status) { case "inprogress": return ; case "failed": return (
Oops! Looks like something went wrong.
Try to refresh or {" "} ask support
); case "done": return ; case "start": return ( {numberOfInvites === 0 || numberOfInvites === undefined || visibleForm ? ( ) : ( )} ); } }; export const InviteesList: IOView<{ setVisibleForm: React.Dispatch>; maxItems?: number; title?: string; }> = ({ setVisibleForm, maxItems, title }) => { const inviteesList = useCachedInvitees(); const state = useAppState(); const user = state.api.auth.user; const numberOfInvites = user.availableInvites ?? 0; return (
{maxItems !== undefined && ( <>

You have {numberOfInvites} invites left

)}
); }; const FormInviteFriend: IOView<{ form: FormInstance; onFinish: (data: IUserInvite) => Promise }> = ({ form, onFinish, }) => { const emailReg = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; const phoneReg = /^[+]?[(]?[0-9]{3}[)]?[-s.]?[0-9]{3}[-s.]?[0-9]{4,6}$/; return ( <>

Invite a friend

phoneNumberReformat(values, form)} />

Optional

Generate invite
); };