'use strict'; const unhandledRejection = require("unhandled-rejection"); unhandledRejection().on("unhandledRejection", (error) => { throw error; }); const reactHotLoader = require("react-hot-loader"); reactHotLoader.setConfig({ pureSFC: true }); const Promise = require("bluebird"); const documentReadyPromise = require("document-ready-promise"); const React = require("react"); const ReactDOM = require("react-dom"); const createReactClass = require("create-react-class"); const immutable = require("immutable"); const defaultValue = require("default-value"); const WindowManager = require("./components/window-manager"); const ViewManager = require("./components/view-manager"); const NotificationArea = require("./components/notification-area"); const createWindowStore = require("./stores/windows"); const createNotificationStore = require("./stores/notifications"); const router = require("./router"); // const Form = require("./components/view-manager/form"); /* { id: 1, title: "Foo", width: 400, height: 300, initialX: 20, initialY: 20, contents: }, { id: 2, title: "Bar", width: 500, height: 350, initialX: 200, initialY: 80, contents: } */ /* NOTE: This wrapper exists due to pureSFC use: https://github.com/gaearon/react-hot-loader/issues/1088#issuecomment-434912466 */ let AppWrapper = reactHotLoader.hot(module)(createReactClass({ displayName: "AppWrapper", render: function () { return ; } })); let App = createReactClass({ displayName: "App", getInitialState: function () { return { // windows: immutable.List([{ // id: 1, // title: "Foo", // width: 400, // height: 300, // initialX: 20, // initialY: 20, // contents: // }]), windows: createWindowStore({ onUpdated: () => { this.forceUpdate(); } }), notifications: createNotificationStore({ onUpdated: () => { this.forceUpdate(); } }) }; }, onAction: function (action) { if (action.type === "open") { this.state.windows.add({ title: "New", initialWidth: defaultValue(action.options.width, 400), initialHeight: defaultValue(action.options.height, 300), initialX: defaultValue(action.options.x, 20), initialY: defaultValue(action.options.y, 100), resizable: defaultValue(action.options.resizable, true), contents: }); } else if (action.type === "notify") { this.state.notifications.add({ title: action.options.title, message: action.message, type: action.options.type, timeout: defaultValue(action.options.timeout, 5000), controls: action.options.controls }); } else { console.warn(`Unhandled action of type: ${action.type}`); } }, render: function () { return (
); } }); Promise.try(() => { return documentReadyPromise(); }).then(() => { ReactDOM.render(, document.getElementById("app")); });