import { useParams } from 'common' import { includes, sortBy } from 'lodash' import { Check, Copy, Edit, Edit2, MoreVertical, Trash, X } from 'lucide-react' import Link from 'next/link' import { useMemo } from 'react' import { Badge, Button, DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger, TableCell, TableRow, } from 'ui' import type { EventTrigger } from './EventTriggerList.utils' import { BRIVEN_ROLES } from '@/components/interfaces/Database/Roles/Roles.constants' import { getDatabaseFunctionsHref } from '@/components/interfaces/Database/Triggers/TriggersList/TriggerList.utils' import { ButtonTooltip } from '@/components/ui/ButtonTooltip' interface EventTriggerListProps { filterString: string eventTriggers: EventTrigger[] ownerFilter: string[] canEdit: boolean onEditTrigger: (trigger: EventTrigger) => void onEditTriggerWithAssistant: (trigger: EventTrigger) => void onDuplicateTrigger: (trigger: EventTrigger) => void onDeleteTrigger: (trigger: EventTrigger) => void } const SYSTEM_OWNERS = new Set(BRIVEN_ROLES) export const EventTriggerList = ({ filterString, eventTriggers, ownerFilter, canEdit, onEditTrigger, onEditTriggerWithAssistant, onDuplicateTrigger, onDeleteTrigger, }: EventTriggerListProps) => { const { ref: projectRef } = useParams() const orderedTriggers = useMemo(() => { const searchValue = filterString.toLowerCase() const ownerFilterSet = new Set(ownerFilter) const filteredEventTriggers = eventTriggers.filter((trigger) => { const matchesOwner = ownerFilterSet.size === 0 ? true : trigger.owner ? ownerFilterSet.has(trigger.owner) : false return ( matchesOwner && (includes(trigger.name.toLowerCase(), searchValue) || includes(trigger.event.toLowerCase(), searchValue) || (trigger.function_name && includes(trigger.function_name.toLowerCase(), searchValue))) ) }) return sortBy(filteredEventTriggers, (trigger) => trigger.name.toLocaleLowerCase()) }, [eventTriggers, ownerFilter, filterString]) if (orderedTriggers.length === 0 && filterString.length === 0 && ownerFilter.length === 0) { return (

No event triggers created yet

There are no event triggers configured for this database

) } if (orderedTriggers.length === 0 && (filterString.length > 0 || ownerFilter.length > 0)) { return (

No results found

{filterString.length > 0 ? `Your search for "${filterString}" did not return any results` : 'No event triggers match the current filters'}

) } return ( <> {orderedTriggers.map((trigger) => { const isSystemTrigger = trigger.owner ? SYSTEM_OWNERS.has(trigger.owner) : false const canEditTrigger = !isSystemTrigger && canEdit const disabledReason = !canEdit ? 'You need additional permissions to update event triggers' : 'System event triggers cannot be edited' return ( {canEditTrigger ? ( ) : (

{trigger.name}

)}
{trigger.event} {trigger.function_name ? ( {trigger.function_name} ) : (

-

)}
{trigger.tags && trigger.tags.length > 0 ? (
{trigger.tags.map((tag) => ( {tag} ))}
) : (

-

)}
{trigger.enabled_mode !== 'DISABLED' ? ( ) : ( )}
{canEditTrigger ? (