From d2d7a34e7fd287b36fc2c1272ff80d4b940a32eb Mon Sep 17 00:00:00 2001 From: 2427021 <s.a.vink@students.uu.nl> Date: Tue, 26 Mar 2024 12:57:01 +0100 Subject: [PATCH] feat(visManager): config to right --- apps/web/src/app/app.tsx | 8 ++- .../infoPanel.tsx => data-viewer/index.tsx} | 49 ++++++++++--------- .../search/searchbar.tsx | 0 .../search/similarity.ts | 0 .../lib/{info => data-viewer}/settings.tsx | 0 libs/shared/lib/vis/bar.tsx | 8 --- libs/shared/lib/vis/configuration/index.tsx | 40 +++++++++++++++ 7 files changed, 72 insertions(+), 33 deletions(-) rename libs/shared/lib/{info/infoPanel.tsx => data-viewer/index.tsx} (58%) rename libs/shared/lib/{info => data-viewer}/search/searchbar.tsx (100%) rename libs/shared/lib/{info => data-viewer}/search/similarity.ts (100%) rename libs/shared/lib/{info => data-viewer}/settings.tsx (100%) create mode 100644 libs/shared/lib/vis/configuration/index.tsx diff --git a/apps/web/src/app/app.tsx b/apps/web/src/app/app.tsx index 3108f27db..4cd4d8672 100644 --- a/apps/web/src/app/app.tsx +++ b/apps/web/src/app/app.tsx @@ -20,8 +20,9 @@ import { URLParams, setParam } from '@graphpolaris/shared/lib/data-access/api/ur import { Schema } from '@graphpolaris/shared/lib/schema/panel'; import { VisualizationPanel } from '@graphpolaris/shared/lib/vis'; import { QueryBuilder } from '@graphpolaris/shared/lib/querybuilder'; -import InfoPanel from '@graphpolaris/shared/lib/info/infoPanel'; +import DataViewer from '@graphpolaris/shared/lib/data-viewer'; import { useVisualizationManager } from '@graphpolaris/shared/lib/vis/manager'; +import ConfigPanel from '@graphpolaris/shared/lib/vis/configuration'; // const Schema = React.lazy(() => import('@graphpolaris/shared/lib/schema/panel')); // const VisualizationPanel = React.lazy(() => import('@graphpolaris/shared/lib/vis')); // const QueryBuilder = React.lazy(() => import('@graphpolaris/shared/lib/querybuilder')); @@ -78,7 +79,7 @@ export function App(props: App) { <main className="flex w-screen h-[calc(100%-4.2rem)]"> <Resizable divisorSize={3} horizontal={true} defaultProportion={0.33}> <div className="h-full w-full"> - <InfoPanel auth={authCheck} manager={manager} /> + <DataViewer auth={authCheck} manager={manager} /> </div> <div className="h-full w-full"> <Resizable divisorSize={3} horizontal={false}> @@ -91,6 +92,9 @@ export function App(props: App) { </Resizable> </div> </Resizable> + <div className="h-full w-56 ml-1"> + <ConfigPanel manager={manager} /> + </div> </main> </div> </div> diff --git a/libs/shared/lib/info/infoPanel.tsx b/libs/shared/lib/data-viewer/index.tsx similarity index 58% rename from libs/shared/lib/info/infoPanel.tsx rename to libs/shared/lib/data-viewer/index.tsx index 7ff321647..27b967512 100644 --- a/libs/shared/lib/info/infoPanel.tsx +++ b/libs/shared/lib/data-viewer/index.tsx @@ -6,8 +6,9 @@ import Searchbar from './search/searchbar'; import Settings from './settings'; import ColorMode from '../components/color-mode'; -export default function InfoPanel({ auth, manager }: { auth: boolean; manager: any }) { +export default function DataViewer({ auth, manager }: { auth: boolean; manager: any }) { const [tab, setTab] = useState('Schema'); + const [showDialog, setShowDialog] = useState<boolean>(true); return ( <div className="info-panel w-full h-full flex"> @@ -21,7 +22,14 @@ export default function InfoPanel({ auth, manager }: { auth: boolean; manager: a variant="ghost" size="md" iconComponent={<SearchIcon />} - onClick={() => setTab('Search')} + onClick={() => { + if (!showDialog) { + setShowDialog(true); + } else if (tab === 'Search') { + setShowDialog(false); + } + setTab('Search'); + }} additionalClasses={tab === 'Search' ? 'bg-secondary-100' : ''} /> </TooltipTrigger> @@ -34,37 +42,32 @@ export default function InfoPanel({ auth, manager }: { auth: boolean; manager: a variant="ghost" size="md" iconComponent={<SchemaIcon />} - onClick={() => setTab('Schema')} + onClick={() => { + if (!showDialog) { + setShowDialog(true); + } else if (tab === 'Schema') { + setShowDialog(false); + } + setTab('Schema'); + }} additionalClasses={tab === 'Schema' ? 'bg-secondary-100' : ''} /> </TooltipTrigger> <TooltipContent side={'right'}>Database schema</TooltipContent> </Tooltip> - <Tooltip> - <TooltipTrigger> - <Button - type="secondary" - variant="ghost" - size="md" - iconComponent={<Addchart />} - onClick={() => setTab('Visualization')} - additionalClasses={tab === 'Visualization' ? 'bg-secondary-100' : ''} - /> - </TooltipTrigger> - <TooltipContent side={'right'}>Visualization settings</TooltipContent> - </Tooltip> </TooltipProvider> </div> <ColorMode /> </div> - <div className="flex-1 border border-secondary-200 overflow-hidden"> - <div className="relative flex items-center justify-between z-[2] py-0 px-2 bg-secondary-100 border-b border-secondary-200"> - <h1 className="text-xs font-semibold text-secondary-800">{tab}</h1> + {showDialog && ( + <div className="flex-1 border border-secondary-200 overflow-hidden"> + <div className="relative flex items-center justify-between z-[2] py-0 px-2 bg-secondary-100 border-b border-secondary-200"> + <h1 className="text-xs font-semibold text-secondary-800">{tab}</h1> + </div> + {tab === 'Search' && <Searchbar />} + {tab === 'Schema' && <Schema auth={auth} />} </div> - {tab === 'Search' && <Searchbar />} - {tab === 'Schema' && <Schema auth={auth} />} - {tab === 'Visualization' && <Settings manager={manager} />} - </div> + )} </div> ); } diff --git a/libs/shared/lib/info/search/searchbar.tsx b/libs/shared/lib/data-viewer/search/searchbar.tsx similarity index 100% rename from libs/shared/lib/info/search/searchbar.tsx rename to libs/shared/lib/data-viewer/search/searchbar.tsx diff --git a/libs/shared/lib/info/search/similarity.ts b/libs/shared/lib/data-viewer/search/similarity.ts similarity index 100% rename from libs/shared/lib/info/search/similarity.ts rename to libs/shared/lib/data-viewer/search/similarity.ts diff --git a/libs/shared/lib/info/settings.tsx b/libs/shared/lib/data-viewer/settings.tsx similarity index 100% rename from libs/shared/lib/info/settings.tsx rename to libs/shared/lib/data-viewer/settings.tsx diff --git a/libs/shared/lib/vis/bar.tsx b/libs/shared/lib/vis/bar.tsx index 896d78e32..6b3db8716 100644 --- a/libs/shared/lib/vis/bar.tsx +++ b/libs/shared/lib/vis/bar.tsx @@ -110,14 +110,6 @@ export default function VisualizationBar({ manager }: Props) { <p>Full screen</p> </TooltipContent> </Tooltip> - <Tooltip disabled={showVisSettings}> - <TooltipTrigger> - <Button type="secondary" variant="ghost" size="xs" iconComponent={<SettingsInputComponent />} onClick={() => {}} /> - </TooltipTrigger> - <TooltipContent side={'bottom'} disabled={showVisSettings}> - <p>Visualization settings</p> - </TooltipContent> - </Tooltip> </TooltipProvider> </ControlContainer> </div> diff --git a/libs/shared/lib/vis/configuration/index.tsx b/libs/shared/lib/vis/configuration/index.tsx new file mode 100644 index 000000000..8ec320447 --- /dev/null +++ b/libs/shared/lib/vis/configuration/index.tsx @@ -0,0 +1,40 @@ +import React from 'react'; +import { Button } from '../../components'; +import { Delete } from '@mui/icons-material'; +import Input from '../../components/inputs'; + +type Props = { + manager: any; +}; + +export default function ConfigPanel({ manager }: Props) { + return ( + <div className="w-full h-full flex flex-col border"> + <div className="border-b border-secondary-200 py-2"> + <div className="flex justify-between items-center px-4 py-2"> + <span className="text-xs font-bold">Visualisation</span> + <Button + type="secondary" + variant="ghost" + size="xs" + iconComponent={<Delete />} + onClick={() => { + manager.deleteVisualization(manager.active); + }} + /> + </div> + <div className="flex justify-between items-center px-4 py-1"> + <span className="text-xs font-normal">Type</span> + <div className="w-36"> + <Input type="dropdown" size="xs" options={[]} value={manager.activeType} onChange={() => {}} /> + </div> + </div> + <div className="flex justify-between items-center px-4 py-1"> + <span className="text-xs font-normal">Name</span> + <input type="text" className="border rouded w-36" value={manager.active} onChange={() => {}} /> + </div> + </div> + <div className="border-b border-secondary-200 py-2">{manager.renderSettings()}</div> + </div> + ); +} -- GitLab