diff --git a/assets/components/tracking/DeleteWatchlistButton.tsx b/assets/components/tracking/DeleteWatchlistButton.tsx new file mode 100644 index 0000000..cecac54 --- /dev/null +++ b/assets/components/tracking/DeleteWatchlistButton.tsx @@ -0,0 +1,22 @@ +import {Popconfirm, theme, Typography} from "antd"; +import {t} from "ttag"; +import {deleteWatchlist} from "../../utils/api"; +import {DeleteFilled} from "@ant-design/icons"; +import React from "react"; +import {Watchlist} from "../../pages/tracking/WatchlistPage"; + +export function DeleteWatchlistButton({watchlist, onDelete}: { watchlist: Watchlist, onDelete: () => void }) { + const {token} = theme.useToken() + + return deleteWatchlist(watchlist.token).then(onDelete)} + okText={t`Yes`} + cancelText={t`No`} + okButtonProps={{danger: true}}> + + + + +} \ No newline at end of file diff --git a/assets/components/tracking/UpdateWatchlistButton.tsx b/assets/components/tracking/UpdateWatchlistButton.tsx new file mode 100644 index 0000000..7e3686d --- /dev/null +++ b/assets/components/tracking/UpdateWatchlistButton.tsx @@ -0,0 +1,67 @@ +import {Button, Drawer, Form, Typography} from "antd"; +import {t} from "ttag"; +import {WatchlistForm} from "./WatchlistForm"; +import React, {useState} from "react"; +import {Watchlist} from "../../pages/tracking/WatchlistPage"; +import {EditOutlined} from "@ant-design/icons"; +import {Connector} from "../../utils/api/connectors"; + +export function UpdateWatchlistButton({watchlist, onUpdateWatchlist, connectors}: { + watchlist: Watchlist, + onUpdateWatchlist: (values: { domains: string[], emailTriggers: string[], token: string }) => Promise, + connectors: (Connector & { id: string })[] +}) { + + const [form] = Form.useForm() + const [open, setOpen] = useState(false) + const [loading, setLoading] = useState(false) + + + const showDrawer = () => { + setOpen(true) + } + + const onClose = () => { + setOpen(false) + setLoading(false) + } + + return <> + + { + 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} + /> + + + +} \ No newline at end of file diff --git a/assets/components/tracking/ViewDiagramWatchlistButton.tsx b/assets/components/tracking/ViewDiagramWatchlistButton.tsx new file mode 100644 index 0000000..241f6ad --- /dev/null +++ b/assets/components/tracking/ViewDiagramWatchlistButton.tsx @@ -0,0 +1,40 @@ +import {Button, Modal, Space, Typography} from "antd" +import {t} from "ttag" +import React, {useState} from "react" +import {Watchlist} from "../../pages/tracking/WatchlistPage" +import {ApartmentOutlined} from "@ant-design/icons" + +export function ViewDiagramWatchlistButton({watchlist}: { watchlist: Watchlist }) { + const [open, setOpen] = useState(false) + + return <> + + setOpen(true)}/> + + + + + + + } + onOk={() => setOpen(false)} + onCancel={() => setOpen(false)} + width='80%' + > + + + + +} \ No newline at end of file diff --git a/assets/components/tracking/WatchlistsList.tsx b/assets/components/tracking/WatchlistsList.tsx index ba32b8a..1d36b04 100644 --- a/assets/components/tracking/WatchlistsList.tsx +++ b/assets/components/tracking/WatchlistsList.tsx @@ -1,16 +1,15 @@ -import {Button, Card, Divider, Drawer, Form, Popconfirm, Space, Table, Tag, theme, Typography} from "antd"; +import {Card, Divider, Space, Table, Tag, 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 {CalendarFilled, DisconnectOutlined, LinkOutlined} from "@ant-design/icons"; +import React 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; +import {UpdateWatchlistButton} from "./UpdateWatchlistButton"; +import {DeleteWatchlistButton} from "./DeleteWatchlistButton"; +import {ViewDiagramWatchlistButton} from "./ViewDiagramWatchlistButton"; export function WatchlistsList({watchlists, onDelete, onUpdateWatchlist, connectors}: { watchlists: Watchlist[], @@ -18,10 +17,9 @@ export function WatchlistsList({watchlists, onDelete, onUpdateWatchlist, connect 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 = [ { @@ -34,17 +32,6 @@ export function WatchlistsList({watchlists, onDelete, onUpdateWatchlist, connect } ] - const [open, setOpen] = useState(false) - const [loading, setLoading] = useState(false) - - const showDrawer = () => { - setOpen(true) - } - - const onClose = () => { - setOpen(false) - setLoading(false) - } return <> {watchlists.map(watchlist => @@ -66,57 +53,22 @@ export function WatchlistsList({watchlists, onDelete, onUpdateWatchlist, connect 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}}> - - - - } >