| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- import React from 'react';
- import { pick, merge } from '@utils';
- import {
- GRAPH_MOUSE_EVENTS,
- GRAPH_OTHER_EVENTS,
- PAGE_EVENTS,
- GRAPH_MOUSE_REACT_EVENTS,
- GRAPH_OTHER_REACT_EVENTS,
- PAGE_REACT_EVENTS,
- } from '@common/constants';
- class Page extends React.Component {
- page;
- get pageId() {
- return '';
- }
- config = {};
- componentDidMount() {
- this.init();
- this.bindEvent();
- this.forceUpdate();
- }
- shouldComponentUpdate(props) {
- const { data: newData } = props;
- const { data: oldData } = this.props;
- const { mode: newMode } = props.graph || {};
- const { mode: oldMode } = this.props.graph || {};
- if (newMode !== oldMode) {
- this.page.changeMode(newMode);
- }
- if (newData !== oldData) {
- // Remove the arrow after the connection point of the compensation type
- newData.edges.forEach((item) => {
- if (item.type === 'Compensation') {
- item.style = {
- ...item.style,
- endArrow: false,
- };
- }
- });
- this.page.read(newData);
- return true;
- }
- if (props.className !== this.props.className) return true;
- return false;
- }
- get graph() {
- return this.page.getGraph();
- }
- initPage() { }
- readData() {
- const { data } = this.config;
- if (data) {
- this.page.read(data);
- }
- }
- addListener = (target, eventName, handler) => {
- if (typeof handler === 'function') target.on(eventName, handler);
- };
- init() {
- merge(this.config, this.props, {
- graph: {
- container: this.pageId,
- },
- });
- this.initPage();
- this.readData();
- }
- bindEvent() {
- const { addListener } = this;
- GRAPH_MOUSE_EVENTS.forEach((event) => {
- const eventName = GRAPH_MOUSE_REACT_EVENTS[event];
- addListener(this.graph, `${event}`, this.props[`on${eventName}`]);
- addListener(this.graph, `node:${event}`, this.props[`onNode${eventName}`]);
- addListener(this.graph, `edge:${event}`, this.props[`onEdge${eventName}`]);
- addListener(this.graph, `group:${event}`, this.props[`onGroup${eventName}`]);
- addListener(this.graph, `guide:${event}`, this.props[`onGuide${eventName}`]);
- addListener(this.graph, `anchor:${event}`, this.props[`onAnchor${eventName}`]);
- });
- GRAPH_OTHER_EVENTS.forEach((event) => {
- addListener(this.graph, [event], this.props[GRAPH_OTHER_REACT_EVENTS[event]]);
- });
- PAGE_EVENTS.forEach((event) => {
- addListener(this.page, [event], this.props[PAGE_REACT_EVENTS[event]]);
- });
- }
- render() {
- const { page, pageId } = this;
- const { children } = this.props;
- return (
- <div id={pageId} {...pick(this.props, ['style', 'className'])}>
- {page ? children : null}
- </div>
- );
- }
- }
- export default Page;
|