@memberjunction/ng-dashboards 6.1.2 → 6.2.0-edge.0
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.
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts +6 -1
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.js +99 -45
- package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts +4 -0
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts.map +1 -1
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js +16 -6
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +4 -0
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.js +14 -4
- package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
- package/dist/DataExplorer/services/explorer-state.service.js +2 -2
- package/dist/DataExplorer/services/explorer-state.service.js.map +1 -1
- package/dist/DevTools/graphql-console.component.d.ts.map +1 -1
- package/dist/DevTools/graphql-console.component.js +2 -0
- package/dist/DevTools/graphql-console.component.js.map +1 -1
- package/dist/Integration/components/connections/connections.component.d.ts.map +1 -1
- package/dist/Integration/components/connections/connections.component.js +2 -0
- package/dist/Integration/components/connections/connections.component.js.map +1 -1
- package/dist/KnowledgeHub/components/feature-pipelines/feature-pipelines-resource.component.d.ts +4 -12
- package/dist/KnowledgeHub/components/feature-pipelines/feature-pipelines-resource.component.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/feature-pipelines/feature-pipelines-resource.component.js +39 -78
- package/dist/KnowledgeHub/components/feature-pipelines/feature-pipelines-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.d.ts +3 -0
- package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.js +7 -6
- package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.d.ts +3 -0
- package/dist/Lists/components/lists-my-lists-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.js +7 -6
- package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
- package/dist/PredictiveStudio/at-risk.view-models.d.ts +41 -3
- package/dist/PredictiveStudio/at-risk.view-models.d.ts.map +1 -1
- package/dist/PredictiveStudio/at-risk.view-models.js +99 -6
- package/dist/PredictiveStudio/at-risk.view-models.js.map +1 -1
- package/dist/PredictiveStudio/components/ps-catalog.component.d.ts +4 -1
- package/dist/PredictiveStudio/components/ps-catalog.component.d.ts.map +1 -1
- package/dist/PredictiveStudio/components/ps-catalog.component.js +61 -37
- package/dist/PredictiveStudio/components/ps-catalog.component.js.map +1 -1
- package/dist/PredictiveStudio/components/ps-experiments.component.d.ts +12 -0
- package/dist/PredictiveStudio/components/ps-experiments.component.d.ts.map +1 -1
- package/dist/PredictiveStudio/components/ps-experiments.component.js +426 -184
- package/dist/PredictiveStudio/components/ps-experiments.component.js.map +1 -1
- package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.d.ts +84 -0
- package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.d.ts.map +1 -0
- package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.js +1397 -0
- package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.js.map +1 -0
- package/dist/PredictiveStudio/components/ps-pipelines.component.d.ts +66 -34
- package/dist/PredictiveStudio/components/ps-pipelines.component.d.ts.map +1 -1
- package/dist/PredictiveStudio/components/ps-pipelines.component.js +2456 -743
- package/dist/PredictiveStudio/components/ps-pipelines.component.js.map +1 -1
- package/dist/PredictiveStudio/components/ps-predictions-grid.component.d.ts +194 -0
- package/dist/PredictiveStudio/components/ps-predictions-grid.component.d.ts.map +1 -0
- package/dist/PredictiveStudio/components/ps-predictions-grid.component.js +1902 -0
- package/dist/PredictiveStudio/components/ps-predictions-grid.component.js.map +1 -0
- package/dist/PredictiveStudio/components/ps-production.component.d.ts +17 -1
- package/dist/PredictiveStudio/components/ps-production.component.d.ts.map +1 -1
- package/dist/PredictiveStudio/components/ps-production.component.js +653 -372
- package/dist/PredictiveStudio/components/ps-production.component.js.map +1 -1
- package/dist/PredictiveStudio/components/ps-registry.component.d.ts +21 -61
- package/dist/PredictiveStudio/components/ps-registry.component.d.ts.map +1 -1
- package/dist/PredictiveStudio/components/ps-registry.component.js +214 -681
- package/dist/PredictiveStudio/components/ps-registry.component.js.map +1 -1
- package/dist/PredictiveStudio/components/ps-run-experiment-modal.component.d.ts +49 -0
- package/dist/PredictiveStudio/components/ps-run-experiment-modal.component.d.ts.map +1 -0
- package/dist/PredictiveStudio/components/ps-run-experiment-modal.component.js +658 -0
- package/dist/PredictiveStudio/components/ps-run-experiment-modal.component.js.map +1 -0
- package/dist/PredictiveStudio/predictive-studio-score-history.service.d.ts +42 -0
- package/dist/PredictiveStudio/predictive-studio-score-history.service.d.ts.map +1 -0
- package/dist/PredictiveStudio/predictive-studio-score-history.service.js +90 -0
- package/dist/PredictiveStudio/predictive-studio-score-history.service.js.map +1 -0
- package/dist/PredictiveStudio/predictive-studio.view-models.d.ts +14 -2
- package/dist/PredictiveStudio/predictive-studio.view-models.d.ts.map +1 -1
- package/dist/PredictiveStudio/predictive-studio.view-models.js +41 -5
- package/dist/PredictiveStudio/predictive-studio.view-models.js.map +1 -1
- package/dist/PredictiveStudio/resources/ps-models-resource.component.d.ts +9 -1
- package/dist/PredictiveStudio/resources/ps-models-resource.component.d.ts.map +1 -1
- package/dist/PredictiveStudio/resources/ps-models-resource.component.js +178 -65
- package/dist/PredictiveStudio/resources/ps-models-resource.component.js.map +1 -1
- package/dist/PredictiveStudio/resources/ps-predictions-resource.component.d.ts +9 -1
- package/dist/PredictiveStudio/resources/ps-predictions-resource.component.d.ts.map +1 -1
- package/dist/PredictiveStudio/resources/ps-predictions-resource.component.js +307 -369
- package/dist/PredictiveStudio/resources/ps-predictions-resource.component.js.map +1 -1
- package/dist/PredictiveStudio/resources/ps-resource-base.js +1 -1
- package/dist/PredictiveStudio/resources/ps-resource-base.js.map +1 -1
- package/dist/PredictiveStudio/resources/ps-studio-resource.component.d.ts +17 -1
- package/dist/PredictiveStudio/resources/ps-studio-resource.component.d.ts.map +1 -1
- package/dist/PredictiveStudio/resources/ps-studio-resource.component.js +309 -138
- package/dist/PredictiveStudio/resources/ps-studio-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/graph-resource.component.d.ts +1 -0
- package/dist/VersionHistory/components/graph-resource.component.d.ts.map +1 -1
- package/dist/VersionHistory/components/graph-resource.component.js +6 -5
- package/dist/VersionHistory/components/graph-resource.component.js.map +1 -1
- package/dist/predictive-studio-dashboards.module.d.ts +10 -8
- package/dist/predictive-studio-dashboards.module.d.ts.map +1 -1
- package/dist/predictive-studio-dashboards.module.js +13 -3
- package/dist/predictive-studio-dashboards.module.js.map +1 -1
- package/package.json +64 -63
|
@@ -387,9 +387,9 @@ export class ExplorerStateService {
|
|
|
387
387
|
});
|
|
388
388
|
// Add entity breadcrumb if selected
|
|
389
389
|
if (state.selectedEntityName) {
|
|
390
|
-
const entityInfo = this.metadata.Entities.find(e => e.Name === state.selectedEntityName);
|
|
390
|
+
const entityInfo = this.metadata.Entities.find(e => e.Name.toLowerCase() === state.selectedEntityName?.toLowerCase());
|
|
391
391
|
breadcrumbs.push({
|
|
392
|
-
label: state.selectedEntityName,
|
|
392
|
+
label: entityInfo?.DisplayNameOrName || state.selectedEntityName,
|
|
393
393
|
type: 'entity',
|
|
394
394
|
entityName: state.selectedEntityName,
|
|
395
395
|
icon: entityInfo?.Icon ? this.formatEntityIcon(entityInfo.Icon) : 'fa-solid fa-table'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"explorer-state.service.js","sourceRoot":"","sources":["../../../src/DataExplorer/services/explorer-state.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAc,MAAM,MAAM,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAA4C,MAAM,sBAAsB,CAAC;AACjH,OAAO,EAAwE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACrI,OAAO,EAAqB,sBAAsB,EAA4J,MAAM,oCAAoC,CAAC;AACzP,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;;AAEpD,MAAM,gBAAgB,GAAG,oBAAoB,CAAC;AAC9C,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAC5B,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAC/B,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAC9B,MAAM,qBAAqB,GAAG,EAAE,CAAC,CAAC,kBAAkB;AAKpD,MAAM,OAAO,oBAAoB;IACvB,MAAM,GAAG,IAAI,eAAe,CAAoB,sBAAsB,CAAC,CAAC;IACxE,SAAS,GAA6B,IAAI,CAAC;IACnD,sGAAsG;IACtG,IAAW,QAAQ,CAAC,KAA+B;QAC/C,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IAC3B,CAAC;IACD,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,SAAS,IAAI,QAAQ,CAAC,QAAQ,CAAC;IAC/C,CAAC;IACD,IAAY,QAAQ;QAClB,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IACO,WAAW,GAAyC,IAAI,CAAC;IAEjE,oEAAoE;IAC5D,aAAa,GAA8B,IAAI,CAAC;IAExD,kDAAkD;IAC1C,YAAY,GAAG,IAAI,eAAe,CAAmB,EAAE,CAAC,CAAC;IAEjE,kDAAkD;IAC1C,cAAc,GAAG,IAAI,eAAe,CAAuB,EAAE,CAAC,CAAC;IAEvE,yEAAyE;IACjE,gBAAgB,GAAG,IAAI,eAAe,CAAmB,EAAE,CAAC,CAAC;IAErE,iFAAiF;IACzE,mBAAmB,GAAgC,EAAE,CAAC;IAE9D,yDAAyD;IACjD,gBAAgB,GAAG,IAAI,GAAG,EAAU,CAAC;IAE7C;QACE,qEAAqE;IACvE,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,UAAU,CAAC,MAAiC;QAChD,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC;QAC5B,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACvB,iFAAiF;QACjF,MAAM,IAAI,CAAC,uBAAuB,EAAE,CAAC;QACrC,iCAAiC;QACjC,MAAM,OAAO,CAAC,GAAG,CAAC;YAChB,IAAI,CAAC,oBAAoB,EAAE;YAC3B,IAAI,CAAC,mBAAmB,EAAE;YAC1B,IAAI,CAAC,iBAAiB,EAAE;SACzB,CAAC,CAAC;QACH,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC3B,CAAC;IAED;;;OAGG;IACK,aAAa;QACnB,IAAI,IAAI,CAAC,aAAa,EAAE,aAAa,EAAE,CAAC;YACtC,OAAO,GAAG,gBAAgB,IAAI,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC;QACnE,CAAC;QACD,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,IAAI,kBAAkB;QACpB,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,IAAI,oBAAoB;QACtB,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,IAAI,eAAe;QACjB,OAAO,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,CAAC;IAC9C,CAAC;IAED;;OAEG;IACH,IAAI,sBAAsB;QACxB,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,IAAI,gBAAgB;QAClB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,OAAmC;QAC7C,MAAM,QAAQ,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,OAAO,EAAE,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3B,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAED;;;OAGG;IACH,YAAY,CAAC,UAAyB;QACpC,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QACvC,MAAM,WAAW,GAAG,EAAE,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;QAEpD,+EAA+E;QAC/E,IAAI,YAAY,CAAC,kBAAkB,IAAI,YAAY,CAAC,iBAAiB,EAAE,CAAC;YACtE,WAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,GAAG;gBAC7C,UAAU,EAAE,YAAY,CAAC,iBAAiB;gBAC1C,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE;aACzB,CAAC;QACJ,CAAC;QAED,wDAAwD;QACxD,IAAI,cAAc,GAAG,EAAE,CAAC;QACxB,IAAI,UAAU,IAAI,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC;YAC1C,cAAc,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC,UAAU,CAAC;YACpD,WAAW,CAAC,UAAU,CAAC,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACpD,CAAC;QAED,gDAAgD;QAChD,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;QAEvC,IAAI,CAAC,WAAW,CAAC;YACf,kBAAkB,EAAE,UAAU;YAC9B,cAAc,EAAE,IAAI,EAAE,iCAAiC;YACvD,iBAAiB,EAAE,cAAc,EAAE,iCAAiC;YACpE,gBAAgB,EAAE,IAAI;YACtB,eAAe,EAAE,KAAK;YACtB,WAAW;SACZ,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,oBAAoB,CAAC,KAAuC;QAClE,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,OAAO,CAAC,MAAM,IAAI,qBAAqB;YAAE,OAAO;QAEpD,wDAAwD;QACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;QAC9D,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,GAAG,qBAAqB,CAAC;QACxD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;YAClC,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,MAAqB;QAC9B,IAAI,CAAC,WAAW,CAAC;YACf,cAAc,EAAE,MAAM;YACtB,YAAY,EAAE,KAAK,CAAC,uDAAuD;SAC5E,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,QAAiB;QAC/B,IAAI,CAAC,WAAW,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED;;OAEG;IACH,qBAAqB;QACnB,IAAI,CAAC,WAAW,CAAC,EAAE,mBAAmB,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC,CAAC;IACpF,CAAC;IAED;;OAEG;IACH,mBAAmB;QACjB,IAAI,CAAC,WAAW,CAAC,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC;IAED;;OAEG;IACH,oBAAoB;QAClB,IAAI,CAAC,WAAW,CAAC,EAAE,mBAAmB,EAAE,KAAK,EAAE,CAAC,CAAC;IACnD,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,IAA0B;QACpC,IAAI,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IACvC,CAAC;IAED;;;OAGG;IACH,oBAAoB,CAAC,MAAc;QACjC,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QACvC,MAAM,WAAW,GAAG,EAAE,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;QAEpD,kCAAkC;QAClC,IAAI,YAAY,CAAC,kBAAkB,EAAE,CAAC;YACpC,IAAI,MAAM,EAAE,CAAC;gBACX,WAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,GAAG;oBAC7C,UAAU,EAAE,MAAM;oBAClB,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE;iBACzB,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,uCAAuC;gBACvC,OAAO,WAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,EAAE,iBAAiB,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED;;;;OAIG;IACH,YAAY,CAAC,QAAuB,EAAE,UAAmB;QACvD,IAAI,CAAC,WAAW,CAAC;YACf,gBAAgB,EAAE,QAAQ;YAC1B,kBAAkB,EAAE,UAAU,IAAI,IAAI;YACtC,eAAe,EAAE,QAAQ,KAAK,IAAI;SACnC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,IAAI,CAAC,WAAW,CAAC;YACf,eAAe,EAAE,KAAK;YACtB,gBAAgB,EAAE,IAAI;YACtB,kBAAkB,EAAE,IAAI;SACzB,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,qBAAqB;QACnB,IAAI,CAAC,WAAW,CAAC;YACf,wBAAwB,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB;SACtE,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,qBAAqB,CAAC,OAA4C;QAChE,MAAM,OAAO,GAA+B;YAC1C,wBAAwB,EAAE,KAAK;SAChC,CAAC;QAEF,wCAAwC;QACxC,QAAQ,OAAO,EAAE,CAAC;YAChB,KAAK,WAAW;gBACd,OAAO,CAAC,wBAAwB,GAAG,IAAI,CAAC;gBACxC,MAAM;YACR,KAAK,QAAQ;gBACX,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC;gBACrC,MAAM;YACR,KAAK,UAAU;gBACb,OAAO,CAAC,uBAAuB,GAAG,IAAI,CAAC;gBACvC,MAAM;QACV,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,IAAmC;QAC/C,MAAM,WAAW,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAEvD,uEAAuE;QACvE,MAAM,aAAa,GAAG,WAAW,CAAC,SAAS,CACzC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,kBAAkB,KAAK,IAAI,CAAC,kBAAkB,CAC1F,CAAC;QACF,IAAI,aAAa,IAAI,CAAC,EAAE,CAAC;YACvB,WAAW,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;QACvC,CAAC;QAED,8BAA8B;QAC9B,WAAW,CAAC,OAAO,CAAC;YAClB,GAAG,IAAI;YACP,SAAS,EAAE,IAAI,IAAI,EAAE;SACtB,CAAC,CAAC;QAEH,mBAAmB;QACnB,IAAI,WAAW,CAAC,MAAM,GAAG,gBAAgB,EAAE,CAAC;YAC1C,WAAW,CAAC,MAAM,GAAG,gBAAgB,CAAC;QACxC,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,IAAkB;QAC5B,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAEnD,0BAA0B;QAC1B,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAChC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI;YACpB,CAAC,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU;YAChC,CAAC,CAAC,kBAAkB,KAAK,IAAI,CAAC,kBAAkB;YAChD,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,CACzB,CAAC;QAEF,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrB,IAAI,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,IAAkB;QAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CACvD,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI;YACpB,CAAC,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU;YAChC,CAAC,CAAC,kBAAkB,KAAK,IAAI,CAAC,kBAAkB;YAChD,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC,CAC5B,CAAC;QACF,IAAI,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,OAAsD;QAClE,MAAM,GAAG,GAAG,GAAG,OAAO,iBAA4C,CAAC;QACnE,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAgC,CAAC,CAAC;IACrF,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,SAAS;QACrB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC;YAC7C,IAAI,CAAC,MAAM;gBAAE,OAAO;YAEpB,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YACxC,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC;YAEvC,6CAA6C;YAC7C,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,UAAU,CAAC,CAAC;YAExE,IAAI,OAAO,EAAE,KAAK,EAAE,CAAC;gBACnB,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAA+B,CAAC;gBAC3E,+CAA+C;gBAC/C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,sBAAsB,EAAE,GAAG,UAAU,EAAE,CAAC,CAAC;YACjE,CAAC;iBAAM,CAAC;gBACN,+BAA+B;gBAC/B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,sBAAsB,EAAE,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,qCAAqC,EAAE,KAAK,CAAC,CAAC;YAC3D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,sBAAsB,EAAE,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAED;;OAEG;IACK,iBAAiB;QACvB,MAAM,WAAW,GAAqB,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QAEhC,yFAAyF;QACzF,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE,eAAe,IAAI,KAAK,CAAC;QAC/D,WAAW,CAAC,IAAI,CAAC;YACf,KAAK,EAAE,SAAS;YAChB,IAAI,EAAE,aAAa;YACnB,IAAI,EAAE,sBAAsB;SAC7B,CAAC,CAAC;QAEH,oCAAoC;QACpC,IAAI,KAAK,CAAC,kBAAkB,EAAE,CAAC;YAC7B,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,kBAAkB,CAAC,CAAC;YACzF,WAAW,CAAC,IAAI,CAAC;gBACf,KAAK,EAAE,KAAK,CAAC,kBAAkB;gBAC/B,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,KAAK,CAAC,kBAAkB;gBACpC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,mBAAmB;aACtF,CAAC,CAAC;QACL,CAAC;QAED,oCAAoC;QACpC,IAAI,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC,kBAAkB,EAAE,CAAC;YACvD,WAAW,CAAC,IAAI,CAAC;gBACf,KAAK,EAAE,KAAK,CAAC,kBAAkB;gBAC/B,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,KAAK,CAAC,kBAAkB,IAAI,SAAS;gBACjD,kBAAkB,EAAE,KAAK,CAAC,gBAAgB;gBAC1C,IAAI,EAAE,sBAAsB;aAC7B,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACtC,CAAC;IAED;;OAEG;IACK,gBAAgB,CAAC,IAAY;QACnC,IAAI,CAAC,IAAI;YAAE,OAAO,mBAAmB,CAAC;QACtC,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YACrD,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;gBAC5D,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;gBAC3D,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC3B,OAAO,IAAI,CAAC;YACd,CAAC;YACD,OAAO,YAAY,IAAI,EAAE,CAAC;QAC5B,CAAC;QACD,OAAO,eAAe,IAAI,EAAE,CAAC;IAC/B,CAAC;IAED;;OAEG;IACK,aAAa;QACnB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACjC,CAAC;QACD,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,GAAG,EAAE;YACjC,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,CAAC,EAAE,IAAI,CAAC,CAAC;IACX,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,SAAS;QACrB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC;YAC7C,IAAI,CAAC,MAAM;gBAAE,OAAO;YAEpB,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YACxC,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC;YACzB,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC;YAEvC,kDAAkD;YAClD,IAAI,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,UAAU,CAAC,CAAC;YAEtE,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,kCAAkC;gBAClC,OAAO,GAAG,MAAM,EAAE,CAAC,eAAe,CAAsB,mBAAmB,CAAC,CAAC;gBAC7E,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;gBACxB,OAAO,CAAC,OAAO,GAAG,UAAU,CAAC;YAC/B,CAAC;YAED,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAClD,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;QACvB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,qCAAqC,EAAE,KAAK,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,oBAAoB,CAAC,UAA0B;QAC7C,QAAQ,UAAU,CAAC,IAAI,EAAE,CAAC;YACxB,KAAK,aAAa;gBAChB,qDAAqD;gBACrD,IAAI,CAAC,WAAW,CAAC;oBACf,kBAAkB,EAAE,IAAI;oBACxB,cAAc,EAAE,IAAI;oBACpB,gBAAgB,EAAE,IAAI;oBACtB,kBAAkB,EAAE,IAAI;oBACxB,iBAAiB,EAAE,EAAE;oBACrB,eAAe,EAAE,KAAK;iBACvB,CAAC,CAAC;gBACH,MAAM;YAER,KAAK,QAAQ;gBACX,+CAA+C;gBAC/C,IAAI,UAAU,CAAC,UAAU,EAAE,CAAC;oBAC1B,IAAI,CAAC,WAAW,CAAC;wBACf,gBAAgB,EAAE,IAAI;wBACtB,kBAAkB,EAAE,IAAI;wBACxB,eAAe,EAAE,KAAK;qBACvB,CAAC,CAAC;gBACL,CAAC;gBACD,MAAM;YAER,KAAK,QAAQ;gBACX,sCAAsC;gBACtC,MAAM;QACV,CAAC;IACH,CAAC;IAED,2CAA2C;IAC3C,gCAAgC;IAChC,2CAA2C;IAE3C;;OAEG;IACH,qBAAqB;QACnB,IAAI,CAAC,WAAW,CAAC,EAAE,eAAe,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC;IAC5E,CAAC;IAED,2CAA2C;IAC3C,+CAA+C;IAC/C,2CAA2C;IAE3C;;OAEG;IACH,sBAAsB;QACpB,IAAI,CAAC,WAAW,CAAC,EAAE,oBAAoB,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE,CAAC,CAAC;IACtF,CAAC;IAED;;OAEG;IACH,wBAAwB,CAAC,SAAiB;QACxC,MAAM,QAAQ,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC;QAC9D,QAAQ,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,KAAK,KAAK,CAAC,CAAC,6BAA6B;QAClF,IAAI,CAAC,WAAW,CAAC,EAAE,mBAAmB,EAAE,QAAQ,EAAE,CAAC,CAAC;IACtD,CAAC;IAED;;OAEG;IACH,sBAAsB,CAAC,KAAa;QAClC,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAC1D,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;YACf,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC5B,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,EAAE,iBAAiB,EAAE,QAAQ,EAAE,CAAC,CAAC;IACpD,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,IAAyB;QACvC,IAAI,CAAC,WAAW,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,UAAkB,EAAE,QAAgB;QACpD,MAAM,oBAAoB,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAEzE,sBAAsB;QACtB,MAAM,aAAa,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;QAEnF,IAAI,aAAa,IAAI,CAAC,EAAE,CAAC;YACvB,wBAAwB;YACxB,oBAAoB,CAAC,aAAa,CAAC,GAAG;gBACpC,GAAG,oBAAoB,CAAC,aAAa,CAAC;gBACtC,YAAY,EAAE,IAAI,IAAI,EAAE;gBACxB,WAAW,EAAE,oBAAoB,CAAC,aAAa,CAAC,CAAC,WAAW,GAAG,CAAC;aACjE,CAAC;YACF,gBAAgB;YAChB,MAAM,CAAC,IAAI,CAAC,GAAG,oBAAoB,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;YAC7D,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC;aAAM,CAAC;YACN,yBAAyB;YACzB,oBAAoB,CAAC,OAAO,CAAC;gBAC3B,UAAU;gBACV,QAAQ;gBACR,YAAY,EAAE,IAAI,IAAI,EAAE;gBACxB,WAAW,EAAE,CAAC;aACf,CAAC,CAAC;QACL,CAAC;QAED,mBAAmB;QACnB,IAAI,oBAAoB,CAAC,MAAM,GAAG,mBAAmB,EAAE,CAAC;YACtD,oBAAoB,CAAC,MAAM,GAAG,mBAAmB,CAAC;QACpD,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,EAAE,oBAAoB,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,oBAAoB,CAAC,UAAkB,EAAE,QAAgB;QAC7D,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC;YAC7C,IAAI,CAAC,MAAM;gBAAE,OAAO,KAAK,CAAC;YAE1B,6BAA6B;YAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC;YACrD,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,EAAE,CAAC;gBACjD,OAAO,IAAI,CAAC,CAAC,oBAAoB;YACnC,CAAC;YAED,4CAA4C;YAC5C,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC;YACnF,IAAI,CAAC,cAAc;gBAAE,OAAO,KAAK,CAAC;YAElC,8BAA8B;YAC9B,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC;YACzB,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,eAAe,CAAuB,oBAAoB,CAAC,CAAC;YACtF,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC;YACzB,QAAQ,CAAC,QAAQ,GAAG,cAAc,CAAC,EAAE,CAAC;YACtC,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC;YAE7B,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACpC,IAAI,KAAK,EAAE,CAAC;gBACV,qBAAqB;gBACrB,MAAM,gBAAgB,GAAG,CAAC,GAAG,SAAS,EAAE;wBACtC,cAAc,EAAE,QAAQ,CAAC,EAAE;wBAC3B,UAAU;wBACV,QAAQ;qBACT,CAAC,CAAC;gBACH,IAAI,CAAC,WAAW,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC;YACzC,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,oCAAoC,EAAE,KAAK,CAAC,CAAC;YAC1D,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,yBAAyB,CAAC,QAAgB;QAC9C,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC;YACrD,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;YAC9D,IAAI,CAAC,QAAQ;gBAAE,OAAO,IAAI,CAAC,CAAC,wBAAwB;YAEpD,8BAA8B;YAC9B,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC;YACzB,MAAM,cAAc,GAAG,MAAM,EAAE,CAAC,eAAe,CAAuB,oBAAoB,CAAC,CAAC;YAC5F,MAAM,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;YACnD,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE,CAAC;YAE9C,IAAI,OAAO,EAAE,CAAC;gBACZ,qBAAqB;gBACrB,MAAM,gBAAgB,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;gBACxE,IAAI,CAAC,WAAW,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC;YACzC,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,yCAAyC,EAAE,KAAK,CAAC,CAAC;YAC/D,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,QAAgB;QAChC,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;IAC/E,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,uBAAuB;QACnC,IAAI,CAAC;YACH,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,aAAa,EAAE,CAAC;gBACvC,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC;gBAC9B,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;gBAC9B,OAAO;YACT,CAAC;YAED,MAAM,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACvD,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAA4B;gBACzD,UAAU,EAAE,0BAA0B;gBACtC,WAAW,EAAE,oBAAoB,IAAI,CAAC,aAAa,CAAC,aAAa,GAAG;gBACpE,UAAU,EAAE,eAAe;aAC5B,CAAC,CAAC;YAEH,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACrC,IAAI,CAAC,mBAAmB,GAAG,MAAM,CAAC,OAAO,CAAC;gBAC1C,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;gBAC9B,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oBACvC,IAAI,SAAS,CAAC,iBAAiB,EAAE,CAAC;wBAChC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;oBAChD,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,sCAAsC,EAAE,KAAK,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,oBAAoB;QAChC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC;YAC7C,IAAI,CAAC,MAAM;gBAAE,OAAO;YAEpB,8CAA8C;YAC9C,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC;YACnF,IAAI,CAAC,cAAc;gBAAE,OAAO;YAE5B,yDAAyD;YACzD,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC;YAEvC,0EAA0E;YAC1E,MAAM,eAAe,GAAG,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC;YAEpG,MAAM,gBAAgB,GAAqB,EAAE,CAAC;YAC9C,KAAK,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;gBAClC,6DAA6D;gBAC7D,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAChF,IAAI,MAAM,EAAE,CAAC;oBACX,gBAAgB,CAAC,IAAI,CAAC;wBACpB,cAAc,EAAE,GAAG,CAAC,EAAE;wBACtB,UAAU,EAAE,MAAM,CAAC,IAAI;wBACvB,QAAQ,EAAE,GAAG,CAAC,QAAQ;qBACvB,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YACD,IAAI,CAAC,WAAW,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC;QACzC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,iBAAiB;QAC7B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC;YAC7C,IAAI,CAAC,MAAM;gBAAE,OAAO;YAEpB,2DAA2D;YAC3D,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC;YAEvC,oDAAoD;YACpD,MAAM,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC;YAE1E,MAAM,aAAa,GAAyB,EAAE,CAAC;YAC/C,MAAM,gBAAgB,GAA4B,EAAE,CAAC;YACrD,MAAM,cAAc,GAAwB,IAAI,GAAG,EAAE,CAAC,CAAC,mCAAmC;YAE1F,KAAK,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;gBACjC,oCAAoC;gBACpC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAChF,IAAI,MAAM,EAAE,CAAC;oBACX,8CAA8C;oBAC9C,IAAI,IAAI,CAAC,aAAa,EAAE,aAAa,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;wBACrH,SAAS,CAAC,qDAAqD;oBACjE,CAAC;oBAED,MAAM,YAAY,GAAuB;wBACvC,UAAU,EAAE,MAAM,CAAC,IAAI;wBACvB,QAAQ,EAAE,GAAG,CAAC,QAAQ;wBACtB,QAAQ,EAAE,GAAG,CAAC,QAAQ;wBACtB,QAAQ,EAAE,GAAG,CAAC,QAAQ;wBACtB,UAAU,EAAE,GAAG,CAAC,UAAU;qBAC3B,CAAC;oBACF,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC;oBACnC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;oBAEjC,4CAA4C;oBAC5C,MAAM,YAAY,GAAG,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;oBAChF,IAAI,YAAY,EAAE,CAAC;wBACjB,gBAAgB,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC,CAAC;wBAC/E,+EAA+E;wBAC/E,cAAc,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,KAAK,YAAY,CAAC,oBAAoB,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;oBACtF,CAAC;gBACH,CAAC;YACH,CAAC;YAED,2BAA2B;YAC3B,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChC,IAAI,CAAC;oBACH,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,CAAC;oBAC/E,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;wBACrC,IAAI,UAAU,CAAC,OAAO,IAAI,UAAU,CAAC,UAAU,EAAE,CAAC;4BAChD,MAAM,GAAG,GAAG,GAAG,UAAU,CAAC,UAAU,KAAK,UAAU,CAAC,YAAY,CAAC,oBAAoB,EAAE,EAAE,CAAC;4BAC1F,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;4BACtC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gCACxB,aAAa,CAAC,KAAK,CAAC,CAAC,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC;4BAC1D,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;gBAAC,OAAO,SAAS,EAAE,CAAC;oBACnB,OAAO,CAAC,IAAI,CAAC,8BAA8B,EAAE,SAAS,CAAC,CAAC;oBACxD,mDAAmD;gBACrD,CAAC;YACH,CAAC;YAED,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACK,0BAA0B,CAAC,UAAkB,EAAE,QAAgB;QACrE,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC;QAC3B,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;QAC3E,6EAA6E;QAC7E,IAAI,CAAC,UAAU,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,qBAAqB,CAAC;YAAE,OAAO,IAAI,CAAC;QACvF,MAAM,YAAY,GAAG,YAAY,CAAC,cAAc,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACvE,OAAO,YAAY,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC;IACrE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,oBAAoB;QACxB,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;IACjC,CAAC;IAED;;;;;;;;;OASG;IACH,oBAAoB,CAAC,UAAkB,EAAE,QAAgB,EAAE,QAAgB,EAAE,UAAmB;QAC9F,8CAA8C;QAC9C,IAAI,IAAI,CAAC,aAAa,EAAE,aAAa,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC;YACjH,OAAO,CAAC,0DAA0D;QACpE,CAAC;QAED,MAAM,cAAc,GAAG,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAEtD,sBAAsB;QACtB,MAAM,aAAa,GAAG,cAAc,CAAC,SAAS,CAC5C,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,QAAQ,KAAK,QAAQ,CACxD,CAAC;QAEF,MAAM,SAAS,GAAuB;YACpC,UAAU;YACV,QAAQ;YACR,QAAQ;YACR,UAAU;YACV,QAAQ,EAAE,IAAI,IAAI,EAAE;YACpB,UAAU,EAAE,aAAa,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;SAClF,CAAC;QAEF,IAAI,aAAa,IAAI,CAAC,EAAE,CAAC;YACvB,oDAAoD;YACpD,cAAc,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;QAC1C,CAAC;QAED,eAAe;QACf,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAElC,mBAAmB;QACnB,IAAI,cAAc,CAAC,MAAM,GAAG,kBAAkB,EAAE,CAAC;YAC/C,cAAc,CAAC,MAAM,GAAG,kBAAkB,CAAC;QAC7C,CAAC;QAED,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC3C,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,mBAAmB;QAC/B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC;YAC7C,IAAI,CAAC,MAAM;gBAAE,OAAO;YAEpB,sDAAsD;YACtD,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC;YACnF,MAAM,gBAAgB,GAAG,cAAc,EAAE,EAAE,IAAI,EAAE,CAAC;YAElD,yDAAyD;YACzD,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC;YAEvC,2FAA2F;YAC3F,MAAM,kBAAkB,GAAG,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC;YAEvG,MAAM,eAAe,GAAqB,EAAE,CAAC;YAC7C,MAAM,gBAAgB,GAA4B,EAAE,CAAC;YACrD,MAAM,cAAc,GAAwB,IAAI,GAAG,EAAE,CAAC;YAEtD,KAAK,MAAM,GAAG,IAAI,kBAAkB,EAAE,CAAC;gBACrC,wCAAwC;gBACxC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAChF,IAAI,MAAM,EAAE,CAAC;oBACX,8CAA8C;oBAC9C,IAAI,IAAI,CAAC,aAAa,EAAE,aAAa,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;wBACrH,SAAS,CAAC,qDAAqD;oBACjE,CAAC;oBAED,MAAM,cAAc,GAAmB;wBACrC,cAAc,EAAE,GAAG,CAAC,EAAE;wBACtB,UAAU,EAAE,MAAM,CAAC,IAAI;wBACvB,QAAQ,EAAE,GAAG,CAAC,QAAQ;wBACtB,QAAQ,EAAE,GAAG,CAAC,QAAQ;qBACvB,CAAC;oBACF,MAAM,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC;oBACrC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;oBAErC,4CAA4C;oBAC5C,MAAM,YAAY,GAAG,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;oBAChF,IAAI,YAAY,EAAE,CAAC;wBACjB,gBAAgB,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC,CAAC;wBAC/E,+EAA+E;wBAC/E,cAAc,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,KAAK,YAAY,CAAC,oBAAoB,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;oBACtF,CAAC;gBACH,CAAC;YACH,CAAC;YAED,2BAA2B;YAC3B,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChC,IAAI,CAAC;oBACH,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,CAAC;oBAC/E,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;wBACrC,IAAI,UAAU,CAAC,OAAO,IAAI,UAAU,CAAC,UAAU,EAAE,CAAC;4BAChD,MAAM,GAAG,GAAG,GAAG,UAAU,CAAC,UAAU,KAAK,UAAU,CAAC,YAAY,CAAC,oBAAoB,EAAE,EAAE,CAAC;4BAC1F,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;4BACtC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gCACxB,eAAe,CAAC,KAAK,CAAC,CAAC,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC;4BAC5D,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;gBAAC,OAAO,SAAS,EAAE,CAAC;oBACnB,OAAO,CAAC,IAAI,CAAC,4CAA4C,EAAE,SAAS,CAAC,CAAC;oBACtE,mDAAmD;gBACrD,CAAC;YACH,CAAC;YAED,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAC5C,IAAI,CAAC,WAAW,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC;QACxC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,kCAAkC,EAAE,KAAK,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;8GA1+BU,oBAAoB;gEAApB,oBAAoB,WAApB,oBAAoB,mBAFnB,MAAM;;iFAEP,oBAAoB;cAHhC,UAAU;eAAC;gBACV,UAAU,EAAE,MAAM;aACnB","sourcesContent":["import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { Metadata, RunView, CompositeKey, EntityRecordNameInput, IMetadataProvider } from '@memberjunction/core';\nimport { MJUserSettingEntity, MJUserFavoriteEntity, MJApplicationEntityEntity, UserInfoEngine } from '@memberjunction/core-entities';\nimport { DataExplorerState, DEFAULT_EXPLORER_STATE, RecentItem, FavoriteItem, EntityCacheEntry, BreadcrumbItem, DataExplorerFilter, FavoriteEntity, RecentRecordAccess, FavoriteRecord, DataExplorerViewMode } from '../models/explorer-state.interface';\nimport { UUIDsEqual } from '@memberjunction/global';\n\nconst BASE_SETTING_KEY = 'DataExplorer.State';\nconst MAX_RECENT_ITEMS = 20;\nconst MAX_RECENT_ENTITIES = 10;\nconst MAX_RECENT_RECORDS = 10;\nconst MAX_ENTITY_CACHE_SIZE = 50; // LRU cache limit\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ExplorerStateService {\n private state$ = new BehaviorSubject<DataExplorerState>(DEFAULT_EXPLORER_STATE);\n private _provider: IMetadataProvider | null = null;\n /** Set the metadata provider this service should use. Components should call this after injection. */\n public set Provider(value: IMetadataProvider | null) {\n this._provider = value;\n }\n public get Provider(): IMetadataProvider {\n return this._provider ?? Metadata.Provider;\n }\n private get metadata(): IMetadataProvider {\n return this.Provider;\n }\n private saveTimeout: ReturnType<typeof setTimeout> | null = null;\n\n /** Current context filter (determines which settings key to use) */\n private currentFilter: DataExplorerFilter | null = null;\n\n /** Computed breadcrumbs based on current state */\n private breadcrumbs$ = new BehaviorSubject<BreadcrumbItem[]>([]);\n\n /** Recent records loaded from User Record Logs */\n private recentRecords$ = new BehaviorSubject<RecentRecordAccess[]>([]);\n\n /** Favorite records loaded from User Favorites (non-entity favorites) */\n private favoriteRecords$ = new BehaviorSubject<FavoriteRecord[]>([]);\n\n /** Application entities with DefaultForNewUser info (loaded once per context) */\n private applicationEntities: MJApplicationEntityEntity[] = [];\n\n /** Set of entity IDs that have DefaultForNewUser=true */\n private defaultEntityIds = new Set<string>();\n\n constructor() {\n // Don't load state in constructor - wait for setContext to be called\n }\n\n /**\n * Set the context filter and load context-specific state.\n * Call this before using the service to ensure proper context isolation.\n */\n async setContext(filter: DataExplorerFilter | null): Promise<void> {\n this.currentFilter = filter;\n await this.loadState();\n // Load application entities first (needed for filtering recent/favorite records)\n await this.loadApplicationEntities();\n // Then load the rest in parallel\n await Promise.all([\n this.loadFavoriteEntities(),\n this.loadFavoriteRecords(),\n this.loadRecentRecords()\n ]);\n this.updateBreadcrumbs();\n }\n\n /**\n * Get the storage key based on current context.\n * Uses application ID if available for context-specific storage.\n */\n private getSettingKey(): string {\n if (this.currentFilter?.applicationId) {\n return `${BASE_SETTING_KEY}.${this.currentFilter.applicationId}`;\n }\n return BASE_SETTING_KEY;\n }\n\n /**\n * Get observable of current state\n */\n get State(): Observable<DataExplorerState> {\n return this.state$.asObservable();\n }\n\n /**\n * Get current state value\n */\n get CurrentState(): DataExplorerState {\n return this.state$.value;\n }\n\n /**\n * Observable of current breadcrumbs\n */\n get Breadcrumbs(): Observable<BreadcrumbItem[]> {\n return this.breadcrumbs$.asObservable();\n }\n\n /**\n * Get current breadcrumbs value\n */\n get CurrentBreadcrumbs(): BreadcrumbItem[] {\n return this.breadcrumbs$.value;\n }\n\n /**\n * Get the current context filter\n */\n get CurrentFilter(): DataExplorerFilter | null {\n return this.currentFilter;\n }\n\n /**\n * Observable of recent records (from User Record Logs)\n */\n get RecentRecords(): Observable<RecentRecordAccess[]> {\n return this.recentRecords$.asObservable();\n }\n\n /**\n * Get current recent records value\n */\n get CurrentRecentRecords(): RecentRecordAccess[] {\n return this.recentRecords$.value;\n }\n\n /**\n * Observable of favorite records (from User Favorites, non-entity)\n */\n get FavoriteRecords(): Observable<FavoriteRecord[]> {\n return this.favoriteRecords$.asObservable();\n }\n\n /**\n * Get current favorite records value\n */\n get CurrentFavoriteRecords(): FavoriteRecord[] {\n return this.favoriteRecords$.value;\n }\n\n /**\n * Get the set of entity IDs with DefaultForNewUser=true\n */\n get DefaultEntityIds(): Set<string> {\n return this.defaultEntityIds;\n }\n\n /**\n * Update state partially\n */\n updateState(partial: Partial<DataExplorerState>): void {\n const newState = { ...this.state$.value, ...partial };\n this.state$.next(newState);\n this.updateBreadcrumbs();\n this.debouncedSave();\n }\n\n /**\n * Set selected entity\n * Caches current entity's filter before switching, restores new entity's cached filter\n */\n selectEntity(entityName: string | null): void {\n const currentState = this.state$.value;\n const entityCache = { ...currentState.entityCache };\n\n // Cache current entity's filter before switching (if we have a current entity)\n if (currentState.selectedEntityName && currentState.smartFilterPrompt) {\n entityCache[currentState.selectedEntityName] = {\n filterText: currentState.smartFilterPrompt,\n lastAccessed: Date.now()\n };\n }\n\n // Restore filter for new entity (if cached) or clear it\n let restoredFilter = '';\n if (entityName && entityCache[entityName]) {\n restoredFilter = entityCache[entityName].filterText;\n entityCache[entityName].lastAccessed = Date.now();\n }\n\n // Evict old entries if cache is too large (LRU)\n this.evictOldCacheEntries(entityCache);\n\n this.updateState({\n selectedEntityName: entityName,\n selectedViewId: null, // Reset view when entity changes\n smartFilterPrompt: restoredFilter, // Restore cached filter or empty\n selectedRecordId: null,\n detailPanelOpen: false,\n entityCache\n });\n }\n\n /**\n * Evict oldest cache entries if over limit (LRU eviction)\n */\n private evictOldCacheEntries(cache: Record<string, EntityCacheEntry>): void {\n const entries = Object.entries(cache);\n if (entries.length <= MAX_ENTITY_CACHE_SIZE) return;\n\n // Sort by lastAccessed (oldest first) and remove excess\n entries.sort((a, b) => a[1].lastAccessed - b[1].lastAccessed);\n const toRemove = entries.length - MAX_ENTITY_CACHE_SIZE;\n for (let i = 0; i < toRemove; i++) {\n delete cache[entries[i][0]];\n }\n }\n\n /**\n * Set selected view\n */\n selectView(viewId: string | null): void {\n this.updateState({\n selectedViewId: viewId,\n viewModified: false // Reset modified state when selecting a different view\n });\n }\n\n /**\n * Mark the current view as modified (has unsaved changes)\n */\n setViewModified(modified: boolean): void {\n this.updateState({ viewModified: modified });\n }\n\n /**\n * Toggle the view configuration panel\n */\n toggleViewConfigPanel(): void {\n this.updateState({ viewConfigPanelOpen: !this.state$.value.viewConfigPanelOpen });\n }\n\n /**\n * Open the view configuration panel\n */\n openViewConfigPanel(): void {\n this.updateState({ viewConfigPanelOpen: true });\n }\n\n /**\n * Close the view configuration panel\n */\n closeViewConfigPanel(): void {\n this.updateState({ viewConfigPanelOpen: false });\n }\n\n /**\n * Set view mode\n */\n setViewMode(mode: DataExplorerViewMode): void {\n this.updateState({ viewMode: mode });\n }\n\n /**\n * Set smart filter prompt\n * Also updates the entity cache for the current entity\n */\n setSmartFilterPrompt(prompt: string): void {\n const currentState = this.state$.value;\n const entityCache = { ...currentState.entityCache };\n\n // Update cache for current entity\n if (currentState.selectedEntityName) {\n if (prompt) {\n entityCache[currentState.selectedEntityName] = {\n filterText: prompt,\n lastAccessed: Date.now()\n };\n } else {\n // Clear cache entry if filter is empty\n delete entityCache[currentState.selectedEntityName];\n }\n }\n\n this.updateState({ smartFilterPrompt: prompt, entityCache });\n }\n\n /**\n * Select a record and open detail panel\n * @param recordId The composite key string for the record\n * @param recordName Optional display name for the record (for breadcrumbs)\n */\n selectRecord(recordId: string | null, recordName?: string): void {\n this.updateState({\n selectedRecordId: recordId,\n selectedRecordName: recordName || null,\n detailPanelOpen: recordId !== null\n });\n }\n\n /**\n * Close detail panel\n */\n closeDetailPanel(): void {\n this.updateState({\n detailPanelOpen: false,\n selectedRecordId: null,\n selectedRecordName: null\n });\n }\n\n /**\n * Toggle navigation panel collapsed state\n */\n toggleNavigationPanel(): void {\n this.updateState({\n navigationPanelCollapsed: !this.state$.value.navigationPanelCollapsed\n });\n }\n\n /**\n * Expand navigation panel and ensure a specific section is expanded\n */\n expandAndFocusSection(section: 'favorites' | 'recent' | 'entities'): void {\n const updates: Partial<DataExplorerState> = {\n navigationPanelCollapsed: false\n };\n\n // Ensure the target section is expanded\n switch (section) {\n case 'favorites':\n updates.favoritesSectionExpanded = true;\n break;\n case 'recent':\n updates.recentSectionExpanded = true;\n break;\n case 'entities':\n updates.entitiesSectionExpanded = true;\n break;\n }\n\n this.updateState(updates);\n }\n\n /**\n * Add item to recent history\n */\n addRecentItem(item: Omit<RecentItem, 'timestamp'>): void {\n const recentItems = [...this.state$.value.recentItems];\n\n // Remove existing entry if present (match by entity and composite key)\n const existingIndex = recentItems.findIndex(\n r => r.entityName === item.entityName && r.compositeKeyString === item.compositeKeyString\n );\n if (existingIndex >= 0) {\n recentItems.splice(existingIndex, 1);\n }\n\n // Add to front with timestamp\n recentItems.unshift({\n ...item,\n timestamp: new Date()\n });\n\n // Trim to max size\n if (recentItems.length > MAX_RECENT_ITEMS) {\n recentItems.length = MAX_RECENT_ITEMS;\n }\n\n this.updateState({ recentItems });\n }\n\n /**\n * Add item to favorites\n */\n addFavorite(item: FavoriteItem): void {\n const favorites = [...this.state$.value.favorites];\n\n // Check if already exists\n const exists = favorites.some(f =>\n f.type === item.type &&\n f.entityName === item.entityName &&\n f.compositeKeyString === item.compositeKeyString &&\n f.viewId === item.viewId\n );\n\n if (!exists) {\n favorites.push(item);\n this.updateState({ favorites });\n }\n }\n\n /**\n * Remove item from favorites\n */\n removeFavorite(item: FavoriteItem): void {\n const favorites = this.state$.value.favorites.filter(f =>\n !(f.type === item.type &&\n f.entityName === item.entityName &&\n f.compositeKeyString === item.compositeKeyString &&\n f.viewId === item.viewId)\n );\n this.updateState({ favorites });\n }\n\n /**\n * Toggle section expanded state\n */\n toggleSection(section: 'favorites' | 'recent' | 'entities' | 'views'): void {\n const key = `${section}SectionExpanded` as keyof DataExplorerState;\n this.updateState({ [key]: !this.state$.value[key] } as Partial<DataExplorerState>);\n }\n\n /**\n * Load state from UserSetting using UserInfoEngine for cached access\n */\n private async loadState(): Promise<void> {\n try {\n const userId = this.metadata.CurrentUser?.ID;\n if (!userId) return;\n\n const settingKey = this.getSettingKey();\n const engine = UserInfoEngine.Instance;\n\n // Find the setting from cached user settings\n const setting = engine.UserSettings.find(s => s.Setting === settingKey);\n\n if (setting?.Value) {\n const savedState = JSON.parse(setting.Value) as Partial<DataExplorerState>;\n // Merge with defaults to handle new properties\n this.state$.next({ ...DEFAULT_EXPLORER_STATE, ...savedState });\n } else {\n // No saved state, use defaults\n this.state$.next({ ...DEFAULT_EXPLORER_STATE });\n }\n } catch (error) {\n console.warn('Failed to load Data Explorer state:', error);\n this.state$.next({ ...DEFAULT_EXPLORER_STATE });\n }\n }\n\n /**\n * Update breadcrumbs based on current state and filter\n */\n private updateBreadcrumbs(): void {\n const breadcrumbs: BreadcrumbItem[] = [];\n const state = this.state$.value;\n\n // Always add a root/home breadcrumb - use application name if available, otherwise \"All\"\n const rootLabel = this.currentFilter?.applicationName || 'All';\n breadcrumbs.push({\n label: rootLabel,\n type: 'application',\n icon: 'fa-solid fa-th-large'\n });\n\n // Add entity breadcrumb if selected\n if (state.selectedEntityName) {\n const entityInfo = this.metadata.Entities.find(e => e.Name === state.selectedEntityName);\n breadcrumbs.push({\n label: state.selectedEntityName,\n type: 'entity',\n entityName: state.selectedEntityName,\n icon: entityInfo?.Icon ? this.formatEntityIcon(entityInfo.Icon) : 'fa-solid fa-table'\n });\n }\n\n // Add record breadcrumb if selected\n if (state.selectedRecordId && state.selectedRecordName) {\n breadcrumbs.push({\n label: state.selectedRecordName,\n type: 'record',\n entityName: state.selectedEntityName || undefined,\n compositeKeyString: state.selectedRecordId,\n icon: 'fa-solid fa-file-alt'\n });\n }\n\n this.breadcrumbs$.next(breadcrumbs);\n }\n\n /**\n * Format entity icon to ensure proper Font Awesome class format\n */\n private formatEntityIcon(icon: string): string {\n if (!icon) return 'fa-solid fa-table';\n if (icon.startsWith('fa-') || icon.startsWith('fa ')) {\n if (icon.startsWith('fa-solid') || icon.startsWith('fa-regular') ||\n icon.startsWith('fa-light') || icon.startsWith('fa-brands') ||\n icon.startsWith('fa ')) {\n return icon;\n }\n return `fa-solid ${icon}`;\n }\n return `fa-solid fa-${icon}`;\n }\n\n /**\n * Debounced save to avoid too many writes\n */\n private debouncedSave(): void {\n if (this.saveTimeout) {\n clearTimeout(this.saveTimeout);\n }\n this.saveTimeout = setTimeout(() => {\n this.saveState();\n }, 1000);\n }\n\n /**\n * Save state to UserSetting using UserInfoEngine for cached lookup\n */\n private async saveState(): Promise<void> {\n try {\n const userId = this.metadata.CurrentUser?.ID;\n if (!userId) return;\n\n const settingKey = this.getSettingKey();\n const md = this.Provider;\n const engine = UserInfoEngine.Instance;\n\n // Find existing setting from cached user settings\n let setting = engine.UserSettings.find(s => s.Setting === settingKey);\n\n if (!setting) {\n // Create new setting if not found\n setting = await md.GetEntityObject<MJUserSettingEntity>('MJ: User Settings');\n setting.UserID = userId;\n setting.Setting = settingKey;\n }\n\n setting.Value = JSON.stringify(this.state$.value);\n await setting.Save();\n } catch (error) {\n console.warn('Failed to save Data Explorer state:', error);\n }\n }\n\n /**\n * Navigate to a specific breadcrumb level.\n * Clears any selection deeper than the clicked breadcrumb.\n */\n navigateToBreadcrumb(breadcrumb: BreadcrumbItem): void {\n switch (breadcrumb.type) {\n case 'application':\n // Clear entity and record selection (show home view)\n this.updateState({\n selectedEntityName: null,\n selectedViewId: null,\n selectedRecordId: null,\n selectedRecordName: null,\n smartFilterPrompt: '',\n detailPanelOpen: false\n });\n break;\n\n case 'entity':\n // Keep entity selected, clear record selection\n if (breadcrumb.entityName) {\n this.updateState({\n selectedRecordId: null,\n selectedRecordName: null,\n detailPanelOpen: false\n });\n }\n break;\n\n case 'record':\n // Already at record level, do nothing\n break;\n }\n }\n\n // ========================================\n // HOME SCREEN ENTITY MANAGEMENT\n // ========================================\n\n /**\n * Toggle between showing all entities or just common (DefaultForNewUser) entities\n */\n toggleShowAllEntities(): void {\n this.updateState({ showAllEntities: !this.state$.value.showAllEntities });\n }\n\n // ========================================\n // Concept D: Application Groups + Quick Access\n // ========================================\n\n /**\n * Toggle the quick access (right) panel open/closed\n */\n toggleQuickAccessPanel(): void {\n this.updateState({ quickAccessPanelOpen: !this.state$.value.quickAccessPanelOpen });\n }\n\n /**\n * Toggle a quick access section's expanded state\n */\n toggleQuickAccessSection(sectionId: string): void {\n const sections = { ...this.state$.value.quickAccessSections };\n sections[sectionId] = sections[sectionId] === false; // default to expanded (true)\n this.updateState({ quickAccessSections: sections });\n }\n\n /**\n * Toggle an application group's expanded/collapsed state\n */\n toggleAppGroupExpanded(appId: string): void {\n const expanded = [...this.state$.value.expandedAppGroups];\n const index = expanded.indexOf(appId);\n if (index >= 0) {\n expanded.splice(index, 1);\n } else {\n expanded.push(appId);\n }\n this.updateState({ expandedAppGroups: expanded });\n }\n\n /**\n * Set the home view mode (all vs favorites)\n */\n setHomeViewMode(mode: 'all' | 'favorites'): void {\n this.updateState({ homeViewMode: mode });\n }\n\n /**\n * Track entity access - called when user navigates to an entity\n */\n trackEntityAccess(entityName: string, entityId: string): void {\n const recentEntityAccesses = [...this.state$.value.recentEntityAccesses];\n\n // Find existing entry\n const existingIndex = recentEntityAccesses.findIndex(r => r.entityId === entityId);\n\n if (existingIndex >= 0) {\n // Update existing entry\n recentEntityAccesses[existingIndex] = {\n ...recentEntityAccesses[existingIndex],\n lastAccessed: new Date(),\n accessCount: recentEntityAccesses[existingIndex].accessCount + 1\n };\n // Move to front\n const [item] = recentEntityAccesses.splice(existingIndex, 1);\n recentEntityAccesses.unshift(item);\n } else {\n // Add new entry at front\n recentEntityAccesses.unshift({\n entityName,\n entityId,\n lastAccessed: new Date(),\n accessCount: 1\n });\n }\n\n // Trim to max size\n if (recentEntityAccesses.length > MAX_RECENT_ENTITIES) {\n recentEntityAccesses.length = MAX_RECENT_ENTITIES;\n }\n\n this.updateState({ recentEntityAccesses });\n }\n\n /**\n * Add entity to favorites using User Favorites entity\n */\n async addEntityToFavorites(entityName: string, entityId: string): Promise<boolean> {\n try {\n const userId = this.metadata.CurrentUser?.ID;\n if (!userId) return false;\n\n // Check if already favorited\n const favorites = this.state$.value.favoriteEntities;\n if (favorites.some(f => f.entityId === entityId)) {\n return true; // Already favorited\n }\n\n // Get the Entities entity ID for favoriting\n const entitiesEntity = this.metadata.Entities.find(e => e.Name === 'MJ: Entities');\n if (!entitiesEntity) return false;\n\n // Create User Favorite record\n const md = this.Provider;\n const favorite = await md.GetEntityObject<MJUserFavoriteEntity>('MJ: User Favorites');\n favorite.UserID = userId;\n favorite.EntityID = entitiesEntity.ID;\n favorite.RecordID = entityId;\n\n const saved = await favorite.Save();\n if (saved) {\n // Update local state\n const favoriteEntities = [...favorites, {\n userFavoriteId: favorite.ID,\n entityName,\n entityId\n }];\n this.updateState({ favoriteEntities });\n }\n return saved;\n } catch (error) {\n console.warn('Failed to add entity to favorites:', error);\n return false;\n }\n }\n\n /**\n * Remove entity from favorites\n */\n async removeEntityFromFavorites(entityId: string): Promise<boolean> {\n try {\n const favorites = this.state$.value.favoriteEntities;\n const favorite = favorites.find(f => f.entityId === entityId);\n if (!favorite) return true; // Already not favorited\n\n // Delete User Favorite record\n const md = this.Provider;\n const favoriteEntity = await md.GetEntityObject<MJUserFavoriteEntity>('MJ: User Favorites');\n await favoriteEntity.Load(favorite.userFavoriteId);\n const deleted = await favoriteEntity.Delete();\n\n if (deleted) {\n // Update local state\n const favoriteEntities = favorites.filter(f => f.entityId !== entityId);\n this.updateState({ favoriteEntities });\n }\n return deleted;\n } catch (error) {\n console.warn('Failed to remove entity from favorites:', error);\n return false;\n }\n }\n\n /**\n * Check if an entity is favorited\n */\n isEntityFavorited(entityId: string): boolean {\n return this.state$.value.favoriteEntities.some(f => f.entityId === entityId);\n }\n\n /**\n * Load application entities with DefaultForNewUser information\n */\n private async loadApplicationEntities(): Promise<void> {\n try {\n if (!this.currentFilter?.applicationId) {\n this.applicationEntities = [];\n this.defaultEntityIds.clear();\n return;\n }\n\n const rv = RunView.FromMetadataProvider(this.Provider);\n const result = await rv.RunView<MJApplicationEntityEntity>({\n EntityName: 'MJ: Application Entities',\n ExtraFilter: `ApplicationID = '${this.currentFilter.applicationId}'`,\n ResultType: 'entity_object'\n });\n\n if (result.Success && result.Results) {\n this.applicationEntities = result.Results;\n this.defaultEntityIds.clear();\n for (const appEntity of result.Results) {\n if (appEntity.DefaultForNewUser) {\n this.defaultEntityIds.add(appEntity.EntityID);\n }\n }\n }\n } catch (error) {\n console.warn('Failed to load application entities:', error);\n }\n }\n\n /**\n * Load favorite entities from User Favorites using UserInfoEngine\n */\n private async loadFavoriteEntities(): Promise<void> {\n try {\n const userId = this.metadata.CurrentUser?.ID;\n if (!userId) return;\n\n // Get the Entities entity to filter favorites\n const entitiesEntity = this.metadata.Entities.find(e => e.Name === 'MJ: Entities');\n if (!entitiesEntity) return;\n\n // Use UserInfoEngine for cached access to user favorites\n const engine = UserInfoEngine.Instance;\n\n // Filter to only entity favorites (where EntityID is the Entities entity)\n const entityFavorites = engine.UserFavorites.filter(f => UUIDsEqual(f.EntityID, entitiesEntity.ID));\n\n const favoriteEntities: FavoriteEntity[] = [];\n for (const fav of entityFavorites) {\n // Look up entity name from RecordID (which is the Entity.ID)\n const entity = this.metadata.Entities.find(e => UUIDsEqual(e.ID, fav.RecordID));\n if (entity) {\n favoriteEntities.push({\n userFavoriteId: fav.ID,\n entityName: entity.Name,\n entityId: fav.RecordID\n });\n }\n }\n this.updateState({ favoriteEntities });\n } catch (error) {\n console.warn('Failed to load favorite entities:', error);\n }\n }\n\n /**\n * Load recent records from User Record Logs with batch record name lookup using UserInfoEngine\n */\n private async loadRecentRecords(): Promise<void> {\n try {\n const userId = this.metadata.CurrentUser?.ID;\n if (!userId) return;\n\n // Use UserInfoEngine for cached access to user record logs\n const engine = UserInfoEngine.Instance;\n\n // Get recent records, limited to MAX_RECENT_RECORDS\n const userRecordLogs = engine.UserRecordLogs.slice(0, MAX_RECENT_RECORDS);\n\n const recentRecords: RecentRecordAccess[] = [];\n const recordNameInputs: EntityRecordNameInput[] = [];\n const recordIndexMap: Map<string, number> = new Map(); // Map composite key to array index\n\n for (const log of userRecordLogs) {\n // Look up entity name from EntityID\n const entity = this.metadata.Entities.find(e => UUIDsEqual(e.ID, log.EntityID));\n if (entity) {\n // Filter by application context if applicable\n if (this.currentFilter?.applicationId && !this.applicationEntities.some(ae => UUIDsEqual(ae.EntityID, log.EntityID))) {\n continue; // Skip records from entities not in this application\n }\n\n const recordAccess: RecentRecordAccess = {\n entityName: entity.Name,\n entityId: log.EntityID,\n recordId: log.RecordID,\n latestAt: log.LatestAt,\n totalCount: log.TotalCount\n };\n const index = recentRecords.length;\n recentRecords.push(recordAccess);\n\n // Build composite key for batch name lookup\n const compositeKey = this.buildCompositeKeyForRecord(entity.Name, log.RecordID);\n if (compositeKey) {\n recordNameInputs.push({ EntityName: entity.Name, CompositeKey: compositeKey });\n // Use the canonical concatenated string as the map key for consistent matching\n recordIndexMap.set(`${entity.Name}||${compositeKey.ToConcatenatedString()}`, index);\n }\n }\n }\n\n // Batch fetch record names\n if (recordNameInputs.length > 0) {\n try {\n const nameResults = await this.metadata.GetEntityRecordNames(recordNameInputs);\n for (const nameResult of nameResults) {\n if (nameResult.Success && nameResult.RecordName) {\n const key = `${nameResult.EntityName}||${nameResult.CompositeKey.ToConcatenatedString()}`;\n const index = recordIndexMap.get(key);\n if (index !== undefined) {\n recentRecords[index].recordName = nameResult.RecordName;\n }\n }\n }\n } catch (nameError) {\n console.warn('Failed to load record names:', nameError);\n // Continue without names - they'll show record IDs\n }\n }\n\n this.recentRecords$.next(recentRecords);\n } catch (error) {\n console.warn('Failed to load recent records:', error);\n }\n }\n\n /**\n * Build a CompositeKey for a record. RecordID may be stored as either:\n * - Concatenated format: \"FieldName|Value\" or \"Field1|Val1||Field2|Val2\"\n * - Plain value: just the raw value (e.g. a GUID)\n * Detects the format and constructs the key accordingly.\n */\n private buildCompositeKeyForRecord(entityName: string, recordId: string): CompositeKey | null {\n if (!recordId) return null;\n const entityInfo = this.metadata.Entities.find(e => e.Name === entityName);\n // A plain value can only be resolved against the entity's real key column(s)\n if (!entityInfo && !recordId.includes(CompositeKey.DefaultValueDelimiter)) return null;\n const compositeKey = CompositeKey.FromURLSegment(entityInfo, recordId);\n return compositeKey.KeyValuePairs.length > 0 ? compositeKey : null;\n }\n\n /**\n * Refresh recent records (call after navigating to a record)\n */\n async refreshRecentRecords(): Promise<void> {\n await this.loadRecentRecords();\n }\n\n /**\n * Add or update a recent record locally (without DB refresh).\n * Call this when a record is selected to provide instant UI feedback.\n * The DB write happens separately via RecentAccessService.logAccess().\n *\n * @param entityName The entity name\n * @param entityId The entity ID\n * @param recordId The record ID (primary key value)\n * @param recordName Optional display name for the record\n */\n addLocalRecentRecord(entityName: string, entityId: string, recordId: string, recordName?: string): void {\n // Filter by application context if applicable\n if (this.currentFilter?.applicationId && !this.applicationEntities.some(ae => UUIDsEqual(ae.EntityID, entityId))) {\n return; // Don't add records from entities not in this application\n }\n\n const currentRecords = [...this.recentRecords$.value];\n\n // Find existing entry\n const existingIndex = currentRecords.findIndex(\n r => r.entityId === entityId && r.recordId === recordId\n );\n\n const newRecord: RecentRecordAccess = {\n entityName,\n entityId,\n recordId,\n recordName,\n latestAt: new Date(),\n totalCount: existingIndex >= 0 ? currentRecords[existingIndex].totalCount + 1 : 1\n };\n\n if (existingIndex >= 0) {\n // Remove existing entry (will be re-added at front)\n currentRecords.splice(existingIndex, 1);\n }\n\n // Add to front\n currentRecords.unshift(newRecord);\n\n // Trim to max size\n if (currentRecords.length > MAX_RECENT_RECORDS) {\n currentRecords.length = MAX_RECENT_RECORDS;\n }\n\n this.recentRecords$.next(currentRecords);\n }\n\n /**\n * Load favorite records from User Favorites (non-entity favorites) with batch record name lookup using UserInfoEngine.\n * Filters to only include records from entities in the current application context.\n */\n private async loadFavoriteRecords(): Promise<void> {\n try {\n const userId = this.metadata.CurrentUser?.ID;\n if (!userId) return;\n\n // Get the Entities entity to exclude entity favorites\n const entitiesEntity = this.metadata.Entities.find(e => e.Name === 'MJ: Entities');\n const entitiesEntityId = entitiesEntity?.ID || '';\n\n // Use UserInfoEngine for cached access to user favorites\n const engine = UserInfoEngine.Instance;\n\n // Filter to non-entity favorites (exclude favorites where EntityID is the Entities entity)\n const nonEntityFavorites = engine.UserFavorites.filter(f => !UUIDsEqual(f.EntityID, entitiesEntityId));\n\n const favoriteRecords: FavoriteRecord[] = [];\n const recordNameInputs: EntityRecordNameInput[] = [];\n const recordIndexMap: Map<string, number> = new Map();\n\n for (const fav of nonEntityFavorites) {\n // Look up entity info from the EntityID\n const entity = this.metadata.Entities.find(e => UUIDsEqual(e.ID, fav.EntityID));\n if (entity) {\n // Filter by application context if applicable\n if (this.currentFilter?.applicationId && !this.applicationEntities.some(ae => UUIDsEqual(ae.EntityID, fav.EntityID))) {\n continue; // Skip records from entities not in this application\n }\n\n const favoriteRecord: FavoriteRecord = {\n userFavoriteId: fav.ID,\n entityName: entity.Name,\n entityId: fav.EntityID,\n recordId: fav.RecordID\n };\n const index = favoriteRecords.length;\n favoriteRecords.push(favoriteRecord);\n\n // Build composite key for batch name lookup\n const compositeKey = this.buildCompositeKeyForRecord(entity.Name, fav.RecordID);\n if (compositeKey) {\n recordNameInputs.push({ EntityName: entity.Name, CompositeKey: compositeKey });\n // Use the canonical concatenated string as the map key for consistent matching\n recordIndexMap.set(`${entity.Name}||${compositeKey.ToConcatenatedString()}`, index);\n }\n }\n }\n\n // Batch fetch record names\n if (recordNameInputs.length > 0) {\n try {\n const nameResults = await this.metadata.GetEntityRecordNames(recordNameInputs);\n for (const nameResult of nameResults) {\n if (nameResult.Success && nameResult.RecordName) {\n const key = `${nameResult.EntityName}||${nameResult.CompositeKey.ToConcatenatedString()}`;\n const index = recordIndexMap.get(key);\n if (index !== undefined) {\n favoriteRecords[index].recordName = nameResult.RecordName;\n }\n }\n }\n } catch (nameError) {\n console.warn('Failed to load record names for favorites:', nameError);\n // Continue without names - they'll show record IDs\n }\n }\n\n this.favoriteRecords$.next(favoriteRecords);\n this.updateState({ favoriteRecords });\n } catch (error) {\n console.warn('Failed to load favorite records:', error);\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"explorer-state.service.js","sourceRoot":"","sources":["../../../src/DataExplorer/services/explorer-state.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { Metadata, RunView, CompositeKey, EntityRecordNameInput, IMetadataProvider } from '@memberjunction/core';\nimport { MJUserSettingEntity, MJUserFavoriteEntity, MJApplicationEntityEntity, UserInfoEngine } from '@memberjunction/core-entities';\nimport { DataExplorerState, DEFAULT_EXPLORER_STATE, RecentItem, FavoriteItem, EntityCacheEntry, BreadcrumbItem, DataExplorerFilter, FavoriteEntity, RecentRecordAccess, FavoriteRecord, DataExplorerViewMode } from '../models/explorer-state.interface';\nimport { UUIDsEqual } from '@memberjunction/global';\n\nconst BASE_SETTING_KEY = 'DataExplorer.State';\nconst MAX_RECENT_ITEMS = 20;\nconst MAX_RECENT_ENTITIES = 10;\nconst MAX_RECENT_RECORDS = 10;\nconst MAX_ENTITY_CACHE_SIZE = 50; // LRU cache limit\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ExplorerStateService {\n private state$ = new BehaviorSubject<DataExplorerState>(DEFAULT_EXPLORER_STATE);\n private _provider: IMetadataProvider | null = null;\n /** Set the metadata provider this service should use. Components should call this after injection. */\n public set Provider(value: IMetadataProvider | null) {\n this._provider = value;\n }\n public get Provider(): IMetadataProvider {\n return this._provider ?? Metadata.Provider;\n }\n private get metadata(): IMetadataProvider {\n return this.Provider;\n }\n private saveTimeout: ReturnType<typeof setTimeout> | null = null;\n\n /** Current context filter (determines which settings key to use) */\n private currentFilter: DataExplorerFilter | null = null;\n\n /** Computed breadcrumbs based on current state */\n private breadcrumbs$ = new BehaviorSubject<BreadcrumbItem[]>([]);\n\n /** Recent records loaded from User Record Logs */\n private recentRecords$ = new BehaviorSubject<RecentRecordAccess[]>([]);\n\n /** Favorite records loaded from User Favorites (non-entity favorites) */\n private favoriteRecords$ = new BehaviorSubject<FavoriteRecord[]>([]);\n\n /** Application entities with DefaultForNewUser info (loaded once per context) */\n private applicationEntities: MJApplicationEntityEntity[] = [];\n\n /** Set of entity IDs that have DefaultForNewUser=true */\n private defaultEntityIds = new Set<string>();\n\n constructor() {\n // Don't load state in constructor - wait for setContext to be called\n }\n\n /**\n * Set the context filter and load context-specific state.\n * Call this before using the service to ensure proper context isolation.\n */\n async setContext(filter: DataExplorerFilter | null): Promise<void> {\n this.currentFilter = filter;\n await this.loadState();\n // Load application entities first (needed for filtering recent/favorite records)\n await this.loadApplicationEntities();\n // Then load the rest in parallel\n await Promise.all([\n this.loadFavoriteEntities(),\n this.loadFavoriteRecords(),\n this.loadRecentRecords()\n ]);\n this.updateBreadcrumbs();\n }\n\n /**\n * Get the storage key based on current context.\n * Uses application ID if available for context-specific storage.\n */\n private getSettingKey(): string {\n if (this.currentFilter?.applicationId) {\n return `${BASE_SETTING_KEY}.${this.currentFilter.applicationId}`;\n }\n return BASE_SETTING_KEY;\n }\n\n /**\n * Get observable of current state\n */\n get State(): Observable<DataExplorerState> {\n return this.state$.asObservable();\n }\n\n /**\n * Get current state value\n */\n get CurrentState(): DataExplorerState {\n return this.state$.value;\n }\n\n /**\n * Observable of current breadcrumbs\n */\n get Breadcrumbs(): Observable<BreadcrumbItem[]> {\n return this.breadcrumbs$.asObservable();\n }\n\n /**\n * Get current breadcrumbs value\n */\n get CurrentBreadcrumbs(): BreadcrumbItem[] {\n return this.breadcrumbs$.value;\n }\n\n /**\n * Get the current context filter\n */\n get CurrentFilter(): DataExplorerFilter | null {\n return this.currentFilter;\n }\n\n /**\n * Observable of recent records (from User Record Logs)\n */\n get RecentRecords(): Observable<RecentRecordAccess[]> {\n return this.recentRecords$.asObservable();\n }\n\n /**\n * Get current recent records value\n */\n get CurrentRecentRecords(): RecentRecordAccess[] {\n return this.recentRecords$.value;\n }\n\n /**\n * Observable of favorite records (from User Favorites, non-entity)\n */\n get FavoriteRecords(): Observable<FavoriteRecord[]> {\n return this.favoriteRecords$.asObservable();\n }\n\n /**\n * Get current favorite records value\n */\n get CurrentFavoriteRecords(): FavoriteRecord[] {\n return this.favoriteRecords$.value;\n }\n\n /**\n * Get the set of entity IDs with DefaultForNewUser=true\n */\n get DefaultEntityIds(): Set<string> {\n return this.defaultEntityIds;\n }\n\n /**\n * Update state partially\n */\n updateState(partial: Partial<DataExplorerState>): void {\n const newState = { ...this.state$.value, ...partial };\n this.state$.next(newState);\n this.updateBreadcrumbs();\n this.debouncedSave();\n }\n\n /**\n * Set selected entity\n * Caches current entity's filter before switching, restores new entity's cached filter\n */\n selectEntity(entityName: string | null): void {\n const currentState = this.state$.value;\n const entityCache = { ...currentState.entityCache };\n\n // Cache current entity's filter before switching (if we have a current entity)\n if (currentState.selectedEntityName && currentState.smartFilterPrompt) {\n entityCache[currentState.selectedEntityName] = {\n filterText: currentState.smartFilterPrompt,\n lastAccessed: Date.now()\n };\n }\n\n // Restore filter for new entity (if cached) or clear it\n let restoredFilter = '';\n if (entityName && entityCache[entityName]) {\n restoredFilter = entityCache[entityName].filterText;\n entityCache[entityName].lastAccessed = Date.now();\n }\n\n // Evict old entries if cache is too large (LRU)\n this.evictOldCacheEntries(entityCache);\n\n this.updateState({\n selectedEntityName: entityName,\n selectedViewId: null, // Reset view when entity changes\n smartFilterPrompt: restoredFilter, // Restore cached filter or empty\n selectedRecordId: null,\n detailPanelOpen: false,\n entityCache\n });\n }\n\n /**\n * Evict oldest cache entries if over limit (LRU eviction)\n */\n private evictOldCacheEntries(cache: Record<string, EntityCacheEntry>): void {\n const entries = Object.entries(cache);\n if (entries.length <= MAX_ENTITY_CACHE_SIZE) return;\n\n // Sort by lastAccessed (oldest first) and remove excess\n entries.sort((a, b) => a[1].lastAccessed - b[1].lastAccessed);\n const toRemove = entries.length - MAX_ENTITY_CACHE_SIZE;\n for (let i = 0; i < toRemove; i++) {\n delete cache[entries[i][0]];\n }\n }\n\n /**\n * Set selected view\n */\n selectView(viewId: string | null): void {\n this.updateState({\n selectedViewId: viewId,\n viewModified: false // Reset modified state when selecting a different view\n });\n }\n\n /**\n * Mark the current view as modified (has unsaved changes)\n */\n setViewModified(modified: boolean): void {\n this.updateState({ viewModified: modified });\n }\n\n /**\n * Toggle the view configuration panel\n */\n toggleViewConfigPanel(): void {\n this.updateState({ viewConfigPanelOpen: !this.state$.value.viewConfigPanelOpen });\n }\n\n /**\n * Open the view configuration panel\n */\n openViewConfigPanel(): void {\n this.updateState({ viewConfigPanelOpen: true });\n }\n\n /**\n * Close the view configuration panel\n */\n closeViewConfigPanel(): void {\n this.updateState({ viewConfigPanelOpen: false });\n }\n\n /**\n * Set view mode\n */\n setViewMode(mode: DataExplorerViewMode): void {\n this.updateState({ viewMode: mode });\n }\n\n /**\n * Set smart filter prompt\n * Also updates the entity cache for the current entity\n */\n setSmartFilterPrompt(prompt: string): void {\n const currentState = this.state$.value;\n const entityCache = { ...currentState.entityCache };\n\n // Update cache for current entity\n if (currentState.selectedEntityName) {\n if (prompt) {\n entityCache[currentState.selectedEntityName] = {\n filterText: prompt,\n lastAccessed: Date.now()\n };\n } else {\n // Clear cache entry if filter is empty\n delete entityCache[currentState.selectedEntityName];\n }\n }\n\n this.updateState({ smartFilterPrompt: prompt, entityCache });\n }\n\n /**\n * Select a record and open detail panel\n * @param recordId The composite key string for the record\n * @param recordName Optional display name for the record (for breadcrumbs)\n */\n selectRecord(recordId: string | null, recordName?: string): void {\n this.updateState({\n selectedRecordId: recordId,\n selectedRecordName: recordName || null,\n detailPanelOpen: recordId !== null\n });\n }\n\n /**\n * Close detail panel\n */\n closeDetailPanel(): void {\n this.updateState({\n detailPanelOpen: false,\n selectedRecordId: null,\n selectedRecordName: null\n });\n }\n\n /**\n * Toggle navigation panel collapsed state\n */\n toggleNavigationPanel(): void {\n this.updateState({\n navigationPanelCollapsed: !this.state$.value.navigationPanelCollapsed\n });\n }\n\n /**\n * Expand navigation panel and ensure a specific section is expanded\n */\n expandAndFocusSection(section: 'favorites' | 'recent' | 'entities'): void {\n const updates: Partial<DataExplorerState> = {\n navigationPanelCollapsed: false\n };\n\n // Ensure the target section is expanded\n switch (section) {\n case 'favorites':\n updates.favoritesSectionExpanded = true;\n break;\n case 'recent':\n updates.recentSectionExpanded = true;\n break;\n case 'entities':\n updates.entitiesSectionExpanded = true;\n break;\n }\n\n this.updateState(updates);\n }\n\n /**\n * Add item to recent history\n */\n addRecentItem(item: Omit<RecentItem, 'timestamp'>): void {\n const recentItems = [...this.state$.value.recentItems];\n\n // Remove existing entry if present (match by entity and composite key)\n const existingIndex = recentItems.findIndex(\n r => r.entityName === item.entityName && r.compositeKeyString === item.compositeKeyString\n );\n if (existingIndex >= 0) {\n recentItems.splice(existingIndex, 1);\n }\n\n // Add to front with timestamp\n recentItems.unshift({\n ...item,\n timestamp: new Date()\n });\n\n // Trim to max size\n if (recentItems.length > MAX_RECENT_ITEMS) {\n recentItems.length = MAX_RECENT_ITEMS;\n }\n\n this.updateState({ recentItems });\n }\n\n /**\n * Add item to favorites\n */\n addFavorite(item: FavoriteItem): void {\n const favorites = [...this.state$.value.favorites];\n\n // Check if already exists\n const exists = favorites.some(f =>\n f.type === item.type &&\n f.entityName === item.entityName &&\n f.compositeKeyString === item.compositeKeyString &&\n f.viewId === item.viewId\n );\n\n if (!exists) {\n favorites.push(item);\n this.updateState({ favorites });\n }\n }\n\n /**\n * Remove item from favorites\n */\n removeFavorite(item: FavoriteItem): void {\n const favorites = this.state$.value.favorites.filter(f =>\n !(f.type === item.type &&\n f.entityName === item.entityName &&\n f.compositeKeyString === item.compositeKeyString &&\n f.viewId === item.viewId)\n );\n this.updateState({ favorites });\n }\n\n /**\n * Toggle section expanded state\n */\n toggleSection(section: 'favorites' | 'recent' | 'entities' | 'views'): void {\n const key = `${section}SectionExpanded` as keyof DataExplorerState;\n this.updateState({ [key]: !this.state$.value[key] } as Partial<DataExplorerState>);\n }\n\n /**\n * Load state from UserSetting using UserInfoEngine for cached access\n */\n private async loadState(): Promise<void> {\n try {\n const userId = this.metadata.CurrentUser?.ID;\n if (!userId) return;\n\n const settingKey = this.getSettingKey();\n const engine = UserInfoEngine.Instance;\n\n // Find the setting from cached user settings\n const setting = engine.UserSettings.find(s => s.Setting === settingKey);\n\n if (setting?.Value) {\n const savedState = JSON.parse(setting.Value) as Partial<DataExplorerState>;\n // Merge with defaults to handle new properties\n this.state$.next({ ...DEFAULT_EXPLORER_STATE, ...savedState });\n } else {\n // No saved state, use defaults\n this.state$.next({ ...DEFAULT_EXPLORER_STATE });\n }\n } catch (error) {\n console.warn('Failed to load Data Explorer state:', error);\n this.state$.next({ ...DEFAULT_EXPLORER_STATE });\n }\n }\n\n /**\n * Update breadcrumbs based on current state and filter\n */\n private updateBreadcrumbs(): void {\n const breadcrumbs: BreadcrumbItem[] = [];\n const state = this.state$.value;\n\n // Always add a root/home breadcrumb - use application name if available, otherwise \"All\"\n const rootLabel = this.currentFilter?.applicationName || 'All';\n breadcrumbs.push({\n label: rootLabel,\n type: 'application',\n icon: 'fa-solid fa-th-large'\n });\n\n // Add entity breadcrumb if selected\n if (state.selectedEntityName) {\n const entityInfo = this.metadata.Entities.find(e => e.Name.toLowerCase() === state.selectedEntityName?.toLowerCase());\n breadcrumbs.push({\n label: entityInfo?.DisplayNameOrName || state.selectedEntityName,\n type: 'entity',\n entityName: state.selectedEntityName,\n icon: entityInfo?.Icon ? this.formatEntityIcon(entityInfo.Icon) : 'fa-solid fa-table'\n });\n }\n\n // Add record breadcrumb if selected\n if (state.selectedRecordId && state.selectedRecordName) {\n breadcrumbs.push({\n label: state.selectedRecordName,\n type: 'record',\n entityName: state.selectedEntityName || undefined,\n compositeKeyString: state.selectedRecordId,\n icon: 'fa-solid fa-file-alt'\n });\n }\n\n this.breadcrumbs$.next(breadcrumbs);\n }\n\n /**\n * Format entity icon to ensure proper Font Awesome class format\n */\n private formatEntityIcon(icon: string): string {\n if (!icon) return 'fa-solid fa-table';\n if (icon.startsWith('fa-') || icon.startsWith('fa ')) {\n if (icon.startsWith('fa-solid') || icon.startsWith('fa-regular') ||\n icon.startsWith('fa-light') || icon.startsWith('fa-brands') ||\n icon.startsWith('fa ')) {\n return icon;\n }\n return `fa-solid ${icon}`;\n }\n return `fa-solid fa-${icon}`;\n }\n\n /**\n * Debounced save to avoid too many writes\n */\n private debouncedSave(): void {\n if (this.saveTimeout) {\n clearTimeout(this.saveTimeout);\n }\n this.saveTimeout = setTimeout(() => {\n this.saveState();\n }, 1000);\n }\n\n /**\n * Save state to UserSetting using UserInfoEngine for cached lookup\n */\n private async saveState(): Promise<void> {\n try {\n const userId = this.metadata.CurrentUser?.ID;\n if (!userId) return;\n\n const settingKey = this.getSettingKey();\n const md = this.Provider;\n const engine = UserInfoEngine.Instance;\n\n // Find existing setting from cached user settings\n let setting = engine.UserSettings.find(s => s.Setting === settingKey);\n\n if (!setting) {\n // Create new setting if not found\n setting = await md.GetEntityObject<MJUserSettingEntity>('MJ: User Settings');\n setting.UserID = userId;\n setting.Setting = settingKey;\n }\n\n setting.Value = JSON.stringify(this.state$.value);\n await setting.Save();\n } catch (error) {\n console.warn('Failed to save Data Explorer state:', error);\n }\n }\n\n /**\n * Navigate to a specific breadcrumb level.\n * Clears any selection deeper than the clicked breadcrumb.\n */\n navigateToBreadcrumb(breadcrumb: BreadcrumbItem): void {\n switch (breadcrumb.type) {\n case 'application':\n // Clear entity and record selection (show home view)\n this.updateState({\n selectedEntityName: null,\n selectedViewId: null,\n selectedRecordId: null,\n selectedRecordName: null,\n smartFilterPrompt: '',\n detailPanelOpen: false\n });\n break;\n\n case 'entity':\n // Keep entity selected, clear record selection\n if (breadcrumb.entityName) {\n this.updateState({\n selectedRecordId: null,\n selectedRecordName: null,\n detailPanelOpen: false\n });\n }\n break;\n\n case 'record':\n // Already at record level, do nothing\n break;\n }\n }\n\n // ========================================\n // HOME SCREEN ENTITY MANAGEMENT\n // ========================================\n\n /**\n * Toggle between showing all entities or just common (DefaultForNewUser) entities\n */\n toggleShowAllEntities(): void {\n this.updateState({ showAllEntities: !this.state$.value.showAllEntities });\n }\n\n // ========================================\n // Concept D: Application Groups + Quick Access\n // ========================================\n\n /**\n * Toggle the quick access (right) panel open/closed\n */\n toggleQuickAccessPanel(): void {\n this.updateState({ quickAccessPanelOpen: !this.state$.value.quickAccessPanelOpen });\n }\n\n /**\n * Toggle a quick access section's expanded state\n */\n toggleQuickAccessSection(sectionId: string): void {\n const sections = { ...this.state$.value.quickAccessSections };\n sections[sectionId] = sections[sectionId] === false; // default to expanded (true)\n this.updateState({ quickAccessSections: sections });\n }\n\n /**\n * Toggle an application group's expanded/collapsed state\n */\n toggleAppGroupExpanded(appId: string): void {\n const expanded = [...this.state$.value.expandedAppGroups];\n const index = expanded.indexOf(appId);\n if (index >= 0) {\n expanded.splice(index, 1);\n } else {\n expanded.push(appId);\n }\n this.updateState({ expandedAppGroups: expanded });\n }\n\n /**\n * Set the home view mode (all vs favorites)\n */\n setHomeViewMode(mode: 'all' | 'favorites'): void {\n this.updateState({ homeViewMode: mode });\n }\n\n /**\n * Track entity access - called when user navigates to an entity\n */\n trackEntityAccess(entityName: string, entityId: string): void {\n const recentEntityAccesses = [...this.state$.value.recentEntityAccesses];\n\n // Find existing entry\n const existingIndex = recentEntityAccesses.findIndex(r => r.entityId === entityId);\n\n if (existingIndex >= 0) {\n // Update existing entry\n recentEntityAccesses[existingIndex] = {\n ...recentEntityAccesses[existingIndex],\n lastAccessed: new Date(),\n accessCount: recentEntityAccesses[existingIndex].accessCount + 1\n };\n // Move to front\n const [item] = recentEntityAccesses.splice(existingIndex, 1);\n recentEntityAccesses.unshift(item);\n } else {\n // Add new entry at front\n recentEntityAccesses.unshift({\n entityName,\n entityId,\n lastAccessed: new Date(),\n accessCount: 1\n });\n }\n\n // Trim to max size\n if (recentEntityAccesses.length > MAX_RECENT_ENTITIES) {\n recentEntityAccesses.length = MAX_RECENT_ENTITIES;\n }\n\n this.updateState({ recentEntityAccesses });\n }\n\n /**\n * Add entity to favorites using User Favorites entity\n */\n async addEntityToFavorites(entityName: string, entityId: string): Promise<boolean> {\n try {\n const userId = this.metadata.CurrentUser?.ID;\n if (!userId) return false;\n\n // Check if already favorited\n const favorites = this.state$.value.favoriteEntities;\n if (favorites.some(f => f.entityId === entityId)) {\n return true; // Already favorited\n }\n\n // Get the Entities entity ID for favoriting\n const entitiesEntity = this.metadata.Entities.find(e => e.Name === 'MJ: Entities');\n if (!entitiesEntity) return false;\n\n // Create User Favorite record\n const md = this.Provider;\n const favorite = await md.GetEntityObject<MJUserFavoriteEntity>('MJ: User Favorites');\n favorite.UserID = userId;\n favorite.EntityID = entitiesEntity.ID;\n favorite.RecordID = entityId;\n\n const saved = await favorite.Save();\n if (saved) {\n // Update local state\n const favoriteEntities = [...favorites, {\n userFavoriteId: favorite.ID,\n entityName,\n entityId\n }];\n this.updateState({ favoriteEntities });\n }\n return saved;\n } catch (error) {\n console.warn('Failed to add entity to favorites:', error);\n return false;\n }\n }\n\n /**\n * Remove entity from favorites\n */\n async removeEntityFromFavorites(entityId: string): Promise<boolean> {\n try {\n const favorites = this.state$.value.favoriteEntities;\n const favorite = favorites.find(f => f.entityId === entityId);\n if (!favorite) return true; // Already not favorited\n\n // Delete User Favorite record\n const md = this.Provider;\n const favoriteEntity = await md.GetEntityObject<MJUserFavoriteEntity>('MJ: User Favorites');\n await favoriteEntity.Load(favorite.userFavoriteId);\n const deleted = await favoriteEntity.Delete();\n\n if (deleted) {\n // Update local state\n const favoriteEntities = favorites.filter(f => f.entityId !== entityId);\n this.updateState({ favoriteEntities });\n }\n return deleted;\n } catch (error) {\n console.warn('Failed to remove entity from favorites:', error);\n return false;\n }\n }\n\n /**\n * Check if an entity is favorited\n */\n isEntityFavorited(entityId: string): boolean {\n return this.state$.value.favoriteEntities.some(f => f.entityId === entityId);\n }\n\n /**\n * Load application entities with DefaultForNewUser information\n */\n private async loadApplicationEntities(): Promise<void> {\n try {\n if (!this.currentFilter?.applicationId) {\n this.applicationEntities = [];\n this.defaultEntityIds.clear();\n return;\n }\n\n const rv = RunView.FromMetadataProvider(this.Provider);\n const result = await rv.RunView<MJApplicationEntityEntity>({\n EntityName: 'MJ: Application Entities',\n ExtraFilter: `ApplicationID = '${this.currentFilter.applicationId}'`,\n ResultType: 'entity_object'\n });\n\n if (result.Success && result.Results) {\n this.applicationEntities = result.Results;\n this.defaultEntityIds.clear();\n for (const appEntity of result.Results) {\n if (appEntity.DefaultForNewUser) {\n this.defaultEntityIds.add(appEntity.EntityID);\n }\n }\n }\n } catch (error) {\n console.warn('Failed to load application entities:', error);\n }\n }\n\n /**\n * Load favorite entities from User Favorites using UserInfoEngine\n */\n private async loadFavoriteEntities(): Promise<void> {\n try {\n const userId = this.metadata.CurrentUser?.ID;\n if (!userId) return;\n\n // Get the Entities entity to filter favorites\n const entitiesEntity = this.metadata.Entities.find(e => e.Name === 'MJ: Entities');\n if (!entitiesEntity) return;\n\n // Use UserInfoEngine for cached access to user favorites\n const engine = UserInfoEngine.Instance;\n\n // Filter to only entity favorites (where EntityID is the Entities entity)\n const entityFavorites = engine.UserFavorites.filter(f => UUIDsEqual(f.EntityID, entitiesEntity.ID));\n\n const favoriteEntities: FavoriteEntity[] = [];\n for (const fav of entityFavorites) {\n // Look up entity name from RecordID (which is the Entity.ID)\n const entity = this.metadata.Entities.find(e => UUIDsEqual(e.ID, fav.RecordID));\n if (entity) {\n favoriteEntities.push({\n userFavoriteId: fav.ID,\n entityName: entity.Name,\n entityId: fav.RecordID\n });\n }\n }\n this.updateState({ favoriteEntities });\n } catch (error) {\n console.warn('Failed to load favorite entities:', error);\n }\n }\n\n /**\n * Load recent records from User Record Logs with batch record name lookup using UserInfoEngine\n */\n private async loadRecentRecords(): Promise<void> {\n try {\n const userId = this.metadata.CurrentUser?.ID;\n if (!userId) return;\n\n // Use UserInfoEngine for cached access to user record logs\n const engine = UserInfoEngine.Instance;\n\n // Get recent records, limited to MAX_RECENT_RECORDS\n const userRecordLogs = engine.UserRecordLogs.slice(0, MAX_RECENT_RECORDS);\n\n const recentRecords: RecentRecordAccess[] = [];\n const recordNameInputs: EntityRecordNameInput[] = [];\n const recordIndexMap: Map<string, number> = new Map(); // Map composite key to array index\n\n for (const log of userRecordLogs) {\n // Look up entity name from EntityID\n const entity = this.metadata.Entities.find(e => UUIDsEqual(e.ID, log.EntityID));\n if (entity) {\n // Filter by application context if applicable\n if (this.currentFilter?.applicationId && !this.applicationEntities.some(ae => UUIDsEqual(ae.EntityID, log.EntityID))) {\n continue; // Skip records from entities not in this application\n }\n\n const recordAccess: RecentRecordAccess = {\n entityName: entity.Name,\n entityId: log.EntityID,\n recordId: log.RecordID,\n latestAt: log.LatestAt,\n totalCount: log.TotalCount\n };\n const index = recentRecords.length;\n recentRecords.push(recordAccess);\n\n // Build composite key for batch name lookup\n const compositeKey = this.buildCompositeKeyForRecord(entity.Name, log.RecordID);\n if (compositeKey) {\n recordNameInputs.push({ EntityName: entity.Name, CompositeKey: compositeKey });\n // Use the canonical concatenated string as the map key for consistent matching\n recordIndexMap.set(`${entity.Name}||${compositeKey.ToConcatenatedString()}`, index);\n }\n }\n }\n\n // Batch fetch record names\n if (recordNameInputs.length > 0) {\n try {\n const nameResults = await this.metadata.GetEntityRecordNames(recordNameInputs);\n for (const nameResult of nameResults) {\n if (nameResult.Success && nameResult.RecordName) {\n const key = `${nameResult.EntityName}||${nameResult.CompositeKey.ToConcatenatedString()}`;\n const index = recordIndexMap.get(key);\n if (index !== undefined) {\n recentRecords[index].recordName = nameResult.RecordName;\n }\n }\n }\n } catch (nameError) {\n console.warn('Failed to load record names:', nameError);\n // Continue without names - they'll show record IDs\n }\n }\n\n this.recentRecords$.next(recentRecords);\n } catch (error) {\n console.warn('Failed to load recent records:', error);\n }\n }\n\n /**\n * Build a CompositeKey for a record. RecordID may be stored as either:\n * - Concatenated format: \"FieldName|Value\" or \"Field1|Val1||Field2|Val2\"\n * - Plain value: just the raw value (e.g. a GUID)\n * Detects the format and constructs the key accordingly.\n */\n private buildCompositeKeyForRecord(entityName: string, recordId: string): CompositeKey | null {\n if (!recordId) return null;\n const entityInfo = this.metadata.Entities.find(e => e.Name === entityName);\n // A plain value can only be resolved against the entity's real key column(s)\n if (!entityInfo && !recordId.includes(CompositeKey.DefaultValueDelimiter)) return null;\n const compositeKey = CompositeKey.FromURLSegment(entityInfo, recordId);\n return compositeKey.KeyValuePairs.length > 0 ? compositeKey : null;\n }\n\n /**\n * Refresh recent records (call after navigating to a record)\n */\n async refreshRecentRecords(): Promise<void> {\n await this.loadRecentRecords();\n }\n\n /**\n * Add or update a recent record locally (without DB refresh).\n * Call this when a record is selected to provide instant UI feedback.\n * The DB write happens separately via RecentAccessService.logAccess().\n *\n * @param entityName The entity name\n * @param entityId The entity ID\n * @param recordId The record ID (primary key value)\n * @param recordName Optional display name for the record\n */\n addLocalRecentRecord(entityName: string, entityId: string, recordId: string, recordName?: string): void {\n // Filter by application context if applicable\n if (this.currentFilter?.applicationId && !this.applicationEntities.some(ae => UUIDsEqual(ae.EntityID, entityId))) {\n return; // Don't add records from entities not in this application\n }\n\n const currentRecords = [...this.recentRecords$.value];\n\n // Find existing entry\n const existingIndex = currentRecords.findIndex(\n r => r.entityId === entityId && r.recordId === recordId\n );\n\n const newRecord: RecentRecordAccess = {\n entityName,\n entityId,\n recordId,\n recordName,\n latestAt: new Date(),\n totalCount: existingIndex >= 0 ? currentRecords[existingIndex].totalCount + 1 : 1\n };\n\n if (existingIndex >= 0) {\n // Remove existing entry (will be re-added at front)\n currentRecords.splice(existingIndex, 1);\n }\n\n // Add to front\n currentRecords.unshift(newRecord);\n\n // Trim to max size\n if (currentRecords.length > MAX_RECENT_RECORDS) {\n currentRecords.length = MAX_RECENT_RECORDS;\n }\n\n this.recentRecords$.next(currentRecords);\n }\n\n /**\n * Load favorite records from User Favorites (non-entity favorites) with batch record name lookup using UserInfoEngine.\n * Filters to only include records from entities in the current application context.\n */\n private async loadFavoriteRecords(): Promise<void> {\n try {\n const userId = this.metadata.CurrentUser?.ID;\n if (!userId) return;\n\n // Get the Entities entity to exclude entity favorites\n const entitiesEntity = this.metadata.Entities.find(e => e.Name === 'MJ: Entities');\n const entitiesEntityId = entitiesEntity?.ID || '';\n\n // Use UserInfoEngine for cached access to user favorites\n const engine = UserInfoEngine.Instance;\n\n // Filter to non-entity favorites (exclude favorites where EntityID is the Entities entity)\n const nonEntityFavorites = engine.UserFavorites.filter(f => !UUIDsEqual(f.EntityID, entitiesEntityId));\n\n const favoriteRecords: FavoriteRecord[] = [];\n const recordNameInputs: EntityRecordNameInput[] = [];\n const recordIndexMap: Map<string, number> = new Map();\n\n for (const fav of nonEntityFavorites) {\n // Look up entity info from the EntityID\n const entity = this.metadata.Entities.find(e => UUIDsEqual(e.ID, fav.EntityID));\n if (entity) {\n // Filter by application context if applicable\n if (this.currentFilter?.applicationId && !this.applicationEntities.some(ae => UUIDsEqual(ae.EntityID, fav.EntityID))) {\n continue; // Skip records from entities not in this application\n }\n\n const favoriteRecord: FavoriteRecord = {\n userFavoriteId: fav.ID,\n entityName: entity.Name,\n entityId: fav.EntityID,\n recordId: fav.RecordID\n };\n const index = favoriteRecords.length;\n favoriteRecords.push(favoriteRecord);\n\n // Build composite key for batch name lookup\n const compositeKey = this.buildCompositeKeyForRecord(entity.Name, fav.RecordID);\n if (compositeKey) {\n recordNameInputs.push({ EntityName: entity.Name, CompositeKey: compositeKey });\n // Use the canonical concatenated string as the map key for consistent matching\n recordIndexMap.set(`${entity.Name}||${compositeKey.ToConcatenatedString()}`, index);\n }\n }\n }\n\n // Batch fetch record names\n if (recordNameInputs.length > 0) {\n try {\n const nameResults = await this.metadata.GetEntityRecordNames(recordNameInputs);\n for (const nameResult of nameResults) {\n if (nameResult.Success && nameResult.RecordName) {\n const key = `${nameResult.EntityName}||${nameResult.CompositeKey.ToConcatenatedString()}`;\n const index = recordIndexMap.get(key);\n if (index !== undefined) {\n favoriteRecords[index].recordName = nameResult.RecordName;\n }\n }\n }\n } catch (nameError) {\n console.warn('Failed to load record names for favorites:', nameError);\n // Continue without names - they'll show record IDs\n }\n }\n\n this.favoriteRecords$.next(favoriteRecords);\n this.updateState({ favoriteRecords });\n } catch (error) {\n console.warn('Failed to load favorite records:', error);\n }\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graphql-console.component.d.ts","sourceRoot":"","sources":["../../src/DevTools/graphql-console.component.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"graphql-console.component.d.ts","sourceRoot":"","sources":["../../src/DevTools/graphql-console.component.ts"],"names":[],"mappings":"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"}
|
|
@@ -648,6 +648,7 @@ let GraphQLConsoleComponent = class GraphQLConsoleComponent extends BaseResource
|
|
|
648
648
|
this.cdr = cdr;
|
|
649
649
|
}
|
|
650
650
|
ngOnInit() {
|
|
651
|
+
super.ngOnInit();
|
|
651
652
|
this.loadFromStorage();
|
|
652
653
|
try {
|
|
653
654
|
this.ApiUrl = GraphQLDataProvider.Instance.ConfigData?.URL ?? '';
|
|
@@ -657,6 +658,7 @@ let GraphQLConsoleComponent = class GraphQLConsoleComponent extends BaseResource
|
|
|
657
658
|
this.NotifyLoadComplete();
|
|
658
659
|
}
|
|
659
660
|
ngOnDestroy() {
|
|
661
|
+
super.ngOnDestroy();
|
|
660
662
|
this.saveToStorage();
|
|
661
663
|
this.detachResizeListeners();
|
|
662
664
|
}
|