* WIP restored from .git cache * fix exports * sortable row model * feat column visibility component * wip filters with nuqs * pull in unique values from table into filters * correctly assign filters via v/f * inital selection bar refactor * data-table selection bar + optmistic update of delete * dynamic link * migrate member list table to new data-table * total list shows filtered value > db valuie * add filters for attributes * type errors * make content bigger on lg * add mb-6 to teams user datatable to match spacing spec * correctly render multi-badge * fix: masss asignment optimistic UI * fix type errors * remove log * fix toolbar type error * chore: Remove debug artifact * type errors * Update apps/web/public/static/locales/en/common.json * use max-w-fit * chore: Remove unused translation now we don't specify 'mass' in assign * perf: fix: use the onBlur event to prevent focus loss whilst the list is rerendering * Move the data-table exports together in the main barrel, then import * fix exports that were lost in a merge * fix exports that were lost in a merge * fix groupteammapping/availbilityslider * fix overflow problems * add scrollbar-thin class * fix type error * user serverside values for faceted filters * pass filters to serverside * filter serverside * fix team server side filter * add loaded x of y * attributes icon change * correct implementation for text/input attr optimistic * type check fixes * fix platform checks * fix types again * fix types again * fix types again * add use client * add use client * fix-types * fix: Add missing translation in EN * fix e2e tests via testid * fix e2e tests via testid * fix: Member invite popup not popping up * Update copyInviteLink to new-member-button testid * Hopefully fix test ids this time * fix: Use the right buttons on the right pages --------- Co-authored-by: Alex van Andel <me@alexvanandel.com> Co-authored-by: Peer Richelsen <peeroke@gmail.com> Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
63 lines
1.9 KiB
TypeScript
63 lines
1.9 KiB
TypeScript
import { useLocale } from "@calcom/lib/hooks/useLocale";
|
|
import { trpc } from "@calcom/trpc/react";
|
|
import { Button, ConfirmationDialogContent, Dialog, DialogTrigger, showToast } from "@calcom/ui";
|
|
|
|
import type { UserTableUser } from "../types";
|
|
|
|
interface Props {
|
|
users: UserTableUser[];
|
|
onRemove: () => void;
|
|
}
|
|
|
|
export function DeleteBulkUsers({ users, onRemove }: Props) {
|
|
const { t } = useLocale();
|
|
const selectedRows = users; // Get selected rows from table
|
|
const utils = trpc.useUtils();
|
|
const deleteMutation = trpc.viewer.organizations.bulkDeleteUsers.useMutation({
|
|
onSuccess: (_, { userIds }) => {
|
|
showToast("Deleted Users", "success");
|
|
utils.viewer.organizations.listMembers.setInfiniteData(
|
|
{ limit: 10, searchTerm: "", expand: ["attributes"] },
|
|
// @ts-expect-error - infinite data types are not correct
|
|
(oldData) => {
|
|
if (!oldData) return oldData;
|
|
return {
|
|
...oldData,
|
|
pages: oldData.pages.map((page) => ({
|
|
...page,
|
|
rows: page.rows.filter((user) => !userIds.includes(user.id)),
|
|
})),
|
|
};
|
|
}
|
|
);
|
|
},
|
|
onError: (error) => {
|
|
showToast(error.message, "error");
|
|
},
|
|
});
|
|
return (
|
|
<Dialog>
|
|
<DialogTrigger asChild>
|
|
<Button StartIcon="ban">{t("Delete")}</Button>
|
|
</DialogTrigger>
|
|
<ConfirmationDialogContent
|
|
variety="danger"
|
|
title={t("remove_users_from_org")}
|
|
confirmBtnText={t("remove")}
|
|
isPending={deleteMutation.isPending}
|
|
onConfirm={() => {
|
|
deleteMutation.mutateAsync({
|
|
userIds: selectedRows.map((user) => user.id),
|
|
});
|
|
onRemove();
|
|
}}>
|
|
<p className="mt-5">
|
|
{t("remove_users_from_org_confirm", {
|
|
userCount: selectedRows.length,
|
|
})}
|
|
</p>
|
|
</ConfirmationDialogContent>
|
|
</Dialog>
|
|
);
|
|
}
|