2024-08-02 17:23:27 +02:00
|
|
|
import {Card, Divider, Popconfirm, Table, Tag, theme, Typography} from "antd";
|
2024-07-29 18:54:28 +02:00
|
|
|
import {t} from "ttag";
|
2024-08-02 17:23:27 +02:00
|
|
|
import {deleteWatchlist} from "../../utils/api";
|
2024-07-29 18:54:28 +02:00
|
|
|
import {DeleteFilled} from "@ant-design/icons";
|
|
|
|
|
import React from "react";
|
2024-08-02 17:23:27 +02:00
|
|
|
import useBreakpoint from "../../hooks/useBreakpoint";
|
|
|
|
|
import {actionToColor} from "../search/EventTimeline";
|
|
|
|
|
import {Watchlist} from "../../pages/tracking/WatchlistPage";
|
2024-07-29 18:54:28 +02:00
|
|
|
|
2024-07-31 12:37:43 +02:00
|
|
|
const {useToken} = theme;
|
2024-07-31 02:55:20 +02:00
|
|
|
|
2024-07-29 18:54:28 +02:00
|
|
|
|
|
|
|
|
export function WatchlistsList({watchlists, onDelete}: { watchlists: Watchlist[], onDelete: () => void }) {
|
2024-07-31 12:37:43 +02:00
|
|
|
const {token} = useToken()
|
2024-08-02 17:23:27 +02:00
|
|
|
const sm = useBreakpoint('sm')
|
|
|
|
|
|
|
|
|
|
const columns = [
|
|
|
|
|
{
|
|
|
|
|
title: t`Domain names`,
|
|
|
|
|
dataIndex: 'domains'
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
title: t`Tracked events`,
|
|
|
|
|
dataIndex: 'events'
|
|
|
|
|
}
|
|
|
|
|
]
|
2024-07-31 02:55:20 +02:00
|
|
|
|
2024-07-29 18:54:28 +02:00
|
|
|
return <>
|
|
|
|
|
{watchlists.map(watchlist =>
|
|
|
|
|
<>
|
2024-08-02 17:23:27 +02:00
|
|
|
<Card
|
|
|
|
|
title={t`Watchlist`}
|
|
|
|
|
size='small'
|
|
|
|
|
extra={<Popconfirm
|
|
|
|
|
title={t`Delete the Watchlist`}
|
|
|
|
|
description={t`Are you sure to delete this Watchlist?`}
|
|
|
|
|
onConfirm={() => deleteWatchlist(watchlist.token).then(onDelete)}
|
|
|
|
|
okText={t`Yes`}
|
|
|
|
|
cancelText={t`No`}
|
|
|
|
|
okButtonProps={{danger: true}}
|
|
|
|
|
><DeleteFilled style={{color: token.colorError}}/></Popconfirm>}>
|
2024-07-31 12:37:43 +02:00
|
|
|
<Card.Meta description={watchlist.token} style={{marginBottom: '1em'}}/>
|
2024-08-02 17:23:27 +02:00
|
|
|
<Table
|
|
|
|
|
columns={columns}
|
|
|
|
|
pagination={false}
|
|
|
|
|
dataSource={[{
|
|
|
|
|
domains: watchlist.domains.map(d =>
|
|
|
|
|
<Typography.Paragraph>{d.ldhName}</Typography.Paragraph>),
|
|
|
|
|
events: watchlist.triggers?.filter(t => t.action === 'email')
|
|
|
|
|
.map(t => <Tag color={actionToColor(t.event)}>{t.event}</Tag>)
|
|
|
|
|
}]}
|
|
|
|
|
{...(sm ? {scroll: {y: 'max-content'}} : {scroll: {y: 240}})}
|
|
|
|
|
/>
|
2024-07-29 18:54:28 +02:00
|
|
|
</Card>
|
|
|
|
|
<Divider/>
|
|
|
|
|
</>
|
|
|
|
|
)}
|
|
|
|
|
</>
|
|
|
|
|
}
|