{"version":3,"file":"state-t.mjs","sources":["../../../projects/state-t/src/lib/state-t.service.ts","../../../projects/state-t/src/public-api.ts","../../../projects/state-t/src/state-t.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\ninterface StateComponent<T> {\r\n  state: T;\r\n}\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class StateTService <T,H=T > {\r\n  private componentStates = new Map<string, StateComponent<T>>();\r\n  private stateSubjects = new Map<string, BehaviorSubject<T>>(); \r\n\r\n  constructor() { }\r\n\r\n  /**\r\n   * setState(componentId : string, state : T) : void\r\n   * @param componentId \r\n   * @param state \r\n   */\r\n  setState(componentId: string, state: T): void {\r\n    this.componentStates.set(componentId, { state });\r\n    if (!this.stateSubjects.has(componentId)) {\r\n      this.stateSubjects.set(componentId, new BehaviorSubject<T>(state));\r\n    }\r\n    this.stateSubjects.get(componentId)?.next(state);\r\n  }\r\n  /**\r\n   * getStateOtherType(componentId: string, typeFilter?: new (...args: []) => H)\r\n   * @param componentId \r\n   * @param typeFilter \r\n   * @returns \r\n   */\r\n  getStateOtherType(componentId: string, typeFilter?: new (...args: []) => H): H | undefined {\r\n    const state = this.getState(componentId) as H;\r\n    if (state && typeFilter && !(state instanceof typeFilter)) {\r\n      return undefined;  \r\n    }\r\n    return state;\r\n  }\r\n\r\n  /**\r\n   * getState(componentId: string)\r\n   * @param componentId \r\n   * @returns \r\n   */\r\n  getState(componentId: string): T | undefined {\r\n    const stateWithMode = this.componentStates.get(componentId);\r\n    return stateWithMode?.state;\r\n  }\r\n\r\n  /**\r\n   * getStateObservable(componentId: string)\r\n   * @param componentId \r\n   * @returns \r\n   */\r\n  getStateObservable(componentId: string): Observable<T> | undefined {\r\n    return this.stateSubjects.get(componentId)?.asObservable() ;\r\n  }\r\n  /**\r\n   * getAllStates()\r\n   * @returns \r\n   */\r\n  getAllStates(): Map<string, StateComponent<T>> {\r\n    return this.componentStates;\r\n  }\r\n  /**\r\n   * delete all state\r\n   */\r\n  clearAllStates(): void {\r\n    this.componentStates.clear();\r\n  }\r\n  \r\n\r\n}\r\n","/*\r\n * Public API Surface of state-t\r\n */\r\n\r\nexport * from './lib/state-t.service';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;MAQa,aAAa,CAAA;AAIxB,IAAA,WAAA,GAAA;AAHQ,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,GAAG,EAA6B,CAAC;AACvD,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,GAAG,EAA8B,CAAC;KAE7C;AAEjB;;;;AAIG;IACH,QAAQ,CAAC,WAAmB,EAAE,KAAQ,EAAA;QACpC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QACjD,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE;AACxC,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,eAAe,CAAI,KAAK,CAAC,CAAC,CAAC;SACpE;AACD,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;KAClD;AACD;;;;;AAKG;IACH,iBAAiB,CAAC,WAAmB,EAAE,UAAmC,EAAA;QACxE,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAM,CAAC;QAC9C,IAAI,KAAK,IAAI,UAAU,IAAI,EAAE,KAAK,YAAY,UAAU,CAAC,EAAE;AACzD,YAAA,OAAO,SAAS,CAAC;SAClB;AACD,QAAA,OAAO,KAAK,CAAC;KACd;AAED;;;;AAIG;AACH,IAAA,QAAQ,CAAC,WAAmB,EAAA;QAC1B,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC5D,OAAO,aAAa,EAAE,KAAK,CAAC;KAC7B;AAED;;;;AAIG;AACH,IAAA,kBAAkB,CAAC,WAAmB,EAAA;QACpC,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,YAAY,EAAE,CAAE;KAC7D;AACD;;;AAGG;IACH,YAAY,GAAA;QACV,OAAO,IAAI,CAAC,eAAe,CAAC;KAC7B;AACD;;AAEG;IACH,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;KAC9B;+GA9DU,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAb,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cAFZ,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAEP,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;ACPD;;AAEG;;ACFH;;AAEG;;;;"}