Alternative web application for the pdsadmin command
at main 35 lines 963 B view raw
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};