From b18a5a64b2a385ecc38405a88d02fe3189e1cc84 Mon Sep 17 00:00:00 2001 From: 2427021 <s.a.vink@students.uu.nl> Date: Mon, 15 Apr 2024 13:17:48 +0200 Subject: [PATCH] fix(updatedDocumentation): updated documentation and manager naming --- apps/web/src/app/app.tsx | 4 +- libs/shared/lib/vis/common/types.ts | 2 +- libs/shared/lib/vis/components/bar.tsx | 4 +- .../lib/vis/components/config/panel.tsx | 4 +- libs/shared/lib/vis/components/panel.tsx | 2 +- libs/shared/lib/vis/hooks/index.ts | 2 - .../VisualizationManager.tsx} | 11 +- libs/shared/lib/vis/manager/index.ts | 2 + .../manager.types.ts} | 0 .../lib/vis/visualizations/documentation.mdx | 105 +++++++----------- 10 files changed, 56 insertions(+), 80 deletions(-) delete mode 100644 libs/shared/lib/vis/hooks/index.ts rename libs/shared/lib/vis/{hooks/useVisualizationManager.tsx => manager/VisualizationManager.tsx} (93%) create mode 100644 libs/shared/lib/vis/manager/index.ts rename libs/shared/lib/vis/{hooks/hooks.types.ts => manager/manager.types.ts} (100%) diff --git a/apps/web/src/app/app.tsx b/apps/web/src/app/app.tsx index b8f1628d7..15401c5fd 100644 --- a/apps/web/src/app/app.tsx +++ b/apps/web/src/app/app.tsx @@ -19,7 +19,7 @@ import { URLParams, setParam } from '@graphpolaris/shared/lib/data-access/api/ur import { VisualizationPanel } from '@graphpolaris/shared/lib/vis'; import { QueryBuilder } from '@graphpolaris/shared/lib/querybuilder'; import { SideNavTab, Sidebar } from '@graphpolaris/shared/lib/sidebar'; -import { useVisualizationManager } from '@graphpolaris/shared/lib/vis/hooks'; +import { VisualizationManager } from '@graphpolaris/shared/lib/vis/manager'; import { ConfigPanel } from '@graphpolaris/shared/lib/vis/components/config'; import { Tooltip, TooltipTrigger, Button, TooltipContent, TooltipProvider } from '@graphpolaris/shared'; import { ControlContainer } from '@graphpolaris/shared/lib/components/controls'; @@ -38,7 +38,7 @@ export function App(props: App) { const session = useSessionCache(); const dispatch = useAppDispatch(); const queryBuilderSettings = useQuerybuilderSettings(); - const manager = useVisualizationManager(); + const manager = VisualizationManager(); const runQuery = () => { if (session?.currentSaveState && query) { diff --git a/libs/shared/lib/vis/common/types.ts b/libs/shared/lib/vis/common/types.ts index 52e1513b2..6bb2d9862 100644 --- a/libs/shared/lib/vis/common/types.ts +++ b/libs/shared/lib/vis/common/types.ts @@ -3,7 +3,7 @@ import { ML } from '../../data-access/store/mlSlice'; import { SchemaGraph } from '../../schema'; import type { AppDispatch } from '../../data-access'; import { FC } from 'react'; -import { Visualizations } from '../hooks'; +import { Visualizations } from '../manager'; import { Edge, Node } from 'reactflow'; export type VisualizationConfiguration = { [id: string]: any }; diff --git a/libs/shared/lib/vis/components/bar.tsx b/libs/shared/lib/vis/components/bar.tsx index 409690202..9cddc5594 100644 --- a/libs/shared/lib/vis/components/bar.tsx +++ b/libs/shared/lib/vis/components/bar.tsx @@ -4,8 +4,8 @@ import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../../ import * as DropdownMenu from '@radix-ui/react-dropdown-menu'; import { Add, Close, Fullscreen } from '@mui/icons-material'; import { ControlContainer } from '../../components/controls'; -import { Visualizations } from '../hooks'; -import { VisualizationManagerType } from '../hooks'; +import { Visualizations } from '../manager'; +import { VisualizationManagerType } from '../manager'; type Props = { manager: VisualizationManagerType; diff --git a/libs/shared/lib/vis/components/config/panel.tsx b/libs/shared/lib/vis/components/config/panel.tsx index 722e241fb..e0981e7d3 100644 --- a/libs/shared/lib/vis/components/config/panel.tsx +++ b/libs/shared/lib/vis/components/config/panel.tsx @@ -2,8 +2,8 @@ import React from 'react'; import { Button, Icon } from '../../../components'; import { Delete, Person } from '@mui/icons-material'; import { Input } from '../../../components/inputs'; -import { VISUALIZATION_TYPES } from '../../hooks'; -import { VisualizationManagerType } from '../../hooks'; +import { VISUALIZATION_TYPES } from '../../manager'; +import { VisualizationManagerType } from '../../manager'; import { SettingsHeader } from './components'; import { useSessionCache } from '../../../data-access'; diff --git a/libs/shared/lib/vis/components/panel.tsx b/libs/shared/lib/vis/components/panel.tsx index 8e5653c19..38a37bab4 100644 --- a/libs/shared/lib/vis/components/panel.tsx +++ b/libs/shared/lib/vis/components/panel.tsx @@ -1,7 +1,7 @@ import React, { useMemo } from 'react'; import { useGraphQueryResult, useQuerybuilderGraph } from '@graphpolaris/shared/lib/data-access'; import VisualizationBar from './bar'; -import { VisualizationManagerType } from '../hooks'; +import { VisualizationManagerType } from '../manager'; import { Recommender, NoData, Querying } from '../views'; export const VisualizationPanel = ({ manager, fullSize }: { manager: VisualizationManagerType; fullSize: () => void }) => { diff --git a/libs/shared/lib/vis/hooks/index.ts b/libs/shared/lib/vis/hooks/index.ts deleted file mode 100644 index bfd4ddd04..000000000 --- a/libs/shared/lib/vis/hooks/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { useVisualizationManager, Visualizations, VISUALIZATION_TYPES } from './useVisualizationManager'; -export type { VisualizationManagerType } from './hooks.types'; diff --git a/libs/shared/lib/vis/hooks/useVisualizationManager.tsx b/libs/shared/lib/vis/manager/VisualizationManager.tsx similarity index 93% rename from libs/shared/lib/vis/hooks/useVisualizationManager.tsx rename to libs/shared/lib/vis/manager/VisualizationManager.tsx index b79925468..694298d7e 100644 --- a/libs/shared/lib/vis/hooks/useVisualizationManager.tsx +++ b/libs/shared/lib/vis/manager/VisualizationManager.tsx @@ -15,8 +15,8 @@ import { useSessionCache, useVisualization, } from '../../data-access'; -import { VisualizationManagerType } from '../hooks'; -import { HoverType, SelectType, addHover, addSelect } from '../../data-access/store/interactionSlice'; +import { VisualizationManagerType } from '.'; +import { SelectType, addSelect } from '../../data-access/store/interactionSlice'; export const Visualizations: Record<string, Function> = { TableVis: () => import('../visualizations/tablevis/tablevis'), @@ -30,7 +30,7 @@ export const Visualizations: Record<string, Function> = { export const VISUALIZATION_TYPES: string[] = Object.keys(Visualizations); -export const useVisualizationManager = (): VisualizationManagerType => { +export const VisualizationManager = (): VisualizationManagerType => { const dispatch = useAppDispatch(); const session = useSessionCache(); const ml = useML(); @@ -99,10 +99,6 @@ export const useVisualizationManager = (): VisualizationManagerType => { } }; - const handleHover = (item: HoverType | undefined) => { - dispatch(addHover(item)); - }; - const handleSelect = (item: SelectType | undefined) => { dispatch(addSelect(item)); }; @@ -133,7 +129,6 @@ export const useVisualizationManager = (): VisualizationManagerType => { ml={ml} configuration={configuration} dispatch={dispatch} - handleHover={handleHover} handleSelect={handleSelect} /> )} diff --git a/libs/shared/lib/vis/manager/index.ts b/libs/shared/lib/vis/manager/index.ts new file mode 100644 index 000000000..96616a248 --- /dev/null +++ b/libs/shared/lib/vis/manager/index.ts @@ -0,0 +1,2 @@ +export { VisualizationManager, Visualizations, VISUALIZATION_TYPES } from './VisualizationManager'; +export type { VisualizationManagerType } from './manager.types'; diff --git a/libs/shared/lib/vis/hooks/hooks.types.ts b/libs/shared/lib/vis/manager/manager.types.ts similarity index 100% rename from libs/shared/lib/vis/hooks/hooks.types.ts rename to libs/shared/lib/vis/manager/manager.types.ts diff --git a/libs/shared/lib/vis/visualizations/documentation.mdx b/libs/shared/lib/vis/visualizations/documentation.mdx index 74c0fd8ac..43cbe3c10 100644 --- a/libs/shared/lib/vis/visualizations/documentation.mdx +++ b/libs/shared/lib/vis/visualizations/documentation.mdx @@ -2,88 +2,69 @@ import { Meta, Unstyled } from '@storybook/blocks'; <Meta title="Visualizations/Implementation" /> -# Visualization documentation +# Visualizations Documentation -## Contents +This documentation provides guidance on implementing visualizations within the GraphPolaris system. Each visualization component consists of four main parts: -1. [Introduction](#Introduction) -2. [Overview](#Overview) -3. [Props](#Props) +1. Display name: A descriptive name for the visualization. +2. Component: The main visualization component responsible for rendering the visualization. +3. Settings component: A component to configure settings for the visualization. +4. Configuration dict: A configuration object containing default settings for the visualization. -## Introduction - -This is the documentation for implementing visualizations within the GraphPolaris system. - -## Overview - -The basic code implementation looks like this: +## Example implementation ```jsx -import React from 'react'; -import { VisualizationPropTypes, VISComponentType } from '@graphpolaris/shared/lib/vis/Types'; +// Define props for the visualization (can be any format) +export type VisualizationProps = { + showBarplot: boolean; + itemsPerPage: number; + displayAttributes: string[]; +}; + +// Default configuration for the visualization +const configuration: VisualizationProps = { + showBarplot: false, + itemsPerPage: 10, + displayAttributes: [], +}; /** * Visualization Component - * @param {object} props - Props for the Visualization component. * @param {GraphQueryResult} props.data - Queried data from the database. * @param {object} props.schema - Database schema. * @param {any} props.ml - Machine-learning results. + * @param {object} props.configuration - Configurations for the visualization. * @param {function} props.dispatch - Redux dispatch for state management. - * @param {object} props.globalConfig - Global configurations for the panel (applicable to all visualizations). - * @param {object} props.settings - Local configuration props unique to this visualization. - * @param {object} props.encodings - data attributes mapped to visual variables. + * @param {function} props.handleSelect - Void that handles selecting items. * @returns {JSX.Element} - Rendered content of the visualization. */ -export const Visualization = ({ data, schema, ml, dispatch, globalConfig, settings, encodings }) => { - // Perform additional processing specific to this visualization using the provided props - +export const Visualization = ({ data, schema, ml, configuration, dispatch, handleSelect }) => { return ( - // Rendered visualization content + // Render visualization content ); }; /** - * Visualization Component Object - * Contains information and configurations for the exported visualization component. + * Settings Component + * @param {VisualizationProps} props.configuration - Configuration dictionary defined above. + * @param {GraphMetaData} props.graph - Result set statistics object. + * @param {function} props.updateSettings - Void that handles updating the settings. + * @returns {JSX.Element} - Rendered content of the visualization settings. */ +const VisualizationSettings = ({configuration, graph, updateSettings}: { + configuration: VisualizationProps; + graph: GraphMetaData; + updateSettings: (val: any) => void; +}) => { + return ( + // Render settings panel + ); +}; + export const VisualizationComponent: VISComponentType = { - displayName: 'Visualization', - VIS: Visualization, - settings: {}, - encodings: {}, + displayName: 'Visualization name', + component: Visualization, + settings: VisualizationSettings, + configuration: configuration, }; ``` - -### VisualizationComponent - -The visualization component is what gets exported and is used in the visualization manager. It must have a displayName and VIS. - -## Props - -### Data prop - -Contains the queried data from the database. - -### Schema prop - -Contains the database schema. - -### ML prop - -Contains the Machine-Learning results. - -### Dispatch prop - -Contains the dispatch for the redux state. - -### Global config prop - -Contains the global configurations for the panel that is the same for every visualization. - -### Settings prop - -Contains the local config props that are unique per visualization. - -### Encodings prop - -Contains the encodings for the visualization. -- GitLab