CoreSystem.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. import RoutingSystem from './RoutingSystem.js';
  2. import ViewSystem, { View } from './ViewSystem.js';
  3. import ModuleSystem from './ModuleSystem.js';
  4. import Modules from '../../modules';
  5. import EventSystem from './EventSystem';
  6. export default class CoreSystem {
  7. constructor() {
  8. // TODO -- Make correct Initialization
  9. this.Routing = new RoutingSystem();
  10. this.ModuleSystem = new ModuleSystem();
  11. this.EventSystem = new EventSystem();
  12. this.ViewSystem = new ViewSystem(this.ModuleSystem, this.EventSystem);
  13. this.__loadModules(Modules);
  14. }
  15. getCurrentView() {
  16. return this.ViewSystem.getView(this.Routing.getCurrentView());
  17. }
  18. setHome( route , View ) {
  19. this.Routing.setHome(route);
  20. return this;
  21. }
  22. goto( route ) {
  23. return this.Routing.goTo(route);
  24. }
  25. addPage( route , View, ViewID = Math.random()) {
  26. this.Routing.addRoute(route,route);
  27. this.Routing.setView(route,ViewID);
  28. this.ViewSystem.addView(ViewID, View);
  29. return this;
  30. }
  31. goBack() {
  32. }
  33. __loadModules() {
  34. this.ModuleSystem.load(Modules);
  35. }
  36. addModule(mod, namespace) {
  37. this.ModuleSystem.loadModule(mod.name, mod, namespace);
  38. return this;
  39. }
  40. render() {
  41. let ViewID = this.Routing.getCurrentView();
  42. return this.ViewSystem.render(ViewID);
  43. }
  44. import(data) {
  45. // Perform dependency injection here!
  46. // must Convert Data to Structures before importing
  47. // Import Systems Seperately from leaf to root
  48. let {
  49. Routing,
  50. Views
  51. } = data;
  52. try {
  53. this.Routing.import(Routing);
  54. this.ViewSystem.import(Views);
  55. } catch(e) {
  56. throw new Error("CoreSystem cannot import data : ", e);
  57. }
  58. console.log("Successful import");
  59. }
  60. export() {
  61. let RS = this.Routing.export();
  62. let VS = this.ViewSystem.export();
  63. return {
  64. Routing: RS,
  65. Views: VS
  66. };
  67. }
  68. ray(data) {
  69. let {
  70. event
  71. } = data;
  72. let targets = event.path.map(item => findReactElement(item));
  73. let resViewNode = null;
  74. for (var i in targets) {
  75. if(targets[i] !== null){
  76. if(targets[i].props && targets[i].props.ID) {
  77. resViewNode = targets[i].props.ID;
  78. break;
  79. }
  80. }
  81. }
  82. let ViewID = this.Routing.getCurrentView();
  83. return this.ViewSystem.getNode(ViewID, resViewNode);
  84. }
  85. }
  86. const findReactElement = (node) => {
  87. for (var key in node) {
  88. if (key.startsWith("__reactInternalInstance$")) {
  89. return (node[key]._debugOwner && node[key]._debugOwner.stateNode) || (node[key].stateNode);
  90. }
  91. }
  92. return null;
  93. };