123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 |
- import RoutingSystem from './RoutingSystem.js';
- import ViewSystem, { View } from './ViewSystem.js';
- import ModuleSystem from './ModuleSystem.js';
- import Modules from '../../modules';
- import EventSystem from './EventSystem';
- import ActionSystem from './ActionSystem';
- import InjectionSystem from './InjectionSystem';
- import * as Font from 'expo-font';
- export default class CoreSystem {
- constructor(dev = false) {
- // TODO -- Make correct Initialization
- InjectionSystem.depend("Core", this);
- this.Routing = new RoutingSystem();
- InjectionSystem.depend("Routing", this.Routing);
- this.ModuleSystem = new ModuleSystem();
- InjectionSystem.depend("Modules", this.ModuleSystem);
- this.ActionSystem = new ActionSystem(this);
- InjectionSystem.depend("Actions", this.ActionSystem);
- this.ActionSystem.onUpdate(() => this.forceUpdate());
- this.ViewSystem = new ViewSystem(this);
- InjectionSystem.depend("Views", this.ViewSystem);
- this.loadFonts()
- this.__loadModules(Modules);
- this._devMode = dev;
- }
- onUpdate(fn) {this._onUpdate = fn;}
- forceUpdate() {
- this._onUpdate && this._onUpdate();
- }
- fresh() {
- this.ActionSystem = new ActionSystem(this);
- this.ActionSystem.onUpdate(() => this.forceUpdate());
- this.Routing = new RoutingSystem();
- this.ModuleSystem = new ModuleSystem();
-
- this.ViewSystem = new ViewSystem(this);
- let HomeView = new View();
- this.addPage('Home', HomeView, 'VSHome').setHome('Home');
- this.__loadModules(Modules);
- }
- loadFonts(){
- Font.loadAsync({
- 'black': require('../assets/fonts/SFCompactDisplay-Black_0.otf'),
- 'bold': require('../assets/fonts/SFCompactDisplay-Bold_0.otf'),
- 'heavy': require('../assets/fonts/SFCompactDisplay-Heavy_0.otf'),
- 'light': require('../assets/fonts/SFCompactDisplay-Light_0.otf'),
- 'medium': require('../assets/fonts/SFCompactDisplay-Medium_0.otf'),
- 'regular': require('../assets/fonts/SFCompactDisplay-Regular_0.otf'),
- 'semibold': require('../assets/fonts/SFCompactDisplay-Semibold_0.otf'),
- 'thin': require('../assets/fonts/SFCompactDisplay-Thin_0.otf'),
- 'ultralight': require('../assets/fonts/SFCompactDisplay-Ultralight_0.otf'),
- 'roboto-black':require('../assets/fonts/Roboto-Black.ttf'),
- 'roboto-black-italic':require('../assets/fonts/Roboto-BlackItalic.ttf'),
- 'roboto-bold':require('../assets/fonts/Roboto-Bold.ttf'),
- 'roboto-bold-italic':require('../assets/fonts/Roboto-BoldItalic.ttf'),
- 'roboto-light':require('../assets/fonts/Roboto-Light.ttf'),
- 'roboto-light-italic':require('../assets/fonts/Roboto-LightItalic.ttf'),
- 'roboto-medium':require('../assets/fonts/Roboto-Medium.ttf'),
- 'roboto-medium-italic':require('../assets/fonts/Roboto-MediumItalic.ttf'),
- 'roboto-regular':require('../assets/fonts/Roboto-Regular.ttf'),
- 'roboto-regular-italic':require('../assets/fonts/Roboto-RegularItalic.ttf'),
- 'roboto-thin':require('../assets/fonts/Roboto-Thin.ttf'),
- 'roboto-thin-italic':require('../assets/fonts/Roboto-ThinItalic.ttf')
- });
- }
- getCurrentView() {
- return this.ViewSystem.getView(this.Routing.getCurrentView());
- }
- setHome( route , View ) {
- this.Routing.setHome(route);
- return this;
- }
- goto( route ) {
- let res = this.Routing.goTo(route);
- this.forceUpdate();
- return res;
- }
- addPage( route , View, ViewID = Math.random()) {
- this.Routing.addRoute(route,route);
- this.Routing.setView(route,ViewID);
- this.ViewSystem.addView(ViewID, View);
- return this;
- }
- removePage(route) {
- this.Routing.removeRoute(route);
- return this;
- }
- goBack() {
- }
- __loadModules() {
- this.ModuleSystem.load(Modules);
- }
- addModule(mod, namespace) {
- this.ModuleSystem.loadModule(mod.name, mod, namespace);
- return this;
- }
- render() {
- let ViewID = this.Routing.getCurrentView();
- return this.ViewSystem.render(ViewID);
- }
- import(data) {
- // Perform dependency injection here!
- // must Convert Data to Structures before importing
- // Import Systems Seperately from leaf to root
- let {
- Routing,
- Views
- } = data;
- try {
- this.Routing.import(Routing);
- this.ViewSystem.import(Views);
- } catch(e) {
- throw new Error("CoreSystem cannot import data : ", e);
- }
- console.log("Successful import");
- }
- export() {
- let RS = this.Routing.export();
- let VS = this.ViewSystem.export();
- return {
- Routing: RS,
- Views: VS
- };
- }
- ray(data) {
- let {
- event
- } = data;
- let targets = event.path.map(item => findReactElement(item));
- let resViewNode = null;
- for (var i in targets) {
- if(targets[i] && targets[i].ID) {
- resViewNode = targets[i].ID;
- break;
- }
- }
- let ViewID = this.Routing.getCurrentView();
- return this.ViewSystem.getNode(ViewID, resViewNode);
- }
- }
- const findReactElement = (node) => {
- for (var key in node) {
- if (key.startsWith("__reactInternalInstance$")) {
- return (node[key]._debugOwner && node[key]._debugOwner.stateNode.props) || (node[key].return.memoizedProps);
- }
- }
- return null;
- };
|