@ddd-qc/lit-happ 0.13.1 → 0.13.2

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.
@@ -27,9 +27,9 @@ export class DnaElement extends CellMixin(RoleMixin(ScopedElementsMixin(LitEleme
27
27
  }
28
28
  const contextType = createContext('dvm/' + this.cell.name);
29
29
  console.log(`\t\t Requesting context "${contextType}"`);
30
- /*const consumer =*/ new ContextConsumer(this, contextType, (value, dispose) => {
30
+ /*const consumer =*/ new ContextConsumer(this, contextType, async (value, dispose) => {
31
31
  console.log(`\t\t Received value for context "${contextType}"`);
32
- this.dvmUpdated(value, this._dvm);
32
+ await this.dvmUpdated(value, this._dvm);
33
33
  if (this._dvm) {
34
34
  this._dvm.unsubscribe(this);
35
35
  }
@@ -1 +1 @@
1
- {"version":3,"file":"DnaElement.js","sourceRoot":"","sources":["../src/DnaElement.ts"],"names":[],"mappings":"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","sourcesContent":["import {ScopedElementsMixin} from \"@open-wc/scoped-elements\";\nimport {LitElement, PropertyValues} from \"lit\";\nimport {property, state} from \"lit/decorators.js\";\nimport {ContextConsumer, contextProvided, createContext} from \"@lit-labs/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(ScopedElementsMixin(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 @contextProvided({ 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\n /** -- Methods -- */\n\n /** */\n protected requestDvm() {\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 const contextType = createContext<DVM>('dvm/'+ this.cell.name);\n console.log(`\\t\\t Requesting context \"${contextType}\"`)\n /*const consumer =*/ new ContextConsumer(\n this,\n contextType,\n (value: DVM, dispose?: () => void): void => {\n console.log(`\\t\\t Received value for context \"${contextType}\"`)\n 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 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 willUpdate(changedProperties: PropertyValues<this>) {\n if (changedProperties.has(\"_cell_via_context\")) {\n this.requestDvm();\n }\n }\n}\n"]}
1
+ {"version":3,"file":"DnaElement.js","sourceRoot":"","sources":["../src/DnaElement.ts"],"names":[],"mappings":"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","sourcesContent":["import {ScopedElementsMixin} from \"@open-wc/scoped-elements\";\nimport {LitElement, PropertyValues} from \"lit\";\nimport {property, state} from \"lit/decorators.js\";\nimport {ContextConsumer, contextProvided, createContext} from \"@lit-labs/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(ScopedElementsMixin(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 @contextProvided({ 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\n /** -- Methods -- */\n\n /** */\n protected requestDvm() {\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 const contextType = createContext<DVM>('dvm/'+ this.cell.name);\n console.log(`\\t\\t Requesting context \"${contextType}\"`)\n /*const 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 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 willUpdate(changedProperties: PropertyValues<this>) {\n if (changedProperties.has(\"_cell_via_context\")) {\n this.requestDvm();\n }\n }\n}\n"]}
@@ -16,7 +16,6 @@ export type DvmConstructor = typeof RoleSpecific & {
16
16
  new (host: ReactiveElement, proxy: ConductorAppProxy, idOrHcl: HCL | InstalledAppId): DnaViewModel;
17
17
  };
18
18
  declare const DnaViewModel_base: (abstract new (...args: any[]) => {
19
- /** Interface specific to DnaViewModel class */
20
19
  _cell?: import("@ddd-qc/cell-proxy").Cell;
21
20
  readonly cell: import("@ddd-qc/cell-proxy").Cell;
22
21
  }) & ((abstract new (...args: any[]) => {
@@ -64,7 +64,7 @@ export class DnaViewModel extends CellMixin(RoleMixin(ViewModel)) {
64
64
  /** */
65
65
  async authorizeZomeCalls(adminWs) {
66
66
  let allFnNames = [];
67
- for (const [zomeName, zvm] of Object.entries(this._zomeViewModels)) {
67
+ for (const [_zomeName, zvm] of Object.entries(this._zomeViewModels)) {
68
68
  allFnNames = allFnNames.concat(zvm.zomeProxy.fnNames);
69
69
  }
70
70
  const grantedFns = { [GrantedFunctionsType.Listed]: allFnNames };
@@ -84,7 +84,7 @@ export class DnaViewModel extends CellMixin(RoleMixin(ViewModel)) {
84
84
  }
85
85
  /** */
86
86
  async probeAll() {
87
- for (const [name, zvm] of Object.entries(this._zomeViewModels)) {
87
+ for (const [_name, zvm] of Object.entries(this._zomeViewModels)) {
88
88
  //console.log("Dvm.probeAll()", name)
89
89
  await zvm.probeAll();
90
90
  }
@@ -1 +1 @@
1
- {"version":3,"file":"DnaViewModel.js","sourceRoot":"","sources":["../src/DnaViewModel.ts"],"names":[],"mappings":"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","sourcesContent":["import {ZomeViewModel} from \"./ZomeViewModel\";\nimport {ReactiveElement} from \"lit\";\nimport {ViewModel} from \"./ViewModel\";\nimport {\n AdminWebsocket,\n AppSignalCb,\n GrantedFunctionsType,\n InstalledAppId,\n ZomeName,\n} from \"@holochain/client\";\nimport {DnaModifiersOptions, ZvmDef} from \"./definitions\";\nimport {createContext} from \"@lit-labs/context\";\nimport {\n CellProxy,\n ConductorAppProxy,\n HCL,\n Dictionary, CellMixin\n} from \"@ddd-qc/cell-proxy\";\nimport {RoleMixin, RoleSpecific} from \"./roleMixin\";\n\n\n//export type IDnaViewModel = _DnaViewModel & ICellDef & typeof RoleSpecific;\n\n/** Interface specific to DnaViewModel class */\ninterface IDnaViewModel {\n dumpLogs(zomeName?: ZomeName): void;\n fetchAllEntryDefs(): Promise<Dictionary<[string, boolean][]>>;\n //get entryTypes(): Dictionary<[string, boolean][]>;\n //getZomeEntryDefs(zomeName: ZomeName): [string, boolean][] | undefined;\n //getZomeViewModel(zomeName: ZomeName): ZomeViewModel | undefined\n}\n\nexport type DvmConstructor = typeof RoleSpecific & {DNA_MODIFIERS: DnaModifiersOptions} & {\n new(host: ReactiveElement, proxy: ConductorAppProxy, idOrHcl: HCL | InstalledAppId): DnaViewModel;\n};\n\n\n/**\n * Abstract ViewModel for a DNA.\n * It holds the CellProxy and all the ZomeViewModels of the DNA.\n * A DNA is expected to derive this class and add extra logic at the DNA level.\n * TODO: Split into RoleViewModel and CellViewModel (e.g. have call logs separated by role)\n */\nexport abstract class DnaViewModel extends CellMixin(RoleMixin(ViewModel)) implements IDnaViewModel {\n\n /* private */ static ZVM_DEFS: ZvmDef[];\n static DNA_MODIFIERS: DnaModifiersOptions;\n\n /** Ctor */\n constructor(public readonly host: ReactiveElement, conductorAppProxy: ConductorAppProxy, idOrHcl: HCL | InstalledAppId) {\n super();\n if (typeof idOrHcl === 'object') {\n this.baseRoleName = idOrHcl.baseRoleName;\n this.hcl = idOrHcl;\n } else {\n this.hcl = new HCL(idOrHcl, this.baseRoleName);\n }\n const dvmCtor = (this.constructor as typeof DnaViewModel)\n const zvmDefs = dvmCtor.ZVM_DEFS;\n this._cellProxy = conductorAppProxy.getCellProxy(this.hcl); // WARN can throw error\n this._cell = this._cellProxy.cell;\n console.log(`DVM.ctor of ${this.baseRoleName}`, this._cellProxy.cell);\n /** Create all ZVMs for this DNA */\n for (const zvmDef of zvmDefs) {\n let zvm;\n if (Array.isArray(zvmDef)) {\n zvm = new zvmDef[0](this._cellProxy, zvmDef[1]);\n } else {\n zvm = new zvmDef(this._cellProxy);\n }\n // TODO check zvm.zomeName exists in _cellProxy\n this._zomeViewModels[zvm.zomeName] = zvm;\n this._zomeNames[zvmDef.constructor.name] = zvm.zomeName;\n }\n this.provideContext(host); // TODO move this to host.connectedCallback? e.g. change ViewModel to a ReactiveController\n }\n\n\n /** -- Fields -- */\n\n protected _cellProxy: CellProxy;\n /* ZomeName -> Zvm */\n protected _zomeViewModels: Dictionary<ZomeViewModel> = {};\n /* ZvmCtorName -> ZomeName */\n protected _zomeNames: Dictionary<ZomeName> = {};\n private _allEntryDefs: Dictionary<[string, boolean][]> = {};\n\n public readonly hcl: HCL;\n\n\n /** -- Getters -- */\n\n getZomeEntryDefs(zomeName: ZomeName): [string, boolean][] | undefined {return this._allEntryDefs[zomeName]}\n getZomeViewModel(zomeName: ZomeName): ZomeViewModel | undefined {return this._zomeViewModels[zomeName]}\n getZomeName(zvm: typeof ZomeViewModel): ZomeName | undefined { return this._zomeNames[zvm.constructor.name]}\n\n /** -- Methods -- */\n\n /** Override so we can provide context of all zvms */\n /*private*/ provideContext(host: ReactiveElement): void {\n //console.log(\"DVM.provideContext()\", host, this)\n super.provideContext(host);\n for (const zvm of Object.values(this._zomeViewModels)) {\n zvm.provideContext(host)\n }\n }\n\n getContext(): any {return createContext<typeof this>('dvm/' + this.cell.name)};\n\n\n /** */\n async authorizeZomeCalls(adminWs: AdminWebsocket): Promise<void> {\n let allFnNames = [];\n for (const [zomeName, zvm] of Object.entries(this._zomeViewModels)) {\n allFnNames = allFnNames.concat(zvm.zomeProxy.fnNames)\n }\n const grantedFns = { [GrantedFunctionsType.Listed]: allFnNames }\n try {\n console.log(\"authorizeSigningCredentials: \" + this.cell.hcl().toString(), allFnNames);\n await adminWs.authorizeSigningCredentials(this.cell.id, grantedFns);\n } catch(e) {\n console.warn(\"authorizeSigningCredentials FAILED.\", e);\n }\n // this._signingProps = getSigningCredentials(this.cellId);\n // console.log({signProps: this._signingProps})\n //\n // for (const [zomeName, zvm] of Object.entries(this._zomeViewModels)) {\n // zvm.zomeProxy.setSigningProps(this._signingProps);\n // }\n }\n\n\n /** */\n async probeAll(): Promise<void> {\n for (const [name, zvm] of Object.entries(this._zomeViewModels)) {\n //console.log(\"Dvm.probeAll()\", name)\n await zvm.probeAll();\n }\n }\n\n\n /** Maybe useless since the entry defs are in the integrity zome which is not represented here */\n async fetchAllEntryDefs(): Promise<Dictionary<[string, boolean][]>> {\n for (const zvm of Object.values(this._zomeViewModels)) {\n const zomeName = zvm.zomeName;\n try {\n const defs = await this._cellProxy.callEntryDefs(zomeName); // TODO optimize\n this._allEntryDefs[zomeName] = defs\n } catch (e) {\n console.warn(`Calling \"entry_defs()\" failed on zome \"${zomeName}\". Possibly because zome does not have any entry types defined.`)\n this._allEntryDefs[zomeName] = [];\n }\n }\n return this._allEntryDefs;\n }\n\n\n\n /** */\n dumpLogs(zomeName?: ZomeName): void {\n this._cellProxy.dumpLogs(zomeName);\n this._cellProxy.dumpSignals();\n }\n}\n"]}
1
+ {"version":3,"file":"DnaViewModel.js","sourceRoot":"","sources":["../src/DnaViewModel.ts"],"names":[],"mappings":"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","sourcesContent":["import {ZomeViewModel} from \"./ZomeViewModel\";\nimport {ReactiveElement} from \"lit\";\nimport {ViewModel} from \"./ViewModel\";\nimport {\n AdminWebsocket,\n GrantedFunctionsType,\n InstalledAppId,\n ZomeName,\n} from \"@holochain/client\";\nimport {DnaModifiersOptions, ZvmDef} from \"./definitions\";\nimport {createContext} from \"@lit-labs/context\";\nimport {\n CellProxy,\n ConductorAppProxy,\n HCL,\n Dictionary, CellMixin\n} from \"@ddd-qc/cell-proxy\";\nimport {RoleMixin, RoleSpecific} from \"./roleMixin\";\n\n\n//export type IDnaViewModel = _DnaViewModel & ICellDef & typeof RoleSpecific;\n\n/** Interface specific to DnaViewModel class */\ninterface IDnaViewModel {\n dumpLogs(zomeName?: ZomeName): void;\n fetchAllEntryDefs(): Promise<Dictionary<[string, boolean][]>>;\n //get entryTypes(): Dictionary<[string, boolean][]>;\n //getZomeEntryDefs(zomeName: ZomeName): [string, boolean][] | undefined;\n //getZomeViewModel(zomeName: ZomeName): ZomeViewModel | undefined\n}\n\nexport type DvmConstructor = typeof RoleSpecific & {DNA_MODIFIERS: DnaModifiersOptions} & {\n new(host: ReactiveElement, proxy: ConductorAppProxy, idOrHcl: HCL | InstalledAppId): DnaViewModel;\n};\n\n\n/**\n * Abstract ViewModel for a DNA.\n * It holds the CellProxy and all the ZomeViewModels of the DNA.\n * A DNA is expected to derive this class and add extra logic at the DNA level.\n * TODO: Split into RoleViewModel and CellViewModel (e.g. have call logs separated by role)\n */\nexport abstract class DnaViewModel extends CellMixin(RoleMixin(ViewModel)) implements IDnaViewModel {\n\n /* private */ static ZVM_DEFS: ZvmDef[];\n static DNA_MODIFIERS: DnaModifiersOptions;\n\n /** Ctor */\n constructor(public readonly host: ReactiveElement, conductorAppProxy: ConductorAppProxy, idOrHcl: HCL | InstalledAppId) {\n super();\n if (typeof idOrHcl === 'object') {\n this.baseRoleName = idOrHcl.baseRoleName;\n this.hcl = idOrHcl;\n } else {\n this.hcl = new HCL(idOrHcl, this.baseRoleName);\n }\n const dvmCtor = (this.constructor as typeof DnaViewModel)\n const zvmDefs = dvmCtor.ZVM_DEFS;\n this._cellProxy = conductorAppProxy.getCellProxy(this.hcl); // WARN can throw error\n this._cell = this._cellProxy.cell;\n console.log(`DVM.ctor of ${this.baseRoleName}`, this._cellProxy.cell);\n /** Create all ZVMs for this DNA */\n for (const zvmDef of zvmDefs) {\n let zvm;\n if (Array.isArray(zvmDef)) {\n zvm = new zvmDef[0](this._cellProxy, zvmDef[1]);\n } else {\n zvm = new zvmDef(this._cellProxy);\n }\n // TODO check zvm.zomeName exists in _cellProxy\n this._zomeViewModels[zvm.zomeName] = zvm;\n this._zomeNames[zvmDef.constructor.name] = zvm.zomeName;\n }\n this.provideContext(host); // TODO move this to host.connectedCallback? e.g. change ViewModel to a ReactiveController\n }\n\n\n /** -- Fields -- */\n\n protected _cellProxy: CellProxy;\n /* ZomeName -> Zvm */\n protected _zomeViewModels: Dictionary<ZomeViewModel> = {};\n /* ZvmCtorName -> ZomeName */\n protected _zomeNames: Dictionary<ZomeName> = {};\n private _allEntryDefs: Dictionary<[string, boolean][]> = {};\n\n public readonly hcl: HCL;\n\n\n /** -- Getters -- */\n\n getZomeEntryDefs(zomeName: ZomeName): [string, boolean][] | undefined {return this._allEntryDefs[zomeName]}\n getZomeViewModel(zomeName: ZomeName): ZomeViewModel | undefined {return this._zomeViewModels[zomeName]}\n getZomeName(zvm: typeof ZomeViewModel): ZomeName | undefined { return this._zomeNames[zvm.constructor.name]}\n\n /** -- Methods -- */\n\n /** Override so we can provide context of all zvms */\n /*private*/ provideContext(host: ReactiveElement): void {\n //console.log(\"DVM.provideContext()\", host, this)\n super.provideContext(host);\n for (const zvm of Object.values(this._zomeViewModels)) {\n zvm.provideContext(host)\n }\n }\n\n getContext(): any {return createContext<typeof this>('dvm/' + this.cell.name)};\n\n\n /** */\n async authorizeZomeCalls(adminWs: AdminWebsocket): Promise<void> {\n let allFnNames = [];\n for (const [_zomeName, zvm] of Object.entries(this._zomeViewModels)) {\n allFnNames = allFnNames.concat(zvm.zomeProxy.fnNames)\n }\n const grantedFns = { [GrantedFunctionsType.Listed]: allFnNames }\n try {\n console.log(\"authorizeSigningCredentials: \" + this.cell.hcl().toString(), allFnNames);\n await adminWs.authorizeSigningCredentials(this.cell.id, grantedFns);\n } catch(e) {\n console.warn(\"authorizeSigningCredentials FAILED.\", e);\n }\n // this._signingProps = getSigningCredentials(this.cellId);\n // console.log({signProps: this._signingProps})\n //\n // for (const [zomeName, zvm] of Object.entries(this._zomeViewModels)) {\n // zvm.zomeProxy.setSigningProps(this._signingProps);\n // }\n }\n\n\n /** */\n async probeAll(): Promise<void> {\n for (const [_name, zvm] of Object.entries(this._zomeViewModels)) {\n //console.log(\"Dvm.probeAll()\", name)\n await zvm.probeAll();\n }\n }\n\n\n /** Maybe useless since the entry defs are in the integrity zome which is not represented here */\n async fetchAllEntryDefs(): Promise<Dictionary<[string, boolean][]>> {\n for (const zvm of Object.values(this._zomeViewModels)) {\n const zomeName = zvm.zomeName;\n try {\n const defs = await this._cellProxy.callEntryDefs(zomeName); // TODO optimize\n this._allEntryDefs[zomeName] = defs\n } catch (e) {\n console.warn(`Calling \"entry_defs()\" failed on zome \"${zomeName}\". Possibly because zome does not have any entry types defined.`)\n this._allEntryDefs[zomeName] = [];\n }\n }\n return this._allEntryDefs;\n }\n\n\n\n /** */\n dumpLogs(zomeName?: ZomeName): void {\n this._cellProxy.dumpLogs(zomeName);\n this._cellProxy.dumpSignals();\n }\n}\n"]}
@@ -51,7 +51,7 @@ export class HappViewModel {
51
51
  /** Create all Cell Proxies in the definition */
52
52
  for (const dvmDef of hvmDef.dvmDefs) {
53
53
  if (dvmDef.ctor.DEFAULT_BASE_ROLE_NAME === undefined) {
54
- Promise.reject("static field DEFAULT_BASE_ROLE_NAME not defined for class " + dvmDef.ctor.name);
54
+ return Promise.reject("static field DEFAULT_BASE_ROLE_NAME not defined for class " + dvmDef.ctor.name);
55
55
  }
56
56
  const baseRoleName = dvmDef.baseRoleName
57
57
  ? dvmDef.baseRoleName
@@ -82,7 +82,7 @@ export class HappViewModel {
82
82
  }
83
83
  /** -- Methods -- */
84
84
  async authorizeAllZomeCalls(adminWs) {
85
- for (const [sHcl, dvm] of Object.entries(this._dvmMap)) {
85
+ for (const [_sHcl, dvm] of Object.entries(this._dvmMap)) {
86
86
  //console.log("Authorizing", sHcl);
87
87
  await dvm.authorizeZomeCalls(adminWs);
88
88
  }
@@ -144,10 +144,10 @@ export class HappViewModel {
144
144
  /** Check preconditions */
145
145
  const def = this._defMap[baseRoleName];
146
146
  if (!def) {
147
- Promise.reject(`createCloneDvm() failed for ${baseRoleName}. No original DVM created.`);
147
+ return Promise.reject(`createCloneDvm() failed for ${baseRoleName}. No original DVM created.`);
148
148
  }
149
149
  if (!def.isClonable) {
150
- Promise.reject(`createCloneDvm() failed. Role "${baseRoleName}" is not clonable.`);
150
+ return Promise.reject(`createCloneDvm() failed. Role "${baseRoleName}" is not clonable.`);
151
151
  }
152
152
  /** Get cloneIndex */
153
153
  const clones = this.getClones(baseRoleName);
@@ -1 +1 @@
1
- {"version":3,"file":"HappViewModel.js","sourceRoot":"","sources":["../src/HappViewModel.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,eAAe,EAEf,GAAG,GACJ,MAAM,oBAAoB,CAAC;AAO5B,oFAAoF;AAGpF;;;GAGG;AACH,MAAM,OAAO,aAAa;IAYxB,oBAAoB;IAEpB,MAAM;IACN,MAAM,CAAC,IAAkB;QACvB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED,MAAM;IACN,WAAW,CAAC,MAAc;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAC1D,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QACzC,IAAI,IAAI,GAA6B,EAAE,CAAC;QACxC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;YACtB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC/B,IAAI,KAAK,EAAE;gBACT,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,GAAG,KAAK,CAAC;aAC9B;SACF;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM;IACN,MAAM,CAAC,OAA2B;QAChC,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;YAC/B,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;SACxC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC1C,CAAC;IAGD,MAAM;IACN,SAAS,CAAC,YAA0B;QAClC,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QACpD,IAAI,SAAS,GAAG,EAAE,CAAC;QACnB,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;YACtD,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC5B,IAAI,GAAG,CAAC,OAAO,EAAE,IAAI,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE;gBACzC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aACrB;SACF;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAGD,mBAAmB;IAEnB,0EAA0E;IAC1E,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAqB,EAAE,iBAAoC,EAAE,MAAc;QAC1F,MAAM,KAAK,GAAG,iBAAiB,CAAC,YAAY,CAAA,CAAC,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QACzF,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,CAAA;QACpD,gDAAgD;QAChD,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE;YACnC,IAAI,MAAM,CAAC,IAAI,CAAC,sBAAsB,KAAK,SAAS,EAAE;gBACpD,OAAO,CAAC,MAAM,CAAC,4DAA4D,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACjG;YACD,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY;gBACtC,CAAC,CAAC,MAAM,CAAC,YAAY;gBACrB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC;YACvC,MAAM,iBAAiB,CAAC,UAAU,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;YACxD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;YACzC,iBAAiB,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;SACxC;QACD,MAAM,GAAG,GAAG,IAAI,aAAa,CAAC,IAAI,EAAE,iBAAiB,EAAE,MAAM,CAAC,CAAC;QAC/D,MAAM,GAAG,CAAC,YAAY,EAAE,CAAC;QACzB,OAAO,GAAG,CAAC;IACb,CAAC;IAGD,WAAW;IACX,YACY,KAAsB,EAAE,UAAU,CAClC,kBAAqC,EAAE,WAAW,CAC5D,MAAc;QAFJ,UAAK,GAAL,KAAK,CAAiB;QACtB,uBAAkB,GAAlB,kBAAkB,CAAmB;QA/EjD,gCAAgC;QACtB,YAAO,GAA6B,EAAE,CAAC;QACjD,6BAA6B;QACnB,YAAO,GAAuB,EAAE,CAAC;QA+EzC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAA,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QACpG,iDAAiD;QACjD,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE;YACnC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;SAChC;QACD,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC/B,oDAAoD;IACtD,CAAC;IAGD,oBAAoB;IAEpB,KAAK,CAAC,qBAAqB,CAAC,OAAuB;QACjD,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;YACtD,mCAAmC;YACnC,MAAM,GAAG,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;SACvC;QACD,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAA;IACzB,CAAC;IAED,MAAM;IACE,uBAAuB;QAC7B,MAAM,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAE,CAAC;QAC3E,KAAK,MAAM,CAAC,YAAY,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE;YACzE,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YACvC,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE;gBACnD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;gBACvD,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;gBAC7C,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;aAC1B;SACF;IACH,CAAC;IAGD,MAAM;IACE,SAAS,CAAC,MAAc,EAAE,GAAQ;QACxC,MAAM,GAAG,GAAiB,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC,CAAC,+BAA+B;QACpH,0FAA0F;QAC1F,0BAA0B;QAC1B,IAAI,GAAG,CAAC,aAAa,EAAE;YACrB,8EAA8E;YAC9E,IAAI;gBACF,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC,GAAc,EAAE,EAAE;oBAC1D,GAAG,CAAC,aAAc,CAAC,GAAG,CAAC,CAAA;gBACzB,CAAC,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;aACpB;YAAC,OAAO,CAAC,EAAE;gBACV,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;aACjB;SACF;QACD,eAAe;QACf,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,EAAE;YAChC,MAAM,KAAK,CAAC,yBAAyB,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;SACzD;QACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,GAAG,GAAG,CAAC;QACnC,WAAW;QACX,OAAO,GAAG,CAAC;IACb,CAAC;IAGD,MAAM;IACE,iBAAiB,CAAC,MAAc;QACtC,6BAA6B;QAC7B,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY;YACtC,CAAC,CAAC,MAAM,CAAC,YAAY;YACrB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC;QACvC,wDAAwD;QACxD,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;YAC9B,MAAM,KAAK,CAAC,wDAAwD,YAAY,kBAAkB,CAAC,CAAC;SACrG;QACD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAC9C,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC5B,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,MAAM,CAAC;IACtC,CAAC;IAGD,MAAM;IACN,KAAK,CAAC,QAAQ,CAAC,YAA0B,EAAE,OAAiB;QAC1D,gDAAgD;QAChD,0BAA0B;QAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QACvC,IAAI,CAAC,GAAG,EAAE;YACR,OAAO,CAAC,MAAM,CAAC,+BAA+B,YAAY,4BAA4B,CAAC,CAAA;SACxF;QACD,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE;YACnB,OAAO,CAAC,MAAM,CAAC,kCAAkC,YAAY,oBAAoB,CAAC,CAAA;SACnF;QACD,qBAAqB;QACrB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QAC5C,MAAM,UAAU,GAAe,MAAM,CAAC,MAAM,CAAC;QAC7C,MAAM,SAAS,GAAG,OAAO,IAAI,OAAO,CAAC,SAAS;YAC5C,CAAC,CAAC,OAAO,CAAC,SAAS;YACnB,CAAC,CAAC,eAAe,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QAC9C,4BAA4B;QAC5B,IAAI,OAAO,GAA2B;YACpC,MAAM,EAAE,IAAI,CAAC,KAAK;YAClB,SAAS,EAAE,YAAY;YACvB,SAAS,EAAE;gBACT,YAAY,EAAE,MAAM,CAAC,UAAU,CAAC;aACjC;YACD,IAAI,EAAE,SAAS;SAChB,CAAA;QACD,0CAA0C;QAC1C,IAAI,OAAO,EAAE;YACX,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;YACtC,OAAO,CAAC,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;YAC/C,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC;SAClC;QACD,kBAAkB;QAClB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAC1E,uEAAuE;QACvE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;QACrF,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;QACpC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5D,uBAAuB;QACvB,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAG,CAAC,CAAC;QACxD,uBAAuB;QACvB,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QAC7C,+BAA+B;QAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACrC,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,MAAM,GAAG,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SAC7C;QACD,WAAW;QACX,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IAC3B,CAAC;IAGD,MAAM;IACN,KAAK,CAAC,QAAQ;QACZ,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;YAC7C,MAAM,GAAG,CAAC,QAAQ,EAAE,CAAC;SACtB;IACH,CAAC;IAED,MAAM;IACE,KAAK,CAAC,YAAY;QACxB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;YAC7C,MAAM,GAAG,CAAC,YAAY,EAAE,CAAC;SAC1B;IACH,CAAC;IAGD,MAAM;IACN,QAAQ,CAAC,YAA2B;QAClC,IAAI,YAAY,EAAE;YAChB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YACtC,IAAI,GAAG,EAAE;gBACP,GAAG,CAAC,QAAQ,EAAE,CAAC;aAChB;iBAAM;gBACL,OAAO,CAAC,KAAK,CAAC,4BAA4B,YAAY,wBAAwB,IAAI,CAAC,KAAK,GAAG,CAAC,CAAA;aAC7F;SACF;aAAM;YACL,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;gBAC7C,GAAG,CAAC,QAAQ,EAAE,CAAC;aAChB;SACF;IACH,CAAC;CACF","sourcesContent":["import {AdminWebsocket, ClonedCell, CreateCloneCellRequest, InstalledAppId} from \"@holochain/client\";\nimport { ReactiveElement } from \"lit\";\nimport {\n BaseRoleName,\n CloneIndex,\n ConductorAppProxy,\n createCloneName,\n Dictionary,\n HCL,\n} from \"@ddd-qc/cell-proxy\";\nimport { CellDef, DvmDef, HvmDef } from \"./definitions\";\nimport { DnaViewModel } from \"./DnaViewModel\";\nimport { AppSignal } from \"@holochain/client/lib/api/app/types\";\nimport { CellId } from \"@holochain/client/lib/types\";\n\n\n//export type HvmConstructor = {new(installedAppId: InstalledAppId): HappViewModel};\n\n\n/**\n * \"ViewModel\" of a hApp\n * Creates and stores all the DnaViewModels from the happDef.\n */\nexport class HappViewModel {\n\n /** -- Fields -- */\n readonly appId: InstalledAppId;\n /** HCLString -> DnaViewModel */\n protected _dvmMap: Dictionary<DnaViewModel> = {};\n /** BaseRoleName -> DvmDef */\n protected _defMap: Dictionary<DvmDef> = {};\n\n\n protected _adminWs?: AdminWebsocket;\n\n /** -- Getters -- */\n\n /** */\n getDef(name: BaseRoleName): DvmDef | undefined {\n return this._defMap[name];\n }\n\n /** */\n getCellDvms(cellId: CellId): Dictionary<DnaViewModel> | undefined {\n const hcls = this._conductorAppProxy.getLocations(cellId);\n if (hcls === undefined) return undefined;\n let dict: Dictionary<DnaViewModel> = {};\n for (const hcl of hcls) {\n const maybe = this.getDvm(hcl);\n if (maybe) {\n dict[hcl.toString()] = maybe;\n }\n }\n return dict;\n }\n\n /** */\n getDvm(hclOrId: HCL | BaseRoleName ): DnaViewModel | undefined {\n if (typeof hclOrId === 'string') {\n hclOrId = new HCL(this.appId, hclOrId);\n }\n return this._dvmMap[hclOrId.toString()];\n }\n\n\n /** */\n getClones(baseRoleName: BaseRoleName): DnaViewModel[] {\n const searchHcl = new HCL(this.appId, baseRoleName);\n let cloneDvms = [];\n for (const [sHcl, dvm] of Object.entries(this._dvmMap)) {\n const hcl = HCL.parse(sHcl);\n if (hcl.isClone() && hcl.match(searchHcl)) {\n cloneDvms.push(dvm);\n }\n }\n return cloneDvms;\n }\n\n\n /** -- Create -- */\n\n /** Spawn a HappViewModel for an AppId running on the ConductorAppProxy */\n static async new(host: ReactiveElement, conductorAppProxy: ConductorAppProxy, hvmDef: HvmDef): Promise<HappViewModel> {\n const appId = conductorAppProxy.appIdOfShame? conductorAppProxy.appIdOfShame : hvmDef.id;\n console.log(\"HappViewModel.new()\", hvmDef.id, appId)\n /** Create all Cell Proxies in the definition */\n for (const dvmDef of hvmDef.dvmDefs) {\n if (dvmDef.ctor.DEFAULT_BASE_ROLE_NAME === undefined) {\n Promise.reject(\"static field DEFAULT_BASE_ROLE_NAME not defined for class \" + dvmDef.ctor.name);\n }\n const baseRoleName = dvmDef.baseRoleName\n ? dvmDef.baseRoleName\n : dvmDef.ctor.DEFAULT_BASE_ROLE_NAME;\n await conductorAppProxy.fetchCells(appId, baseRoleName);\n const hcl = new HCL(appId, baseRoleName);\n conductorAppProxy.createCellProxy(hcl);\n }\n const hvm = new HappViewModel(host, conductorAppProxy, hvmDef);\n await hvm.initialProbe();\n return hvm;\n }\n\n\n /** Ctor */\n private constructor(\n protected _host: ReactiveElement, /* VIEW */\n protected _conductorAppProxy: ConductorAppProxy, /* MODEL */\n hvmDef: HvmDef, /* VIEW-MODEL definition */\n ) {\n this.appId = this._conductorAppProxy.appIdOfShame? this._conductorAppProxy.appIdOfShame : hvmDef.id;\n /** Create all non-deferred DVMs for this Happ */\n for (const dvmDef of hvmDef.dvmDefs) {\n this.createOriginalDvm(dvmDef);\n }\n this.createStartingClonesDvm();\n //console.log(\"HappViewModel created\", this._dvmMap)\n }\n\n\n /** -- Methods -- */\n\n async authorizeAllZomeCalls(adminWs: AdminWebsocket): Promise<void> {\n for (const [sHcl, dvm] of Object.entries(this._dvmMap)) {\n //console.log(\"Authorizing\", sHcl);\n await dvm.authorizeZomeCalls(adminWs);\n }\n this._adminWs = adminWs\n }\n\n /** */\n private createStartingClonesDvm(): void {\n const appInstalledCells = this._conductorAppProxy.getAppCells(this.appId)!;\n for (const [baseRoleName, roleCells] of Object.entries(appInstalledCells)) {\n const def = this._defMap[baseRoleName];\n for (const cloneId of Object.keys(roleCells.clones)) {\n const hcl = new HCL(this.appId, baseRoleName, cloneId);\n this._conductorAppProxy.createCellProxy(hcl);\n this.createDvm(def, hcl);\n }\n }\n }\n\n\n /** */\n private createDvm(dvmDef: DvmDef, hcl: HCL): DnaViewModel {\n const dvm: DnaViewModel = new dvmDef.ctor(this._host, this._conductorAppProxy, hcl); // WARN this can throw an error\n //console.log(` createDvm() for \"${hcl.toString()}\" ; cellId: ${CellIdStr(dvm.cellId)}`);\n /** Setup signalHandler */\n if (dvm.signalHandler) {\n //console.log(`\"${dvm.baseRoleName}\" signalHandler added`, dvm.signalHandler);\n try {\n this._conductorAppProxy.addSignalHandler((sig: AppSignal) => {\n dvm.signalHandler!(sig)\n }, hcl.toString());\n } catch (e) {\n console.error(e)\n }\n }\n /** Store it */\n if (this._dvmMap[hcl.toString()]) {\n throw Error(\"DVM already exists for \" + hcl.toString());\n }\n this._dvmMap[hcl.toString()] = dvm;\n /** Done */\n return dvm;\n }\n\n\n /** */\n private createOriginalDvm(dvmDef: DvmDef): void {\n /** Determine baseRoleName */\n const baseRoleName = dvmDef.baseRoleName\n ? dvmDef.baseRoleName\n : dvmDef.ctor.DEFAULT_BASE_ROLE_NAME;\n //console.log(\"createOriginalDvm() for \", baseRoleName);\n if (this._defMap[baseRoleName]) {\n throw Error(`createOriginalDvm() failed. DVM for original cell of ${baseRoleName} already exists.`);\n }\n const hcl = new HCL(this.appId, baseRoleName);\n this.createDvm(dvmDef, hcl);\n this._defMap[baseRoleName] = dvmDef;\n }\n\n\n /** */\n async cloneDvm(baseRoleName: BaseRoleName, cellDef?: CellDef): Promise<[ClonedCell, DnaViewModel]> {\n //console.log(\"createCloneDvm()\", baseRoleName);\n /** Check preconditions */\n const def = this._defMap[baseRoleName];\n if (!def) {\n Promise.reject(`createCloneDvm() failed for ${baseRoleName}. No original DVM created.`)\n }\n if (!def.isClonable) {\n Promise.reject(`createCloneDvm() failed. Role \"${baseRoleName}\" is not clonable.`)\n }\n /** Get cloneIndex */\n const clones = this.getClones(baseRoleName);\n const cloneIndex: CloneIndex = clones.length;\n const cloneName = cellDef && cellDef.cloneName\n ? cellDef.cloneName\n : createCloneName(baseRoleName, cloneIndex);\n /** Build default request */\n let request: CreateCloneCellRequest = {\n app_id: this.appId,\n role_name: baseRoleName,\n modifiers: {\n network_seed: String(cloneIndex),\n },\n name: cloneName,\n }\n /** Modify request according to CellDef */\n if (cellDef) {\n request.modifiers = cellDef.modifiers;\n request.membrane_proof = cellDef.membraneProof;\n request.name = cellDef.cloneName;\n }\n /** Create Cell */\n const clonedCell = await this._conductorAppProxy.createCloneCell(request);\n //console.log(\"clone created:\", CellIdStr(cloneInstalledCell.cell_id));\n const cell = await this._conductorAppProxy.fetchCell(this.appId, clonedCell.cell_id);\n console.log(\"clone created:\", cell);\n const hcl = new HCL(this.appId, baseRoleName, cell.cloneId);\n /** Get created cell */\n this._conductorAppProxy.addClone(hcl, cell.asCloned()!);\n /** Create CellProxy */\n this._conductorAppProxy.createCellProxy(hcl);\n /** Create DVM and authorize */\n const dvm = this.createDvm(def, hcl);\n if (this._adminWs) {\n await dvm.authorizeZomeCalls(this._adminWs);\n }\n /** Done */\n return [clonedCell, dvm];\n }\n\n\n /** */\n async probeAll(): Promise<void> {\n for (const dvm of Object.values(this._dvmMap)) {\n await dvm.probeAll();\n }\n }\n\n /** */\n private async initialProbe(): Promise<void> {\n for (const dvm of Object.values(this._dvmMap)) {\n await dvm.initialProbe();\n }\n }\n\n\n /** */\n dumpLogs(baseRoleName?: BaseRoleName): void {\n if (baseRoleName) {\n const dvm = this.getDvm(baseRoleName);\n if (dvm) {\n dvm.dumpLogs();\n } else {\n console.error(`dumpLogs() failed. Role \"${baseRoleName}\" not found in happ \"${this.appId}\"`)\n }\n } else {\n for (const dvm of Object.values(this._dvmMap)) {\n dvm.dumpLogs();\n }\n }\n }\n}\n"]}
1
+ {"version":3,"file":"HappViewModel.js","sourceRoot":"","sources":["../src/HappViewModel.ts"],"names":[],"mappings":"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","sourcesContent":["import {AdminWebsocket, ClonedCell, CreateCloneCellRequest, InstalledAppId} from \"@holochain/client\";\nimport { ReactiveElement } from \"lit\";\nimport {\n BaseRoleName,\n CloneIndex,\n ConductorAppProxy,\n createCloneName,\n Dictionary,\n HCL,\n} from \"@ddd-qc/cell-proxy\";\nimport { CellDef, DvmDef, HvmDef } from \"./definitions\";\nimport { DnaViewModel } from \"./DnaViewModel\";\nimport { AppSignal } from \"@holochain/client/lib/api/app/types\";\nimport { CellId } from \"@holochain/client/lib/types\";\n\n\n//export type HvmConstructor = {new(installedAppId: InstalledAppId): HappViewModel};\n\n\n/**\n * \"ViewModel\" of a hApp\n * Creates and stores all the DnaViewModels from the happDef.\n */\nexport class HappViewModel {\n\n /** -- Fields -- */\n readonly appId: InstalledAppId;\n /** HCLString -> DnaViewModel */\n protected _dvmMap: Dictionary<DnaViewModel> = {};\n /** BaseRoleName -> DvmDef */\n protected _defMap: Dictionary<DvmDef> = {};\n\n\n protected _adminWs?: AdminWebsocket;\n\n /** -- Getters -- */\n\n /** */\n getDef(name: BaseRoleName): DvmDef | undefined {\n return this._defMap[name];\n }\n\n /** */\n getCellDvms(cellId: CellId): Dictionary<DnaViewModel> | undefined {\n const hcls = this._conductorAppProxy.getLocations(cellId);\n if (hcls === undefined) return undefined;\n let dict: Dictionary<DnaViewModel> = {};\n for (const hcl of hcls) {\n const maybe = this.getDvm(hcl);\n if (maybe) {\n dict[hcl.toString()] = maybe;\n }\n }\n return dict;\n }\n\n /** */\n getDvm(hclOrId: HCL | BaseRoleName ): DnaViewModel | undefined {\n if (typeof hclOrId === 'string') {\n hclOrId = new HCL(this.appId, hclOrId);\n }\n return this._dvmMap[hclOrId.toString()];\n }\n\n\n /** */\n getClones(baseRoleName: BaseRoleName): DnaViewModel[] {\n const searchHcl = new HCL(this.appId, baseRoleName);\n let cloneDvms = [];\n for (const [sHcl, dvm] of Object.entries(this._dvmMap)) {\n const hcl = HCL.parse(sHcl);\n if (hcl.isClone() && hcl.match(searchHcl)) {\n cloneDvms.push(dvm);\n }\n }\n return cloneDvms;\n }\n\n\n /** -- Create -- */\n\n /** Spawn a HappViewModel for an AppId running on the ConductorAppProxy */\n static async new(host: ReactiveElement, conductorAppProxy: ConductorAppProxy, hvmDef: HvmDef): Promise<HappViewModel> {\n const appId = conductorAppProxy.appIdOfShame? conductorAppProxy.appIdOfShame : hvmDef.id;\n console.log(\"HappViewModel.new()\", hvmDef.id, appId)\n /** Create all Cell Proxies in the definition */\n for (const dvmDef of hvmDef.dvmDefs) {\n if (dvmDef.ctor.DEFAULT_BASE_ROLE_NAME === undefined) {\n return Promise.reject(\"static field DEFAULT_BASE_ROLE_NAME not defined for class \" + dvmDef.ctor.name);\n }\n const baseRoleName = dvmDef.baseRoleName\n ? dvmDef.baseRoleName\n : dvmDef.ctor.DEFAULT_BASE_ROLE_NAME;\n await conductorAppProxy.fetchCells(appId, baseRoleName);\n const hcl = new HCL(appId, baseRoleName);\n conductorAppProxy.createCellProxy(hcl);\n }\n const hvm = new HappViewModel(host, conductorAppProxy, hvmDef);\n await hvm.initialProbe();\n return hvm;\n }\n\n\n /** Ctor */\n private constructor(\n protected _host: ReactiveElement, /* VIEW */\n protected _conductorAppProxy: ConductorAppProxy, /* MODEL */\n hvmDef: HvmDef, /* VIEW-MODEL definition */\n ) {\n this.appId = this._conductorAppProxy.appIdOfShame? this._conductorAppProxy.appIdOfShame : hvmDef.id;\n /** Create all non-deferred DVMs for this Happ */\n for (const dvmDef of hvmDef.dvmDefs) {\n this.createOriginalDvm(dvmDef);\n }\n this.createStartingClonesDvm();\n //console.log(\"HappViewModel created\", this._dvmMap)\n }\n\n\n /** -- Methods -- */\n\n async authorizeAllZomeCalls(adminWs: AdminWebsocket): Promise<void> {\n for (const [_sHcl, dvm] of Object.entries(this._dvmMap)) {\n //console.log(\"Authorizing\", sHcl);\n await dvm.authorizeZomeCalls(adminWs);\n }\n this._adminWs = adminWs\n }\n\n /** */\n private createStartingClonesDvm(): void {\n const appInstalledCells = this._conductorAppProxy.getAppCells(this.appId)!;\n for (const [baseRoleName, roleCells] of Object.entries(appInstalledCells)) {\n const def = this._defMap[baseRoleName];\n for (const cloneId of Object.keys(roleCells.clones)) {\n const hcl = new HCL(this.appId, baseRoleName, cloneId);\n this._conductorAppProxy.createCellProxy(hcl);\n this.createDvm(def, hcl);\n }\n }\n }\n\n\n /** */\n private createDvm(dvmDef: DvmDef, hcl: HCL): DnaViewModel {\n const dvm: DnaViewModel = new dvmDef.ctor(this._host, this._conductorAppProxy, hcl); // WARN this can throw an error\n //console.log(` createDvm() for \"${hcl.toString()}\" ; cellId: ${CellIdStr(dvm.cellId)}`);\n /** Setup signalHandler */\n if (dvm.signalHandler) {\n //console.log(`\"${dvm.baseRoleName}\" signalHandler added`, dvm.signalHandler);\n try {\n this._conductorAppProxy.addSignalHandler((sig: AppSignal) => {\n dvm.signalHandler!(sig)\n }, hcl.toString());\n } catch (e) {\n console.error(e)\n }\n }\n /** Store it */\n if (this._dvmMap[hcl.toString()]) {\n throw Error(\"DVM already exists for \" + hcl.toString());\n }\n this._dvmMap[hcl.toString()] = dvm;\n /** Done */\n return dvm;\n }\n\n\n /** */\n private createOriginalDvm(dvmDef: DvmDef): void {\n /** Determine baseRoleName */\n const baseRoleName = dvmDef.baseRoleName\n ? dvmDef.baseRoleName\n : dvmDef.ctor.DEFAULT_BASE_ROLE_NAME;\n //console.log(\"createOriginalDvm() for \", baseRoleName);\n if (this._defMap[baseRoleName]) {\n throw Error(`createOriginalDvm() failed. DVM for original cell of ${baseRoleName} already exists.`);\n }\n const hcl = new HCL(this.appId, baseRoleName);\n this.createDvm(dvmDef, hcl);\n this._defMap[baseRoleName] = dvmDef;\n }\n\n\n /** */\n async cloneDvm(baseRoleName: BaseRoleName, cellDef?: CellDef): Promise<[ClonedCell, DnaViewModel]> {\n //console.log(\"createCloneDvm()\", baseRoleName);\n /** Check preconditions */\n const def = this._defMap[baseRoleName];\n if (!def) {\n return Promise.reject(`createCloneDvm() failed for ${baseRoleName}. No original DVM created.`)\n }\n if (!def.isClonable) {\n return Promise.reject(`createCloneDvm() failed. Role \"${baseRoleName}\" is not clonable.`)\n }\n /** Get cloneIndex */\n const clones = this.getClones(baseRoleName);\n const cloneIndex: CloneIndex = clones.length;\n const cloneName = cellDef && cellDef.cloneName\n ? cellDef.cloneName\n : createCloneName(baseRoleName, cloneIndex);\n /** Build default request */\n let request: CreateCloneCellRequest = {\n app_id: this.appId,\n role_name: baseRoleName,\n modifiers: {\n network_seed: String(cloneIndex),\n },\n name: cloneName,\n }\n /** Modify request according to CellDef */\n if (cellDef) {\n request.modifiers = cellDef.modifiers;\n request.membrane_proof = cellDef.membraneProof;\n request.name = cellDef.cloneName;\n }\n /** Create Cell */\n const clonedCell = await this._conductorAppProxy.createCloneCell(request);\n //console.log(\"clone created:\", CellIdStr(cloneInstalledCell.cell_id));\n const cell = await this._conductorAppProxy.fetchCell(this.appId, clonedCell.cell_id);\n console.log(\"clone created:\", cell);\n const hcl = new HCL(this.appId, baseRoleName, cell.cloneId);\n /** Get created cell */\n this._conductorAppProxy.addClone(hcl, cell.asCloned()!);\n /** Create CellProxy */\n this._conductorAppProxy.createCellProxy(hcl);\n /** Create DVM and authorize */\n const dvm = this.createDvm(def, hcl);\n if (this._adminWs) {\n await dvm.authorizeZomeCalls(this._adminWs);\n }\n /** Done */\n return [clonedCell, dvm];\n }\n\n\n /** */\n async probeAll(): Promise<void> {\n for (const dvm of Object.values(this._dvmMap)) {\n await dvm.probeAll();\n }\n }\n\n /** */\n private async initialProbe(): Promise<void> {\n for (const dvm of Object.values(this._dvmMap)) {\n await dvm.initialProbe();\n }\n }\n\n\n /** */\n dumpLogs(baseRoleName?: BaseRoleName): void {\n if (baseRoleName) {\n const dvm = this.getDvm(baseRoleName);\n if (dvm) {\n dvm.dumpLogs();\n } else {\n console.error(`dumpLogs() failed. Role \"${baseRoleName}\" not found in happ \"${this.appId}\"`)\n }\n } else {\n for (const dvm of Object.values(this._dvmMap)) {\n dvm.dumpLogs();\n }\n }\n }\n}\n"]}
@@ -36,7 +36,7 @@ export declare abstract class ViewModel {
36
36
  /** */
37
37
  subscribe(providedHost: ReactiveControllerHost, propName: PropertyKey): void;
38
38
  /** */
39
- unsubscribe(candidat: ReactiveControllerHost): void;
39
+ unsubscribe(candidate: ReactiveControllerHost): void;
40
40
  /** */
41
41
  protected notifySubscribers(): void;
42
42
  }
package/dist/ViewModel.js CHANGED
@@ -31,10 +31,10 @@ export class ViewModel {
31
31
  this._providedHosts.push([providedHost, propName]);
32
32
  }
33
33
  /** */
34
- unsubscribe(candidat) {
34
+ unsubscribe(candidate) {
35
35
  let index = 0;
36
36
  for (const [host, _propName] of this._providedHosts) {
37
- if (host === candidat)
37
+ if (host === candidate)
38
38
  break;
39
39
  index += 1;
40
40
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ViewModel.js","sourceRoot":"","sources":["../src/ViewModel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAKlD;;;;;;;;;;GAUG;AACF,MAAM,OAAgB,SAAS;IAA/B;QAIW,mBAAc,GAA4C,EAAE,CAAC;IAgEzE,CAAC;IAlDC,yFAAyF;IACzF,KAAK,CAAC,QAAQ,KAAmB,CAAC;IAClC,2FAA2F;IAC3F,KAAK,CAAC,YAAY,KAAmB,CAAC;IAUtC,0BAA0B;IAE1B,mCAAmC;IACnC,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;IAED,6BAA6B;IAE7B,MAAM;IACN,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;IAED,MAAM;IACN,WAAW,CAAC,QAAgC;QACxC,IAAI,KAAK,GAAI,CAAC,CAAC;QACf,KAAK,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,IAAI,CAAC,cAAc,EAAE;YACjD,IAAI,IAAI,KAAK,QAAQ;gBAAE,MAAM;YAC7B,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;IAED,MAAM;IACI,iBAAiB;QACvB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAAE,OAAO;QAC/B,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,cAAc,EAAE;YAC/C,IAAY,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;SAC9C;QACD,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,WAAW,CAAA;IAChD,CAAC;CAEF","sourcesContent":["import {ContextProvider} from \"@lit-labs/context\";\nimport {ReactiveControllerHost, ReactiveElement} from \"lit\";\nimport {AppSignalCb} from \"@holochain/client\";\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?: any;\n protected _providedHosts: [ReactiveControllerHost, PropertyKey][] = [];\n protected _provider?: any; // FIXME type: ContextProvider<this.getContext()>;\n\n\n /** -- Abstract fields -- */\n\n abstract signalHandler?: AppSignalCb;\n\n\n /** -- Abstract methods -- */\n\n abstract getContext(): any;\n /* Child class should implement with specific type */\n abstract get perspective(): any;\n /* (optional) Lets the observer trigger probing in order to get an updated perspective */\n async probeAll(): Promise<void> {}\n /* (optional) Define the probing to do at startup (should get data on source-chain only) */\n async initialProbe(): Promise<void> {}\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(candidat: ReactiveControllerHost): void {\n let index = 0;\n for (const [host, _propName] of this._providedHosts) {\n if (host === candidat) break;\n index += 1;\n }\n if (index > -1) {\n this._providedHosts.splice(index, 1);\n }\n }\n\n /** */\n protected notifySubscribers(): void {\n if (!this.hasChanged()) return;\n for (const [host, propName] of this._providedHosts) {\n (host as any)[propName] = this.perspective;\n }\n this._previousPerspective = this.perspective\n }\n\n}\n"]}
1
+ {"version":3,"file":"ViewModel.js","sourceRoot":"","sources":["../src/ViewModel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAKlD;;;;;;;;;;GAUG;AACF,MAAM,OAAgB,SAAS;IAA/B;QAIW,mBAAc,GAA4C,EAAE,CAAC;IAgEzE,CAAC;IAlDC,yFAAyF;IACzF,KAAK,CAAC,QAAQ,KAAmB,CAAC;IAClC,2FAA2F;IAC3F,KAAK,CAAC,YAAY,KAAmB,CAAC;IAUtC,0BAA0B;IAE1B,mCAAmC;IACnC,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;IAED,6BAA6B;IAE7B,MAAM;IACN,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;IAED,MAAM;IACN,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;IAED,MAAM;IACI,iBAAiB;QACvB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAAE,OAAO;QAC/B,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,cAAc,EAAE;YAC/C,IAAY,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;SAC9C;QACD,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,WAAW,CAAA;IAChD,CAAC;CAEF","sourcesContent":["import {ContextProvider} from \"@lit-labs/context\";\nimport {ReactiveControllerHost, ReactiveElement} from \"lit\";\nimport {AppSignalCb} from \"@holochain/client\";\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?: any;\n protected _providedHosts: [ReactiveControllerHost, PropertyKey][] = [];\n protected _provider?: any; // FIXME type: ContextProvider<this.getContext()>;\n\n\n /** -- Abstract fields -- */\n\n abstract signalHandler?: AppSignalCb;\n\n\n /** -- Abstract methods -- */\n\n abstract getContext(): any;\n /* Child class should implement with specific type */\n abstract get perspective(): any;\n /* (optional) Lets the observer trigger probing in order to get an updated perspective */\n async probeAll(): Promise<void> {}\n /* (optional) Define the probing to do at startup (should get data on source-chain only) */\n async initialProbe(): Promise<void> {}\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(): void {\n if (!this.hasChanged()) return;\n for (const [host, propName] of this._providedHosts) {\n (host as any)[propName] = this.perspective;\n }\n this._previousPerspective = this.perspective\n }\n\n}\n"]}
@@ -27,9 +27,9 @@ export class ZomeElement extends CellMixin(ScopedElementsMixin(LitElement)) {
27
27
  }
28
28
  const contextType = createContext('zvm/' + this.defaultZomeName + '/' + this.cell.dnaHash);
29
29
  console.log(`\t\t Requesting context "${contextType}"`);
30
- /*const consumer =*/ new ContextConsumer(this, contextType, (value, dispose) => {
30
+ /*const consumer =*/ new ContextConsumer(this, contextType, async (value, dispose) => {
31
31
  console.log(`\t\t Received value for context "${contextType}"`);
32
- this.zvmUpdated(value, this._zvm);
32
+ await this.zvmUpdated(value, this._zvm);
33
33
  if (this._zvm) {
34
34
  this._zvm.unsubscribe(this);
35
35
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ZomeElement.js","sourceRoot":"","sources":["../src/ZomeElement.ts"],"names":[],"mappings":"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","sourcesContent":["import {ScopedElementsMixin} from \"@open-wc/scoped-elements\";\nimport {LitElement, PropertyValues} from \"lit\";\nimport {property, state} from \"lit/decorators.js\";\nimport {ContextConsumer, contextProvided, createContext} from \"@lit-labs/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(ScopedElementsMixin(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 @contextProvided({ 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\n /** -- Methods -- */\n\n /** Request zvm from Context based on current CellId */\n private requestZvm() {\n if (!this._cell_via_context) {\n throw Error(`Context \"${cellContext}\" not found from ZomeElement \"${this.constructor.name}\"`)\n }\n const contextType = createContext<ZVM>('zvm/'+ this.defaultZomeName + '/' + this.cell.dnaHash)\n console.log(`\\t\\t Requesting context \"${contextType}\"`)\n /*const consumer =*/ new ContextConsumer(\n this,\n contextType,\n (value: ZVM, dispose?: () => void): void => {\n console.log(`\\t\\t Received value for context \"${contextType}\"`)\n 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 /** To be overriden by subclasses */\n protected async zvmUpdated(newZvm: ZVM, oldZvm?: ZVM): Promise<void> {\n //console.log(`\\t\\t Default zvmUpdated() called`)\n }\n\n\n /** RequestZvm on first \"shouldUpdate\" */\n 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 }\n if (!this._zvm) {\n this.requestZvm();\n }\n return !!this._zvm;\n }\n\n\n /** */\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":"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","sourcesContent":["import {ScopedElementsMixin} from \"@open-wc/scoped-elements\";\nimport {LitElement, PropertyValues} from \"lit\";\nimport {property, state} from \"lit/decorators.js\";\nimport {ContextConsumer, contextProvided, createContext} from \"@lit-labs/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(ScopedElementsMixin(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 @contextProvided({ 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\n /** -- Methods -- */\n\n /** Request zvm from Context based on current CellId */\n private requestZvm() {\n if (!this._cell_via_context) {\n throw Error(`Context \"${cellContext}\" not found from ZomeElement \"${this.constructor.name}\"`)\n }\n const contextType = createContext<ZVM>('zvm/'+ this.defaultZomeName + '/' + this.cell.dnaHash)\n console.log(`\\t\\t Requesting context \"${contextType}\"`)\n /*const 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 /** To be overriden by subclasses */\n protected async zvmUpdated(newZvm: ZVM, oldZvm?: ZVM): Promise<void> {\n //console.log(`\\t\\t Default zvmUpdated() called`)\n }\n\n\n /** RequestZvm on first \"shouldUpdate\" */\n 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 }\n if (!this._zvm) {\n this.requestZvm();\n }\n return !!this._zvm;\n }\n\n\n /** */\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":"ZomeViewModel.js","sourceRoot":"","sources":["../src/ZomeViewModel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAA6C,SAAS,EAAC,MAAM,oBAAoB,CAAC;AACzF,OAAO,EAAC,SAAS,EAAC,MAAM,aAAa,CAAC;AAMtC,qCAAqC;AACrC,MAAM,UAAU,GAAG,CAAC,UAA4B;IAC5C,OAAO,CAAC,IAAc,EAAE,EAAE;QACtB,+CAA+C;QAC9C,IAAY,CAAC,UAAU,GAAG,UAAU,CAAC;QACtC,6EAA6E;QAC7E,iGAAiG;QACjG,6EAA6E;IACjF,CAAC,CAAA;AACL,CAAC;AAGD;;;;;;GAMG;AACH,MAAM,OAAgB,aAAc,SAAQ,SAAS,CAAC,SAAS,CAAC;IAO5D,mBAAmB;QACf,OAAQ,IAAI,CAAC,WAAoC,CAAC,UAAU,CAAC;IACjE,CAAC;IAID,gBAAgB;IAChB,MAAM,KAAK,iBAAiB;QACxB,OAAO,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC;IAC7C,CAAC;IAID,WAAW;IACX,YAAY,SAAoB,EAAE,QAAmB;QACjD,KAAK,EAAE,CAAC;QACR,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC9C,IAAI,CAAC,UAAU,EAAE;YACb,MAAM,KAAK,CAAC,oDAAoD,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;SAC7F;QACD,IAAI,QAAQ,EAAE;YACV,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;YACzB,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;SAC9D;aAAM;YACH,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,CAAC,SAAS,CAAC,CAAC;YAC5C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC;SACnD;QACD,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC;QAC5B,SAAS,CAAC,gBAAgB,CAAE,CAAC,MAAiB,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;IACtF,CAAC;IAGD,iCAAiC;IACzB,gBAAgB,CAAC,MAAiB;QACtC,wFAAwF;QACxF,IAAI,IAAI,CAAC,aAAa,IAAI,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ,EAAE;YACzD,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;SAC9B;IACL,CAAC;IAED,MAAM;IACN,UAAU;QACN,MAAM,OAAO,GAAG,aAAa,CAAc,MAAM,GAAE,IAAI,CAAC,UAAU,CAAC,eAAe,GAAE,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAC5G,4CAA4C;QAC5C,OAAO,OAAO,CAAA;IAClB,CAAC;CACJ","sourcesContent":["import {createContext} from \"@lit-labs/context\";\nimport {CellProxy, ZomeProxy, ZomeProxyConstructor, CellMixin} from \"@ddd-qc/cell-proxy\";\nimport {ViewModel} from \"./ViewModel\";\nimport {AppSignalCb, FunctionName, ZomeName} from \"@holochain/client\";\nimport {AppSignal} from \"@holochain/client/lib/api/app/types\";\n\nexport type ZvmConstructor = {new(proxy: CellProxy, zomeName?: ZomeName): ZomeViewModel} /*& typeof ZomeSpecific;*/\n\n/** (EXPERIMENTAL) Class Decorator */\nexport function zvm(zProxyCtor: typeof ZomeProxy) {\n return (ctor: Function) => {\n //let zvmCtor = (ctor as typeof ZomeViewModel);\n (ctor as any).ZOME_PROXY = zProxyCtor;\n //get zomeProxy(): DummyZomeProxy {return this._zomeProxy as DummyZomeProxy;}\n //(ctor as any).zomeProxy = function() {return (ctor as any)._zomeProxy as typeof zProxyFactory;}\n //(ctor as any).zomeProxy = (ctor as any)._zomeProxy as typeof zProxyFactory;\n }\n}\n\n\n/**\n * Abstract ViewModel for a Zome.\n * It extends a ViewModel by adding a ZomeProxy.\n * Views are required to use this in order to interact with the ZomeProxy.\n * The perspective is the data from the Zome that is transformed and enhanced in order to be consumed by a View.\n * It can be automatically updated by Signals or the Zome Scheduler.\n */\nexport abstract class ZomeViewModel extends CellMixin(ViewModel) {\n\n /** Zome proxy constructor */\n static ZOME_PROXY: ZomeProxyConstructor;\n protected _zomeProxy: ZomeProxy;\n /* Child class should implement with child proxy class as return type */\n abstract get zomeProxy(): ZomeProxy;\n getProxyConstructor(): ZomeProxyConstructor {\n return (this.constructor as typeof ZomeViewModel).ZOME_PROXY;\n }\n\n signalHandler?: AppSignalCb;\n\n /** Zome name */\n static get DEFAULT_ZOME_NAME(): string {\n return this.ZOME_PROXY.DEFAULT_ZOME_NAME;\n }\n zomeName!: ZomeName;\n\n\n /** Ctor */\n constructor(cellProxy: CellProxy, zomeName?: ZomeName) {\n super();\n const zProxyCtor = this.getProxyConstructor();\n if (!zProxyCtor) {\n throw Error(\"ZOME_PROXY static field undefined in ZVM subclass \" + this.constructor.name);\n }\n if (zomeName) {\n this.zomeName = zomeName;\n this._zomeProxy = new zProxyCtor(cellProxy, this.zomeName);\n } else {\n this._zomeProxy = new zProxyCtor(cellProxy);\n this.zomeName = this._zomeProxy.defaultZomeName;\n }\n this._cell = cellProxy.cell;\n cellProxy.addSignalHandler( (signal: AppSignal) => this.handleZomeSignal(signal));\n }\n\n\n /** Filter signal by zome name */\n private handleZomeSignal(signal: AppSignal) {\n //console.log(\"handleZomeSignal()\", this.signalHandler, this.zomeName, signal.zome_name)\n if (this.signalHandler && signal.zome_name == this.zomeName) {\n this.signalHandler(signal);\n }\n }\n\n /** */\n getContext(): any {\n const context = createContext<typeof this>('zvm/'+ this._zomeProxy.defaultZomeName +'/' + this.cell.dnaHash)\n //console.log({contextType: typeof context})\n return context\n }\n}\n\n"]}
1
+ {"version":3,"file":"ZomeViewModel.js","sourceRoot":"","sources":["../src/ZomeViewModel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAA6C,SAAS,EAAC,MAAM,oBAAoB,CAAC;AACzF,OAAO,EAAC,SAAS,EAAC,MAAM,aAAa,CAAC;AAMtC,qCAAqC;AACrC,MAAM,UAAU,GAAG,CAAC,UAA4B;IAC5C,OAAO,CAAC,IAAc,EAAE,EAAE;QACtB,+CAA+C;QAC9C,IAAY,CAAC,UAAU,GAAG,UAAU,CAAC;QACtC,6EAA6E;QAC7E,iGAAiG;QACjG,6EAA6E;IACjF,CAAC,CAAA;AACL,CAAC;AAGD;;;;;;GAMG;AACH,MAAM,OAAgB,aAAc,SAAQ,SAAS,CAAC,SAAS,CAAC;IAO5D,mBAAmB;QACf,OAAQ,IAAI,CAAC,WAAoC,CAAC,UAAU,CAAC;IACjE,CAAC;IAID,gBAAgB;IAChB,MAAM,KAAK,iBAAiB;QACxB,OAAO,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC;IAC7C,CAAC;IAID,WAAW;IACX,YAAY,SAAoB,EAAE,QAAmB;QACjD,KAAK,EAAE,CAAC;QACR,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC9C,IAAI,CAAC,UAAU,EAAE;YACb,MAAM,KAAK,CAAC,oDAAoD,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;SAC7F;QACD,IAAI,QAAQ,EAAE;YACV,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;YACzB,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;SAC9D;aAAM;YACH,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,CAAC,SAAS,CAAC,CAAC;YAC5C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC;SACnD;QACD,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC;QAC5B,SAAS,CAAC,gBAAgB,CAAE,CAAC,MAAiB,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;IACtF,CAAC;IAGD,iCAAiC;IACzB,gBAAgB,CAAC,MAAiB;QACtC,wFAAwF;QACxF,IAAI,IAAI,CAAC,aAAa,IAAI,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ,EAAE;YACzD,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;SAC9B;IACL,CAAC;IAED,MAAM;IACN,UAAU;QACN,MAAM,OAAO,GAAG,aAAa,CAAc,MAAM,GAAE,IAAI,CAAC,UAAU,CAAC,eAAe,GAAE,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAC5G,4CAA4C;QAC5C,OAAO,OAAO,CAAA;IAClB,CAAC;CACJ","sourcesContent":["import {createContext} from \"@lit-labs/context\";\nimport {CellProxy, ZomeProxy, ZomeProxyConstructor, CellMixin} from \"@ddd-qc/cell-proxy\";\nimport {ViewModel} from \"./ViewModel\";\nimport {AppSignalCb, ZomeName} from \"@holochain/client\";\nimport {AppSignal} from \"@holochain/client/lib/api/app/types\";\n\nexport type ZvmConstructor = {new(proxy: CellProxy, zomeName?: ZomeName): ZomeViewModel} /*& typeof ZomeSpecific;*/\n\n/** (EXPERIMENTAL) Class Decorator */\nexport function zvm(zProxyCtor: typeof ZomeProxy) {\n return (ctor: Function) => {\n //let zvmCtor = (ctor as typeof ZomeViewModel);\n (ctor as any).ZOME_PROXY = zProxyCtor;\n //get zomeProxy(): DummyZomeProxy {return this._zomeProxy as DummyZomeProxy;}\n //(ctor as any).zomeProxy = function() {return (ctor as any)._zomeProxy as typeof zProxyFactory;}\n //(ctor as any).zomeProxy = (ctor as any)._zomeProxy as typeof zProxyFactory;\n }\n}\n\n\n/**\n * Abstract ViewModel for a Zome.\n * It extends a ViewModel by adding a ZomeProxy.\n * Views are required to use this in order to interact with the ZomeProxy.\n * The perspective is the data from the Zome that is transformed and enhanced in order to be consumed by a View.\n * It can be automatically updated by Signals or the Zome Scheduler.\n */\nexport abstract class ZomeViewModel extends CellMixin(ViewModel) {\n\n /** Zome proxy constructor */\n static ZOME_PROXY: ZomeProxyConstructor;\n protected _zomeProxy: ZomeProxy;\n /* Child class should implement with child proxy class as return type */\n abstract get zomeProxy(): ZomeProxy;\n getProxyConstructor(): ZomeProxyConstructor {\n return (this.constructor as typeof ZomeViewModel).ZOME_PROXY;\n }\n\n signalHandler?: AppSignalCb;\n\n /** Zome name */\n static get DEFAULT_ZOME_NAME(): string {\n return this.ZOME_PROXY.DEFAULT_ZOME_NAME;\n }\n zomeName!: ZomeName;\n\n\n /** Ctor */\n constructor(cellProxy: CellProxy, zomeName?: ZomeName) {\n super();\n const zProxyCtor = this.getProxyConstructor();\n if (!zProxyCtor) {\n throw Error(\"ZOME_PROXY static field undefined in ZVM subclass \" + this.constructor.name);\n }\n if (zomeName) {\n this.zomeName = zomeName;\n this._zomeProxy = new zProxyCtor(cellProxy, this.zomeName);\n } else {\n this._zomeProxy = new zProxyCtor(cellProxy);\n this.zomeName = this._zomeProxy.defaultZomeName;\n }\n this._cell = cellProxy.cell;\n cellProxy.addSignalHandler( (signal: AppSignal) => this.handleZomeSignal(signal));\n }\n\n\n /** Filter signal by zome name */\n private handleZomeSignal(signal: AppSignal) {\n //console.log(\"handleZomeSignal()\", this.signalHandler, this.zomeName, signal.zome_name)\n if (this.signalHandler && signal.zome_name == this.zomeName) {\n this.signalHandler(signal);\n }\n }\n\n /** */\n getContext(): any {\n const context = createContext<typeof this>('zvm/'+ this._zomeProxy.defaultZomeName +'/' + this.cell.dnaHash)\n //console.log({contextType: typeof context})\n return context\n }\n}\n\n"]}
@@ -48,7 +48,7 @@ export class EntryDefSelect extends ScopedElementsMixin(LitElement) {
48
48
  //console.log({zomeTypes})
49
49
  let entryTypeOptions = null;
50
50
  if (zomeTypes.length > 0) {
51
- entryTypeOptions = Object.entries(zomeTypes[0]).map(([zomeName, pair]) => {
51
+ entryTypeOptions = Object.entries(zomeTypes[0]).map(([_zomeName, pair]) => {
52
52
  return html `<option>${pair[0]}</option>`;
53
53
  });
54
54
  }
@@ -1 +1 @@
1
- {"version":3,"file":"entry-def-select.js","sourceRoot":"","sources":["../../src/elements/entry-def-select.ts"],"names":[],"mappings":"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","sourcesContent":["import { LitElement, html } from \"lit\";\nimport { state, property } from \"lit/decorators.js\";\nimport { DnaViewModel } from \"../DnaViewModel\";\nimport { ScopedElementsMixin } from \"@open-wc/scoped-elements\";\nimport {Dictionary} from \"@ddd-qc/cell-proxy\";\n\n\n/**\n *\n */\nexport class EntryDefSelect extends ScopedElementsMixin(LitElement) {\n\n /** -- Fields -- */\n @state() private _selectedZomeName = \"\"\n @state() private _allEntryDefs: Dictionary<[string, boolean][]> = {};\n\n @property({ type: Object, attribute: false })\n dnaViewModel!: DnaViewModel;\n\n\n /** -- Methods -- */\n\n async firstUpdated() {\n this._allEntryDefs = await this.dnaViewModel.fetchAllEntryDefs()\n }\n\n /** */\n async onZomeSelect(e: any) {\n //console.log(\"onZomeSelect() CALLED\", e)\n const zomeSelector = this.shadowRoot!.getElementById(\"selectedZome\") as HTMLSelectElement;\n this._selectedZomeName = zomeSelector.value;\n }\n\n /** */\n async onEntrySelect(e: any) {\n // console.log(\"onEntrySelect() CALLED\", e)\n const entrySelector = this.shadowRoot!.getElementById(\"selectedEntryType\") as HTMLSelectElement;\n const options = {\n detail: { zome: this._selectedZomeName, entry: entrySelector.value },\n bubbles: true,\n composed: true\n };\n this.dispatchEvent(new CustomEvent('entrySelected', options));\n }\n\n\n /** */\n render() {\n //console.log(\"<entry-def-select> render()\", this.dnaViewModel)\n // if (!this.dnaViewModel) {\n // return html`<span>Loading...</span>`;\n // }\n\n const zomeOptions = Object.entries(this._allEntryDefs).map(\n ([zomeName, _entryDef]) => {\n return html`<option>${zomeName}</option>`\n }\n )\n let zomeTypes = Object.entries(this._allEntryDefs)\n .filter((item) => { return item[0] == this._selectedZomeName; })\n .map((item) => { return item[1] });\n //console.log({zomeTypes})\n\n let entryTypeOptions = null;\n if (zomeTypes.length > 0) {\n entryTypeOptions = Object.entries(zomeTypes[0]).map(\n ([zomeName, pair]) => {\n return html`<option>${pair[0]}</option>`;\n });\n }\n //console.log({entryTypeOptions})\n\n /** render all */\n return html`\n <select name=\"selectedZome\" id=\"selectedZome\" @click=${this.onZomeSelect}>\n ${zomeOptions}\n </select>\n <span>::</span>\n <select name=\"selectedEntryType\" id=\"selectedEntryType\" @click=${this.onEntrySelect}>\n ${entryTypeOptions}\n </select>\n `\n }\n}\n"]}
1
+ {"version":3,"file":"entry-def-select.js","sourceRoot":"","sources":["../../src/elements/entry-def-select.ts"],"names":[],"mappings":"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","sourcesContent":["import { LitElement, html } from \"lit\";\nimport { state, property } from \"lit/decorators.js\";\nimport { DnaViewModel } from \"../DnaViewModel\";\nimport { ScopedElementsMixin } from \"@open-wc/scoped-elements\";\nimport {Dictionary} from \"@ddd-qc/cell-proxy\";\n\n\n/**\n *\n */\nexport class EntryDefSelect extends ScopedElementsMixin(LitElement) {\n\n /** -- Fields -- */\n @state() private _selectedZomeName = \"\"\n @state() private _allEntryDefs: Dictionary<[string, boolean][]> = {};\n\n @property({ type: Object, attribute: false })\n dnaViewModel!: DnaViewModel;\n\n\n /** -- Methods -- */\n\n async firstUpdated() {\n this._allEntryDefs = await this.dnaViewModel.fetchAllEntryDefs()\n }\n\n /** */\n async onZomeSelect(e: any) {\n //console.log(\"onZomeSelect() CALLED\", e)\n const zomeSelector = this.shadowRoot!.getElementById(\"selectedZome\") as HTMLSelectElement;\n this._selectedZomeName = zomeSelector.value;\n }\n\n /** */\n async onEntrySelect(e: any) {\n // console.log(\"onEntrySelect() CALLED\", e)\n const entrySelector = this.shadowRoot!.getElementById(\"selectedEntryType\") as HTMLSelectElement;\n const options = {\n detail: { zome: this._selectedZomeName, entry: entrySelector.value },\n bubbles: true,\n composed: true\n };\n this.dispatchEvent(new CustomEvent('entrySelected', options));\n }\n\n\n /** */\n render() {\n //console.log(\"<entry-def-select> render()\", this.dnaViewModel)\n // if (!this.dnaViewModel) {\n // return html`<span>Loading...</span>`;\n // }\n\n const zomeOptions = Object.entries(this._allEntryDefs).map(\n ([zomeName, _entryDef]) => {\n return html`<option>${zomeName}</option>`\n }\n )\n let zomeTypes = Object.entries(this._allEntryDefs)\n .filter((item) => { return item[0] == this._selectedZomeName; })\n .map((item) => { return item[1] });\n //console.log({zomeTypes})\n\n let entryTypeOptions = null;\n if (zomeTypes.length > 0) {\n entryTypeOptions = Object.entries(zomeTypes[0]).map(\n ([_zomeName, pair]) => {\n return html`<option>${pair[0]}</option>`;\n });\n }\n //console.log({entryTypeOptions})\n\n /** render all */\n return html`\n <select name=\"selectedZome\" id=\"selectedZome\" @click=${this.onZomeSelect}>\n ${zomeOptions}\n </select>\n <span>::</span>\n <select name=\"selectedEntryType\" id=\"selectedEntryType\" @click=${this.onEntrySelect}>\n ${entryTypeOptions}\n </select>\n `\n }\n}\n"]}
package/dist/roleMixin.js CHANGED
@@ -11,7 +11,6 @@ export function RoleMixin(Base) {
11
11
  this.baseRoleName = this.constructor.DEFAULT_BASE_ROLE_NAME;
12
12
  }
13
13
  }
14
- ;
15
14
  return ARoleSpecific;
16
15
  }
17
16
  export const RoleSpecific = RoleMixin(Empty);
@@ -24,7 +23,6 @@ export function HappMixin(Base) {
24
23
  class AHappSpecific extends Base {
25
24
  constructor(...args) { super(); this.happId = this.constructor.DEFAULT_HAPP_ID; }
26
25
  }
27
- ;
28
26
  return AHappSpecific;
29
27
  }
30
28
  export const HappSpecific = HappMixin(Empty);
@@ -1 +1 @@
1
- {"version":3,"file":"roleMixin.js","sourceRoot":"","sources":["../src/roleMixin.ts"],"names":[],"mappings":"AACA,mGAAmG;AAEnG,OAAO,EAAoC,KAAK,EAAC,MAAM,oBAAoB,CAAC;AAG5E;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAoC,IAAW;IACtE,MAAe,aAAc,SAAQ,IAAI;QACvC,YAAY,GAAG,IAAW;YACxB,KAAK,EAAE,CAAC;YACR,IAAI,CAAC,YAAY,GAAI,IAAI,CAAC,WAAoC,CAAC,sBAAsB,CAAC;QACxF,CAAC;KAGF;IAAA,CAAC;IACF,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;AAG7C,mGAAmG;AAEnG;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAoC,IAAW;IACtE,MAAe,aAAc,SAAQ,IAAI;QACvC,YAAY,GAAG,IAAW,IAAE,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,GAAI,IAAI,CAAC,WAAoC,CAAC,eAAe,CAAA,CAAA,CAAC;KAG/G;IAAA,CAAC;IACF,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC","sourcesContent":["\r\n/** ------------------------------------------------------------------------------------------- **/\r\n\r\nimport {AbstractConstructor, BaseRoleName, Empty} from \"@ddd-qc/cell-proxy\";\r\nimport {InstalledAppId} from \"@holochain/client\";\r\n\r\n/**\r\n * Mixin for Role bound classes.\r\n * A Role bound class must have a base RoleName.\r\n */\r\nexport function RoleMixin<TBase extends AbstractConstructor>(Base: TBase) {\r\n abstract class ARoleSpecific extends Base {\r\n constructor(...args: any[]) {\r\n super();\r\n this.baseRoleName = (this.constructor as typeof ARoleSpecific).DEFAULT_BASE_ROLE_NAME;\r\n }\r\n static readonly DEFAULT_BASE_ROLE_NAME: BaseRoleName;\r\n baseRoleName: BaseRoleName;\r\n };\r\n return ARoleSpecific;\r\n}\r\n\r\nexport const RoleSpecific = RoleMixin(Empty);\r\n\r\n\r\n/** ------------------------------------------------------------------------------------------- **/\r\n\r\n/**\r\n * Mixin for Happ bound classes.\r\n * Unused for the moment.\r\n */\r\nexport function HappMixin<TBase extends AbstractConstructor>(Base: TBase) {\r\n abstract class AHappSpecific extends Base {\r\n constructor(...args: any[]){super(); this.happId = (this.constructor as typeof AHappSpecific).DEFAULT_HAPP_ID}\r\n static readonly DEFAULT_HAPP_ID: InstalledAppId;\r\n happId: InstalledAppId;\r\n };\r\n return AHappSpecific;\r\n}\r\n\r\nexport const HappSpecific = HappMixin(Empty);\r\n"]}
1
+ {"version":3,"file":"roleMixin.js","sourceRoot":"","sources":["../src/roleMixin.ts"],"names":[],"mappings":"AACA,mGAAmG;AAEnG,OAAO,EAAoC,KAAK,EAAC,MAAM,oBAAoB,CAAC;AAG5E;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAoC,IAAW;IACtE,MAAe,aAAc,SAAQ,IAAI;QACvC,YAAY,GAAG,IAAW;YACxB,KAAK,EAAE,CAAC;YACR,IAAI,CAAC,YAAY,GAAI,IAAI,CAAC,WAAoC,CAAC,sBAAsB,CAAC;QACxF,CAAC;KAGF;IAED,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;AAG7C,mGAAmG;AAEnG;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAoC,IAAW;IACtE,MAAe,aAAc,SAAQ,IAAI;QACvC,YAAY,GAAG,IAAW,IAAE,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,GAAI,IAAI,CAAC,WAAoC,CAAC,eAAe,CAAA,CAAA,CAAC;KAG/G;IAED,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC","sourcesContent":["\r\n/** ------------------------------------------------------------------------------------------- **/\r\n\r\nimport {AbstractConstructor, BaseRoleName, Empty} from \"@ddd-qc/cell-proxy\";\r\nimport {InstalledAppId} from \"@holochain/client\";\r\n\r\n/**\r\n * Mixin for Role bound classes.\r\n * A Role bound class must have a base RoleName.\r\n */\r\nexport function RoleMixin<TBase extends AbstractConstructor>(Base: TBase) {\r\n abstract class ARoleSpecific extends Base {\r\n constructor(...args: any[]) {\r\n super();\r\n this.baseRoleName = (this.constructor as typeof ARoleSpecific).DEFAULT_BASE_ROLE_NAME;\r\n }\r\n static readonly DEFAULT_BASE_ROLE_NAME: BaseRoleName;\r\n baseRoleName: BaseRoleName;\r\n }\r\n\r\n return ARoleSpecific;\r\n}\r\n\r\nexport const RoleSpecific = RoleMixin(Empty);\r\n\r\n\r\n/** ------------------------------------------------------------------------------------------- **/\r\n\r\n/**\r\n * Mixin for Happ bound classes.\r\n * Unused for the moment.\r\n */\r\nexport function HappMixin<TBase extends AbstractConstructor>(Base: TBase) {\r\n abstract class AHappSpecific extends Base {\r\n constructor(...args: any[]){super(); this.happId = (this.constructor as typeof AHappSpecific).DEFAULT_HAPP_ID}\r\n static readonly DEFAULT_HAPP_ID: InstalledAppId;\r\n happId: InstalledAppId;\r\n }\r\n \r\n return AHappSpecific;\r\n}\r\n\r\nexport const HappSpecific = HappMixin(Empty);\r\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ddd-qc/lit-happ",
3
- "version": "0.13.1",
3
+ "version": "0.13.2",
4
4
  "description": "MVVM Framework for holochain apps using Lit",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",