aboutsummaryrefslogtreecommitdiff
path: root/src/client/views/nodes/DataVizBox/DataVizBox.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/views/nodes/DataVizBox/DataVizBox.tsx')
-rw-r--r--src/client/views/nodes/DataVizBox/DataVizBox.tsx84
1 files changed, 30 insertions, 54 deletions
diff --git a/src/client/views/nodes/DataVizBox/DataVizBox.tsx b/src/client/views/nodes/DataVizBox/DataVizBox.tsx
index 68766e8dc..e279a1262 100644
--- a/src/client/views/nodes/DataVizBox/DataVizBox.tsx
+++ b/src/client/views/nodes/DataVizBox/DataVizBox.tsx
@@ -2,29 +2,32 @@ import { action, computed, observable } from 'mobx';
import { observer } from 'mobx-react';
import * as React from 'react';
import { Doc } from '../../../../fields/Doc';
-import { BoolCast, Cast, StrCast } from '../../../../fields/Types';
+import { Cast, NumCast, StrCast } from '../../../../fields/Types';
import { CsvField } from '../../../../fields/URLField';
import { Docs } from '../../../documents/Documents';
import { ViewBoxAnnotatableComponent } from '../../DocComponent';
-import { FieldViewProps, FieldView } from '../FieldView';
-import { ChartBox } from './ChartBox';
-import './DataVizBox.scss';
-import { TableBox } from './components/TableBox';
+import { FieldView, FieldViewProps } from '../FieldView';
import { PinProps } from '../trails';
+import { LineChart } from './components/LineChart';
+import { TableBox } from './components/TableBox';
+import './DataVizBox.scss';
enum DataVizView {
TABLE = 'table',
- HISTOGRAM = 'histogram',
+ LINECHART = 'lineChart',
}
@observer
export class DataVizBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
+ public static LayoutString(fieldKey: string) {
+ return FieldView.LayoutString(DataVizBox, fieldKey);
+ }
// says we have an object and any string
// 2 ways of doing it
// @observable private pairs: { [key: string]: number | string | undefined }[] = [];
// @observable private pairs: { [key: string]: FieldResult }[] = [];
@observable private pairs: { x: number; y: number }[] = [];
- private _chartBox: ChartBox | undefined;
+ private _chartRenderer: LineChart | undefined;
// // another way would be store a schema that defines the type of data we are expecting from an imported doc
// method1() {
@@ -45,25 +48,18 @@ export class DataVizBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
// [key: string]: FieldResult;
// instead of numeric x,y in there,
- // TODO: nda - make this use enum values instead
- // @observable private currView: DataVizView = DataVizView.TABLE;
-
// TODO: nda - use onmousedown and onmouseup when dragging and changing height and width to update the height and width props only when dragging stops
- setChartBox = (chartBox: ChartBox) => {
- this._chartBox = chartBox;
- };
-
- @computed get currView() {
- return StrCast(this.rootDoc._dataVizView, 'table');
+ @computed get dataVizView(): DataVizView {
+ return StrCast(this.rootDoc._dataVizView, 'table') as DataVizView;
}
@action
restoreView = (data: Doc) => {
- const changed = this.currView !== data.dataView && (this.rootDoc._dataVizView = data.dataView);
- const func = () => this._chartBox?.restoreView(data);
+ const changed = this.dataVizView !== data.presDataVizView && (this.rootDoc._dataVizView = data.presDataVizView);
+ const func = () => this._chartRenderer?.restoreView(data);
if (changed) {
- setTimeout(func);
+ setTimeout(func, 100);
return changed ? true : false;
}
return func() ?? false;
@@ -71,38 +67,27 @@ export class DataVizBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
getAnchor = (addAsAnnotation?: boolean, pinProps?: PinProps) => {
const anchor =
- this._chartBox?.getAnchor(pinProps) ??
+ this._chartRenderer?.getAnchor(pinProps) ??
Docs.Create.TextanchorDocument({
// when we clear selection -> we should have it so chartBox getAnchor returns undefined
// this is for when we want the whole doc (so when the chartBox getAnchor returns without a marker)
/*put in some options*/
});
- anchor.dataView = this.currView;
+ anchor.presDataVizView = this.dataVizView;
this.addDocument(anchor);
return anchor;
};
- constructor(props: any) {
- super(props);
- if (!this.rootDoc._dataVizView) {
- // TODO: nda - this might not always want to default to "table"
- this.rootDoc._dataVizView = 'table';
- }
- }
-
- public static LayoutString(fieldKey: string) {
- return FieldView.LayoutString(DataVizBox, fieldKey);
- }
@computed get selectView() {
- switch (this.currView) {
- case 'table':
- return <TableBox pairs={this.pairs} />;
- case 'histogram':
- return <ChartBox height={this.props.PanelHeight() - 32 /* height of 'change view' button */} getAnchor={this.getAnchor} setChartBox={this.setChartBox} rootDoc={this.rootDoc} pairs={this.pairs} dataDoc={this.dataDoc} />;
- // case "histogram":
- // return (<HistogramBox rootDoc={this.rootDoc} pairs={this.pairs}/>)
+ const width = NumCast(this.rootDoc._width) * 0.9;
+ const height = (this.props.PanelHeight() - 32) /* height of 'change view' button */ * 0.9;
+ const margin = { top: 10, right: 50, bottom: 50, left: 50 };
+ // prettier-ignore
+ switch (this.dataVizView) {
+ case DataVizView.TABLE: return <TableBox pairs={this.pairs} />;
+ case DataVizView.LINECHART: return <LineChart ref={r => (this._chartRenderer = r ?? undefined)} height={height} width={width} fieldKey={this.fieldKey} margin={margin} rootDoc={this.rootDoc} pairs={this.pairs} dataDoc={this.dataDoc} />;
}
}
@@ -116,34 +101,25 @@ export class DataVizBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
componentDidMount() {
this.props.setContentView?.(this);
- // this.createPairs();
this.fetchData();
}
fetchData() {
- const uri = this.dataUrl?.url.href;
- fetch('/csvData?uri=' + uri).then(res =>
- res.json().then(
- action(res => {
- this.pairs = res;
- })
- )
- );
+ fetch('/csvData?uri=' + this.dataUrl?.url.href) //
+ .then(res => res.json().then(action(res => !res.errno && (this.pairs = res))));
}
// handle changing the view using a button
@action changeViewHandler(e: React.MouseEvent<HTMLButtonElement>) {
e.preventDefault();
e.stopPropagation();
- this.rootDoc._dataVizView = this.currView === 'table' ? 'histogram' : 'table';
+ this.rootDoc._dataVizView = this.dataVizView === DataVizView.TABLE ? DataVizView.LINECHART : DataVizView.TABLE;
}
render() {
- if (this.pairs.length == 0) {
- return <div>Loading...</div>;
- }
-
- return (
+ return this.pairs.length == 0 ? (
+ <div>Loading...</div>
+ ) : (
<div
className="dataViz"
onWheel={e => e.stopPropagation()}