@pie-lib/graphing 2.4.15 → 2.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,36 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [2.5.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/graphing@2.4.17...@pie-lib/graphing@2.5.0) (2022-05-03)
7
+
8
+
9
+ ### Features
10
+
11
+ * **graphing:** updated store on model change PD-1608 ([a3744dd](https://github.com/pie-framework/pie-lib/commit/a3744dd74d90cca280b90657cbd558ce7ab9c288))
12
+
13
+
14
+
15
+
16
+
17
+ ## [2.4.17](https://github.com/pie-framework/pie-lib/compare/@pie-lib/graphing@2.4.16...@pie-lib/graphing@2.4.17) (2022-04-28)
18
+
19
+ **Note:** Version bump only for package @pie-lib/graphing
20
+
21
+
22
+
23
+
24
+
25
+ ## [2.4.16](https://github.com/pie-framework/pie-lib/compare/@pie-lib/graphing@2.4.15...@pie-lib/graphing@2.4.16) (2022-03-22)
26
+
27
+
28
+ ### Bug Fixes
29
+
30
+ * Do not change object at address. Instead, create a clone. ([2b683d7](https://github.com/pie-framework/pie-lib/commit/2b683d76853bf057388e6a223671eef3a040dbbf))
31
+
32
+
33
+
34
+
35
+
6
36
  ## [2.4.15](https://github.com/pie-framework/pie-lib/compare/@pie-lib/graphing@2.4.14...@pie-lib/graphing@2.4.15) (2022-03-22)
7
37
 
8
38
 
@@ -123,6 +123,16 @@ var Root = /*#__PURE__*/function (_React$Component) {
123
123
  }
124
124
 
125
125
  _createClass(Root, [{
126
+ key: "componentDidUpdate",
127
+ value: function componentDidUpdate() {
128
+ var marks = this.props.marks;
129
+ var storeState = this.store.getState();
130
+
131
+ if (!(0, _isEqual["default"])(storeState.marks.present, marks)) {
132
+ this.store.dispatch((0, _actions.changeMarks)(marks));
133
+ }
134
+ }
135
+ }, {
126
136
  key: "render",
127
137
  value: function render() {
128
138
  // eslint-disable-next-line no-unused-vars
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/container/index.jsx"],"names":["mapStateToProps","s","marks","present","mapDispatchToProps","dispatch","onChangeMarks","m","onUndo","ActionCreators","undo","onRedo","redo","onReset","GraphContainer","GraphWithControls","Root","props","storeState","store","getState","r","subscribe","onStoreChange","rest","correctnessSet","find","correctness","React","Component","PropTypes","func","array"],"mappings":";;;;;;;;;AAAA;;AACA;;AAEA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,IAAMA,eAAe,GAAG,SAAlBA,eAAkB,CAAAC,CAAC;AAAA,SAAK;AAC5BC,IAAAA,KAAK,EAAED,CAAC,CAACC,KAAF,CAAQC;AADa,GAAL;AAAA,CAAzB;;AAIA,IAAMC,kBAAkB,GAAG,SAArBA,kBAAqB,CAAAC,QAAQ;AAAA,SAAK;AACtCC,IAAAA,aAAa,EAAE,uBAAAC,CAAC;AAAA,aAAIF,QAAQ,CAAC,0BAAYE,CAAZ,CAAD,CAAZ;AAAA,KADsB;AAEtCC,IAAAA,MAAM,EAAE;AAAA,aAAMH,QAAQ,CAACI,0BAAeC,IAAf,EAAD,CAAd;AAAA,KAF8B;AAGtCC,IAAAA,MAAM,EAAE;AAAA,aAAMN,QAAQ,CAACI,0BAAeG,IAAf,EAAD,CAAd;AAAA,KAH8B;AAItCC,IAAAA,OAAO,EAAE;AAAA,aAAMR,QAAQ,CAAC,0BAAY,EAAZ,CAAD,CAAd;AAAA;AAJ6B,GAAL;AAAA,CAAnC;;AAOO,IAAMS,cAAc,GAAG,yBAC5Bd,eAD4B,EAE5BI,kBAF4B,EAG5BW,6BAH4B,CAAvB;AAKP;AACA;AACA;AACA;;;;IACMC,I;;;;;AAMJ,gBAAYC,KAAZ,EAAmB;AAAA;;AAAA;;AACjB,8BAAMA,KAAN;;AADiB,oEASH,YAAM;AACpB,wBAAiC,MAAKA,KAAtC;AAAA,UAAQf,KAAR,eAAQA,KAAR;AAAA,UAAeI,aAAf,eAAeA,aAAf;;AACA,UAAMY,UAAU,GAAG,MAAKC,KAAL,CAAWC,QAAX,EAAnB;;AACA,UAAI,CAAC,yBAAQF,UAAU,CAAChB,KAAX,CAAiBC,OAAzB,EAAkCD,KAAlC,CAAL,EAA+C;AAC7CI,QAAAA,aAAa,CAACY,UAAU,CAAChB,KAAX,CAAiBC,OAAlB,CAAb;AACD;AACF,KAfkB;;AAGjB,QAAMkB,CAAC,GAAG,0BAAV;AACA,UAAKF,KAAL,GAAa,wBAAYE,CAAZ,EAAe;AAAEnB,MAAAA,KAAK,EAAEe,KAAK,CAACf;AAAf,KAAf,CAAb;;AAEA,UAAKiB,KAAL,CAAWG,SAAX,CAAqB,MAAKC,aAA1B;;AANiB;AAOlB;;;;WAUD,kBAAS;AACP;AACA,yBAA0C,KAAKN,KAA/C;AAAA,UAAQX,aAAR,gBAAQA,aAAR;AAAA,UAAuBJ,KAAvB,gBAAuBA,KAAvB;AAAA,UAAiCsB,IAAjC;;AACA,UAAMC,cAAc,GAAGvB,KAAK,IAAIA,KAAK,CAACwB,IAAN,CAAW,UAAAnB,CAAC;AAAA,eAAIA,CAAC,CAACoB,WAAN;AAAA,OAAZ,CAAhC;;AAEA,UAAIF,cAAJ,EAAoB;AAClB,4BAAO,gCAAC,6BAAD,eAAuBD,IAAvB;AAA6B,UAAA,KAAK,EAAEtB,KAApC;AAA2C,UAAA,QAAQ,EAAEuB;AAArD,WAAP;AACD;;AAED,0BACE,gCAAC,oBAAD;AAAU,QAAA,KAAK,EAAE,KAAKN;AAAtB,sBACE,gCAAC,cAAD,EAAoBK,IAApB,CADF,CADF;AAKD;;;;EArCgBI,kBAAMC,S;;gBAAnBb,I,eACe;AACjBV,EAAAA,aAAa,EAAEwB,sBAAUC,IADR;AAEjB7B,EAAAA,KAAK,EAAE4B,sBAAUE;AAFA,C;;eAuCNhB,I","sourcesContent":["import { connect } from 'react-redux';\nimport React from 'react';\nimport { Provider } from 'react-redux';\nimport { createStore } from 'redux';\nimport reducer from './reducer';\nimport { changeMarks } from './actions';\nimport PropTypes from 'prop-types';\nimport isEqual from 'lodash/isEqual';\nimport { ActionCreators } from 'redux-undo';\nimport GraphWithControls from '../graph-with-controls';\n\nconst mapStateToProps = s => ({\n marks: s.marks.present\n});\n\nconst mapDispatchToProps = dispatch => ({\n onChangeMarks: m => dispatch(changeMarks(m)),\n onUndo: () => dispatch(ActionCreators.undo()),\n onRedo: () => dispatch(ActionCreators.redo()),\n onReset: () => dispatch(changeMarks([]))\n});\n\nexport const GraphContainer = connect(\n mapStateToProps,\n mapDispatchToProps\n)(GraphWithControls);\n\n/**\n * The graph component entry point with undo/redo\n * Redux is an implementation detail, hide it in the react component.\n */\nclass Root extends React.Component {\n static propTypes = {\n onChangeMarks: PropTypes.func,\n marks: PropTypes.array\n };\n\n constructor(props) {\n super(props);\n\n const r = reducer();\n this.store = createStore(r, { marks: props.marks });\n\n this.store.subscribe(this.onStoreChange);\n }\n\n onStoreChange = () => {\n const { marks, onChangeMarks } = this.props;\n const storeState = this.store.getState();\n if (!isEqual(storeState.marks.present, marks)) {\n onChangeMarks(storeState.marks.present);\n }\n };\n\n render() {\n // eslint-disable-next-line no-unused-vars\n const { onChangeMarks, marks, ...rest } = this.props;\n const correctnessSet = marks && marks.find(m => m.correctness);\n\n if (correctnessSet) {\n return <GraphWithControls {...rest} marks={marks} disabled={correctnessSet} />;\n }\n\n return (\n <Provider store={this.store}>\n <GraphContainer {...rest} />\n </Provider>\n );\n }\n}\n\nexport default Root;\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../../src/container/index.jsx"],"names":["mapStateToProps","s","marks","present","mapDispatchToProps","dispatch","onChangeMarks","m","onUndo","ActionCreators","undo","onRedo","redo","onReset","GraphContainer","GraphWithControls","Root","props","storeState","store","getState","r","subscribe","onStoreChange","rest","correctnessSet","find","correctness","React","Component","PropTypes","func","array"],"mappings":"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","sourcesContent":["import { connect } from 'react-redux';\nimport React from 'react';\nimport { Provider } from 'react-redux';\nimport { createStore } from 'redux';\nimport reducer from './reducer';\nimport { changeMarks } from './actions';\nimport PropTypes from 'prop-types';\nimport isEqual from 'lodash/isEqual';\nimport { ActionCreators } from 'redux-undo';\nimport GraphWithControls from '../graph-with-controls';\n\nconst mapStateToProps = s => ({\n marks: s.marks.present\n});\n\nconst mapDispatchToProps = dispatch => ({\n onChangeMarks: m => dispatch(changeMarks(m)),\n onUndo: () => dispatch(ActionCreators.undo()),\n onRedo: () => dispatch(ActionCreators.redo()),\n onReset: () => dispatch(changeMarks([]))\n});\n\nexport const GraphContainer = connect(mapStateToProps, mapDispatchToProps)(GraphWithControls);\n\n/**\n * The graph component entry point with undo/redo\n * Redux is an implementation detail, hide it in the react component.\n */\nclass Root extends React.Component {\n static propTypes = {\n onChangeMarks: PropTypes.func,\n marks: PropTypes.array\n };\n\n constructor(props) {\n super(props);\n\n const r = reducer();\n this.store = createStore(r, { marks: props.marks });\n\n this.store.subscribe(this.onStoreChange);\n }\n\n componentDidUpdate() {\n const { marks } = this.props;\n const storeState = this.store.getState();\n\n if (!isEqual(storeState.marks.present, marks)) {\n this.store.dispatch(changeMarks(marks));\n }\n }\n\n onStoreChange = () => {\n const { marks, onChangeMarks } = this.props;\n const storeState = this.store.getState();\n if (!isEqual(storeState.marks.present, marks)) {\n onChangeMarks(storeState.marks.present);\n }\n };\n\n render() {\n // eslint-disable-next-line no-unused-vars\n const { onChangeMarks, marks, ...rest } = this.props;\n const correctnessSet = marks && marks.find(m => m.correctness);\n\n if (correctnessSet) {\n return <GraphWithControls {...rest} marks={marks} disabled={correctnessSet} />;\n }\n\n return (\n <Provider store={this.store}>\n <GraphContainer {...rest} />\n </Provider>\n );\n }\n}\n\nexport default Root;\n"],"file":"index.js"}
@@ -11,6 +11,8 @@ var _react = _interopRequireDefault(require("react"));
11
11
 
12
12
  var _isEqual = _interopRequireDefault(require("lodash/isEqual"));
13
13
 
14
+ var _cloneDeep = _interopRequireDefault(require("lodash/cloneDeep"));
15
+
14
16
  var _point = require("../point");
15
17
 
16
18
  var _plot = require("@pie-lib/plot");
@@ -199,28 +201,31 @@ var lineToolComponent = function lineToolComponent(Component) {
199
201
  labelNode = _this$props3.labelNode,
200
202
  labelModeEnabled = _this$props3.labelModeEnabled,
201
203
  coordinatesOnHover = _this$props3.coordinatesOnHover;
202
- var mark = this.state.mark ? this.state.mark : this.props.mark; // SET DISABLED
204
+ var mark = this.state.mark ? this.state.mark : this.props.mark;
205
+ var from = (0, _cloneDeep["default"])(mark.from);
206
+ var to = (0, _cloneDeep["default"])(mark.to);
207
+ var middle = (0, _cloneDeep["default"])(mark.middle); // SET DISABLED
203
208
  // if it's a background mark, we need to force disable it
204
209
 
205
- if (mark.from && mark.isBackground) {
206
- mark.from.disabled = true;
210
+ if (from && mark.isBackground) {
211
+ from.disabled = true;
207
212
  }
208
213
 
209
- if (mark.to && mark.isBackground) {
210
- mark.to.disabled = true;
214
+ if (to && mark.isBackground) {
215
+ to.disabled = true;
211
216
  }
212
217
 
213
- if (mark.middle && mark.isBackground) {
214
- mark.middle.disabled = true;
218
+ if (middle && mark.isBackground) {
219
+ middle.disabled = true;
215
220
  }
216
221
 
217
222
  return /*#__PURE__*/_react["default"].createElement(Component, {
218
223
  disabled: mark.disabled,
219
224
  coordinatesOnHover: coordinatesOnHover,
220
225
  correctness: mark.correctness,
221
- from: mark.from,
222
- to: mark.to,
223
- middle: mark.middle,
226
+ from: from,
227
+ to: to,
228
+ middle: middle,
224
229
  graphProps: graphProps,
225
230
  onChange: this.changeMark,
226
231
  changeMarkProps: this.changeMarkProps,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/tools/shared/line/index.jsx"],"names":["lineTool","type","Component","addPoint","point","mark","root","building","from","to","lineToolComponent","props","setState","onChange","update","state","undefined","shouldNotChange","middle","graphProps","onClick","labelNode","labelModeEnabled","coordinatesOnHover","isBackground","disabled","correctness","changeMark","changeMarkProps","startDrag","stopDrag","React","types","ToolPropTypeFields","GraphPropsType","isRequired","dragOpts","bounds","domain","range","area","utils","lineToArea","anchorPoint","fromDelta","delta","add","lineBase","Comp","opts","DraggableComp","FromPoint","BasePoint","ToPoint","LineBase","draggedFrom","draggedTo","label","updated","onChangePoint","input","focus","onDragStart","onDragStop","common","angle","trig","toDegrees","fromLabelNode","toLabelNode","lineLabelNode","hasOwnProperty","ReactDOM","createPortal","r","labelChange","dragComp","clickPoint","x","y","dragFrom","dragTo","PropTypes","bool","PointType","func","string","object","styles","line","fill","stroke","color","primaryLight","strokeWidth","transition","primaryDark","arrow","secondary","disabledArrow","correct","theme","key","incorrect"],"mappings":"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","sourcesContent":["import React from 'react';\nimport isEqual from 'lodash/isEqual';\nimport { BasePoint } from '../point';\nimport { types, utils, gridDraggable, trig } from '@pie-lib/plot';\nimport PropTypes from 'prop-types';\nimport { disabled, correct, incorrect } from '../styles';\nimport ReactDOM from 'react-dom';\nimport MarkLabel from '../../../mark-label';\nimport isEmpty from 'lodash/isEmpty';\nimport { color } from '@pie-lib/render-ui';\nimport { getMiddleOfTwoPoints, equalPoints, sameAxes } from '../../../utils';\n\nexport const lineTool = (type, Component) => () => ({\n type,\n Component,\n addPoint: (point, mark) => {\n if (mark && equalPoints(mark.root, point)) {\n return mark;\n }\n\n if (!mark) {\n return {\n type,\n building: true,\n from: point\n };\n }\n\n if (equalPoints(point, mark.from)) {\n return { ...mark };\n }\n\n return { ...mark, building: false, to: point };\n }\n});\n\nexport const lineToolComponent = Component => {\n return class LineToolComponent extends React.Component {\n static propTypes = {\n ...types.ToolPropTypeFields,\n graphProps: types.GraphPropsType.isRequired\n };\n\n constructor(props) {\n super(props);\n this.state = {};\n }\n\n startDrag = () => this.setState({ mark: { ...this.props.mark } });\n\n stopDrag = () => {\n const { onChange, mark } = this.props;\n const update = { ...this.state.mark };\n\n this.setState({ mark: undefined }, () => {\n const { type } = update;\n const shouldNotChange =\n type && (type === 'parabola' || type === 'sine') && sameAxes(update.from, update.to);\n\n if (!isEqual(mark, update) && !shouldNotChange) {\n onChange(mark, update);\n }\n });\n };\n\n changeMark = ({ from, to, middle }) => {\n let mark = { ...this.state.mark, from, to };\n\n if (middle) {\n mark = { ...mark, middle };\n }\n\n this.setState({ mark });\n };\n\n changeMarkProps = ({ from, to, middle }) => {\n const { onChange, mark } = this.props;\n let update = { ...mark, ...this.state.mark };\n\n if (from) {\n update = { ...update, from };\n }\n\n if (to) {\n update = { ...update, to };\n }\n\n if (middle) {\n update = { ...update, middle };\n }\n\n if (!isEqual(mark, update)) {\n onChange(mark, update);\n }\n };\n\n render() {\n const { graphProps, onClick, labelNode, labelModeEnabled, coordinatesOnHover } = this.props;\n const mark = this.state.mark ? this.state.mark : this.props.mark;\n\n // SET DISABLED\n // if it's a background mark, we need to force disable it\n if (mark.from && mark.isBackground) {\n mark.from.disabled = true;\n }\n\n if (mark.to && mark.isBackground) {\n mark.to.disabled = true;\n }\n\n if (mark.middle && mark.isBackground) {\n mark.middle.disabled = true;\n }\n\n return (\n <Component\n disabled={mark.disabled}\n coordinatesOnHover={coordinatesOnHover}\n correctness={mark.correctness}\n from={mark.from}\n to={mark.to}\n middle={mark.middle}\n graphProps={graphProps}\n onChange={this.changeMark}\n changeMarkProps={this.changeMarkProps}\n onClick={onClick}\n onDragStart={this.startDrag}\n onDragStop={this.stopDrag}\n labelNode={labelNode}\n labelModeEnabled={labelModeEnabled}\n />\n );\n }\n };\n};\n\nconst dragOpts = () => ({\n bounds: (props, { domain, range }) => {\n const area = utils.lineToArea(props.from, props.to);\n return utils.bounds(area, domain, range);\n },\n anchorPoint: props => {\n const { from } = props;\n return from;\n },\n fromDelta: (props, delta) => {\n const { from, to } = props;\n return {\n from: utils.point(from).add(utils.point(delta)),\n to: utils.point(to).add(utils.point(delta))\n };\n }\n});\n\nexport const lineBase = (Comp, opts) => {\n const DraggableComp = gridDraggable(dragOpts())(Comp);\n\n const FromPoint = opts && opts.from ? opts.from : BasePoint;\n const ToPoint = opts && opts.to ? opts.to : BasePoint;\n\n class LineBase extends React.Component {\n static propTypes = {\n coordinatesOnHover: PropTypes.bool,\n graphProps: types.GraphPropsType,\n from: types.PointType,\n to: types.PointType,\n middle: types.PointType,\n onChange: PropTypes.func,\n onDragStart: PropTypes.func,\n onDragStop: PropTypes.func,\n onClick: PropTypes.func,\n correctness: PropTypes.string,\n disabled: PropTypes.bool,\n labelNode: PropTypes.object,\n labelModeEnabled: PropTypes.bool,\n changeMarkProps: PropTypes.func\n };\n\n onChangePoint = point => {\n const { middle, onChange } = this.props;\n const { from, to } = point;\n\n // because point.from.label and point.to.label can be different\n if (!equalPoints(from, to)) {\n if (middle) {\n point.middle = { ...middle, ...getMiddleOfTwoPoints(from, to) };\n }\n\n onChange(point);\n }\n };\n\n dragComp = ({ from: draggedFrom, to: draggedTo }) => {\n const { from, to, onChange, middle } = this.props;\n\n if (from.label) {\n draggedFrom.label = from.label;\n }\n\n if (to.label) {\n draggedTo.label = to.label;\n }\n\n const updated = { from: draggedFrom, to: draggedTo };\n\n if (middle) {\n updated.middle = { ...middle, ...getMiddleOfTwoPoints(draggedFrom, draggedTo) };\n }\n\n onChange(updated);\n };\n\n dragFrom = draggedFrom => {\n const { from, to } = this.props;\n\n if (from.label) {\n draggedFrom.label = from.label;\n }\n\n if (!equalPoints(draggedFrom, to)) {\n this.onChangePoint({ from: draggedFrom, to: to });\n }\n };\n\n dragTo = draggedTo => {\n const { from, to } = this.props;\n\n if (to.label) {\n draggedTo.label = to.label;\n }\n\n if (!equalPoints(from, draggedTo)) {\n this.onChangePoint({ from: from, to: draggedTo });\n }\n };\n\n labelChange = (point, type) => {\n const { changeMarkProps } = this.props;\n const update = { ...point };\n\n if (!point.label || isEmpty(point.label)) {\n delete update.label;\n }\n\n changeMarkProps({ [type]: update });\n };\n\n clickPoint = (point, type) => {\n const { changeMarkProps, from, to } = this.props;\n\n if (type === 'middle' && !point && from && to) {\n point = { ...point, ...getMiddleOfTwoPoints(from, to) };\n }\n\n changeMarkProps({ from, to, [type]: { label: '', ...point } });\n\n if (this.input[type]) {\n this.input[type].focus();\n }\n };\n\n // IMPORTANT, do not remove\n input = {};\n\n render() {\n const {\n coordinatesOnHover,\n graphProps,\n onDragStart,\n onDragStop,\n from,\n to,\n middle,\n disabled,\n correctness,\n onClick,\n labelNode,\n labelModeEnabled\n } = this.props;\n const common = { graphProps, onDragStart, onDragStop, disabled, correctness, onClick };\n const angle = to ? trig.toDegrees(trig.angle(from, to)) : 0;\n\n let fromLabelNode = null;\n let toLabelNode = null;\n let lineLabelNode = null;\n\n if (labelNode) {\n if (from && from.hasOwnProperty('label')) {\n fromLabelNode = ReactDOM.createPortal(\n <MarkLabel\n inputRef={r => (this.input.from = r)}\n disabled={!labelModeEnabled}\n mark={from}\n graphProps={graphProps}\n onChange={label => this.labelChange({ ...from, label }, 'from')}\n />,\n labelNode\n );\n }\n\n if (to && to.hasOwnProperty('label')) {\n toLabelNode = ReactDOM.createPortal(\n <MarkLabel\n inputRef={r => (this.input.to = r)}\n disabled={!labelModeEnabled}\n mark={to}\n graphProps={graphProps}\n onChange={label => this.labelChange({ ...to, label }, 'to')}\n />,\n labelNode\n );\n }\n\n if (middle && middle.hasOwnProperty('label')) {\n lineLabelNode = ReactDOM.createPortal(\n <MarkLabel\n inputRef={r => (this.input.middle = r)}\n disabled={!labelModeEnabled}\n mark={middle}\n graphProps={graphProps}\n onChange={label => this.labelChange({ ...middle, label }, 'middle')}\n />,\n labelNode\n );\n }\n }\n\n return (\n <g>\n {to && (\n <DraggableComp\n from={from}\n to={to}\n middle={middle}\n onDrag={this.dragComp}\n {...common}\n onClick={labelModeEnabled ? () => this.clickPoint(middle, 'middle') : common.onClick}\n />\n )}\n {lineLabelNode}\n\n <FromPoint\n x={from.x}\n y={from.y}\n labelNode={labelNode}\n coordinatesOnHover={coordinatesOnHover}\n onDrag={this.dragFrom}\n {...common}\n onClick={labelModeEnabled ? () => this.clickPoint(from, 'from') : common.onClick}\n />\n {fromLabelNode}\n\n {to && (\n <ToPoint\n x={to.x}\n y={to.y}\n angle={angle} //angle + 45}\n labelNode={labelNode}\n coordinatesOnHover={coordinatesOnHover}\n onDrag={this.dragTo}\n {...common}\n onClick={labelModeEnabled ? () => this.clickPoint(to, 'to') : common.onClick}\n />\n )}\n {toLabelNode}\n </g>\n );\n }\n }\n\n return LineBase;\n};\n\nexport const styles = {\n line: () => ({\n fill: 'transparent',\n stroke: color.primaryLight(),\n strokeWidth: 3,\n transition: 'stroke 200ms ease-in, stroke-width 200ms ease-in',\n '&:hover': {\n strokeWidth: 6,\n stroke: color.primaryDark()\n }\n }),\n arrow: () => ({\n fill: color.secondary()\n }),\n disabledArrow: () => ({\n ...disabled()\n }),\n disabled: () => ({\n ...disabled('stroke'),\n strokeWidth: 2\n }),\n correct: (theme, key) => ({\n ...correct(key)\n }),\n incorrect: (theme, key) => ({\n ...incorrect(key)\n })\n};\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../../../../src/tools/shared/line/index.jsx"],"names":["lineTool","type","Component","addPoint","point","mark","root","building","from","to","lineToolComponent","props","setState","onChange","update","state","undefined","shouldNotChange","middle","graphProps","onClick","labelNode","labelModeEnabled","coordinatesOnHover","isBackground","disabled","correctness","changeMark","changeMarkProps","startDrag","stopDrag","React","types","ToolPropTypeFields","GraphPropsType","isRequired","dragOpts","bounds","domain","range","area","utils","lineToArea","anchorPoint","fromDelta","delta","add","lineBase","Comp","opts","DraggableComp","FromPoint","BasePoint","ToPoint","LineBase","draggedFrom","draggedTo","label","updated","onChangePoint","input","focus","onDragStart","onDragStop","common","angle","trig","toDegrees","fromLabelNode","toLabelNode","lineLabelNode","hasOwnProperty","ReactDOM","createPortal","r","labelChange","dragComp","clickPoint","x","y","dragFrom","dragTo","PropTypes","bool","PointType","func","string","object","styles","line","fill","stroke","color","primaryLight","strokeWidth","transition","primaryDark","arrow","secondary","disabledArrow","correct","theme","key","incorrect"],"mappings":"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","sourcesContent":["import React from 'react';\nimport isEqual from 'lodash/isEqual';\nimport cloneDeep from 'lodash/cloneDeep';\nimport { BasePoint } from '../point';\nimport { types, utils, gridDraggable, trig } from '@pie-lib/plot';\nimport PropTypes from 'prop-types';\nimport { disabled, correct, incorrect } from '../styles';\nimport ReactDOM from 'react-dom';\nimport MarkLabel from '../../../mark-label';\nimport isEmpty from 'lodash/isEmpty';\nimport { color } from '@pie-lib/render-ui';\nimport { getMiddleOfTwoPoints, equalPoints, sameAxes } from '../../../utils';\n\nexport const lineTool = (type, Component) => () => ({\n type,\n Component,\n addPoint: (point, mark) => {\n if (mark && equalPoints(mark.root, point)) {\n return mark;\n }\n\n if (!mark) {\n return {\n type,\n building: true,\n from: point\n };\n }\n\n if (equalPoints(point, mark.from)) {\n return { ...mark };\n }\n\n return { ...mark, building: false, to: point };\n }\n});\n\nexport const lineToolComponent = Component => {\n return class LineToolComponent extends React.Component {\n static propTypes = {\n ...types.ToolPropTypeFields,\n graphProps: types.GraphPropsType.isRequired\n };\n\n constructor(props) {\n super(props);\n this.state = {};\n }\n\n startDrag = () => this.setState({ mark: { ...this.props.mark } });\n\n stopDrag = () => {\n const { onChange, mark } = this.props;\n const update = { ...this.state.mark };\n\n this.setState({ mark: undefined }, () => {\n const { type } = update;\n const shouldNotChange =\n type && (type === 'parabola' || type === 'sine') && sameAxes(update.from, update.to);\n\n if (!isEqual(mark, update) && !shouldNotChange) {\n onChange(mark, update);\n }\n });\n };\n\n changeMark = ({ from, to, middle }) => {\n let mark = { ...this.state.mark, from, to };\n\n if (middle) {\n mark = { ...mark, middle };\n }\n\n this.setState({ mark });\n };\n\n changeMarkProps = ({ from, to, middle }) => {\n const { onChange, mark } = this.props;\n let update = { ...mark, ...this.state.mark };\n\n if (from) {\n update = { ...update, from };\n }\n\n if (to) {\n update = { ...update, to };\n }\n\n if (middle) {\n update = { ...update, middle };\n }\n\n if (!isEqual(mark, update)) {\n onChange(mark, update);\n }\n };\n\n render() {\n const { graphProps, onClick, labelNode, labelModeEnabled, coordinatesOnHover } = this.props;\n const mark = this.state.mark ? this.state.mark : this.props.mark;\n\n const from = cloneDeep(mark.from);\n const to = cloneDeep(mark.to);\n const middle = cloneDeep(mark.middle);\n\n // SET DISABLED\n // if it's a background mark, we need to force disable it\n if (from && mark.isBackground) {\n from.disabled = true;\n }\n\n if (to && mark.isBackground) {\n to.disabled = true;\n }\n\n if (middle && mark.isBackground) {\n middle.disabled = true;\n }\n\n return (\n <Component\n disabled={mark.disabled}\n coordinatesOnHover={coordinatesOnHover}\n correctness={mark.correctness}\n from={from}\n to={to}\n middle={middle}\n graphProps={graphProps}\n onChange={this.changeMark}\n changeMarkProps={this.changeMarkProps}\n onClick={onClick}\n onDragStart={this.startDrag}\n onDragStop={this.stopDrag}\n labelNode={labelNode}\n labelModeEnabled={labelModeEnabled}\n />\n );\n }\n };\n};\n\nconst dragOpts = () => ({\n bounds: (props, { domain, range }) => {\n const area = utils.lineToArea(props.from, props.to);\n return utils.bounds(area, domain, range);\n },\n anchorPoint: props => {\n const { from } = props;\n return from;\n },\n fromDelta: (props, delta) => {\n const { from, to } = props;\n return {\n from: utils.point(from).add(utils.point(delta)),\n to: utils.point(to).add(utils.point(delta))\n };\n }\n});\n\nexport const lineBase = (Comp, opts) => {\n const DraggableComp = gridDraggable(dragOpts())(Comp);\n\n const FromPoint = opts && opts.from ? opts.from : BasePoint;\n const ToPoint = opts && opts.to ? opts.to : BasePoint;\n\n class LineBase extends React.Component {\n static propTypes = {\n coordinatesOnHover: PropTypes.bool,\n graphProps: types.GraphPropsType,\n from: types.PointType,\n to: types.PointType,\n middle: types.PointType,\n onChange: PropTypes.func,\n onDragStart: PropTypes.func,\n onDragStop: PropTypes.func,\n onClick: PropTypes.func,\n correctness: PropTypes.string,\n disabled: PropTypes.bool,\n labelNode: PropTypes.object,\n labelModeEnabled: PropTypes.bool,\n changeMarkProps: PropTypes.func\n };\n\n onChangePoint = point => {\n const { middle, onChange } = this.props;\n const { from, to } = point;\n\n // because point.from.label and point.to.label can be different\n if (!equalPoints(from, to)) {\n if (middle) {\n point.middle = { ...middle, ...getMiddleOfTwoPoints(from, to) };\n }\n\n onChange(point);\n }\n };\n\n dragComp = ({ from: draggedFrom, to: draggedTo }) => {\n const { from, to, onChange, middle } = this.props;\n\n if (from.label) {\n draggedFrom.label = from.label;\n }\n\n if (to.label) {\n draggedTo.label = to.label;\n }\n\n const updated = { from: draggedFrom, to: draggedTo };\n\n if (middle) {\n updated.middle = { ...middle, ...getMiddleOfTwoPoints(draggedFrom, draggedTo) };\n }\n\n onChange(updated);\n };\n\n dragFrom = draggedFrom => {\n const { from, to } = this.props;\n\n if (from.label) {\n draggedFrom.label = from.label;\n }\n\n if (!equalPoints(draggedFrom, to)) {\n this.onChangePoint({ from: draggedFrom, to: to });\n }\n };\n\n dragTo = draggedTo => {\n const { from, to } = this.props;\n\n if (to.label) {\n draggedTo.label = to.label;\n }\n\n if (!equalPoints(from, draggedTo)) {\n this.onChangePoint({ from: from, to: draggedTo });\n }\n };\n\n labelChange = (point, type) => {\n const { changeMarkProps } = this.props;\n const update = { ...point };\n\n if (!point.label || isEmpty(point.label)) {\n delete update.label;\n }\n\n changeMarkProps({ [type]: update });\n };\n\n clickPoint = (point, type) => {\n const { changeMarkProps, from, to } = this.props;\n\n if (type === 'middle' && !point && from && to) {\n point = { ...point, ...getMiddleOfTwoPoints(from, to) };\n }\n\n changeMarkProps({ from, to, [type]: { label: '', ...point } });\n\n if (this.input[type]) {\n this.input[type].focus();\n }\n };\n\n // IMPORTANT, do not remove\n input = {};\n\n render() {\n const {\n coordinatesOnHover,\n graphProps,\n onDragStart,\n onDragStop,\n from,\n to,\n middle,\n disabled,\n correctness,\n onClick,\n labelNode,\n labelModeEnabled\n } = this.props;\n const common = { graphProps, onDragStart, onDragStop, disabled, correctness, onClick };\n const angle = to ? trig.toDegrees(trig.angle(from, to)) : 0;\n\n let fromLabelNode = null;\n let toLabelNode = null;\n let lineLabelNode = null;\n\n if (labelNode) {\n if (from && from.hasOwnProperty('label')) {\n fromLabelNode = ReactDOM.createPortal(\n <MarkLabel\n inputRef={r => (this.input.from = r)}\n disabled={!labelModeEnabled}\n mark={from}\n graphProps={graphProps}\n onChange={label => this.labelChange({ ...from, label }, 'from')}\n />,\n labelNode\n );\n }\n\n if (to && to.hasOwnProperty('label')) {\n toLabelNode = ReactDOM.createPortal(\n <MarkLabel\n inputRef={r => (this.input.to = r)}\n disabled={!labelModeEnabled}\n mark={to}\n graphProps={graphProps}\n onChange={label => this.labelChange({ ...to, label }, 'to')}\n />,\n labelNode\n );\n }\n\n if (middle && middle.hasOwnProperty('label')) {\n lineLabelNode = ReactDOM.createPortal(\n <MarkLabel\n inputRef={r => (this.input.middle = r)}\n disabled={!labelModeEnabled}\n mark={middle}\n graphProps={graphProps}\n onChange={label => this.labelChange({ ...middle, label }, 'middle')}\n />,\n labelNode\n );\n }\n }\n\n return (\n <g>\n {to && (\n <DraggableComp\n from={from}\n to={to}\n middle={middle}\n onDrag={this.dragComp}\n {...common}\n onClick={labelModeEnabled ? () => this.clickPoint(middle, 'middle') : common.onClick}\n />\n )}\n {lineLabelNode}\n\n <FromPoint\n x={from.x}\n y={from.y}\n labelNode={labelNode}\n coordinatesOnHover={coordinatesOnHover}\n onDrag={this.dragFrom}\n {...common}\n onClick={labelModeEnabled ? () => this.clickPoint(from, 'from') : common.onClick}\n />\n {fromLabelNode}\n\n {to && (\n <ToPoint\n x={to.x}\n y={to.y}\n angle={angle} //angle + 45}\n labelNode={labelNode}\n coordinatesOnHover={coordinatesOnHover}\n onDrag={this.dragTo}\n {...common}\n onClick={labelModeEnabled ? () => this.clickPoint(to, 'to') : common.onClick}\n />\n )}\n {toLabelNode}\n </g>\n );\n }\n }\n\n return LineBase;\n};\n\nexport const styles = {\n line: () => ({\n fill: 'transparent',\n stroke: color.primaryLight(),\n strokeWidth: 3,\n transition: 'stroke 200ms ease-in, stroke-width 200ms ease-in',\n '&:hover': {\n strokeWidth: 6,\n stroke: color.primaryDark()\n }\n }),\n arrow: () => ({\n fill: color.secondary()\n }),\n disabledArrow: () => ({\n ...disabled()\n }),\n disabled: () => ({\n ...disabled('stroke'),\n strokeWidth: 2\n }),\n correct: (theme, key) => ({\n ...correct(key)\n }),\n incorrect: (theme, key) => ({\n ...incorrect(key)\n })\n};\n"],"file":"index.js"}
package/lib/undo-redo.js CHANGED
@@ -104,9 +104,9 @@ var styles = function styles(theme) {
104
104
  button: {
105
105
  color: _renderUi.color.text(),
106
106
  backgroundColor: _renderUi.color.background(),
107
+ marginBottom: theme.spacing.unit / 2,
107
108
  '&:not(:last-of-type)': {
108
- marginRight: theme.spacing.unit / 2,
109
- marginBottom: theme.spacing.unit / 2
109
+ marginRight: theme.spacing.unit / 2
110
110
  },
111
111
  '&:hover': {
112
112
  backgroundColor: _renderUi.color.primary()
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/undo-redo.jsx"],"names":["UndoRedo","props","classes","className","onUndo","onRedo","onReset","root","button","React","Component","PropTypes","object","string","func","isRequired","styles","theme","color","text","backgroundColor","background","marginRight","spacing","unit","marginBottom","primary"],"mappings":";;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;IAEaA,Q;;;;;;;;;;;;;WASX,kBAAS;AACP,wBAAwD,KAAKC,KAA7D;AAAA,UAAQC,OAAR,eAAQA,OAAR;AAAA,UAAiBC,SAAjB,eAAiBA,SAAjB;AAAA,UAA4BC,MAA5B,eAA4BA,MAA5B;AAAA,UAAoCC,MAApC,eAAoCA,MAApC;AAAA,UAA4CC,OAA5C,eAA4CA,OAA5C;AACA,0BACE;AAAK,QAAA,SAAS,EAAE,4BAAWH,SAAX;AAAhB,sBACE,gCAAC,kBAAD;AAAQ,QAAA,OAAO,EAAE;AAAEI,UAAAA,IAAI,EAAEL,OAAO,CAACM;AAAhB,SAAjB;AAA2C,QAAA,OAAO,EAAEJ;AAApD,gBADF,eAIE,gCAAC,kBAAD;AAAQ,QAAA,OAAO,EAAE;AAAEG,UAAAA,IAAI,EAAEL,OAAO,CAACM;AAAhB,SAAjB;AAA2C,QAAA,OAAO,EAAEH;AAApD,gBAJF,eAOE,gCAAC,kBAAD;AAAQ,QAAA,OAAO,EAAE;AAAEE,UAAAA,IAAI,EAAEL,OAAO,CAACM;AAAhB,SAAjB;AAA2C,QAAA,OAAO,EAAEF;AAApD,iBAPF,CADF;AAaD;;;;EAxB2BG,kBAAMC,S;;;;gBAAvBV,Q,eACQ;AACjBE,EAAAA,OAAO,EAAES,sBAAUC,MADF;AAEjBT,EAAAA,SAAS,EAAEQ,sBAAUE,MAFJ;AAGjBT,EAAAA,MAAM,EAAEO,sBAAUG,IAAV,CAAeC,UAHN;AAIjBV,EAAAA,MAAM,EAAEM,sBAAUG,IAAV,CAAeC,UAJN;AAKjBT,EAAAA,OAAO,EAAEK,sBAAUG,IAAV,CAAeC;AALP,C;;gBADRf,Q,kBAQW,E;;AAmBxB,IAAMgB,MAAM,GAAG,SAATA,MAAS,CAAAC,KAAK;AAAA,SAAK;AACvBT,IAAAA,MAAM,EAAE;AACNU,MAAAA,KAAK,EAAEA,gBAAMC,IAAN,EADD;AAENC,MAAAA,eAAe,EAAEF,gBAAMG,UAAN,EAFX;AAGN,8BAAwB;AACtBC,QAAAA,WAAW,EAAEL,KAAK,CAACM,OAAN,CAAcC,IAAd,GAAqB,CADZ;AAEtBC,QAAAA,YAAY,EAAER,KAAK,CAACM,OAAN,CAAcC,IAAd,GAAqB;AAFb,OAHlB;AAON,iBAAW;AACTJ,QAAAA,eAAe,EAAEF,gBAAMQ,OAAN;AADR;AAPL;AADe,GAAL;AAAA,CAApB;;eAce,sBAAWV,MAAX,EAAmBhB,QAAnB,C","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport Button from '@material-ui/core/Button';\nimport { withStyles } from '@material-ui/core';\nimport { color } from '@pie-lib/render-ui';\n\nexport class UndoRedo extends React.Component {\n static propTypes = {\n classes: PropTypes.object,\n className: PropTypes.string,\n onUndo: PropTypes.func.isRequired,\n onRedo: PropTypes.func.isRequired,\n onReset: PropTypes.func.isRequired\n };\n static defaultProps = {};\n render() {\n const { classes, className, onUndo, onRedo, onReset } = this.props;\n return (\n <div className={classNames(className)}>\n <Button classes={{ root: classes.button }} onClick={onUndo}>\n Undo\n </Button>\n <Button classes={{ root: classes.button }} onClick={onRedo}>\n Redo\n </Button>\n <Button classes={{ root: classes.button }} onClick={onReset}>\n Reset\n </Button>\n </div>\n );\n }\n}\n\nconst styles = theme => ({\n button: {\n color: color.text(),\n backgroundColor: color.background(),\n '&:not(:last-of-type)': {\n marginRight: theme.spacing.unit / 2,\n marginBottom: theme.spacing.unit / 2\n },\n '&:hover': {\n backgroundColor: color.primary()\n }\n }\n});\n\nexport default withStyles(styles)(UndoRedo);\n"],"file":"undo-redo.js"}
1
+ {"version":3,"sources":["../src/undo-redo.jsx"],"names":["UndoRedo","props","classes","className","onUndo","onRedo","onReset","root","button","React","Component","PropTypes","object","string","func","isRequired","styles","theme","color","text","backgroundColor","background","marginBottom","spacing","unit","marginRight","primary"],"mappings":";;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;IAEaA,Q;;;;;;;;;;;;;WASX,kBAAS;AACP,wBAAwD,KAAKC,KAA7D;AAAA,UAAQC,OAAR,eAAQA,OAAR;AAAA,UAAiBC,SAAjB,eAAiBA,SAAjB;AAAA,UAA4BC,MAA5B,eAA4BA,MAA5B;AAAA,UAAoCC,MAApC,eAAoCA,MAApC;AAAA,UAA4CC,OAA5C,eAA4CA,OAA5C;AACA,0BACE;AAAK,QAAA,SAAS,EAAE,4BAAWH,SAAX;AAAhB,sBACE,gCAAC,kBAAD;AAAQ,QAAA,OAAO,EAAE;AAAEI,UAAAA,IAAI,EAAEL,OAAO,CAACM;AAAhB,SAAjB;AAA2C,QAAA,OAAO,EAAEJ;AAApD,gBADF,eAIE,gCAAC,kBAAD;AAAQ,QAAA,OAAO,EAAE;AAAEG,UAAAA,IAAI,EAAEL,OAAO,CAACM;AAAhB,SAAjB;AAA2C,QAAA,OAAO,EAAEH;AAApD,gBAJF,eAOE,gCAAC,kBAAD;AAAQ,QAAA,OAAO,EAAE;AAAEE,UAAAA,IAAI,EAAEL,OAAO,CAACM;AAAhB,SAAjB;AAA2C,QAAA,OAAO,EAAEF;AAApD,iBAPF,CADF;AAaD;;;;EAxB2BG,kBAAMC,S;;;;gBAAvBV,Q,eACQ;AACjBE,EAAAA,OAAO,EAAES,sBAAUC,MADF;AAEjBT,EAAAA,SAAS,EAAEQ,sBAAUE,MAFJ;AAGjBT,EAAAA,MAAM,EAAEO,sBAAUG,IAAV,CAAeC,UAHN;AAIjBV,EAAAA,MAAM,EAAEM,sBAAUG,IAAV,CAAeC,UAJN;AAKjBT,EAAAA,OAAO,EAAEK,sBAAUG,IAAV,CAAeC;AALP,C;;gBADRf,Q,kBAQW,E;;AAmBxB,IAAMgB,MAAM,GAAG,SAATA,MAAS,CAAAC,KAAK;AAAA,SAAK;AACvBT,IAAAA,MAAM,EAAE;AACNU,MAAAA,KAAK,EAAEA,gBAAMC,IAAN,EADD;AAENC,MAAAA,eAAe,EAAEF,gBAAMG,UAAN,EAFX;AAGNC,MAAAA,YAAY,EAAEL,KAAK,CAACM,OAAN,CAAcC,IAAd,GAAqB,CAH7B;AAIN,8BAAwB;AACtBC,QAAAA,WAAW,EAAER,KAAK,CAACM,OAAN,CAAcC,IAAd,GAAqB;AADZ,OAJlB;AAON,iBAAW;AACTJ,QAAAA,eAAe,EAAEF,gBAAMQ,OAAN;AADR;AAPL;AADe,GAAL;AAAA,CAApB;;eAce,sBAAWV,MAAX,EAAmBhB,QAAnB,C","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport Button from '@material-ui/core/Button';\nimport { withStyles } from '@material-ui/core';\nimport { color } from '@pie-lib/render-ui';\n\nexport class UndoRedo extends React.Component {\n static propTypes = {\n classes: PropTypes.object,\n className: PropTypes.string,\n onUndo: PropTypes.func.isRequired,\n onRedo: PropTypes.func.isRequired,\n onReset: PropTypes.func.isRequired\n };\n static defaultProps = {};\n render() {\n const { classes, className, onUndo, onRedo, onReset } = this.props;\n return (\n <div className={classNames(className)}>\n <Button classes={{ root: classes.button }} onClick={onUndo}>\n Undo\n </Button>\n <Button classes={{ root: classes.button }} onClick={onRedo}>\n Redo\n </Button>\n <Button classes={{ root: classes.button }} onClick={onReset}>\n Reset\n </Button>\n </div>\n );\n }\n}\n\nconst styles = theme => ({\n button: {\n color: color.text(),\n backgroundColor: color.background(),\n marginBottom: theme.spacing.unit / 2,\n '&:not(:last-of-type)': {\n marginRight: theme.spacing.unit / 2\n },\n '&:hover': {\n backgroundColor: color.primary()\n }\n }\n});\n\nexport default withStyles(styles)(UndoRedo);\n"],"file":"undo-redo.js"}
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "publishConfig": {
4
4
  "access": "public"
5
5
  },
6
- "version": "2.4.15",
6
+ "version": "2.5.0",
7
7
  "description": "Graphing components",
8
8
  "keywords": [
9
9
  "react",
@@ -20,7 +20,7 @@
20
20
  "@material-ui/core": "^3.8.3",
21
21
  "@pie-lib/graphing-utils": "^1.1.20",
22
22
  "@pie-lib/plot": "^2.1.10",
23
- "@pie-lib/render-ui": "^4.12.5",
23
+ "@pie-lib/render-ui": "^4.12.6",
24
24
  "@vx/axis": "^0.0.189",
25
25
  "@vx/clip-path": "^0.0.189",
26
26
  "@vx/event": "^0.0.189",
@@ -43,6 +43,6 @@
43
43
  "peerDependencies": {
44
44
  "react": "^16.8.1"
45
45
  },
46
- "gitHead": "1cab5bfdd528e04c5d3acbcceda82c4034bd7a4a",
46
+ "gitHead": "087c2d35cb14814526bbaa0cf6744c02ae4b1c5e",
47
47
  "scripts": {}
48
48
  }
@@ -20,10 +20,7 @@ const mapDispatchToProps = dispatch => ({
20
20
  onReset: () => dispatch(changeMarks([]))
21
21
  });
22
22
 
23
- export const GraphContainer = connect(
24
- mapStateToProps,
25
- mapDispatchToProps
26
- )(GraphWithControls);
23
+ export const GraphContainer = connect(mapStateToProps, mapDispatchToProps)(GraphWithControls);
27
24
 
28
25
  /**
29
26
  * The graph component entry point with undo/redo
@@ -44,6 +41,15 @@ class Root extends React.Component {
44
41
  this.store.subscribe(this.onStoreChange);
45
42
  }
46
43
 
44
+ componentDidUpdate() {
45
+ const { marks } = this.props;
46
+ const storeState = this.store.getState();
47
+
48
+ if (!isEqual(storeState.marks.present, marks)) {
49
+ this.store.dispatch(changeMarks(marks));
50
+ }
51
+ }
52
+
47
53
  onStoreChange = () => {
48
54
  const { marks, onChangeMarks } = this.props;
49
55
  const storeState = this.store.getState();
@@ -1,5 +1,6 @@
1
1
  import React from 'react';
2
2
  import isEqual from 'lodash/isEqual';
3
+ import cloneDeep from 'lodash/cloneDeep';
3
4
  import { BasePoint } from '../point';
4
5
  import { types, utils, gridDraggable, trig } from '@pie-lib/plot';
5
6
  import PropTypes from 'prop-types';
@@ -98,18 +99,22 @@ export const lineToolComponent = Component => {
98
99
  const { graphProps, onClick, labelNode, labelModeEnabled, coordinatesOnHover } = this.props;
99
100
  const mark = this.state.mark ? this.state.mark : this.props.mark;
100
101
 
102
+ const from = cloneDeep(mark.from);
103
+ const to = cloneDeep(mark.to);
104
+ const middle = cloneDeep(mark.middle);
105
+
101
106
  // SET DISABLED
102
107
  // if it's a background mark, we need to force disable it
103
- if (mark.from && mark.isBackground) {
104
- mark.from.disabled = true;
108
+ if (from && mark.isBackground) {
109
+ from.disabled = true;
105
110
  }
106
111
 
107
- if (mark.to && mark.isBackground) {
108
- mark.to.disabled = true;
112
+ if (to && mark.isBackground) {
113
+ to.disabled = true;
109
114
  }
110
115
 
111
- if (mark.middle && mark.isBackground) {
112
- mark.middle.disabled = true;
116
+ if (middle && mark.isBackground) {
117
+ middle.disabled = true;
113
118
  }
114
119
 
115
120
  return (
@@ -117,9 +122,9 @@ export const lineToolComponent = Component => {
117
122
  disabled={mark.disabled}
118
123
  coordinatesOnHover={coordinatesOnHover}
119
124
  correctness={mark.correctness}
120
- from={mark.from}
121
- to={mark.to}
122
- middle={mark.middle}
125
+ from={from}
126
+ to={to}
127
+ middle={middle}
123
128
  graphProps={graphProps}
124
129
  onChange={this.changeMark}
125
130
  changeMarkProps={this.changeMarkProps}
package/src/undo-redo.jsx CHANGED
@@ -36,9 +36,9 @@ const styles = theme => ({
36
36
  button: {
37
37
  color: color.text(),
38
38
  backgroundColor: color.background(),
39
+ marginBottom: theme.spacing.unit / 2,
39
40
  '&:not(:last-of-type)': {
40
- marginRight: theme.spacing.unit / 2,
41
- marginBottom: theme.spacing.unit / 2
41
+ marginRight: theme.spacing.unit / 2
42
42
  },
43
43
  '&:hover': {
44
44
  backgroundColor: color.primary()