import InputWithChips, { UserChip } from "@components/InputWithChips"; import SimpleDivider from "@components/SimpleDivider"; import { Transition, Dialog } from "@headlessui/react"; import { PaperAirplaneIcon } from "@heroicons/react/20/solid"; import { Button, Typography } from "@material-tailwind/react"; import React, { Fragment, useEffect, useState } from "react"; import { Formik } from "formik"; import { AccessPermissions, AccessType } from "@prisma/client"; import AccessPermissionsPicker from "@components/AccessPermissionsPicker"; interface ShareTwineProps { open: boolean; accessPermissions?: AccessPermissions; onBackClicked: () => void; onSend: (users: string[], accessType?: AccessType) => void; } const initializeUsers = (users?: string[]) => { if (!users) return []; return users.map((user) => { return { username: user, img: "" }; }); }; function useUsers(initialUsers?: string[]): [UserChip[], (user: string) => void, (index: number) => void] { const [users, setUsers] = useState(initializeUsers(initialUsers)); const addUser = (username: string) => { if (users.some(user => user.username === username)) return; setUsers([...users, { username, img: "" }]); }; const removeUser = (index: number) => { setUsers(users => users.filter((_, i) => i !== index)); }; return [users, addUser, removeUser]; } const ShareTwine: React.FC = (props) => { const { open, onBackClicked, onSend, accessPermissions } = props; const [isOpen, setIsOpen] = useState(false); const [users, addUser, removeUser] = useUsers(accessPermissions?.sharedWith); const [selectedAccessType, setSelectedAccessType] = useState( AccessType.PUBLIC ); useEffect(() => { setIsOpen(open); }, [open]); return ( null}>
Share Your Twine
Press enter/spacebar/comma to add a user { setSubmitting(true); }} > {() => ( <>
setSelectedAccessType(accessType) } />
)}
); }; export default ShareTwine;