John Cowen 6589cbbd0d
ui: Move to Workspaced Structure (#8994)
* ui: Add the most basic workspace root in /ui

* We already have a LICENSE file in the repository root

* Change directory path in build scripts ui-v2 -> ui

* Make yarn install flags configurable from elsewhere

* Minimal workspace root makefile

* Call the new docker specific target

* Update yarn in the docker build image

* Reconfigure the netlify target and move to the higher makefile

* Move ui-v2 -> ui/packages/consul-ui

* Change repo root to refleect new folder structure

* Temporarily don't hoist consul-api-double

* Fixup CI configuration

* Fixup lint errors

* Fixup Netlify target
2020-10-21 15:23:16 +01:00

49 lines
1.4 KiB
JavaScript

export default function(EventTarget, P = Promise) {
const handler = function(e) {
// e is undefined on the opening call
if (typeof e === 'undefined' || e.key === this.configuration.key) {
if (this.readyState === 1) {
const res = this.source(this.configuration);
P.resolve(res).then(data => {
this.configuration.cursor++;
this._currentEvent = { type: 'message', data: data };
this.dispatchEvent({ type: 'message', data: data });
});
}
}
};
return class extends EventTarget {
constructor(cb, configuration) {
super(...arguments);
this.readyState = 2;
this.target = configuration.target || window;
this.name = 'storage';
this.source = cb;
this.handler = handler.bind(this);
this.configuration = configuration;
this.configuration.cursor = 1;
this.open();
}
dispatchEvent() {
if (this.readyState === 1) {
return super.dispatchEvent(...arguments);
}
}
close() {
this.target.removeEventListener(this.name, this.handler);
this.readyState = 2;
}
getCurrentEvent() {
return this._currentEvent;
}
open() {
const state = this.readyState;
this.readyState = 1;
if (state !== 1) {
this.target.addEventListener(this.name, this.handler);
this.handler();
}
}
};
}