import { useState } from "react"; import { trpc } from "@calcom/trpc/react"; import type { RouterOutputs } from "@calcom/trpc/react"; import { Badge } from "@calcom/ui/components/badge"; import { Button } from "@calcom/ui/components/button"; import { PanelCard } from "@calcom/ui/components/card"; import { Switch } from "@calcom/ui/components/form"; import { ListItem, ListItemText, ListItemTitle } from "@calcom/ui/components/list"; import { List } from "@calcom/ui/components/list"; import { showToast } from "@calcom/ui/components/toast"; import { AssignFeatureSheet } from "./AssignFeatureSheet"; export const FlagAdminList = () => { const [data] = trpc.viewer.features.list.useSuspenseQuery(); const [selectedFlag, setSelectedFlag] = useState(null); const [sheetOpen, setSheetOpen] = useState(false); const groupedFlags = data.reduce( (acc, flag) => { const type = flag.type || "OTHER"; if (!acc[type]) { acc[type] = []; } acc[type].push(flag); return acc; }, {} as Record ); const sortedTypes = Object.keys(groupedFlags).sort(); const handleAssignClick = (flag: Flag) => { setSelectedFlag(flag); setSheetOpen(true); }; return ( <>
{sortedTypes.map((type) => ( {groupedFlags[type].map((flag: Flag, index: number) => (
{flag.slug} {flag.description}
))}
))}
{selectedFlag && ( )} ); }; type Flag = RouterOutputs["viewer"]["features"]["list"][number]; const FlagToggle = (props: { flag: Flag }) => { const { flag: { slug, enabled }, } = props; const utils = trpc.useUtils(); const mutation = trpc.viewer.admin.toggleFeatureFlag.useMutation({ onSuccess: () => { showToast("Flags successfully updated", "success"); utils.viewer.features.list.invalidate(); utils.viewer.features.map.invalidate(); }, }); return ( { mutation.mutate({ slug, enabled: checked }); }} /> ); };