@memberjunction/ng-dashboards 6.2.0-edge.1 → 6.2.0-edge.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.d.ts.map +1 -1
- package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.js +3 -1
- package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.js.map +1 -1
- package/dist/AI/components/autotagging/tabs/sources-tab.component.d.ts.map +1 -1
- package/dist/AI/components/autotagging/tabs/sources-tab.component.js +1 -2
- package/dist/AI/components/autotagging/tabs/sources-tab.component.js.map +1 -1
- package/dist/AI/components/rubric-drift-series.d.ts +32 -0
- package/dist/AI/components/rubric-drift-series.d.ts.map +1 -0
- package/dist/AI/components/rubric-drift-series.js +49 -0
- package/dist/AI/components/rubric-drift-series.js.map +1 -0
- package/dist/AI/components/rubric-drift.component.d.ts +42 -0
- package/dist/AI/components/rubric-drift.component.d.ts.map +1 -0
- package/dist/AI/components/rubric-drift.component.js +197 -0
- package/dist/AI/components/rubric-drift.component.js.map +1 -0
- package/dist/AI/components/tags/tags-resource.component.d.ts.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.js +4 -3
- package/dist/AI/components/tags/tags-resource.component.js.map +1 -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 +5 -2
- package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
- package/dist/Integration/components/connections/connections.component.d.ts +5 -0
- package/dist/Integration/components/connections/connections.component.d.ts.map +1 -1
- package/dist/Integration/components/connections/connections.component.js +151 -136
- package/dist/Integration/components/connections/connections.component.js.map +1 -1
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +3 -2
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/feature-pipelines/feature-pipeline.engine.d.ts +11 -0
- package/dist/KnowledgeHub/components/feature-pipelines/feature-pipeline.engine.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/feature-pipelines/feature-pipeline.engine.js +17 -1
- package/dist/KnowledgeHub/components/feature-pipelines/feature-pipeline.engine.js.map +1 -1
- package/dist/KnowledgeHub/components/feature-pipelines/feature-pipelines-resource.component.js +52 -45
- package/dist/KnowledgeHub/components/feature-pipelines/feature-pipelines-resource.component.js.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.d.ts +11 -0
- package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.js +47 -10
- package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
- package/dist/Rubrics/catalog-grid.d.ts +4 -0
- package/dist/Rubrics/catalog-grid.d.ts.map +1 -0
- package/dist/Rubrics/catalog-grid.js +22 -0
- package/dist/Rubrics/catalog-grid.js.map +1 -0
- package/dist/Rubrics/rubrics-dashboard.component.d.ts +31 -0
- package/dist/Rubrics/rubrics-dashboard.component.d.ts.map +1 -0
- package/dist/Rubrics/rubrics-dashboard.component.js +285 -0
- package/dist/Rubrics/rubrics-dashboard.component.js.map +1 -0
- package/dist/Rubrics/rubrics-resource.component.d.ts +13 -0
- package/dist/Rubrics/rubrics-resource.component.d.ts.map +1 -0
- package/dist/Rubrics/rubrics-resource.component.js +42 -0
- package/dist/Rubrics/rubrics-resource.component.js.map +1 -0
- package/dist/Rubrics/scales-dashboard.component.d.ts +34 -0
- package/dist/Rubrics/scales-dashboard.component.d.ts.map +1 -0
- package/dist/Rubrics/scales-dashboard.component.js +204 -0
- package/dist/Rubrics/scales-dashboard.component.js.map +1 -0
- package/dist/Rubrics/scales-resource.component.d.ts +13 -0
- package/dist/Rubrics/scales-resource.component.d.ts.map +1 -0
- package/dist/Rubrics/scales-resource.component.js +42 -0
- package/dist/Rubrics/scales-resource.component.js.map +1 -0
- package/dist/Testing/components/testing-analytics.component.d.ts +15 -0
- package/dist/Testing/components/testing-analytics.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-analytics.component.js +465 -296
- package/dist/Testing/components/testing-analytics.component.js.map +1 -1
- package/dist/Testing/components/testing-review.component.d.ts +6 -0
- package/dist/Testing/components/testing-review.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-review.component.js +289 -173
- package/dist/Testing/components/testing-review.component.js.map +1 -1
- package/dist/Testing/components/widgets/test-run-detail-panel.component.d.ts +8 -1
- package/dist/Testing/components/widgets/test-run-detail-panel.component.d.ts.map +1 -1
- package/dist/Testing/components/widgets/test-run-detail-panel.component.js +68 -43
- package/dist/Testing/components/widgets/test-run-detail-panel.component.js.map +1 -1
- package/dist/module.d.ts +23 -22
- package/dist/module.d.ts.map +1 -1
- package/dist/module.js +7 -0
- package/dist/module.js.map +1 -1
- package/dist/public-api.d.ts +1 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +1 -0
- package/dist/public-api.js.map +1 -1
- package/dist/rubrics-dashboards.module.d.ts +17 -0
- package/dist/rubrics-dashboards.module.d.ts.map +1 -0
- package/dist/rubrics-dashboards.module.js +76 -0
- package/dist/rubrics-dashboards.module.js.map +1 -0
- package/package.json +70 -64
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog-grid.d.ts","sourceRoot":"","sources":["../../src/Rubrics/catalog-grid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmD,KAAK,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAIhG,uDAAuD;AACvD,wBAAgB,gBAAgB,IAAI,KAAK,CAiBxC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { AllCommunityModule, ModuleRegistry, themeAlpine } from 'ag-grid-community';
|
|
2
|
+
ModuleRegistry.registerModules([AllCommunityModule]);
|
|
3
|
+
/** Alpine theme bound to the Explorer color tokens. */
|
|
4
|
+
export function CatalogGridTheme() {
|
|
5
|
+
return themeAlpine.withParams({
|
|
6
|
+
backgroundColor: 'var(--mj-bg-surface)',
|
|
7
|
+
foregroundColor: 'var(--mj-text-primary)',
|
|
8
|
+
textColor: 'var(--mj-text-primary)',
|
|
9
|
+
borderColor: 'var(--mj-border-default)',
|
|
10
|
+
chromeBackgroundColor: 'var(--mj-bg-surface-card)',
|
|
11
|
+
headerBackgroundColor: 'var(--mj-bg-surface-card)',
|
|
12
|
+
headerTextColor: 'var(--mj-text-secondary)',
|
|
13
|
+
cellTextColor: 'var(--mj-text-primary)',
|
|
14
|
+
subtleTextColor: 'var(--mj-text-muted)',
|
|
15
|
+
dataBackgroundColor: 'var(--mj-bg-surface)',
|
|
16
|
+
oddRowBackgroundColor: 'var(--mj-bg-surface-card)',
|
|
17
|
+
accentColor: 'var(--mj-brand-primary)',
|
|
18
|
+
borderRadius: 'var(--mj-radius-sm)',
|
|
19
|
+
browserColorScheme: 'inherit',
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=catalog-grid.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog-grid.js","sourceRoot":"","sources":["../../src/Rubrics/catalog-grid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,WAAW,EAAc,MAAM,mBAAmB,CAAC;AAEhG,cAAc,CAAC,eAAe,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC;AAErD,uDAAuD;AACvD,MAAM,UAAU,gBAAgB;IAC5B,OAAO,WAAW,CAAC,UAAU,CAAC;QAC1B,eAAe,EAAE,sBAAsB;QACvC,eAAe,EAAE,wBAAwB;QACzC,SAAS,EAAE,wBAAwB;QACnC,WAAW,EAAE,0BAA0B;QACvC,qBAAqB,EAAE,2BAA2B;QAClD,qBAAqB,EAAE,2BAA2B;QAClD,eAAe,EAAE,0BAA0B;QAC3C,aAAa,EAAE,wBAAwB;QACvC,eAAe,EAAE,sBAAsB;QACvC,mBAAmB,EAAE,sBAAsB;QAC3C,qBAAqB,EAAE,2BAA2B;QAClD,WAAW,EAAE,yBAAyB;QACtC,YAAY,EAAE,qBAAqB;QACnC,kBAAkB,EAAE,SAAS;KAChC,CAAC,CAAC;AACP,CAAC","sourcesContent":["import { AllCommunityModule, ModuleRegistry, themeAlpine, type Theme } from 'ag-grid-community';\n\nModuleRegistry.registerModules([AllCommunityModule]);\n\n/** Alpine theme bound to the Explorer color tokens. */\nexport function CatalogGridTheme(): Theme {\n return themeAlpine.withParams({\n backgroundColor: 'var(--mj-bg-surface)',\n foregroundColor: 'var(--mj-text-primary)',\n textColor: 'var(--mj-text-primary)',\n borderColor: 'var(--mj-border-default)',\n chromeBackgroundColor: 'var(--mj-bg-surface-card)',\n headerBackgroundColor: 'var(--mj-bg-surface-card)',\n headerTextColor: 'var(--mj-text-secondary)',\n cellTextColor: 'var(--mj-text-primary)',\n subtleTextColor: 'var(--mj-text-muted)',\n dataBackgroundColor: 'var(--mj-bg-surface)',\n oddRowBackgroundColor: 'var(--mj-bg-surface-card)',\n accentColor: 'var(--mj-brand-primary)',\n borderRadius: 'var(--mj-radius-sm)',\n browserColorScheme: 'inherit',\n });\n}\n"]}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { AfterViewInit } from '@angular/core';
|
|
2
|
+
import { ColDef, GridOptions, RowClickedEvent } from 'ag-grid-community';
|
|
3
|
+
import { BaseDashboard } from '@memberjunction/ng-shared';
|
|
4
|
+
import { type CatalogRowView } from '@memberjunction/ng-rubrics';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
/** Rubrics catalog. Opens a rubric record. It does not edit the tree. */
|
|
7
|
+
export declare class RubricsDashboardComponent extends BaseDashboard implements AfterViewInit {
|
|
8
|
+
Loading: boolean;
|
|
9
|
+
LoadError: string;
|
|
10
|
+
Search: string;
|
|
11
|
+
Rows: CatalogRowView[];
|
|
12
|
+
readonly Theme: import("ag-grid-community").Theme;
|
|
13
|
+
readonly GridOptions: GridOptions<CatalogRowView>;
|
|
14
|
+
readonly ColumnDefs: ColDef<CatalogRowView>[];
|
|
15
|
+
private readonly changeDetector;
|
|
16
|
+
protected initDashboard(): void;
|
|
17
|
+
GetResourceDisplayName(): Promise<string>;
|
|
18
|
+
protected loadData(): Promise<void>;
|
|
19
|
+
ngAfterViewInit(): void;
|
|
20
|
+
get Visible(): CatalogRowView[];
|
|
21
|
+
get DraftCount(): number;
|
|
22
|
+
OnSearch(value: string): void;
|
|
23
|
+
Open(id: string): void;
|
|
24
|
+
OnRow(event: RowClickedEvent<CatalogRowView>): void;
|
|
25
|
+
NewRubric(): void;
|
|
26
|
+
private inputFor;
|
|
27
|
+
private publishAgent;
|
|
28
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<RubricsDashboardComponent, never>;
|
|
29
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<RubricsDashboardComponent, "mj-rubrics-dashboard", never, {}, {}, never, never, false, never>;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=rubrics-dashboard.component.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rubrics-dashboard.component.d.ts","sourceRoot":"","sources":["../../src/Rubrics/rubrics-dashboard.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyD,aAAa,EAAU,MAAM,eAAe,CAAC;AAC7G,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGzE,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAc,KAAK,cAAc,EAA2B,MAAM,4BAA4B,CAAC;;AAKtG,yEAAyE;AACzE,qBAQa,yBAA0B,SAAQ,aAAc,YAAW,aAAa;IAC1E,OAAO,UAAQ;IACf,SAAS,SAAM;IACf,MAAM,SAAM;IACZ,IAAI,EAAE,cAAc,EAAE,CAAM;IACnC,SAAgB,KAAK,oCAAsB;IAC3C,SAAgB,WAAW,EAAE,WAAW,CAAC,cAAc,CAAC,CAA2E;IACnI,SAAgB,UAAU,EAAE,MAAM,CAAC,cAAc,CAAC,EAAE,CAQlD;IACF,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA6B;IAE5D,SAAS,CAAC,aAAa,IAAI,IAAI;IAET,sBAAsB,IAAI,OAAO,CAAC,MAAM,CAAC;cAI/C,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IA6ClC,eAAe,IAAI,IAAI;IAI9B,IAAW,OAAO,IAAI,cAAc,EAAE,CAIrC;IAED,IAAW,UAAU,IAAI,MAAM,CAE9B;IAEM,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAM7B,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAItB,KAAK,CAAC,KAAK,EAAE,eAAe,CAAC,cAAc,CAAC,GAAG,IAAI;IAInD,SAAS,IAAI,IAAI;IAIxB,OAAO,CAAC,QAAQ;IA4BhB,OAAO,CAAC,YAAY;yCAjIX,yBAAyB;2CAAzB,yBAAyB;CA8JrC"}
|
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, inject } from '@angular/core';
|
|
8
|
+
import { CompositeKey, RunView } from '@memberjunction/core';
|
|
9
|
+
import { RegisterClass } from '@memberjunction/global';
|
|
10
|
+
import { BaseDashboard } from '@memberjunction/ng-shared';
|
|
11
|
+
import { CatalogRow } from '@memberjunction/ng-rubrics';
|
|
12
|
+
import { CatalogGridTheme } from './catalog-grid';
|
|
13
|
+
import * as i0 from "@angular/core";
|
|
14
|
+
import * as i1 from "ag-grid-angular";
|
|
15
|
+
import * as i2 from "@memberjunction/ng-shared-generic";
|
|
16
|
+
import * as i3 from "@memberjunction/ng-ui-components";
|
|
17
|
+
const _forTrack0 = ($index, $item) => $item.id;
|
|
18
|
+
function RubricsDashboardComponent_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
19
|
+
i0.ɵɵelement(0, "mj-loading", 6);
|
|
20
|
+
} }
|
|
21
|
+
function RubricsDashboardComponent_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
22
|
+
i0.ɵɵelementStart(0, "p", 7);
|
|
23
|
+
i0.ɵɵtext(1);
|
|
24
|
+
i0.ɵɵelementEnd();
|
|
25
|
+
} if (rf & 2) {
|
|
26
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
27
|
+
i0.ɵɵadvance();
|
|
28
|
+
i0.ɵɵtextInterpolate(ctx_r0.LoadError);
|
|
29
|
+
} }
|
|
30
|
+
function RubricsDashboardComponent_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
31
|
+
i0.ɵɵelement(0, "mj-empty-state", 8);
|
|
32
|
+
} }
|
|
33
|
+
function RubricsDashboardComponent_Conditional_12_For_3_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
34
|
+
i0.ɵɵelementStart(0, "span");
|
|
35
|
+
i0.ɵɵtext(1);
|
|
36
|
+
i0.ɵɵelementEnd();
|
|
37
|
+
} if (rf & 2) {
|
|
38
|
+
const row_r4 = i0.ɵɵnextContext().$implicit;
|
|
39
|
+
i0.ɵɵadvance();
|
|
40
|
+
i0.ɵɵtextInterpolate(row_r4.description);
|
|
41
|
+
} }
|
|
42
|
+
function RubricsDashboardComponent_Conditional_12_For_3_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
43
|
+
i0.ɵɵtext(0);
|
|
44
|
+
} if (rf & 2) {
|
|
45
|
+
const row_r4 = i0.ɵɵnextContext().$implicit;
|
|
46
|
+
i0.ɵɵtextInterpolate1(" \u00B7 ", row_r4.scaleName, " ");
|
|
47
|
+
} }
|
|
48
|
+
function RubricsDashboardComponent_Conditional_12_For_3_Template(rf, ctx) { if (rf & 1) {
|
|
49
|
+
const _r3 = i0.ɵɵgetCurrentView();
|
|
50
|
+
i0.ɵɵelementStart(0, "article", 11)(1, "strong");
|
|
51
|
+
i0.ɵɵtext(2);
|
|
52
|
+
i0.ɵɵelementEnd();
|
|
53
|
+
i0.ɵɵconditionalCreate(3, RubricsDashboardComponent_Conditional_12_For_3_Conditional_3_Template, 2, 1, "span");
|
|
54
|
+
i0.ɵɵelementStart(4, "span");
|
|
55
|
+
i0.ɵɵtext(5);
|
|
56
|
+
i0.ɵɵelementEnd();
|
|
57
|
+
i0.ɵɵelementStart(6, "span");
|
|
58
|
+
i0.ɵɵtext(7);
|
|
59
|
+
i0.ɵɵelementEnd();
|
|
60
|
+
i0.ɵɵelementStart(8, "span");
|
|
61
|
+
i0.ɵɵtext(9);
|
|
62
|
+
i0.ɵɵelementEnd();
|
|
63
|
+
i0.ɵɵelementStart(10, "span");
|
|
64
|
+
i0.ɵɵtext(11);
|
|
65
|
+
i0.ɵɵconditionalCreate(12, RubricsDashboardComponent_Conditional_12_For_3_Conditional_12_Template, 1, 1);
|
|
66
|
+
i0.ɵɵelementEnd();
|
|
67
|
+
i0.ɵɵelementStart(13, "button", 12);
|
|
68
|
+
i0.ɵɵlistener("click", function RubricsDashboardComponent_Conditional_12_For_3_Template_button_click_13_listener() { const row_r4 = i0.ɵɵrestoreView(_r3).$implicit; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.Open(row_r4.id)); });
|
|
69
|
+
i0.ɵɵtext(14, "Open");
|
|
70
|
+
i0.ɵɵelementEnd()();
|
|
71
|
+
} if (rf & 2) {
|
|
72
|
+
const row_r4 = ctx.$implicit;
|
|
73
|
+
i0.ɵɵadvance(2);
|
|
74
|
+
i0.ɵɵtextInterpolate(row_r4.name);
|
|
75
|
+
i0.ɵɵadvance();
|
|
76
|
+
i0.ɵɵconditional(row_r4.description ? 3 : -1);
|
|
77
|
+
i0.ɵɵadvance(2);
|
|
78
|
+
i0.ɵɵtextInterpolate1("Category ", row_r4.categoryName);
|
|
79
|
+
i0.ɵɵadvance(2);
|
|
80
|
+
i0.ɵɵtextInterpolate1("Published ", row_r4.publishedLabel);
|
|
81
|
+
i0.ɵɵadvance(2);
|
|
82
|
+
i0.ɵɵtextInterpolate1("Draft ", row_r4.draftLabel);
|
|
83
|
+
i0.ɵɵadvance(2);
|
|
84
|
+
i0.ɵɵtextInterpolate1("", row_r4.criteriaCount, " criteria");
|
|
85
|
+
i0.ɵɵadvance();
|
|
86
|
+
i0.ɵɵconditional(row_r4.scaleName ? 12 : -1);
|
|
87
|
+
} }
|
|
88
|
+
function RubricsDashboardComponent_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
89
|
+
const _r2 = i0.ɵɵgetCurrentView();
|
|
90
|
+
i0.ɵɵelementStart(0, "ag-grid-angular", 9);
|
|
91
|
+
i0.ɵɵlistener("rowClicked", function RubricsDashboardComponent_Conditional_12_Template_ag_grid_angular_rowClicked_0_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.OnRow($event)); });
|
|
92
|
+
i0.ɵɵelementEnd();
|
|
93
|
+
i0.ɵɵelementStart(1, "div", 10);
|
|
94
|
+
i0.ɵɵrepeaterCreate(2, RubricsDashboardComponent_Conditional_12_For_3_Template, 15, 7, "article", 11, _forTrack0);
|
|
95
|
+
i0.ɵɵelementEnd();
|
|
96
|
+
} if (rf & 2) {
|
|
97
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
98
|
+
i0.ɵɵproperty("theme", ctx_r0.Theme)("columnDefs", ctx_r0.ColumnDefs)("gridOptions", ctx_r0.GridOptions)("rowData", ctx_r0.Visible);
|
|
99
|
+
i0.ɵɵadvance(2);
|
|
100
|
+
i0.ɵɵrepeater(ctx_r0.Visible);
|
|
101
|
+
} }
|
|
102
|
+
/** Rubrics catalog. Opens a rubric record. It does not edit the tree. */
|
|
103
|
+
let RubricsDashboardComponent = class RubricsDashboardComponent extends BaseDashboard {
|
|
104
|
+
Loading = true;
|
|
105
|
+
LoadError = '';
|
|
106
|
+
Search = '';
|
|
107
|
+
Rows = [];
|
|
108
|
+
Theme = CatalogGridTheme();
|
|
109
|
+
GridOptions = { domLayout: 'autoHeight', suppressCellFocus: true, animateRows: true };
|
|
110
|
+
ColumnDefs = [
|
|
111
|
+
{ field: 'name', headerName: 'Name', flex: 2 },
|
|
112
|
+
{ field: 'description', headerName: 'Description', flex: 2 },
|
|
113
|
+
{ field: 'categoryName', headerName: 'Category', flex: 1 },
|
|
114
|
+
{ field: 'publishedLabel', headerName: 'Published', flex: 1 },
|
|
115
|
+
{ field: 'draftLabel', headerName: 'Draft', flex: 1 },
|
|
116
|
+
{ field: 'criteriaCount', headerName: 'Criteria', width: 120 },
|
|
117
|
+
{ field: 'scaleName', headerName: 'Scale', flex: 1 },
|
|
118
|
+
];
|
|
119
|
+
changeDetector = inject(ChangeDetectorRef);
|
|
120
|
+
initDashboard() { }
|
|
121
|
+
async GetResourceDisplayName() {
|
|
122
|
+
return 'Rubrics';
|
|
123
|
+
}
|
|
124
|
+
async loadData() {
|
|
125
|
+
this.Loading = true;
|
|
126
|
+
this.changeDetector.markForCheck();
|
|
127
|
+
try {
|
|
128
|
+
const view = RunView.FromMetadataProvider(this.ProviderToUse);
|
|
129
|
+
const user = this.ProviderToUse.CurrentUser;
|
|
130
|
+
const [rubrics, versions, criteria, categories, scales] = await view.RunViews([
|
|
131
|
+
{ EntityName: 'MJ: Rubrics', ResultType: 'simple', MaxRows: 300, OrderBy: 'Name' },
|
|
132
|
+
{ EntityName: 'MJ: Rubric Versions', ResultType: 'simple', MaxRows: 800 },
|
|
133
|
+
{ EntityName: 'MJ: Rubric Criteria', ResultType: 'simple', MaxRows: 2000 },
|
|
134
|
+
{ EntityName: 'MJ: Rubric Categories', ResultType: 'simple', MaxRows: 300 },
|
|
135
|
+
{ EntityName: 'MJ: Rubric Scales', ResultType: 'simple', MaxRows: 300 },
|
|
136
|
+
], user);
|
|
137
|
+
const failed = [rubrics, versions, criteria, categories, scales].find(result => !result.Success);
|
|
138
|
+
if (failed) {
|
|
139
|
+
this.LoadError = failed.ErrorMessage || 'Could not load rubrics.';
|
|
140
|
+
this.Rows = [];
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
this.LoadError = '';
|
|
144
|
+
const categoryNames = new Map((categories.Results ?? []).map(row => [String(row.ID).toLowerCase(), String(row.Name ?? '')]));
|
|
145
|
+
const scaleNames = {};
|
|
146
|
+
for (const row of (scales.Results ?? []))
|
|
147
|
+
scaleNames[String(row.ID).toLowerCase()] = String(row.Name ?? '');
|
|
148
|
+
const criteriaByVersion = new Map();
|
|
149
|
+
for (const row of (criteria.Results ?? [])) {
|
|
150
|
+
const versionId = String(row.RubricVersionID ?? '').toLowerCase();
|
|
151
|
+
const list = criteriaByVersion.get(versionId) ?? [];
|
|
152
|
+
list.push(row);
|
|
153
|
+
criteriaByVersion.set(versionId, list);
|
|
154
|
+
}
|
|
155
|
+
const versionsByRubric = new Map();
|
|
156
|
+
for (const row of (versions.Results ?? [])) {
|
|
157
|
+
const rubricId = String(row.RubricID ?? '').toLowerCase();
|
|
158
|
+
const list = versionsByRubric.get(rubricId) ?? [];
|
|
159
|
+
list.push(row);
|
|
160
|
+
versionsByRubric.set(rubricId, list);
|
|
161
|
+
}
|
|
162
|
+
this.Rows = ((rubrics.Results ?? [])).map(rubric => CatalogRow(this.inputFor(rubric, categoryNames, versionsByRubric, criteriaByVersion, scaleNames)));
|
|
163
|
+
}
|
|
164
|
+
finally {
|
|
165
|
+
this.Loading = false;
|
|
166
|
+
this.changeDetector.markForCheck();
|
|
167
|
+
this.publishAgent();
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
ngAfterViewInit() {
|
|
171
|
+
this.publishAgent();
|
|
172
|
+
}
|
|
173
|
+
get Visible() {
|
|
174
|
+
const query = this.Search.trim().toLowerCase();
|
|
175
|
+
if (!query)
|
|
176
|
+
return this.Rows;
|
|
177
|
+
return this.Rows.filter(row => `${row.name} ${row.description ?? ''} ${row.categoryName}`.toLowerCase().includes(query));
|
|
178
|
+
}
|
|
179
|
+
get DraftCount() {
|
|
180
|
+
return this.Rows.filter(row => row.draftLabel !== 'none').length;
|
|
181
|
+
}
|
|
182
|
+
OnSearch(value) {
|
|
183
|
+
this.Search = value;
|
|
184
|
+
this.publishAgent();
|
|
185
|
+
this.changeDetector.markForCheck();
|
|
186
|
+
}
|
|
187
|
+
Open(id) {
|
|
188
|
+
this.navigationService.OpenEntityRecord('MJ: Rubrics', CompositeKey.FromID(id));
|
|
189
|
+
}
|
|
190
|
+
OnRow(event) {
|
|
191
|
+
if (event.data)
|
|
192
|
+
this.Open(event.data.id);
|
|
193
|
+
}
|
|
194
|
+
NewRubric() {
|
|
195
|
+
this.navigationService.OpenNewEntityRecord('MJ: Rubrics');
|
|
196
|
+
}
|
|
197
|
+
inputFor(rubric, categoryNames, versionsByRubric, criteriaByVersion, scaleNames) {
|
|
198
|
+
const versions = versionsByRubric.get(String(rubric.ID).toLowerCase()) ?? [];
|
|
199
|
+
return {
|
|
200
|
+
id: String(rubric.ID),
|
|
201
|
+
name: String(rubric.Name ?? ''),
|
|
202
|
+
description: rubric.Description == null || rubric.Description === '' ? null : String(rubric.Description),
|
|
203
|
+
categoryName: categoryNames.get(String(rubric.CategoryID ?? '').toLowerCase()) ?? null,
|
|
204
|
+
scaleNames,
|
|
205
|
+
versions: versions.map(version => ({
|
|
206
|
+
id: String(version.ID),
|
|
207
|
+
rubricId: String(rubric.ID),
|
|
208
|
+
status: String(version.Status ?? ''),
|
|
209
|
+
majorVersion: version.MajorVersion == null || version.MajorVersion === '' ? null : Number(version.MajorVersion),
|
|
210
|
+
minorVersion: version.MinorVersion == null || version.MinorVersion === '' ? null : Number(version.MinorVersion),
|
|
211
|
+
patchVersion: version.PatchVersion == null || version.PatchVersion === '' ? null : Number(version.PatchVersion),
|
|
212
|
+
criteria: (criteriaByVersion.get(String(version.ID).toLowerCase()) ?? []).map(criterion => ({
|
|
213
|
+
id: String(criterion.ID),
|
|
214
|
+
key: String(criterion.Key ?? ''),
|
|
215
|
+
name: String(criterion.Name ?? ''),
|
|
216
|
+
nodeType: String(criterion.NodeType ?? 'Criterion'),
|
|
217
|
+
weight: Number(criterion.Weight ?? 1),
|
|
218
|
+
scaleId: criterion.ScaleID == null || criterion.ScaleID === '' ? null : String(criterion.ScaleID),
|
|
219
|
+
isGate: criterion.IsGate === true || criterion.IsGate === 1,
|
|
220
|
+
})),
|
|
221
|
+
})),
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
publishAgent() {
|
|
225
|
+
this.navigationService.SetAgentContext(this, {
|
|
226
|
+
Search: this.Search,
|
|
227
|
+
RowCount: this.Visible.length,
|
|
228
|
+
DraftCount: this.Visible.filter(row => row.draftLabel !== 'none').length,
|
|
229
|
+
});
|
|
230
|
+
this.navigationService.SetAgentClientTools(this, [
|
|
231
|
+
{
|
|
232
|
+
Name: 'OpenRubric',
|
|
233
|
+
Description: 'Open a rubric record from the catalog by its id.',
|
|
234
|
+
ParameterSchema: { type: 'object', properties: { id: { type: 'string' } }, required: ['id'] },
|
|
235
|
+
Handler: async (params) => {
|
|
236
|
+
const id = String(params['id'] ?? '');
|
|
237
|
+
if (!this.Rows.some(row => row.id.toLowerCase() === id.toLowerCase()))
|
|
238
|
+
return { Success: false, ErrorMessage: 'That rubric is not in the catalog.' };
|
|
239
|
+
this.Open(id);
|
|
240
|
+
return { Success: true };
|
|
241
|
+
},
|
|
242
|
+
},
|
|
243
|
+
{
|
|
244
|
+
Name: 'NewRubric',
|
|
245
|
+
Description: 'Start a new rubric record.',
|
|
246
|
+
ParameterSchema: { type: 'object', properties: {} },
|
|
247
|
+
Handler: async () => {
|
|
248
|
+
this.NewRubric();
|
|
249
|
+
return { Success: true };
|
|
250
|
+
},
|
|
251
|
+
},
|
|
252
|
+
]);
|
|
253
|
+
}
|
|
254
|
+
static ɵfac = /*@__PURE__*/ (() => { let ɵRubricsDashboardComponent_BaseFactory; return function RubricsDashboardComponent_Factory(__ngFactoryType__) { return (ɵRubricsDashboardComponent_BaseFactory || (ɵRubricsDashboardComponent_BaseFactory = i0.ɵɵgetInheritedFactory(RubricsDashboardComponent)))(__ngFactoryType__ || RubricsDashboardComponent); }; })();
|
|
255
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: RubricsDashboardComponent, selectors: [["mj-rubrics-dashboard"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 13, vars: 2, consts: [["Title", "Rubrics", "Icon", "fa-solid fa-scale-balanced", "Subtitle", "Author rubrics, then open one to edit its tree."], ["actions", ""], [3, "Clicked"], ["mjButton", "", "variant", "primary", "type", "button", 3, "click"], ["toolbar", ""], ["Placeholder", "Search rubrics", 3, "ValueChange", "Value"], ["text", "Loading rubrics..."], ["role", "alert"], ["Icon", "fa-solid fa-scale-balanced", "Title", "No rubrics", "Message", "Create a rubric to start a catalog."], [1, "catalog-grid", 3, "rowClicked", "theme", "columnDefs", "gridOptions", "rowData"], [1, "catalog-cards"], [1, "catalog-card"], ["mjButton", "", "variant", "outline", "size", "sm", "type", "button", 3, "click"]], template: function RubricsDashboardComponent_Template(rf, ctx) { if (rf & 1) {
|
|
256
|
+
i0.ɵɵelementStart(0, "mj-page-layout")(1, "mj-page-header", 0)(2, "div", 1)(3, "mj-refresh-button", 2);
|
|
257
|
+
i0.ɵɵlistener("Clicked", function RubricsDashboardComponent_Template_mj_refresh_button_Clicked_3_listener() { return ctx.Refresh(); });
|
|
258
|
+
i0.ɵɵelementEnd();
|
|
259
|
+
i0.ɵɵelementStart(4, "button", 3);
|
|
260
|
+
i0.ɵɵlistener("click", function RubricsDashboardComponent_Template_button_click_4_listener() { return ctx.NewRubric(); });
|
|
261
|
+
i0.ɵɵtext(5, "New rubric");
|
|
262
|
+
i0.ɵɵelementEnd()();
|
|
263
|
+
i0.ɵɵelementStart(6, "div", 4)(7, "mj-page-search", 5);
|
|
264
|
+
i0.ɵɵlistener("ValueChange", function RubricsDashboardComponent_Template_mj_page_search_ValueChange_7_listener($event) { return ctx.OnSearch($event); });
|
|
265
|
+
i0.ɵɵelementEnd()()();
|
|
266
|
+
i0.ɵɵelementStart(8, "mj-page-body");
|
|
267
|
+
i0.ɵɵconditionalCreate(9, RubricsDashboardComponent_Conditional_9_Template, 1, 0, "mj-loading", 6)(10, RubricsDashboardComponent_Conditional_10_Template, 2, 1, "p", 7)(11, RubricsDashboardComponent_Conditional_11_Template, 1, 0, "mj-empty-state", 8)(12, RubricsDashboardComponent_Conditional_12_Template, 4, 4);
|
|
268
|
+
i0.ɵɵelementEnd()();
|
|
269
|
+
} if (rf & 2) {
|
|
270
|
+
i0.ɵɵadvance(7);
|
|
271
|
+
i0.ɵɵproperty("Value", ctx.Search);
|
|
272
|
+
i0.ɵɵadvance(2);
|
|
273
|
+
i0.ɵɵconditional(ctx.Loading ? 9 : ctx.LoadError ? 10 : ctx.Visible.length === 0 ? 11 : 12);
|
|
274
|
+
} }, dependencies: [i1.AgGridAngular, i2.LoadingComponent, i3.MJButtonDirective, i3.MJEmptyStateComponent, i3.MJPageBodyComponent, i3.MJPageHeaderComponent, i3.MJPageLayoutComponent, i3.MJPageSearchComponent, i3.MJRefreshButtonComponent], styles: [".catalog-grid[_ngcontent-%COMP%] { width: 100%; }\n.catalog-note[_ngcontent-%COMP%] { display: block; color: var(--mj-text-secondary); font-size: 0.85rem; }\n.catalog-cards[_ngcontent-%COMP%] { display: none; }\n.catalog-card[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: var(--mj-space-2, 0.5rem);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md, 6px);\n padding: var(--mj-space-3, 0.75rem);\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-primary);\n}\n\n@media (max-width: 520px) {\n .catalog-grid[_ngcontent-%COMP%] { display: none; }\n .catalog-cards[_ngcontent-%COMP%] { display: flex; flex-direction: column; gap: var(--mj-space-3, 0.75rem); }\n}"], changeDetection: 0 });
|
|
275
|
+
};
|
|
276
|
+
RubricsDashboardComponent = __decorate([
|
|
277
|
+
RegisterClass(BaseDashboard, 'RubricsDashboard')
|
|
278
|
+
], RubricsDashboardComponent);
|
|
279
|
+
export { RubricsDashboardComponent };
|
|
280
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(RubricsDashboardComponent, [{
|
|
281
|
+
type: Component,
|
|
282
|
+
args: [{ standalone: false, selector: 'mj-rubrics-dashboard', changeDetection: ChangeDetectionStrategy.OnPush, template: "<mj-page-layout>\n <mj-page-header Title=\"Rubrics\" Icon=\"fa-solid fa-scale-balanced\" Subtitle=\"Author rubrics, then open one to edit its tree.\">\n <div actions>\n <mj-refresh-button (Clicked)=\"Refresh()\"></mj-refresh-button>\n <button mjButton variant=\"primary\" type=\"button\" (click)=\"NewRubric()\">New rubric</button>\n </div>\n <div toolbar>\n <mj-page-search Placeholder=\"Search rubrics\" [Value]=\"Search\" (ValueChange)=\"OnSearch($event)\"></mj-page-search>\n </div>\n </mj-page-header>\n <mj-page-body>\n @if (Loading) {\n <mj-loading text=\"Loading rubrics...\"></mj-loading>\n } @else if (LoadError) {\n <p role=\"alert\">{{ LoadError }}</p>\n } @else if (Visible.length === 0) {\n <mj-empty-state Icon=\"fa-solid fa-scale-balanced\" Title=\"No rubrics\" Message=\"Create a rubric to start a catalog.\"></mj-empty-state>\n } @else {\n <ag-grid-angular\n class=\"catalog-grid\"\n [theme]=\"Theme\"\n [columnDefs]=\"ColumnDefs\"\n [gridOptions]=\"GridOptions\"\n [rowData]=\"Visible\"\n (rowClicked)=\"OnRow($event)\">\n </ag-grid-angular>\n <div class=\"catalog-cards\">\n @for (row of Visible; track row.id) {\n <article class=\"catalog-card\">\n <strong>{{ row.name }}</strong>\n @if (row.description) { <span>{{ row.description }}</span> }\n <span>Category {{ row.categoryName }}</span>\n <span>Published {{ row.publishedLabel }}</span>\n <span>Draft {{ row.draftLabel }}</span>\n <span>{{ row.criteriaCount }} criteria@if (row.scaleName) { \u00B7 {{ row.scaleName }} }</span>\n <button mjButton variant=\"outline\" size=\"sm\" type=\"button\" (click)=\"Open(row.id)\">Open</button>\n </article>\n }\n </div>\n }\n </mj-page-body>\n</mj-page-layout>\n", styles: [".catalog-grid { width: 100%; }\n.catalog-note { display: block; color: var(--mj-text-secondary); font-size: 0.85rem; }\n.catalog-cards { display: none; }\n.catalog-card {\n display: flex;\n flex-direction: column;\n gap: var(--mj-space-2, 0.5rem);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md, 6px);\n padding: var(--mj-space-3, 0.75rem);\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-primary);\n}\n\n@media (max-width: 520px) {\n .catalog-grid { display: none; }\n .catalog-cards { display: flex; flex-direction: column; gap: var(--mj-space-3, 0.75rem); }\n}\n"] }]
|
|
283
|
+
}], null, null); })();
|
|
284
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(RubricsDashboardComponent, { className: "RubricsDashboardComponent", filePath: "src/Rubrics/rubrics-dashboard.component.ts", lineNumber: 20 }); })();
|
|
285
|
+
//# sourceMappingURL=rubrics-dashboard.component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rubrics-dashboard.component.js","sourceRoot":"","sources":["../../src/Rubrics/rubrics-dashboard.component.ts","../../src/Rubrics/rubrics-dashboard.component.html"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,SAAS,EAAiB,MAAM,EAAE,MAAM,eAAe,CAAC;AAE7G,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAgD,MAAM,4BAA4B,CAAC;AACtG,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;;;;;;;ICM5C,gCAAmD;;;IAEnD,4BAAgB;IAAA,YAAe;IAAA,iBAAI;;;IAAnB,cAAe;IAAf,sCAAe;;;IAE/B,oCAAoI;;;IActG,4BAAM;IAAA,YAAqB;IAAA,iBAAO;;;IAA5B,cAAqB;IAArB,wCAAqB;;;IAIS,YAAsB;;;IAAtB,wDAAsB;;;;IALlF,AADF,mCAA8B,aACpB;IAAA,YAAc;IAAA,iBAAS;IAC/B,8GAAuB;IACvB,4BAAM;IAAA,YAA+B;IAAA,iBAAO;IAC5C,4BAAM;IAAA,YAAkC;IAAA,iBAAO;IAC/C,4BAAM;IAAA,YAA0B;IAAA,iBAAO;IACvC,6BAAM;IAAA,aAAgC;IAAA,wGAAqB;IAAwB,iBAAO;IAC1F,mCAAkF;IAAvB,+NAAS,sBAAY,KAAC;IAAC,qBAAI;IACxF,AADwF,iBAAS,EACvF;;;IAPA,eAAc;IAAd,iCAAc;IACtB,cAA4D;IAA5D,6CAA4D;IACtD,eAA+B;IAA/B,uDAA+B;IAC/B,eAAkC;IAAlC,0DAAkC;IAClC,eAA0B;IAA1B,kDAA0B;IAC1B,eAAgC;IAAhC,4DAAgC;IAAA,cAA6C;IAA7C,4CAA6C;;;;IAhBzF,0CAM+B;IAA7B,uNAAc,oBAAa,KAAC;IAC9B,iBAAkB;IAClB,+BAA2B;IACzB,iHAUC;IACH,iBAAM;;;IAfJ,AADA,AADA,AADA,oCAAe,iCACU,mCACE,2BACR;IAInB,eAUC;IAVD,6BAUC;;AD3BT,yEAAyE;AASlE,IAAM,yBAAyB,GAA/B,MAAM,yBAA0B,SAAQ,aAAa;IACjD,OAAO,GAAG,IAAI,CAAC;IACf,SAAS,GAAG,EAAE,CAAC;IACf,MAAM,GAAG,EAAE,CAAC;IACZ,IAAI,GAAqB,EAAE,CAAC;IACnB,KAAK,GAAG,gBAAgB,EAAE,CAAC;IAC3B,WAAW,GAAgC,EAAE,SAAS,EAAE,YAAY,EAAE,iBAAiB,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IACnH,UAAU,GAA6B;QACnD,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE;QAC9C,EAAE,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE;QAC5D,EAAE,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,EAAE;QAC1D,EAAE,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,EAAE;QAC7D,EAAE,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE;QACrD,EAAE,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE;QAC9D,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE;KACvD,CAAC;IACe,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAElD,aAAa,KAAU,CAAC;IAElB,KAAK,CAAC,sBAAsB;QACxC,OAAO,SAAS,CAAC;IACrB,CAAC;IAES,KAAK,CAAC,QAAQ;QACpB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC;QACnC,IAAI,CAAC;YACD,MAAM,IAAI,GAAG,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC9D,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC;YAC5C,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC;gBAC1E,EAAE,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE;gBAClF,EAAE,UAAU,EAAE,qBAAqB,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE;gBACzE,EAAE,UAAU,EAAE,qBAAqB,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE;gBAC1E,EAAE,UAAU,EAAE,uBAAuB,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE;gBAC3E,EAAE,UAAU,EAAE,mBAAmB,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE;aAC1E,EAAE,IAAI,CAAC,CAAC;YACT,MAAM,MAAM,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACjG,IAAI,MAAM,EAAE,CAAC;gBACT,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,YAAY,IAAI,yBAAyB,CAAC;gBAClE,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;gBACf,OAAO;YACX,CAAC;YACD,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;YACpB,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,CAAC,OAAgB,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACtI,MAAM,UAAU,GAA2B,EAAE,CAAC;YAC9C,KAAK,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,OAAgB,IAAI,EAAE,CAAC;gBAAE,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;YACrH,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAiB,CAAC;YACnD,KAAK,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAgB,IAAI,EAAE,CAAC,EAAE,CAAC;gBAClD,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;gBAClE,MAAM,IAAI,GAAG,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;gBACpD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACf,iBAAiB,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAC3C,CAAC;YACD,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAiB,CAAC;YAClD,KAAK,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAgB,IAAI,EAAE,CAAC,EAAE,CAAC;gBAClD,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;gBAC1D,MAAM,IAAI,GAAG,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAClD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACf,gBAAgB,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YACzC,CAAC;YACD,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,OAAgB,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;QACpK,CAAC;gBAAS,CAAC;YACP,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;YACrB,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC;YACnC,IAAI,CAAC,YAAY,EAAE,CAAC;QACxB,CAAC;IACL,CAAC;IAEM,eAAe;QAClB,IAAI,CAAC,YAAY,EAAE,CAAC;IACxB,CAAC;IAED,IAAW,OAAO;QACd,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC/C,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC,IAAI,CAAC;QAC7B,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,WAAW,IAAI,EAAE,IAAI,GAAG,CAAC,YAAY,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7H,CAAC;IAED,IAAW,UAAU;QACjB,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,KAAK,MAAM,CAAC,CAAC,MAAM,CAAC;IACrE,CAAC;IAEM,QAAQ,CAAC,KAAa;QACzB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC;IACvC,CAAC;IAEM,IAAI,CAAC,EAAU;QAClB,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,aAAa,EAAE,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IACpF,CAAC;IAEM,KAAK,CAAC,KAAsC;QAC/C,IAAI,KAAK,CAAC,IAAI;YAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC7C,CAAC;IAEM,SAAS;QACZ,IAAI,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;IAC9D,CAAC;IAEO,QAAQ,CAAC,MAAW,EAAE,aAAkC,EAAE,gBAAoC,EAAE,iBAAqC,EAAE,UAAkC;QAC7K,MAAM,QAAQ,GAAG,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;QAC7E,OAAO;YACH,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YACrB,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YAC/B,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,IAAI,IAAI,MAAM,CAAC,WAAW,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC;YACxG,YAAY,EAAE,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,IAAI;YACtF,UAAU;YACV,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC/B,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;gBACtB,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC3B,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;gBACpC,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,IAAI,IAAI,OAAO,CAAC,YAAY,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC;gBAC/G,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,IAAI,IAAI,OAAO,CAAC,YAAY,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC;gBAC/G,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,IAAI,IAAI,OAAO,CAAC,YAAY,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC;gBAC/G,QAAQ,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;oBACxF,EAAE,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;oBACxB,GAAG,EAAE,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,CAAC;oBAChC,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC,IAAI,IAAI,EAAE,CAAC;oBAClC,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,IAAI,WAAW,CAAC;oBACnD,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,CAAC;oBACrC,OAAO,EAAE,SAAS,CAAC,OAAO,IAAI,IAAI,IAAI,SAAS,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC;oBACjG,MAAM,EAAE,SAAS,CAAC,MAAM,KAAK,IAAI,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;iBAC9D,CAAC,CAAC;aACN,CAAC,CAAC;SACN,CAAC;IACN,CAAC;IAEO,YAAY;QAChB,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC,IAAI,EAAE;YACzC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;YAC7B,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,KAAK,MAAM,CAAC,CAAC,MAAM;SAC3E,CAAC,CAAC;QACH,IAAI,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,IAAI,EAAE;YAC7C;gBACI,IAAI,EAAE,YAAY;gBAClB,WAAW,EAAE,kDAAkD;gBAC/D,eAAe,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE;gBAC7F,OAAO,EAAE,KAAK,EAAE,MAA+B,EAAE,EAAE;oBAC/C,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;oBACtC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,EAAE,CAAC,WAAW,EAAE,CAAC;wBAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,oCAAoC,EAAE,CAAC;oBACrJ,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACd,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;gBAC7B,CAAC;aACJ;YACD;gBACI,IAAI,EAAE,WAAW;gBACjB,WAAW,EAAE,4BAA4B;gBACzC,eAAe,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE;gBACnD,OAAO,EAAE,KAAK,IAAI,EAAE;oBAChB,IAAI,CAAC,SAAS,EAAE,CAAC;oBACjB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;gBAC7B,CAAC;aACJ;SACJ,CAAC,CAAC;IACP,CAAC;iRA7JQ,yBAAyB,yBAAzB,yBAAyB;6DAAzB,yBAAyB;YChBhC,AADF,AADF,AADF,sCAAgB,wBAC+G,aAC9G,2BAC8B;YAAtB,qHAAW,aAAS,IAAC;YAAC,iBAAoB;YAC7D,iCAAuE;YAAtB,sGAAS,eAAW,IAAC;YAAC,0BAAU;YACnF,AADmF,iBAAS,EACtF;YAEJ,AADF,8BAAa,wBACoF;YAAjC,gIAAe,oBAAgB,IAAC;YAElG,AADE,AADiG,iBAAiB,EAC5G,EACS;YACjB,oCAAc;YAOV,AAFA,AAFA,AAFF,kGAAe,qEAES,kFAEW,6DAE1B;YAwBb,AADE,iBAAe,EACA;;YAlCkC,eAAgB;YAAhB,kCAAgB;YAI/D,eA4BC;YA5BD,2FA4BC;;;ADpBQ,yBAAyB;IARrC,aAAa,CAAC,aAAa,EAAE,kBAAkB,CAAC;GAQpC,yBAAyB,CA8JrC;;iFA9JY,yBAAyB;cAPrC,SAAS;6BACM,KAAK,YACP,sBAAsB,mBAGf,uBAAuB,CAAC,MAAM;;kFAEtC,yBAAyB","sourcesContent":["import { ChangeDetectionStrategy, ChangeDetectorRef, Component, AfterViewInit, inject } from '@angular/core';\nimport { ColDef, GridOptions, RowClickedEvent } from 'ag-grid-community';\nimport { CompositeKey, RunView } from '@memberjunction/core';\nimport { RegisterClass } from '@memberjunction/global';\nimport { BaseDashboard } from '@memberjunction/ng-shared';\nimport { CatalogRow, type CatalogRowView, type CatalogRubricInput } from '@memberjunction/ng-rubrics';\nimport { CatalogGridTheme } from './catalog-grid';\n\ntype Row = Record<string, unknown>;\n\n/** Rubrics catalog. Opens a rubric record. It does not edit the tree. */\n@RegisterClass(BaseDashboard, 'RubricsDashboard')\n@Component({\n standalone: false,\n selector: 'mj-rubrics-dashboard',\n templateUrl: './rubrics-dashboard.component.html',\n styleUrls: ['./rubrics-catalog.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class RubricsDashboardComponent extends BaseDashboard implements AfterViewInit {\n public Loading = true;\n public LoadError = '';\n public Search = '';\n public Rows: CatalogRowView[] = [];\n public readonly Theme = CatalogGridTheme();\n public readonly GridOptions: GridOptions<CatalogRowView> = { domLayout: 'autoHeight', suppressCellFocus: true, animateRows: true };\n public readonly ColumnDefs: ColDef<CatalogRowView>[] = [\n { field: 'name', headerName: 'Name', flex: 2 },\n { field: 'description', headerName: 'Description', flex: 2 },\n { field: 'categoryName', headerName: 'Category', flex: 1 },\n { field: 'publishedLabel', headerName: 'Published', flex: 1 },\n { field: 'draftLabel', headerName: 'Draft', flex: 1 },\n { field: 'criteriaCount', headerName: 'Criteria', width: 120 },\n { field: 'scaleName', headerName: 'Scale', flex: 1 },\n ];\n private readonly changeDetector = inject(ChangeDetectorRef);\n\n protected initDashboard(): void {}\n\n public override async GetResourceDisplayName(): Promise<string> {\n return 'Rubrics';\n }\n\n protected async loadData(): Promise<void> {\n this.Loading = true;\n this.changeDetector.markForCheck();\n try {\n const view = RunView.FromMetadataProvider(this.ProviderToUse);\n const user = this.ProviderToUse.CurrentUser;\n const [rubrics, versions, criteria, categories, scales] = await view.RunViews([\n { EntityName: 'MJ: Rubrics', ResultType: 'simple', MaxRows: 300, OrderBy: 'Name' },\n { EntityName: 'MJ: Rubric Versions', ResultType: 'simple', MaxRows: 800 },\n { EntityName: 'MJ: Rubric Criteria', ResultType: 'simple', MaxRows: 2000 },\n { EntityName: 'MJ: Rubric Categories', ResultType: 'simple', MaxRows: 300 },\n { EntityName: 'MJ: Rubric Scales', ResultType: 'simple', MaxRows: 300 },\n ], user);\n const failed = [rubrics, versions, criteria, categories, scales].find(result => !result.Success);\n if (failed) {\n this.LoadError = failed.ErrorMessage || 'Could not load rubrics.';\n this.Rows = [];\n return;\n }\n this.LoadError = '';\n const categoryNames = new Map((categories.Results as Row[] ?? []).map(row => [String(row.ID).toLowerCase(), String(row.Name ?? '')]));\n const scaleNames: Record<string, string> = {};\n for (const row of (scales.Results as Row[] ?? [])) scaleNames[String(row.ID).toLowerCase()] = String(row.Name ?? '');\n const criteriaByVersion = new Map<string, Row[]>();\n for (const row of (criteria.Results as Row[] ?? [])) {\n const versionId = String(row.RubricVersionID ?? '').toLowerCase();\n const list = criteriaByVersion.get(versionId) ?? [];\n list.push(row);\n criteriaByVersion.set(versionId, list);\n }\n const versionsByRubric = new Map<string, Row[]>();\n for (const row of (versions.Results as Row[] ?? [])) {\n const rubricId = String(row.RubricID ?? '').toLowerCase();\n const list = versionsByRubric.get(rubricId) ?? [];\n list.push(row);\n versionsByRubric.set(rubricId, list);\n }\n this.Rows = ((rubrics.Results as Row[] ?? [])).map(rubric => CatalogRow(this.inputFor(rubric, categoryNames, versionsByRubric, criteriaByVersion, scaleNames)));\n } finally {\n this.Loading = false;\n this.changeDetector.markForCheck();\n this.publishAgent();\n }\n }\n\n public ngAfterViewInit(): void {\n this.publishAgent();\n }\n\n public get Visible(): CatalogRowView[] {\n const query = this.Search.trim().toLowerCase();\n if (!query) return this.Rows;\n return this.Rows.filter(row => `${row.name} ${row.description ?? ''} ${row.categoryName}`.toLowerCase().includes(query));\n }\n\n public get DraftCount(): number {\n return this.Rows.filter(row => row.draftLabel !== 'none').length;\n }\n\n public OnSearch(value: string): void {\n this.Search = value;\n this.publishAgent();\n this.changeDetector.markForCheck();\n }\n\n public Open(id: string): void {\n this.navigationService.OpenEntityRecord('MJ: Rubrics', CompositeKey.FromID(id));\n }\n\n public OnRow(event: RowClickedEvent<CatalogRowView>): void {\n if (event.data) this.Open(event.data.id);\n }\n\n public NewRubric(): void {\n this.navigationService.OpenNewEntityRecord('MJ: Rubrics');\n }\n\n private inputFor(rubric: Row, categoryNames: Map<string, string>, versionsByRubric: Map<string, Row[]>, criteriaByVersion: Map<string, Row[]>, scaleNames: Record<string, string>): CatalogRubricInput {\n const versions = versionsByRubric.get(String(rubric.ID).toLowerCase()) ?? [];\n return {\n id: String(rubric.ID),\n name: String(rubric.Name ?? ''),\n description: rubric.Description == null || rubric.Description === '' ? null : String(rubric.Description),\n categoryName: categoryNames.get(String(rubric.CategoryID ?? '').toLowerCase()) ?? null,\n scaleNames,\n versions: versions.map(version => ({\n id: String(version.ID),\n rubricId: String(rubric.ID),\n status: String(version.Status ?? ''),\n majorVersion: version.MajorVersion == null || version.MajorVersion === '' ? null : Number(version.MajorVersion),\n minorVersion: version.MinorVersion == null || version.MinorVersion === '' ? null : Number(version.MinorVersion),\n patchVersion: version.PatchVersion == null || version.PatchVersion === '' ? null : Number(version.PatchVersion),\n criteria: (criteriaByVersion.get(String(version.ID).toLowerCase()) ?? []).map(criterion => ({\n id: String(criterion.ID),\n key: String(criterion.Key ?? ''),\n name: String(criterion.Name ?? ''),\n nodeType: String(criterion.NodeType ?? 'Criterion'),\n weight: Number(criterion.Weight ?? 1),\n scaleId: criterion.ScaleID == null || criterion.ScaleID === '' ? null : String(criterion.ScaleID),\n isGate: criterion.IsGate === true || criterion.IsGate === 1,\n })),\n })),\n };\n }\n\n private publishAgent(): void {\n this.navigationService.SetAgentContext(this, {\n Search: this.Search,\n RowCount: this.Visible.length,\n DraftCount: this.Visible.filter(row => row.draftLabel !== 'none').length,\n });\n this.navigationService.SetAgentClientTools(this, [\n {\n Name: 'OpenRubric',\n Description: 'Open a rubric record from the catalog by its id.',\n ParameterSchema: { type: 'object', properties: { id: { type: 'string' } }, required: ['id'] },\n Handler: async (params: Record<string, unknown>) => {\n const id = String(params['id'] ?? '');\n if (!this.Rows.some(row => row.id.toLowerCase() === id.toLowerCase())) return { Success: false, ErrorMessage: 'That rubric is not in the catalog.' };\n this.Open(id);\n return { Success: true };\n },\n },\n {\n Name: 'NewRubric',\n Description: 'Start a new rubric record.',\n ParameterSchema: { type: 'object', properties: {} },\n Handler: async () => {\n this.NewRubric();\n return { Success: true };\n },\n },\n ]);\n }\n}\n","<mj-page-layout>\n <mj-page-header Title=\"Rubrics\" Icon=\"fa-solid fa-scale-balanced\" Subtitle=\"Author rubrics, then open one to edit its tree.\">\n <div actions>\n <mj-refresh-button (Clicked)=\"Refresh()\"></mj-refresh-button>\n <button mjButton variant=\"primary\" type=\"button\" (click)=\"NewRubric()\">New rubric</button>\n </div>\n <div toolbar>\n <mj-page-search Placeholder=\"Search rubrics\" [Value]=\"Search\" (ValueChange)=\"OnSearch($event)\"></mj-page-search>\n </div>\n </mj-page-header>\n <mj-page-body>\n @if (Loading) {\n <mj-loading text=\"Loading rubrics...\"></mj-loading>\n } @else if (LoadError) {\n <p role=\"alert\">{{ LoadError }}</p>\n } @else if (Visible.length === 0) {\n <mj-empty-state Icon=\"fa-solid fa-scale-balanced\" Title=\"No rubrics\" Message=\"Create a rubric to start a catalog.\"></mj-empty-state>\n } @else {\n <ag-grid-angular\n class=\"catalog-grid\"\n [theme]=\"Theme\"\n [columnDefs]=\"ColumnDefs\"\n [gridOptions]=\"GridOptions\"\n [rowData]=\"Visible\"\n (rowClicked)=\"OnRow($event)\">\n </ag-grid-angular>\n <div class=\"catalog-cards\">\n @for (row of Visible; track row.id) {\n <article class=\"catalog-card\">\n <strong>{{ row.name }}</strong>\n @if (row.description) { <span>{{ row.description }}</span> }\n <span>Category {{ row.categoryName }}</span>\n <span>Published {{ row.publishedLabel }}</span>\n <span>Draft {{ row.draftLabel }}</span>\n <span>{{ row.criteriaCount }} criteria@if (row.scaleName) { · {{ row.scaleName }} }</span>\n <button mjButton variant=\"outline\" size=\"sm\" type=\"button\" (click)=\"Open(row.id)\">Open</button>\n </article>\n }\n </div>\n }\n </mj-page-body>\n</mj-page-layout>\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { OnInit } from '@angular/core';
|
|
2
|
+
import { ResourceData } from '@memberjunction/core-entities';
|
|
3
|
+
import { BaseResourceComponent } from '@memberjunction/ng-shared';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
/** Thin nav shim. The catalog dashboard owns the page. */
|
|
6
|
+
export declare class RubricsResourceComponent extends BaseResourceComponent implements OnInit {
|
|
7
|
+
ngOnInit(): void;
|
|
8
|
+
GetResourceDisplayName(_data: ResourceData): Promise<string>;
|
|
9
|
+
GetResourceIconClass(_data: ResourceData): Promise<string>;
|
|
10
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<RubricsResourceComponent, never>;
|
|
11
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<RubricsResourceComponent, "mj-rubrics-resource", never, {}, {}, never, never, false, never>;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=rubrics-resource.component.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rubrics-resource.component.d.ts","sourceRoot":"","sources":["../../src/Rubrics/rubrics-resource.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAE7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;;AAElE,0DAA0D;AAC1D,qBAMa,wBAAyB,SAAQ,qBAAsB,YAAW,MAAM;IACjE,QAAQ,IAAI,IAAI;IAKV,sBAAsB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAI5D,oBAAoB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;yCAVvE,wBAAwB;2CAAxB,wBAAwB;CAapC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { Component } from '@angular/core';
|
|
8
|
+
import { RegisterClass } from '@memberjunction/global';
|
|
9
|
+
import { BaseResourceComponent } from '@memberjunction/ng-shared';
|
|
10
|
+
import * as i0 from "@angular/core";
|
|
11
|
+
import * as i1 from "./rubrics-dashboard.component";
|
|
12
|
+
/** Thin nav shim. The catalog dashboard owns the page. */
|
|
13
|
+
let RubricsResourceComponent = class RubricsResourceComponent extends BaseResourceComponent {
|
|
14
|
+
ngOnInit() {
|
|
15
|
+
super.ngOnInit();
|
|
16
|
+
this.NotifyLoadComplete();
|
|
17
|
+
}
|
|
18
|
+
async GetResourceDisplayName(_data) {
|
|
19
|
+
return 'Catalog';
|
|
20
|
+
}
|
|
21
|
+
async GetResourceIconClass(_data) {
|
|
22
|
+
return 'fa-solid fa-scale-balanced';
|
|
23
|
+
}
|
|
24
|
+
static ɵfac = /*@__PURE__*/ (() => { let ɵRubricsResourceComponent_BaseFactory; return function RubricsResourceComponent_Factory(__ngFactoryType__) { return (ɵRubricsResourceComponent_BaseFactory || (ɵRubricsResourceComponent_BaseFactory = i0.ɵɵgetInheritedFactory(RubricsResourceComponent)))(__ngFactoryType__ || RubricsResourceComponent); }; })();
|
|
25
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: RubricsResourceComponent, selectors: [["mj-rubrics-resource"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 1, vars: 0, template: function RubricsResourceComponent_Template(rf, ctx) { if (rf & 1) {
|
|
26
|
+
i0.ɵɵelement(0, "mj-rubrics-dashboard");
|
|
27
|
+
} }, dependencies: [i1.RubricsDashboardComponent], encapsulation: 2 });
|
|
28
|
+
};
|
|
29
|
+
RubricsResourceComponent = __decorate([
|
|
30
|
+
RegisterClass(BaseResourceComponent, 'RubricsResource')
|
|
31
|
+
], RubricsResourceComponent);
|
|
32
|
+
export { RubricsResourceComponent };
|
|
33
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(RubricsResourceComponent, [{
|
|
34
|
+
type: Component,
|
|
35
|
+
args: [{
|
|
36
|
+
standalone: false,
|
|
37
|
+
selector: 'mj-rubrics-resource',
|
|
38
|
+
template: `<mj-rubrics-dashboard></mj-rubrics-dashboard>`,
|
|
39
|
+
}]
|
|
40
|
+
}], null, null); })();
|
|
41
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(RubricsResourceComponent, { className: "RubricsResourceComponent", filePath: "src/Rubrics/rubrics-resource.component.ts", lineNumber: 13 }); })();
|
|
42
|
+
//# sourceMappingURL=rubrics-resource.component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rubrics-resource.component.js","sourceRoot":"","sources":["../../src/Rubrics/rubrics-resource.component.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,SAAS,EAAU,MAAM,eAAe,CAAC;AAElD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;;;AAElE,0DAA0D;AAOnD,IAAM,wBAAwB,GAA9B,MAAM,wBAAyB,SAAQ,qBAAqB;IAC/C,QAAQ;QACpB,KAAK,CAAC,QAAQ,EAAE,CAAC;QACjB,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC9B,CAAC;IAEe,KAAK,CAAC,sBAAsB,CAAC,KAAmB;QAC5D,OAAO,SAAS,CAAC;IACrB,CAAC;IAEe,KAAK,CAAC,oBAAoB,CAAC,KAAmB;QAC1D,OAAO,4BAA4B,CAAC;IACxC,CAAC;6QAZQ,wBAAwB,yBAAxB,wBAAwB;6DAAxB,wBAAwB;YAFtB,uCAA6C;;;AAE/C,wBAAwB;IANpC,aAAa,CAAC,qBAAqB,EAAE,iBAAiB,CAAC;GAM3C,wBAAwB,CAapC;;iFAbY,wBAAwB;cALpC,SAAS;eAAC;gBACP,UAAU,EAAE,KAAK;gBACjB,QAAQ,EAAE,qBAAqB;gBAC/B,QAAQ,EAAE,+CAA+C;aAC5D;;kFACY,wBAAwB","sourcesContent":["import { Component, OnInit } from '@angular/core';\nimport { ResourceData } from '@memberjunction/core-entities';\nimport { RegisterClass } from '@memberjunction/global';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\n\n/** Thin nav shim. The catalog dashboard owns the page. */\n@RegisterClass(BaseResourceComponent, 'RubricsResource')\n@Component({\n standalone: false,\n selector: 'mj-rubrics-resource',\n template: `<mj-rubrics-dashboard></mj-rubrics-dashboard>`,\n})\nexport class RubricsResourceComponent extends BaseResourceComponent implements OnInit {\n public override ngOnInit(): void {\n super.ngOnInit();\n this.NotifyLoadComplete();\n }\n\n public override async GetResourceDisplayName(_data: ResourceData): Promise<string> {\n return 'Catalog';\n }\n\n public override async GetResourceIconClass(_data: ResourceData): Promise<string> {\n return 'fa-solid fa-scale-balanced';\n }\n}\n"]}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { AfterViewInit } from '@angular/core';
|
|
2
|
+
import { ColDef, GridOptions, RowClickedEvent } from 'ag-grid-community';
|
|
3
|
+
import { BaseDashboard } from '@memberjunction/ng-shared';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export interface ScaleCatalogRow {
|
|
6
|
+
Id: string;
|
|
7
|
+
Name: string;
|
|
8
|
+
Type: string;
|
|
9
|
+
Frozen: boolean;
|
|
10
|
+
}
|
|
11
|
+
/** Scales list. A scale is frozen when a published version uses it. */
|
|
12
|
+
export declare class RubricScalesDashboardComponent extends BaseDashboard implements AfterViewInit {
|
|
13
|
+
Loading: boolean;
|
|
14
|
+
LoadError: string;
|
|
15
|
+
Search: string;
|
|
16
|
+
Rows: ScaleCatalogRow[];
|
|
17
|
+
readonly Theme: import("ag-grid-community").Theme;
|
|
18
|
+
readonly GridOptions: GridOptions<ScaleCatalogRow>;
|
|
19
|
+
readonly ColumnDefs: ColDef<ScaleCatalogRow>[];
|
|
20
|
+
private readonly changeDetector;
|
|
21
|
+
protected initDashboard(): void;
|
|
22
|
+
GetResourceDisplayName(): Promise<string>;
|
|
23
|
+
protected loadData(): Promise<void>;
|
|
24
|
+
ngAfterViewInit(): void;
|
|
25
|
+
get Visible(): ScaleCatalogRow[];
|
|
26
|
+
OnSearch(value: string): void;
|
|
27
|
+
Open(id: string): void;
|
|
28
|
+
OnRow(event: RowClickedEvent<ScaleCatalogRow>): void;
|
|
29
|
+
NewScale(): void;
|
|
30
|
+
private publishAgent;
|
|
31
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<RubricScalesDashboardComponent, never>;
|
|
32
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<RubricScalesDashboardComponent, "mj-rubric-scales-dashboard", never, {}, {}, never, never, false, never>;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=scales-dashboard.component.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scales-dashboard.component.d.ts","sourceRoot":"","sources":["../../src/Rubrics/scales-dashboard.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyD,aAAa,EAAU,MAAM,eAAe,CAAC;AAC7G,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGzE,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;;AAK1D,MAAM,WAAW,eAAe;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;CACnB;AAED,uEAAuE;AACvE,qBAQa,8BAA+B,SAAQ,aAAc,YAAW,aAAa;IAC/E,OAAO,UAAQ;IACf,SAAS,SAAM;IACf,MAAM,SAAM;IACZ,IAAI,EAAE,eAAe,EAAE,CAAM;IACpC,SAAgB,KAAK,oCAAsB;IAC3C,SAAgB,WAAW,EAAE,WAAW,CAAC,eAAe,CAAC,CAA2E;IACpI,SAAgB,UAAU,EAAE,MAAM,CAAC,eAAe,CAAC,EAAE,CAInD;IACF,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA6B;IAE5D,SAAS,CAAC,aAAa,IAAI,IAAI;IAET,sBAAsB,IAAI,OAAO,CAAC,MAAM,CAAC;cAI/C,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAmClC,eAAe,IAAI,IAAI;IAI9B,IAAW,OAAO,IAAI,eAAe,EAAE,CAItC;IAEM,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAM7B,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAItB,KAAK,CAAC,KAAK,EAAE,eAAe,CAAC,eAAe,CAAC,GAAG,IAAI;IAIpD,QAAQ,IAAI,IAAI;IAIvB,OAAO,CAAC,YAAY;yCAnFX,8BAA8B;2CAA9B,8BAA8B;CA4G1C"}
|