@memberjunction/ng-explorer-settings 3.3.0 → 3.4.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/lib/account-info/account-info.component.d.ts +23 -0
- package/dist/lib/account-info/account-info.component.d.ts.map +1 -0
- package/dist/lib/account-info/account-info.component.js +155 -0
- package/dist/lib/account-info/account-info.component.js.map +1 -0
- package/dist/lib/appearance-settings/appearance-settings.component.d.ts +15 -0
- package/dist/lib/appearance-settings/appearance-settings.component.d.ts.map +1 -0
- package/dist/lib/appearance-settings/appearance-settings.component.js +79 -0
- package/dist/lib/appearance-settings/appearance-settings.component.js.map +1 -0
- package/dist/lib/application-settings/application-settings.component.d.ts +113 -0
- package/dist/lib/application-settings/application-settings.component.d.ts.map +1 -0
- package/dist/lib/application-settings/application-settings.component.js +520 -0
- package/dist/lib/application-settings/application-settings.component.js.map +1 -0
- package/dist/lib/general-settings/general-settings.component.d.ts +14 -0
- package/dist/lib/general-settings/general-settings.component.d.ts.map +1 -0
- package/dist/lib/general-settings/general-settings.component.js +50 -0
- package/dist/lib/general-settings/general-settings.component.js.map +1 -0
- package/dist/lib/module.d.ts +31 -28
- package/dist/lib/module.d.ts.map +1 -1
- package/dist/lib/module.js +64 -33
- package/dist/lib/module.js.map +1 -1
- package/dist/lib/settings/settings.component.d.ts +5 -14
- package/dist/lib/settings/settings.component.d.ts.map +1 -1
- package/dist/lib/settings/settings.component.js +141 -417
- package/dist/lib/settings/settings.component.js.map +1 -1
- package/dist/lib/sql-logging/sql-logging.component.d.ts +1 -1
- package/package.json +19 -20
|
@@ -0,0 +1,520 @@
|
|
|
1
|
+
import { Component } from '@angular/core';
|
|
2
|
+
import { Metadata, RunView, LogError, LogStatus } from '@memberjunction/core';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@memberjunction/ng-base-application";
|
|
5
|
+
import * as i2 from "@memberjunction/ng-shared";
|
|
6
|
+
import * as i3 from "@memberjunction/ng-shared-generic";
|
|
7
|
+
const _forTrack0 = ($index, $item) => $item.App.ID;
|
|
8
|
+
function ApplicationSettingsComponent_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
9
|
+
i0.ɵɵelementStart(0, "div", 3);
|
|
10
|
+
i0.ɵɵelement(1, "mj-loading", 6);
|
|
11
|
+
i0.ɵɵelementEnd();
|
|
12
|
+
} }
|
|
13
|
+
function ApplicationSettingsComponent_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
14
|
+
i0.ɵɵelementStart(0, "div", 4);
|
|
15
|
+
i0.ɵɵelement(1, "i", 7);
|
|
16
|
+
i0.ɵɵelementStart(2, "span");
|
|
17
|
+
i0.ɵɵtext(3);
|
|
18
|
+
i0.ɵɵelementEnd()();
|
|
19
|
+
} if (rf & 2) {
|
|
20
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
21
|
+
i0.ɵɵadvance(3);
|
|
22
|
+
i0.ɵɵtextInterpolate(ctx_r0.ErrorMessage);
|
|
23
|
+
} }
|
|
24
|
+
function ApplicationSettingsComponent_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
25
|
+
i0.ɵɵelementStart(0, "div", 5);
|
|
26
|
+
i0.ɵɵelement(1, "i", 8);
|
|
27
|
+
i0.ɵɵelementStart(2, "span");
|
|
28
|
+
i0.ɵɵtext(3);
|
|
29
|
+
i0.ɵɵelementEnd()();
|
|
30
|
+
} if (rf & 2) {
|
|
31
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
32
|
+
i0.ɵɵadvance(3);
|
|
33
|
+
i0.ɵɵtextInterpolate(ctx_r0.SuccessMessage);
|
|
34
|
+
} }
|
|
35
|
+
function ApplicationSettingsComponent_Conditional_8_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
36
|
+
i0.ɵɵelementStart(0, "div", 16);
|
|
37
|
+
i0.ɵɵelement(1, "i", 8);
|
|
38
|
+
i0.ɵɵelementStart(2, "span");
|
|
39
|
+
i0.ɵɵtext(3, "All applications are selected");
|
|
40
|
+
i0.ɵɵelementEnd()();
|
|
41
|
+
} }
|
|
42
|
+
function ApplicationSettingsComponent_Conditional_8_For_11_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
43
|
+
i0.ɵɵelementStart(0, "span", 30);
|
|
44
|
+
i0.ɵɵtext(1);
|
|
45
|
+
i0.ɵɵelementEnd();
|
|
46
|
+
} if (rf & 2) {
|
|
47
|
+
const item_r4 = i0.ɵɵnextContext().$implicit;
|
|
48
|
+
i0.ɵɵadvance();
|
|
49
|
+
i0.ɵɵtextInterpolate(item_r4.App.Description);
|
|
50
|
+
} }
|
|
51
|
+
function ApplicationSettingsComponent_Conditional_8_For_11_Template(rf, ctx) { if (rf & 1) {
|
|
52
|
+
const _r3 = i0.ɵɵgetCurrentView();
|
|
53
|
+
i0.ɵɵelementStart(0, "div", 26);
|
|
54
|
+
i0.ɵɵlistener("click", function ApplicationSettingsComponent_Conditional_8_For_11_Template_div_click_0_listener() { const item_r4 = i0.ɵɵrestoreView(_r3).$implicit; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.AddApp(item_r4)); });
|
|
55
|
+
i0.ɵɵelementStart(1, "div", 27);
|
|
56
|
+
i0.ɵɵelement(2, "i");
|
|
57
|
+
i0.ɵɵelementEnd();
|
|
58
|
+
i0.ɵɵelementStart(3, "div", 28)(4, "span", 29);
|
|
59
|
+
i0.ɵɵtext(5);
|
|
60
|
+
i0.ɵɵelementEnd();
|
|
61
|
+
i0.ɵɵtemplate(6, ApplicationSettingsComponent_Conditional_8_For_11_Conditional_6_Template, 2, 1, "span", 30);
|
|
62
|
+
i0.ɵɵelementEnd();
|
|
63
|
+
i0.ɵɵelementStart(7, "button", 31);
|
|
64
|
+
i0.ɵɵlistener("click", function ApplicationSettingsComponent_Conditional_8_For_11_Template_button_click_7_listener($event) { const item_r4 = i0.ɵɵrestoreView(_r3).$implicit; const ctx_r0 = i0.ɵɵnextContext(2); ctx_r0.AddApp(item_r4); return i0.ɵɵresetView($event.stopPropagation()); });
|
|
65
|
+
i0.ɵɵelement(8, "i", 32);
|
|
66
|
+
i0.ɵɵelementEnd()();
|
|
67
|
+
} if (rf & 2) {
|
|
68
|
+
const item_r4 = ctx.$implicit;
|
|
69
|
+
i0.ɵɵadvance(2);
|
|
70
|
+
i0.ɵɵclassMap(item_r4.App.Icon || "fa-solid fa-window-maximize");
|
|
71
|
+
i0.ɵɵadvance(3);
|
|
72
|
+
i0.ɵɵtextInterpolate(item_r4.App.Name);
|
|
73
|
+
i0.ɵɵadvance();
|
|
74
|
+
i0.ɵɵconditional(item_r4.App.Description ? 6 : -1);
|
|
75
|
+
} }
|
|
76
|
+
function ApplicationSettingsComponent_Conditional_8_Conditional_20_Template(rf, ctx) { if (rf & 1) {
|
|
77
|
+
i0.ɵɵelementStart(0, "div", 16);
|
|
78
|
+
i0.ɵɵelement(1, "i", 33);
|
|
79
|
+
i0.ɵɵelementStart(2, "span");
|
|
80
|
+
i0.ɵɵtext(3, "Add applications from the list");
|
|
81
|
+
i0.ɵɵelementEnd()();
|
|
82
|
+
} }
|
|
83
|
+
function ApplicationSettingsComponent_Conditional_8_For_22_Template(rf, ctx) { if (rf & 1) {
|
|
84
|
+
const _r5 = i0.ɵɵgetCurrentView();
|
|
85
|
+
i0.ɵɵelementStart(0, "div", 34);
|
|
86
|
+
i0.ɵɵlistener("dragstart", function ApplicationSettingsComponent_Conditional_8_For_22_Template_div_dragstart_0_listener($event) { const ctx_r5 = i0.ɵɵrestoreView(_r5); const item_r7 = ctx_r5.$implicit; const ɵ$index_97_r8 = ctx_r5.$index; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.OnDragStart($event, item_r7, ɵ$index_97_r8)); })("dragenter", function ApplicationSettingsComponent_Conditional_8_For_22_Template_div_dragenter_0_listener($event) { const ɵ$index_97_r8 = i0.ɵɵrestoreView(_r5).$index; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.OnDragEnter($event, ɵ$index_97_r8)); })("dragend", function ApplicationSettingsComponent_Conditional_8_For_22_Template_div_dragend_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.OnDragEnd()); })("drop", function ApplicationSettingsComponent_Conditional_8_For_22_Template_div_drop_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.OnDrop($event)); });
|
|
87
|
+
i0.ɵɵelementStart(1, "div", 35);
|
|
88
|
+
i0.ɵɵelement(2, "i", 36);
|
|
89
|
+
i0.ɵɵelementEnd();
|
|
90
|
+
i0.ɵɵelementStart(3, "div", 27);
|
|
91
|
+
i0.ɵɵelement(4, "i");
|
|
92
|
+
i0.ɵɵelementEnd();
|
|
93
|
+
i0.ɵɵelementStart(5, "div", 28)(6, "span", 29);
|
|
94
|
+
i0.ɵɵtext(7);
|
|
95
|
+
i0.ɵɵelementEnd();
|
|
96
|
+
i0.ɵɵelementStart(8, "span", 37);
|
|
97
|
+
i0.ɵɵtext(9);
|
|
98
|
+
i0.ɵɵelementEnd()();
|
|
99
|
+
i0.ɵɵelementStart(10, "div", 38)(11, "button", 39);
|
|
100
|
+
i0.ɵɵlistener("click", function ApplicationSettingsComponent_Conditional_8_For_22_Template_button_click_11_listener() { const item_r7 = i0.ɵɵrestoreView(_r5).$implicit; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.MoveUp(item_r7)); });
|
|
101
|
+
i0.ɵɵelement(12, "i", 40);
|
|
102
|
+
i0.ɵɵelementEnd();
|
|
103
|
+
i0.ɵɵelementStart(13, "button", 41);
|
|
104
|
+
i0.ɵɵlistener("click", function ApplicationSettingsComponent_Conditional_8_For_22_Template_button_click_13_listener() { const item_r7 = i0.ɵɵrestoreView(_r5).$implicit; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.MoveDown(item_r7)); });
|
|
105
|
+
i0.ɵɵelement(14, "i", 42);
|
|
106
|
+
i0.ɵɵelementEnd();
|
|
107
|
+
i0.ɵɵelementStart(15, "button", 43);
|
|
108
|
+
i0.ɵɵlistener("click", function ApplicationSettingsComponent_Conditional_8_For_22_Template_button_click_15_listener() { const item_r7 = i0.ɵɵrestoreView(_r5).$implicit; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.RemoveApp(item_r7)); });
|
|
109
|
+
i0.ɵɵelement(16, "i", 44);
|
|
110
|
+
i0.ɵɵelementEnd()()();
|
|
111
|
+
} if (rf & 2) {
|
|
112
|
+
const item_r7 = ctx.$implicit;
|
|
113
|
+
const ɵ$index_97_r8 = ctx.$index;
|
|
114
|
+
const ɵ$count_97_r9 = ctx.$count;
|
|
115
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
116
|
+
i0.ɵɵclassProp("drop-target", ctx_r0.IsDropTarget(ɵ$index_97_r8))("dirty", item_r7.IsDirty);
|
|
117
|
+
i0.ɵɵadvance(4);
|
|
118
|
+
i0.ɵɵclassMap(item_r7.App.Icon || "fa-solid fa-window-maximize");
|
|
119
|
+
i0.ɵɵadvance(3);
|
|
120
|
+
i0.ɵɵtextInterpolate(item_r7.App.Name);
|
|
121
|
+
i0.ɵɵadvance(2);
|
|
122
|
+
i0.ɵɵtextInterpolate1("Position ", ɵ$index_97_r8 + 1, "");
|
|
123
|
+
i0.ɵɵadvance(2);
|
|
124
|
+
i0.ɵɵproperty("disabled", ɵ$index_97_r8 === 0);
|
|
125
|
+
i0.ɵɵadvance(2);
|
|
126
|
+
i0.ɵɵproperty("disabled", ɵ$index_97_r8 === ɵ$count_97_r9 - 1);
|
|
127
|
+
} }
|
|
128
|
+
function ApplicationSettingsComponent_Conditional_8_Conditional_28_Template(rf, ctx) { if (rf & 1) {
|
|
129
|
+
i0.ɵɵelement(0, "i", 45);
|
|
130
|
+
i0.ɵɵtext(1, " Saving... ");
|
|
131
|
+
} }
|
|
132
|
+
function ApplicationSettingsComponent_Conditional_8_Conditional_29_Template(rf, ctx) { if (rf & 1) {
|
|
133
|
+
i0.ɵɵelement(0, "i", 46);
|
|
134
|
+
i0.ɵɵtext(1, " Save Changes ");
|
|
135
|
+
} }
|
|
136
|
+
function ApplicationSettingsComponent_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
137
|
+
const _r2 = i0.ɵɵgetCurrentView();
|
|
138
|
+
i0.ɵɵelementStart(0, "div", 9)(1, "div", 10)(2, "div", 11)(3, "h3", 12);
|
|
139
|
+
i0.ɵɵelement(4, "i", 13);
|
|
140
|
+
i0.ɵɵtext(5, " Available Applications ");
|
|
141
|
+
i0.ɵɵelementEnd();
|
|
142
|
+
i0.ɵɵelementStart(6, "span", 14);
|
|
143
|
+
i0.ɵɵtext(7);
|
|
144
|
+
i0.ɵɵelementEnd()();
|
|
145
|
+
i0.ɵɵelementStart(8, "div", 15);
|
|
146
|
+
i0.ɵɵtemplate(9, ApplicationSettingsComponent_Conditional_8_Conditional_9_Template, 4, 0, "div", 16);
|
|
147
|
+
i0.ɵɵrepeaterCreate(10, ApplicationSettingsComponent_Conditional_8_For_11_Template, 9, 4, "div", 17, _forTrack0);
|
|
148
|
+
i0.ɵɵelementEnd()();
|
|
149
|
+
i0.ɵɵelementStart(12, "div", 18)(13, "div", 11)(14, "h3", 12);
|
|
150
|
+
i0.ɵɵelement(15, "i", 19);
|
|
151
|
+
i0.ɵɵtext(16, " Your Applications ");
|
|
152
|
+
i0.ɵɵelementEnd();
|
|
153
|
+
i0.ɵɵelementStart(17, "span", 14);
|
|
154
|
+
i0.ɵɵtext(18);
|
|
155
|
+
i0.ɵɵelementEnd()();
|
|
156
|
+
i0.ɵɵelementStart(19, "div", 20);
|
|
157
|
+
i0.ɵɵlistener("dragover", function ApplicationSettingsComponent_Conditional_8_Template_div_dragover_19_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.OnDragOver($event)); });
|
|
158
|
+
i0.ɵɵtemplate(20, ApplicationSettingsComponent_Conditional_8_Conditional_20_Template, 4, 0, "div", 16);
|
|
159
|
+
i0.ɵɵrepeaterCreate(21, ApplicationSettingsComponent_Conditional_8_For_22_Template, 17, 10, "div", 21, _forTrack0);
|
|
160
|
+
i0.ɵɵelementEnd()()();
|
|
161
|
+
i0.ɵɵelementStart(23, "div", 22)(24, "button", 23);
|
|
162
|
+
i0.ɵɵlistener("click", function ApplicationSettingsComponent_Conditional_8_Template_button_click_24_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.Reset()); });
|
|
163
|
+
i0.ɵɵelement(25, "i", 24);
|
|
164
|
+
i0.ɵɵtext(26, " Reset ");
|
|
165
|
+
i0.ɵɵelementEnd();
|
|
166
|
+
i0.ɵɵelementStart(27, "button", 25);
|
|
167
|
+
i0.ɵɵlistener("click", function ApplicationSettingsComponent_Conditional_8_Template_button_click_27_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.Save()); });
|
|
168
|
+
i0.ɵɵtemplate(28, ApplicationSettingsComponent_Conditional_8_Conditional_28_Template, 2, 0)(29, ApplicationSettingsComponent_Conditional_8_Conditional_29_Template, 2, 0);
|
|
169
|
+
i0.ɵɵelementEnd()();
|
|
170
|
+
} if (rf & 2) {
|
|
171
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
172
|
+
i0.ɵɵadvance(7);
|
|
173
|
+
i0.ɵɵtextInterpolate(ctx_r0.AvailableApps.length);
|
|
174
|
+
i0.ɵɵadvance(2);
|
|
175
|
+
i0.ɵɵconditional(ctx_r0.AvailableApps.length === 0 ? 9 : -1);
|
|
176
|
+
i0.ɵɵadvance();
|
|
177
|
+
i0.ɵɵrepeater(ctx_r0.AvailableApps);
|
|
178
|
+
i0.ɵɵadvance(8);
|
|
179
|
+
i0.ɵɵtextInterpolate(ctx_r0.ActiveApps.length);
|
|
180
|
+
i0.ɵɵadvance(2);
|
|
181
|
+
i0.ɵɵconditional(ctx_r0.ActiveApps.length === 0 ? 20 : -1);
|
|
182
|
+
i0.ɵɵadvance();
|
|
183
|
+
i0.ɵɵrepeater(ctx_r0.ActiveApps);
|
|
184
|
+
i0.ɵɵadvance(3);
|
|
185
|
+
i0.ɵɵproperty("disabled", !ctx_r0.HasChanges() || ctx_r0.IsSaving);
|
|
186
|
+
i0.ɵɵadvance(3);
|
|
187
|
+
i0.ɵɵproperty("disabled", !ctx_r0.HasChanges() || ctx_r0.IsSaving);
|
|
188
|
+
i0.ɵɵadvance();
|
|
189
|
+
i0.ɵɵconditional(ctx_r0.IsSaving ? 28 : 29);
|
|
190
|
+
} }
|
|
191
|
+
/**
|
|
192
|
+
* Inline component for configuring user's application visibility and order.
|
|
193
|
+
* Allows users to:
|
|
194
|
+
* - Select which applications to show in the app switcher
|
|
195
|
+
* - Reorder applications via drag-and-drop
|
|
196
|
+
*/
|
|
197
|
+
export class ApplicationSettingsComponent {
|
|
198
|
+
appManager;
|
|
199
|
+
sharedService;
|
|
200
|
+
cdr;
|
|
201
|
+
// All available apps from the system
|
|
202
|
+
AllApps = [];
|
|
203
|
+
// User's selected apps (active and ordered)
|
|
204
|
+
ActiveApps = [];
|
|
205
|
+
// Available apps not yet selected
|
|
206
|
+
AvailableApps = [];
|
|
207
|
+
IsLoading = false;
|
|
208
|
+
IsSaving = false;
|
|
209
|
+
ErrorMessage = '';
|
|
210
|
+
SuccessMessage = '';
|
|
211
|
+
// Native drag-and-drop state
|
|
212
|
+
draggedItem = null;
|
|
213
|
+
draggedIndex = -1;
|
|
214
|
+
dropTargetIndex = -1;
|
|
215
|
+
constructor(appManager, sharedService, cdr) {
|
|
216
|
+
this.appManager = appManager;
|
|
217
|
+
this.sharedService = sharedService;
|
|
218
|
+
this.cdr = cdr;
|
|
219
|
+
}
|
|
220
|
+
async ngOnInit() {
|
|
221
|
+
await this.LoadConfiguration();
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Loads the user's current app configuration
|
|
225
|
+
*/
|
|
226
|
+
async LoadConfiguration() {
|
|
227
|
+
this.IsLoading = true;
|
|
228
|
+
this.ErrorMessage = '';
|
|
229
|
+
try {
|
|
230
|
+
const md = new Metadata();
|
|
231
|
+
const rv = new RunView();
|
|
232
|
+
// Load all system apps from ApplicationManager
|
|
233
|
+
const systemApps = this.appManager.GetAllSystemApps();
|
|
234
|
+
// Load user's UserApplication records
|
|
235
|
+
const userAppsResult = await rv.RunView({
|
|
236
|
+
EntityName: 'User Applications',
|
|
237
|
+
ExtraFilter: `UserID = '${md.CurrentUser.ID}'`,
|
|
238
|
+
OrderBy: 'Sequence, Application',
|
|
239
|
+
ResultType: 'entity_object'
|
|
240
|
+
});
|
|
241
|
+
const userApps = userAppsResult.Success ? userAppsResult.Results : [];
|
|
242
|
+
// Build app config items
|
|
243
|
+
this.AllApps = this.BuildAppConfigItems(systemApps, userApps);
|
|
244
|
+
// Separate into active (selected) and available (unselected)
|
|
245
|
+
this.RefreshAppLists();
|
|
246
|
+
}
|
|
247
|
+
catch (error) {
|
|
248
|
+
this.ErrorMessage = 'Failed to load app configuration. Please try again.';
|
|
249
|
+
LogError('Error loading app configuration:', undefined, error instanceof Error ? error.message : String(error));
|
|
250
|
+
}
|
|
251
|
+
finally {
|
|
252
|
+
this.IsLoading = false;
|
|
253
|
+
this.cdr.detectChanges();
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Builds app config items by matching system apps with user's UserApplication records
|
|
258
|
+
*/
|
|
259
|
+
BuildAppConfigItems(systemApps, userApps) {
|
|
260
|
+
const items = [];
|
|
261
|
+
for (const app of systemApps) {
|
|
262
|
+
const userApp = userApps.find(ua => ua.ApplicationID === app.ID);
|
|
263
|
+
items.push({
|
|
264
|
+
App: app,
|
|
265
|
+
UserAppId: userApp?.ID || null,
|
|
266
|
+
Sequence: userApp?.Sequence ?? 999,
|
|
267
|
+
IsActive: userApp?.IsActive ?? false,
|
|
268
|
+
IsDirty: false
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
return items;
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Separates apps into active and available lists based on IsActive state
|
|
275
|
+
*/
|
|
276
|
+
RefreshAppLists() {
|
|
277
|
+
this.ActiveApps = this.AllApps
|
|
278
|
+
.filter(item => item.IsActive)
|
|
279
|
+
.sort((a, b) => a.Sequence - b.Sequence);
|
|
280
|
+
this.AvailableApps = this.AllApps
|
|
281
|
+
.filter(item => !item.IsActive)
|
|
282
|
+
.sort((a, b) => a.App.Name.localeCompare(b.App.Name));
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Native drag start handler
|
|
286
|
+
*/
|
|
287
|
+
OnDragStart(event, item, index) {
|
|
288
|
+
this.draggedItem = item;
|
|
289
|
+
this.draggedIndex = index;
|
|
290
|
+
if (event.dataTransfer) {
|
|
291
|
+
event.dataTransfer.effectAllowed = 'move';
|
|
292
|
+
event.dataTransfer.setData('text/plain', index.toString());
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Native drag over handler - allows drop
|
|
297
|
+
*/
|
|
298
|
+
OnDragOver(event) {
|
|
299
|
+
event.preventDefault();
|
|
300
|
+
if (event.dataTransfer) {
|
|
301
|
+
event.dataTransfer.dropEffect = 'move';
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* Native drag enter handler - tracks drop target
|
|
306
|
+
*/
|
|
307
|
+
OnDragEnter(event, index) {
|
|
308
|
+
event.preventDefault();
|
|
309
|
+
this.dropTargetIndex = index;
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* Native drag end handler - cleanup
|
|
313
|
+
*/
|
|
314
|
+
OnDragEnd() {
|
|
315
|
+
this.draggedItem = null;
|
|
316
|
+
this.draggedIndex = -1;
|
|
317
|
+
this.dropTargetIndex = -1;
|
|
318
|
+
}
|
|
319
|
+
/**
|
|
320
|
+
* Native drop handler - reorder items
|
|
321
|
+
*/
|
|
322
|
+
OnDrop(event) {
|
|
323
|
+
event.preventDefault();
|
|
324
|
+
if (this.draggedIndex >= 0 && this.dropTargetIndex >= 0 && this.draggedIndex !== this.dropTargetIndex) {
|
|
325
|
+
// Remove item from old position
|
|
326
|
+
const [movedItem] = this.ActiveApps.splice(this.draggedIndex, 1);
|
|
327
|
+
// Insert at new position
|
|
328
|
+
this.ActiveApps.splice(this.dropTargetIndex, 0, movedItem);
|
|
329
|
+
// Update sequences based on new order
|
|
330
|
+
this.ActiveApps.forEach((item, idx) => {
|
|
331
|
+
if (item.Sequence !== idx) {
|
|
332
|
+
item.Sequence = idx;
|
|
333
|
+
item.IsDirty = true;
|
|
334
|
+
}
|
|
335
|
+
});
|
|
336
|
+
this.cdr.detectChanges();
|
|
337
|
+
}
|
|
338
|
+
// Reset drag state
|
|
339
|
+
this.OnDragEnd();
|
|
340
|
+
}
|
|
341
|
+
/**
|
|
342
|
+
* Adds an app to the user's active list
|
|
343
|
+
*/
|
|
344
|
+
AddApp(item) {
|
|
345
|
+
item.IsActive = true;
|
|
346
|
+
item.Sequence = this.ActiveApps.length;
|
|
347
|
+
item.IsDirty = true;
|
|
348
|
+
this.RefreshAppLists();
|
|
349
|
+
}
|
|
350
|
+
/**
|
|
351
|
+
* Removes an app from the user's active list
|
|
352
|
+
*/
|
|
353
|
+
RemoveApp(item) {
|
|
354
|
+
item.IsActive = false;
|
|
355
|
+
item.Sequence = 999;
|
|
356
|
+
item.IsDirty = true;
|
|
357
|
+
this.RefreshAppLists();
|
|
358
|
+
// Resequence remaining active apps
|
|
359
|
+
this.ActiveApps.forEach((activeItem, index) => {
|
|
360
|
+
if (activeItem.Sequence !== index) {
|
|
361
|
+
activeItem.Sequence = index;
|
|
362
|
+
activeItem.IsDirty = true;
|
|
363
|
+
}
|
|
364
|
+
});
|
|
365
|
+
}
|
|
366
|
+
/**
|
|
367
|
+
* Moves an app up in the order
|
|
368
|
+
*/
|
|
369
|
+
MoveUp(item) {
|
|
370
|
+
const index = this.ActiveApps.indexOf(item);
|
|
371
|
+
if (index > 0) {
|
|
372
|
+
const prevItem = this.ActiveApps[index - 1];
|
|
373
|
+
// Swap sequences
|
|
374
|
+
const tempSeq = item.Sequence;
|
|
375
|
+
item.Sequence = prevItem.Sequence;
|
|
376
|
+
prevItem.Sequence = tempSeq;
|
|
377
|
+
item.IsDirty = true;
|
|
378
|
+
prevItem.IsDirty = true;
|
|
379
|
+
// Re-sort
|
|
380
|
+
this.ActiveApps = [...this.ActiveApps].sort((a, b) => a.Sequence - b.Sequence);
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
/**
|
|
384
|
+
* Moves an app down in the order
|
|
385
|
+
*/
|
|
386
|
+
MoveDown(item) {
|
|
387
|
+
const index = this.ActiveApps.indexOf(item);
|
|
388
|
+
if (index < this.ActiveApps.length - 1) {
|
|
389
|
+
const nextItem = this.ActiveApps[index + 1];
|
|
390
|
+
// Swap sequences
|
|
391
|
+
const tempSeq = item.Sequence;
|
|
392
|
+
item.Sequence = nextItem.Sequence;
|
|
393
|
+
nextItem.Sequence = tempSeq;
|
|
394
|
+
item.IsDirty = true;
|
|
395
|
+
nextItem.IsDirty = true;
|
|
396
|
+
// Re-sort
|
|
397
|
+
this.ActiveApps = [...this.ActiveApps].sort((a, b) => a.Sequence - b.Sequence);
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
/**
|
|
401
|
+
* Checks if there are any unsaved changes
|
|
402
|
+
*/
|
|
403
|
+
HasChanges() {
|
|
404
|
+
return this.AllApps.some(item => item.IsDirty);
|
|
405
|
+
}
|
|
406
|
+
/**
|
|
407
|
+
* Saves the user's app configuration
|
|
408
|
+
*/
|
|
409
|
+
async Save() {
|
|
410
|
+
if (!this.HasChanges()) {
|
|
411
|
+
return;
|
|
412
|
+
}
|
|
413
|
+
this.IsSaving = true;
|
|
414
|
+
this.ErrorMessage = '';
|
|
415
|
+
this.SuccessMessage = '';
|
|
416
|
+
try {
|
|
417
|
+
const md = new Metadata();
|
|
418
|
+
// Process each app config item
|
|
419
|
+
for (const item of this.AllApps) {
|
|
420
|
+
if (!item.IsDirty)
|
|
421
|
+
continue;
|
|
422
|
+
if (item.UserAppId) {
|
|
423
|
+
// Update existing UserApplication record
|
|
424
|
+
await this.UpdateUserApplication(md, item);
|
|
425
|
+
}
|
|
426
|
+
else if (item.IsActive) {
|
|
427
|
+
// Create new UserApplication record (only if active)
|
|
428
|
+
await this.CreateUserApplication(md, item);
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
// Reload the ApplicationManager to reflect changes
|
|
432
|
+
LogStatus('User app configuration saved, reloading ApplicationManager...');
|
|
433
|
+
await this.appManager.ReloadUserApplications();
|
|
434
|
+
this.SuccessMessage = 'App configuration saved successfully!';
|
|
435
|
+
this.sharedService.CreateSimpleNotification(this.SuccessMessage, 'success', 3000);
|
|
436
|
+
// Clear dirty flags
|
|
437
|
+
this.AllApps.forEach(item => item.IsDirty = false);
|
|
438
|
+
}
|
|
439
|
+
catch (error) {
|
|
440
|
+
this.ErrorMessage = 'Failed to save configuration. Please try again.';
|
|
441
|
+
LogError('Error saving app configuration:', undefined, error instanceof Error ? error.message : String(error));
|
|
442
|
+
}
|
|
443
|
+
finally {
|
|
444
|
+
this.IsSaving = false;
|
|
445
|
+
this.cdr.detectChanges();
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
/**
|
|
449
|
+
* Updates an existing UserApplication record
|
|
450
|
+
*/
|
|
451
|
+
async UpdateUserApplication(md, item) {
|
|
452
|
+
const userApp = await md.GetEntityObject('User Applications');
|
|
453
|
+
await userApp.Load(item.UserAppId);
|
|
454
|
+
userApp.Sequence = item.Sequence;
|
|
455
|
+
userApp.IsActive = item.IsActive;
|
|
456
|
+
const saved = await userApp.Save();
|
|
457
|
+
if (!saved) {
|
|
458
|
+
throw new Error(`Failed to update UserApplication for ${item.App.Name}: ${userApp.LatestResult}`);
|
|
459
|
+
}
|
|
460
|
+
item.IsDirty = false;
|
|
461
|
+
LogStatus(`Updated UserApplication for ${item.App.Name}: sequence=${item.Sequence}, isActive=${item.IsActive}`);
|
|
462
|
+
}
|
|
463
|
+
/**
|
|
464
|
+
* Creates a new UserApplication record
|
|
465
|
+
*/
|
|
466
|
+
async CreateUserApplication(md, item) {
|
|
467
|
+
const userApp = await md.GetEntityObject('User Applications');
|
|
468
|
+
userApp.NewRecord();
|
|
469
|
+
userApp.UserID = md.CurrentUser.ID;
|
|
470
|
+
userApp.ApplicationID = item.App.ID;
|
|
471
|
+
userApp.Sequence = item.Sequence;
|
|
472
|
+
userApp.IsActive = item.IsActive;
|
|
473
|
+
const saved = await userApp.Save();
|
|
474
|
+
if (!saved) {
|
|
475
|
+
throw new Error(`Failed to create UserApplication for ${item.App.Name}: ${userApp.LatestResult}`);
|
|
476
|
+
}
|
|
477
|
+
item.UserAppId = userApp.ID;
|
|
478
|
+
item.IsDirty = false;
|
|
479
|
+
LogStatus(`Created UserApplication for ${item.App.Name}: sequence=${item.Sequence}`);
|
|
480
|
+
}
|
|
481
|
+
/**
|
|
482
|
+
* Resets all changes and reloads the configuration
|
|
483
|
+
*/
|
|
484
|
+
async Reset() {
|
|
485
|
+
await this.LoadConfiguration();
|
|
486
|
+
this.SuccessMessage = '';
|
|
487
|
+
}
|
|
488
|
+
/**
|
|
489
|
+
* Check if drop target is active
|
|
490
|
+
*/
|
|
491
|
+
IsDropTarget(index) {
|
|
492
|
+
return this.dropTargetIndex === index;
|
|
493
|
+
}
|
|
494
|
+
static ɵfac = function ApplicationSettingsComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ApplicationSettingsComponent)(i0.ɵɵdirectiveInject(i1.ApplicationManager), i0.ɵɵdirectiveInject(i2.SharedService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
|
|
495
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ApplicationSettingsComponent, selectors: [["mj-application-settings"]], decls: 9, vars: 4, consts: [[1, "application-settings"], [1, "section-title"], [1, "section-description"], [1, "loading-container"], [1, "message", "error"], [1, "message", "success"], ["text", "Loading applications..."], [1, "fa-solid", "fa-exclamation-circle"], [1, "fa-solid", "fa-check-circle"], [1, "app-config-layout"], [1, "app-panel", "available-panel"], [1, "panel-header"], [1, "panel-title"], [1, "fa-solid", "fa-grid-2"], [1, "panel-count"], [1, "panel-content"], [1, "empty-state"], [1, "app-item"], [1, "app-panel", "selected-panel"], [1, "fa-solid", "fa-star"], [1, "panel-content", 3, "dragover"], ["draggable", "true", 1, "app-item", "selected", 3, "drop-target", "dirty"], [1, "action-bar"], [1, "btn", "btn-secondary", 3, "click", "disabled"], [1, "fa-solid", "fa-undo"], [1, "btn", "btn-primary", 3, "click", "disabled"], [1, "app-item", 3, "click"], [1, "app-icon"], [1, "app-info"], [1, "app-name"], [1, "app-desc"], ["title", "Add to selected", 1, "app-action", "add-btn", 3, "click"], [1, "fa-solid", "fa-plus"], [1, "fa-solid", "fa-arrow-left"], ["draggable", "true", 1, "app-item", "selected", 3, "dragstart", "dragenter", "dragend", "drop"], ["title", "Drag to reorder", 1, "drag-handle"], [1, "fa-solid", "fa-grip-vertical"], [1, "app-sequence"], [1, "app-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", "Remove", 1, "action-btn", "remove-btn", 3, "click"], [1, "fa-solid", "fa-times"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "fa-solid", "fa-save"]], template: function ApplicationSettingsComponent_Template(rf, ctx) { if (rf & 1) {
|
|
496
|
+
i0.ɵɵelementStart(0, "div", 0)(1, "h2", 1);
|
|
497
|
+
i0.ɵɵtext(2, "Applications");
|
|
498
|
+
i0.ɵɵelementEnd();
|
|
499
|
+
i0.ɵɵelementStart(3, "p", 2);
|
|
500
|
+
i0.ɵɵtext(4, "Choose which applications appear in your app switcher and set their order");
|
|
501
|
+
i0.ɵɵelementEnd();
|
|
502
|
+
i0.ɵɵtemplate(5, ApplicationSettingsComponent_Conditional_5_Template, 2, 0, "div", 3)(6, ApplicationSettingsComponent_Conditional_6_Template, 4, 1, "div", 4)(7, ApplicationSettingsComponent_Conditional_7_Template, 4, 1, "div", 5)(8, ApplicationSettingsComponent_Conditional_8_Template, 30, 7);
|
|
503
|
+
i0.ɵɵelementEnd();
|
|
504
|
+
} if (rf & 2) {
|
|
505
|
+
i0.ɵɵadvance(5);
|
|
506
|
+
i0.ɵɵconditional(ctx.IsLoading ? 5 : -1);
|
|
507
|
+
i0.ɵɵadvance();
|
|
508
|
+
i0.ɵɵconditional(ctx.ErrorMessage && !ctx.IsLoading ? 6 : -1);
|
|
509
|
+
i0.ɵɵadvance();
|
|
510
|
+
i0.ɵɵconditional(ctx.SuccessMessage && !ctx.IsLoading ? 7 : -1);
|
|
511
|
+
i0.ɵɵadvance();
|
|
512
|
+
i0.ɵɵconditional(!ctx.IsLoading && !ctx.ErrorMessage ? 8 : -1);
|
|
513
|
+
} }, dependencies: [i3.LoadingComponent], styles: [".application-settings[_ngcontent-%COMP%] {\n padding: 0;\n}\n\n.section-title[_ngcontent-%COMP%] {\n font-size: 1.5rem;\n font-weight: 600;\n margin: 0 0 0.5rem 0;\n color: var(--mj-text-primary, #1a1a1a);\n}\n\n.section-description[_ngcontent-%COMP%] {\n font-size: 0.875rem;\n color: var(--mj-text-secondary, #666);\n margin: 0 0 1.5rem 0;\n}\n\n.loading-container[_ngcontent-%COMP%] {\n display: flex;\n justify-content: center;\n padding: 3rem;\n}\n\n.message[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n padding: 1rem;\n border-radius: 8px;\n font-size: 0.875rem;\n margin-bottom: 1rem;\n}\n\n.message.error[_ngcontent-%COMP%] {\n background-color: var(--mj-error-bg, #fef2f2);\n color: var(--mj-error-text, #dc2626);\n}\n\n.message.success[_ngcontent-%COMP%] {\n background-color: var(--mj-success-bg, #dcfce7);\n color: var(--mj-success-text, #16a34a);\n}\n\n.app-config-layout[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 1.5rem;\n margin-bottom: 1.5rem;\n}\n\n@media (max-width: 768px) {\n .app-config-layout[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n}\n\n.app-panel[_ngcontent-%COMP%] {\n background: var(--mj-surface-color, #fff);\n border: 1px solid var(--mj-border-color, #e5e7eb);\n border-radius: 12px;\n overflow: hidden;\n}\n\n.panel-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 1rem 1.25rem;\n background: var(--mj-surface-secondary, #f9fafb);\n border-bottom: 1px solid var(--mj-border-color, #e5e7eb);\n}\n\n.panel-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n font-size: 0.875rem;\n font-weight: 600;\n margin: 0;\n color: var(--mj-text-primary, #1f2937);\n}\n\n.panel-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-primary-color, #3b82f6);\n}\n\n.panel-count[_ngcontent-%COMP%] {\n background: var(--mj-primary-color, #3b82f6);\n color: white;\n font-size: 0.75rem;\n font-weight: 600;\n padding: 0.125rem 0.5rem;\n border-radius: 9999px;\n}\n\n.panel-content[_ngcontent-%COMP%] {\n padding: 0.5rem;\n max-height: 400px;\n overflow-y: auto;\n}\n\n.empty-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 2rem;\n color: var(--mj-text-secondary, #6b7280);\n text-align: center;\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 1.5rem;\n margin-bottom: 0.5rem;\n opacity: 0.5;\n}\n\n.app-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n padding: 0.75rem;\n border-radius: 8px;\n cursor: pointer;\n transition: background-color 0.15s ease;\n}\n\n.app-item[_ngcontent-%COMP%]:hover {\n background-color: var(--mj-hover-bg, #f3f4f6);\n}\n\n.app-item.selected[_ngcontent-%COMP%] {\n cursor: grab;\n}\n\n.app-item.selected[_ngcontent-%COMP%]:active {\n cursor: grabbing;\n}\n\n.app-item.drop-target[_ngcontent-%COMP%] {\n background-color: var(--mj-primary-light, #dbeafe);\n border: 2px dashed var(--mj-primary-color, #3b82f6);\n}\n\n.app-item.dirty[_ngcontent-%COMP%] {\n background-color: var(--mj-warning-bg-light, #fefce8);\n}\n\n.drag-handle[_ngcontent-%COMP%] {\n color: var(--mj-text-tertiary, #9ca3af);\n cursor: grab;\n padding: 0.25rem;\n}\n\n.drag-handle[_ngcontent-%COMP%]:active {\n cursor: grabbing;\n}\n\n.app-icon[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 2.5rem;\n height: 2.5rem;\n background: var(--mj-primary-light, #dbeafe);\n color: var(--mj-primary-color, #3b82f6);\n border-radius: 8px;\n flex-shrink: 0;\n}\n\n.app-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.app-name[_ngcontent-%COMP%] {\n display: block;\n font-weight: 500;\n color: var(--mj-text-primary, #1f2937);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.app-desc[_ngcontent-%COMP%] {\n display: block;\n font-size: 0.75rem;\n color: var(--mj-text-secondary, #6b7280);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.app-sequence[_ngcontent-%COMP%] {\n display: block;\n font-size: 0.75rem;\n color: var(--mj-text-tertiary, #9ca3af);\n}\n\n.app-action[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 2rem;\n height: 2rem;\n border: none;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.add-btn[_ngcontent-%COMP%] {\n background: var(--mj-success-bg, #dcfce7);\n color: var(--mj-success-text, #16a34a);\n}\n\n.add-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-success-color, #16a34a);\n color: white;\n}\n\n.app-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 0.25rem;\n}\n\n.action-btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 1.75rem;\n height: 1.75rem;\n border: none;\n background: transparent;\n color: var(--mj-text-secondary, #6b7280);\n border-radius: 4px;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.action-btn[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: var(--mj-hover-bg, #f3f4f6);\n color: var(--mj-text-primary, #1f2937);\n}\n\n.action-btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.3;\n cursor: not-allowed;\n}\n\n.action-btn.remove-btn[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: var(--mj-error-bg, #fef2f2);\n color: var(--mj-error-text, #dc2626);\n}\n\n.action-bar[_ngcontent-%COMP%] {\n display: flex;\n justify-content: flex-end;\n gap: 0.75rem;\n padding-top: 1rem;\n border-top: 1px solid var(--mj-border-color, #e5e7eb);\n}\n\n.btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 0.5rem;\n padding: 0.625rem 1.25rem;\n border-radius: 8px;\n font-size: 0.875rem;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s ease;\n border: none;\n}\n\n.btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.btn-secondary[_ngcontent-%COMP%] {\n background: var(--mj-surface-secondary, #f3f4f6);\n color: var(--mj-text-primary, #1f2937);\n}\n\n.btn-secondary[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: var(--mj-hover-bg, #e5e7eb);\n}\n\n.btn-primary[_ngcontent-%COMP%] {\n background: var(--mj-primary-color, #3b82f6);\n color: white;\n}\n\n.btn-primary[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: var(--mj-primary-dark, #2563eb);\n}"] });
|
|
514
|
+
}
|
|
515
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ApplicationSettingsComponent, [{
|
|
516
|
+
type: Component,
|
|
517
|
+
args: [{ selector: 'mj-application-settings', template: "<div class=\"application-settings\">\n <h2 class=\"section-title\">Applications</h2>\n <p class=\"section-description\">Choose which applications appear in your app switcher and set their order</p>\n\n @if (IsLoading) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading applications...\"></mj-loading>\n </div>\n }\n\n @if (ErrorMessage && !IsLoading) {\n <div class=\"message error\">\n <i class=\"fa-solid fa-exclamation-circle\"></i>\n <span>{{ ErrorMessage }}</span>\n </div>\n }\n\n @if (SuccessMessage && !IsLoading) {\n <div class=\"message success\">\n <i class=\"fa-solid fa-check-circle\"></i>\n <span>{{ SuccessMessage }}</span>\n </div>\n }\n\n @if (!IsLoading && !ErrorMessage) {\n <div class=\"app-config-layout\">\n <!-- Available Apps Panel -->\n <div class=\"app-panel available-panel\">\n <div class=\"panel-header\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-grid-2\"></i>\n Available Applications\n </h3>\n <span class=\"panel-count\">{{ AvailableApps.length }}</span>\n </div>\n <div class=\"panel-content\">\n @if (AvailableApps.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-check-circle\"></i>\n <span>All applications are selected</span>\n </div>\n }\n @for (item of AvailableApps; track item.App.ID) {\n <div class=\"app-item\" (click)=\"AddApp(item)\">\n <div class=\"app-icon\">\n <i [class]=\"item.App.Icon || 'fa-solid fa-window-maximize'\"></i>\n </div>\n <div class=\"app-info\">\n <span class=\"app-name\">{{ item.App.Name }}</span>\n @if (item.App.Description) {\n <span class=\"app-desc\">{{ item.App.Description }}</span>\n }\n </div>\n <button\n class=\"app-action add-btn\"\n (click)=\"AddApp(item); $event.stopPropagation()\"\n title=\"Add to selected\"\n >\n <i class=\"fa-solid fa-plus\"></i>\n </button>\n </div>\n }\n </div>\n </div>\n\n <!-- Selected Apps Panel -->\n <div class=\"app-panel selected-panel\">\n <div class=\"panel-header\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-star\"></i>\n Your Applications\n </h3>\n <span class=\"panel-count\">{{ ActiveApps.length }}</span>\n </div>\n <div class=\"panel-content\" (dragover)=\"OnDragOver($event)\">\n @if (ActiveApps.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n <span>Add applications from the list</span>\n </div>\n }\n @for (item of ActiveApps; track item.App.ID; let i = $index; let first = $first; let last = $last) {\n <div\n class=\"app-item selected\"\n [class.drop-target]=\"IsDropTarget(i)\"\n [class.dirty]=\"item.IsDirty\"\n draggable=\"true\"\n (dragstart)=\"OnDragStart($event, item, i)\"\n (dragenter)=\"OnDragEnter($event, i)\"\n (dragend)=\"OnDragEnd()\"\n (drop)=\"OnDrop($event)\"\n >\n <div class=\"drag-handle\" title=\"Drag to reorder\">\n <i class=\"fa-solid fa-grip-vertical\"></i>\n </div>\n <div class=\"app-icon\">\n <i [class]=\"item.App.Icon || 'fa-solid fa-window-maximize'\"></i>\n </div>\n <div class=\"app-info\">\n <span class=\"app-name\">{{ item.App.Name }}</span>\n <span class=\"app-sequence\">Position {{ i + 1 }}</span>\n </div>\n <div class=\"app-actions\">\n <button\n class=\"action-btn\"\n [disabled]=\"first\"\n (click)=\"MoveUp(item)\"\n title=\"Move up\"\n >\n <i class=\"fa-solid fa-chevron-up\"></i>\n </button>\n <button\n class=\"action-btn\"\n [disabled]=\"last\"\n (click)=\"MoveDown(item)\"\n title=\"Move down\"\n >\n <i class=\"fa-solid fa-chevron-down\"></i>\n </button>\n <button\n class=\"action-btn remove-btn\"\n (click)=\"RemoveApp(item)\"\n title=\"Remove\"\n >\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n\n <!-- Action Buttons -->\n <div class=\"action-bar\">\n <button\n class=\"btn btn-secondary\"\n (click)=\"Reset()\"\n [disabled]=\"!HasChanges() || IsSaving\"\n >\n <i class=\"fa-solid fa-undo\"></i>\n Reset\n </button>\n <button\n class=\"btn btn-primary\"\n (click)=\"Save()\"\n [disabled]=\"!HasChanges() || IsSaving\"\n >\n @if (IsSaving) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Saving...\n } @else {\n <i class=\"fa-solid fa-save\"></i>\n Save Changes\n }\n </button>\n </div>\n }\n</div>\n", styles: [".application-settings {\n padding: 0;\n}\n\n.section-title {\n font-size: 1.5rem;\n font-weight: 600;\n margin: 0 0 0.5rem 0;\n color: var(--mj-text-primary, #1a1a1a);\n}\n\n.section-description {\n font-size: 0.875rem;\n color: var(--mj-text-secondary, #666);\n margin: 0 0 1.5rem 0;\n}\n\n.loading-container {\n display: flex;\n justify-content: center;\n padding: 3rem;\n}\n\n.message {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n padding: 1rem;\n border-radius: 8px;\n font-size: 0.875rem;\n margin-bottom: 1rem;\n}\n\n.message.error {\n background-color: var(--mj-error-bg, #fef2f2);\n color: var(--mj-error-text, #dc2626);\n}\n\n.message.success {\n background-color: var(--mj-success-bg, #dcfce7);\n color: var(--mj-success-text, #16a34a);\n}\n\n.app-config-layout {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 1.5rem;\n margin-bottom: 1.5rem;\n}\n\n@media (max-width: 768px) {\n .app-config-layout {\n grid-template-columns: 1fr;\n }\n}\n\n.app-panel {\n background: var(--mj-surface-color, #fff);\n border: 1px solid var(--mj-border-color, #e5e7eb);\n border-radius: 12px;\n overflow: hidden;\n}\n\n.panel-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 1rem 1.25rem;\n background: var(--mj-surface-secondary, #f9fafb);\n border-bottom: 1px solid var(--mj-border-color, #e5e7eb);\n}\n\n.panel-title {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n font-size: 0.875rem;\n font-weight: 600;\n margin: 0;\n color: var(--mj-text-primary, #1f2937);\n}\n\n.panel-title i {\n color: var(--mj-primary-color, #3b82f6);\n}\n\n.panel-count {\n background: var(--mj-primary-color, #3b82f6);\n color: white;\n font-size: 0.75rem;\n font-weight: 600;\n padding: 0.125rem 0.5rem;\n border-radius: 9999px;\n}\n\n.panel-content {\n padding: 0.5rem;\n max-height: 400px;\n overflow-y: auto;\n}\n\n.empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 2rem;\n color: var(--mj-text-secondary, #6b7280);\n text-align: center;\n}\n\n.empty-state i {\n font-size: 1.5rem;\n margin-bottom: 0.5rem;\n opacity: 0.5;\n}\n\n.app-item {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n padding: 0.75rem;\n border-radius: 8px;\n cursor: pointer;\n transition: background-color 0.15s ease;\n}\n\n.app-item:hover {\n background-color: var(--mj-hover-bg, #f3f4f6);\n}\n\n.app-item.selected {\n cursor: grab;\n}\n\n.app-item.selected:active {\n cursor: grabbing;\n}\n\n.app-item.drop-target {\n background-color: var(--mj-primary-light, #dbeafe);\n border: 2px dashed var(--mj-primary-color, #3b82f6);\n}\n\n.app-item.dirty {\n background-color: var(--mj-warning-bg-light, #fefce8);\n}\n\n.drag-handle {\n color: var(--mj-text-tertiary, #9ca3af);\n cursor: grab;\n padding: 0.25rem;\n}\n\n.drag-handle:active {\n cursor: grabbing;\n}\n\n.app-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 2.5rem;\n height: 2.5rem;\n background: var(--mj-primary-light, #dbeafe);\n color: var(--mj-primary-color, #3b82f6);\n border-radius: 8px;\n flex-shrink: 0;\n}\n\n.app-info {\n flex: 1;\n min-width: 0;\n}\n\n.app-name {\n display: block;\n font-weight: 500;\n color: var(--mj-text-primary, #1f2937);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.app-desc {\n display: block;\n font-size: 0.75rem;\n color: var(--mj-text-secondary, #6b7280);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.app-sequence {\n display: block;\n font-size: 0.75rem;\n color: var(--mj-text-tertiary, #9ca3af);\n}\n\n.app-action {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 2rem;\n height: 2rem;\n border: none;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.add-btn {\n background: var(--mj-success-bg, #dcfce7);\n color: var(--mj-success-text, #16a34a);\n}\n\n.add-btn:hover {\n background: var(--mj-success-color, #16a34a);\n color: white;\n}\n\n.app-actions {\n display: flex;\n gap: 0.25rem;\n}\n\n.action-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 1.75rem;\n height: 1.75rem;\n border: none;\n background: transparent;\n color: var(--mj-text-secondary, #6b7280);\n border-radius: 4px;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.action-btn:hover:not(:disabled) {\n background: var(--mj-hover-bg, #f3f4f6);\n color: var(--mj-text-primary, #1f2937);\n}\n\n.action-btn:disabled {\n opacity: 0.3;\n cursor: not-allowed;\n}\n\n.action-btn.remove-btn:hover:not(:disabled) {\n background: var(--mj-error-bg, #fef2f2);\n color: var(--mj-error-text, #dc2626);\n}\n\n.action-bar {\n display: flex;\n justify-content: flex-end;\n gap: 0.75rem;\n padding-top: 1rem;\n border-top: 1px solid var(--mj-border-color, #e5e7eb);\n}\n\n.btn {\n display: inline-flex;\n align-items: center;\n gap: 0.5rem;\n padding: 0.625rem 1.25rem;\n border-radius: 8px;\n font-size: 0.875rem;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s ease;\n border: none;\n}\n\n.btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.btn-secondary {\n background: var(--mj-surface-secondary, #f3f4f6);\n color: var(--mj-text-primary, #1f2937);\n}\n\n.btn-secondary:hover:not(:disabled) {\n background: var(--mj-hover-bg, #e5e7eb);\n}\n\n.btn-primary {\n background: var(--mj-primary-color, #3b82f6);\n color: white;\n}\n\n.btn-primary:hover:not(:disabled) {\n background: var(--mj-primary-dark, #2563eb);\n}\n"] }]
|
|
518
|
+
}], () => [{ type: i1.ApplicationManager }, { type: i2.SharedService }, { type: i0.ChangeDetectorRef }], null); })();
|
|
519
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ApplicationSettingsComponent, { className: "ApplicationSettingsComponent", filePath: "src/lib/application-settings/application-settings.component.ts", lineNumber: 29 }); })();
|
|
520
|
+
//# sourceMappingURL=application-settings.component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"application-settings.component.js","sourceRoot":"","sources":["../../../src/lib/application-settings/application-settings.component.ts","../../../src/lib/application-settings/application-settings.component.html"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
/**
|
|
3
|
+
* Container component for the General settings tab.
|
|
4
|
+
* Wraps Profile Information and Account Info sections.
|
|
5
|
+
*/
|
|
6
|
+
export declare class GeneralSettingsComponent {
|
|
7
|
+
ProfileExpanded: boolean;
|
|
8
|
+
AccountExpanded: boolean;
|
|
9
|
+
ToggleProfile(): void;
|
|
10
|
+
ToggleAccount(): void;
|
|
11
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<GeneralSettingsComponent, never>;
|
|
12
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<GeneralSettingsComponent, "mj-general-settings", never, {}, {}, never, never, false, never>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=general-settings.component.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"general-settings.component.d.ts","sourceRoot":"","sources":["../../../src/lib/general-settings/general-settings.component.ts"],"names":[],"mappings":";AAEA;;;GAGG;AACH,qBAKa,wBAAwB;IAEnC,eAAe,UAAQ;IACvB,eAAe,UAAQ;IAEvB,aAAa,IAAI,IAAI;IAIrB,aAAa,IAAI,IAAI;yCATV,wBAAwB;2CAAxB,wBAAwB;CAYpC"}
|