Generalize store quering functions

This commit is contained in:
Zaid Abdulla committed 2018-12-26 00:22:07 -08:00
1 parent 93c6a4dfcd
commit 9b827c5f5e
26 files changed
+1362 -321

No files matched your search

+45 -19
View File
@@ -3,41 +3,67 @@
import m from "mithril";
import layout from "./layout";
import * as store from "./store";
import * as overviewPage from "./overview-page";
import * as devicesPage from "./devices-page";
import * as devicePage from "./device-page";
import * as errorPage from "./error-page";
let state;
let lastRenderTimestamp = 0;
let pageVisitTimestamp = 0;
let fulfillTimeout = null;
function fulfill() {
clearTimeout(fulfillTimeout);
fulfillTimeout = setTimeout(() => {
store.fulfill(lastRenderTimestamp, pageVisitTimestamp).then(updated => {
if (updated) m.redraw();
});
}, 100);
}
function pagify(pageName, page) {
const component = {
render: () => {
if (state && state.error) return m(errorPage.component, state);
else return m(layout, { page: pageName }, m(page.component, state));
lastRenderTimestamp = Date.now();
let c;
if (state && state.error) c = m(errorPage.component, state);
else c = m(layout, { page: pageName }, m(page.component, state));
fulfill();
return c;
}
};
if (page.init)
component.onmatch = args => {
return new Promise(resolve => {
page
.init(args)
.then(st => {
if (!st) return m.route.set("/");
state = st;
resolve();
})
.catch(err => {
state = { error: err.message };
resolve();
});
});
};
component.onmatch = args => {
pageVisitTimestamp = Date.now();
if (!page.init) {
fulfill();
return;
}
return new Promise(resolve => {
page
.init(args)
.then(st => {
if (!st) return m.route.set("/");
state = st;
resolve();
fulfill();
})
.catch(err => {
state = { error: err.message };
resolve();
});
});
};
return component;
}
m.route(document.body, "/overview", {
"/overview": pagify("overview", overviewPage),
"/devices": pagify("devices", devicesPage)
"/devices": pagify("devices", devicesPage),
"/devices/:id": pagify("devices", devicePage)
});