From 0ed2f0d89efbf9830e95a06dbcaade136b5fe4d7 Mon Sep 17 00:00:00 2001
From: bobzel <zzzman@gmail.com>
Date: Wed, 3 Mar 2021 11:24:54 -0500
Subject: added anchor for functionPlots

---
 src/client/views/nodes/FunctionPlotBox.tsx | 42 +++++++++++++++++++++++-------
 1 file changed, 33 insertions(+), 9 deletions(-)

(limited to 'src/client/views/nodes/FunctionPlotBox.tsx')

diff --git a/src/client/views/nodes/FunctionPlotBox.tsx b/src/client/views/nodes/FunctionPlotBox.tsx
index dba08b506..ccbbb2364 100644
--- a/src/client/views/nodes/FunctionPlotBox.tsx
+++ b/src/client/views/nodes/FunctionPlotBox.tsx
@@ -3,14 +3,16 @@ import functionPlot from "function-plot";
 import { observer } from 'mobx-react';
 import * as React from 'react';
 import { documentSchema } from '../../../fields/documentSchemas';
-import { createSchema, makeInterface } from '../../../fields/Schema';
-import { StrCast } from '../../../fields/Types';
+import { createSchema, makeInterface, listSpec } from '../../../fields/Schema';
+import { StrCast, Cast } from '../../../fields/Types';
 import { TraceMobx } from '../../../fields/util';
 import { ViewBoxBaseComponent } from '../DocComponent';
 import { FieldView, FieldViewProps } from './FieldView';
 import './LabelBox.scss';
-import { DocListCast } from '../../../fields/Doc';
-import { computed } from 'mobx';
+import { DocListCast, Doc } from '../../../fields/Doc';
+import { computed, action, reaction } from 'mobx';
+import { Docs } from '../../documents/Documents';
+import { List } from '../../../fields/List';
 
 
 const EquationSchema = createSchema({});
@@ -22,24 +24,47 @@ const EquationDocument = makeInterface(EquationSchema, documentSchema);
 export class FunctionPlotBox extends ViewBoxBaseComponent<FieldViewProps, EquationDocument>(EquationDocument) {
     public static LayoutString(fieldKey: string) { return FieldView.LayoutString(FunctionPlotBox, fieldKey); }
     public static GraphCount = 0;
-    _ref: React.RefObject<EquationEditor> = React.createRef();
     _plot: any;
     _plotId = "";
+    _plotEle: any;
     constructor(props: any) {
         super(props);
         this._plotId = "graph" + FunctionPlotBox.GraphCount++;
     }
-    createGraph = (ele: HTMLDivElement) => {
+    componentDidMount() {
+        this.props.setContentView?.(this);
+        reaction(() => [this.dataDoc.data, this.dataDoc.xRange, this.dataDoc.yRange],
+            () => this.createGraph());
+    }
+    getAnchor = () => {
+        const anchor = Docs.Create.TextanchorDocument({
+            useLinkSmallAnchor: true,
+            hideLinkButton: true,
+            annotationOn: this.rootDoc
+        });
+        anchor.xRange = new List<number>(Array.from(this._plot.options.xAxis.domain));
+        anchor.yRange = new List<number>(Array.from(this._plot.options.yAxis.domain));
+        return anchor;
+    }
+    @action
+    scrollFocus = (doc: Doc, smooth: boolean) => {
+        this.dataDoc.xRange = new List<number>(Array.from(Cast(doc.xRange, listSpec("number"), Cast(this.dataDoc.xRange, listSpec("number"), [-10, 10]))));
+        this.dataDoc.yRange = new List<number>(Array.from(Cast(doc.yRange, listSpec("number"), Cast(this.dataDoc.xRange, listSpec("number"), [-1, 9]))));
+        return 0;
+    }
+    createGraph = (ele?: HTMLDivElement) => {
+        this._plotEle = ele || this._plotEle;
         let width = this.props.PanelWidth();
         let height = this.props.PanelHeight();
         const fn = StrCast(DocListCast(this.dataDoc.data).lastElement()?.text, "x^2").replace(/\\frac\{(.*)\}\{(.*)\}/, "($1/$2)");
         console.log("Graphing:" + fn);
         try {
             this._plot = functionPlot({
-                target: "#" + ele.id,
+                target: "#" + this._plotEle.id,
                 width,
                 height,
-                yAxis: { domain: [-1, 9] },
+                xAxis: { domain: Cast(this.dataDoc.xRange, listSpec("number"), [-10, 10]) },
+                yAxis: { domain: Cast(this.dataDoc.xRange, listSpec("number"), [-1, 9]) },
                 grid: true,
                 data: [
                     {
@@ -53,7 +78,6 @@ export class FunctionPlotBox extends ViewBoxBaseComponent<FieldViewProps, Equati
         }
     }
     @computed get theGraph() {
-        const fn = StrCast(DocListCast(this.dataDoc.data).lastElement()?.text, "x^2");
         return <div id={`${this._plotId}`} ref={r => r && this.createGraph(r)} style={{ position: "absolute", width: "100%", height: "100%" }}
             onPointerDown={e => e.stopPropagation()} />;
     }
-- 
cgit v1.2.3-70-g09d2

