import {Button, Card, Divider, Drawer, Form, Popconfirm, Space, Table, Tag, theme, Typography} from "antd"; import {t} from "ttag"; import {deleteWatchlist} from "../../utils/api"; import {CalendarFilled, DeleteFilled, DisconnectOutlined, EditOutlined, LinkOutlined} from "@ant-design/icons"; import React, {useState} from "react"; import useBreakpoint from "../../hooks/useBreakpoint"; import {actionToColor, domainEvent} from "../search/EventTimeline"; import {Watchlist} from "../../pages/tracking/WatchlistPage"; import punycode from "punycode/punycode"; import {WatchlistForm} from "./WatchlistForm"; import {Connector} from "../../utils/api/connectors"; const {useToken} = theme; export function WatchlistsList({watchlists, onDelete, onUpdateWatchlist, connectors}: { watchlists: Watchlist[], onDelete: () => void, onUpdateWatchlist: (values: { domains: string[], emailTriggers: string[], token: string }) => Promise, connectors: (Connector & { id: string })[] }) { const {token} = useToken() const sm = useBreakpoint('sm') const domainEventTranslated = domainEvent() const [form] = Form.useForm() const columns = [ { title: t`Domain names`, dataIndex: 'domains' }, { title: t`Tracked events`, dataIndex: 'events' } ] const [open, setOpen] = useState(false) const [loading, setLoading] = useState(false) const showDrawer = () => { setOpen(true) } const onClose = () => { setOpen(false) setLoading(false) } return <> {watchlists.map(watchlist => <> { watchlist.connector ? } color="lime-inverse" title={watchlist.connector.id}/> : } color="default" title={t`This Watchlist is not linked to a Connector.`}/> } {t`Watchlist` + (watchlist.name ? ` (${watchlist.name})` : '')} } size='small' style={{width: '100%'}} extra={ { showDrawer() form.setFields([ {name: 'token', value: watchlist.token}, {name: 'name', value: watchlist.name}, {name: 'connector', value: watchlist.connector?.id}, {name: 'domains', value: watchlist.domains.map(d => d.ldhName)}, {name: 'emailTriggers', value: watchlist.triggers?.map(t => t.event)}, ]) }}/> {t`Cancel`}} > { setLoading(true) onUpdateWatchlist(values).then(onClose).catch(() => setLoading(false)) }} connectors={connectors} isCreation={false} /> deleteWatchlist(watchlist.token).then(onDelete)} okText={t`Yes`} cancelText={t`No`} okButtonProps={{danger: true}}> } > {punycode.toUnicode(d.ldhName)}), events: watchlist.triggers?.filter(t => t.action === 'email') .map(t => {domainEventTranslated[t.event as keyof typeof domainEventTranslated]} ) }]} {...(sm ? {scroll: {y: 'max-content'}} : {scroll: {y: 240}})} /> )} }