* refactor: move booking-audit client components from packages/features to apps/web/modules This is part of the larger effort to move tRPC-dependent UI components from packages/features to apps/web/modules to eliminate circular dependencies. Changes: - Move BookingHistory.tsx and BookingHistoryPage.tsx to apps/web/modules/booking-audit/components/ - Update imports in apps/web to use the new location Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * refactor: move formbricks client from packages/features to apps/web/modules Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * refactor: move hooks and stores from packages/features to apps/web/modules - Move useAppsData hook from packages/features/apps/hooks to apps/web/modules/apps/hooks - Move onboardingStore from packages/features/ee/organizations/lib to apps/web/modules/ee/organizations/lib - Move useWelcomeModal hook from packages/features/ee/organizations/hooks to apps/web/modules/ee/organizations/hooks - Move useAgentsData hook from packages/features/ee/workflows/hooks to apps/web/modules/ee/workflows/hooks - Update all import paths in consuming files Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * refactor: move onboardingStore test file to apps/web/modules Co-Authored-By: benny@cal.com <sldisek783@gmail.com> --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
71 lines
2.0 KiB
TypeScript
71 lines
2.0 KiB
TypeScript
import { useState } from "react";
|
|
|
|
import { trackFormbricksAction } from "@calcom/web/modules/formbricks/lib/trackFormbricksAction";
|
|
import type { MembershipRole } from "@calcom/prisma/enums";
|
|
import { trpc } from "@calcom/trpc/react";
|
|
import { showToast } from "@calcom/ui/components/toast";
|
|
import { revalidateTeamsList } from "@calcom/web/app/(use-page-wrapper)/(main-nav)/teams/actions";
|
|
|
|
import TeamInviteListItem from "./TeamInviteListItem";
|
|
|
|
interface Props {
|
|
teams: {
|
|
id?: number;
|
|
name?: string | null;
|
|
slug?: string | null;
|
|
bio?: string | null;
|
|
hideBranding?: boolean | undefined;
|
|
role: MembershipRole;
|
|
logoUrl?: string | null;
|
|
accepted: boolean;
|
|
}[];
|
|
}
|
|
|
|
export default function TeamInviteList(props: Props) {
|
|
const utils = trpc.useUtils();
|
|
|
|
const [hideDropdown, setHideDropdown] = useState(false);
|
|
|
|
function selectAction(action: string, teamId: number) {
|
|
switch (action) {
|
|
case "disband":
|
|
deleteTeam(teamId);
|
|
break;
|
|
}
|
|
}
|
|
|
|
const deleteTeamMutation = trpc.viewer.teams.delete.useMutation({
|
|
async onSuccess() {
|
|
await utils.viewer.teams.list.invalidate();
|
|
revalidateTeamsList();
|
|
await utils.viewer.teams.get.invalidate();
|
|
await utils.viewer.organizations.listMembers.invalidate();
|
|
trackFormbricksAction("team_disbanded");
|
|
},
|
|
async onError(err) {
|
|
showToast(err.message, "error");
|
|
},
|
|
});
|
|
|
|
function deleteTeam(teamId: number) {
|
|
deleteTeamMutation.mutate({ teamId });
|
|
}
|
|
|
|
return (
|
|
<div>
|
|
<ul className="bg-default divide-subtle mb-8 divide-y rounded">
|
|
{props.teams.map((team) => (
|
|
<TeamInviteListItem
|
|
key={team?.id as number}
|
|
team={team}
|
|
onActionSelect={(action: string) => selectAction(action, team?.id as number)}
|
|
isPending={deleteTeamMutation.isPending}
|
|
hideDropdown={hideDropdown}
|
|
setHideDropdown={setHideDropdown}
|
|
/>
|
|
))}
|
|
</ul>
|
|
</div>
|
|
);
|
|
}
|