From 49ebd10352b08ba43ba7f45485d4c396eac5c643 Mon Sep 17 00:00:00 2001 From: "Vink, S.A. (Sjoerd)" <s.a.vink@uu.nl> Date: Thu, 23 Nov 2023 10:03:35 +0000 Subject: [PATCH] fix(userFeedbackDBLoading): added extra user feedback to db loading --- .../DatabaseManagement/DatabaseSelector.tsx | 60 +++++++++++++++---- 1 file changed, 47 insertions(+), 13 deletions(-) diff --git a/apps/web/src/components/navbar/DatabaseManagement/DatabaseSelector.tsx b/apps/web/src/components/navbar/DatabaseManagement/DatabaseSelector.tsx index c376e4a26..eca81b209 100644 --- a/apps/web/src/components/navbar/DatabaseManagement/DatabaseSelector.tsx +++ b/apps/web/src/components/navbar/DatabaseManagement/DatabaseSelector.tsx @@ -5,6 +5,7 @@ import { updateCurrentDatabase } from '@graphpolaris/shared/lib/data-access/stor import { SettingsForm } from './forms/settings'; import { NewDatabaseForm } from './forms/AddDatabase/newdatabase'; import { LoadingSpinner } from '@graphpolaris/shared/lib/components/LoadingSpinner'; +import { addError } from '@graphpolaris/shared/lib/data-access/store/configSlice'; export default function DatabaseSelector({}) { const dispatch = useAppDispatch(); @@ -17,7 +18,7 @@ export default function DatabaseSelector({}) { const [dbSelectionMenuOpen, setDbSelectionMenuOpen] = useState<boolean>(false); const [settingsMenuOpen, setSettingsMenuOpen] = useState<boolean>(false); const [selectedDatabase, setSelectedDatabase] = useState<DatabaseInfo | null>(null); - const [addDatabaseFormOpen, setAddDatabaseFormOpen] = useState(false); + const [addDatabaseFormOpen, setAddDatabaseFormOpen] = useState<boolean>(false); useEffect(() => { const handleClickOutside = ({ target }: MouseEvent) => { @@ -35,6 +36,23 @@ export default function DatabaseSelector({}) { setConnecting(false); }, [schemaGraph]); + useEffect(() => { + let timeoutId: ReturnType<typeof setTimeout>; + if (connecting) { + timeoutId = setTimeout(() => { + dispatch(addError("Couldn't establish connection")); + setConnecting(false); + dispatch(updateCurrentDatabase('')); + }, 10000); + } + + return () => { + if (timeoutId) { + clearTimeout(timeoutId); + } + }; + }, [connecting]); + return ( <> <SettingsForm @@ -57,18 +75,25 @@ export default function DatabaseSelector({}) { > <div className="flex items-center w-full"> {connecting ? ( - <LoadingSpinner /> - ) : session.currentDatabase ? ( - <div className="h-2 w-2 rounded-full bg-green-500" /> - ) : ( - <div className="h-2 w-2 rounded-full bg-slate-500" /> - )} - {connecting ? ( - <p className="ml-2 truncate">Connecting to {session.currentDatabase}</p> + <> + <LoadingSpinner /> + <p className="ml-2 truncate">Connecting to {session.currentDatabase}</p> + </> ) : session.currentDatabase ? ( - <p className="ml-2 truncate">Connected DB: {session.currentDatabase}</p> + <> + <div className="h-2 w-2 rounded-full bg-green-500" /> + <p className="ml-2 truncate">Connected DB: {session.currentDatabase}</p> + </> + ) : session.databases.length == 0 ? ( + <> + <LoadingSpinner /> + <p className="ml-2">Retrieving databases</p> + </> ) : ( - <p className="ml-2">Select a database</p> + <> + <div className="h-2 w-2 rounded-full bg-slate-500" /> + <p className="ml-2">Select a database</p> + </> )} </div> <ArrowDropDown /> @@ -85,8 +110,17 @@ export default function DatabaseSelector({}) { }} title="Add new database" > - <Add /> - <p className="ml-2">Add database</p> + {session.databases.length == 0 ? ( + <> + <Add /> + <p className="ml-2">Add your first database</p> + </> + ) : ( + <> + <Add /> + <p className="ml-2">Add database</p> + </> + )} </div> {session.databases.map((db) => ( <div -- GitLab