import { Fragment } from "react"; import { api } from "~/utils/api"; import { Menu, Transition } from "@headlessui/react"; import { HiMiniPlus } from "react-icons/hi2"; import { useFormik } from "formik"; interface MemberSelectorProps { cardPublicId: string; members: { publicId: string; user: { id: string; name: string | null; }; selected: boolean; }[]; } export default function LabelSelector({ cardPublicId, members, }: MemberSelectorProps) { const utils = api.useUtils(); const refetchCard = () => utils.card.byId.refetch({ id: cardPublicId }); const addOrRemoveMember = api.card.addOrRemoveMember.useMutation({ onSuccess: async () => { await refetchCard(); }, }); const formik = useFormik({ initialValues: { ...Object.fromEntries( members?.map((member) => [member.publicId, member.selected]) ?? [], ), }, onSubmit: (values) => { console.log({ values }); }, enableReinitialize: true, }); const selectedMembers = members.filter((member) => member.selected); return ( <> {selectedMembers.length ? (
{selectedMembers.map((member) => ( {member.user?.name ? member.user?.name .split(" ") .map((namePart) => namePart.charAt(0).toUpperCase()) .join("") : null} ))}
) : ( <> {"Add member"} )}
{members?.map((member) => (
{ e.preventDefault(); await formik.setFieldValue( member.publicId, !formik.values[member.publicId], ); addOrRemoveMember.mutate({ cardPublicId, workspaceMemberPublicId: member.publicId, }); await formik.submitForm(); }} > event.stopPropagation()} onChange={formik.handleChange} checked={formik.values[member.publicId]} />
))}
); }