diff --git a/frontend/src/atoms/settings.ts b/frontend/src/atoms/settings.ts index 88596b5..cad71a6 100644 --- a/frontend/src/atoms/settings.ts +++ b/frontend/src/atoms/settings.ts @@ -153,7 +153,7 @@ export const serverAddressAndPortState = selector({ export const serverURL = selector({ key: 'serverURL', get: ({ get }) => - `${window.location.protocol}//${get(serverAddressState)}:${get(serverPortState)}` + `${window.location.protocol}//${get(serverAddressAndPortState)}` }) export const rpcWebSocketEndpoint = selector({ diff --git a/frontend/src/atoms/toast.ts b/frontend/src/atoms/toast.ts index f44d339..326b91f 100644 --- a/frontend/src/atoms/toast.ts +++ b/frontend/src/atoms/toast.ts @@ -1,7 +1,7 @@ import { AlertColor } from '@mui/material' import { atom } from 'recoil' -type Toast = { +export type Toast = { open: boolean, message: string autoClose: boolean diff --git a/frontend/src/components/DownloadDialog.tsx b/frontend/src/components/DownloadDialog.tsx index 5fe7218..7521e0d 100644 --- a/frontend/src/components/DownloadDialog.tsx +++ b/frontend/src/components/DownloadDialog.tsx @@ -149,12 +149,10 @@ export default function DownloadDialog({ const handleFilenameTemplateChange = (e: React.ChangeEvent) => { setFilenameTemplate(e.target.value) - localStorage.setItem('last-filename-override', e.target.value) } const handleCustomArgsChange = (e: React.ChangeEvent) => { setCustomArgs(e.target.value) - localStorage.setItem("last-input-args", e.target.value) } const parseUrlListFile = async (e: React.ChangeEvent) => { @@ -173,9 +171,7 @@ export default function DownloadDialog({ const resetInput = () => { urlInputRef.current!.value = '' - if (customFilenameInputRef.current) { - customFilenameInputRef.current!.value = '' - } + customFilenameInputRef.current!.value = '' } return ( diff --git a/frontend/src/providers/ToasterProvider.tsx b/frontend/src/providers/ToasterProvider.tsx index fd04e4f..599dc9e 100644 --- a/frontend/src/providers/ToasterProvider.tsx +++ b/frontend/src/providers/ToasterProvider.tsx @@ -1,20 +1,23 @@ import { Alert, Snackbar } from "@mui/material" import { useRecoilState } from 'recoil' -import { toastListState } from '../atoms/toast' +import { Toast, toastListState } from '../atoms/toast' import { useEffect } from 'react' const Toaster: React.FC = () => { const [toasts, setToasts] = useRecoilState(toastListState) + const deletePredicate = (t: Toast) => (Date.now() - t.createdAt) < 2000 + useEffect(() => { if (toasts.length > 0) { + const closer = setInterval(() => { - setToasts(t => t.map(t => ({ ...t, open: false }))) + setToasts(t => t.map(t => ({ ...t, open: deletePredicate(t) }))) }, 2000) const cleaner = setInterval(() => { - setToasts(t => t.filter((x) => (Date.now() - x.createdAt) < 2000)) - }, 2250) + setToasts(t => t.filter(deletePredicate)) + }, 1000) return () => { clearInterval(closer) @@ -29,7 +32,7 @@ const Toaster: React.FC = () => { 0 ? { marginBottom: index * 6.5 } : {}} + sx={index > 0 ? { marginBottom: index * 6.5 } : null} > {toast.message}