import { getPlaceholderAvatar } from "@calcom/lib/defaultAvatarImage"; import { getUserAvatarUrl } from "@calcom/lib/getAvatarUrl"; import { SMSLockState } from "@calcom/prisma/client"; import { trpc } from "@calcom/trpc/react"; import type { IconName } from "@calcom/ui"; import { Avatar, DropdownActions, Table } from "@calcom/ui"; const { Cell, ColumnTitle, Header, Row } = Table; type Props = { setSMSLockState: (param: { userId?: number; teamId?: number; lock: boolean }) => void; }; type User = { id: number; username: string | null; name: string | null; email: string; smsLockState: SMSLockState; avatarUrl: string | null; }; type Team = { id: number; name: string; smsLockState: SMSLockState; slug: string | null; logoUrl?: string | null; }; function UsersTable({ setSMSLockState }: Props) { const { data: usersAndTeams } = trpc.viewer.admin.getSMSLockStateTeamsUsers.useQuery(); if (!usersAndTeams) { return <>; } const users = usersAndTeams.users.locked.concat(usersAndTeams.users.reviewNeeded); const teams = usersAndTeams.teams.locked.concat(usersAndTeams.teams.reviewNeeded); return ; } const LockStatusTable = ({ users = [], teams = [], setSMSLockState, }: { users?: User[]; teams?: Team[]; setSMSLockState: (param: { userId?: number; teamId?: number; lock: boolean }) => void; }) => { function getActions({ user, team }: { user?: User; team?: Team }) { const smsLockState = user?.smsLockState ?? team?.smsLockState; if (!smsLockState) return []; const actions = [ { id: "unlock-sms", label: smsLockState === SMSLockState.LOCKED ? "Unlock SMS sending" : "Lock SMS sending", onClick: () => setSMSLockState({ userId: user ? user.id : undefined, teamId: team ? team.id : undefined, lock: smsLockState !== SMSLockState.LOCKED, }), icon: "lock" as IconName, }, ]; if (smsLockState === SMSLockState.REVIEW_NEEDED) { actions.push({ id: "reviewed", label: "Mark as Reviewed", onClick: () => setSMSLockState({ userId: user ? user.id : undefined, teamId: team ? team.id : undefined, lock: false, }), icon: "pencil" as IconName, }); } return actions; } return ( <>
User/Team Status Edit
{users.map((user) => (
{" "}
{user.name} /{user.username}
{user.email}
{user.smsLockState}
))} {teams.map((team) => (
{team.name} /team/{team.slug}
{team.smsLockState}
))}
); }; export default UsersTable;