import { action, computed } from 'mobx'; import { observer } from 'mobx-react'; import * as React from 'react'; import { AnimationSym, Doc } from '../../../../../fields/Doc'; import { Id } from '../../../../../fields/FieldSymbols'; import { List } from '../../../../../fields/List'; import { emptyFunction, returnFalse, setupMoveUpEvents, Utils } from '../../../../../Utils'; import { DragManager } from '../../../../util/DragManager'; import { DocumentView } from '../../DocumentView'; import { DataVizView } from '../DataVizBox'; interface TableBoxProps { pairs: { [key: string]: any }[]; selectAxes: (axes: string[]) => void; axes: string[]; docView?: () => DocumentView | undefined; } @observer export class TableBox extends React.Component { @computed get columns() { return this.props.pairs.length ? Array.from(Object.keys(this.props.pairs[0])) : []; } render() { return (
{this.columns .filter(col => !col.startsWith('select')) .map(col => { const header = React.createRef(); return ( ); })} {this.props.pairs?.map((p, i) => { return ( (p['select' + this.props.docView?.()?.rootDoc![Id]] = !p['select' + this.props.docView?.()?.rootDoc![Id]]))}> {this.columns.map(col => ( ))} ); })}
{ const downX = e.clientX; const downY = e.clientY; setupMoveUpEvents( {}, e, e => { const sourceAnchorCreator = () => this.props.docView?.()!.rootDoc!; const targetCreator = (annotationOn: Doc | undefined) => { const embedding = Doc.MakeEmbedding(this.props.docView?.()!.rootDoc!); embedding._dataVizView = DataVizView.LINECHART; embedding._data_vizAxes = new List([col, col]); embedding.annotationOn = annotationOn; //this.props.docView?.()!.rootDoc!; return embedding; }; if (this.props.docView?.() && !Utils.isClick(e.clientX, e.clientY, downX, downY, Date.now())) { DragManager.StartAnchorAnnoDrag([header.current!], new DragManager.AnchorAnnoDragData(this.props.docView()!, sourceAnchorCreator, targetCreator), downX, downY, { dragComplete: e => { if (!e.aborted && e.annoDragData && e.annoDragData.linkSourceDoc && e.annoDragData.dropDocument && e.linkDocument) { e.linkDocument.layout_linkDisplay = true; // e.annoDragData.linkSourceDoc.followLinkToggle = e.annoDragData.dropDocument.annotationOn === this.props.rootDoc; // e.annoDragData.linkSourceDoc.followLinkZoom = false; } }, }); return true; } return false; }, emptyFunction, action(e => { const newAxes = this.props.axes; if (newAxes.includes(col)) { newAxes.splice(newAxes.indexOf(col), 1); } else if (newAxes.length >= 1) { newAxes[1] = col; } else { newAxes[0] = col; } this.props.selectAxes(newAxes); }) ); }}> {col}
{p[col]}
); } }