UNPKG

@rest-api/react-models

Version:

[![npm version](https://img.shields.io/npm/v/@rest-api/react-models)](https://www.npmjs.com/package/@rest-api/react-models) [![codecov](https://codecov.io/gh/hector7/rest-api-react-models/branch/master/graph/badge.svg)](https://codecov.io/gh/hector7/rest-

92 lines (91 loc) 2.52 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.State = exports.ModelState = void 0; const INIT_REQUEST = { didInvalidate: true, error: null, isFetching: false, lastUpdated: null, result: null, initialized: false }; class ModelState { constructor(r) { this.observers = []; this._state = { searchs: {}, ids: {} }; this.model = r.model; } get modelName() { return this.model.name; } get state() { return this._state; } addKeyModel(key) { if (!this._state.ids.hasOwnProperty(key)) this._state.ids[key] = {}; } attach(observer) { this.observers.push(observer); } detach(observer) { this.observers = this.observers.splice(this.observers.indexOf(observer), 1); } notify() { this.observers.forEach(o => o.update(this)); } getRequest(url) { const request = this._state.searchs[url]; if (request === undefined) { return INIT_REQUEST; } return request; } getRequestById(key, id) { const request = this._state.ids[key][id]; if (request === undefined) { return INIT_REQUEST; } return request; } /** * updateGet for an internal use */ updateGet(url, request) { const modelBranchSearchs = this._state.searchs; this._state.searchs = Object.assign(Object.assign({}, modelBranchSearchs), { [url]: Object.assign(Object.assign({}, INIT_REQUEST), request) }); } /** * updateGetById for an internal use */ updateGetById(key, id, request) { const modelBranchIds = this._state.ids[key]; this._state.ids[key] = Object.assign(Object.assign({}, modelBranchIds), { [id]: Object.assign(Object.assign({}, INIT_REQUEST), request) }); } } exports.ModelState = ModelState; class State { constructor() { this.observers = []; this._state = {}; } //TODO attach to all modelstates. get state() { return this._state; } attach(observer) { this.observers.push(observer); } detach(observer) { this.observers = this.observers.splice(this.observers.indexOf(observer), 1); } notify() { this.observers.forEach(o => o.update(this)); } update(subject) { this.state[subject.modelName] = subject.state; this.notify(); } } exports.State = State; exports.default = new State();