From 791ca5ff760aa320c596da0d2cdee16d198aeeb6 Mon Sep 17 00:00:00 2001 From: srichman333 Date: Mon, 4 Dec 2023 18:49:31 -0500 Subject: dataviz as schema live updates --- .../collectionFreeForm/CollectionFreeFormView.tsx | 12 +++++--- src/client/views/nodes/DataVizBox/DataVizBox.tsx | 33 ++++++++++++++++++++-- 2 files changed, 39 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx b/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx index 3a1ea766a..d53049e04 100644 --- a/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx +++ b/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx @@ -1976,9 +1976,11 @@ ScriptingGlobals.add(function sendToBack(doc: Doc) { }); ScriptingGlobals.add(function datavizFromSchema(doc: Doc) { SelectionManager.Views().forEach(view => { - var keys = Cast(view.layoutDoc.schema_columnKeys, listSpec('string'))?.filter(key => key!="text"); - const defaultColumnKeys: string[] = ['title', 'type', 'author', 'author_date']; - if (!keys) keys = Cast(view.layoutDoc.schema_columnKeys, listSpec('string'), defaultColumnKeys);; + if (!view.layoutDoc.schema_columnKeys){ + view.layoutDoc.schema_columnKeys = new List(['title', 'type', 'author', 'author_date']) + } + const keys = Cast(view.layoutDoc.schema_columnKeys, listSpec('string'))?.filter(key => key!="text"); + if (!keys) return; const children = DocListCast(view.rootDoc[Doc.LayoutFieldKey(view.rootDoc)]); let csvRows = []; @@ -2000,8 +2002,10 @@ ScriptingGlobals.add(function datavizFromSchema(doc: Doc) { DocUtils.uploadFileToDoc(file, {}, loading); if (view.ComponentView?.addDocument) { + // loading.dataViz_fromSchema = true; + loading.dataViz_asSchema = view.layoutDoc; SchemaCSVPopUp.Instance.setView(view); - SchemaCSVPopUp.Instance.setTarget(view.rootDoc); + SchemaCSVPopUp.Instance.setTarget(view.layoutDoc); SchemaCSVPopUp.Instance.setDataVizDoc(loading); SchemaCSVPopUp.Instance.setVisible(true); } diff --git a/src/client/views/nodes/DataVizBox/DataVizBox.tsx b/src/client/views/nodes/DataVizBox/DataVizBox.tsx index 32ed57861..7a2715667 100644 --- a/src/client/views/nodes/DataVizBox/DataVizBox.tsx +++ b/src/client/views/nodes/DataVizBox/DataVizBox.tsx @@ -2,7 +2,7 @@ import { Colors, Toggle, ToggleType, Type } from 'browndash-components'; import { action, computed, observable, ObservableMap, runInAction } from 'mobx'; import { observer } from 'mobx-react'; import * as React from 'react'; -import { Doc, Field, Opt, StrListCast } from '../../../../fields/Doc'; +import { Doc, DocListCast, Field, Opt, StrListCast } from '../../../../fields/Doc'; import { List } from '../../../../fields/List'; import { Cast, CsvCast, DocCast, NumCast, StrCast } from '../../../../fields/Types'; import { CsvField } from '../../../../fields/URLField'; @@ -30,6 +30,7 @@ import { CollectionFreeFormView } from '../../collections/collectionFreeForm'; import { ContextMenu } from '../../ContextMenu'; import { gptImageCall } from '../../../apis/gpt/GPT'; import { Networking } from '../../../Network'; +import { listSpec } from '../../../../fields/Schema'; export enum DataVizView { TABLE = 'table', @@ -356,9 +357,37 @@ export class DataVizBox extends ViewBoxAnnotatableComponent() { } } + @action + updateSchemaViz = () => { + if (this.layoutDoc.dataViz_asSchema && DocCast(this.layoutDoc.dataViz_asSchema)){ + + const getFrom = DocCast(this.layoutDoc.dataViz_asSchema) + const keys = Cast(getFrom.schema_columnKeys, listSpec('string'))?.filter(key => key!="text"); + if (!keys) return; + const children = DocListCast(getFrom[Doc.LayoutFieldKey(getFrom)]); + + var current: {[key: string]: string}[] = [] + for (let i=1; iTo create a DataViz box, either import / drag a CSV file into your canvas or copy a data table and use the command 'ctrl + p' to bring the data table to your canvas. -- cgit v1.2.3-70-g09d2