@bloc-js/react-bloc
Version:
React components for implementing the BLoC pattern.
35 lines (34 loc) • 887 B
JavaScript
export class BlocRegistry {
constructor(initialState = {}) {
this.initialState = initialState;
}
blocs = {};
initialState;
getState() {
return Object.keys(this.blocs).reduce((o, id) => ({
...o,
[id]: this.blocs[id].value,
}), {});
}
register(id, factory, args) {
if (this.blocs[id]) {
return this.blocs[id];
}
const state = this.initialState[id];
const bloc = factory(this, state, ...args);
this.blocs[id] = bloc;
return bloc;
}
complete(id) {
if (!this.blocs[id])
return;
this.blocs[id].complete();
delete this.blocs[id];
}
}
export function blocGetter(id, factory) {
return [
(registry, ...args) => registry.register(id, factory, args),
registry => registry.complete(id),
];
}