diff --git a/src/lib/components/DesignGuides/styleGuide.mdx b/src/lib/components/DesignGuides/styleGuide.mdx index fdb8fde3d925b6c5da0b245d1a2f6cd1511c7818..80a4311fae6086714ab46ca8a746a2f0515f64c3 100644 --- a/src/lib/components/DesignGuides/styleGuide.mdx +++ b/src/lib/components/DesignGuides/styleGuide.mdx @@ -2,9 +2,9 @@ import { Meta, Unstyled } from '@storybook/blocks'; import { ColorPalette, ColorItem, IconGallery, IconItem, Canvas } from '@storybook/blocks'; import { Button } from '../buttons/.'; -import { TextInput } from '@graphpolaris/shared/lib/components/inputs'; +import { TextInput } from '@/lib/components/inputs'; import { Icon } from '../icon/.'; -import { visualizationColors } from 'config'; +import { visualizationColors } from '@/config'; <Meta title="Design guide" /> @@ -36,7 +36,7 @@ Style files can be found in: - colors.ts: For getting colors palettes as dictionaries. E.g.: ```jsx -import { visualizationColors } from '../../../../config/src/colors.ts'; +import { visualizationColors } from '@/config'; ``` ## Colors diff --git a/src/lib/components/colorComponents/colorPicker/index.tsx b/src/lib/components/colorComponents/colorPicker/index.tsx index b8a98fe826d381def971e7cb1bd2f6e6c84aa9e8..be64f75ce17f674ac30076851c78f3d4104b5e87 100644 --- a/src/lib/components/colorComponents/colorPicker/index.tsx +++ b/src/lib/components/colorComponents/colorPicker/index.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { visualizationColors } from '@/config'; import { Popover, PopoverTrigger, PopoverContent } from '@/lib/components/layout/Popover'; diff --git a/src/lib/components/icon/overview.mdx b/src/lib/components/icon/overview.mdx deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/src/lib/mock-data/query-result/big2ndChamberQueryResult.json b/src/lib/mock-data/query-result/big2ndChamberQueryResult.json index 28eea626372b69c3f814c9eda5066be87593058e..e3b732f6d45dd5b27415d04c3861456617ae2de5 100644 --- a/src/lib/mock-data/query-result/big2ndChamberQueryResult.json +++ b/src/lib/mock-data/query-result/big2ndChamberQueryResult.json @@ -3924,8 +3924,8 @@ "_id": "1163", "attributes": {}, "label": "onderdeel_van", - "source": "117", - "target": "36" + "source": "kamerleden/117", + "target": "commisies/36" }, { "_id": "263", diff --git a/src/lib/mock-data/query-result/smallVillainQueryResults.json b/src/lib/mock-data/query-result/smallVillainQueryResults.json index e98d282129a9a9b325196764fcddaaa798b56b58..b4b3152d905b6262a6993667a67f67c545297a69 100644 --- a/src/lib/mock-data/query-result/smallVillainQueryResults.json +++ b/src/lib/mock-data/query-result/smallVillainQueryResults.json @@ -19,7 +19,7 @@ { "_id": "escape/escape", "from": "agent/007", - "to": "villain", + "to": "villain/Le Chiffre", "attributes": { "name": "Escape" } diff --git a/src/lib/mock-data/query-result/testUnMatchHeadersDataResults.json b/src/lib/mock-data/query-result/testUnMatchHeadersDataResults.json index 1cadc3be1d5f1bbcca0afd37f31954d186f01f10..4e3fc4e7399b5f5cfa0030fc6fbecd1175aca602 100644 --- a/src/lib/mock-data/query-result/testUnMatchHeadersDataResults.json +++ b/src/lib/mock-data/query-result/testUnMatchHeadersDataResults.json @@ -22,6 +22,7 @@ "_id": "worker/1", "_key": "1", "_rev": "_cYl-Qmq-_H", + "label": "worker", "attributes": { "name": "John Doe", "age": 30, @@ -32,6 +33,7 @@ "_id": "worker/3", "_key": "2", "_rev": "_cYl-Qmq--5", + "label": "worker", "attributes": { "name": "Bob Johnson", "age": 35 @@ -41,6 +43,7 @@ "_id": "worker/2", "_key": "2", "_rev": "_cYl-Qmq--5", + "label": "worker", "attributes": { "age": 38, "height": 195.2 diff --git a/src/lib/mock-data/query-result/typesMockQueryResults.json b/src/lib/mock-data/query-result/typesMockQueryResults.json index 45546ae09dccc9a994ef1e77da42ca7bdd005845..6875775fb61ee15b323ed7ff0d48f1dcc3746b58 100644 --- a/src/lib/mock-data/query-result/typesMockQueryResults.json +++ b/src/lib/mock-data/query-result/typesMockQueryResults.json @@ -20,6 +20,7 @@ "nodes": [ { "_id": "worker/1", + "label": "worker", "_key": "1", "_rev": "_cYl-Qmq-_H", "attributes": { @@ -37,6 +38,7 @@ "_id": "worker/2", "_key": "2", "_rev": "_cYl-Qmq--5", + "label": "worker", "attributes": { "name": "Bob Johnson", "age": 35, @@ -52,6 +54,7 @@ "_id": "worker/3", "_key": "3", "_rev": "_cYl-Qmq--3", + "label": "worker", "attributes": { "name": "Jane Smith", "age": 28, @@ -67,6 +70,7 @@ "_id": "worker/4", "_key": "4", "_rev": "_cYl-Qmq--z", + "label": "worker", "attributes": { "name": "Bob Knee", "age": 35, @@ -82,6 +86,7 @@ "_id": "worker/5", "_key": "5", "_rev": "_cYl-Qmq--x", + "label": "worker", "attributes": { "name": "Alice Brown", "age": 25, @@ -97,6 +102,7 @@ "_id": "worker/6", "_key": "6", "_rev": "_cYl-Qmq--v", + "label": "worker", "attributes": { "name": "Michael Davis", "age": 40, @@ -112,6 +118,7 @@ "_id": "worker/7", "_key": "7", "_rev": "_cYl-Qmq--p", + "label": "worker", "attributes": { "name": "Sophia Turner", "age": 27, @@ -127,6 +134,7 @@ "_id": "worker/8", "_key": "8", "_rev": "_cYl-Qmq--n", + "label": "worker", "attributes": { "name": "David Miller", "age": 34, @@ -140,6 +148,7 @@ }, { "_id": "worker/9", + "label": "worker", "_key": "9", "_rev": "_cYl-Qmq--l", "attributes": { @@ -155,6 +164,7 @@ }, { "_id": "worker/10", + "label": "worker", "_key": "10", "_rev": "_cYl-Qmq--j", "attributes": { @@ -170,6 +180,7 @@ }, { "_id": "worker/11", + "label": "worker", "_key": "11", "_rev": "_cYl-Qmq--f", "attributes": { diff --git a/src/lib/mock-data/schema/simpleAirportRaw.ts b/src/lib/mock-data/schema/simpleAirportRaw.ts index 5a2fdbe30c713d2322ddbba0c9465c332a2c9a6b..c77808b0afee62963834656590f2e416f51d34d0 100644 --- a/src/lib/mock-data/schema/simpleAirportRaw.ts +++ b/src/lib/mock-data/schema/simpleAirportRaw.ts @@ -1,4 +1,4 @@ -import { SchemaFromBackend } from '../../schema'; +import { SchemaFromBackend } from 'ts-common'; import { SchemaUtils } from '../../schema/schema-utils'; export const simpleSchemaAirportRaw: SchemaFromBackend = { diff --git a/src/lib/querybuilder/panel/stories/querybuilder-simple.stories.tsx b/src/lib/querybuilder/panel/stories/querybuilder-simple.stories.tsx index c8a823cadf6d326a819f296a1c193f26088ea843..492dc9c8e20428c8a3937958751dcc4014f54429 100644 --- a/src/lib/querybuilder/panel/stories/querybuilder-simple.stories.tsx +++ b/src/lib/querybuilder/panel/stories/querybuilder-simple.stories.tsx @@ -1,9 +1,9 @@ -import React from 'react'; import { setQuerybuilderGraph, setSchema, store } from '@/lib/data-access/store'; import { Meta } from '@storybook/react'; import { Provider } from 'react-redux'; import QueryBuilder from '../QueryBuilder'; -import { QueryElementTypes, QueryMultiGraphology } from '../../model'; +import { QueryMultiGraphology } from '../../model'; +import { QueryElementTypes } from 'ts-common'; import { SchemaUtils } from '../../../schema/schema-utils'; const Component: Meta<typeof QueryBuilder> = { diff --git a/src/lib/querybuilder/panel/stories/querybuilder-single-entity.stories.tsx b/src/lib/querybuilder/panel/stories/querybuilder-single-entity.stories.tsx index 0959697976f4db7f269aff054dae03c8a8f3e1d2..8fd1d57e3482730d9d6584450618076abfce8239 100644 --- a/src/lib/querybuilder/panel/stories/querybuilder-single-entity.stories.tsx +++ b/src/lib/querybuilder/panel/stories/querybuilder-single-entity.stories.tsx @@ -1,9 +1,9 @@ -import React from 'react'; import { setQuerybuilderGraph, store } from '@/lib/data-access/store'; import { Meta } from '@storybook/react'; import { Provider } from 'react-redux'; import QueryBuilder from '../QueryBuilder'; -import { QueryElementTypes, QueryMultiGraphology } from '../../model'; +import { QueryMultiGraphology } from '../../model'; +import { QueryElementTypes } from 'ts-common'; const Component: Meta<typeof QueryBuilder> = { component: QueryBuilder, diff --git a/src/lib/querybuilder/panel/stories/querybuilder-single-relationship.stories.tsx b/src/lib/querybuilder/panel/stories/querybuilder-single-relationship.stories.tsx index e8c073455cac2b3ae5ec0941cec41f4a2d726a2d..2ec3b2ee76220aac1fd688926ed4d2d497d04e0d 100644 --- a/src/lib/querybuilder/panel/stories/querybuilder-single-relationship.stories.tsx +++ b/src/lib/querybuilder/panel/stories/querybuilder-single-relationship.stories.tsx @@ -1,9 +1,9 @@ -import React from 'react'; import { setQuerybuilderGraph, store } from '@/lib/data-access/store'; import { Meta } from '@storybook/react'; import { Provider } from 'react-redux'; import QueryBuilder from '../QueryBuilder'; -import { QueryElementTypes, QueryMultiGraphology } from '../../model'; +import { QueryMultiGraphology } from '../../model'; +import { QueryElementTypes } from 'ts-common'; const Component: Meta<typeof QueryBuilder> = { component: QueryBuilder, diff --git a/src/lib/vis/visualizations/arcplotvis/arcplotvis.stories.tsx b/src/lib/vis/visualizations/arcplotvis/arcplotvis.stories.tsx index 310e73cf0ebb4fc7e4834921cad0de3d40e75e88..1512c49f8acee3afa1b8b9ac36aeb92b2e84555a 100644 --- a/src/lib/vis/visualizations/arcplotvis/arcplotvis.stories.tsx +++ b/src/lib/vis/visualizations/arcplotvis/arcplotvis.stories.tsx @@ -4,7 +4,6 @@ import { Provider } from 'react-redux'; import { graphQueryResultSlice, querybuilderSlice, schemaSlice, visualizationSlice } from '../../../data-access/store'; import { mockData } from '../../../mock-data'; import ArcPlotComponent from './arcplotvis'; -// import { mockLargeQueryResults } from '@/lib/mock-data'; const Mockstore = configureStore({ reducer: { @@ -37,7 +36,6 @@ const Component: Meta<typeof ArcPlotComponent.component> = { export const SmallVillainDoubleArchData = { args: { ...(await mockData.smallVillainDoubleArchQueryResults()), - // configuration: ArcPlotComponent.configuration, updateSettings: () => {}, settings: { ...ArcPlotComponent.settings, @@ -48,7 +46,6 @@ export const SmallVillainDoubleArchData = { export const SmallVillainData = { args: { ...(await mockData.smallVillainQueryResults()), - // configuration: ArcPlotComponent.configuration, updateSettings: () => {}, settings: { ...ArcPlotComponent.settings, @@ -76,6 +73,11 @@ export const movie_recommendationPersonActedInMovieQueryResultData = { }, }; +/* +// TODO!: mockLargeQueryResults does not have the required structure +// has: attributes{label, ...}, _id +// needs: attributes, label, _id + export const LargeData = { args: { ...(await mockData.mockLargeQueryResults()), @@ -84,19 +86,8 @@ export const LargeData = { ...ArcPlotComponent.settings, }, }, - - // args: { - // ...(await mockData.marieBoucherSample()), - // updateSettings: () => {}, - // schema: marieBoucherSampleSchemaRaw, - // settings: { - // ...PaohVisComponent.settings, - // rowNode: 'merchant', - // columnNode: 'merchant', - // attributeRowShow: ['_id', '# Connections', 'name2', 'birth'], - // }, - // }, }; +*/ export const Empty = { args: { @@ -104,7 +95,6 @@ export const Empty = { nodes: [], edges: [], }, - configuration: ArcPlotComponent.configuration, settings: { ...ArcPlotComponent.settings, }, diff --git a/src/lib/vis/visualizations/matrixvis/matrix.stories.tsx b/src/lib/vis/visualizations/matrixvis/matrix.stories.tsx index f97d79a62b3d070fe8c1754c047f0198050f3b14..419f44324093dff75441a41e63248c8ed405bb1a 100644 --- a/src/lib/vis/visualizations/matrixvis/matrix.stories.tsx +++ b/src/lib/vis/visualizations/matrixvis/matrix.stories.tsx @@ -42,11 +42,6 @@ export const TestWithData = { ml: {}, settings: MatrixVisComponent.settings, }, - play: async () => { - // const dispatch = Mockstore.dispatch; - // const schema = SchemaUtils.schemaBackend2Graphology(simpleSchemaAirportRaw); - // dispatch(setSchema(schema.export())); - }, }; export const TestWithNoData = { diff --git a/src/lib/vis/visualizations/tablevis/components/Table.tsx b/src/lib/vis/visualizations/tablevis/components/Table.tsx index e8e41ec9cfa075ec302986159537e96dc3123b77..5a58f4ad9401062330e12543abc1ef7571169ddd 100644 --- a/src/lib/vis/visualizations/tablevis/components/Table.tsx +++ b/src/lib/vis/visualizations/tablevis/components/Table.tsx @@ -1,8 +1,8 @@ -import React, { useState, useEffect, useMemo, useRef } from 'react'; +import { useState, useEffect, useRef } from 'react'; import { Pagination } from '@/lib/components/pagination'; import { BarPlot } from '@/lib/components/charts/barplot'; -import { NodeAttributes } from '@/lib/data-access/store/graphQueryResultSlice'; -import { SchemaAttributeTypes } from '@/lib/schema'; +import { NodeAttributes } from 'ts-common'; +import { SchemaAttributeTypes } from 'ts-common'; import { Icon } from '@/lib/components'; import { group } from 'd3'; @@ -140,7 +140,7 @@ export const Table = ({ data, itemsPerPage, showBarPlot, showAttributes, selecte // TODO !FIXME: remove firstRowData and get type from schema information let categoryCounts = []; const firstRowData = data[data.length > fetchAttributes ? fetchAttributes : 0]; - const _data2Render = showAttributes.map((dataColumn: string, i) => { + const _data2Render = showAttributes.map((dataColumn: string) => { const newData2Render: Data2RenderI = { name: dataColumn, typeData: firstRowData.type[dataColumn] || 'string', diff --git a/src/lib/vis/visualizations/tablevis/tablevis.stories.tsx b/src/lib/vis/visualizations/tablevis/tablevis.stories.tsx index 5e3939da4724af36049fcc259252824735399da5..6369ca3821e181a6c896f111d4ca2127adc0e363 100644 --- a/src/lib/vis/visualizations/tablevis/tablevis.stories.tsx +++ b/src/lib/vis/visualizations/tablevis/tablevis.stories.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { Meta } from '@storybook/react'; import { graphQueryResultSlice, querybuilderSlice, schemaSlice, visualizationSlice } from '../../../data-access/store'; import { configureStore } from '@reduxjs/toolkit'; @@ -39,10 +38,19 @@ export const TestWithAirport = { args: { ...(await mockData.bigMockQueryResults()), schema: simpleSchemaAirportRaw, + // graphMetadata: has more fields, just for SB. Data has an old structure + graphMetadata: { + nodes: { + labels: ['airports'], + }, + edges: { + labels: ['routes'], + }, + }, settings: { ...TableComponent.settings, displayAttributes: ['city', 'country', 'lat', 'long', 'name', 'state', 'vip'], - displayEntity: 'airports', + selectedEntity: 'airports', }, }, }; @@ -54,7 +62,7 @@ export const TestWithBig2ndChamber = { settings: { ...TableComponent.settings, displayAttributes: ['naam', 'anc', 'img', 'leeftijd', 'height', 'partij', 'woonplaats'], - displayEntity: 'kamerleden', + selectedEntity: 'kamerleden', }, }, }; @@ -65,7 +73,7 @@ export const TestWithTypesMock = { settings: { ...TableComponent.settings, displayAttributes: ['name', 'age', 'height', 'sacked', 'birthdate', 'startingSchedule', 'commutingDuration', 'firstLogin'], - displayEntity: 'worker', + selectedEntity: 'worker', }, }, }; @@ -77,7 +85,7 @@ export const TestUnMatchHeadersData = { settings: { ...TableComponent.settings, displayAttributes: ['name', 'age', 'height'], - displayEntity: 'worker', + selectedEntity: 'worker', }, }, }; diff --git a/src/lib/vis/visualizations/vis0D/Vis0D.tsx b/src/lib/vis/visualizations/vis0D/Vis0D.tsx index df6806ba6ff46f7914549b510f9b08b3317cf715..399ba3ac58b01cd244e7f10a9d959f31198429a4 100644 --- a/src/lib/vis/visualizations/vis0D/Vis0D.tsx +++ b/src/lib/vis/visualizations/vis0D/Vis0D.tsx @@ -1,4 +1,4 @@ -import React, { useRef, useImperativeHandle, forwardRef, useEffect, useState, Fragment } from 'react'; +import React, { useRef, useImperativeHandle, forwardRef, useEffect, useState } from 'react'; import { VisualizationPropTypes, VISComponentType, VisualizationSettingsPropTypes } from '../../common'; import { SettingsContainer } from '@/lib/vis/components/config'; import html2canvas from 'html2canvas'; diff --git a/src/lib/vis/visualizations/vis0D/vis0D.stories.tsx b/src/lib/vis/visualizations/vis0D/vis0D.stories.tsx index b89f3bf4c0e2a19e8c27ddeb4da7d0745d40e6f2..97036b7696ac6b5ddcabcbaf8b30bcfa5bc5b430 100644 --- a/src/lib/vis/visualizations/vis0D/vis0D.stories.tsx +++ b/src/lib/vis/visualizations/vis0D/vis0D.stories.tsx @@ -36,13 +36,87 @@ const Mockstore: any = configureStore({ export const TestWithData = { args: { data: { - nodes: 12313, - edges: [], + nodes: [ + { id: 'node1', label: 'Node 1' }, + { id: 'node2', label: 'Node 2' }, + ], + edges: [ + { + source: 'node1', + target: 'node2', + label: 'Edge between Node 1 and Node 2', + }, + ], }, ml: {}, settings: { ...Vis0DComponent.settings, - title: 'KPI Count Movie', + title: 'KPI Count Movie Votes', + selectedEntity: 'Movie', // The selected entity (must exist in the graphMetadata structure). + selectedAttribute: 'votes', // An attribute from the entity's attributes list. + selectedStat: 'count', // A valid statistic for the selected attribute. + }, + graphMetadata: { + nodes: { + count: 2, + labels: ['Movie', 'Person'], + types: { + Movie: { + count: 1, + attributes: { + votes: { + type: 'number', + statistics: { + count: 12345, + min: 0, + max: 1000, + avg: 450, + }, + }, + rating: { + type: 'number', + statistics: { + count: 12345, + min: 1, + max: 10, + avg: 7.5, + }, + }, + }, + }, + Person: { + count: 1, + attributes: { + age: { + type: 'number', + statistics: { + count: 100, + min: 18, + max: 70, + avg: 35, + }, + }, + }, + }, + }, + }, + edges: { + count: 1, + labels: ['ACTED_IN'], + types: { + ACTED_IN: { + count: 1, + attributes: { + role: { + type: 'string', + statistics: { + uniqueCount: 1, + }, + }, + }, + }, + }, + }, }, }, };