@memberjunction/ng-dashboards 2.120.0 → 2.122.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/agents/agent-configuration.component.d.ts +23 -11
- package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
- package/dist/AI/components/agents/agent-configuration.component.js +122 -95
- package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
- package/dist/AI/components/agents/agent-editor.component.js +88 -90
- package/dist/AI/components/agents/agent-editor.component.js.map +1 -1
- package/dist/AI/components/agents/agent-filter-panel.component.js +2 -2
- package/dist/AI/components/execution-monitoring.component.d.ts +23 -10
- package/dist/AI/components/execution-monitoring.component.d.ts.map +1 -1
- package/dist/AI/components/execution-monitoring.component.js +143 -124
- package/dist/AI/components/execution-monitoring.component.js.map +1 -1
- package/dist/AI/components/models/model-management-v2.component.d.ts +17 -13
- package/dist/AI/components/models/model-management-v2.component.d.ts.map +1 -1
- package/dist/AI/components/models/model-management-v2.component.js +248 -266
- package/dist/AI/components/models/model-management-v2.component.js.map +1 -1
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js +76 -78
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js.map +1 -1
- package/dist/AI/components/prompts/prompt-filter-panel.component.js +2 -2
- package/dist/AI/components/prompts/prompt-management-v2.component.d.ts +17 -15
- package/dist/AI/components/prompts/prompt-management-v2.component.d.ts.map +1 -1
- package/dist/AI/components/prompts/prompt-management-v2.component.js +372 -397
- package/dist/AI/components/prompts/prompt-management-v2.component.js.map +1 -1
- package/dist/AI/components/prompts/prompt-version-control.component.js +100 -102
- package/dist/AI/components/prompts/prompt-version-control.component.js.map +1 -1
- package/dist/AI/components/system/system-config-filter-panel.component.js +2 -2
- package/dist/AI/components/system/system-configuration.component.d.ts +17 -10
- package/dist/AI/components/system/system-configuration.component.d.ts.map +1 -1
- package/dist/AI/components/system/system-configuration.component.js +82 -61
- package/dist/AI/components/system/system-configuration.component.js.map +1 -1
- package/dist/AI/components/widgets/kpi-card.component.d.ts.map +1 -1
- package/dist/AI/components/widgets/kpi-card.component.js +11 -7
- package/dist/AI/components/widgets/kpi-card.component.js.map +1 -1
- package/dist/AI/index.d.ts +4 -0
- package/dist/AI/index.d.ts.map +1 -1
- package/dist/AI/index.js +6 -1
- package/dist/AI/index.js.map +1 -1
- package/dist/Actions/components/actions-list-view.component.js +9 -9
- package/dist/Actions/components/actions-list-view.component.js.map +1 -1
- package/dist/Actions/components/actions-overview.component.d.ts +16 -13
- package/dist/Actions/components/actions-overview.component.d.ts.map +1 -1
- package/dist/Actions/components/actions-overview.component.js +62 -48
- package/dist/Actions/components/actions-overview.component.js.map +1 -1
- package/dist/Actions/components/categories-list-view.component.js +9 -9
- package/dist/Actions/components/categories-list-view.component.js.map +1 -1
- package/dist/Actions/components/code-management.component.d.ts +17 -7
- package/dist/Actions/components/code-management.component.d.ts.map +1 -1
- package/dist/Actions/components/code-management.component.js +45 -12
- package/dist/Actions/components/code-management.component.js.map +1 -1
- package/dist/Actions/components/entity-integration.component.d.ts +17 -7
- package/dist/Actions/components/entity-integration.component.d.ts.map +1 -1
- package/dist/Actions/components/entity-integration.component.js +45 -12
- package/dist/Actions/components/entity-integration.component.js.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.d.ts +16 -10
- package/dist/Actions/components/execution-monitoring.component.d.ts.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.js +56 -30
- package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
- package/dist/Actions/components/scheduled-actions.component.d.ts +17 -7
- package/dist/Actions/components/scheduled-actions.component.d.ts.map +1 -1
- package/dist/Actions/components/scheduled-actions.component.js +45 -12
- package/dist/Actions/components/scheduled-actions.component.js.map +1 -1
- package/dist/Actions/components/security-permissions.component.d.ts +17 -7
- package/dist/Actions/components/security-permissions.component.d.ts.map +1 -1
- package/dist/Actions/components/security-permissions.component.js +45 -12
- package/dist/Actions/components/security-permissions.component.js.map +1 -1
- package/dist/Actions/index.d.ts +6 -1
- package/dist/Actions/index.d.ts.map +1 -1
- package/dist/Actions/index.js +9 -1
- package/dist/Actions/index.js.map +1 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.d.ts +1 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.js +8 -8
- package/dist/ComponentStudio/component-studio-dashboard.component.js.map +1 -1
- package/dist/ComponentStudio/components/artifact-load-dialog.component.js +52 -57
- package/dist/ComponentStudio/components/artifact-load-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.js +8 -9
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.js.map +1 -1
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts +107 -0
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts.map +1 -0
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js +553 -0
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js.map +1 -0
- package/dist/DataExplorer/components/view-config-panel/view-config-panel.component.d.ts +179 -0
- package/dist/DataExplorer/components/view-config-panel/view-config-panel.component.d.ts.map +1 -0
- package/dist/DataExplorer/components/view-config-panel/view-config-panel.component.js +814 -0
- package/dist/DataExplorer/components/view-config-panel/view-config-panel.component.js.map +1 -0
- package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts +151 -0
- package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts.map +1 -0
- package/dist/DataExplorer/components/view-selector/view-selector.component.js +480 -0
- package/dist/DataExplorer/components/view-selector/view-selector.component.js.map +1 -0
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +439 -0
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -0
- package/dist/DataExplorer/data-explorer-dashboard.component.js +2129 -0
- package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -0
- package/dist/DataExplorer/index.d.ts +5 -0
- package/dist/DataExplorer/index.d.ts.map +1 -0
- package/dist/DataExplorer/index.js +10 -0
- package/dist/DataExplorer/index.js.map +1 -0
- package/dist/DataExplorer/models/explorer-state.interface.d.ts +183 -0
- package/dist/DataExplorer/models/explorer-state.interface.d.ts.map +1 -0
- package/dist/DataExplorer/models/explorer-state.interface.js +31 -0
- package/dist/DataExplorer/models/explorer-state.interface.js.map +1 -0
- package/dist/DataExplorer/services/explorer-state.service.d.ts +232 -0
- package/dist/DataExplorer/services/explorer-state.service.d.ts.map +1 -0
- package/dist/DataExplorer/services/explorer-state.service.js +912 -0
- package/dist/DataExplorer/services/explorer-state.service.js.map +1 -0
- package/dist/EntityAdmin/components/entity-details.component.d.ts.map +1 -1
- package/dist/EntityAdmin/components/entity-details.component.js +11 -13
- package/dist/EntityAdmin/components/entity-details.component.js.map +1 -1
- package/dist/EntityAdmin/components/entity-filter-panel.component.js +2 -2
- package/dist/EntityAdmin/components/erd-composite.component.js +2 -2
- package/dist/EntityAdmin/components/erd-diagram.component.js +2 -2
- package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts +1 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts.map +1 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.js +14 -15
- package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
- package/dist/Home/home-dashboard.component.d.ts +122 -0
- package/dist/Home/home-dashboard.component.d.ts.map +1 -0
- package/dist/Home/home-dashboard.component.js +698 -0
- package/dist/Home/home-dashboard.component.js.map +1 -0
- package/dist/Scheduling/components/index.d.ts +11 -0
- package/dist/Scheduling/components/index.d.ts.map +1 -0
- package/dist/Scheduling/components/index.js +13 -0
- package/dist/Scheduling/components/index.js.map +1 -0
- package/dist/Scheduling/components/scheduling-health-resource.component.d.ts +20 -0
- package/dist/Scheduling/components/scheduling-health-resource.component.d.ts.map +1 -0
- package/dist/Scheduling/components/scheduling-health-resource.component.js +55 -0
- package/dist/Scheduling/components/scheduling-health-resource.component.js.map +1 -0
- package/dist/Scheduling/components/scheduling-health.component.js +7 -8
- package/dist/Scheduling/components/scheduling-health.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-history-resource.component.d.ts +20 -0
- package/dist/Scheduling/components/scheduling-history-resource.component.d.ts.map +1 -0
- package/dist/Scheduling/components/scheduling-history-resource.component.js +55 -0
- package/dist/Scheduling/components/scheduling-history-resource.component.js.map +1 -0
- package/dist/Scheduling/components/scheduling-history.component.js +7 -8
- package/dist/Scheduling/components/scheduling-history.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts +20 -0
- package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts.map +1 -0
- package/dist/Scheduling/components/scheduling-jobs-resource.component.js +55 -0
- package/dist/Scheduling/components/scheduling-jobs-resource.component.js.map +1 -0
- package/dist/Scheduling/components/scheduling-jobs.component.js +7 -8
- package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-monitor-resource.component.d.ts +20 -0
- package/dist/Scheduling/components/scheduling-monitor-resource.component.d.ts.map +1 -0
- package/dist/Scheduling/components/scheduling-monitor-resource.component.js +55 -0
- package/dist/Scheduling/components/scheduling-monitor-resource.component.js.map +1 -0
- package/dist/Scheduling/components/scheduling-monitoring.component.js +7 -8
- package/dist/Scheduling/components/scheduling-monitoring.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-types-resource.component.d.ts +20 -0
- package/dist/Scheduling/components/scheduling-types-resource.component.d.ts.map +1 -0
- package/dist/Scheduling/components/scheduling-types-resource.component.js +55 -0
- package/dist/Scheduling/components/scheduling-types-resource.component.js.map +1 -0
- package/dist/Scheduling/components/scheduling-types.component.js +7 -8
- package/dist/Scheduling/components/scheduling-types.component.js.map +1 -1
- package/dist/Scheduling/scheduling-dashboard.component.d.ts +1 -1
- package/dist/Scheduling/scheduling-dashboard.component.js +3 -3
- package/dist/Testing/components/index.d.ts +11 -0
- package/dist/Testing/components/index.d.ts.map +1 -0
- package/dist/Testing/components/index.js +13 -0
- package/dist/Testing/components/index.js.map +1 -0
- package/dist/Testing/components/testing-analytics-resource.component.d.ts +20 -0
- package/dist/Testing/components/testing-analytics-resource.component.d.ts.map +1 -0
- package/dist/Testing/components/testing-analytics-resource.component.js +55 -0
- package/dist/Testing/components/testing-analytics-resource.component.js.map +1 -0
- package/dist/Testing/components/testing-execution-resource.component.d.ts +20 -0
- package/dist/Testing/components/testing-execution-resource.component.d.ts.map +1 -0
- package/dist/Testing/components/testing-execution-resource.component.js +55 -0
- package/dist/Testing/components/testing-execution-resource.component.js.map +1 -0
- package/dist/Testing/components/testing-execution.component.js +3 -3
- package/dist/Testing/components/testing-execution.component.js.map +1 -1
- package/dist/Testing/components/testing-feedback-resource.component.d.ts +20 -0
- package/dist/Testing/components/testing-feedback-resource.component.d.ts.map +1 -0
- package/dist/Testing/components/testing-feedback-resource.component.js +55 -0
- package/dist/Testing/components/testing-feedback-resource.component.js.map +1 -0
- package/dist/Testing/components/testing-overview-resource.component.d.ts +20 -0
- package/dist/Testing/components/testing-overview-resource.component.d.ts.map +1 -0
- package/dist/Testing/components/testing-overview-resource.component.js +55 -0
- package/dist/Testing/components/testing-overview-resource.component.js.map +1 -0
- package/dist/Testing/components/testing-version-resource.component.d.ts +20 -0
- package/dist/Testing/components/testing-version-resource.component.d.ts.map +1 -0
- package/dist/Testing/components/testing-version-resource.component.js +55 -0
- package/dist/Testing/components/testing-version-resource.component.js.map +1 -0
- package/dist/Testing/testing-dashboard.component.d.ts +1 -1
- package/dist/Testing/testing-dashboard.component.js +23 -25
- package/dist/Testing/testing-dashboard.component.js.map +1 -1
- package/dist/module.d.ts +83 -66
- package/dist/module.d.ts.map +1 -1
- package/dist/module.js +137 -19
- package/dist/module.js.map +1 -1
- package/dist/public-api.d.ts +6 -4
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +41 -13
- package/dist/public-api.js.map +1 -1
- package/package.json +17 -14
- package/dist/AI/ai-dashboard.component.d.ts +0 -62
- package/dist/AI/ai-dashboard.component.d.ts.map +0 -1
- package/dist/AI/ai-dashboard.component.js +0 -338
- package/dist/AI/ai-dashboard.component.js.map +0 -1
- package/dist/Actions/actions-management-dashboard.component.d.ts +0 -52
- package/dist/Actions/actions-management-dashboard.component.d.ts.map +0 -1
- package/dist/Actions/actions-management-dashboard.component.js +0 -308
- package/dist/Actions/actions-management-dashboard.component.js.map +0 -1
- package/dist/generic/base-dashboard.d.ts +0 -65
- package/dist/generic/base-dashboard.d.ts.map +0 -1
- package/dist/generic/base-dashboard.js +0 -74
- package/dist/generic/base-dashboard.js.map +0 -1
|
@@ -0,0 +1,814 @@
|
|
|
1
|
+
import { Component, Input, Output, EventEmitter, HostListener } from '@angular/core';
|
|
2
|
+
import { Metadata } from '@memberjunction/core';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/forms";
|
|
5
|
+
const _forTrack0 = ($index, $item) => $item.ID;
|
|
6
|
+
const _forTrack1 = ($index, $item) => $item.fieldId;
|
|
7
|
+
function ViewConfigPanelComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
8
|
+
const _r1 = i0.ɵɵgetCurrentView();
|
|
9
|
+
i0.ɵɵelementStart(0, "div", 19);
|
|
10
|
+
i0.ɵɵlistener("click", function ViewConfigPanelComponent_Conditional_0_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onClose()); });
|
|
11
|
+
i0.ɵɵelementEnd();
|
|
12
|
+
} }
|
|
13
|
+
function ViewConfigPanelComponent_Conditional_23_For_11_Template(rf, ctx) { if (rf & 1) {
|
|
14
|
+
i0.ɵɵelementStart(0, "option", 25);
|
|
15
|
+
i0.ɵɵtext(1);
|
|
16
|
+
i0.ɵɵelementEnd();
|
|
17
|
+
} if (rf & 2) {
|
|
18
|
+
const field_r4 = ctx.$implicit;
|
|
19
|
+
i0.ɵɵproperty("value", field_r4.Name);
|
|
20
|
+
i0.ɵɵadvance();
|
|
21
|
+
i0.ɵɵtextInterpolate(field_r4.DisplayNameOrName);
|
|
22
|
+
} }
|
|
23
|
+
function ViewConfigPanelComponent_Conditional_23_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
24
|
+
const _r5 = i0.ɵɵgetCurrentView();
|
|
25
|
+
i0.ɵɵelementStart(0, "div", 26)(1, "button", 36);
|
|
26
|
+
i0.ɵɵlistener("click", function ViewConfigPanelComponent_Conditional_23_Conditional_12_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.sortDirection = "asc"); });
|
|
27
|
+
i0.ɵɵelement(2, "i", 37);
|
|
28
|
+
i0.ɵɵelementEnd();
|
|
29
|
+
i0.ɵɵelementStart(3, "button", 38);
|
|
30
|
+
i0.ɵɵlistener("click", function ViewConfigPanelComponent_Conditional_23_Conditional_12_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.sortDirection = "desc"); });
|
|
31
|
+
i0.ɵɵelement(4, "i", 39);
|
|
32
|
+
i0.ɵɵelementEnd()();
|
|
33
|
+
} if (rf & 2) {
|
|
34
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
35
|
+
i0.ɵɵadvance();
|
|
36
|
+
i0.ɵɵclassProp("active", ctx_r1.sortDirection === "asc");
|
|
37
|
+
i0.ɵɵadvance(2);
|
|
38
|
+
i0.ɵɵclassProp("active", ctx_r1.sortDirection === "desc");
|
|
39
|
+
} }
|
|
40
|
+
function ViewConfigPanelComponent_Conditional_23_For_22_Template(rf, ctx) { if (rf & 1) {
|
|
41
|
+
const _r6 = i0.ɵɵgetCurrentView();
|
|
42
|
+
i0.ɵɵelementStart(0, "div", 40);
|
|
43
|
+
i0.ɵɵlistener("dragstart", function ViewConfigPanelComponent_Conditional_23_For_22_Template_div_dragstart_0_listener($event) { const column_r7 = i0.ɵɵrestoreView(_r6).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onDragStart($event, column_r7)); })("dragover", function ViewConfigPanelComponent_Conditional_23_For_22_Template_div_dragover_0_listener($event) { const column_r7 = i0.ɵɵrestoreView(_r6).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onDragOver($event, column_r7)); })("drop", function ViewConfigPanelComponent_Conditional_23_For_22_Template_div_drop_0_listener($event) { const column_r7 = i0.ɵɵrestoreView(_r6).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onDrop($event, column_r7)); })("dragend", function ViewConfigPanelComponent_Conditional_23_For_22_Template_div_dragend_0_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onDragEnd()); });
|
|
44
|
+
i0.ɵɵelementStart(1, "div", 41);
|
|
45
|
+
i0.ɵɵelement(2, "i", 42);
|
|
46
|
+
i0.ɵɵelementEnd();
|
|
47
|
+
i0.ɵɵelementStart(3, "span", 43);
|
|
48
|
+
i0.ɵɵtext(4);
|
|
49
|
+
i0.ɵɵelementEnd();
|
|
50
|
+
i0.ɵɵelementStart(5, "div", 44)(6, "button", 45);
|
|
51
|
+
i0.ɵɵlistener("click", function ViewConfigPanelComponent_Conditional_23_For_22_Template_button_click_6_listener() { const column_r7 = i0.ɵɵrestoreView(_r6).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.moveColumnUp(column_r7)); });
|
|
52
|
+
i0.ɵɵelement(7, "i", 46);
|
|
53
|
+
i0.ɵɵelementEnd();
|
|
54
|
+
i0.ɵɵelementStart(8, "button", 47);
|
|
55
|
+
i0.ɵɵlistener("click", function ViewConfigPanelComponent_Conditional_23_For_22_Template_button_click_8_listener() { const column_r7 = i0.ɵɵrestoreView(_r6).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.moveColumnDown(column_r7)); });
|
|
56
|
+
i0.ɵɵelement(9, "i", 48);
|
|
57
|
+
i0.ɵɵelementEnd();
|
|
58
|
+
i0.ɵɵelementStart(10, "button", 49);
|
|
59
|
+
i0.ɵɵlistener("click", function ViewConfigPanelComponent_Conditional_23_For_22_Template_button_click_10_listener() { const column_r7 = i0.ɵɵrestoreView(_r6).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.toggleColumnVisibility(column_r7)); });
|
|
60
|
+
i0.ɵɵelement(11, "i", 32);
|
|
61
|
+
i0.ɵɵelementEnd()()();
|
|
62
|
+
} if (rf & 2) {
|
|
63
|
+
const column_r7 = ctx.$implicit;
|
|
64
|
+
const ɵ$index_92_r8 = ctx.$index;
|
|
65
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
66
|
+
i0.ɵɵadvance(4);
|
|
67
|
+
i0.ɵɵtextInterpolate(column_r7.displayName);
|
|
68
|
+
i0.ɵɵadvance(2);
|
|
69
|
+
i0.ɵɵproperty("disabled", ɵ$index_92_r8 === 0);
|
|
70
|
+
i0.ɵɵadvance(2);
|
|
71
|
+
i0.ɵɵproperty("disabled", ɵ$index_92_r8 === ctx_r1.visibleColumns.length - 1);
|
|
72
|
+
} }
|
|
73
|
+
function ViewConfigPanelComponent_Conditional_23_Conditional_23_Template(rf, ctx) { if (rf & 1) {
|
|
74
|
+
i0.ɵɵelementStart(0, "div", 31);
|
|
75
|
+
i0.ɵɵelement(1, "i", 50);
|
|
76
|
+
i0.ɵɵelementStart(2, "span");
|
|
77
|
+
i0.ɵɵtext(3, "No columns visible. Add columns from below.");
|
|
78
|
+
i0.ɵɵelementEnd()();
|
|
79
|
+
} }
|
|
80
|
+
function ViewConfigPanelComponent_Conditional_23_Conditional_31_Template(rf, ctx) { if (rf & 1) {
|
|
81
|
+
const _r9 = i0.ɵɵgetCurrentView();
|
|
82
|
+
i0.ɵɵelementStart(0, "div", 33);
|
|
83
|
+
i0.ɵɵelement(1, "i", 51);
|
|
84
|
+
i0.ɵɵelementStart(2, "input", 52);
|
|
85
|
+
i0.ɵɵtwoWayListener("ngModelChange", function ViewConfigPanelComponent_Conditional_23_Conditional_31_Template_input_ngModelChange_2_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.columnSearchText, $event) || (ctx_r1.columnSearchText = $event); return i0.ɵɵresetView($event); });
|
|
86
|
+
i0.ɵɵelementEnd()();
|
|
87
|
+
} if (rf & 2) {
|
|
88
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
89
|
+
i0.ɵɵadvance(2);
|
|
90
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.columnSearchText);
|
|
91
|
+
} }
|
|
92
|
+
function ViewConfigPanelComponent_Conditional_23_For_34_Template(rf, ctx) { if (rf & 1) {
|
|
93
|
+
const _r10 = i0.ɵɵgetCurrentView();
|
|
94
|
+
i0.ɵɵelementStart(0, "div", 35)(1, "span", 43);
|
|
95
|
+
i0.ɵɵtext(2);
|
|
96
|
+
i0.ɵɵelementEnd();
|
|
97
|
+
i0.ɵɵelementStart(3, "button", 53);
|
|
98
|
+
i0.ɵɵlistener("click", function ViewConfigPanelComponent_Conditional_23_For_34_Template_button_click_3_listener() { const column_r11 = i0.ɵɵrestoreView(_r10).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.toggleColumnVisibility(column_r11)); });
|
|
99
|
+
i0.ɵɵelement(4, "i", 54);
|
|
100
|
+
i0.ɵɵelementEnd()();
|
|
101
|
+
} if (rf & 2) {
|
|
102
|
+
const column_r11 = ctx.$implicit;
|
|
103
|
+
i0.ɵɵadvance(2);
|
|
104
|
+
i0.ɵɵtextInterpolate(column_r11.displayName);
|
|
105
|
+
} }
|
|
106
|
+
function ViewConfigPanelComponent_Conditional_23_Conditional_35_Template(rf, ctx) { if (rf & 1) {
|
|
107
|
+
i0.ɵɵelementStart(0, "div", 31);
|
|
108
|
+
i0.ɵɵelement(1, "i", 55);
|
|
109
|
+
i0.ɵɵelementStart(2, "span");
|
|
110
|
+
i0.ɵɵtext(3, "All columns are visible");
|
|
111
|
+
i0.ɵɵelementEnd()();
|
|
112
|
+
} }
|
|
113
|
+
function ViewConfigPanelComponent_Conditional_23_Template(rf, ctx) { if (rf & 1) {
|
|
114
|
+
const _r3 = i0.ɵɵgetCurrentView();
|
|
115
|
+
i0.ɵɵelementStart(0, "div", 13)(1, "div", 20)(2, "div", 21);
|
|
116
|
+
i0.ɵɵelement(3, "i", 22);
|
|
117
|
+
i0.ɵɵelementStart(4, "span");
|
|
118
|
+
i0.ɵɵtext(5, "Default Sort");
|
|
119
|
+
i0.ɵɵelementEnd()();
|
|
120
|
+
i0.ɵɵelementStart(6, "div", 23)(7, "select", 24);
|
|
121
|
+
i0.ɵɵtwoWayListener("ngModelChange", function ViewConfigPanelComponent_Conditional_23_Template_select_ngModelChange_7_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.sortField, $event) || (ctx_r1.sortField = $event); return i0.ɵɵresetView($event); });
|
|
122
|
+
i0.ɵɵelementStart(8, "option", 25);
|
|
123
|
+
i0.ɵɵtext(9, "No default sort");
|
|
124
|
+
i0.ɵɵelementEnd();
|
|
125
|
+
i0.ɵɵrepeaterCreate(10, ViewConfigPanelComponent_Conditional_23_For_11_Template, 2, 2, "option", 25, _forTrack0);
|
|
126
|
+
i0.ɵɵelementEnd();
|
|
127
|
+
i0.ɵɵtemplate(12, ViewConfigPanelComponent_Conditional_23_Conditional_12_Template, 5, 4, "div", 26);
|
|
128
|
+
i0.ɵɵelementEnd()();
|
|
129
|
+
i0.ɵɵelementStart(13, "div", 20)(14, "div", 21);
|
|
130
|
+
i0.ɵɵelement(15, "i", 27);
|
|
131
|
+
i0.ɵɵelementStart(16, "span");
|
|
132
|
+
i0.ɵɵtext(17, "Visible Columns");
|
|
133
|
+
i0.ɵɵelementEnd();
|
|
134
|
+
i0.ɵɵelementStart(18, "span", 28);
|
|
135
|
+
i0.ɵɵtext(19);
|
|
136
|
+
i0.ɵɵelementEnd()();
|
|
137
|
+
i0.ɵɵelementStart(20, "div", 29);
|
|
138
|
+
i0.ɵɵrepeaterCreate(21, ViewConfigPanelComponent_Conditional_23_For_22_Template, 12, 3, "div", 30, _forTrack1);
|
|
139
|
+
i0.ɵɵtemplate(23, ViewConfigPanelComponent_Conditional_23_Conditional_23_Template, 4, 0, "div", 31);
|
|
140
|
+
i0.ɵɵelementEnd()();
|
|
141
|
+
i0.ɵɵelementStart(24, "div", 20)(25, "div", 21);
|
|
142
|
+
i0.ɵɵelement(26, "i", 32);
|
|
143
|
+
i0.ɵɵelementStart(27, "span");
|
|
144
|
+
i0.ɵɵtext(28, "Hidden Columns");
|
|
145
|
+
i0.ɵɵelementEnd();
|
|
146
|
+
i0.ɵɵelementStart(29, "span", 28);
|
|
147
|
+
i0.ɵɵtext(30);
|
|
148
|
+
i0.ɵɵelementEnd()();
|
|
149
|
+
i0.ɵɵtemplate(31, ViewConfigPanelComponent_Conditional_23_Conditional_31_Template, 3, 1, "div", 33);
|
|
150
|
+
i0.ɵɵelementStart(32, "div", 34);
|
|
151
|
+
i0.ɵɵrepeaterCreate(33, ViewConfigPanelComponent_Conditional_23_For_34_Template, 5, 1, "div", 35, _forTrack1);
|
|
152
|
+
i0.ɵɵtemplate(35, ViewConfigPanelComponent_Conditional_23_Conditional_35_Template, 4, 0, "div", 31);
|
|
153
|
+
i0.ɵɵelementEnd()()();
|
|
154
|
+
} if (rf & 2) {
|
|
155
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
156
|
+
i0.ɵɵadvance(7);
|
|
157
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.sortField);
|
|
158
|
+
i0.ɵɵadvance();
|
|
159
|
+
i0.ɵɵproperty("value", null);
|
|
160
|
+
i0.ɵɵadvance(2);
|
|
161
|
+
i0.ɵɵrepeater(ctx_r1.sortableFields);
|
|
162
|
+
i0.ɵɵadvance(2);
|
|
163
|
+
i0.ɵɵconditional(ctx_r1.sortField ? 12 : -1);
|
|
164
|
+
i0.ɵɵadvance(7);
|
|
165
|
+
i0.ɵɵtextInterpolate(ctx_r1.visibleColumns.length);
|
|
166
|
+
i0.ɵɵadvance(2);
|
|
167
|
+
i0.ɵɵrepeater(ctx_r1.visibleColumns);
|
|
168
|
+
i0.ɵɵadvance(2);
|
|
169
|
+
i0.ɵɵconditional(ctx_r1.visibleColumns.length === 0 ? 23 : -1);
|
|
170
|
+
i0.ɵɵadvance(7);
|
|
171
|
+
i0.ɵɵtextInterpolate(ctx_r1.hiddenColumns.length);
|
|
172
|
+
i0.ɵɵadvance();
|
|
173
|
+
i0.ɵɵconditional(ctx_r1.hiddenColumns.length > 5 ? 31 : -1);
|
|
174
|
+
i0.ɵɵadvance(2);
|
|
175
|
+
i0.ɵɵrepeater(ctx_r1.filteredHiddenColumns);
|
|
176
|
+
i0.ɵɵadvance(2);
|
|
177
|
+
i0.ɵɵconditional(ctx_r1.hiddenColumns.length === 0 ? 35 : -1);
|
|
178
|
+
} }
|
|
179
|
+
function ViewConfigPanelComponent_Conditional_24_Conditional_10_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
180
|
+
i0.ɵɵelementStart(0, "div", 65);
|
|
181
|
+
i0.ɵɵelement(1, "i", 50);
|
|
182
|
+
i0.ɵɵelementStart(2, "span");
|
|
183
|
+
i0.ɵɵtext(3);
|
|
184
|
+
i0.ɵɵelementEnd()();
|
|
185
|
+
} if (rf & 2) {
|
|
186
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
187
|
+
i0.ɵɵadvance(3);
|
|
188
|
+
i0.ɵɵtextInterpolate(ctx_r1.smartFilterExplanation);
|
|
189
|
+
} }
|
|
190
|
+
function ViewConfigPanelComponent_Conditional_24_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
191
|
+
const _r13 = i0.ɵɵgetCurrentView();
|
|
192
|
+
i0.ɵɵelementStart(0, "div", 62)(1, "label", 63);
|
|
193
|
+
i0.ɵɵtext(2, "Natural Language Filter");
|
|
194
|
+
i0.ɵɵelementEnd();
|
|
195
|
+
i0.ɵɵelementStart(3, "textarea", 64);
|
|
196
|
+
i0.ɵɵtwoWayListener("ngModelChange", function ViewConfigPanelComponent_Conditional_24_Conditional_10_Template_textarea_ngModelChange_3_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.smartFilterPrompt, $event) || (ctx_r1.smartFilterPrompt = $event); return i0.ɵɵresetView($event); });
|
|
197
|
+
i0.ɵɵelementEnd()();
|
|
198
|
+
i0.ɵɵtemplate(4, ViewConfigPanelComponent_Conditional_24_Conditional_10_Conditional_4_Template, 4, 1, "div", 65);
|
|
199
|
+
i0.ɵɵelementStart(5, "div", 66);
|
|
200
|
+
i0.ɵɵelement(6, "i", 67);
|
|
201
|
+
i0.ɵɵelementStart(7, "span");
|
|
202
|
+
i0.ɵɵtext(8, "Tip: The AI will interpret your natural language and create the appropriate filter when you save the view.");
|
|
203
|
+
i0.ɵɵelementEnd()();
|
|
204
|
+
} if (rf & 2) {
|
|
205
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
206
|
+
i0.ɵɵadvance(3);
|
|
207
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.smartFilterPrompt);
|
|
208
|
+
i0.ɵɵproperty("disabled", !ctx_r1.canEdit);
|
|
209
|
+
i0.ɵɵadvance();
|
|
210
|
+
i0.ɵɵconditional(ctx_r1.smartFilterExplanation ? 4 : -1);
|
|
211
|
+
} }
|
|
212
|
+
function ViewConfigPanelComponent_Conditional_24_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
213
|
+
i0.ɵɵelementStart(0, "div", 60)(1, "p");
|
|
214
|
+
i0.ɵɵtext(2, "Enable Smart Filter to use natural language filtering. The AI will interpret your description and create the appropriate SQL filter.");
|
|
215
|
+
i0.ɵɵelementEnd()();
|
|
216
|
+
} }
|
|
217
|
+
function ViewConfigPanelComponent_Conditional_24_Template(rf, ctx) { if (rf & 1) {
|
|
218
|
+
const _r12 = i0.ɵɵgetCurrentView();
|
|
219
|
+
i0.ɵɵelementStart(0, "div", 13)(1, "div", 20)(2, "div", 21);
|
|
220
|
+
i0.ɵɵelement(3, "i", 56);
|
|
221
|
+
i0.ɵɵelementStart(4, "span");
|
|
222
|
+
i0.ɵɵtext(5, "Smart Filter");
|
|
223
|
+
i0.ɵɵelementEnd();
|
|
224
|
+
i0.ɵɵelementStart(6, "label", 57)(7, "input", 58);
|
|
225
|
+
i0.ɵɵtwoWayListener("ngModelChange", function ViewConfigPanelComponent_Conditional_24_Template_input_ngModelChange_7_listener($event) { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.smartFilterEnabled, $event) || (ctx_r1.smartFilterEnabled = $event); return i0.ɵɵresetView($event); });
|
|
226
|
+
i0.ɵɵelementEnd();
|
|
227
|
+
i0.ɵɵelementStart(8, "span", 59);
|
|
228
|
+
i0.ɵɵtext(9);
|
|
229
|
+
i0.ɵɵelementEnd()()();
|
|
230
|
+
i0.ɵɵtemplate(10, ViewConfigPanelComponent_Conditional_24_Conditional_10_Template, 9, 3)(11, ViewConfigPanelComponent_Conditional_24_Conditional_11_Template, 3, 0, "div", 60);
|
|
231
|
+
i0.ɵɵelementEnd();
|
|
232
|
+
i0.ɵɵelementStart(12, "div", 20)(13, "div", 21);
|
|
233
|
+
i0.ɵɵelement(14, "i", 10);
|
|
234
|
+
i0.ɵɵelementStart(15, "span");
|
|
235
|
+
i0.ɵɵtext(16, "Traditional Filters");
|
|
236
|
+
i0.ɵɵelementEnd()();
|
|
237
|
+
i0.ɵɵelementStart(17, "div", 61);
|
|
238
|
+
i0.ɵɵelement(18, "i", 4);
|
|
239
|
+
i0.ɵɵelementStart(19, "p");
|
|
240
|
+
i0.ɵɵtext(20, "Traditional filter editing is coming soon. For now, use Smart Filter above or the filter builder in the grid view.");
|
|
241
|
+
i0.ɵɵelementEnd()()()();
|
|
242
|
+
} if (rf & 2) {
|
|
243
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
244
|
+
i0.ɵɵadvance(7);
|
|
245
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.smartFilterEnabled);
|
|
246
|
+
i0.ɵɵproperty("disabled", !ctx_r1.canEdit);
|
|
247
|
+
i0.ɵɵadvance(2);
|
|
248
|
+
i0.ɵɵtextInterpolate(ctx_r1.smartFilterEnabled ? "Enabled" : "Disabled");
|
|
249
|
+
i0.ɵɵadvance();
|
|
250
|
+
i0.ɵɵconditional(ctx_r1.smartFilterEnabled ? 10 : 11);
|
|
251
|
+
} }
|
|
252
|
+
function ViewConfigPanelComponent_Conditional_25_Conditional_26_Template(rf, ctx) { if (rf & 1) {
|
|
253
|
+
const _r15 = i0.ɵɵgetCurrentView();
|
|
254
|
+
i0.ɵɵelementStart(0, "div", 75)(1, "div", 21);
|
|
255
|
+
i0.ɵɵelement(2, "i", 76);
|
|
256
|
+
i0.ɵɵelementStart(3, "span");
|
|
257
|
+
i0.ɵɵtext(4, "Danger Zone");
|
|
258
|
+
i0.ɵɵelementEnd()();
|
|
259
|
+
i0.ɵɵelementStart(5, "button", 77);
|
|
260
|
+
i0.ɵɵlistener("click", function ViewConfigPanelComponent_Conditional_25_Conditional_26_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onDelete()); });
|
|
261
|
+
i0.ɵɵelement(6, "i", 78);
|
|
262
|
+
i0.ɵɵelementStart(7, "span");
|
|
263
|
+
i0.ɵɵtext(8, "Delete View");
|
|
264
|
+
i0.ɵɵelementEnd()()();
|
|
265
|
+
} }
|
|
266
|
+
function ViewConfigPanelComponent_Conditional_25_Template(rf, ctx) { if (rf & 1) {
|
|
267
|
+
const _r14 = i0.ɵɵgetCurrentView();
|
|
268
|
+
i0.ɵɵelementStart(0, "div", 13)(1, "div", 20)(2, "div", 21);
|
|
269
|
+
i0.ɵɵelement(3, "i", 50);
|
|
270
|
+
i0.ɵɵelementStart(4, "span");
|
|
271
|
+
i0.ɵɵtext(5, "View Details");
|
|
272
|
+
i0.ɵɵelementEnd()();
|
|
273
|
+
i0.ɵɵelementStart(6, "div", 62)(7, "label", 68);
|
|
274
|
+
i0.ɵɵtext(8, "Name");
|
|
275
|
+
i0.ɵɵelementEnd();
|
|
276
|
+
i0.ɵɵelementStart(9, "input", 69);
|
|
277
|
+
i0.ɵɵtwoWayListener("ngModelChange", function ViewConfigPanelComponent_Conditional_25_Template_input_ngModelChange_9_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.viewName, $event) || (ctx_r1.viewName = $event); return i0.ɵɵresetView($event); });
|
|
278
|
+
i0.ɵɵelementEnd()();
|
|
279
|
+
i0.ɵɵelementStart(10, "div", 62)(11, "label", 70);
|
|
280
|
+
i0.ɵɵtext(12, "Description");
|
|
281
|
+
i0.ɵɵelementEnd();
|
|
282
|
+
i0.ɵɵelementStart(13, "textarea", 71);
|
|
283
|
+
i0.ɵɵtwoWayListener("ngModelChange", function ViewConfigPanelComponent_Conditional_25_Template_textarea_ngModelChange_13_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.viewDescription, $event) || (ctx_r1.viewDescription = $event); return i0.ɵɵresetView($event); });
|
|
284
|
+
i0.ɵɵelementEnd()()();
|
|
285
|
+
i0.ɵɵelementStart(14, "div", 20)(15, "div", 21);
|
|
286
|
+
i0.ɵɵelement(16, "i", 72);
|
|
287
|
+
i0.ɵɵelementStart(17, "span");
|
|
288
|
+
i0.ɵɵtext(18, "Sharing");
|
|
289
|
+
i0.ɵɵelementEnd()();
|
|
290
|
+
i0.ɵɵelementStart(19, "label", 73)(20, "input", 58);
|
|
291
|
+
i0.ɵɵtwoWayListener("ngModelChange", function ViewConfigPanelComponent_Conditional_25_Template_input_ngModelChange_20_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.isShared, $event) || (ctx_r1.isShared = $event); return i0.ɵɵresetView($event); });
|
|
292
|
+
i0.ɵɵelementEnd();
|
|
293
|
+
i0.ɵɵelementStart(21, "span", 74)(22, "strong");
|
|
294
|
+
i0.ɵɵtext(23, "Share with others");
|
|
295
|
+
i0.ɵɵelementEnd();
|
|
296
|
+
i0.ɵɵelementStart(24, "small");
|
|
297
|
+
i0.ɵɵtext(25, "Allow other users to use this view");
|
|
298
|
+
i0.ɵɵelementEnd()()()();
|
|
299
|
+
i0.ɵɵtemplate(26, ViewConfigPanelComponent_Conditional_25_Conditional_26_Template, 9, 0, "div", 75);
|
|
300
|
+
i0.ɵɵelementEnd();
|
|
301
|
+
} if (rf & 2) {
|
|
302
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
303
|
+
i0.ɵɵadvance(9);
|
|
304
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.viewName);
|
|
305
|
+
i0.ɵɵproperty("disabled", !ctx_r1.canEdit);
|
|
306
|
+
i0.ɵɵadvance(4);
|
|
307
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.viewDescription);
|
|
308
|
+
i0.ɵɵproperty("disabled", !ctx_r1.canEdit);
|
|
309
|
+
i0.ɵɵadvance(7);
|
|
310
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.isShared);
|
|
311
|
+
i0.ɵɵproperty("disabled", !ctx_r1.canEdit);
|
|
312
|
+
i0.ɵɵadvance(6);
|
|
313
|
+
i0.ɵɵconditional(ctx_r1.viewEntity && ctx_r1.canDelete ? 26 : -1);
|
|
314
|
+
} }
|
|
315
|
+
function ViewConfigPanelComponent_Conditional_30_Template(rf, ctx) { if (rf & 1) {
|
|
316
|
+
const _r16 = i0.ɵɵgetCurrentView();
|
|
317
|
+
i0.ɵɵelementStart(0, "button", 79);
|
|
318
|
+
i0.ɵɵlistener("click", function ViewConfigPanelComponent_Conditional_30_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r16); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onSaveAsNew()); });
|
|
319
|
+
i0.ɵɵelement(1, "i", 54);
|
|
320
|
+
i0.ɵɵtext(2, " Save As New ");
|
|
321
|
+
i0.ɵɵelementEnd();
|
|
322
|
+
} if (rf & 2) {
|
|
323
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
324
|
+
i0.ɵɵproperty("disabled", ctx_r1.isSaving);
|
|
325
|
+
} }
|
|
326
|
+
function ViewConfigPanelComponent_Conditional_31_Template(rf, ctx) { if (rf & 1) {
|
|
327
|
+
const _r17 = i0.ɵɵgetCurrentView();
|
|
328
|
+
i0.ɵɵelementStart(0, "button", 80);
|
|
329
|
+
i0.ɵɵlistener("click", function ViewConfigPanelComponent_Conditional_31_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onSave()); });
|
|
330
|
+
i0.ɵɵelement(1, "i", 81);
|
|
331
|
+
i0.ɵɵtext(2, " Save ");
|
|
332
|
+
i0.ɵɵelementEnd();
|
|
333
|
+
} if (rf & 2) {
|
|
334
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
335
|
+
i0.ɵɵproperty("disabled", ctx_r1.isSaving || !ctx_r1.viewName);
|
|
336
|
+
} }
|
|
337
|
+
function ViewConfigPanelComponent_Conditional_32_Template(rf, ctx) { if (rf & 1) {
|
|
338
|
+
const _r18 = i0.ɵɵgetCurrentView();
|
|
339
|
+
i0.ɵɵelementStart(0, "button", 80);
|
|
340
|
+
i0.ɵɵlistener("click", function ViewConfigPanelComponent_Conditional_32_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r18); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onSaveAsNew()); });
|
|
341
|
+
i0.ɵɵelement(1, "i", 81);
|
|
342
|
+
i0.ɵɵtext(2, " Create View ");
|
|
343
|
+
i0.ɵɵelementEnd();
|
|
344
|
+
} if (rf & 2) {
|
|
345
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
346
|
+
i0.ɵɵproperty("disabled", ctx_r1.isSaving || !ctx_r1.viewName);
|
|
347
|
+
} }
|
|
348
|
+
/**
|
|
349
|
+
* ViewConfigPanelComponent - Sliding panel for configuring view settings
|
|
350
|
+
*
|
|
351
|
+
* Features:
|
|
352
|
+
* - Column visibility and ordering
|
|
353
|
+
* - Sort configuration
|
|
354
|
+
* - View name and description editing
|
|
355
|
+
* - Share settings
|
|
356
|
+
* - Save / Save As New / Cancel actions
|
|
357
|
+
*/
|
|
358
|
+
export class ViewConfigPanelComponent {
|
|
359
|
+
cdr;
|
|
360
|
+
/**
|
|
361
|
+
* The entity being viewed
|
|
362
|
+
*/
|
|
363
|
+
entity = null;
|
|
364
|
+
/**
|
|
365
|
+
* The current view entity (null for default view)
|
|
366
|
+
*/
|
|
367
|
+
viewEntity = null;
|
|
368
|
+
/**
|
|
369
|
+
* Whether the panel is open
|
|
370
|
+
*/
|
|
371
|
+
isOpen = false;
|
|
372
|
+
/**
|
|
373
|
+
* Current grid state from the grid (includes live column widths/order from user interaction)
|
|
374
|
+
* This takes precedence over viewEntity.Columns for showing current state
|
|
375
|
+
*/
|
|
376
|
+
currentGridState = null;
|
|
377
|
+
/**
|
|
378
|
+
* Emitted when the panel should close
|
|
379
|
+
*/
|
|
380
|
+
close = new EventEmitter();
|
|
381
|
+
/**
|
|
382
|
+
* Emitted when the view should be saved
|
|
383
|
+
*/
|
|
384
|
+
save = new EventEmitter();
|
|
385
|
+
/**
|
|
386
|
+
* Emitted when the view should be deleted
|
|
387
|
+
*/
|
|
388
|
+
delete = new EventEmitter();
|
|
389
|
+
// Form state
|
|
390
|
+
viewName = '';
|
|
391
|
+
viewDescription = '';
|
|
392
|
+
isShared = false;
|
|
393
|
+
columns = [];
|
|
394
|
+
sortField = null;
|
|
395
|
+
sortDirection = 'asc';
|
|
396
|
+
// Smart Filter state
|
|
397
|
+
smartFilterEnabled = false;
|
|
398
|
+
smartFilterPrompt = '';
|
|
399
|
+
smartFilterExplanation = '';
|
|
400
|
+
// UI state
|
|
401
|
+
activeTab = 'columns';
|
|
402
|
+
isSaving = false;
|
|
403
|
+
columnSearchText = '';
|
|
404
|
+
// Drag state for column reordering
|
|
405
|
+
draggedColumn = null;
|
|
406
|
+
metadata = new Metadata();
|
|
407
|
+
constructor(cdr) {
|
|
408
|
+
this.cdr = cdr;
|
|
409
|
+
}
|
|
410
|
+
/**
|
|
411
|
+
* Handle keyboard shortcuts
|
|
412
|
+
* Escape: Close the panel
|
|
413
|
+
*/
|
|
414
|
+
handleEscape() {
|
|
415
|
+
if (this.isOpen) {
|
|
416
|
+
this.onClose();
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
ngOnInit() {
|
|
420
|
+
this.initializeFromEntity();
|
|
421
|
+
}
|
|
422
|
+
ngOnChanges(changes) {
|
|
423
|
+
if (changes['entity'] || changes['viewEntity'] || changes['currentGridState']) {
|
|
424
|
+
this.initializeFromEntity();
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
/**
|
|
428
|
+
* Initialize form state from entity and view
|
|
429
|
+
* Priority for column state: currentGridState > viewEntity.Columns > entity defaults
|
|
430
|
+
*/
|
|
431
|
+
initializeFromEntity() {
|
|
432
|
+
if (!this.entity) {
|
|
433
|
+
this.columns = [];
|
|
434
|
+
return;
|
|
435
|
+
}
|
|
436
|
+
// Initialize columns from entity fields
|
|
437
|
+
this.columns = this.entity.Fields
|
|
438
|
+
.filter(f => !f.Name.startsWith('__mj_'))
|
|
439
|
+
.map((field, index) => ({
|
|
440
|
+
fieldId: field.ID,
|
|
441
|
+
fieldName: field.Name,
|
|
442
|
+
displayName: field.DisplayNameOrName,
|
|
443
|
+
visible: field.DefaultInView,
|
|
444
|
+
width: field.DefaultColumnWidth || null,
|
|
445
|
+
orderIndex: index,
|
|
446
|
+
field
|
|
447
|
+
}));
|
|
448
|
+
// Priority 1: Use currentGridState if available (reflects live grid state including resizes)
|
|
449
|
+
if (this.currentGridState?.columnSettings && this.currentGridState.columnSettings.length > 0) {
|
|
450
|
+
this.applyGridStateToColumns(this.currentGridState.columnSettings);
|
|
451
|
+
// Also apply sort from currentGridState
|
|
452
|
+
if (this.currentGridState.sortSettings && this.currentGridState.sortSettings.length > 0) {
|
|
453
|
+
this.sortField = this.currentGridState.sortSettings[0].field;
|
|
454
|
+
this.sortDirection = this.currentGridState.sortSettings[0].dir;
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
// Priority 2: If we have a view, apply its column configuration
|
|
458
|
+
else if (this.viewEntity) {
|
|
459
|
+
const viewColumns = this.viewEntity.Columns;
|
|
460
|
+
if (viewColumns && viewColumns.length > 0) {
|
|
461
|
+
// Mark all columns as hidden initially
|
|
462
|
+
this.columns.forEach(c => c.visible = false);
|
|
463
|
+
// Apply view column settings
|
|
464
|
+
viewColumns.forEach((vc, idx) => {
|
|
465
|
+
const column = this.columns.find(c => c.fieldName.toLowerCase() === vc.Name?.toLowerCase());
|
|
466
|
+
if (column) {
|
|
467
|
+
column.visible = !vc.hidden;
|
|
468
|
+
column.width = vc.width || null;
|
|
469
|
+
column.orderIndex = vc.orderIndex ?? idx;
|
|
470
|
+
}
|
|
471
|
+
});
|
|
472
|
+
// Sort by orderIndex
|
|
473
|
+
this.columns.sort((a, b) => a.orderIndex - b.orderIndex);
|
|
474
|
+
}
|
|
475
|
+
// Apply view's sort configuration
|
|
476
|
+
const sortInfo = this.viewEntity.ViewSortInfo;
|
|
477
|
+
if (sortInfo && sortInfo.length > 0) {
|
|
478
|
+
this.sortField = sortInfo[0].field;
|
|
479
|
+
this.sortDirection = sortInfo[0].direction === 'Desc' ? 'desc' : 'asc';
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
// Apply view entity metadata (name, description, etc.) if available
|
|
483
|
+
if (this.viewEntity) {
|
|
484
|
+
this.viewName = this.viewEntity.Name;
|
|
485
|
+
this.viewDescription = this.viewEntity.Description || '';
|
|
486
|
+
this.isShared = this.viewEntity.IsShared;
|
|
487
|
+
// Apply view's smart filter configuration
|
|
488
|
+
this.smartFilterEnabled = this.viewEntity.SmartFilterEnabled || false;
|
|
489
|
+
this.smartFilterPrompt = this.viewEntity.SmartFilterPrompt || '';
|
|
490
|
+
this.smartFilterExplanation = this.viewEntity.SmartFilterExplanation || '';
|
|
491
|
+
}
|
|
492
|
+
else {
|
|
493
|
+
// Default view - use entity defaults
|
|
494
|
+
this.viewName = '';
|
|
495
|
+
this.viewDescription = '';
|
|
496
|
+
this.isShared = false;
|
|
497
|
+
if (!this.currentGridState?.sortSettings?.length) {
|
|
498
|
+
this.sortField = null;
|
|
499
|
+
this.sortDirection = 'asc';
|
|
500
|
+
}
|
|
501
|
+
this.smartFilterEnabled = false;
|
|
502
|
+
this.smartFilterPrompt = '';
|
|
503
|
+
this.smartFilterExplanation = '';
|
|
504
|
+
}
|
|
505
|
+
this.cdr.detectChanges();
|
|
506
|
+
}
|
|
507
|
+
/**
|
|
508
|
+
* Apply grid state column settings to the columns array
|
|
509
|
+
*/
|
|
510
|
+
applyGridStateToColumns(gridColumns) {
|
|
511
|
+
// Mark all columns as hidden initially
|
|
512
|
+
this.columns.forEach(c => c.visible = false);
|
|
513
|
+
// Apply grid state column settings
|
|
514
|
+
gridColumns.forEach((gc, idx) => {
|
|
515
|
+
const column = this.columns.find(c => c.fieldName.toLowerCase() === gc.Name.toLowerCase());
|
|
516
|
+
if (column) {
|
|
517
|
+
column.visible = !gc.hidden;
|
|
518
|
+
column.width = gc.width || null;
|
|
519
|
+
column.orderIndex = gc.orderIndex ?? idx;
|
|
520
|
+
if (gc.DisplayName) {
|
|
521
|
+
column.displayName = gc.DisplayName;
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
});
|
|
525
|
+
// Sort by orderIndex
|
|
526
|
+
this.columns.sort((a, b) => a.orderIndex - b.orderIndex);
|
|
527
|
+
}
|
|
528
|
+
/**
|
|
529
|
+
* Get visible columns
|
|
530
|
+
*/
|
|
531
|
+
get visibleColumns() {
|
|
532
|
+
return this.columns.filter(c => c.visible);
|
|
533
|
+
}
|
|
534
|
+
/**
|
|
535
|
+
* Get hidden columns
|
|
536
|
+
*/
|
|
537
|
+
get hiddenColumns() {
|
|
538
|
+
return this.columns.filter(c => !c.visible);
|
|
539
|
+
}
|
|
540
|
+
/**
|
|
541
|
+
* Get filtered columns for search
|
|
542
|
+
*/
|
|
543
|
+
get filteredHiddenColumns() {
|
|
544
|
+
if (!this.columnSearchText) {
|
|
545
|
+
return this.hiddenColumns;
|
|
546
|
+
}
|
|
547
|
+
const search = this.columnSearchText.toLowerCase();
|
|
548
|
+
return this.hiddenColumns.filter(c => c.displayName.toLowerCase().includes(search) ||
|
|
549
|
+
c.fieldName.toLowerCase().includes(search));
|
|
550
|
+
}
|
|
551
|
+
/**
|
|
552
|
+
* Get sortable fields for dropdown
|
|
553
|
+
*/
|
|
554
|
+
get sortableFields() {
|
|
555
|
+
if (!this.entity)
|
|
556
|
+
return [];
|
|
557
|
+
return this.entity.Fields.filter(f => !f.Name.startsWith('__mj_') &&
|
|
558
|
+
!f.IsBinaryFieldType // Exclude binary fields from sorting
|
|
559
|
+
);
|
|
560
|
+
}
|
|
561
|
+
/**
|
|
562
|
+
* Check if the current user can edit the view
|
|
563
|
+
*/
|
|
564
|
+
get canEdit() {
|
|
565
|
+
if (!this.viewEntity)
|
|
566
|
+
return true; // Can always create new
|
|
567
|
+
return this.viewEntity.UserCanEdit;
|
|
568
|
+
}
|
|
569
|
+
/**
|
|
570
|
+
* Check if the current user can delete the view
|
|
571
|
+
*/
|
|
572
|
+
get canDelete() {
|
|
573
|
+
if (!this.viewEntity)
|
|
574
|
+
return false; // Can't delete default
|
|
575
|
+
return this.viewEntity.UserCanDelete;
|
|
576
|
+
}
|
|
577
|
+
/**
|
|
578
|
+
* Toggle column visibility
|
|
579
|
+
*/
|
|
580
|
+
toggleColumnVisibility(column) {
|
|
581
|
+
column.visible = !column.visible;
|
|
582
|
+
if (column.visible) {
|
|
583
|
+
// Add to end of visible columns
|
|
584
|
+
column.orderIndex = this.visibleColumns.length;
|
|
585
|
+
}
|
|
586
|
+
this.cdr.detectChanges();
|
|
587
|
+
}
|
|
588
|
+
/**
|
|
589
|
+
* Move column up in order
|
|
590
|
+
*/
|
|
591
|
+
moveColumnUp(column) {
|
|
592
|
+
const visibleCols = this.visibleColumns;
|
|
593
|
+
const currentIndex = visibleCols.indexOf(column);
|
|
594
|
+
if (currentIndex > 0) {
|
|
595
|
+
const prevColumn = visibleCols[currentIndex - 1];
|
|
596
|
+
const tempOrder = column.orderIndex;
|
|
597
|
+
column.orderIndex = prevColumn.orderIndex;
|
|
598
|
+
prevColumn.orderIndex = tempOrder;
|
|
599
|
+
this.columns.sort((a, b) => a.orderIndex - b.orderIndex);
|
|
600
|
+
this.cdr.detectChanges();
|
|
601
|
+
}
|
|
602
|
+
}
|
|
603
|
+
/**
|
|
604
|
+
* Move column down in order
|
|
605
|
+
*/
|
|
606
|
+
moveColumnDown(column) {
|
|
607
|
+
const visibleCols = this.visibleColumns;
|
|
608
|
+
const currentIndex = visibleCols.indexOf(column);
|
|
609
|
+
if (currentIndex < visibleCols.length - 1) {
|
|
610
|
+
const nextColumn = visibleCols[currentIndex + 1];
|
|
611
|
+
const tempOrder = column.orderIndex;
|
|
612
|
+
column.orderIndex = nextColumn.orderIndex;
|
|
613
|
+
nextColumn.orderIndex = tempOrder;
|
|
614
|
+
this.columns.sort((a, b) => a.orderIndex - b.orderIndex);
|
|
615
|
+
this.cdr.detectChanges();
|
|
616
|
+
}
|
|
617
|
+
}
|
|
618
|
+
/**
|
|
619
|
+
* Handle drag start for column reordering
|
|
620
|
+
*/
|
|
621
|
+
onDragStart(event, column) {
|
|
622
|
+
this.draggedColumn = column;
|
|
623
|
+
if (event.dataTransfer) {
|
|
624
|
+
event.dataTransfer.effectAllowed = 'move';
|
|
625
|
+
}
|
|
626
|
+
}
|
|
627
|
+
/**
|
|
628
|
+
* Handle drag over for column reordering
|
|
629
|
+
*/
|
|
630
|
+
onDragOver(event, column) {
|
|
631
|
+
event.preventDefault();
|
|
632
|
+
if (event.dataTransfer) {
|
|
633
|
+
event.dataTransfer.dropEffect = 'move';
|
|
634
|
+
}
|
|
635
|
+
}
|
|
636
|
+
/**
|
|
637
|
+
* Handle drop for column reordering
|
|
638
|
+
*/
|
|
639
|
+
onDrop(event, targetColumn) {
|
|
640
|
+
event.preventDefault();
|
|
641
|
+
if (this.draggedColumn && this.draggedColumn !== targetColumn) {
|
|
642
|
+
const draggedIndex = this.draggedColumn.orderIndex;
|
|
643
|
+
const targetIndex = targetColumn.orderIndex;
|
|
644
|
+
// Reorder columns
|
|
645
|
+
if (draggedIndex < targetIndex) {
|
|
646
|
+
this.columns.forEach(c => {
|
|
647
|
+
if (c.orderIndex > draggedIndex && c.orderIndex <= targetIndex) {
|
|
648
|
+
c.orderIndex--;
|
|
649
|
+
}
|
|
650
|
+
});
|
|
651
|
+
}
|
|
652
|
+
else {
|
|
653
|
+
this.columns.forEach(c => {
|
|
654
|
+
if (c.orderIndex >= targetIndex && c.orderIndex < draggedIndex) {
|
|
655
|
+
c.orderIndex++;
|
|
656
|
+
}
|
|
657
|
+
});
|
|
658
|
+
}
|
|
659
|
+
this.draggedColumn.orderIndex = targetIndex;
|
|
660
|
+
this.columns.sort((a, b) => a.orderIndex - b.orderIndex);
|
|
661
|
+
}
|
|
662
|
+
this.draggedColumn = null;
|
|
663
|
+
this.cdr.detectChanges();
|
|
664
|
+
}
|
|
665
|
+
/**
|
|
666
|
+
* Handle drag end
|
|
667
|
+
*/
|
|
668
|
+
onDragEnd() {
|
|
669
|
+
this.draggedColumn = null;
|
|
670
|
+
}
|
|
671
|
+
/**
|
|
672
|
+
* Close the panel
|
|
673
|
+
*/
|
|
674
|
+
onClose() {
|
|
675
|
+
this.close.emit();
|
|
676
|
+
}
|
|
677
|
+
/**
|
|
678
|
+
* Save the view
|
|
679
|
+
*/
|
|
680
|
+
onSave() {
|
|
681
|
+
this.save.emit({
|
|
682
|
+
name: this.viewName,
|
|
683
|
+
description: this.viewDescription,
|
|
684
|
+
isShared: this.isShared,
|
|
685
|
+
saveAsNew: false,
|
|
686
|
+
columns: this.visibleColumns,
|
|
687
|
+
sortField: this.sortField,
|
|
688
|
+
sortDirection: this.sortDirection,
|
|
689
|
+
smartFilterEnabled: this.smartFilterEnabled,
|
|
690
|
+
smartFilterPrompt: this.smartFilterPrompt
|
|
691
|
+
});
|
|
692
|
+
}
|
|
693
|
+
/**
|
|
694
|
+
* Save as a new view
|
|
695
|
+
*/
|
|
696
|
+
onSaveAsNew() {
|
|
697
|
+
this.save.emit({
|
|
698
|
+
name: this.viewName || 'New View',
|
|
699
|
+
description: this.viewDescription,
|
|
700
|
+
isShared: this.isShared,
|
|
701
|
+
saveAsNew: true,
|
|
702
|
+
columns: this.visibleColumns,
|
|
703
|
+
sortField: this.sortField,
|
|
704
|
+
sortDirection: this.sortDirection,
|
|
705
|
+
smartFilterEnabled: this.smartFilterEnabled,
|
|
706
|
+
smartFilterPrompt: this.smartFilterPrompt
|
|
707
|
+
});
|
|
708
|
+
}
|
|
709
|
+
/**
|
|
710
|
+
* Delete the view
|
|
711
|
+
*/
|
|
712
|
+
onDelete() {
|
|
713
|
+
if (confirm('Are you sure you want to delete this view?')) {
|
|
714
|
+
this.delete.emit();
|
|
715
|
+
}
|
|
716
|
+
}
|
|
717
|
+
/**
|
|
718
|
+
* Set the active tab
|
|
719
|
+
*/
|
|
720
|
+
setActiveTab(tab) {
|
|
721
|
+
this.activeTab = tab;
|
|
722
|
+
this.cdr.detectChanges();
|
|
723
|
+
}
|
|
724
|
+
static ɵfac = function ViewConfigPanelComponent_Factory(t) { return new (t || ViewConfigPanelComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
|
|
725
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ViewConfigPanelComponent, selectors: [["mj-view-config-panel"]], hostBindings: function ViewConfigPanelComponent_HostBindings(rf, ctx) { if (rf & 1) {
|
|
726
|
+
i0.ɵɵlistener("keydown.escape", function ViewConfigPanelComponent_keydown_escape_HostBindingHandler() { return ctx.handleEscape(); }, false, i0.ɵɵresolveDocument);
|
|
727
|
+
} }, inputs: { entity: "entity", viewEntity: "viewEntity", isOpen: "isOpen", currentGridState: "currentGridState" }, outputs: { close: "close", save: "save", delete: "delete" }, features: [i0.ɵɵNgOnChangesFeature], decls: 33, vars: 16, consts: [[1, "panel-backdrop"], [1, "config-panel"], [1, "panel-header"], [1, "header-title"], [1, "fa-solid", "fa-sliders-h"], ["title", "Close", 1, "close-btn", 3, "click"], [1, "fa-solid", "fa-times"], [1, "tab-nav"], [1, "tab-btn", 3, "click"], [1, "fa-solid", "fa-columns"], [1, "fa-solid", "fa-filter"], [1, "fa-solid", "fa-cog"], [1, "panel-content"], [1, "tab-content"], [1, "panel-footer"], [1, "footer-btn", "cancel-btn", 3, "click"], [1, "footer-right"], [1, "footer-btn", "save-as-btn", 3, "disabled"], [1, "footer-btn", "save-btn", "primary", 3, "disabled"], [1, "panel-backdrop", 3, "click"], [1, "config-section"], [1, "section-header"], [1, "fa-solid", "fa-sort"], [1, "sort-config"], [1, "sort-field-select", 3, "ngModelChange", "ngModel"], [3, "value"], [1, "sort-direction-toggle"], [1, "fa-solid", "fa-eye"], [1, "column-count"], [1, "column-list", "visible-columns"], ["draggable", "true", 1, "column-item"], [1, "empty-list"], [1, "fa-solid", "fa-eye-slash"], [1, "column-search"], [1, "column-list", "hidden-columns"], [1, "column-item", "hidden"], ["title", "Ascending", 1, "direction-btn", 3, "click"], [1, "fa-solid", "fa-arrow-up"], ["title", "Descending", 1, "direction-btn", 3, "click"], [1, "fa-solid", "fa-arrow-down"], ["draggable", "true", 1, "column-item", 3, "dragstart", "dragover", "drop", "dragend"], [1, "drag-handle"], [1, "fa-solid", "fa-grip-vertical"], [1, "column-name"], [1, "column-actions"], ["title", "Move up", 1, "action-btn", 3, "click", "disabled"], [1, "fa-solid", "fa-chevron-up"], ["title", "Move down", 1, "action-btn", 3, "click", "disabled"], [1, "fa-solid", "fa-chevron-down"], ["title", "Hide column", 1, "action-btn", "hide-btn", 3, "click"], [1, "fa-solid", "fa-info-circle"], [1, "fa-solid", "fa-search"], ["type", "text", "placeholder", "Search columns...", 3, "ngModelChange", "ngModel"], ["title", "Show column", 1, "action-btn", "show-btn", 3, "click"], [1, "fa-solid", "fa-plus"], [1, "fa-solid", "fa-check-circle"], [1, "fa-solid", "fa-magic"], [1, "smart-filter-toggle"], ["type", "checkbox", 3, "ngModelChange", "ngModel", "disabled"], [1, "toggle-label"], [1, "smart-filter-disabled-message"], [1, "filters-placeholder"], [1, "form-group"], ["for", "smartFilterPrompt"], ["id", "smartFilterPrompt", "placeholder", "Describe what records you want to see... e.g., 'Show me all records created this month' or 'Active customers with high revenue'", "rows", "3", 1, "form-input", "form-textarea", "smart-filter-textarea", 3, "ngModelChange", "ngModel", "disabled"], [1, "smart-filter-explanation"], [1, "tip"], [1, "fa-solid", "fa-lightbulb"], ["for", "viewName"], ["id", "viewName", "type", "text", "placeholder", "Enter view name...", 1, "form-input", 3, "ngModelChange", "ngModel", "disabled"], ["for", "viewDescription"], ["id", "viewDescription", "placeholder", "Describe this view...", "rows", "3", 1, "form-input", "form-textarea", 3, "ngModelChange", "ngModel", "disabled"], [1, "fa-solid", "fa-share-alt"], [1, "checkbox-label"], [1, "checkbox-text"], [1, "config-section", "danger-zone"], [1, "fa-solid", "fa-exclamation-triangle"], [1, "delete-btn", 3, "click"], [1, "fa-solid", "fa-trash"], [1, "footer-btn", "save-as-btn", 3, "click", "disabled"], [1, "footer-btn", "save-btn", "primary", 3, "click", "disabled"], [1, "fa-solid", "fa-save"]], template: function ViewConfigPanelComponent_Template(rf, ctx) { if (rf & 1) {
|
|
728
|
+
i0.ɵɵtemplate(0, ViewConfigPanelComponent_Conditional_0_Template, 1, 0, "div", 0);
|
|
729
|
+
i0.ɵɵelementStart(1, "div", 1)(2, "div", 2)(3, "div", 3);
|
|
730
|
+
i0.ɵɵelement(4, "i", 4);
|
|
731
|
+
i0.ɵɵelementStart(5, "span");
|
|
732
|
+
i0.ɵɵtext(6);
|
|
733
|
+
i0.ɵɵelementEnd()();
|
|
734
|
+
i0.ɵɵelementStart(7, "button", 5);
|
|
735
|
+
i0.ɵɵlistener("click", function ViewConfigPanelComponent_Template_button_click_7_listener() { return ctx.onClose(); });
|
|
736
|
+
i0.ɵɵelement(8, "i", 6);
|
|
737
|
+
i0.ɵɵelementEnd()();
|
|
738
|
+
i0.ɵɵelementStart(9, "div", 7)(10, "button", 8);
|
|
739
|
+
i0.ɵɵlistener("click", function ViewConfigPanelComponent_Template_button_click_10_listener() { return ctx.setActiveTab("columns"); });
|
|
740
|
+
i0.ɵɵelement(11, "i", 9);
|
|
741
|
+
i0.ɵɵelementStart(12, "span");
|
|
742
|
+
i0.ɵɵtext(13, "Columns");
|
|
743
|
+
i0.ɵɵelementEnd()();
|
|
744
|
+
i0.ɵɵelementStart(14, "button", 8);
|
|
745
|
+
i0.ɵɵlistener("click", function ViewConfigPanelComponent_Template_button_click_14_listener() { return ctx.setActiveTab("filters"); });
|
|
746
|
+
i0.ɵɵelement(15, "i", 10);
|
|
747
|
+
i0.ɵɵelementStart(16, "span");
|
|
748
|
+
i0.ɵɵtext(17, "Filters");
|
|
749
|
+
i0.ɵɵelementEnd()();
|
|
750
|
+
i0.ɵɵelementStart(18, "button", 8);
|
|
751
|
+
i0.ɵɵlistener("click", function ViewConfigPanelComponent_Template_button_click_18_listener() { return ctx.setActiveTab("settings"); });
|
|
752
|
+
i0.ɵɵelement(19, "i", 11);
|
|
753
|
+
i0.ɵɵelementStart(20, "span");
|
|
754
|
+
i0.ɵɵtext(21, "Settings");
|
|
755
|
+
i0.ɵɵelementEnd()()();
|
|
756
|
+
i0.ɵɵelementStart(22, "div", 12);
|
|
757
|
+
i0.ɵɵtemplate(23, ViewConfigPanelComponent_Conditional_23_Template, 36, 8, "div", 13)(24, ViewConfigPanelComponent_Conditional_24_Template, 21, 4, "div", 13)(25, ViewConfigPanelComponent_Conditional_25_Template, 27, 7, "div", 13);
|
|
758
|
+
i0.ɵɵelementEnd();
|
|
759
|
+
i0.ɵɵelementStart(26, "div", 14)(27, "button", 15);
|
|
760
|
+
i0.ɵɵlistener("click", function ViewConfigPanelComponent_Template_button_click_27_listener() { return ctx.onClose(); });
|
|
761
|
+
i0.ɵɵtext(28, " Cancel ");
|
|
762
|
+
i0.ɵɵelementEnd();
|
|
763
|
+
i0.ɵɵelementStart(29, "div", 16);
|
|
764
|
+
i0.ɵɵtemplate(30, ViewConfigPanelComponent_Conditional_30_Template, 3, 1, "button", 17)(31, ViewConfigPanelComponent_Conditional_31_Template, 3, 1, "button", 18)(32, ViewConfigPanelComponent_Conditional_32_Template, 3, 1, "button", 18);
|
|
765
|
+
i0.ɵɵelementEnd()()();
|
|
766
|
+
} if (rf & 2) {
|
|
767
|
+
i0.ɵɵconditional(ctx.isOpen ? 0 : -1);
|
|
768
|
+
i0.ɵɵadvance();
|
|
769
|
+
i0.ɵɵclassProp("open", ctx.isOpen);
|
|
770
|
+
i0.ɵɵadvance(5);
|
|
771
|
+
i0.ɵɵtextInterpolate(ctx.viewEntity ? "Edit View" : "Configure View");
|
|
772
|
+
i0.ɵɵadvance(4);
|
|
773
|
+
i0.ɵɵclassProp("active", ctx.activeTab === "columns");
|
|
774
|
+
i0.ɵɵadvance(4);
|
|
775
|
+
i0.ɵɵclassProp("active", ctx.activeTab === "filters");
|
|
776
|
+
i0.ɵɵadvance(4);
|
|
777
|
+
i0.ɵɵclassProp("active", ctx.activeTab === "settings");
|
|
778
|
+
i0.ɵɵadvance(5);
|
|
779
|
+
i0.ɵɵconditional(ctx.activeTab === "columns" ? 23 : -1);
|
|
780
|
+
i0.ɵɵadvance();
|
|
781
|
+
i0.ɵɵconditional(ctx.activeTab === "filters" ? 24 : -1);
|
|
782
|
+
i0.ɵɵadvance();
|
|
783
|
+
i0.ɵɵconditional(ctx.activeTab === "settings" ? 25 : -1);
|
|
784
|
+
i0.ɵɵadvance(5);
|
|
785
|
+
i0.ɵɵconditional(ctx.canEdit || !ctx.viewEntity ? 30 : -1);
|
|
786
|
+
i0.ɵɵadvance();
|
|
787
|
+
i0.ɵɵconditional(ctx.viewEntity && ctx.canEdit ? 31 : -1);
|
|
788
|
+
i0.ɵɵadvance();
|
|
789
|
+
i0.ɵɵconditional(!ctx.viewEntity ? 32 : -1);
|
|
790
|
+
} }, dependencies: [i1.NgSelectOption, i1.ɵNgSelectMultipleOption, i1.DefaultValueAccessor, i1.CheckboxControlValueAccessor, i1.SelectControlValueAccessor, i1.NgControlStatus, i1.NgModel], styles: ["\n\n.panel-backdrop[_ngcontent-%COMP%] {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.3);\n z-index: 1000;\n animation: _ngcontent-%COMP%_fadeIn 0.2s ease;\n}\n\n@keyframes _ngcontent-%COMP%_fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n\n\n.config-panel[_ngcontent-%COMP%] {\n position: fixed;\n top: 0;\n right: 0;\n width: 400px;\n max-width: 100vw;\n height: 100%;\n background: white;\n box-shadow: -4px 0 24px rgba(0, 0, 0, 0.15);\n z-index: 1001;\n display: flex;\n flex-direction: column;\n transform: translateX(100%);\n transition: transform 0.25s ease;\n}\n\n.config-panel.open[_ngcontent-%COMP%] {\n transform: translateX(0);\n}\n\n\n\n.panel-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid #e0e0e0;\n background: #fafafa;\n flex-shrink: 0;\n}\n\n.header-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 16px;\n font-weight: 600;\n color: #333;\n}\n\n.header-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #1976d2;\n}\n\n.close-btn[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n border: none;\n background: transparent;\n border-radius: 6px;\n cursor: pointer;\n color: #666;\n transition: all 0.15s ease;\n}\n\n.close-btn[_ngcontent-%COMP%]:hover {\n background: #e0e0e0;\n color: #333;\n}\n\n\n\n.tab-nav[_ngcontent-%COMP%] {\n display: flex;\n border-bottom: 1px solid #e0e0e0;\n flex-shrink: 0;\n}\n\n.tab-btn[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 12px 16px;\n border: none;\n background: transparent;\n color: #666;\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s ease;\n border-bottom: 2px solid transparent;\n}\n\n.tab-btn[_ngcontent-%COMP%]:hover {\n background: #f5f5f5;\n color: #333;\n}\n\n.tab-btn.active[_ngcontent-%COMP%] {\n color: #1976d2;\n border-bottom-color: #1976d2;\n background: transparent;\n}\n\n.tab-btn[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n}\n\n\n\n.panel-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 16px 0;\n}\n\n.tab-content[_ngcontent-%COMP%] {\n padding: 0 20px;\n}\n\n\n\n.config-section[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n}\n\n.section-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 12px;\n font-size: 13px;\n font-weight: 600;\n color: #333;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.section-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #1976d2;\n font-size: 12px;\n}\n\n.column-count[_ngcontent-%COMP%] {\n margin-left: auto;\n background: #e3f2fd;\n color: #1976d2;\n padding: 2px 8px;\n border-radius: 10px;\n font-size: 11px;\n}\n\n\n\n.sort-config[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n}\n\n.sort-field-select[_ngcontent-%COMP%] {\n flex: 1;\n padding: 10px 12px;\n border: 1px solid #e0e0e0;\n border-radius: 6px;\n font-size: 14px;\n background: white;\n cursor: pointer;\n}\n\n.sort-field-select[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: #1976d2;\n}\n\n.sort-direction-toggle[_ngcontent-%COMP%] {\n display: flex;\n background: #f0f0f0;\n border-radius: 6px;\n padding: 2px;\n}\n\n.direction-btn[_ngcontent-%COMP%] {\n width: 36px;\n height: 36px;\n border: none;\n background: transparent;\n border-radius: 4px;\n cursor: pointer;\n color: #666;\n transition: all 0.15s ease;\n}\n\n.direction-btn[_ngcontent-%COMP%]:hover {\n color: #333;\n}\n\n.direction-btn.active[_ngcontent-%COMP%] {\n background: white;\n color: #1976d2;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n}\n\n\n\n.column-list[_ngcontent-%COMP%] {\n border: 1px solid #e0e0e0;\n border-radius: 8px;\n overflow: hidden;\n background: #fafafa;\n}\n\n.column-list.hidden-columns[_ngcontent-%COMP%] {\n max-height: 200px;\n overflow-y: auto;\n}\n\n.column-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 12px;\n background: white;\n border-bottom: 1px solid #f0f0f0;\n transition: background 0.1s ease;\n}\n\n.column-item[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.column-item[_ngcontent-%COMP%]:hover {\n background: #f5f7fa;\n}\n\n.column-item.hidden[_ngcontent-%COMP%] {\n background: #fafafa;\n}\n\n.column-item.hidden[_ngcontent-%COMP%]:hover {\n background: #f0f0f0;\n}\n\n.drag-handle[_ngcontent-%COMP%] {\n cursor: grab;\n color: #999;\n padding: 4px;\n}\n\n.drag-handle[_ngcontent-%COMP%]:active {\n cursor: grabbing;\n}\n\n.column-name[_ngcontent-%COMP%] {\n flex: 1;\n font-size: 14px;\n color: #333;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.column-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n}\n\n.action-btn[_ngcontent-%COMP%] {\n width: 28px;\n height: 28px;\n border: none;\n background: transparent;\n border-radius: 4px;\n cursor: pointer;\n color: #999;\n transition: all 0.15s ease;\n}\n\n.action-btn[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: #e0e0e0;\n color: #333;\n}\n\n.action-btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.3;\n cursor: not-allowed;\n}\n\n.action-btn.hide-btn[_ngcontent-%COMP%]:hover {\n background: #ffebee;\n color: #c62828;\n}\n\n.action-btn.show-btn[_ngcontent-%COMP%]:hover {\n background: #e8f5e9;\n color: #2e7d32;\n}\n\n.empty-list[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 20px;\n color: #999;\n font-size: 13px;\n}\n\n\n\n.column-search[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: white;\n border: 1px solid #e0e0e0;\n border-radius: 6px;\n margin-bottom: 8px;\n}\n\n.column-search[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #999;\n font-size: 12px;\n}\n\n.column-search[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n flex: 1;\n border: none;\n outline: none;\n font-size: 14px;\n}\n\n\n\n.filters-placeholder[_ngcontent-%COMP%] {\n text-align: center;\n padding: 32px 20px;\n background: #f5f7fa;\n border-radius: 8px;\n}\n\n.filters-placeholder[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 32px;\n color: #1976d2;\n margin-bottom: 16px;\n}\n\n.filters-placeholder[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n font-size: 16px;\n color: #333;\n}\n\n.filters-placeholder[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0 0 16px 0;\n font-size: 14px;\n color: #666;\n line-height: 1.5;\n}\n\n.tip[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n padding: 12px;\n background: #fff8e1;\n border-radius: 6px;\n font-size: 12px;\n color: #795548;\n text-align: left;\n}\n\n.tip[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #ffc107;\n font-size: 14px;\n margin-top: 1px;\n}\n\n\n\n.smart-filter-toggle[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-left: auto;\n cursor: pointer;\n}\n\n.smart-filter-toggle[_ngcontent-%COMP%] input[type=\"checkbox\"][_ngcontent-%COMP%] {\n width: 16px;\n height: 16px;\n cursor: pointer;\n}\n\n.smart-filter-toggle[_ngcontent-%COMP%] .toggle-label[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 500;\n color: #666;\n text-transform: none;\n letter-spacing: normal;\n}\n\n.smart-filter-textarea[_ngcontent-%COMP%] {\n min-height: 100px;\n font-family: inherit;\n line-height: 1.5;\n}\n\n.smart-filter-explanation[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n padding: 12px;\n background: #e3f2fd;\n border-radius: 6px;\n margin-bottom: 12px;\n font-size: 13px;\n color: #1565c0;\n}\n\n.smart-filter-explanation[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #1976d2;\n font-size: 14px;\n margin-top: 2px;\n flex-shrink: 0;\n}\n\n.smart-filter-disabled-message[_ngcontent-%COMP%] {\n padding: 16px;\n background: #f5f7fa;\n border-radius: 6px;\n text-align: center;\n}\n\n.smart-filter-disabled-message[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 13px;\n color: #666;\n line-height: 1.5;\n}\n\n\n\n.form-group[_ngcontent-%COMP%] {\n margin-bottom: 16px;\n}\n\n.form-group[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n display: block;\n margin-bottom: 6px;\n font-size: 13px;\n font-weight: 500;\n color: #333;\n}\n\n.form-input[_ngcontent-%COMP%] {\n width: 100%;\n padding: 10px 12px;\n border: 1px solid #e0e0e0;\n border-radius: 6px;\n font-size: 14px;\n transition: border-color 0.15s ease;\n}\n\n.form-input[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: #1976d2;\n}\n\n.form-input[_ngcontent-%COMP%]:disabled {\n background: #f5f5f5;\n color: #999;\n}\n\n.form-textarea[_ngcontent-%COMP%] {\n resize: vertical;\n min-height: 80px;\n}\n\n\n\n.checkbox-label[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n cursor: pointer;\n}\n\n.checkbox-label[_ngcontent-%COMP%] input[type=\"checkbox\"][_ngcontent-%COMP%] {\n width: 18px;\n height: 18px;\n margin-top: 2px;\n cursor: pointer;\n}\n\n.checkbox-text[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.checkbox-text[_ngcontent-%COMP%] strong[_ngcontent-%COMP%] {\n font-size: 14px;\n color: #333;\n}\n\n.checkbox-text[_ngcontent-%COMP%] small[_ngcontent-%COMP%] {\n font-size: 12px;\n color: #666;\n}\n\n\n\n.danger-zone[_ngcontent-%COMP%] {\n padding-top: 16px;\n border-top: 1px solid #ffcdd2;\n}\n\n.danger-zone[_ngcontent-%COMP%] .section-header[_ngcontent-%COMP%] {\n color: #c62828;\n}\n\n.danger-zone[_ngcontent-%COMP%] .section-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #c62828;\n}\n\n.delete-btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n width: 100%;\n padding: 10px 16px;\n border: 1px solid #c62828;\n background: transparent;\n border-radius: 6px;\n color: #c62828;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.delete-btn[_ngcontent-%COMP%]:hover {\n background: #c62828;\n color: white;\n}\n\n\n\n.panel-footer[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-top: 1px solid #e0e0e0;\n background: #fafafa;\n flex-shrink: 0;\n}\n\n.footer-right[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n}\n\n.footer-btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 10px 16px;\n border: 1px solid #e0e0e0;\n background: white;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.footer-btn[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: #f0f0f0;\n border-color: #ccc;\n}\n\n.footer-btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.footer-btn.primary[_ngcontent-%COMP%] {\n background: #1976d2;\n border-color: #1976d2;\n color: white;\n}\n\n.footer-btn.primary[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: #1565c0;\n border-color: #1565c0;\n}\n\n.footer-btn[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n}\n\n\n\n@media (max-width: 768px) {\n .config-panel[_ngcontent-%COMP%] {\n width: 100%;\n }\n\n .tab-btn[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n display: none;\n }\n\n .tab-btn[_ngcontent-%COMP%] {\n padding: 14px;\n }\n\n .tab-btn[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 16px;\n }\n}"] });
|
|
791
|
+
}
|
|
792
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ViewConfigPanelComponent, [{
|
|
793
|
+
type: Component,
|
|
794
|
+
args: [{ selector: 'mj-view-config-panel', template: "<!-- Backdrop -->\n@if (isOpen) {\n <div class=\"panel-backdrop\" (click)=\"onClose()\"></div>\n}\n\n<!-- Sliding Panel -->\n<div class=\"config-panel\" [class.open]=\"isOpen\">\n <!-- Panel Header -->\n <div class=\"panel-header\">\n <div class=\"header-title\">\n <i class=\"fa-solid fa-sliders-h\"></i>\n <span>{{ viewEntity ? 'Edit View' : 'Configure View' }}</span>\n </div>\n <button class=\"close-btn\" (click)=\"onClose()\" title=\"Close\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n\n <!-- Tab Navigation -->\n <div class=\"tab-nav\">\n <button\n class=\"tab-btn\"\n [class.active]=\"activeTab === 'columns'\"\n (click)=\"setActiveTab('columns')\">\n <i class=\"fa-solid fa-columns\"></i>\n <span>Columns</span>\n </button>\n <button\n class=\"tab-btn\"\n [class.active]=\"activeTab === 'filters'\"\n (click)=\"setActiveTab('filters')\">\n <i class=\"fa-solid fa-filter\"></i>\n <span>Filters</span>\n </button>\n <button\n class=\"tab-btn\"\n [class.active]=\"activeTab === 'settings'\"\n (click)=\"setActiveTab('settings')\">\n <i class=\"fa-solid fa-cog\"></i>\n <span>Settings</span>\n </button>\n </div>\n\n <!-- Panel Content -->\n <div class=\"panel-content\">\n <!-- Columns Tab -->\n @if (activeTab === 'columns') {\n <div class=\"tab-content\">\n <!-- Sort Configuration -->\n <div class=\"config-section\">\n <div class=\"section-header\">\n <i class=\"fa-solid fa-sort\"></i>\n <span>Default Sort</span>\n </div>\n <div class=\"sort-config\">\n <select\n class=\"sort-field-select\"\n [(ngModel)]=\"sortField\">\n <option [value]=\"null\">No default sort</option>\n @for (field of sortableFields; track field.ID) {\n <option [value]=\"field.Name\">{{ field.DisplayNameOrName }}</option>\n }\n </select>\n @if (sortField) {\n <div class=\"sort-direction-toggle\">\n <button\n class=\"direction-btn\"\n [class.active]=\"sortDirection === 'asc'\"\n (click)=\"sortDirection = 'asc'\"\n title=\"Ascending\">\n <i class=\"fa-solid fa-arrow-up\"></i>\n </button>\n <button\n class=\"direction-btn\"\n [class.active]=\"sortDirection === 'desc'\"\n (click)=\"sortDirection = 'desc'\"\n title=\"Descending\">\n <i class=\"fa-solid fa-arrow-down\"></i>\n </button>\n </div>\n }\n </div>\n </div>\n\n <!-- Visible Columns -->\n <div class=\"config-section\">\n <div class=\"section-header\">\n <i class=\"fa-solid fa-eye\"></i>\n <span>Visible Columns</span>\n <span class=\"column-count\">{{ visibleColumns.length }}</span>\n </div>\n <div class=\"column-list visible-columns\">\n @for (column of visibleColumns; track column.fieldId; let i = $index) {\n <div\n class=\"column-item\"\n draggable=\"true\"\n (dragstart)=\"onDragStart($event, column)\"\n (dragover)=\"onDragOver($event, column)\"\n (drop)=\"onDrop($event, column)\"\n (dragend)=\"onDragEnd()\">\n <div class=\"drag-handle\">\n <i class=\"fa-solid fa-grip-vertical\"></i>\n </div>\n <span class=\"column-name\">{{ column.displayName }}</span>\n <div class=\"column-actions\">\n <button\n class=\"action-btn\"\n [disabled]=\"i === 0\"\n (click)=\"moveColumnUp(column)\"\n title=\"Move up\">\n <i class=\"fa-solid fa-chevron-up\"></i>\n </button>\n <button\n class=\"action-btn\"\n [disabled]=\"i === visibleColumns.length - 1\"\n (click)=\"moveColumnDown(column)\"\n title=\"Move down\">\n <i class=\"fa-solid fa-chevron-down\"></i>\n </button>\n <button\n class=\"action-btn hide-btn\"\n (click)=\"toggleColumnVisibility(column)\"\n title=\"Hide column\">\n <i class=\"fa-solid fa-eye-slash\"></i>\n </button>\n </div>\n </div>\n }\n @if (visibleColumns.length === 0) {\n <div class=\"empty-list\">\n <i class=\"fa-solid fa-info-circle\"></i>\n <span>No columns visible. Add columns from below.</span>\n </div>\n }\n </div>\n </div>\n\n <!-- Hidden Columns -->\n <div class=\"config-section\">\n <div class=\"section-header\">\n <i class=\"fa-solid fa-eye-slash\"></i>\n <span>Hidden Columns</span>\n <span class=\"column-count\">{{ hiddenColumns.length }}</span>\n </div>\n @if (hiddenColumns.length > 5) {\n <div class=\"column-search\">\n <i class=\"fa-solid fa-search\"></i>\n <input\n type=\"text\"\n placeholder=\"Search columns...\"\n [(ngModel)]=\"columnSearchText\"\n />\n </div>\n }\n <div class=\"column-list hidden-columns\">\n @for (column of filteredHiddenColumns; track column.fieldId) {\n <div class=\"column-item hidden\">\n <span class=\"column-name\">{{ column.displayName }}</span>\n <button\n class=\"action-btn show-btn\"\n (click)=\"toggleColumnVisibility(column)\"\n title=\"Show column\">\n <i class=\"fa-solid fa-plus\"></i>\n </button>\n </div>\n }\n @if (hiddenColumns.length === 0) {\n <div class=\"empty-list\">\n <i class=\"fa-solid fa-check-circle\"></i>\n <span>All columns are visible</span>\n </div>\n }\n </div>\n </div>\n </div>\n }\n\n <!-- Filters Tab -->\n @if (activeTab === 'filters') {\n <div class=\"tab-content\">\n <!-- Smart Filter Section -->\n <div class=\"config-section\">\n <div class=\"section-header\">\n <i class=\"fa-solid fa-magic\"></i>\n <span>Smart Filter</span>\n <label class=\"smart-filter-toggle\">\n <input\n type=\"checkbox\"\n [(ngModel)]=\"smartFilterEnabled\"\n [disabled]=\"!canEdit\"\n />\n <span class=\"toggle-label\">{{ smartFilterEnabled ? 'Enabled' : 'Disabled' }}</span>\n </label>\n </div>\n @if (smartFilterEnabled) {\n <div class=\"form-group\">\n <label for=\"smartFilterPrompt\">Natural Language Filter</label>\n <textarea\n id=\"smartFilterPrompt\"\n class=\"form-input form-textarea smart-filter-textarea\"\n placeholder=\"Describe what records you want to see... e.g., 'Show me all records created this month' or 'Active customers with high revenue'\"\n [(ngModel)]=\"smartFilterPrompt\"\n [disabled]=\"!canEdit\"\n rows=\"3\"\n ></textarea>\n </div>\n @if (smartFilterExplanation) {\n <div class=\"smart-filter-explanation\">\n <i class=\"fa-solid fa-info-circle\"></i>\n <span>{{ smartFilterExplanation }}</span>\n </div>\n }\n <div class=\"tip\">\n <i class=\"fa-solid fa-lightbulb\"></i>\n <span>Tip: The AI will interpret your natural language and create the appropriate filter when you save the view.</span>\n </div>\n } @else {\n <div class=\"smart-filter-disabled-message\">\n <p>Enable Smart Filter to use natural language filtering. The AI will interpret your description and create the appropriate SQL filter.</p>\n </div>\n }\n </div>\n\n <!-- Traditional Filter Section -->\n <div class=\"config-section\">\n <div class=\"section-header\">\n <i class=\"fa-solid fa-filter\"></i>\n <span>Traditional Filters</span>\n </div>\n <div class=\"filters-placeholder\">\n <i class=\"fa-solid fa-sliders-h\"></i>\n <p>Traditional filter editing is coming soon. For now, use Smart Filter above or the filter builder in the grid view.</p>\n </div>\n </div>\n </div>\n }\n\n <!-- Settings Tab -->\n @if (activeTab === 'settings') {\n <div class=\"tab-content\">\n <!-- View Name & Description -->\n <div class=\"config-section\">\n <div class=\"section-header\">\n <i class=\"fa-solid fa-info-circle\"></i>\n <span>View Details</span>\n </div>\n <div class=\"form-group\">\n <label for=\"viewName\">Name</label>\n <input\n id=\"viewName\"\n type=\"text\"\n class=\"form-input\"\n placeholder=\"Enter view name...\"\n [(ngModel)]=\"viewName\"\n [disabled]=\"!canEdit\"\n />\n </div>\n <div class=\"form-group\">\n <label for=\"viewDescription\">Description</label>\n <textarea\n id=\"viewDescription\"\n class=\"form-input form-textarea\"\n placeholder=\"Describe this view...\"\n [(ngModel)]=\"viewDescription\"\n [disabled]=\"!canEdit\"\n rows=\"3\"\n ></textarea>\n </div>\n </div>\n\n <!-- Sharing -->\n <div class=\"config-section\">\n <div class=\"section-header\">\n <i class=\"fa-solid fa-share-alt\"></i>\n <span>Sharing</span>\n </div>\n <label class=\"checkbox-label\">\n <input\n type=\"checkbox\"\n [(ngModel)]=\"isShared\"\n [disabled]=\"!canEdit\"\n />\n <span class=\"checkbox-text\">\n <strong>Share with others</strong>\n <small>Allow other users to use this view</small>\n </span>\n </label>\n </div>\n\n <!-- Danger Zone -->\n @if (viewEntity && canDelete) {\n <div class=\"config-section danger-zone\">\n <div class=\"section-header\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n <span>Danger Zone</span>\n </div>\n <button class=\"delete-btn\" (click)=\"onDelete()\">\n <i class=\"fa-solid fa-trash\"></i>\n <span>Delete View</span>\n </button>\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Panel Footer -->\n <div class=\"panel-footer\">\n <button class=\"footer-btn cancel-btn\" (click)=\"onClose()\">\n Cancel\n </button>\n <div class=\"footer-right\">\n @if (canEdit || !viewEntity) {\n <button\n class=\"footer-btn save-as-btn\"\n (click)=\"onSaveAsNew()\"\n [disabled]=\"isSaving\">\n <i class=\"fa-solid fa-plus\"></i>\n Save As New\n </button>\n }\n @if (viewEntity && canEdit) {\n <button\n class=\"footer-btn save-btn primary\"\n (click)=\"onSave()\"\n [disabled]=\"isSaving || !viewName\">\n <i class=\"fa-solid fa-save\"></i>\n Save\n </button>\n }\n @if (!viewEntity) {\n <button\n class=\"footer-btn save-btn primary\"\n (click)=\"onSaveAsNew()\"\n [disabled]=\"isSaving || !viewName\">\n <i class=\"fa-solid fa-save\"></i>\n Create View\n </button>\n }\n </div>\n </div>\n</div>\n", styles: ["/* Backdrop */\n.panel-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.3);\n z-index: 1000;\n animation: fadeIn 0.2s ease;\n}\n\n@keyframes fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n/* Sliding Panel */\n.config-panel {\n position: fixed;\n top: 0;\n right: 0;\n width: 400px;\n max-width: 100vw;\n height: 100%;\n background: white;\n box-shadow: -4px 0 24px rgba(0, 0, 0, 0.15);\n z-index: 1001;\n display: flex;\n flex-direction: column;\n transform: translateX(100%);\n transition: transform 0.25s ease;\n}\n\n.config-panel.open {\n transform: translateX(0);\n}\n\n/* Panel Header */\n.panel-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid #e0e0e0;\n background: #fafafa;\n flex-shrink: 0;\n}\n\n.header-title {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 16px;\n font-weight: 600;\n color: #333;\n}\n\n.header-title i {\n color: #1976d2;\n}\n\n.close-btn {\n width: 32px;\n height: 32px;\n border: none;\n background: transparent;\n border-radius: 6px;\n cursor: pointer;\n color: #666;\n transition: all 0.15s ease;\n}\n\n.close-btn:hover {\n background: #e0e0e0;\n color: #333;\n}\n\n/* Tab Navigation */\n.tab-nav {\n display: flex;\n border-bottom: 1px solid #e0e0e0;\n flex-shrink: 0;\n}\n\n.tab-btn {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 12px 16px;\n border: none;\n background: transparent;\n color: #666;\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s ease;\n border-bottom: 2px solid transparent;\n}\n\n.tab-btn:hover {\n background: #f5f5f5;\n color: #333;\n}\n\n.tab-btn.active {\n color: #1976d2;\n border-bottom-color: #1976d2;\n background: transparent;\n}\n\n.tab-btn i {\n font-size: 12px;\n}\n\n/* Panel Content */\n.panel-content {\n flex: 1;\n overflow-y: auto;\n padding: 16px 0;\n}\n\n.tab-content {\n padding: 0 20px;\n}\n\n/* Config Sections */\n.config-section {\n margin-bottom: 24px;\n}\n\n.section-header {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 12px;\n font-size: 13px;\n font-weight: 600;\n color: #333;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.section-header i {\n color: #1976d2;\n font-size: 12px;\n}\n\n.column-count {\n margin-left: auto;\n background: #e3f2fd;\n color: #1976d2;\n padding: 2px 8px;\n border-radius: 10px;\n font-size: 11px;\n}\n\n/* Sort Configuration */\n.sort-config {\n display: flex;\n gap: 8px;\n}\n\n.sort-field-select {\n flex: 1;\n padding: 10px 12px;\n border: 1px solid #e0e0e0;\n border-radius: 6px;\n font-size: 14px;\n background: white;\n cursor: pointer;\n}\n\n.sort-field-select:focus {\n outline: none;\n border-color: #1976d2;\n}\n\n.sort-direction-toggle {\n display: flex;\n background: #f0f0f0;\n border-radius: 6px;\n padding: 2px;\n}\n\n.direction-btn {\n width: 36px;\n height: 36px;\n border: none;\n background: transparent;\n border-radius: 4px;\n cursor: pointer;\n color: #666;\n transition: all 0.15s ease;\n}\n\n.direction-btn:hover {\n color: #333;\n}\n\n.direction-btn.active {\n background: white;\n color: #1976d2;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n}\n\n/* Column Lists */\n.column-list {\n border: 1px solid #e0e0e0;\n border-radius: 8px;\n overflow: hidden;\n background: #fafafa;\n}\n\n.column-list.hidden-columns {\n max-height: 200px;\n overflow-y: auto;\n}\n\n.column-item {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 12px;\n background: white;\n border-bottom: 1px solid #f0f0f0;\n transition: background 0.1s ease;\n}\n\n.column-item:last-child {\n border-bottom: none;\n}\n\n.column-item:hover {\n background: #f5f7fa;\n}\n\n.column-item.hidden {\n background: #fafafa;\n}\n\n.column-item.hidden:hover {\n background: #f0f0f0;\n}\n\n.drag-handle {\n cursor: grab;\n color: #999;\n padding: 4px;\n}\n\n.drag-handle:active {\n cursor: grabbing;\n}\n\n.column-name {\n flex: 1;\n font-size: 14px;\n color: #333;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.column-actions {\n display: flex;\n gap: 4px;\n}\n\n.action-btn {\n width: 28px;\n height: 28px;\n border: none;\n background: transparent;\n border-radius: 4px;\n cursor: pointer;\n color: #999;\n transition: all 0.15s ease;\n}\n\n.action-btn:hover:not(:disabled) {\n background: #e0e0e0;\n color: #333;\n}\n\n.action-btn:disabled {\n opacity: 0.3;\n cursor: not-allowed;\n}\n\n.action-btn.hide-btn:hover {\n background: #ffebee;\n color: #c62828;\n}\n\n.action-btn.show-btn:hover {\n background: #e8f5e9;\n color: #2e7d32;\n}\n\n.empty-list {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 20px;\n color: #999;\n font-size: 13px;\n}\n\n/* Column Search */\n.column-search {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: white;\n border: 1px solid #e0e0e0;\n border-radius: 6px;\n margin-bottom: 8px;\n}\n\n.column-search i {\n color: #999;\n font-size: 12px;\n}\n\n.column-search input {\n flex: 1;\n border: none;\n outline: none;\n font-size: 14px;\n}\n\n/* Filters Placeholder */\n.filters-placeholder {\n text-align: center;\n padding: 32px 20px;\n background: #f5f7fa;\n border-radius: 8px;\n}\n\n.filters-placeholder i {\n font-size: 32px;\n color: #1976d2;\n margin-bottom: 16px;\n}\n\n.filters-placeholder h4 {\n margin: 0 0 8px 0;\n font-size: 16px;\n color: #333;\n}\n\n.filters-placeholder p {\n margin: 0 0 16px 0;\n font-size: 14px;\n color: #666;\n line-height: 1.5;\n}\n\n.tip {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n padding: 12px;\n background: #fff8e1;\n border-radius: 6px;\n font-size: 12px;\n color: #795548;\n text-align: left;\n}\n\n.tip i {\n color: #ffc107;\n font-size: 14px;\n margin-top: 1px;\n}\n\n/* Smart Filter Styles */\n.smart-filter-toggle {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-left: auto;\n cursor: pointer;\n}\n\n.smart-filter-toggle input[type=\"checkbox\"] {\n width: 16px;\n height: 16px;\n cursor: pointer;\n}\n\n.smart-filter-toggle .toggle-label {\n font-size: 12px;\n font-weight: 500;\n color: #666;\n text-transform: none;\n letter-spacing: normal;\n}\n\n.smart-filter-textarea {\n min-height: 100px;\n font-family: inherit;\n line-height: 1.5;\n}\n\n.smart-filter-explanation {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n padding: 12px;\n background: #e3f2fd;\n border-radius: 6px;\n margin-bottom: 12px;\n font-size: 13px;\n color: #1565c0;\n}\n\n.smart-filter-explanation i {\n color: #1976d2;\n font-size: 14px;\n margin-top: 2px;\n flex-shrink: 0;\n}\n\n.smart-filter-disabled-message {\n padding: 16px;\n background: #f5f7fa;\n border-radius: 6px;\n text-align: center;\n}\n\n.smart-filter-disabled-message p {\n margin: 0;\n font-size: 13px;\n color: #666;\n line-height: 1.5;\n}\n\n/* Form Elements */\n.form-group {\n margin-bottom: 16px;\n}\n\n.form-group label {\n display: block;\n margin-bottom: 6px;\n font-size: 13px;\n font-weight: 500;\n color: #333;\n}\n\n.form-input {\n width: 100%;\n padding: 10px 12px;\n border: 1px solid #e0e0e0;\n border-radius: 6px;\n font-size: 14px;\n transition: border-color 0.15s ease;\n}\n\n.form-input:focus {\n outline: none;\n border-color: #1976d2;\n}\n\n.form-input:disabled {\n background: #f5f5f5;\n color: #999;\n}\n\n.form-textarea {\n resize: vertical;\n min-height: 80px;\n}\n\n/* Checkbox */\n.checkbox-label {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n cursor: pointer;\n}\n\n.checkbox-label input[type=\"checkbox\"] {\n width: 18px;\n height: 18px;\n margin-top: 2px;\n cursor: pointer;\n}\n\n.checkbox-text {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.checkbox-text strong {\n font-size: 14px;\n color: #333;\n}\n\n.checkbox-text small {\n font-size: 12px;\n color: #666;\n}\n\n/* Danger Zone */\n.danger-zone {\n padding-top: 16px;\n border-top: 1px solid #ffcdd2;\n}\n\n.danger-zone .section-header {\n color: #c62828;\n}\n\n.danger-zone .section-header i {\n color: #c62828;\n}\n\n.delete-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n width: 100%;\n padding: 10px 16px;\n border: 1px solid #c62828;\n background: transparent;\n border-radius: 6px;\n color: #c62828;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.delete-btn:hover {\n background: #c62828;\n color: white;\n}\n\n/* Panel Footer */\n.panel-footer {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-top: 1px solid #e0e0e0;\n background: #fafafa;\n flex-shrink: 0;\n}\n\n.footer-right {\n display: flex;\n gap: 8px;\n}\n\n.footer-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 10px 16px;\n border: 1px solid #e0e0e0;\n background: white;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.footer-btn:hover:not(:disabled) {\n background: #f0f0f0;\n border-color: #ccc;\n}\n\n.footer-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.footer-btn.primary {\n background: #1976d2;\n border-color: #1976d2;\n color: white;\n}\n\n.footer-btn.primary:hover:not(:disabled) {\n background: #1565c0;\n border-color: #1565c0;\n}\n\n.footer-btn i {\n font-size: 12px;\n}\n\n/* Responsive */\n@media (max-width: 768px) {\n .config-panel {\n width: 100%;\n }\n\n .tab-btn span {\n display: none;\n }\n\n .tab-btn {\n padding: 14px;\n }\n\n .tab-btn i {\n font-size: 16px;\n }\n}\n"] }]
|
|
795
|
+
}], () => [{ type: i0.ChangeDetectorRef }], { entity: [{
|
|
796
|
+
type: Input
|
|
797
|
+
}], viewEntity: [{
|
|
798
|
+
type: Input
|
|
799
|
+
}], isOpen: [{
|
|
800
|
+
type: Input
|
|
801
|
+
}], currentGridState: [{
|
|
802
|
+
type: Input
|
|
803
|
+
}], close: [{
|
|
804
|
+
type: Output
|
|
805
|
+
}], save: [{
|
|
806
|
+
type: Output
|
|
807
|
+
}], delete: [{
|
|
808
|
+
type: Output
|
|
809
|
+
}], handleEscape: [{
|
|
810
|
+
type: HostListener,
|
|
811
|
+
args: ['document:keydown.escape']
|
|
812
|
+
}] }); })();
|
|
813
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ViewConfigPanelComponent, { className: "ViewConfigPanelComponent", filePath: "src/DataExplorer/components/view-config-panel/view-config-panel.component.ts", lineNumber: 49 }); })();
|
|
814
|
+
//# sourceMappingURL=view-config-panel.component.js.map
|