-
-
-
-
- {name}
-
- {!props.member.accepted && (
-
- )}
- {isAdmin && props.member.accepted && appList}
- {props.member.role && }
-
-
-
- {props.member.email}
-
- {bookingLink && (
- <>
-
•
-
- {bookingLink}
-
- >
- )}
+ const memorisedColumns = useMemo(() => {
+ const cols: ColumnDef
[] = [
+ {
+ id: "select",
+ header: ({ table }) => (
+ table.toggleAllPageRowsSelected(!!value)}
+ aria-label="Select all"
+ className="translate-y-[2px]"
+ />
+ ),
+ cell: ({ row }) => (
+ row.toggleSelected(!!value)}
+ aria-label="Select row"
+ className="translate-y-[2px]"
+ />
+ ),
+ },
+ {
+ id: "member",
+ accessorFn: (data) => data.email,
+ header: `Member (${totalDBRowCount})`,
+ cell: ({ row }) => {
+ const { username, email, avatarUrl, accepted, name } = row.original;
+ const memberName =
+ name ||
+ (() => {
+ const emailName = email.split("@")[0];
+ return emailName.charAt(0).toUpperCase() + emailName.slice(1);
+ })();
+ return (
+
+
+
+
+ {memberName}
+
+
+ {email}
+
-
-
- {props.team.membership?.accepted && (
-
-
- {/* TODO: bring availability back. right now its ugly and broken
-
- */}
- {!!props.member.accepted && (
-
-
-
+ );
+ },
+ filterFn: (rows, id, filterValue) => {
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
+ // @ts-ignore Weird typing issue
+ return rows.getValue(id).includes(filterValue);
+ },
+ },
+ {
+ id: "role",
+ accessorFn: (data) => data.role,
+ header: "Role",
+ cell: ({ row, table }) => {
+ const { role, accepted } = row.original;
+ return (
+
+ {!accepted && (
+ {
+ table.getColumn("role")?.setFilterValue(["PENDING"]);
+ }}>
+ Pending
+
)}
- {editMode && (
-
-
-
-
-
-
- setShowChangeMemberRoleModal(true)}
- StartIcon="pencil">
- {t("edit")}
-
-
- {impersonationMode && (
- <>
-
+ {
+ table.getColumn("role")?.setFilterValue([role]);
+ }}>
+ {role}
+
+
+ );
+ },
+ filterFn: (rows, id, filterValue) => {
+ if (filterValue.includes("PENDING")) {
+ if (filterValue.length === 1) return !rows.original.accepted;
+ else return !rows.original.accepted || filterValue.includes(rows.getValue(id));
+ }
+
+ // Show only the selected roles
+ return filterValue.includes(rows.getValue(id));
+ },
+ },
+ {
+ id: "actions",
+ cell: ({ row }) => {
+ const user = row.original;
+ const isSelf = user.id === session?.user.id;
+ const editMode =
+ (props.team.membership?.role === MembershipRole.OWNER &&
+ (user.role !== MembershipRole.OWNER || !isSelf)) ||
+ (props.team.membership?.role === MembershipRole.ADMIN && user.role !== MembershipRole.OWNER) ||
+ props.isOrgAdminOrOwner;
+ const impersonationMode =
+ editMode &&
+ !user.disableImpersonation &&
+ user.accepted &&
+ process.env.NEXT_PUBLIC_TEAM_IMPERSONATION === "true";
+ const resendInvitation = editMode && !user.accepted;
+ return (
+ <>
+ {props.team.membership?.accepted && (
+
+
+ {/* TODO: bring availability back. right now its ugly and broken
+
+ */}
+ {!!user.accepted && (
+
+
+
+ )}
+ {editMode && (
+
+
+
+
+
+
+
+ dispatch({
+ type: "EDIT_USER_SHEET",
+ payload: {
+ user,
+ showModal: true,
+ },
+ })
+ }
+ StartIcon="pencil">
+ {t("edit")}
+
+
+ {impersonationMode && (
+ <>
+
+
+ dispatch({
+ type: "SET_IMPERSONATE_ID",
+ payload: {
+ user,
+ showModal: true,
+ },
+ })
+ }
+ StartIcon="lock">
+ {t("impersonate")}
+
+
+
+ >
+ )}
+ {resendInvitation && (
+
+ {
+ resendInvitationMutation.mutate({
+ teamId: props.team?.id,
+ email: user.email,
+ language: i18n.language,
+ });
+ }}
+ StartIcon="send">
+ {t("resend_invitation")}
+
+
+ )}
+
+
+ dispatch({
+ type: "SET_DELETE_ID",
+ payload: {
+ user,
+ showModal: true,
+ },
+ })
+ }
+ color="destructive"
+ StartIcon="user-x">
+ {t("remove")}
+
+
+
+
+ )}
+
+
+
+
+
+
+
+
setShowImpersonateModal(true)}
- StartIcon="lock">
- {t("impersonate")}
+ StartIcon="external-link">
+ {t("view_public_page")}
-
- >
- )}
- {resendInvitation && (
-
- {
- resendInvitationMutation.mutate({
- teamId: props.team?.id,
- email: props.member.email,
- language: i18n.language,
- });
- }}
- StartIcon="send">
- {t("resend_invitation")}
-
-
- )}
-
- setShowDeleteModal(true)}
- color="destructive"
- StartIcon="user-x">
- {t("remove")}
-
-
-
-
+ {editMode && (
+ <>
+
+
+ dispatch({
+ type: "EDIT_USER_SHEET",
+ payload: {
+ user,
+ showModal: true,
+ },
+ })
+ }
+ StartIcon="pencil">
+ {t("edit")}
+
+
+
+
+ dispatch({
+ type: "SET_DELETE_ID",
+ payload: {
+ user,
+ showModal: true,
+ },
+ })
+ }
+ StartIcon="user-x">
+ {t("remove")}
+
+
+ >
+ )}
+
+
+
+
)}
-
-
-
-
-
-
-
-
-
- {t("view_public_page")}
-
-
- {editMode && (
- <>
-
- setShowChangeMemberRoleModal(true)}
- StartIcon="pencil">
- {t("edit")}
-
-
-
- setShowDeleteModal(true)}
- StartIcon="user-x">
- {t("remove")}
-
-
- >
- )}
-
-
-
-
- )}
-
+ >
+ );
+ },
+ },
+ ];
- {editMode && (
-