@ddd-qc/lit-happ 0.29.2 → 0.29.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"DnaElement.js","sourceRoot":"","sources":["../src/DnaElement.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,UAAU,EAAiB,MAAM,KAAK,CAAC;AAC/C,OAAO,EAAC,QAAQ,EAAE,KAAK,EAAC,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAC,eAAe,EAAE,OAAO,EAAE,aAAa,EAAC,MAAM,cAAc,CAAC;AAErE,OAAO,EAAqB,SAAS,EAAC,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAC,WAAW,EAAC,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAC,SAAS,EAAC,MAAM,aAAa,CAAC;AAKtC,MAAM,OAAO,UAAwC,SAAQ,SAAS,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IAG3F,YAAY,YAA2B;QACrC,KAAK,EAAE,CAAC;QACR,IAAI,YAAY,EAAE;YAChB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;SAClC;IACH,CAAC;IAmBS,UAAU,CAAC,eAAwB,KAAK;QAEhD,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;YAC3B,OAAO,CAAC,KAAK,CAAC,0DAA0D,EAAE,IAAI,CAAC,YAAY,CAAC,CAAA;YAC5F,OAAO;SACR;QAED,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,SAAS,EAAE;YACnC,OAAO;SACR;QACD,MAAM,WAAW,GAAG,aAAa,CAAM,MAAM,GAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,4BAA4B,WAAW,GAAG,CAAC,CAAA;QACvD,IAAI,CAAC,SAAS,GAAG,IAAI,eAAe,CAClC,IAAI,EACJ,WAAW,EACX,KAAK,EAAE,KAAU,EAAE,QAAqB,EAAiB,EAAE;YACzD,OAAO,CAAC,GAAG,CAAC,oCAAoC,WAAW,GAAG,CAAC,CAAA;YAC/D,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YACxC,IAAI,IAAI,CAAC,IAAI,EAAE;gBACb,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;aAC7B;YACD,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;YAClB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QAC3C,CAAC,EACD,KAAK,CACN,CAAC;IAEJ,CAAC;IAOS,KAAK,CAAC,UAAU,CAAC,OAAY,EAAE,OAAa;IAEtD,CAAC;IAIQ,YAAY,CAAC,iBAAuC;QAC3D,IAAI,iBAAiB,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE;YAC9C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC;SACrC;QACD,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YACd,IAAI,CAAC,UAAU,EAAE,CAAC;SACnB;QACD,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;IAIkB,UAAU,CAAC,iBAAuC;QACnE,IAAI,iBAAiB,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE;YAC9C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;SACvB;IACH,CAAC;CACF;AAzEoB;IAAlB,KAAK,EAAE;wCAAsB;AAI9B;IAFC,OAAO,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,EAAC,CAAC;IACjD,QAAQ,CAAC,EAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAC,CAAC;qDAClB;AAGzB;IADC,QAAQ,CAAC,EAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAC,CAAC;+CAC3D","sourcesContent":["import {LitElement, PropertyValues} from \"lit\";\nimport {property, state} from \"lit/decorators.js\";\nimport {ContextConsumer, consume, createContext} from \"@lit/context\";\nimport {DnaViewModel} from \"./DnaViewModel\";\nimport {BaseRoleName, Cell, CellMixin} from \"@ddd-qc/cell-proxy\";\nimport {cellContext} from \"./elements/cell-context\";\nimport {RoleMixin} from \"./roleMixin\";\n\n/**\n * A LitElement that is bound to a specific DnaViewModel, e.g. a View for the ViewModel\n */\nexport class DnaElement<P, DVM extends DnaViewModel> extends CellMixin(RoleMixin(LitElement)) {\n\n /** if BaseRoleName is not provided, subclass must call requestDvm() in its Ctor */\n constructor(baseRoleName?: BaseRoleName) {\n super();\n if (baseRoleName) {\n this.baseRoleName = baseRoleName;\n }\n }\n\n /** Provided by Context depending on BaseRoleName */\n @state() protected _dvm!: DVM;\n\n @consume({ context: cellContext, subscribe: true})\n @property({type: Object, attribute: false})\n _cell_via_context!: Cell;\n\n @property({type: Object, attribute: false, hasChanged: (_v, _old) => true})\n perspective!: P;\n\n // @ts-ignore\n private _consumer?;\n\n\n /** -- Methods -- */\n\n /** */\n protected requestDvm(canRerequest: boolean = false) {\n /** Consume Context based on given dnaHash */\n if (!this._cell_via_context) {\n console.error(\"No Cell info found via context in a DnaElement for role:\", this.baseRoleName)\n return;\n }\n /* DVM already requested */\n if (!canRerequest && this._consumer) {\n return;\n }\n const contextType = createContext<DVM>('dvm/'+ this.cell.name);\n console.log(`\\t\\t Requesting context \"${contextType}\"`)\n this._consumer = new ContextConsumer(\n this,\n contextType,\n async (value: DVM, _dispose?: () => void): Promise<void> => {\n console.log(`\\t\\t Received value for context \"${contextType}\"`)\n await this.dvmUpdated(value, this._dvm);\n if (this._dvm) {\n this._dvm.unsubscribe(this);\n }\n this._dvm = value;\n this._dvm.subscribe(this, 'perspective');\n },\n false, // true will call twice at init\n );\n //console.log({consumer})\n }\n\n\n /**\n * To be overriden by subclasses\n * Example: Have a subclass unsubscribe to oldDvm's zvms and subscribe to the new ones\n */\n protected async dvmUpdated(_newDvm: DVM, _oldDvm?: DVM): Promise<void> {\n //console.log(`\\t\\t Default dvmUpdated() called`)\n }\n\n\n /** */\n override shouldUpdate(changedProperties: PropertyValues<this>) {\n if (changedProperties.has(\"_cell_via_context\")) {\n this._cell = this._cell_via_context;\n }\n if (!this._dvm) {\n this.requestDvm();\n }\n return !!this._dvm;\n }\n\n\n /** */\n protected override willUpdate(changedProperties: PropertyValues<this>) {\n if (changedProperties.has(\"_cell_via_context\")) {\n this.requestDvm(true);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"DnaElement.js","sourceRoot":"","sources":["../src/DnaElement.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,UAAU,EAAiB,MAAM,KAAK,CAAC;AAC/C,OAAO,EAAC,QAAQ,EAAE,KAAK,EAAC,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAC,eAAe,EAAE,OAAO,EAAE,aAAa,EAAC,MAAM,cAAc,CAAC;AAErE,OAAO,EAAqB,SAAS,EAAC,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAC,WAAW,EAAC,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAC,SAAS,EAAC,MAAM,aAAa,CAAC;AAKtC,MAAM,OAAO,UAAwC,SAAQ,SAAS,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IAG3F,YAAY,YAA2B;QACrC,KAAK,EAAE,CAAC;QACR,IAAI,YAAY,EAAE;YAChB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;SAClC;IACH,CAAC;IAmBS,UAAU,CAAC,eAAwB,KAAK;QAEhD,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;YAC3B,OAAO,CAAC,KAAK,CAAC,0DAA0D,EAAE,IAAI,CAAC,YAAY,CAAC,CAAA;YAC5F,OAAO;SACR;QAED,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,SAAS,EAAE;YACnC,OAAO;SACR;QACD,MAAM,WAAW,GAAG,aAAa,CAAM,MAAM,GAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,4BAA4B,WAAW,GAAG,CAAC,CAAA;QACvD,IAAI,CAAC,SAAS,GAAG,IAAI,eAAe,CAClC,IAAI,EACJ,WAAW,EACX,KAAK,EAAE,KAAU,EAAE,QAAqB,EAAiB,EAAE;YACzD,OAAO,CAAC,GAAG,CAAC,oCAAoC,WAAW,GAAG,CAAC,CAAA;YAC/D,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YACxC,IAAI,IAAI,CAAC,IAAI,EAAE;gBACb,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;aAC7B;YACD,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;YAClB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QAC3C,CAAC,EACD,KAAK,CACN,CAAC;IAEJ,CAAC;IAOS,KAAK,CAAC,UAAU,CAAC,OAAY,EAAE,OAAa;IAEtD,CAAC;IAIQ,YAAY,CAAC,iBAAuC;QAC3D,IAAI,iBAAiB,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE;YAC9C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC;SACrC;QACD,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YACd,IAAI,CAAC,UAAU,EAAE,CAAC;SACnB;QACD,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;IAIkB,UAAU,CAAC,iBAAuC;QACnE,IAAI,iBAAiB,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE;YAC9C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;SACvB;IACH,CAAC;CACF;AAzEoB;IAAlB,KAAK,EAAE;wCAAsB;AAI9B;IAFC,OAAO,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,EAAC,CAAC;IACjD,QAAQ,CAAC,EAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAC,CAAC;qDAClB;AAGzB;IADC,QAAQ,CAAC,EAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAC,CAAC;+CAC3D","sourcesContent":["import {LitElement, PropertyValues} from \"lit\";\r\nimport {property, state} from \"lit/decorators.js\";\r\nimport {ContextConsumer, consume, createContext} from \"@lit/context\";\r\nimport {DnaViewModel} from \"./DnaViewModel\";\r\nimport {BaseRoleName, Cell, CellMixin} from \"@ddd-qc/cell-proxy\";\r\nimport {cellContext} from \"./elements/cell-context\";\r\nimport {RoleMixin} from \"./roleMixin\";\r\n\r\n/**\r\n * A LitElement that is bound to a specific DnaViewModel, e.g. a View for the ViewModel\r\n */\r\nexport class DnaElement<P, DVM extends DnaViewModel> extends CellMixin(RoleMixin(LitElement)) {\r\n\r\n /** if BaseRoleName is not provided, subclass must call requestDvm() in its Ctor */\r\n constructor(baseRoleName?: BaseRoleName) {\r\n super();\r\n if (baseRoleName) {\r\n this.baseRoleName = baseRoleName;\r\n }\r\n }\r\n\r\n /** Provided by Context depending on BaseRoleName */\r\n @state() protected _dvm!: DVM;\r\n\r\n @consume({ context: cellContext, subscribe: true})\r\n @property({type: Object, attribute: false})\r\n _cell_via_context!: Cell;\r\n\r\n @property({type: Object, attribute: false, hasChanged: (_v, _old) => true})\r\n perspective!: P;\r\n\r\n // @ts-ignore\r\n private _consumer?;\r\n\r\n\r\n /** -- Methods -- */\r\n\r\n /** */\r\n protected requestDvm(canRerequest: boolean = false) {\r\n /** Consume Context based on given dnaHash */\r\n if (!this._cell_via_context) {\r\n console.error(\"No Cell info found via context in a DnaElement for role:\", this.baseRoleName)\r\n return;\r\n }\r\n /* DVM already requested */\r\n if (!canRerequest && this._consumer) {\r\n return;\r\n }\r\n const contextType = createContext<DVM>('dvm/'+ this.cell.name);\r\n console.log(`\\t\\t Requesting context \"${contextType}\"`)\r\n this._consumer = new ContextConsumer(\r\n this,\r\n contextType,\r\n async (value: DVM, _dispose?: () => void): Promise<void> => {\r\n console.log(`\\t\\t Received value for context \"${contextType}\"`)\r\n await this.dvmUpdated(value, this._dvm);\r\n if (this._dvm) {\r\n this._dvm.unsubscribe(this);\r\n }\r\n this._dvm = value;\r\n this._dvm.subscribe(this, 'perspective');\r\n },\r\n false, // true will call twice at init\r\n );\r\n //console.log({consumer})\r\n }\r\n\r\n\r\n /**\r\n * To be overriden by subclasses\r\n * Example: Have a subclass unsubscribe to oldDvm's zvms and subscribe to the new ones\r\n */\r\n protected async dvmUpdated(_newDvm: DVM, _oldDvm?: DVM): Promise<void> {\r\n //console.log(`\\t\\t Default dvmUpdated() called`)\r\n }\r\n\r\n\r\n /** */\r\n override shouldUpdate(changedProperties: PropertyValues<this>) {\r\n if (changedProperties.has(\"_cell_via_context\")) {\r\n this._cell = this._cell_via_context;\r\n }\r\n if (!this._dvm) {\r\n this.requestDvm();\r\n }\r\n return !!this._dvm;\r\n }\r\n\r\n\r\n /** */\r\n protected override willUpdate(changedProperties: PropertyValues<this>) {\r\n if (changedProperties.has(\"_cell_via_context\")) {\r\n this.requestDvm(true);\r\n }\r\n }\r\n}\r\n"]}
@@ -0,0 +1,24 @@
1
+ import { LitElement, PropertyValues } from "lit";
2
+ import { DnaViewModel } from "./DnaViewModel";
3
+ import { BaseRoleName, Cell, DnaId, DnaIdMap } from "@ddd-qc/cell-proxy";
4
+ declare const DnaMultiElement_base: (abstract new (...args: any[]) => {
5
+ _cells?: Cell[];
6
+ readonly cells: Cell[];
7
+ readonly cell: Cell;
8
+ }) & ((abstract new (...args: any[]) => {
9
+ baseRoleName: string;
10
+ }) & {
11
+ readonly DEFAULT_BASE_ROLE_NAME: string;
12
+ }) & typeof LitElement;
13
+ export declare class DnaMultiElement<DVM extends DnaViewModel> extends DnaMultiElement_base {
14
+ constructor(baseRoleName?: BaseRoleName);
15
+ protected _dvms: DnaIdMap<DVM>;
16
+ _cells_via_context: Cell[];
17
+ private _consumers;
18
+ protected requestDvm(canRerequest?: boolean): void;
19
+ protected dvmUpdated(_cellAddress: DnaId, _newDvm: DVM, _oldDvm?: DVM): Promise<void>;
20
+ shouldUpdate(changedProperties: PropertyValues<this>): boolean;
21
+ protected willUpdate(changedProperties: PropertyValues<this>): void;
22
+ }
23
+ export {};
24
+ //# sourceMappingURL=DnaMultiElement.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DnaMultiElement.d.ts","sourceRoot":"","sources":["../src/DnaMultiElement.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAE,cAAc,EAAC,MAAM,KAAK,CAAC;AAG/C,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAC,YAAY,EAAE,IAAI,EAAc,KAAK,EAAE,QAAQ,EAAC,MAAM,oBAAoB,CAAC;;;;;;;;;;AAOnF,qBAAa,eAAe,CAAQ,GAAG,SAAS,YAAY,CAAE,SAAQ,oBAAiC;gBAGzF,YAAY,CAAC,EAAE,YAAY;IAQ9B,SAAS,CAAC,KAAK,EAAG,QAAQ,CAAC,GAAG,CAAC,CAAuB;IAI/D,kBAAkB,EAAG,IAAI,EAAE,CAAC;IAK5B,OAAO,CAAC,UAAU,CAAiC;IAMnD,SAAS,CAAC,UAAU,CAAC,YAAY,GAAE,OAAe;cAsClC,UAAU,CAAC,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAMlF,YAAY,CAAC,iBAAiB,EAAE,cAAc,CAAC,IAAI,CAAC;cAY1C,UAAU,CAAC,iBAAiB,EAAE,cAAc,CAAC,IAAI,CAAC;CAKtE"}
@@ -0,0 +1,65 @@
1
+ import { __decorate } from "tslib";
2
+ import { LitElement } from "lit";
3
+ import { property, state } from "lit/decorators.js";
4
+ import { ContextConsumer, consume, createContext } from "@lit/context";
5
+ import { CellsMixin, DnaIdMap } from "@ddd-qc/cell-proxy";
6
+ import { RoleMixin } from "./roleMixin";
7
+ import { cellMultiContext } from "./elements/cell-multi-context";
8
+ export class DnaMultiElement extends CellsMixin(RoleMixin(LitElement)) {
9
+ constructor(baseRoleName) {
10
+ super();
11
+ this._dvms = new DnaIdMap();
12
+ this._consumers = new DnaIdMap();
13
+ if (baseRoleName) {
14
+ this.baseRoleName = baseRoleName;
15
+ }
16
+ }
17
+ requestDvm(canRerequest = false) {
18
+ if (!this._cells_via_context || this._cells_via_context.length == 0) {
19
+ console.error("No Cells found via context in a DnaElement for role:", this.baseRoleName);
20
+ return;
21
+ }
22
+ if (!canRerequest && this._consumers.size > 0) {
23
+ return;
24
+ }
25
+ for (const cell of this._cells.values()) {
26
+ const contextType = createContext('dvm/' + cell.name);
27
+ console.log(`\t\t Requesting context "${contextType}"`);
28
+ const consumer = new ContextConsumer(this, contextType, async (newDvm, _dispose) => {
29
+ console.log(`\t\t Received value for context "${contextType}"`);
30
+ const oldDvm = this._dvms.get(cell.address.dnaId);
31
+ await this.dvmUpdated(cell.address.dnaId, newDvm, oldDvm);
32
+ if (oldDvm) {
33
+ oldDvm.unsubscribe(this);
34
+ }
35
+ this._dvms.set(cell.address.dnaId, newDvm);
36
+ newDvm.subscribe(this, '');
37
+ }, false);
38
+ this._consumers.set(cell.address.dnaId, consumer);
39
+ }
40
+ }
41
+ async dvmUpdated(_cellAddress, _newDvm, _oldDvm) {
42
+ }
43
+ shouldUpdate(changedProperties) {
44
+ if (changedProperties.has("_cells_via_context")) {
45
+ this._cells = this._cells_via_context;
46
+ }
47
+ if (!this._dvms || this._dvms.size == 0) {
48
+ this.requestDvm();
49
+ }
50
+ return (!!this._dvms && this._dvms.size > 0);
51
+ }
52
+ willUpdate(changedProperties) {
53
+ if (changedProperties.has("_cells_via_context")) {
54
+ this.requestDvm(true);
55
+ }
56
+ }
57
+ }
58
+ __decorate([
59
+ state()
60
+ ], DnaMultiElement.prototype, "_dvms", void 0);
61
+ __decorate([
62
+ consume({ context: cellMultiContext, subscribe: true }),
63
+ property({ attribute: false })
64
+ ], DnaMultiElement.prototype, "_cells_via_context", void 0);
65
+ //# sourceMappingURL=DnaMultiElement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DnaMultiElement.js","sourceRoot":"","sources":["../src/DnaMultiElement.ts"],"names":[],"mappings":"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","sourcesContent":["import {LitElement, PropertyValues} from \"lit\";\nimport {property, state} from \"lit/decorators.js\";\nimport {ContextConsumer, consume, createContext} from \"@lit/context\";\nimport {DnaViewModel} from \"./DnaViewModel\";\nimport {BaseRoleName, Cell, CellsMixin, DnaId, DnaIdMap} from \"@ddd-qc/cell-proxy\";\nimport {RoleMixin} from \"./roleMixin\";\nimport {cellMultiContext} from \"./elements/cell-multi-context\";\n\n/**\n * A LitElement that is bound to a specific DnaViewModel, e.g. a View for the ViewModel\n */\nexport class DnaMultiElement</*P,*/ DVM extends DnaViewModel> extends CellsMixin(RoleMixin(LitElement)) {\n\n /** if BaseRoleName is not provided, subclass must call requestDvm() in its Ctor */\n constructor(baseRoleName?: BaseRoleName) {\n super();\n if (baseRoleName) {\n this.baseRoleName = baseRoleName;\n }\n }\n\n /** Provided by Context depending on BaseRoleName */\n @state() protected _dvms: DnaIdMap<DVM> = new DnaIdMap<DVM>();\n\n @consume({ context: cellMultiContext, subscribe: true})\n @property({attribute: false})\n _cells_via_context!: Cell[];\n\n // @property({type: Object, attribute: false, hasChanged: (_v, _old) => true})\n // perspectives!: P[];\n\n private _consumers: DnaIdMap<any> = new DnaIdMap();\n\n\n /** -- Methods -- */\n\n /** */\n protected requestDvm(canRerequest: boolean = false) {\n /** Consume Context based on given dnaHash */\n if (!this._cells_via_context || this._cells_via_context.length == 0) {\n console.error(\"No Cells found via context in a DnaElement for role:\", this.baseRoleName)\n return;\n }\n /* DVM already requested */\n if (!canRerequest && this._consumers.size > 0) {\n return;\n }\n for (const cell of this._cells!.values()) {\n const contextType = createContext<DVM>('dvm/' + cell.name);\n console.log(`\\t\\t Requesting context \"${contextType}\"`)\n const consumer = new ContextConsumer(\n this,\n contextType,\n async (newDvm: DVM, _dispose?: () => void): Promise<void> => {\n console.log(`\\t\\t Received value for context \"${contextType}\"`)\n const oldDvm = this._dvms.get(cell.address.dnaId);\n await this.dvmUpdated(cell.address.dnaId, newDvm, oldDvm);\n if (oldDvm) {\n oldDvm.unsubscribe(this);\n }\n this._dvms.set(cell.address.dnaId, newDvm);\n newDvm.subscribe(this, '');\n },\n false, // true will call twice at init\n );\n this._consumers.set(cell.address.dnaId, consumer);\n //console.log({consumer})\n }\n }\n\n\n /**\n * To be overriden by subclasses\n * Example: Have a subclass unsubscribe to oldDvm's zvms and subscribe to the new ones\n */\n protected async dvmUpdated(_cellAddress: DnaId, _newDvm: DVM, _oldDvm?: DVM): Promise<void> {\n //console.log(`\\t\\t Default dvmUpdated() called`)\n }\n\n\n /** */\n override shouldUpdate(changedProperties: PropertyValues<this>) {\n if (changedProperties.has(\"_cells_via_context\")) {\n this._cells = this._cells_via_context;\n }\n if (!this._dvms || this._dvms.size == 0) {\n this.requestDvm();\n }\n return (!!this._dvms && this._dvms.size > 0);\n }\n\n\n /** */\n protected override willUpdate(changedProperties: PropertyValues<this>) {\n if (changedProperties.has(\"_cells_via_context\")) {\n this.requestDvm(true);\n }\n }\n}\n"]}
@@ -6,6 +6,7 @@ import { AppWebsocket, InstalledAppId } from "@holochain/client";
6
6
  export declare class HappMultiElement extends LitElement {
7
7
  static HVM_DEF: HvmDef;
8
8
  hvms: [AppProxy, HappViewModel][];
9
+ get count(): number;
9
10
  protected constructor(wtf: [number | AppWebsocket, InstalledAppId | undefined][], adminUrl?: URL, defaultTimeout?: number);
10
11
  hvmConstructed(): Promise<void>;
11
12
  perspectiveInitializedOffline(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"HappMultiElement.d.ts","sourceRoot":"","sources":["../src/HappMultiElement.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,KAAK,CAAC;AAE/B,OAAO,EAEL,QAAQ,EAIT,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAc,MAAM,EAAC,MAAM,eAAe,CAAC;AAClD,OAAO,EACL,YAAY,EAEZ,cAAc,EAEf,MAAM,mBAAmB,CAAC;AAU3B,qBAAa,gBAAiB,SAAQ,UAAU;IAG9C,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC;IAGd,IAAI,EAAG,CAAC,QAAQ,EAAE,aAAa,CAAC,EAAE,CAAC;IAI5C,SAAS,aAAa,GAAG,EAAE,CAAC,MAAM,GAAG,YAAY,EAAE,cAAc,GAAG,SAAS,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,GAAG,EAAE,cAAc,CAAC,EAAE,MAAM;IAMnH,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAE/B,6BAA6B,IAAI,OAAO,CAAC,IAAI,CAAC;IAE9C,4BAA4B,IAAI,OAAO,CAAC,IAAI,CAAC;IAG1C,YAAY;cAKL,aAAa,CAAC,GAAG,EAAE,CAAC,MAAM,GAAG,YAAY,EAAE,cAAc,GAAG,SAAS,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,GAAG,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuB3I,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;CAmJ7C"}
1
+ {"version":3,"file":"HappMultiElement.d.ts","sourceRoot":"","sources":["../src/HappMultiElement.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,KAAK,CAAC;AAE/B,OAAO,EAEL,QAAQ,EAIT,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAc,MAAM,EAAC,MAAM,eAAe,CAAC;AAClD,OAAO,EACL,YAAY,EAEZ,cAAc,EAEf,MAAM,mBAAmB,CAAC;AAU3B,qBAAa,gBAAiB,SAAQ,UAAU;IAG9C,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC;IAGd,IAAI,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC,EAAE,CAAK;IAE/C,IAAI,KAAK,IAAI,MAAM,CAA0B;IAG7C,SAAS,aAAa,GAAG,EAAE,CAAC,MAAM,GAAG,YAAY,EAAE,cAAc,GAAG,SAAS,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,GAAG,EAAE,cAAc,CAAC,EAAE,MAAM;IAMnH,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAE/B,6BAA6B,IAAI,OAAO,CAAC,IAAI,CAAC;IAE9C,4BAA4B,IAAI,OAAO,CAAC,IAAI,CAAC;IAG1C,YAAY;cAKL,aAAa,CAAC,GAAG,EAAE,CAAC,MAAM,GAAG,YAAY,EAAE,cAAc,GAAG,SAAS,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,GAAG,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuB3I,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;CAmJ7C"}
@@ -4,15 +4,17 @@ import { state } from "lit/decorators.js";
4
4
  import { ConductorAppProxy, } from "@ddd-qc/cell-proxy";
5
5
  import { HappViewModel } from "./HappViewModel";
6
6
  export class HappMultiElement extends LitElement {
7
+ get count() { return this.hvms.length; }
7
8
  constructor(wtf, adminUrl, defaultTimeout) {
8
9
  super();
10
+ this.hvms = [];
9
11
  this.constructHvms(wtf, adminUrl, defaultTimeout);
10
12
  }
11
13
  async hvmConstructed() { }
12
14
  async perspectiveInitializedOffline() { }
13
15
  async perspectiveInitializedOnline() { }
14
16
  shouldUpdate() {
15
- return !!this.hvms;
17
+ return this.hvms.length > 0;
16
18
  }
17
19
  async constructHvms(wtf, adminUrl, defaultTimeout) {
18
20
  const hvmDef = this.constructor.HVM_DEF;
@@ -1 +1 @@
1
- {"version":3,"file":"HappMultiElement.js","sourceRoot":"","sources":["../src/HappMultiElement.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,KAAK,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAGL,iBAAiB,GAGlB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAiB9C,MAAM,OAAO,gBAAiB,SAAQ,UAAU;IAU9C,YAAsB,GAA0D,EAAE,QAAc,EAAE,cAAuB;QACvH,KAAK,EAAE,CAAC;QACI,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;IAChE,CAAC;IAGD,KAAK,CAAC,cAAc,KAAmB,CAAC;IAExC,KAAK,CAAC,6BAA6B,KAAmB,CAAC;IAEvD,KAAK,CAAC,4BAA4B,KAAmB,CAAC;IAG7C,YAAY;QACnB,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;IAGS,KAAK,CAAC,aAAa,CAAC,GAA0D,EAAE,QAAc,EAAE,cAAuB;QAC/H,MAAM,MAAM,GAAI,IAAI,CAAC,WAAuC,CAAC,OAAO,CAAC;QACrE,IAAI,CAAC,MAAM,EAAE;YACX,MAAM,KAAK,CAAC,8DAA8D,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;SACrG;QACD,KAAK,MAAM,CAAC,cAAc,EAAE,KAAK,CAAC,IAAI,GAAG,EAAE;YAEzC,IAAI,KAAK,EAAE;gBACT,MAAM,CAAC,EAAE,GAAG,KAAK,CAAC;aACnB;YACD,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,GAAG,CAAC,cAAc,EAAE,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;YAClG,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC5D,MAAM,GAAG,CAAC,qBAAqB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAElD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;YAEhC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;YAC5B,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAC;SACpC;IACH,CAAC;IAID,KAAK,CAAC,qBAAqB;QACzB,KAAK,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE;YACrC,MAAM,GAAG,CAAC,4BAA4B,EAAE,CAAC;SAC1C;QACD,MAAM,IAAI,CAAC,6BAA6B,EAAE,CAAC;QAG3C,KAAK,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE;YACrC,MAAM,GAAG,CAAC,2BAA2B,EAAE,CAAC;SACzC;QACD,MAAM,IAAI,CAAC,4BAA4B,EAAE,CAAC;IAC5C,CAAC;CAwIF;AAhMU;IAAR,KAAK,EAAE;8CAAoC","sourcesContent":["import {LitElement} from \"lit\";\nimport { state } from \"lit/decorators.js\";\nimport {\n //BaseRoleName,\n AppProxy,\n ConductorAppProxy,\n //flattenCells,\n //CellIdStr, AgentIdMap, DnaId, CellAddress,\n} from \"@ddd-qc/cell-proxy\";\nimport {HappViewModel} from \"./HappViewModel\";\nimport {/*CellDef,*/ HvmDef} from \"./definitions\";\nimport {\n AppWebsocket,\n //ClonedCell,\n InstalledAppId,\n //NetworkInfo, Timestamp\n} from \"@holochain/client\";\n//import {DnaViewModel} from \"./DnaViewModel\";\n//import {CellId} from \"@holochain/client/lib/types\";\n// @ts-ignore\nimport * as net from \"net\";\n\n\n/**\n *\n */\nexport class HappMultiElement extends LitElement {\n\n /** Must be defined by subclass */\n static HVM_DEF: HvmDef;\n\n /** Set during init triggered at ctor */\n @state() hvms!: [AppProxy, HappViewModel][];\n\n\n /** Ctor */\n protected constructor(wtf: [number | AppWebsocket, InstalledAppId | undefined][], adminUrl?: URL, defaultTimeout?: number) {\n super();\n /* await */ this.constructHvms(wtf, adminUrl, defaultTimeout);\n }\n\n /** */\n async hvmConstructed(): Promise<void> {}\n /** */\n async perspectiveInitializedOffline(): Promise<void> {}\n /** */\n async perspectiveInitializedOnline(): Promise<void> {}\n\n /** */\n override shouldUpdate() {\n return !!this.hvms;\n }\n\n /** */\n protected async constructHvms(wtf: [number | AppWebsocket, InstalledAppId | undefined][], adminUrl?: URL, defaultTimeout?: number): Promise<void> {\n const hvmDef = (this.constructor as typeof HappMultiElement).HVM_DEF;\n if (!hvmDef) {\n throw Error(\"HVM_DEF static field undefined in HappMultiElement subclass \" + this.constructor.name);\n }\n for (const [port_or_socket, appId] of wtf) {\n /** Override appId */\n if (appId) {\n hvmDef.id = appId;\n }\n const appProxy = await ConductorAppProxy.new(port_or_socket, hvmDef.id, adminUrl, defaultTimeout);\n const hvm = await HappViewModel.new(this, appProxy, hvmDef);\n await hvm.authorizeAllZomeCalls(appProxy.adminWs);\n\n this.hvms.push([appProxy, hvm]);\n\n await this.hvmConstructed();\n await this.initializePerspective();\n }\n }\n\n\n /** */\n async initializePerspective(): Promise<void> {\n for (const [_proxy, hvm] of this.hvms) {\n await hvm.initializePerspectiveOffline();\n }\n await this.perspectiveInitializedOffline();\n\n // TODO move this to a later stage\n for (const [_proxy, hvm] of this.hvms) {\n await hvm.initializePerspectiveOnline();\n }\n await this.perspectiveInitializedOnline();\n }\n\n\n //\n // /** */\n // async networkInfoAll(baseRoleName?: string): Promise<Record<CellIdStr, [Timestamp, NetworkInfo]>> {\n // console.log(`networkInfoAll() \"${baseRoleName}\"`);\n // /** Grab cellMap */\n // const hvmDef = (this.constructor as typeof HappElement).HVM_DEF;\n // const cellMap = this.appProxy.getAppCells(hvmDef.id);\n // if (!cellMap) {\n // return Promise.reject(\"No cells found at given appId: \" + hvmDef.id);\n // }\n // /** Get cell Ids */\n // let cellAddrs: CellAddress[] = [];\n // if (baseRoleName) {\n // const cfr = cellMap[baseRoleName];\n // if (!cfr) {\n // return Promise.reject(\"No cells found at given baseRoleName: \" + baseRoleName);\n // }\n // cellAddrs = flattenCells(cfr);\n // } else {\n // for (const cells of Object.values(cellMap)) {\n // cellAddrs = cellAddrs.concat(flattenCells(cells))\n // }\n // }\n // console.log(`networkInfoAll() cellIds`, cellAddrs.map(cellId => cellId.str));\n // /* Sort by agent key */\n // let dnaPerAgentMap: AgentIdMap<DnaId[]> = new AgentIdMap();\n // for (const cellAddr of cellAddrs) {\n // if (!dnaPerAgentMap.get(cellAddr.agentId)) {\n // dnaPerAgentMap.set(cellAddr.agentId, []);\n // }\n // dnaPerAgentMap.get(cellAddr.agentId)!.push(cellAddr.dnaId);\n // }\n // console.log(`networkInfoAll() dnaMap`, dnaPerAgentMap);\n // /** Call NetworkInfo per AgentId */\n // const allNetInfos: Record<CellIdStr, [Timestamp, NetworkInfo]> = {};\n // for (const [agent, dnaIds] of dnaPerAgentMap.entries()) {\n // const netInfos = await this.appProxy.networkInfo({dnas: dnaIds.map((dna) => dna.hash)});\n // let i = 0;\n // for (const netInfo of netInfos) {\n // const idStr = new CellAddress(dnaIds[i]!, agent).str;\n // allNetInfos[idStr] = [Date.now(), netInfo];\n // i += 1;\n // }\n // }\n // /* Done */\n // return allNetInfos;\n // }\n\n //\n // /** */\n // dumpLastestNetworkInfo(baseRoleName?: string) {\n // console.log(`dumpLastestNetworkInfo() \"${baseRoleName}\"`);\n // /** Grab cellMap */\n // const hvmDef = (this.constructor as typeof HappElement).HVM_DEF;\n // const cellMap = this.appProxy.getAppCells(hvmDef.id);\n // if (!cellMap) {\n // throw Error(\"No cells found at given appId: \" + hvmDef.id);\n // }\n // /** Get cell Ids */\n // let cellAddrs: CellAddress[] = [];\n // if (baseRoleName) {\n // const cfr = cellMap[baseRoleName];\n // if (!cfr) {\n // throw Promise.reject(\"No cells found at given baseRoleName: \" + baseRoleName);\n // }\n // cellAddrs = flattenCells(cfr);\n // } else {\n // for (const cells of Object.values(cellMap)) {\n // cellAddrs = cellAddrs.concat(flattenCells(cells))\n // }\n // }\n // let logs = cellAddrs.map((cellAddr) => {\n // const logs = this.appProxy.networkInfoLogs[cellAddr.str];\n // if (!logs || logs.length === 0) {\n // return;\n // }\n // const [ts, info] = logs[logs.length - 1]!;\n // const hcl = this.appProxy.getLocations(cellAddr)!;\n // const cellName = this.appProxy.getCellName(hcl[0]!);\n // return {\n // ts,\n // name: cellName,\n // dna: cellAddr.dnaId.short,\n // arc: info.arc_size,\n // peers: info.current_number_of_peers,\n // total_peers: info.total_network_peers,\n // rounds: info.completed_rounds_since_last_time_queried,\n // bytes: info.bytes_since_last_time_queried,\n // fetch_bytes: info.fetch_pool_info.op_bytes_to_fetch,\n // fetch_ops: info.fetch_pool_info.num_ops_to_fetch,\n // agent: cellAddr.agentId.short,\n // }\n // })\n // console.table(logs);\n // }\n //\n //\n // /* */\n // dumpNetworkInfoLogs(cellIdStr?: string) {\n // console.log(`dumpNetworkInfoLogs() \"${cellIdStr}\"`);\n // let logMap = this.appProxy.networkInfoLogs;\n // if (cellIdStr) {\n // logMap = {};\n // logMap[cellIdStr] = this.appProxy.networkInfoLogs[cellIdStr]!;\n // }\n // for (const [cellIdStr, infoPairs] of Object.entries(logMap)) {\n // const cellAddr = CellAddress.from(cellIdStr);\n // const hcl = this.appProxy.getLocations(cellAddr)!;\n // const cellName = this.appProxy.getCellName(hcl[0]!);\n // console.log(`NetworfInfo logs of cell \"${cellName}\" | [${cellAddr.agentId.short}, ${cellAddr.dnaId.short}]`);\n // const logs = infoPairs\n // .map(([ts, info]) => {\n // return {\n // ts,\n // arc: info.arc_size,\n // peers: info.current_number_of_peers,\n // total_peers: info.total_network_peers,\n // rounds: info.completed_rounds_since_last_time_queried,\n // bytes: info.bytes_since_last_time_queried,\n // fetch_bytes: info.fetch_pool_info.op_bytes_to_fetch,\n // fetch_ops: info.fetch_pool_info.num_ops_to_fetch,\n // }\n // });\n // console.table(logs);\n // }\n // }\n\n\n // /** */\n // async createClone(baseRoleName: BaseRoleName, cellDef?: CellDef): Promise<[ClonedCell, DnaViewModel]> {\n // return this.hvm.cloneDvm(baseRoleName, cellDef);\n // }\n\n}\n"]}
1
+ {"version":3,"file":"HappMultiElement.js","sourceRoot":"","sources":["../src/HappMultiElement.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,KAAK,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAGL,iBAAiB,GAGlB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAiB9C,MAAM,OAAO,gBAAiB,SAAQ,UAAU;IAQ9C,IAAI,KAAK,KAAY,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAA,CAAA,CAAC;IAG7C,YAAsB,GAA0D,EAAE,QAAc,EAAE,cAAuB;QACvH,KAAK,EAAE,CAAC;QAND,SAAI,GAAgC,EAAE,CAAA;QAOjC,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;IAChE,CAAC;IAGD,KAAK,CAAC,cAAc,KAAmB,CAAC;IAExC,KAAK,CAAC,6BAA6B,KAAmB,CAAC;IAEvD,KAAK,CAAC,4BAA4B,KAAmB,CAAC;IAG7C,YAAY;QACnB,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAC9B,CAAC;IAGS,KAAK,CAAC,aAAa,CAAC,GAA0D,EAAE,QAAc,EAAE,cAAuB;QAC/H,MAAM,MAAM,GAAI,IAAI,CAAC,WAAuC,CAAC,OAAO,CAAC;QACrE,IAAI,CAAC,MAAM,EAAE;YACX,MAAM,KAAK,CAAC,8DAA8D,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;SACrG;QACD,KAAK,MAAM,CAAC,cAAc,EAAE,KAAK,CAAC,IAAI,GAAG,EAAE;YAEzC,IAAI,KAAK,EAAE;gBACT,MAAM,CAAC,EAAE,GAAG,KAAK,CAAC;aACnB;YACD,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,GAAG,CAAC,cAAc,EAAE,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;YAClG,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC5D,MAAM,GAAG,CAAC,qBAAqB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAElD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;YAEhC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;YAC5B,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAC;SACpC;IACH,CAAC;IAID,KAAK,CAAC,qBAAqB;QACzB,KAAK,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE;YACrC,MAAM,GAAG,CAAC,4BAA4B,EAAE,CAAC;SAC1C;QACD,MAAM,IAAI,CAAC,6BAA6B,EAAE,CAAC;QAG3C,KAAK,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE;YACrC,MAAM,GAAG,CAAC,2BAA2B,EAAE,CAAC;SACzC;QACD,MAAM,IAAI,CAAC,4BAA4B,EAAE,CAAC;IAC5C,CAAC;CAwIF;AAjMU;IAAR,KAAK,EAAE;8CAAuC","sourcesContent":["import {LitElement} from \"lit\";\nimport { state } from \"lit/decorators.js\";\nimport {\n //BaseRoleName,\n AppProxy,\n ConductorAppProxy,\n //flattenCells,\n //CellIdStr, AgentIdMap, DnaId, CellAddress,\n} from \"@ddd-qc/cell-proxy\";\nimport {HappViewModel} from \"./HappViewModel\";\nimport {/*CellDef,*/ HvmDef} from \"./definitions\";\nimport {\n AppWebsocket,\n //ClonedCell,\n InstalledAppId,\n //NetworkInfo, Timestamp\n} from \"@holochain/client\";\n//import {DnaViewModel} from \"./DnaViewModel\";\n//import {CellId} from \"@holochain/client/lib/types\";\n// @ts-ignore\nimport * as net from \"net\";\n\n\n/**\n *\n */\nexport class HappMultiElement extends LitElement {\n\n /** Must be defined by subclass */\n static HVM_DEF: HvmDef;\n\n /** Set during init triggered at ctor */\n @state() hvms: [AppProxy, HappViewModel][] = []\n\n get count(): number {return this.hvms.length}\n\n /** Ctor */\n protected constructor(wtf: [number | AppWebsocket, InstalledAppId | undefined][], adminUrl?: URL, defaultTimeout?: number) {\n super();\n /* await */ this.constructHvms(wtf, adminUrl, defaultTimeout);\n }\n\n /** */\n async hvmConstructed(): Promise<void> {}\n /** */\n async perspectiveInitializedOffline(): Promise<void> {}\n /** */\n async perspectiveInitializedOnline(): Promise<void> {}\n\n /** */\n override shouldUpdate() {\n return this.hvms.length > 0;\n }\n\n /** */\n protected async constructHvms(wtf: [number | AppWebsocket, InstalledAppId | undefined][], adminUrl?: URL, defaultTimeout?: number): Promise<void> {\n const hvmDef = (this.constructor as typeof HappMultiElement).HVM_DEF;\n if (!hvmDef) {\n throw Error(\"HVM_DEF static field undefined in HappMultiElement subclass \" + this.constructor.name);\n }\n for (const [port_or_socket, appId] of wtf) {\n /** Override appId */\n if (appId) {\n hvmDef.id = appId;\n }\n const appProxy = await ConductorAppProxy.new(port_or_socket, hvmDef.id, adminUrl, defaultTimeout);\n const hvm = await HappViewModel.new(this, appProxy, hvmDef);\n await hvm.authorizeAllZomeCalls(appProxy.adminWs);\n\n this.hvms.push([appProxy, hvm]);\n\n await this.hvmConstructed();\n await this.initializePerspective();\n }\n }\n\n\n /** */\n async initializePerspective(): Promise<void> {\n for (const [_proxy, hvm] of this.hvms) {\n await hvm.initializePerspectiveOffline();\n }\n await this.perspectiveInitializedOffline();\n\n // TODO move this to a later stage\n for (const [_proxy, hvm] of this.hvms) {\n await hvm.initializePerspectiveOnline();\n }\n await this.perspectiveInitializedOnline();\n }\n\n\n //\n // /** */\n // async networkInfoAll(baseRoleName?: string): Promise<Record<CellIdStr, [Timestamp, NetworkInfo]>> {\n // console.log(`networkInfoAll() \"${baseRoleName}\"`);\n // /** Grab cellMap */\n // const hvmDef = (this.constructor as typeof HappElement).HVM_DEF;\n // const cellMap = this.appProxy.getAppCells(hvmDef.id);\n // if (!cellMap) {\n // return Promise.reject(\"No cells found at given appId: \" + hvmDef.id);\n // }\n // /** Get cell Ids */\n // let cellAddrs: CellAddress[] = [];\n // if (baseRoleName) {\n // const cfr = cellMap[baseRoleName];\n // if (!cfr) {\n // return Promise.reject(\"No cells found at given baseRoleName: \" + baseRoleName);\n // }\n // cellAddrs = flattenCells(cfr);\n // } else {\n // for (const cells of Object.values(cellMap)) {\n // cellAddrs = cellAddrs.concat(flattenCells(cells))\n // }\n // }\n // console.log(`networkInfoAll() cellIds`, cellAddrs.map(cellId => cellId.str));\n // /* Sort by agent key */\n // let dnaPerAgentMap: AgentIdMap<DnaId[]> = new AgentIdMap();\n // for (const cellAddr of cellAddrs) {\n // if (!dnaPerAgentMap.get(cellAddr.agentId)) {\n // dnaPerAgentMap.set(cellAddr.agentId, []);\n // }\n // dnaPerAgentMap.get(cellAddr.agentId)!.push(cellAddr.dnaId);\n // }\n // console.log(`networkInfoAll() dnaMap`, dnaPerAgentMap);\n // /** Call NetworkInfo per AgentId */\n // const allNetInfos: Record<CellIdStr, [Timestamp, NetworkInfo]> = {};\n // for (const [agent, dnaIds] of dnaPerAgentMap.entries()) {\n // const netInfos = await this.appProxy.networkInfo({dnas: dnaIds.map((dna) => dna.hash)});\n // let i = 0;\n // for (const netInfo of netInfos) {\n // const idStr = new CellAddress(dnaIds[i]!, agent).str;\n // allNetInfos[idStr] = [Date.now(), netInfo];\n // i += 1;\n // }\n // }\n // /* Done */\n // return allNetInfos;\n // }\n\n //\n // /** */\n // dumpLastestNetworkInfo(baseRoleName?: string) {\n // console.log(`dumpLastestNetworkInfo() \"${baseRoleName}\"`);\n // /** Grab cellMap */\n // const hvmDef = (this.constructor as typeof HappElement).HVM_DEF;\n // const cellMap = this.appProxy.getAppCells(hvmDef.id);\n // if (!cellMap) {\n // throw Error(\"No cells found at given appId: \" + hvmDef.id);\n // }\n // /** Get cell Ids */\n // let cellAddrs: CellAddress[] = [];\n // if (baseRoleName) {\n // const cfr = cellMap[baseRoleName];\n // if (!cfr) {\n // throw Promise.reject(\"No cells found at given baseRoleName: \" + baseRoleName);\n // }\n // cellAddrs = flattenCells(cfr);\n // } else {\n // for (const cells of Object.values(cellMap)) {\n // cellAddrs = cellAddrs.concat(flattenCells(cells))\n // }\n // }\n // let logs = cellAddrs.map((cellAddr) => {\n // const logs = this.appProxy.networkInfoLogs[cellAddr.str];\n // if (!logs || logs.length === 0) {\n // return;\n // }\n // const [ts, info] = logs[logs.length - 1]!;\n // const hcl = this.appProxy.getLocations(cellAddr)!;\n // const cellName = this.appProxy.getCellName(hcl[0]!);\n // return {\n // ts,\n // name: cellName,\n // dna: cellAddr.dnaId.short,\n // arc: info.arc_size,\n // peers: info.current_number_of_peers,\n // total_peers: info.total_network_peers,\n // rounds: info.completed_rounds_since_last_time_queried,\n // bytes: info.bytes_since_last_time_queried,\n // fetch_bytes: info.fetch_pool_info.op_bytes_to_fetch,\n // fetch_ops: info.fetch_pool_info.num_ops_to_fetch,\n // agent: cellAddr.agentId.short,\n // }\n // })\n // console.table(logs);\n // }\n //\n //\n // /* */\n // dumpNetworkInfoLogs(cellIdStr?: string) {\n // console.log(`dumpNetworkInfoLogs() \"${cellIdStr}\"`);\n // let logMap = this.appProxy.networkInfoLogs;\n // if (cellIdStr) {\n // logMap = {};\n // logMap[cellIdStr] = this.appProxy.networkInfoLogs[cellIdStr]!;\n // }\n // for (const [cellIdStr, infoPairs] of Object.entries(logMap)) {\n // const cellAddr = CellAddress.from(cellIdStr);\n // const hcl = this.appProxy.getLocations(cellAddr)!;\n // const cellName = this.appProxy.getCellName(hcl[0]!);\n // console.log(`NetworfInfo logs of cell \"${cellName}\" | [${cellAddr.agentId.short}, ${cellAddr.dnaId.short}]`);\n // const logs = infoPairs\n // .map(([ts, info]) => {\n // return {\n // ts,\n // arc: info.arc_size,\n // peers: info.current_number_of_peers,\n // total_peers: info.total_network_peers,\n // rounds: info.completed_rounds_since_last_time_queried,\n // bytes: info.bytes_since_last_time_queried,\n // fetch_bytes: info.fetch_pool_info.op_bytes_to_fetch,\n // fetch_ops: info.fetch_pool_info.num_ops_to_fetch,\n // }\n // });\n // console.table(logs);\n // }\n // }\n\n\n // /** */\n // async createClone(baseRoleName: BaseRoleName, cellDef?: CellDef): Promise<[ClonedCell, DnaViewModel]> {\n // return this.hvm.cloneDvm(baseRoleName, cellDef);\n // }\n\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ViewModel.d.ts","sourceRoot":"","sources":["../src/ViewModel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAkB,MAAM,cAAc,CAAC;AACtD,OAAO,EAAC,sBAAsB,EAAE,eAAe,EAAC,MAAM,KAAK,CAAC;AAC5D,OAAO,EAAC,WAAW,EAAC,MAAM,mBAAmB,CAAC;AAE9C,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAsBnC,8BAAsB,SAAS;IAG9B,SAAS,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IACzC,SAAS,CAAC,cAAc,EAAE,CAAC,sBAAsB,EAAE,WAAW,CAAC,EAAE,CAAM;IACvE,SAAS,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAK9B,SAAS,CAAC,WAAW,QAAe;IAIpC,QAAQ,CAAC,aAAa,CAAC,EAAE,WAAW,CAAC;IAKrC,QAAQ,CAAC,UAAU,IAAI,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC;IAEhD,QAAQ,KAAK,WAAW,IAAI,OAAO,CAAC;IAG9B,4BAA4B,IAAI,OAAO,CAAC,IAAI,CAAC;IAE7C,2BAA2B,IAAI,OAAO,CAAC,IAAI,CAAC;IAElD,SAAS,CAAC,aAAa,IAAI,IAAI;IAM/B,QAAQ,IAAI,IAAI;IAsBhB,SAAS,CAAC,QAAQ,CAAC,UAAU,IAAI,OAAO;IAMxC,cAAc,CAAC,YAAY,EAAE,eAAe,GAAG,IAAI;IAQnD,SAAS,CAAC,YAAY,EAAE,sBAAsB,EAAE,QAAQ,EAAE,WAAW,GAAG,IAAI;IAM5E,WAAW,CAAC,SAAS,EAAE,sBAAsB,GAAG,IAAI;IAYpD,SAAS,CAAC,iBAAiB,IAAI,OAAO;CAUvC"}
1
+ {"version":3,"file":"ViewModel.d.ts","sourceRoot":"","sources":["../src/ViewModel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAkB,MAAM,cAAc,CAAC;AACtD,OAAO,EAAC,sBAAsB,EAAE,eAAe,EAAC,MAAM,KAAK,CAAC;AAC5D,OAAO,EAAC,WAAW,EAAC,MAAM,mBAAmB,CAAC;AAE9C,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAsBnC,8BAAsB,SAAS;IAG9B,SAAS,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IACzC,SAAS,CAAC,cAAc,EAAE,CAAC,sBAAsB,EAAE,WAAW,CAAC,EAAE,CAAM;IACvE,SAAS,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAK9B,SAAS,CAAC,WAAW,QAAe;IAIpC,QAAQ,CAAC,aAAa,CAAC,EAAE,WAAW,CAAC;IAKrC,QAAQ,CAAC,UAAU,IAAI,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC;IAEhD,QAAQ,KAAK,WAAW,IAAI,OAAO,CAAC;IAG9B,4BAA4B,IAAI,OAAO,CAAC,IAAI,CAAC;IAE7C,2BAA2B,IAAI,OAAO,CAAC,IAAI,CAAC;IAElD,SAAS,CAAC,aAAa,IAAI,IAAI;IAM/B,QAAQ,IAAI,IAAI;IAsBhB,SAAS,CAAC,QAAQ,CAAC,UAAU,IAAI,OAAO;IAMxC,cAAc,CAAC,YAAY,EAAE,eAAe,GAAG,IAAI;IAQnD,SAAS,CAAC,YAAY,EAAE,sBAAsB,EAAE,QAAQ,EAAE,WAAW,GAAG,IAAI;IAM5E,WAAW,CAAC,SAAS,EAAE,sBAAsB,GAAG,IAAI;IAYpD,SAAS,CAAC,iBAAiB,IAAI,OAAO;CAgBvC"}
package/dist/ViewModel.js CHANGED
@@ -41,11 +41,17 @@ export class ViewModel {
41
41
  }
42
42
  }
43
43
  notifySubscribers() {
44
- if (!this.hasChanged())
44
+ if (!this.hasChanged()) {
45
45
  return false;
46
+ }
46
47
  this._previousPerspective = this.perspective;
47
48
  for (const [host, propName] of this._providedHosts) {
48
- host[propName] = this._previousPerspective;
49
+ if (propName == "") {
50
+ host.requestUpdate();
51
+ }
52
+ else {
53
+ host[propName] = this._previousPerspective;
54
+ }
49
55
  }
50
56
  return true;
51
57
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ViewModel.js","sourceRoot":"","sources":["../src/ViewModel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,eAAe,EAAC,MAAM,cAAc,CAAC;AAItD,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAsBnC,MAAM,OAAgB,SAAS;IAA/B;QAIW,mBAAc,GAA4C,EAAE,CAAC;QAM7D,gBAAW,GAAG,IAAI,KAAK,EAAE,CAAC;IAwFtC,CAAC;IA1EC,KAAK,CAAC,4BAA4B,KAAmB,CAAC;IAEtD,KAAK,CAAC,2BAA2B,KAAmB,CAAC;IAE3C,aAAa,KAAU,CAAC;IAAA,CAAC;IAMnC,QAAQ;QAKN,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,EAAE;YAC/B,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;YACjE,OAAO;SACR;QACD,IAAI,CAAC,WAAW;aACb,OAAO,EAAE;aACT,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;YACtB,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;IACP,CAAC;IAaD,cAAc,CAAC,YAA6B;QAC1C,OAAO,CAAC,GAAG,CAAC,0BAA0B,IAAI,CAAC,UAAU,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC;QACrF,IAAI,CAAC,SAAS,GAAG,IAAI,eAAe,CAAC,YAAY,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,CAAC;IAC9E,CAAC;IAKD,SAAS,CAAC,YAAoC,EAAE,QAAqB;QAChE,YAAoB,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;QACnD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAA;IACtD,CAAC;IAGD,WAAW,CAAC,SAAiC;QACzC,IAAI,KAAK,GAAI,CAAC,CAAC;QACf,KAAK,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,IAAI,CAAC,cAAc,EAAE;YACjD,IAAI,IAAI,KAAK,SAAS;gBAAE,MAAM;YAC9B,KAAK,IAAI,CAAC,CAAC;SACd;QACD,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;YACZ,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;SACxC;IACL,CAAC;IAGS,iBAAiB;QACzB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAAE,OAAO,KAAK,CAAC;QAEnC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,WAAW,CAAC;QAC7C,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,cAAc,EAAE;YACnD,IAAY,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,oBAAoB,CAAC;SACrD;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CAEF","sourcesContent":["import {Context, ContextProvider} from \"@lit/context\";\nimport {ReactiveControllerHost, ReactiveElement} from \"lit\";\nimport {AppSignalCb} from \"@holochain/client\";\n\nimport { Mutex } from 'async-mutex';\n\n\n// enum InitializationState {\n// Uninitialized = \"Uninitialized\",\n// InitializingOffline = \"InitializingOffline\",\n// InitializingOnline = \"InitializingOnline\",\n// Initialized = \"Initialized\",\n// }\n\n\n/**\n * ABC of a ViewModel.\n * It mediates the interaction between a View (CustomElements) and a Model (Zome / DNA).\n * It is an Observable meant to be observed by (Lit) ReactiveElements.\n * It is meant to be a singleton passed around by a (Lit) Context.\n * The ViewModel contains a perspective: All the data that a view can observe.\n * To update subscribers, it makes use of Lit's reactive properties.\n * When subscribing, a host must provide a reactive property that has the ViewModel's perspestives's type.\n * Hosts can trigger probing in order to get an updated perspective.\n * The perspective can be automatically updated by internal events.\n */\n export abstract class ViewModel {\n\n /** -- Fields -- */\n protected _previousPerspective?: unknown;\n protected _providedHosts: [ReactiveControllerHost, PropertyKey][] = [];\n protected _provider?: unknown; // FIXME type: ContextProvider<this.getContext()>;\n\n //protected _initializationState: InitializationState = InitializationState.Uninitialized;\n\n\n protected _probeMutex = new Mutex();\n\n /** -- Abstract fields -- */\n\n abstract signalHandler?: AppSignalCb;\n\n\n /** -- Abstract methods -- */\n\n abstract getContext(): Context<unknown, unknown>;\n /* Child class should implement with specific type */\n abstract get perspective(): unknown;\n\n /* (optional) Set perspective with data from the source-chain only */\n async initializePerspectiveOffline(): Promise<void> {}\n /* (optional) Set perspective with data from the DHT */\n async initializePerspectiveOnline(): Promise<void> {}\n /* (optional) Lets the observer trigger probing into the network in order to get an updated perspective */\n protected probeAllInner(): void {};\n\n /**\n * Mutex wrapping of probeAllInner: Don't call probeAll() during a probeAll()\n * Should not be async as we expect this to be long, so happs are expected to use signals instead if something changed.\n */\n probeAll(): void {\n // if (this._initializationState !== InitializationState.Initialized) {\n // console.warn(\"probeAll() called on unitialized ViewModel\");\n // return;\n // }\n if (this._probeMutex.isLocked()) {\n console.log(\"probeAll() call skipped. Reason: Already running.\");\n return;\n }\n this._probeMutex\n .acquire()\n .then(async (release) => {\n this.probeAllInner();\n release();\n });\n }\n\n /**\n * Return true if the perspective has changed. This will trigger an update on the observers\n * Child classes are expected to compare their latest constructed perspective (the one returned by this.perspective())\n * with this._previousPerspective.\n */\n protected abstract hasChanged(): boolean;\n\n\n /** -- Final methods -- */\n\n /** Set ContextProvider for host */\n provideContext(providerHost: ReactiveElement): void {\n console.log(`\\t\\tProviding context \"${this.getContext()}\" | in host `, providerHost);\n this._provider = new ContextProvider(providerHost, this.getContext(), this);\n }\n\n /** -- Observer pattern -- */\n\n /** */\n subscribe(providedHost: ReactiveControllerHost, propName: PropertyKey): void {\n (providedHost as any)[propName] = this.perspective;\n this._providedHosts.push([providedHost, propName])\n }\n\n /** */\n unsubscribe(candidate: ReactiveControllerHost): void {\n let index = 0;\n for (const [host, _propName] of this._providedHosts) {\n if (host === candidate) break;\n index += 1;\n }\n if (index > -1) {\n this._providedHosts.splice(index, 1);\n }\n }\n\n /** */\n protected notifySubscribers(): boolean {\n if (!this.hasChanged()) return false;\n //this._previousPerspective = structuredClone(this.perspective);\n this._previousPerspective = this.perspective;\n for (const [host, propName] of this._providedHosts) {\n (host as any)[propName] = this._previousPerspective;\n }\n return true;\n }\n\n}\n"]}
1
+ {"version":3,"file":"ViewModel.js","sourceRoot":"","sources":["../src/ViewModel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,eAAe,EAAC,MAAM,cAAc,CAAC;AAItD,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAsBnC,MAAM,OAAgB,SAAS;IAA/B;QAIW,mBAAc,GAA4C,EAAE,CAAC;QAM7D,gBAAW,GAAG,IAAI,KAAK,EAAE,CAAC;IA8FtC,CAAC;IAhFC,KAAK,CAAC,4BAA4B,KAAmB,CAAC;IAEtD,KAAK,CAAC,2BAA2B,KAAmB,CAAC;IAE3C,aAAa,KAAU,CAAC;IAAA,CAAC;IAMnC,QAAQ;QAKN,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,EAAE;YAC/B,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;YACjE,OAAO;SACR;QACD,IAAI,CAAC,WAAW;aACb,OAAO,EAAE;aACT,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;YACtB,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;IACP,CAAC;IAaD,cAAc,CAAC,YAA6B;QAC1C,OAAO,CAAC,GAAG,CAAC,0BAA0B,IAAI,CAAC,UAAU,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC;QACrF,IAAI,CAAC,SAAS,GAAG,IAAI,eAAe,CAAC,YAAY,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,CAAC;IAC9E,CAAC;IAKD,SAAS,CAAC,YAAoC,EAAE,QAAqB;QAChE,YAAoB,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;QACnD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAA;IACtD,CAAC;IAGD,WAAW,CAAC,SAAiC;QACzC,IAAI,KAAK,GAAI,CAAC,CAAC;QACf,KAAK,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,IAAI,CAAC,cAAc,EAAE;YACjD,IAAI,IAAI,KAAK,SAAS;gBAAE,MAAM;YAC9B,KAAK,IAAI,CAAC,CAAC;SACd;QACD,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;YACZ,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;SACxC;IACL,CAAC;IAGS,iBAAiB;QACzB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE;YACtB,OAAO,KAAK,CAAC;SACd;QAED,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,WAAW,CAAC;QAC7C,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,cAAc,EAAE;YAClD,IAAI,QAAQ,IAAI,EAAE,EAAE;gBACjB,IAAY,CAAC,aAAa,EAAE,CAAC;aAC/B;iBAAM;gBACJ,IAAY,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,oBAAoB,CAAC;aACrD;SACF;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CAEF","sourcesContent":["import {Context, ContextProvider} from \"@lit/context\";\nimport {ReactiveControllerHost, ReactiveElement} from \"lit\";\nimport {AppSignalCb} from \"@holochain/client\";\n\nimport { Mutex } from 'async-mutex';\n\n\n// enum InitializationState {\n// Uninitialized = \"Uninitialized\",\n// InitializingOffline = \"InitializingOffline\",\n// InitializingOnline = \"InitializingOnline\",\n// Initialized = \"Initialized\",\n// }\n\n\n/**\n * ABC of a ViewModel.\n * It mediates the interaction between a View (CustomElements) and a Model (Zome / DNA).\n * It is an Observable meant to be observed by (Lit) ReactiveElements.\n * It is meant to be a singleton passed around by a (Lit) Context.\n * The ViewModel contains a perspective: All the data that a view can observe.\n * To update subscribers, it makes use of Lit's reactive properties.\n * When subscribing, a host must provide a reactive property that has the ViewModel's perspestives's type.\n * Hosts can trigger probing in order to get an updated perspective.\n * The perspective can be automatically updated by internal events.\n */\n export abstract class ViewModel {\n\n /** -- Fields -- */\n protected _previousPerspective?: unknown;\n protected _providedHosts: [ReactiveControllerHost, PropertyKey][] = [];\n protected _provider?: unknown; // FIXME type: ContextProvider<this.getContext()>;\n\n //protected _initializationState: InitializationState = InitializationState.Uninitialized;\n\n\n protected _probeMutex = new Mutex();\n\n /** -- Abstract fields -- */\n\n abstract signalHandler?: AppSignalCb;\n\n\n /** -- Abstract methods -- */\n\n abstract getContext(): Context<unknown, unknown>;\n /* Child class should implement with specific type */\n abstract get perspective(): unknown;\n\n /* (optional) Set perspective with data from the source-chain only */\n async initializePerspectiveOffline(): Promise<void> {}\n /* (optional) Set perspective with data from the DHT */\n async initializePerspectiveOnline(): Promise<void> {}\n /* (optional) Lets the observer trigger probing into the network in order to get an updated perspective */\n protected probeAllInner(): void {};\n\n /**\n * Mutex wrapping of probeAllInner: Don't call probeAll() during a probeAll()\n * Should not be async as we expect this to be long, so happs are expected to use signals instead if something changed.\n */\n probeAll(): void {\n // if (this._initializationState !== InitializationState.Initialized) {\n // console.warn(\"probeAll() called on unitialized ViewModel\");\n // return;\n // }\n if (this._probeMutex.isLocked()) {\n console.log(\"probeAll() call skipped. Reason: Already running.\");\n return;\n }\n this._probeMutex\n .acquire()\n .then(async (release) => {\n this.probeAllInner();\n release();\n });\n }\n\n /**\n * Return true if the perspective has changed. This will trigger an update on the observers\n * Child classes are expected to compare their latest constructed perspective (the one returned by this.perspective())\n * with this._previousPerspective.\n */\n protected abstract hasChanged(): boolean;\n\n\n /** -- Final methods -- */\n\n /** Set ContextProvider for host */\n provideContext(providerHost: ReactiveElement): void {\n console.log(`\\t\\tProviding context \"${this.getContext()}\" | in host `, providerHost);\n this._provider = new ContextProvider(providerHost, this.getContext(), this);\n }\n\n /** -- Observer pattern -- */\n\n /** */\n subscribe(providedHost: ReactiveControllerHost, propName: PropertyKey): void {\n (providedHost as any)[propName] = this.perspective;\n this._providedHosts.push([providedHost, propName])\n }\n\n /** */\n unsubscribe(candidate: ReactiveControllerHost): void {\n let index = 0;\n for (const [host, _propName] of this._providedHosts) {\n if (host === candidate) break;\n index += 1;\n }\n if (index > -1) {\n this._providedHosts.splice(index, 1);\n }\n }\n\n /** */\n protected notifySubscribers(): boolean {\n if (!this.hasChanged()) {\n return false;\n }\n //this._previousPerspective = structuredClone(this.perspective);\n this._previousPerspective = this.perspective;\n for (const [host, propName] of this._providedHosts) {\n if (propName == \"\") {\n (host as any).requestUpdate();\n } else {\n (host as any)[propName] = this._previousPerspective;\n }\n }\n return true;\n }\n\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ZomeElement.js","sourceRoot":"","sources":["../src/ZomeElement.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,UAAU,EAAiB,MAAM,KAAK,CAAC;AAC/C,OAAO,EAAC,QAAQ,EAAE,KAAK,EAAC,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAC,OAAO,EAAE,eAAe,EAAE,aAAa,EAAC,MAAM,cAAc,CAAC;AAErE,OAAO,EAAC,WAAW,EAAC,MAAM,yBAAyB,CAAC;AAEpD,OAAO,EAAO,SAAS,EAAC,MAAM,oBAAoB,CAAC;AAMnD,MAAM,OAAO,WAA0C,SAAQ,SAAS,CAAC,UAAU,CAAC;IAElF,YAA4B,eAAyB;QACnD,KAAK,EAAE,CAAC;QADkB,oBAAe,GAAf,eAAe,CAAU;IAMrD,CAAC;IAOD,IAAI,QAAQ,KAAc,OAAO,IAAI,CAAC,SAAS,CAAA,CAAA,CAAC;IAAA,CAAC;IAezC,UAAU,CAAC,eAAwB,KAAK;QAC9C,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;YAC3B,MAAM,KAAK,CAAC,YAAY,WAAW,iCAAiC,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,CAAA;SAC9F;QAED,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,SAAS,EAAE;YACnC,OAAO;SACR;QACD,MAAM,WAAW,GAAG,aAAa,CAAM,MAAM,GAAE,IAAI,CAAC,eAAe,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACxG,OAAO,CAAC,GAAG,CAAC,4BAA4B,WAAW,GAAG,CAAC,CAAA;QACvD,IAAI,CAAC,SAAS,GAAG,IAAI,eAAe,CAClC,IAAI,EACJ,WAAW,EACX,KAAK,EAAE,KAAU,EAAE,QAAqB,EAAiB,EAAE;YACzD,OAAO,CAAC,GAAG,CAAC,oCAAoC,WAAW,GAAG,CAAC,CAAA;YAC/D,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YACxC,IAAI,IAAI,CAAC,IAAI,EAAE;gBACb,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;aAC7B;YACD,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;YAClB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;YACpC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QAC3C,CAAC,EACD,KAAK,CACN,CAAC;IACJ,CAAC;IAIS,KAAK,CAAC,UAAU,CAAC,OAAY,EAAE,OAAa;IAEtD,CAAC;IAIQ,YAAY,CAAC,iBAAuC;QAE3D,IAAI,iBAAiB,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE;YAE9C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC;YACpC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACtB,OAAO,KAAK,CAAC;SACd;QAED,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YACd,IAAI,CAAC,UAAU,EAAE,CAAC;SACnB;QACD,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;CAWF;AA7EC;IAFC,OAAO,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,EAAC,CAAC;IACjD,QAAQ,CAAC,EAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAC,CAAC;sDAClB;AAMN;IAAlB,KAAK,EAAE;yCAAsB;AAG9B;IADC,QAAQ,CAAC,EAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAC,CAAC;gDAC3D","sourcesContent":["import {LitElement, PropertyValues} from \"lit\";\nimport {property, state} from \"lit/decorators.js\";\nimport {consume, ContextConsumer, createContext} from \"@lit/context\";\nimport {ZomeName} from \"@holochain/client\";\nimport {cellContext} from \"./elements/cell-context\";\nimport { ZomeViewModel } from \"./ZomeViewModel\";\nimport {Cell, CellMixin} from \"@ddd-qc/cell-proxy\";\n\n\n/**\n * LitElement that is bound to a specific ZomeViewModel, e.g. a View for the ViewModel\n */\nexport class ZomeElement<P, ZVM extends ZomeViewModel> extends CellMixin(LitElement) {\n\n constructor(public readonly defaultZomeName: ZomeName) {\n super();\n // const nameAttr = this.getAttribute(\"zomeName\");\n // if (nameAttr) {\n // this.zomeName = nameAttr;\n // }\n }\n\n @consume({ context: cellContext, subscribe: true})\n @property({type: Object, attribute: false})\n _cell_via_context!: Cell;\n\n protected _zomeName!: ZomeName;\n get zomeName(): ZomeName {return this._zomeName};\n\n /** Provided by Context depending on cellData.dnaHash */\n @state() protected _zvm!: ZVM;\n\n @property({type: Object, attribute: false, hasChanged: (_v, _old) => true})\n perspective!: P;\n\n // @ts-ignore\n private _consumer?;\n\n\n /** -- Methods -- */\n\n /** Request zvm from Context based on current CellAddress */\n private requestZvm(canRerequest: boolean = false) {\n if (!this._cell_via_context) {\n throw Error(`Context \"${cellContext}\" not found from ZomeElement \"${this.constructor.name}\"`)\n }\n /* DVM already requested */\n if (!canRerequest && this._consumer) {\n return;\n }\n const contextType = createContext<ZVM>('zvm/'+ this.defaultZomeName + '/' + this.cell.address.dnaId.b64)\n console.log(`\\t\\t Requesting context \"${contextType}\"`)\n this._consumer = new ContextConsumer(\n this,\n contextType,\n async (value: ZVM, _dispose?: () => void): Promise<void> => {\n console.log(`\\t\\t Received value for context \"${contextType}\"`)\n await this.zvmUpdated(value, this._zvm);\n if (this._zvm) {\n this._zvm.unsubscribe(this);\n }\n this._zvm = value;\n this._zomeName = this._zvm.zomeName;\n this._zvm.subscribe(this, 'perspective');\n },\n false, // true will call twice at init\n );\n }\n\n\n /** Subclass can override this to get notified when a new ZVM has been received */\n protected async zvmUpdated(_newZvm: ZVM, _oldZvm?: ZVM): Promise<void> {\n //console.log(`\\t\\t Default zvmUpdated() called`)\n }\n\n\n /** */\n override shouldUpdate(changedProperties: PropertyValues<this>) {\n //console.log(\"ZomeElement.shouldUpdate() start\", !!this._zvm, this.installedCell);\n if (changedProperties.has(\"_cell_via_context\")) {\n //console.log(\"ZomeElement.shouldUpdate()\", this._cell_via_context)\n this._cell = this._cell_via_context;\n this.requestZvm(true);\n return false;\n }\n /** RequestZvm on first \"shouldUpdate\" */\n if (!this._zvm) {\n this.requestZvm();\n }\n return !!this._zvm;\n }\n\n\n // /** Request ZVM if cell changed */\n // protected willUpdate(changedProperties: PropertyValues<this>) {\n // //console.log(\"ZomeElement.willUpdate()\", changedProperties)\n // if (changedProperties.has(\"_cell_via_context\")) {\n // this.requestZvm();\n // }\n // }\n\n}\n\n"]}
1
+ {"version":3,"file":"ZomeElement.js","sourceRoot":"","sources":["../src/ZomeElement.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,UAAU,EAAiB,MAAM,KAAK,CAAC;AAC/C,OAAO,EAAC,QAAQ,EAAE,KAAK,EAAC,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAC,OAAO,EAAE,eAAe,EAAE,aAAa,EAAC,MAAM,cAAc,CAAC;AAErE,OAAO,EAAC,WAAW,EAAC,MAAM,yBAAyB,CAAC;AAEpD,OAAO,EAAO,SAAS,EAAC,MAAM,oBAAoB,CAAC;AAMnD,MAAM,OAAO,WAA0C,SAAQ,SAAS,CAAC,UAAU,CAAC;IAElF,YAA4B,eAAyB;QACnD,KAAK,EAAE,CAAC;QADkB,oBAAe,GAAf,eAAe,CAAU;IAMrD,CAAC;IAOD,IAAI,QAAQ,KAAc,OAAO,IAAI,CAAC,SAAS,CAAA,CAAA,CAAC;IAAA,CAAC;IAezC,UAAU,CAAC,eAAwB,KAAK;QAC9C,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;YAC3B,MAAM,KAAK,CAAC,YAAY,WAAW,iCAAiC,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,CAAA;SAC9F;QAED,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,SAAS,EAAE;YACnC,OAAO;SACR;QACD,MAAM,WAAW,GAAG,aAAa,CAAM,MAAM,GAAE,IAAI,CAAC,eAAe,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACxG,OAAO,CAAC,GAAG,CAAC,4BAA4B,WAAW,GAAG,CAAC,CAAA;QACvD,IAAI,CAAC,SAAS,GAAG,IAAI,eAAe,CAClC,IAAI,EACJ,WAAW,EACX,KAAK,EAAE,KAAU,EAAE,QAAqB,EAAiB,EAAE;YACzD,OAAO,CAAC,GAAG,CAAC,oCAAoC,WAAW,GAAG,CAAC,CAAA;YAC/D,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YACxC,IAAI,IAAI,CAAC,IAAI,EAAE;gBACb,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;aAC7B;YACD,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;YAClB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;YACpC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QAC3C,CAAC,EACD,KAAK,CACN,CAAC;IACJ,CAAC;IAIS,KAAK,CAAC,UAAU,CAAC,OAAY,EAAE,OAAa;IAEtD,CAAC;IAIQ,YAAY,CAAC,iBAAuC;QAE3D,IAAI,iBAAiB,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE;YAE9C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC;YACpC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACtB,OAAO,KAAK,CAAC;SACd;QAED,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YACd,IAAI,CAAC,UAAU,EAAE,CAAC;SACnB;QACD,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;CAWF;AA7EC;IAFC,OAAO,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,EAAC,CAAC;IACjD,QAAQ,CAAC,EAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAC,CAAC;sDAClB;AAMN;IAAlB,KAAK,EAAE;yCAAsB;AAG9B;IADC,QAAQ,CAAC,EAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAC,CAAC;gDAC3D","sourcesContent":["import {LitElement, PropertyValues} from \"lit\";\r\nimport {property, state} from \"lit/decorators.js\";\r\nimport {consume, ContextConsumer, createContext} from \"@lit/context\";\r\nimport {ZomeName} from \"@holochain/client\";\r\nimport {cellContext} from \"./elements/cell-context\";\r\nimport { ZomeViewModel } from \"./ZomeViewModel\";\r\nimport {Cell, CellMixin} from \"@ddd-qc/cell-proxy\";\r\n\r\n\r\n/**\r\n * LitElement that is bound to a specific ZomeViewModel, e.g. a View for the ViewModel\r\n */\r\nexport class ZomeElement<P, ZVM extends ZomeViewModel> extends CellMixin(LitElement) {\r\n\r\n constructor(public readonly defaultZomeName: ZomeName) {\r\n super();\r\n // const nameAttr = this.getAttribute(\"zomeName\");\r\n // if (nameAttr) {\r\n // this.zomeName = nameAttr;\r\n // }\r\n }\r\n\r\n @consume({ context: cellContext, subscribe: true})\r\n @property({type: Object, attribute: false})\r\n _cell_via_context!: Cell;\r\n\r\n protected _zomeName!: ZomeName;\r\n get zomeName(): ZomeName {return this._zomeName};\r\n\r\n /** Provided by Context depending on cellData.dnaHash */\r\n @state() protected _zvm!: ZVM;\r\n\r\n @property({type: Object, attribute: false, hasChanged: (_v, _old) => true})\r\n perspective!: P;\r\n\r\n // @ts-ignore\r\n private _consumer?;\r\n\r\n\r\n /** -- Methods -- */\r\n\r\n /** Request zvm from Context based on current CellAddress */\r\n private requestZvm(canRerequest: boolean = false) {\r\n if (!this._cell_via_context) {\r\n throw Error(`Context \"${cellContext}\" not found from ZomeElement \"${this.constructor.name}\"`)\r\n }\r\n /* DVM already requested */\r\n if (!canRerequest && this._consumer) {\r\n return;\r\n }\r\n const contextType = createContext<ZVM>('zvm/'+ this.defaultZomeName + '/' + this.cell.address.dnaId.b64)\r\n console.log(`\\t\\t Requesting context \"${contextType}\"`)\r\n this._consumer = new ContextConsumer(\r\n this,\r\n contextType,\r\n async (value: ZVM, _dispose?: () => void): Promise<void> => {\r\n console.log(`\\t\\t Received value for context \"${contextType}\"`)\r\n await this.zvmUpdated(value, this._zvm);\r\n if (this._zvm) {\r\n this._zvm.unsubscribe(this);\r\n }\r\n this._zvm = value;\r\n this._zomeName = this._zvm.zomeName;\r\n this._zvm.subscribe(this, 'perspective');\r\n },\r\n false, // true will call twice at init\r\n );\r\n }\r\n\r\n\r\n /** Subclass can override this to get notified when a new ZVM has been received */\r\n protected async zvmUpdated(_newZvm: ZVM, _oldZvm?: ZVM): Promise<void> {\r\n //console.log(`\\t\\t Default zvmUpdated() called`)\r\n }\r\n\r\n\r\n /** */\r\n override shouldUpdate(changedProperties: PropertyValues<this>) {\r\n //console.log(\"ZomeElement.shouldUpdate() start\", !!this._zvm, this.installedCell);\r\n if (changedProperties.has(\"_cell_via_context\")) {\r\n //console.log(\"ZomeElement.shouldUpdate()\", this._cell_via_context)\r\n this._cell = this._cell_via_context;\r\n this.requestZvm(true);\r\n return false;\r\n }\r\n /** RequestZvm on first \"shouldUpdate\" */\r\n if (!this._zvm) {\r\n this.requestZvm();\r\n }\r\n return !!this._zvm;\r\n }\r\n\r\n\r\n // /** Request ZVM if cell changed */\r\n // protected willUpdate(changedProperties: PropertyValues<this>) {\r\n // //console.log(\"ZomeElement.willUpdate()\", changedProperties)\r\n // if (changedProperties.has(\"_cell_via_context\")) {\r\n // this.requestZvm();\r\n // }\r\n // }\r\n\r\n}\r\n\r\n"]}
@@ -0,0 +1,23 @@
1
+ import { LitElement, PropertyValues } from "lit";
2
+ import { ZomeName } from "@holochain/client";
3
+ import { ZomeViewModel } from "./ZomeViewModel";
4
+ import { Cell, DnaId, DnaIdMap } from "@ddd-qc/cell-proxy";
5
+ declare const ZomeMultiElement_base: (abstract new (...args: any[]) => {
6
+ _cells?: Cell[];
7
+ readonly cells: Cell[];
8
+ readonly cell: Cell;
9
+ }) & typeof LitElement;
10
+ export declare class ZomeMultiElement<ZVM extends ZomeViewModel> extends ZomeMultiElement_base {
11
+ readonly defaultZomeName: ZomeName;
12
+ constructor(defaultZomeName: ZomeName);
13
+ _cells_via_context: Cell[];
14
+ protected _zomeName: ZomeName;
15
+ get zomeName(): ZomeName;
16
+ protected _zvms: DnaIdMap<ZVM>;
17
+ private _consumers;
18
+ private requestZvm;
19
+ protected zvmUpdated(_cellAddress: DnaId, _newZvms: ZVM, _oldZvms?: ZVM): Promise<void>;
20
+ shouldUpdate(changedProperties: PropertyValues<this>): boolean;
21
+ }
22
+ export {};
23
+ //# sourceMappingURL=ZomeMultiElement.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ZomeMultiElement.d.ts","sourceRoot":"","sources":["../src/ZomeMultiElement.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAE,cAAc,EAAC,MAAM,KAAK,CAAC;AAG/C,OAAO,EAAC,QAAQ,EAAC,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAC,IAAI,EAAc,KAAK,EAAE,QAAQ,EAAC,MAAM,oBAAoB,CAAC;;;;;;AAOrE,qBAAa,gBAAgB,CAAQ,GAAG,SAAS,aAAa,CAAE,SAAQ,qBAAsB;aAEhE,eAAe,EAAE,QAAQ;gBAAzB,eAAe,EAAE,QAAQ;IAMrD,kBAAkB,EAAG,IAAI,EAAE,CAAC;IAK5B,SAAS,CAAC,SAAS,EAAG,QAAQ,CAAC;IAC/B,IAAI,QAAQ,IAAI,QAAQ,CAAwB;IAGvC,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAuB;IAG9D,OAAO,CAAC,UAAU,CAAiC;IAMnD,OAAO,CAAC,UAAU;cAmCF,UAAU,CAAC,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAMpF,YAAY,CAAC,iBAAiB,EAAE,cAAc,CAAC,IAAI,CAAC;CAwB9D"}
@@ -0,0 +1,61 @@
1
+ import { __decorate } from "tslib";
2
+ import { LitElement } from "lit";
3
+ import { property, state } from "lit/decorators.js";
4
+ import { consume, ContextConsumer, createContext } from "@lit/context";
5
+ import { CellsMixin, DnaIdMap } from "@ddd-qc/cell-proxy";
6
+ import { cellMultiContext } from "./elements/cell-multi-context";
7
+ export class ZomeMultiElement extends CellsMixin(LitElement) {
8
+ constructor(defaultZomeName) {
9
+ super();
10
+ this.defaultZomeName = defaultZomeName;
11
+ this._zvms = new DnaIdMap();
12
+ this._consumers = new DnaIdMap();
13
+ }
14
+ get zomeName() { return this._zomeName; }
15
+ ;
16
+ requestZvm(canRerequest = false) {
17
+ if (!this._cells_via_context) {
18
+ throw Error(`Context "${cellMultiContext}" not found from ZomeElement "${this.constructor.name}"`);
19
+ }
20
+ if (!canRerequest && this._consumers.size > 0) {
21
+ return;
22
+ }
23
+ for (const cell of this._cells.values()) {
24
+ const contextType = createContext('zvm/' + this.defaultZomeName + '/' + cell.address.dnaId.b64);
25
+ console.log(`\t\t Requesting context "${contextType}"`);
26
+ const consumer = new ContextConsumer(this, contextType, async (newZvm, _dispose) => {
27
+ console.log(`\t\t Received value for context "${contextType}"`);
28
+ const oldZvm = this._zvms.get(cell.address.dnaId);
29
+ await this.zvmUpdated(cell.address.dnaId, newZvm, oldZvm);
30
+ if (oldZvm) {
31
+ oldZvm.unsubscribe(this);
32
+ }
33
+ this._zvms.set(cell.address.dnaId, newZvm);
34
+ this._zomeName = newZvm.zomeName;
35
+ newZvm.subscribe(this, '');
36
+ }, false);
37
+ this._consumers.set(cell.address.dnaId, consumer);
38
+ }
39
+ }
40
+ async zvmUpdated(_cellAddress, _newZvms, _oldZvms) {
41
+ }
42
+ shouldUpdate(changedProperties) {
43
+ if (changedProperties.has("_cells_via_context")) {
44
+ this._cells = this._cells_via_context;
45
+ this.requestZvm(true);
46
+ return false;
47
+ }
48
+ if (this._zvms.size == 0) {
49
+ this.requestZvm();
50
+ }
51
+ return this._zvms.size > 0;
52
+ }
53
+ }
54
+ __decorate([
55
+ consume({ context: cellMultiContext, subscribe: true }),
56
+ property({ attribute: false })
57
+ ], ZomeMultiElement.prototype, "_cells_via_context", void 0);
58
+ __decorate([
59
+ state()
60
+ ], ZomeMultiElement.prototype, "_zvms", void 0);
61
+ //# sourceMappingURL=ZomeMultiElement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ZomeMultiElement.js","sourceRoot":"","sources":["../src/ZomeMultiElement.ts"],"names":[],"mappings":"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","sourcesContent":["import {LitElement, PropertyValues} from \"lit\";\nimport {property, state} from \"lit/decorators.js\";\nimport {consume, ContextConsumer, createContext} from \"@lit/context\";\nimport {ZomeName} from \"@holochain/client\";\nimport { ZomeViewModel } from \"./ZomeViewModel\";\nimport {Cell, CellsMixin, DnaId, DnaIdMap} from \"@ddd-qc/cell-proxy\";\nimport {cellMultiContext} from \"./elements/cell-multi-context\";\n\n\n/**\n * LitElement that is bound to a specific ZomeViewModel, e.g. a View for the ViewModel\n */\nexport class ZomeMultiElement</*P,*/ ZVM extends ZomeViewModel> extends CellsMixin(LitElement) {\n\n constructor(public readonly defaultZomeName: ZomeName) {\n super();\n }\n\n @consume({ context: cellMultiContext, subscribe: true})\n @property({attribute: false})\n _cells_via_context!: Cell[];\n\n // @property({type: Object, attribute: false, hasChanged: (_v, _old) => true})\n // perspective!: P;\n\n protected _zomeName!: ZomeName;\n get zomeName(): ZomeName {return this._zomeName};\n\n /** Provided by Context depending on cellData.dnaHash */\n @state() protected _zvms: DnaIdMap<ZVM> = new DnaIdMap<ZVM>();\n\n\n private _consumers: DnaIdMap<any> = new DnaIdMap();\n\n\n /** -- Methods -- */\n\n /** Request zvm from Context based on current cells */\n private requestZvm(canRerequest: boolean = false) {\n if (!this._cells_via_context) {\n throw Error(`Context \"${cellMultiContext}\" not found from ZomeElement \"${this.constructor.name}\"`)\n }\n //console.log(\"ZomeMultiElement.requestZvm()\", this._cells_via_context);\n /* DVM already requested */\n if (!canRerequest && this._consumers.size > 0) {\n return;\n }\n for (const cell of this._cells!.values()) {\n //console.log(\"ZomeMultiElement.requestZvm() cell\", cell);\n const contextType = createContext<ZVM>('zvm/' + this.defaultZomeName + '/' + cell.address.dnaId.b64)\n console.log(`\\t\\t Requesting context \"${contextType}\"`)\n const consumer = new ContextConsumer(\n this,\n contextType,\n async (newZvm: ZVM, _dispose?: () => void): Promise<void> => {\n console.log(`\\t\\t Received value for context \"${contextType}\"`);\n const oldZvm = this._zvms.get(cell.address.dnaId);\n await this.zvmUpdated(cell.address.dnaId, newZvm, oldZvm);\n if (oldZvm) {\n oldZvm.unsubscribe(this);\n }\n this._zvms.set(cell.address.dnaId, newZvm);\n this._zomeName = newZvm.zomeName;\n newZvm.subscribe(this, '');\n },\n false, // true will call twice at init\n );\n this._consumers.set(cell.address.dnaId, consumer);\n }\n }\n\n\n /** Subclass can override this to get notified when a new ZVM has been received */\n protected async zvmUpdated(_cellAddress: DnaId, _newZvms: ZVM, _oldZvms?: ZVM): Promise<void> {\n //console.log(`\\t\\t Default zvmUpdated() called`)\n }\n\n\n /** */\n override shouldUpdate(changedProperties: PropertyValues<this>) {\n //console.log(\"ZomeElement.shouldUpdate() start\", !!this._zvm, this.installedCell);\n if (changedProperties.has(\"_cells_via_context\")) {\n //console.log(\"ZomeElement.shouldUpdate()\", this._cell_via_context)\n this._cells = this._cells_via_context;\n this.requestZvm(true);\n return false;\n }\n /** RequestZvm on first \"shouldUpdate\" */\n if (this._zvms.size == 0) {\n this.requestZvm();\n }\n return this._zvms.size > 0;\n }\n\n\n // /** Request ZVM if cell changed */\n // protected willUpdate(changedProperties: PropertyValues<this>) {\n // //console.log(\"ZomeElement.willUpdate()\", changedProperties)\n // if (changedProperties.has(\"_cell_via_context\")) {\n // this.requestZvm();\n // }\n // }\n\n}\n\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"cell-context.js","sourceRoot":"","sources":["../../src/elements/cell-context.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,eAAe,EAAE,aAAa,EAAC,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAC,UAAU,EAAE,IAAI,EAAiB,MAAM,KAAK,CAAC;AACrD,OAAO,EAAC,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAC,MAAM,mBAAmB,CAAC;AAIjE,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAO,eAAe,CAAC,CAAC;AAQzD,IAAM,WAAW,GAAjB,MAAM,WAAY,SAAQ,UAAU;IAApC;;QASgB,kBAAa,GAAG,IAAI,eAAe,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAMtE,iBAAY,GAAG,KAAK,CAAC;IA6CxC,CAAC;IAxCU,YAAY;QAEnB,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,MAAM,KAAK,CAAC,+CAA+C,CAAC,CAAA;QAE5E,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAA;QAGzD,IAAI,IAAI,CAAC,GAAG,EAAE;YACZ,IAAI,CAAC,YAAY,GAAG,IAAI,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;SAChF;IACH,CAAC;IAIkB,UAAU,CAAC,iBAAuC;QAEnE,IAAI,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;YAEjC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvC,OAAO,CAAC,GAAG,CAAC,+BAA+B,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAA;SAC9D;QAED,IAAI,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YAChC,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;YAC9B,IAAI,IAAI,CAAC,GAAG,EAAE;gBACZ,IAAI,CAAC,YAAY,GAAG,IAAI,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;aAChF;SACF;IACH,CAAC;IAIQ,MAAM;QACb,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACtB,OAAO,IAAI,CAAA,EAAE,CAAC;SACf;QACD,OAAO,IAAI,CAAA,eAAe,CAAC;IAC7B,CAAC;CACF,CAAA;AAzDC;IADC,QAAQ,CAAC,EAAC,IAAI,EAAE,MAAM,EAAC,CAAC;yCACb;AAGZ;IADC,QAAQ,CAAC,EAAC,IAAI,EAAE,MAAM,EAAC,CAAC;wCACN;AASF;IAAhB,KAAK,EAAE;iDAA8B;AAf3B,WAAW;IADvB,aAAa,CAAC,cAAc,CAAC;GACjB,WAAW,CA4DvB","sourcesContent":["import {ContextProvider, createContext} from '@lit/context';\nimport {LitElement, html, PropertyValues} from \"lit\";\nimport {property, state, customElement} from \"lit/decorators.js\";\nimport {Cell} from \"@ddd-qc/cell-proxy\";\nimport {DnaViewModel} from \"../DnaViewModel\";\n\nexport const cellContext = createContext<Cell>('lit-happ/cell');\n//export const cellContext = createContext<Cell>('lit-happ/cell/default');\n\n\n/**\n *\n */\n@customElement(\"cell-context\")\nexport class CellContext extends LitElement {\n\n @property({type: Object})\n cell!: Cell;\n\n @property({type: Object})\n dvm!: DnaViewModel;\n\n /* create a provider controller */\n /*@state()*/ private _cellProvider = new ContextProvider(this, cellContext, this.cell);\n\n // @ts-ignore\n private _dnaProvider?;\n\n\n @state() private _initialized = false;\n\n\n\n /** */\n override firstUpdated() {\n /** Cell */\n if (!this.cell) throw Error('\"cell\" property not defined in <cell-context>')\n //this._provider = new ContextProvider(this, cellContext, this.cell);\n this._cellProvider.setValue(this.cell);\n this._initialized = true;\n console.log(`\\t Cell context set to \"${this.cell.name}\"`)\n\n /** DVM */\n if (this.dvm) {\n this._dnaProvider = new ContextProvider(this, this.dvm.getContext(), this.dvm);\n }\n }\n\n\n /** Set provider to cell */\n protected override willUpdate(changedProperties: PropertyValues<this>) {\n //console.log(\"<cell-context>.willUpdate()\", changedProperties)\n if (changedProperties.has(\"cell\")) {\n //console.log(\"<cell-context>.willUpdate() changed installed cell\", this.cell.name)\n this._cellProvider.setValue(this.cell);\n console.log(`\\t Cell context changed to \"${this.cell.name}\"`)\n }\n\n if (changedProperties.has(\"dvm\")) {\n this._dnaProvider = undefined;\n if (this.dvm) {\n this._dnaProvider = new ContextProvider(this, this.dvm.getContext(), this.dvm);\n }\n }\n }\n\n\n /** */\n override render() {\n if (!this._initialized) {\n return html``;\n }\n return html`<slot></slot>`;\n }\n}\n"]}
1
+ {"version":3,"file":"cell-context.js","sourceRoot":"","sources":["../../src/elements/cell-context.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,eAAe,EAAE,aAAa,EAAC,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAC,UAAU,EAAE,IAAI,EAAiB,MAAM,KAAK,CAAC;AACrD,OAAO,EAAC,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAC,MAAM,mBAAmB,CAAC;AAIjE,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAO,eAAe,CAAC,CAAC;AAQzD,IAAM,WAAW,GAAjB,MAAM,WAAY,SAAQ,UAAU;IAApC;;QASgB,kBAAa,GAAG,IAAI,eAAe,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAMtE,iBAAY,GAAG,KAAK,CAAC;IA6CxC,CAAC;IAxCU,YAAY;QAEnB,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,MAAM,KAAK,CAAC,+CAA+C,CAAC,CAAA;QAE5E,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAA;QAGzD,IAAI,IAAI,CAAC,GAAG,EAAE;YACZ,IAAI,CAAC,YAAY,GAAG,IAAI,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;SAChF;IACH,CAAC;IAIkB,UAAU,CAAC,iBAAuC;QAEnE,IAAI,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;YAEjC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvC,OAAO,CAAC,GAAG,CAAC,+BAA+B,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAA;SAC9D;QAED,IAAI,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YAChC,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;YAC9B,IAAI,IAAI,CAAC,GAAG,EAAE;gBACZ,IAAI,CAAC,YAAY,GAAG,IAAI,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;aAChF;SACF;IACH,CAAC;IAIQ,MAAM;QACb,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACtB,OAAO,IAAI,CAAA,EAAE,CAAC;SACf;QACD,OAAO,IAAI,CAAA,eAAe,CAAC;IAC7B,CAAC;CACF,CAAA;AAzDC;IADC,QAAQ,CAAC,EAAC,IAAI,EAAE,MAAM,EAAC,CAAC;yCACb;AAGZ;IADC,QAAQ,CAAC,EAAC,IAAI,EAAE,MAAM,EAAC,CAAC;wCACN;AASF;IAAhB,KAAK,EAAE;iDAA8B;AAf3B,WAAW;IADvB,aAAa,CAAC,cAAc,CAAC;GACjB,WAAW,CA4DvB","sourcesContent":["import {ContextProvider, createContext} from '@lit/context';\r\nimport {LitElement, html, PropertyValues} from \"lit\";\r\nimport {property, state, customElement} from \"lit/decorators.js\";\r\nimport {Cell} from \"@ddd-qc/cell-proxy\";\r\nimport {DnaViewModel} from \"../DnaViewModel\";\r\n\r\nexport const cellContext = createContext<Cell>('lit-happ/cell');\r\n//export const cellContext = createContext<Cell>('lit-happ/cell/default');\r\n\r\n\r\n/**\r\n *\r\n */\r\n@customElement(\"cell-context\")\r\nexport class CellContext extends LitElement {\r\n\r\n @property({type: Object})\r\n cell!: Cell;\r\n\r\n @property({type: Object})\r\n dvm!: DnaViewModel;\r\n\r\n /* create a provider controller */\r\n /*@state()*/ private _cellProvider = new ContextProvider(this, cellContext, this.cell);\r\n\r\n // @ts-ignore\r\n private _dnaProvider?;\r\n\r\n\r\n @state() private _initialized = false;\r\n\r\n\r\n\r\n /** */\r\n override firstUpdated() {\r\n /** Cell */\r\n if (!this.cell) throw Error('\"cell\" property not defined in <cell-context>')\r\n //this._provider = new ContextProvider(this, cellContext, this.cell);\r\n this._cellProvider.setValue(this.cell);\r\n this._initialized = true;\r\n console.log(`\\t Cell context set to \"${this.cell.name}\"`)\r\n\r\n /** DVM */\r\n if (this.dvm) {\r\n this._dnaProvider = new ContextProvider(this, this.dvm.getContext(), this.dvm);\r\n }\r\n }\r\n\r\n\r\n /** Set provider to cell */\r\n protected override willUpdate(changedProperties: PropertyValues<this>) {\r\n //console.log(\"<cell-context>.willUpdate()\", changedProperties)\r\n if (changedProperties.has(\"cell\")) {\r\n //console.log(\"<cell-context>.willUpdate() changed installed cell\", this.cell.name)\r\n this._cellProvider.setValue(this.cell);\r\n console.log(`\\t Cell context changed to \"${this.cell.name}\"`)\r\n }\r\n\r\n if (changedProperties.has(\"dvm\")) {\r\n this._dnaProvider = undefined;\r\n if (this.dvm) {\r\n this._dnaProvider = new ContextProvider(this, this.dvm.getContext(), this.dvm);\r\n }\r\n }\r\n }\r\n\r\n\r\n /** */\r\n override render() {\r\n if (!this._initialized) {\r\n return html``;\r\n }\r\n return html`<slot></slot>`;\r\n }\r\n}\r\n"]}
@@ -0,0 +1,17 @@
1
+ import { LitElement, PropertyValues } from "lit";
2
+ import { Cell } from "@ddd-qc/cell-proxy";
3
+ import { DnaViewModel } from "../DnaViewModel";
4
+ export declare const cellMultiContext: {
5
+ __context__: Cell[];
6
+ };
7
+ export declare class CellMultiContext extends LitElement {
8
+ cells: Cell[];
9
+ dvm: DnaViewModel | undefined;
10
+ private _cellProvider;
11
+ private _dnaProvider?;
12
+ private _initialized;
13
+ firstUpdated(): void;
14
+ protected willUpdate(changedProperties: PropertyValues<this>): void;
15
+ render(): import("lit-html").TemplateResult<1>;
16
+ }
17
+ //# sourceMappingURL=cell-multi-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cell-multi-context.d.ts","sourceRoot":"","sources":["../../src/elements/cell-multi-context.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,UAAU,EAAQ,cAAc,EAAC,MAAM,KAAK,CAAC;AAErD,OAAO,EAAC,IAAI,EAAC,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAC,YAAY,EAAC,MAAM,iBAAiB,CAAC;AAE7C,eAAO,MAAM,gBAAgB;;CAA8C,CAAC;AAO5E,qBACa,gBAAiB,SAAQ,UAAU;IAG9C,KAAK,EAAE,IAAI,EAAE,CAAM;IAGnB,GAAG,EAAE,YAAY,GAAG,SAAS,CAAa;IAG7B,OAAO,CAAC,aAAa,CAA2D;IAG7F,OAAO,CAAC,YAAY,CAAC,CAAC;IAEb,OAAO,CAAC,YAAY,CAAS;IAM7B,YAAY;cAkBF,UAAU,CAAC,iBAAiB,EAAE,cAAc,CAAC,IAAI,CAAC;IAkB5D,MAAM;CAMhB"}
@@ -0,0 +1,54 @@
1
+ import { __decorate } from "tslib";
2
+ import { ContextProvider, createContext } from '@lit/context';
3
+ import { LitElement, html } from "lit";
4
+ import { property, state, customElement } from "lit/decorators.js";
5
+ export const cellMultiContext = createContext('lit-happ/cellMulti');
6
+ let CellMultiContext = class CellMultiContext extends LitElement {
7
+ constructor() {
8
+ super(...arguments);
9
+ this.cells = [];
10
+ this.dvm = undefined;
11
+ this._cellProvider = new ContextProvider(this, cellMultiContext, this.cells);
12
+ this._initialized = false;
13
+ }
14
+ firstUpdated() {
15
+ this._cellProvider.setValue(this.cells);
16
+ this._initialized = true;
17
+ console.log(`\t Cell context set:`, this.cells.map((cell) => cell.name));
18
+ if (this.dvm) {
19
+ this._dnaProvider = new ContextProvider(this, this.dvm.getContext(), this.dvm);
20
+ }
21
+ }
22
+ willUpdate(changedProperties) {
23
+ if (changedProperties.has("cells")) {
24
+ this._cellProvider.setValue(this.cells);
25
+ console.log(`\t Cell context changed:`, this.cells.map((cell) => cell.name));
26
+ }
27
+ if (changedProperties.has("dvm")) {
28
+ this._dnaProvider = undefined;
29
+ if (this.dvm) {
30
+ this._dnaProvider = new ContextProvider(this, this.dvm.getContext(), this.dvm);
31
+ }
32
+ }
33
+ }
34
+ render() {
35
+ if (!this._initialized) {
36
+ return html ``;
37
+ }
38
+ return html `<slot></slot>`;
39
+ }
40
+ };
41
+ __decorate([
42
+ property()
43
+ ], CellMultiContext.prototype, "cells", void 0);
44
+ __decorate([
45
+ property({ type: Object })
46
+ ], CellMultiContext.prototype, "dvm", void 0);
47
+ __decorate([
48
+ state()
49
+ ], CellMultiContext.prototype, "_initialized", void 0);
50
+ CellMultiContext = __decorate([
51
+ customElement("cell-multi-context")
52
+ ], CellMultiContext);
53
+ export { CellMultiContext };
54
+ //# sourceMappingURL=cell-multi-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cell-multi-context.js","sourceRoot":"","sources":["../../src/elements/cell-multi-context.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,eAAe,EAAE,aAAa,EAAC,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAC,UAAU,EAAE,IAAI,EAAiB,MAAM,KAAK,CAAC;AACrD,OAAO,EAAC,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAC,MAAM,mBAAmB,CAAC;AAIjE,MAAM,CAAC,MAAM,gBAAgB,GAAG,aAAa,CAAS,oBAAoB,CAAC,CAAC;AAQrE,IAAM,gBAAgB,GAAtB,MAAM,gBAAiB,SAAQ,UAAU;IAAzC;;QAGL,UAAK,GAAW,EAAE,CAAC;QAGnB,QAAG,GAA6B,SAAS,CAAC;QAGrB,kBAAa,GAAG,IAAI,eAAe,CAAC,IAAI,EAAE,gBAAgB,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAK5E,iBAAY,GAAG,KAAK,CAAC;IAgDxC,CAAC;IA1CU,YAAY;QAMnB,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;QAGxE,IAAI,IAAI,CAAC,GAAG,EAAE;YACZ,IAAI,CAAC,YAAY,GAAG,IAAI,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;SAChF;IACH,CAAC;IAIkB,UAAU,CAAC,iBAAuC;QAEnE,IAAI,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;YAElC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACxC,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;SAC7E;QAED,IAAI,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YAChC,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;YAC9B,IAAI,IAAI,CAAC,GAAG,EAAE;gBACZ,IAAI,CAAC,YAAY,GAAG,IAAI,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;aAChF;SACF;IACH,CAAC;IAIQ,MAAM;QACb,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACtB,OAAO,IAAI,CAAA,EAAE,CAAC;SACf;QACD,OAAO,IAAI,CAAA,eAAe,CAAC;IAC7B,CAAC;CACF,CAAA;AA3DC;IADC,QAAQ,EAAE;+CACQ;AAGnB;IADC,QAAQ,CAAC,EAAC,IAAI,EAAE,MAAM,EAAC,CAAC;6CACiB;AAQzB;IAAhB,KAAK,EAAE;sDAA8B;AAd3B,gBAAgB;IAD5B,aAAa,CAAC,oBAAoB,CAAC;GACvB,gBAAgB,CA8D5B","sourcesContent":["import {ContextProvider, createContext} from '@lit/context';\nimport {LitElement, html, PropertyValues} from \"lit\";\nimport {property, state, customElement} from \"lit/decorators.js\";\nimport {Cell} from \"@ddd-qc/cell-proxy\";\nimport {DnaViewModel} from \"../DnaViewModel\";\n\nexport const cellMultiContext = createContext<Cell[]>('lit-happ/cellMulti');\n//export const cellContext = createContext<Cell>('lit-happ/cell/default');\n\n\n/**\n *\n */\n@customElement(\"cell-multi-context\")\nexport class CellMultiContext extends LitElement {\n\n @property()\n cells: Cell[] = [];\n\n @property({type: Object})\n dvm: DnaViewModel | undefined = undefined;\n\n /* create a provider controller */\n /*@state()*/ private _cellProvider = new ContextProvider(this, cellMultiContext, this.cells);\n\n // @ts-ignore\n private _dnaProvider?;\n\n @state() private _initialized = false;\n\n\n /** -- Methods -- */\n\n /** */\n override firstUpdated() {\n // /** Cell */\n // if (this.cells.length == 0) {\n // throw Error('No cells set by <cell-context>')\n // }\n //this._provider = new ContextProvider(this, cellContext, this.cell);\n this._cellProvider.setValue(this.cells);\n this._initialized = true;\n console.log(`\\t Cell context set:`, this.cells.map((cell) => cell.name))\n\n /** DVM */\n if (this.dvm) {\n this._dnaProvider = new ContextProvider(this, this.dvm.getContext(), this.dvm);\n }\n }\n\n\n /** Set provider to cell */\n protected override willUpdate(changedProperties: PropertyValues<this>) {\n //console.log(\"<cell-context>.willUpdate()\", changedProperties)\n if (changedProperties.has(\"cells\")) {\n //console.log(\"<cell-context>.willUpdate() changed installed cell\", this.cell.name)\n this._cellProvider.setValue(this.cells);\n console.log(`\\t Cell context changed:`, this.cells.map((cell) => cell.name))\n }\n\n if (changedProperties.has(\"dvm\")) {\n this._dnaProvider = undefined;\n if (this.dvm) {\n this._dnaProvider = new ContextProvider(this, this.dvm.getContext(), this.dvm);\n }\n }\n }\n\n\n /** */\n override render() {\n if (!this._initialized) {\n return html``;\n }\n return html`<slot></slot>`;\n }\n}\n"]}
@@ -6,10 +6,10 @@ import { cellContext } from "./cell-context";
6
6
  let ViewCellContext = class ViewCellContext extends LitElement {
7
7
  render() {
8
8
  const cellName = this.cell === undefined ? "undefined" : this.cell.name;
9
- return html `
10
- <div>
11
- <span><b>(Cell set to: "${cellName}")</b></span>
12
- </div>
9
+ return html `
10
+ <div>
11
+ <span><b>(Cell set to: "${cellName}")</b></span>
12
+ </div>
13
13
  `;
14
14
  }
15
15
  };
@@ -1 +1 @@
1
- {"version":3,"file":"view-cell-context.js","sourceRoot":"","sources":["../../src/elements/view-cell-context.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,UAAU,EAAE,IAAI,EAAC,MAAM,KAAK,CAAC;AACrC,OAAO,EAAC,QAAQ,EAAE,aAAa,EAAC,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAC,OAAO,EAAC,MAAM,cAAc,CAAC;AACrC,OAAO,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AASpC,IAAM,eAAe,GAArB,MAAM,eAAgB,SAAQ,UAAU;IAMpC,MAAM;QACb,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,KAAK,SAAS,CAAA,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QACvE,OAAO,IAAI,CAAA;;kCAEmB,QAAQ;;KAErC,CAAC;IACJ,CAAC;CACF,CAAA;AAVC;IAFC,OAAO,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,EAAC,CAAC;IACjD,QAAQ,CAAC,EAAC,IAAI,EAAE,MAAM,EAAC,CAAC;6CACb;AAJD,eAAe;IAD3B,aAAa,CAAC,mBAAmB,CAAC;GACtB,eAAe,CAc3B","sourcesContent":["import {LitElement, html} from \"lit\";\nimport {property, customElement} from \"lit/decorators.js\";\nimport {consume} from \"@lit/context\";\nimport {cellContext} from \"./cell-context\";\nimport {Cell} from \"@ddd-qc/cell-proxy\";\n\n\n/**\n * LitElement that shows the cellContext as a <div>\n * Used for debugging\n */\n@customElement(\"view-cell-context\")\nexport class ViewCellContext extends LitElement {\n\n @consume({ context: cellContext, subscribe: true})\n @property({type: Object})\n cell!: Cell;\n\n override render() {\n const cellName = this.cell === undefined? \"undefined\" : this.cell.name;\n return html`\n <div>\n <span><b>(Cell set to: \"${cellName}\")</b></span>\n </div>\n `;\n }\n}\n"]}
1
+ {"version":3,"file":"view-cell-context.js","sourceRoot":"","sources":["../../src/elements/view-cell-context.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,UAAU,EAAE,IAAI,EAAC,MAAM,KAAK,CAAC;AACrC,OAAO,EAAC,QAAQ,EAAE,aAAa,EAAC,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAC,OAAO,EAAC,MAAM,cAAc,CAAC;AACrC,OAAO,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AASpC,IAAM,eAAe,GAArB,MAAM,eAAgB,SAAQ,UAAU;IAMpC,MAAM;QACb,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,KAAK,SAAS,CAAA,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QACvE,OAAO,IAAI,CAAA;;kCAEmB,QAAQ;;KAErC,CAAC;IACJ,CAAC;CACF,CAAA;AAVC;IAFC,OAAO,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,EAAC,CAAC;IACjD,QAAQ,CAAC,EAAC,IAAI,EAAE,MAAM,EAAC,CAAC;6CACb;AAJD,eAAe;IAD3B,aAAa,CAAC,mBAAmB,CAAC;GACtB,eAAe,CAc3B","sourcesContent":["import {LitElement, html} from \"lit\";\r\nimport {property, customElement} from \"lit/decorators.js\";\r\nimport {consume} from \"@lit/context\";\r\nimport {cellContext} from \"./cell-context\";\r\nimport {Cell} from \"@ddd-qc/cell-proxy\";\r\n\r\n\r\n/**\r\n * LitElement that shows the cellContext as a <div>\r\n * Used for debugging\r\n */\r\n@customElement(\"view-cell-context\")\r\nexport class ViewCellContext extends LitElement {\r\n\r\n @consume({ context: cellContext, subscribe: true})\r\n @property({type: Object})\r\n cell!: Cell;\r\n\r\n override render() {\r\n const cellName = this.cell === undefined? \"undefined\" : this.cell.name;\r\n return html`\r\n <div>\r\n <span><b>(Cell set to: \"${cellName}\")</b></span>\r\n </div>\r\n `;\r\n }\r\n}\r\n"]}
@@ -0,0 +1,7 @@
1
+ import { LitElement } from "lit";
2
+ import { Cell } from "@ddd-qc/cell-proxy";
3
+ export declare class ViewCellMultiContext extends LitElement {
4
+ cells: Cell[];
5
+ render(): import("lit-html").TemplateResult<1>;
6
+ }
7
+ //# sourceMappingURL=view-cell-multi-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view-cell-multi-context.d.ts","sourceRoot":"","sources":["../../src/elements/view-cell-multi-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAO,MAAM,KAAK,CAAC;AAGrC,OAAO,EAAC,IAAI,EAAC,MAAM,oBAAoB,CAAC;AAQxC,qBACa,oBAAqB,SAAQ,UAAU;IAIlD,KAAK,EAAE,IAAI,EAAE,CAAK;IAET,MAAM;CAQhB"}
@@ -0,0 +1,28 @@
1
+ import { __decorate } from "tslib";
2
+ import { LitElement, html } from "lit";
3
+ import { property, customElement } from "lit/decorators.js";
4
+ import { consume } from "@lit/context";
5
+ import { cellMultiContext } from "./cell-multi-context";
6
+ let ViewCellMultiContext = class ViewCellMultiContext extends LitElement {
7
+ constructor() {
8
+ super(...arguments);
9
+ this.cells = [];
10
+ }
11
+ render() {
12
+ const cellNames = this.cells.map((cell) => "" + cell.name + ", ");
13
+ return html `
14
+ <div>
15
+ <span><b>(Context has ${this.cells.length} cells: "${cellNames}")</b></span>
16
+ </div>
17
+ `;
18
+ }
19
+ };
20
+ __decorate([
21
+ consume({ context: cellMultiContext, subscribe: true }),
22
+ property()
23
+ ], ViewCellMultiContext.prototype, "cells", void 0);
24
+ ViewCellMultiContext = __decorate([
25
+ customElement("view-cell-multi-context")
26
+ ], ViewCellMultiContext);
27
+ export { ViewCellMultiContext };
28
+ //# sourceMappingURL=view-cell-multi-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view-cell-multi-context.js","sourceRoot":"","sources":["../../src/elements/view-cell-multi-context.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,UAAU,EAAE,IAAI,EAAC,MAAM,KAAK,CAAC;AACrC,OAAO,EAAC,QAAQ,EAAE,aAAa,EAAC,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAC,OAAO,EAAC,MAAM,cAAc,CAAC;AAErC,OAAO,EAAC,gBAAgB,EAAC,MAAM,sBAAsB,CAAC;AAQ/C,IAAM,oBAAoB,GAA1B,MAAM,oBAAqB,SAAQ,UAAU;IAA7C;;QAIL,UAAK,GAAW,EAAE,CAAA;IAUpB,CAAC;IARU,MAAM;QACb,MAAM,SAAS,GAAY,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;QAC3E,OAAO,IAAI,CAAA;;gCAEiB,IAAI,CAAC,KAAK,CAAC,MAAM,YAAY,SAAS;;KAEjE,CAAC;IACJ,CAAC;CACF,CAAA;AAVC;IAFC,OAAO,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,IAAI,EAAC,CAAC;IACtD,QAAQ,EAAE;mDACO;AAJP,oBAAoB;IADhC,aAAa,CAAC,yBAAyB,CAAC;GAC5B,oBAAoB,CAchC","sourcesContent":["import {LitElement, html} from \"lit\";\nimport {property, customElement} from \"lit/decorators.js\";\nimport {consume} from \"@lit/context\";\nimport {Cell} from \"@ddd-qc/cell-proxy\";\nimport {cellMultiContext} from \"./cell-multi-context\";\n\n\n/**\n * LitElement that shows the cellContext as a <div>\n * Used for debugging\n */\n@customElement(\"view-cell-multi-context\")\nexport class ViewCellMultiContext extends LitElement {\n\n @consume({ context: cellMultiContext, subscribe: true})\n @property()\n cells: Cell[] = []\n\n override render() {\n const cellNames: string[] =this.cells.map((cell) => \"\" + cell.name + \", \");\n return html`\n <div>\n <span><b>(Context has ${this.cells.length} cells: \"${cellNames}\")</b></span>\n </div>\n `;\n }\n}\n"]}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  export * from "./globals";
2
+ export * from "./definitions";
2
3
  export * from "./HappViewModel";
3
4
  export * from "./ZomeViewModel";
4
5
  export * from "./ZomeViewModelWithSignals";
@@ -8,10 +9,13 @@ export * from "./ZomeElement";
8
9
  export * from "./DnaElement";
9
10
  export * from "./HappElement";
10
11
  export * from "./HappMultiElement";
11
- export * from "./definitions";
12
+ export * from "./ZomeMultiElement";
13
+ export * from "./DnaMultiElement";
12
14
  export * from "./elements/entry-def-select";
15
+ export * from "./elements/dvm-inspect";
13
16
  export * from "./elements/cell-context";
14
17
  export * from "./elements/view-cell-context";
15
- export * from "./elements/dvm-inspect";
18
+ export * from "./elements/cell-multi-context";
19
+ export * from "./elements/view-cell-multi-context";
16
20
  export * from "@ddd-qc/cell-proxy";
17
21
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAE1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAE9B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wBAAwB,CAAC;AAIvC,cAAc,oBAAoB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAE1B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,oCAAoC,CAAC;AAKnD,cAAc,oBAAoB,CAAA"}
package/dist/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  export * from "./globals";
2
+ export * from "./definitions";
2
3
  export * from "./HappViewModel";
3
4
  export * from "./ZomeViewModel";
4
5
  export * from "./ZomeViewModelWithSignals";
@@ -8,10 +9,13 @@ export * from "./ZomeElement";
8
9
  export * from "./DnaElement";
9
10
  export * from "./HappElement";
10
11
  export * from "./HappMultiElement";
11
- export * from "./definitions";
12
+ export * from "./ZomeMultiElement";
13
+ export * from "./DnaMultiElement";
12
14
  export * from "./elements/entry-def-select";
15
+ export * from "./elements/dvm-inspect";
13
16
  export * from "./elements/cell-context";
14
17
  export * from "./elements/view-cell-context";
15
- export * from "./elements/dvm-inspect";
18
+ export * from "./elements/cell-multi-context";
19
+ export * from "./elements/view-cell-multi-context";
16
20
  export * from "@ddd-qc/cell-proxy";
17
21
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAE1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAE9B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wBAAwB,CAAC;AAIvC,cAAc,oBAAoB,CAAA","sourcesContent":["export * from \"./globals\";\n\nexport * from \"./HappViewModel\";\nexport * from \"./ZomeViewModel\";\nexport * from \"./ZomeViewModelWithSignals\";\nexport * from \"./DnaViewModel\";\nexport * from \"./ViewModel\";\nexport * from \"./ZomeElement\";\nexport * from \"./DnaElement\";\nexport * from \"./HappElement\";\nexport * from \"./HappMultiElement\";\nexport * from \"./definitions\";\n\nexport * from \"./elements/entry-def-select\";\nexport * from \"./elements/cell-context\";\nexport * from \"./elements/view-cell-context\";\nexport * from \"./elements/dvm-inspect\";\n\n\n/* Include all from cell-proxy */\nexport * from \"@ddd-qc/cell-proxy\"\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAE1B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,oCAAoC,CAAC;AAKnD,cAAc,oBAAoB,CAAA","sourcesContent":["export * from \"./globals\";\n\nexport * from \"./definitions\";\nexport * from \"./HappViewModel\";\nexport * from \"./ZomeViewModel\";\nexport * from \"./ZomeViewModelWithSignals\";\nexport * from \"./DnaViewModel\";\nexport * from \"./ViewModel\";\nexport * from \"./ZomeElement\";\nexport * from \"./DnaElement\";\nexport * from \"./HappElement\";\nexport * from \"./HappMultiElement\";\nexport * from \"./ZomeMultiElement\";\nexport * from \"./DnaMultiElement\";\n\n\nexport * from \"./elements/entry-def-select\";\nexport * from \"./elements/dvm-inspect\";\nexport * from \"./elements/cell-context\";\nexport * from \"./elements/view-cell-context\";\nexport * from \"./elements/cell-multi-context\";\nexport * from \"./elements/view-cell-multi-context\";\n\n\n\n/* Include all from cell-proxy */\nexport * from \"@ddd-qc/cell-proxy\"\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ddd-qc/lit-happ",
3
- "version": "0.29.2",
3
+ "version": "0.29.3",
4
4
  "description": "MVVM Framework for holochain apps using Lit",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",