Alternative web application for the
pdsadmin command
1import { useState } from "react";
2
3import { useReloadRepositories } from "../../atoms/account-list";
4import { useCloseModal } from "../../atoms/modal";
5import { useToast } from "../../atoms/toast";
6
7export const useModalHandler = <T>(args: {
8 fn: () => Promise<T> | T;
9 toastMessage?: string;
10 shouldReloadRepos?: boolean;
11}) => {
12 const [loading, setLoading] = useState(false);
13 const toast = useToast();
14 const closeModal = useCloseModal();
15 const reloadRepos = useReloadRepositories();
16
17 const handler = async () => {
18 setLoading(true);
19 try {
20 await args.fn();
21 closeModal();
22 if (args.toastMessage) toast.success(args.toastMessage);
23 if (args.shouldReloadRepos) await reloadRepos();
24 } catch (error) {
25 // eslint-disable-next-line no-console
26 console.error(error);
27 alert("Error: " + String(error));
28 throw error;
29 } finally {
30 setLoading(false);
31 }
32 };
33
34 return { loading, handler };
35};