index.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import React from 'react';
  2. import Editor from '@components/Base/Editor';
  3. import { upperFirst } from '@utils';
  4. import withGGEditorContext from '@common/context/GGEditorContext/withGGEditorContext';
  5. class Register extends React.Component {
  6. static create = function (type) {
  7. class TypedRegister extends Register {
  8. constructor(props) {
  9. super(props, type);
  10. }
  11. }
  12. return withGGEditorContext(TypedRegister);
  13. }
  14. constructor(props, type) {
  15. super(props);
  16. this.type = type;
  17. this.bindEvent();
  18. }
  19. bindEvent() {
  20. const { type } = this;
  21. const { onBeforeAddPage } = this.props;
  22. onBeforeAddPage(({ className }) => {
  23. let host = Editor[className];
  24. let keys = ['name', 'config', 'extend'];
  25. if (type === 'command') {
  26. host = Editor;
  27. }
  28. if (type === 'behaviour') {
  29. keys = ['name', 'behaviour', 'dependences'];
  30. }
  31. const args = keys.map(key => this.props[key]);
  32. host[`register${upperFirst(type)}`](...args);
  33. });
  34. }
  35. render() {
  36. return null;
  37. }
  38. }
  39. export const RegisterNode = Register.create('node');
  40. export const RegisterEdge = Register.create('edge');
  41. export const RegisterGroup = Register.create('group');
  42. export const RegisterGuide = Register.create('guide');
  43. export const RegisterCommand = Register.create('command');
  44. export const RegisterBehaviour = Register.create('behaviour');