import { useTRPC } from '@/integrations/trpc/react';
import { pushModal, showConfirm } from '@/modals';
import type { RouterOutputs } from '@/trpc/client';
import type { NotificationRule } from '@openpanel/db';
import { useMutation, useQueryClient } from '@tanstack/react-query';
import { FilterIcon } from 'lucide-react';
import { toast } from 'sonner';
import { ColorSquare } from '../color-square';
import {
IntegrationCardFooter,
IntegrationCardHeader,
} from '../integrations/integration-card';
import { PingBadge } from '../ping';
import { Badge } from '../ui/badge';
import { Button } from '../ui/button';
import { Tooltiper } from '../ui/tooltip';
function EventBadge({
event,
}: { event: NotificationRule['config']['events'][number] }) {
return (
{event.filters.map((filter) => (
{filter.name} {filter.operator} {JSON.stringify(filter.value)}
))}
}
>
{event.name === '*' ? 'Any event' : event.name}
{Boolean(event.filters.length) && (
)}
);
}
export function RuleCard({
rule,
}: { rule: RouterOutputs['notification']['rules'][number] }) {
const trpc = useTRPC();
const client = useQueryClient();
const deletion = useMutation(
trpc.notification.deleteRule.mutationOptions({
onSuccess() {
toast.success('Rule deleted');
client.refetchQueries(
trpc.notification.rules.queryOptions({
projectId: rule.projectId,
}),
);
},
}),
);
const renderConfig = () => {
switch (rule.config.type) {
case 'events':
return (
Get notified when
{rule.config.events.map((event) => (
))}
occurs
);
case 'funnel':
return (
Get notified when a session has completed this funnel
{rule.config.events.map((event, index) => (
{index + 1}
))}
);
}
};
return (
{rule.name}
{renderConfig()}
{rule.integrations.map((integration) => (
{integration.name}
))}
);
}