diff --git a/assets/components/tracking/WatchlistsList.tsx b/assets/components/tracking/WatchlistsList.tsx index 0b42862..9415d72 100644 --- a/assets/components/tracking/WatchlistsList.tsx +++ b/assets/components/tracking/WatchlistsList.tsx @@ -15,7 +15,7 @@ const {useToken} = theme; export function WatchlistsList({watchlists, onDelete, onUpdateWatchlist, connectors}: { watchlists: Watchlist[], onDelete: () => void, - onUpdateWatchlist: (values: { domains: string[], emailTriggers: string[], token: string }) => void, + onUpdateWatchlist: (values: { domains: string[], emailTriggers: string[], token: string }) => Promise, connectors: (Connector & { id: string })[] }) { const {token} = useToken() @@ -34,7 +34,8 @@ export function WatchlistsList({watchlists, onDelete, onUpdateWatchlist, connect } ] - const [open, setOpen] = useState(false); + const [open, setOpen] = useState(false) + const [loading, setLoading] = useState(false) const showDrawer = () => { setOpen(true) @@ -42,6 +43,7 @@ export function WatchlistsList({watchlists, onDelete, onUpdateWatchlist, connect const onClose = () => { setOpen(false) + setLoading(false) }; return <> @@ -85,6 +87,7 @@ export function WatchlistsList({watchlists, onDelete, onUpdateWatchlist, connect width='80%' onClose={onClose} open={open} + loading={loading} styles={{ body: { paddingBottom: 80, @@ -95,8 +98,8 @@ export function WatchlistsList({watchlists, onDelete, onUpdateWatchlist, connect { - onUpdateWatchlist(values); - onClose() + setLoading(true) + onUpdateWatchlist(values).then(onClose).catch(() => setLoading(false)) }} connectors={connectors} isCreation={false} diff --git a/assets/pages/tracking/WatchlistPage.tsx b/assets/pages/tracking/WatchlistPage.tsx index 40b0762..c260c85 100644 --- a/assets/pages/tracking/WatchlistPage.tsx +++ b/assets/pages/tracking/WatchlistPage.tsx @@ -50,7 +50,7 @@ export default function WatchlistPage() { }) } - const onUpdateWatchlist = (values: { + const onUpdateWatchlist = async (values: { token: string name?: string domains: string[], @@ -59,9 +59,7 @@ export default function WatchlistPage() { }) => { const domainsURI = values.domains.map(d => '/api/domains/' + d) - console.log(values) - - putWatchlist({ + return putWatchlist({ token: values.token, name: values.name, domains: domainsURI, @@ -71,7 +69,7 @@ export default function WatchlistPage() { refreshWatchlists() messageApi.success(t`Watchlist updated !`) }).catch((e: AxiosError) => { - showErrorAPI(e, messageApi) + throw showErrorAPI(e, messageApi) }) } diff --git a/assets/utils/api/watchlist.ts b/assets/utils/api/watchlist.ts index ec0d55d..bed3164 100644 --- a/assets/utils/api/watchlist.ts +++ b/assets/utils/api/watchlist.ts @@ -1,4 +1,4 @@ -import {Event, request, Watchlist} from "./index"; +import {request, Watchlist} from "./index"; export async function getWatchlists() { const response = await request({ diff --git a/src/Controller/WatchListController.php b/src/Controller/WatchListController.php index c1d07a2..83f0bd0 100644 --- a/src/Controller/WatchListController.php +++ b/src/Controller/WatchListController.php @@ -70,7 +70,7 @@ class WatchListController extends AbstractController * This policy guarantees the equal probability of obtaining a domain name if it is requested by several users. */ if ($this->getParameter('limited_features')) { - if ($watchList->getDomains()->count() >= (int) $this->getParameter('limit_max_watchlist_domains')) { + if ($watchList->getDomains()->count() > (int) $this->getParameter('limit_max_watchlist_domains')) { $this->logger->notice('User {username} tried to create a Watchlist. However, the maximum number of domains has been reached for this Watchlist', [ 'username' => $user->getUserIdentifier(), ]); @@ -78,7 +78,7 @@ class WatchListController extends AbstractController } $userWatchLists = $user->getWatchLists(); - if ($userWatchLists->count() >= (int) $this->getParameter('limit_max_watchlist')) { + if ($userWatchLists->count() > (int) $this->getParameter('limit_max_watchlist')) { $this->logger->notice('User {username} tried to create a Watchlist. However, the maximum number of Watchlists has been reached.', [ 'username' => $user->getUserIdentifier(), ]); @@ -150,7 +150,7 @@ class WatchListController extends AbstractController $watchList->setUser($user); if ($this->getParameter('limited_features')) { - if ($watchList->getDomains()->count() >= (int) $this->getParameter('limit_max_watchlist_domains')) { + if ($watchList->getDomains()->count() > (int) $this->getParameter('limit_max_watchlist_domains')) { $this->logger->notice('User {username} tried to update a Watchlist. However, the maximum number of domains has been reached for this Watchlist', [ 'username' => $user->getUserIdentifier(), ]); @@ -161,7 +161,7 @@ class WatchListController extends AbstractController /** @var Domain[] $trackedDomains */ $trackedDomains = $userWatchLists - ->filter(fn (WatchList $wl) => $wl !== $watchList) + ->filter(fn (WatchList $wl) => $wl->getToken() !== $watchList->getToken()) ->reduce(fn (array $acc, WatchList $wl) => [...$acc, ...$wl->getDomains()->toArray()], []); /** @var Domain $domain */ diff --git a/src/Entity/DomainEvent.php b/src/Entity/DomainEvent.php index 7dfe1f0..4648dff 100644 --- a/src/Entity/DomainEvent.php +++ b/src/Entity/DomainEvent.php @@ -8,7 +8,7 @@ use Doctrine\ORM\Mapping as ORM; #[ORM\Entity(repositoryClass: DomainEventRepository::class)] class DomainEvent extends Event { - #[ORM\ManyToOne(targetEntity: Domain::class, cascade: ['persist'], inversedBy: 'events')] + #[ORM\ManyToOne(targetEntity: Domain::class, inversedBy: 'events')] #[ORM\JoinColumn(referencedColumnName: 'ldh_name', nullable: false)] private ?Domain $domain = null;