import { Check, X } from 'lucide-react'; import { useEffect, useState } from 'react'; import CloseButton from '~renderer/components/styled/CloseButton'; import IconSpinner from '~renderer/components/styled/IconSpinner'; import TextButton from '~renderer/components/styled/TextButton'; import { api } from '~renderer/utils/api'; const useDebounced = (value: string, delay: number) => { const [debouncedValue, setDebouncedValue] = useState(value); useEffect(() => { const timeout = setTimeout(() => setDebouncedValue(value), delay); return () => clearTimeout(timeout); }, [value, delay]); return debouncedValue; }; const CustomAddonDialog = ({ close }: { close: () => void }) => { const [url, setUrl] = useState(''); const debouncedUrl = useDebounced(url, 500); const response = api.addons.checkGitUrl.useQuery(debouncedUrl, { enabled: !!debouncedUrl }); const update = api.addons.install.useMutation(); return (

Install addon


{response.data ? ( Preview ) : (
{response.isFetching && }
)}
setUrl(e.target.value)} /> {response.isFetching ? ( ) : response.data ? ( ) : ( )}

{response.data ? 'Ready to install' : 'Not a valid git repository URL'}

{ if (!response.data) return; update.mutateAsync(response.data); close(); setUrl(''); }} className={response.data ? 'text-warmGreen' : 'text-blueGray'} disabled={!response.data || response.isLoading} > Install
); }; export default CustomAddonDialog;