import { UserRemoveIcon, PencilIcon } from "@heroicons/react/outline"; import { ClockIcon, ExternalLinkIcon, DotsHorizontalIcon } from "@heroicons/react/solid"; import Link from "next/link"; import React, { useState } from "react"; import TeamAvailabilityModal from "@ee/components/team/availability/TeamAvailabilityModal"; import { getPlaceholderAvatar } from "@lib/getPlaceholderAvatar"; import { useLocale } from "@lib/hooks/useLocale"; import showToast from "@lib/notification"; import { trpc, inferQueryOutput } from "@lib/trpc"; import { Dialog, DialogTrigger } from "@components/Dialog"; import { Tooltip } from "@components/Tooltip"; import ConfirmationDialogContent from "@components/dialog/ConfirmationDialogContent"; import Avatar from "@components/ui/Avatar"; import Button from "@components/ui/Button"; import ModalContainer from "@components/ui/ModalContainer"; import Dropdown, { DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from "../ui/Dropdown"; import MemberChangeRoleModal from "./MemberChangeRoleModal"; import TeamRole from "./TeamRole"; import { MembershipRole } from ".prisma/client"; interface Props { team: inferQueryOutput<"viewer.teams.get">; member: inferQueryOutput<"viewer.teams.get">["members"][number]; } export default function MemberListItem(props: Props) { const { t } = useLocale(); const utils = trpc.useContext(); const [showChangeMemberRoleModal, setShowChangeMemberRoleModal] = useState(false); const [showTeamAvailabilityModal, setShowTeamAvailabilityModal] = useState(false); const removeMemberMutation = trpc.useMutation("viewer.teams.removeMember", { async onSuccess() { await utils.invalidateQueries(["viewer.teams.get"]); showToast(t("success"), "success"); }, async onError(err) { showToast(err.message, "error"); }, }); const name = props.member.name || (() => { const emailName = props.member.email.split("@")[0]; return emailName.charAt(0).toUpperCase() + emailName.slice(1); })(); const removeMember = () => removeMemberMutation.mutate({ teamId: props.team?.id, memberId: props.member.id }); return (
  • {name} {props.member.email}
    {!props.member.accepted && }
    {(props.team.membership.role === MembershipRole.OWNER || props.team.membership.role === MembershipRole.ADMIN) && ( <> {t("remove_member_confirmation_message")} )}
    {showChangeMemberRoleModal && ( setShowChangeMemberRoleModal(false)} /> )} {showTeamAvailabilityModal && (
    )}
  • ); }