From 841e8dcba6fc2227e0c3d6f9eb6fdf08b232ef0f Mon Sep 17 00:00:00 2001 From: vinceh121 Date: Sat, 1 Nov 2025 22:59:49 +0100 Subject: [PATCH] feat: add domain to watchlist FAB --- .../watchlist/WatchlistSelectionModal.tsx | 78 +++++++++++++++++++ assets/pages/search/DomainSearchPage.tsx | 51 ++++++++++-- assets/utils/api/watchlist.ts | 7 ++ assets/utils/functions/DomainToTag.tsx | 62 ++++++++------- 4 files changed, 162 insertions(+), 36 deletions(-) create mode 100644 assets/components/tracking/watchlist/WatchlistSelectionModal.tsx diff --git a/assets/components/tracking/watchlist/WatchlistSelectionModal.tsx b/assets/components/tracking/watchlist/WatchlistSelectionModal.tsx new file mode 100644 index 0000000..f8bd5cf --- /dev/null +++ b/assets/components/tracking/watchlist/WatchlistSelectionModal.tsx @@ -0,0 +1,78 @@ +import React, {useEffect, useState} from "react" +import {Flex, Modal, ModalProps, Select, Tag, Typography} from "antd" +import {getWatchlists, Watchlist} from "../../../utils/api" +import {t} from 'ttag' +import {DomainToTag} from "../../../utils/functions/DomainToTag" + +function WatchlistOption({watchlist}: {watchlist: Watchlist}) { + return + {watchlist.name} + + {watchlist.domains.map(d => )} + + +} + +interface WatchlistSelectionModalProps { + onFinish: (watchlist: Watchlist) => Promise|void + description?: string + open?: boolean + modalProps?: Partial +} + +export default function WatchlistSelectionModal(props: WatchlistSelectionModalProps) { + const [watchlists, setWatchlists] = useState() + const [selectedWatchlist, setSelectedWatchlist] = useState() + const [validationLoading, setValidationLoading] = useState(false) + + useEffect(() => { + getWatchlists().then(list => setWatchlists(list["hydra:member"])) + }, []) + + const onFinish = () => { + const promise = props.onFinish(selectedWatchlist as Watchlist) + + if (promise) { + setValidationLoading(true) + promise.finally(() => { + setSelectedWatchlist(undefined) + setValidationLoading(false) + }) + } else { + setSelectedWatchlist(undefined) + } + } + + return + + + { + props.description + || t`Select one of your available watchlists` + } + +