diff --git a/apps/web/src/components/navbar/DatabaseManagement/dbConnectionSelector.tsx b/apps/web/src/components/navbar/DatabaseManagement/dbConnectionSelector.tsx index 0a68e06a10a9e1243440fef80c8fce7a5924fe68..a61340226199c75a4503134bb39af9e233697922 100644 --- a/apps/web/src/components/navbar/DatabaseManagement/dbConnectionSelector.tsx +++ b/apps/web/src/components/navbar/DatabaseManagement/dbConnectionSelector.tsx @@ -1,5 +1,5 @@ import React, { useEffect, useState } from 'react'; -import { Add, Delete, Settings } from '@mui/icons-material'; +import { Add, Delete, Settings, StorageOutlined } from '@mui/icons-material'; import { useAppDispatch, useSchemaGraph, useSessionCache, useAuthorizationCache } from '@graphpolaris/shared/lib/data-access'; import { deleteSaveState, selectSaveState } from '@graphpolaris/shared/lib/data-access/store/sessionSlice'; import { SettingsForm } from './forms/settings'; @@ -10,6 +10,7 @@ import { clearQB } from '@graphpolaris/shared/lib/data-access/store/querybuilder import { clearSchema } from '@graphpolaris/shared/lib/data-access/store/schemaSlice'; import { DatabaseStatus, SaveStateI, nilUUID, wsDeleteState } from '@graphpolaris/shared/lib/data-access/broker'; import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@graphpolaris/shared/lib/components/tooltip'; +import { Icon } from '@graphpolaris/shared'; export default function DatabaseSelector({}) { const dispatch = useAppDispatch(); @@ -70,7 +71,7 @@ export default function DatabaseSelector({}) { }, [connecting]); return ( - <div className="menu-walkthrough"> + <div className="menu-walkthrough ml-4"> <TooltipProvider delayDuration={1000}> {settingsMenuOpen !== undefined && ( <SettingsForm @@ -96,14 +97,15 @@ export default function DatabaseSelector({}) { <p className="ml-2 truncate">Connecting to {session.saveStates[session.currentSaveState].name}</p> </> ) : session.currentSaveState && session.currentSaveState in session.saveStates && session.currentSaveState !== nilUUID ? ( - <> - <div - className={`h-2 w-2 rounded-full ${ - session.testedSaveState[session.currentSaveState] === DatabaseStatus.tested ? 'bg-success-500' : 'bg-danger-500' - }`} - /> + <div className="flex items-center"> + <Icon component={<StorageOutlined />} size={20} /> + <div className="absolute bottom-0 left-0 transform translate-x-2 -translate-y-2"> + <div + className={`h-2 w-2 rounded-full ${session.testedSaveState[session.currentSaveState] === DatabaseStatus.tested ? 'bg-success-500' : 'bg-danger-500'}`} + /> + </div> <p className="ml-2 truncate">Connected DB: {session.saveStates[session.currentSaveState].name}</p> - </> + </div> ) : session.saveStates === undefined ? ( <> <LoadingSpinner /> diff --git a/apps/web/src/components/navbar/navbar.tsx b/apps/web/src/components/navbar/navbar.tsx index 92c7a548dbb5dfc3f36d743943c36eeea110909e..20ec0cf82d43393f76614c34d5a8298e509e8746 100644 --- a/apps/web/src/components/navbar/navbar.tsx +++ b/apps/web/src/components/navbar/navbar.tsx @@ -43,17 +43,19 @@ export const Navbar = () => { return ( <div className="w-full h-auto px-5"> <div className="navbar flex items-center justify-between w-auto gap-2 xl:gap-10"> - <a href="https://graphpolaris.com/" target="_blank" className="w-[10rem] md:w-fit shrink-0 text-dark"> - <GpLogo className="w-48" /> - </a> - <DatabaseSelector /> + <div> + <a href="https://graphpolaris.com/" target="_blank" className="w-[10rem] md:w-fit shrink-0 text-dark"> + <GpLogo className="w-48" /> + </a> + <DatabaseSelector /> + </div> <div> - <SearchBar /> - <ColorMode /> + {/* <SearchBar /> */} + {/* <ColorMode /> */} <div className="w-fit" ref={dropdownRef}> <div - className="relative inline-flex items-center justify-center w-8 h-8 overflow-hidden bg-secondary-500 rounded hover:bg-secondary-600 transition-colors duration-150 ease-in-out cursor-pointer" + className="relative inline-flex items-center justify-center w-8 h-8 overflow-hidden bg-secondary-500 rounded-full hover:bg-secondary-600 transition-colors duration-150 ease-in-out cursor-pointer" onClick={() => setMenuOpen(!menuOpen)} > <span className="font-medium text-light">{authCache.username?.slice(0, 2).toUpperCase()}</span> diff --git a/libs/shared/lib/components/dropdowns/index.tsx b/libs/shared/lib/components/dropdowns/index.tsx index 96ec000e594db2fc1ef5bf1c8010ce16d648545a..658d30e4b5eb461bb10e053c057b1e24610eb96c 100644 --- a/libs/shared/lib/components/dropdowns/index.tsx +++ b/libs/shared/lib/components/dropdowns/index.tsx @@ -1,5 +1,7 @@ import React, { useState, useEffect, useRef, ReactNode } from 'react'; import styles from './dropdowns.module.scss'; +import Icon from '../icon'; +import { ArrowDropDown } from '@mui/icons-material'; type DropdownContainerProps = { children: ReactNode; @@ -13,7 +15,7 @@ export const DropdownContainer = React.forwardRef<HTMLDivElement, DropdownContai {children} </div> ); - } + }, ); type DropdownButtonProps = { @@ -32,13 +34,7 @@ export function DropdownButton({ title, onClick, size, disabled }: DropdownButto disabled={disabled} > <span className={`text-${size}`}>{title}</span> - <svg className="-mr-1 h-5 w-5 text-secondary-400" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true"> - <path - fillRule="evenodd" - d="M5.23 7.21a.75.75 0 011.06.02L10 11.168l3.71-3.938a.75.75 0 111.08 1.04l-4.25 4.5a.75.75 0 01-1.08 0l-4.25-4.5a.75.75 0 01.02-1.06z" - clipRule="evenodd" - /> - </svg> + <Icon component={<ArrowDropDown />} size={16} /> </button> </> ); diff --git a/libs/shared/lib/vis/manager.tsx b/libs/shared/lib/vis/manager.tsx index 8702e6519b0e1ec0f1b972b81e7dc9005269275e..5fda1569d310e0bed8a592a2c19d173fb01db349 100644 --- a/libs/shared/lib/vis/manager.tsx +++ b/libs/shared/lib/vis/manager.tsx @@ -23,7 +23,6 @@ export const useVisualizationManager = () => { const [configuration, setConfiguration] = useState<any>(); const [visualization, setVisualization] = useState<VISComponentType>(); - const [settings, setSettings] = useState<any>(null); const [settingsOpen, setSettingsOpen] = useState<boolean>(false); const [hoverItem, setHoverItem] = useState<any>(); const [selected, setSelected] = useState<any>(); @@ -36,8 +35,6 @@ export const useVisualizationManager = () => { if (active && Visualizations[active]) { const componentModule = await Visualizations[active](); const component = componentModule.default; - setVisualization(component); - setSettings(null); if (!(active in Object.keys(visualizations))) { // Visualization doesn't yet exist so add its configuration @@ -46,6 +43,7 @@ export const useVisualizationManager = () => { } setConfiguration(visualizations[active]); + setVisualization(component); } }; @@ -60,7 +58,7 @@ export const useVisualizationManager = () => { const updateSettings = (newSettings: any) => { if (active) { const updatedSettings = { ...configuration, ...newSettings }; - setSettings(updatedSettings); + setConfiguration(updatedSettings); dispatch(updateVisualization({ id: active, settings: updatedSettings })); } }; @@ -72,7 +70,7 @@ export const useVisualizationManager = () => { const renderSettings = () => { return ( visualization?.settings && - settings && + configuration && settingsOpen && ( <FormDiv> <FormCard> @@ -84,7 +82,7 @@ export const useVisualizationManager = () => { > <FormTitle title="Visualization settings" onClose={() => {}} /> <FormHBar /> - <visualization.settings configuration={settings} graph={meta} updateSettings={updateSettings} /> + <visualization.settings configuration={configuration} graph={meta} updateSettings={updateSettings} /> <FormHBar /> <FormActions onClose={() => { @@ -101,12 +99,12 @@ export const useVisualizationManager = () => { const renderComponent = () => { return ( visualization?.component && - settings && ( + configuration && ( <visualization.component data={graphQueryResult} schema={schema} ml={ml} - settings={settings} + configuration={configuration} dispatch={dispatch} handleHover={handleHover} handleSelect={handleSelect}