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} ))}
); }