@memberjunction/ng-explorer-core 6.2.0-edge.0 → 6.2.0-edge.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/app-routing.module.d.ts +23 -1
- package/dist/app-routing.module.d.ts.map +1 -1
- package/dist/app-routing.module.js +50 -14
- package/dist/app-routing.module.js.map +1 -1
- package/dist/generated/lazy-feature-config.d.ts +1 -1
- package/dist/generated/lazy-feature-config.d.ts.map +1 -1
- package/dist/generated/lazy-feature-config.js +12 -1
- package/dist/generated/lazy-feature-config.js.map +1 -1
- package/dist/lib/command-palette/command-palette.component.d.ts +7 -1
- package/dist/lib/command-palette/command-palette.component.d.ts.map +1 -1
- package/dist/lib/command-palette/command-palette.component.js +28 -14
- package/dist/lib/command-palette/command-palette.component.js.map +1 -1
- package/dist/lib/conversation-feedback/conversation-feedback.d.ts +103 -13
- package/dist/lib/conversation-feedback/conversation-feedback.d.ts.map +1 -1
- package/dist/lib/conversation-feedback/conversation-feedback.js +219 -67
- package/dist/lib/conversation-feedback/conversation-feedback.js.map +1 -1
- package/dist/lib/dashboard-preferences-dialog/dashboard-preferences-dialog.component.d.ts +64 -10
- package/dist/lib/dashboard-preferences-dialog/dashboard-preferences-dialog.component.d.ts.map +1 -1
- package/dist/lib/dashboard-preferences-dialog/dashboard-preferences-dialog.component.js +172 -66
- package/dist/lib/dashboard-preferences-dialog/dashboard-preferences-dialog.component.js.map +1 -1
- package/dist/lib/generic/resource-container-component.d.ts +19 -5
- package/dist/lib/generic/resource-container-component.d.ts.map +1 -1
- package/dist/lib/generic/resource-container-component.js +43 -13
- package/dist/lib/generic/resource-container-component.js.map +1 -1
- package/dist/lib/guards/entities.guard.d.ts +4 -0
- package/dist/lib/guards/entities.guard.d.ts.map +1 -1
- package/dist/lib/guards/entities.guard.js +10 -2
- package/dist/lib/guards/entities.guard.js.map +1 -1
- package/dist/lib/identity-claims/claim-redeem.component.d.ts +4 -0
- package/dist/lib/identity-claims/claim-redeem.component.d.ts.map +1 -1
- package/dist/lib/identity-claims/claim-redeem.component.js +10 -2
- package/dist/lib/identity-claims/claim-redeem.component.js.map +1 -1
- package/dist/lib/oauth/oauth-callback.component.d.ts +4 -0
- package/dist/lib/oauth/oauth-callback.component.d.ts.map +1 -1
- package/dist/lib/oauth/oauth-callback.component.js +10 -2
- package/dist/lib/oauth/oauth-callback.component.js.map +1 -1
- package/dist/lib/profile/profile-dialog.component.d.ts.map +1 -1
- package/dist/lib/profile/profile-dialog.component.js +194 -191
- package/dist/lib/profile/profile-dialog.component.js.map +1 -1
- package/dist/lib/resource-wrappers/artifact-resource.component.d.ts +20 -2
- package/dist/lib/resource-wrappers/artifact-resource.component.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/artifact-resource.component.js +33 -9
- package/dist/lib/resource-wrappers/artifact-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/chat-collections-resource.component.d.ts +80 -10
- package/dist/lib/resource-wrappers/chat-collections-resource.component.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/chat-collections-resource.component.js +168 -56
- package/dist/lib/resource-wrappers/chat-collections-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/chat-conversations-resource.component.d.ts +199 -25
- package/dist/lib/resource-wrappers/chat-conversations-resource.component.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/chat-conversations-resource.component.js +534 -182
- package/dist/lib/resource-wrappers/chat-conversations-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/chat-deeplink-params.d.ts +2 -0
- package/dist/lib/resource-wrappers/chat-deeplink-params.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/chat-deeplink-params.js +5 -1
- package/dist/lib/resource-wrappers/chat-deeplink-params.js.map +1 -1
- package/dist/lib/resource-wrappers/chat-search-routing.d.ts +25 -0
- package/dist/lib/resource-wrappers/chat-search-routing.d.ts.map +1 -0
- package/dist/lib/resource-wrappers/chat-search-routing.js +24 -0
- package/dist/lib/resource-wrappers/chat-search-routing.js.map +1 -0
- package/dist/lib/resource-wrappers/chat-tasks-resource.component.d.ts +14 -2
- package/dist/lib/resource-wrappers/chat-tasks-resource.component.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/chat-tasks-resource.component.js +32 -8
- package/dist/lib/resource-wrappers/chat-tasks-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/compose-email-fallback.d.ts +46 -0
- package/dist/lib/resource-wrappers/compose-email-fallback.d.ts.map +1 -0
- package/dist/lib/resource-wrappers/compose-email-fallback.js +62 -0
- package/dist/lib/resource-wrappers/compose-email-fallback.js.map +1 -0
- package/dist/lib/resource-wrappers/dashboard-resource.component.d.ts +54 -8
- package/dist/lib/resource-wrappers/dashboard-resource.component.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/dashboard-resource.component.js +138 -46
- package/dist/lib/resource-wrappers/dashboard-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/livekit-room-resource.component.d.ts +223 -30
- package/dist/lib/resource-wrappers/livekit-room-resource.component.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/livekit-room-resource.component.js +438 -118
- package/dist/lib/resource-wrappers/livekit-room-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/search-results-resource.component.d.ts +7 -3
- package/dist/lib/resource-wrappers/search-results-resource.component.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/search-results-resource.component.js +23 -15
- package/dist/lib/resource-wrappers/search-results-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/view-resource.component.d.ts +74 -11
- package/dist/lib/resource-wrappers/view-resource.component.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/view-resource.component.js +214 -68
- package/dist/lib/resource-wrappers/view-resource.component.js.map +1 -1
- package/dist/lib/services/server-connectivity.service.d.ts +9 -4
- package/dist/lib/services/server-connectivity.service.d.ts.map +1 -1
- package/dist/lib/services/server-connectivity.service.js +56 -12
- package/dist/lib/services/server-connectivity.service.js.map +1 -1
- package/dist/lib/services/startup-validation.service.d.ts +4 -0
- package/dist/lib/services/startup-validation.service.d.ts.map +1 -1
- package/dist/lib/services/startup-validation.service.js +10 -2
- package/dist/lib/services/startup-validation.service.js.map +1 -1
- package/dist/lib/services/system-validation.service.d.ts +13 -1
- package/dist/lib/services/system-validation.service.d.ts.map +1 -1
- package/dist/lib/services/system-validation.service.js +29 -5
- package/dist/lib/services/system-validation.service.js.map +1 -1
- package/dist/lib/shell/components/dialogs/app-access-dialog.component.d.ts +54 -4
- package/dist/lib/shell/components/dialogs/app-access-dialog.component.d.ts.map +1 -1
- package/dist/lib/shell/components/dialogs/app-access-dialog.component.js +130 -40
- package/dist/lib/shell/components/dialogs/app-access-dialog.component.js.map +1 -1
- package/dist/lib/shell/components/header/app-nav.component.d.ts +29 -1
- package/dist/lib/shell/components/header/app-nav.component.d.ts.map +1 -1
- package/dist/lib/shell/components/header/app-nav.component.js +56 -12
- package/dist/lib/shell/components/header/app-nav.component.js.map +1 -1
- package/dist/lib/shell/components/header/app-switcher.component.d.ts +33 -5
- package/dist/lib/shell/components/header/app-switcher.component.d.ts.map +1 -1
- package/dist/lib/shell/components/header/app-switcher.component.js +85 -29
- package/dist/lib/shell/components/header/app-switcher.component.js.map +1 -1
- package/dist/lib/shell/components/record-open/record-origin-crumb.component.js +1 -1
- package/dist/lib/shell/components/record-open/record-origin-crumb.component.js.map +1 -1
- package/dist/lib/shell/components/tabs/component-cache-manager.d.ts +50 -6
- package/dist/lib/shell/components/tabs/component-cache-manager.d.ts.map +1 -1
- package/dist/lib/shell/components/tabs/component-cache-manager.js +95 -22
- package/dist/lib/shell/components/tabs/component-cache-manager.js.map +1 -1
- package/dist/lib/shell/components/tabs/tab-container.component.d.ts +91 -9
- package/dist/lib/shell/components/tabs/tab-container.component.d.ts.map +1 -1
- package/dist/lib/shell/components/tabs/tab-container.component.js +257 -101
- package/dist/lib/shell/components/tabs/tab-container.component.js.map +1 -1
- package/dist/lib/shell/loading-themes.d.ts +16 -12
- package/dist/lib/shell/loading-themes.d.ts.map +1 -1
- package/dist/lib/shell/loading-themes.js +145 -137
- package/dist/lib/shell/loading-themes.js.map +1 -1
- package/dist/lib/shell/readiness-beacon.d.ts +2 -0
- package/dist/lib/shell/readiness-beacon.d.ts.map +1 -1
- package/dist/lib/shell/readiness-beacon.js +5 -1
- package/dist/lib/shell/readiness-beacon.js.map +1 -1
- package/dist/lib/shell/services/about-dialog.service.d.ts +6 -0
- package/dist/lib/shell/services/about-dialog.service.d.ts.map +1 -1
- package/dist/lib/shell/services/about-dialog.service.js +16 -4
- package/dist/lib/shell/services/about-dialog.service.js.map +1 -1
- package/dist/lib/shell/services/profile-dialog.service.d.ts +6 -0
- package/dist/lib/shell/services/profile-dialog.service.d.ts.map +1 -1
- package/dist/lib/shell/services/profile-dialog.service.js +16 -4
- package/dist/lib/shell/services/profile-dialog.service.js.map +1 -1
- package/dist/lib/shell/services/user-sharing-center-dialog.service.d.ts +6 -0
- package/dist/lib/shell/services/user-sharing-center-dialog.service.d.ts.map +1 -1
- package/dist/lib/shell/services/user-sharing-center-dialog.service.js +15 -3
- package/dist/lib/shell/services/user-sharing-center-dialog.service.js.map +1 -1
- package/dist/lib/shell/shell.component.d.ts +264 -39
- package/dist/lib/shell/shell.component.d.ts.map +1 -1
- package/dist/lib/shell/shell.component.js +697 -294
- package/dist/lib/shell/shell.component.js.map +1 -1
- package/dist/lib/single-dashboard/Components/add-item/add-item.component.d.ts +64 -8
- package/dist/lib/single-dashboard/Components/add-item/add-item.component.d.ts.map +1 -1
- package/dist/lib/single-dashboard/Components/add-item/add-item.component.js +129 -37
- package/dist/lib/single-dashboard/Components/add-item/add-item.component.js.map +1 -1
- package/dist/lib/single-dashboard/Components/delete-item/delete-item.component.d.ts +26 -2
- package/dist/lib/single-dashboard/Components/delete-item/delete-item.component.d.ts.map +1 -1
- package/dist/lib/single-dashboard/Components/delete-item/delete-item.component.js +48 -10
- package/dist/lib/single-dashboard/Components/delete-item/delete-item.component.js.map +1 -1
- package/dist/lib/single-dashboard/Components/edit-dashboard/edit-dashboard.component.d.ts +84 -6
- package/dist/lib/single-dashboard/Components/edit-dashboard/edit-dashboard.component.d.ts.map +1 -1
- package/dist/lib/single-dashboard/Components/edit-dashboard/edit-dashboard.component.js +133 -29
- package/dist/lib/single-dashboard/Components/edit-dashboard/edit-dashboard.component.js.map +1 -1
- package/dist/lib/single-dashboard/single-dashboard.component.d.ts +173 -23
- package/dist/lib/single-dashboard/single-dashboard.component.d.ts.map +1 -1
- package/dist/lib/single-dashboard/single-dashboard.component.js +383 -109
- package/dist/lib/single-dashboard/single-dashboard.component.js.map +1 -1
- package/dist/lib/single-list-detail/single-list-detail.component.d.ts +383 -55
- package/dist/lib/single-list-detail/single-list-detail.component.d.ts.map +1 -1
- package/dist/lib/single-list-detail/single-list-detail.component.js +962 -326
- package/dist/lib/single-list-detail/single-list-detail.component.js.map +1 -1
- package/dist/lib/single-query/single-query.component.d.ts +22 -2
- package/dist/lib/single-query/single-query.component.d.ts.map +1 -1
- package/dist/lib/single-query/single-query.component.js +40 -10
- package/dist/lib/single-query/single-query.component.js.map +1 -1
- package/dist/lib/single-record/single-record.component.d.ts +41 -3
- package/dist/lib/single-record/single-record.component.d.ts.map +1 -1
- package/dist/lib/single-record/single-record.component.js +71 -11
- package/dist/lib/single-record/single-record.component.js.map +1 -1
- package/dist/lib/single-search-result/single-search-result.component.d.ts +23 -3
- package/dist/lib/single-search-result/single-search-result.component.d.ts.map +1 -1
- package/dist/lib/single-search-result/single-search-result.component.js +42 -12
- package/dist/lib/single-search-result/single-search-result.component.js.map +1 -1
- package/dist/lib/system-validation/system-validation-banner.component.d.ts +12 -2
- package/dist/lib/system-validation/system-validation-banner.component.d.ts.map +1 -1
- package/dist/lib/system-validation/system-validation-banner.component.js +25 -5
- package/dist/lib/system-validation/system-validation-banner.component.js.map +1 -1
- package/dist/lib/user-menu/user-menu.types.d.ts +4 -0
- package/dist/lib/user-menu/user-menu.types.d.ts.map +1 -1
- package/dist/lib/user-menu/user-menu.types.js +10 -2
- package/dist/lib/user-menu/user-menu.types.js.map +1 -1
- package/dist/lib/user-notifications/user-notifications.component.d.ts +59 -7
- package/dist/lib/user-notifications/user-notifications.component.d.ts.map +1 -1
- package/dist/lib/user-notifications/user-notifications.component.js +151 -47
- package/dist/lib/user-notifications/user-notifications.component.js.map +1 -1
- package/dist/lib/user-profile/user-profile.component.d.ts +3 -2
- package/dist/lib/user-profile/user-profile.component.d.ts.map +1 -1
- package/dist/lib/user-profile/user-profile.component.js +5 -4
- package/dist/lib/user-profile/user-profile.component.js.map +1 -1
- package/package.json +52 -52
|
@@ -8,8 +8,10 @@ import { Component, ViewChild } from '@angular/core';
|
|
|
8
8
|
import { BaseResourceComponent } from '@memberjunction/ng-shared';
|
|
9
9
|
import { ViewInfo } from '@memberjunction/core-entities';
|
|
10
10
|
import { RegisterClass, MJGlobal, MJEventType, UUIDsEqual } from '@memberjunction/global';
|
|
11
|
-
import { CompositeKey } from '@memberjunction/core';
|
|
11
|
+
import { CompositeKey, BaseEntity } from '@memberjunction/core';
|
|
12
|
+
import { ExportColumnTypeForSQLType } from '@memberjunction/ng-entity-viewer';
|
|
12
13
|
import { GraphQLListsClient } from '@memberjunction/graphql-dataprovider';
|
|
14
|
+
import { debounceTime, filter, takeUntil } from 'rxjs/operators';
|
|
13
15
|
import * as i0 from "@angular/core";
|
|
14
16
|
import * as i1 from "@memberjunction/ng-export-service";
|
|
15
17
|
import * as i2 from "@memberjunction/ng-shared-generic";
|
|
@@ -140,23 +142,103 @@ function UserViewResource_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
|
140
142
|
let UserViewResource = class UserViewResource extends BaseResourceComponent {
|
|
141
143
|
cdr;
|
|
142
144
|
exportService;
|
|
143
|
-
|
|
144
|
-
|
|
145
|
+
ContainerElement;
|
|
146
|
+
/** @deprecated Use {@link ContainerElement}. */
|
|
147
|
+
get containerElement() {
|
|
148
|
+
return this.ContainerElement;
|
|
149
|
+
}
|
|
150
|
+
/** @deprecated Use {@link ContainerElement}. */
|
|
151
|
+
set containerElement(value) {
|
|
152
|
+
this.ContainerElement = value;
|
|
153
|
+
}
|
|
154
|
+
EntityViewerRef;
|
|
155
|
+
/** @deprecated Use {@link EntityViewerRef}. */
|
|
156
|
+
get entityViewerRef() {
|
|
157
|
+
return this.EntityViewerRef;
|
|
158
|
+
}
|
|
159
|
+
/** @deprecated Use {@link EntityViewerRef}. */
|
|
160
|
+
set entityViewerRef(value) {
|
|
161
|
+
this.EntityViewerRef = value;
|
|
162
|
+
}
|
|
145
163
|
isLoading = false;
|
|
146
164
|
errorMessage = null;
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
165
|
+
EntityInfo = null;
|
|
166
|
+
/** @deprecated Use {@link EntityInfo}. */
|
|
167
|
+
get entityInfo() {
|
|
168
|
+
return this.EntityInfo;
|
|
169
|
+
}
|
|
170
|
+
/** @deprecated Use {@link EntityInfo}. */
|
|
171
|
+
set entityInfo(value) {
|
|
172
|
+
this.EntityInfo = value;
|
|
173
|
+
}
|
|
174
|
+
ViewEntity = null;
|
|
175
|
+
/** @deprecated Use {@link ViewEntity}. */
|
|
176
|
+
get viewEntity() {
|
|
177
|
+
return this.ViewEntity;
|
|
178
|
+
}
|
|
179
|
+
/** @deprecated Use {@link ViewEntity}. */
|
|
180
|
+
set viewEntity(value) {
|
|
181
|
+
this.ViewEntity = value;
|
|
182
|
+
}
|
|
183
|
+
GridState = null;
|
|
184
|
+
/** @deprecated Use {@link GridState}. */
|
|
185
|
+
get gridState() {
|
|
186
|
+
return this.GridState;
|
|
187
|
+
}
|
|
188
|
+
/** @deprecated Use {@link GridState}. */
|
|
189
|
+
set gridState(value) {
|
|
190
|
+
this.GridState = value;
|
|
191
|
+
}
|
|
150
192
|
// Export state. The header Export button is a FALLBACK shown only for view types that don't
|
|
151
193
|
// provide their own export UI (Cards / Map / Timeline). The Grid renderer has its own in-toolbar
|
|
152
194
|
// Export (full result set + format/sampling dialog), so we suppress this one there to avoid a
|
|
153
195
|
// duplicate/confusing second button — while keeping export available for every other view type.
|
|
154
|
-
|
|
155
|
-
|
|
196
|
+
IsExporting = false;
|
|
197
|
+
/** @deprecated Use {@link IsExporting}. */
|
|
198
|
+
get isExporting() {
|
|
199
|
+
return this.IsExporting;
|
|
200
|
+
}
|
|
201
|
+
/** @deprecated Use {@link IsExporting}. */
|
|
202
|
+
set isExporting(value) {
|
|
203
|
+
this.IsExporting = value;
|
|
204
|
+
}
|
|
205
|
+
ShowFallbackExportButton = false;
|
|
206
|
+
/** @deprecated Use {@link ShowFallbackExportButton}. */
|
|
207
|
+
get showFallbackExportButton() {
|
|
208
|
+
return this.ShowFallbackExportButton;
|
|
209
|
+
}
|
|
210
|
+
/** @deprecated Use {@link ShowFallbackExportButton}. */
|
|
211
|
+
set showFallbackExportButton(value) {
|
|
212
|
+
this.ShowFallbackExportButton = value;
|
|
213
|
+
}
|
|
156
214
|
// Save-as-list dialog state
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
215
|
+
SaveAsListDialogVisible = false;
|
|
216
|
+
/** @deprecated Use {@link SaveAsListDialogVisible}. */
|
|
217
|
+
get saveAsListDialogVisible() {
|
|
218
|
+
return this.SaveAsListDialogVisible;
|
|
219
|
+
}
|
|
220
|
+
/** @deprecated Use {@link SaveAsListDialogVisible}. */
|
|
221
|
+
set saveAsListDialogVisible(value) {
|
|
222
|
+
this.SaveAsListDialogVisible = value;
|
|
223
|
+
}
|
|
224
|
+
SaveAsListRecordCount = null;
|
|
225
|
+
/** @deprecated Use {@link SaveAsListRecordCount}. */
|
|
226
|
+
get saveAsListRecordCount() {
|
|
227
|
+
return this.SaveAsListRecordCount;
|
|
228
|
+
}
|
|
229
|
+
/** @deprecated Use {@link SaveAsListRecordCount}. */
|
|
230
|
+
set saveAsListRecordCount(value) {
|
|
231
|
+
this.SaveAsListRecordCount = value;
|
|
232
|
+
}
|
|
233
|
+
IsSavingAsList = false;
|
|
234
|
+
/** @deprecated Use {@link IsSavingAsList}. */
|
|
235
|
+
get isSavingAsList() {
|
|
236
|
+
return this.IsSavingAsList;
|
|
237
|
+
}
|
|
238
|
+
/** @deprecated Use {@link IsSavingAsList}. */
|
|
239
|
+
set isSavingAsList(value) {
|
|
240
|
+
this.IsSavingAsList = value;
|
|
241
|
+
}
|
|
160
242
|
dataLoaded = false;
|
|
161
243
|
get metadata() { return this.ProviderToUse; }
|
|
162
244
|
constructor(cdr, exportService) {
|
|
@@ -164,6 +246,25 @@ let UserViewResource = class UserViewResource extends BaseResourceComponent {
|
|
|
164
246
|
this.cdr = cdr;
|
|
165
247
|
this.exportService = exportService;
|
|
166
248
|
}
|
|
249
|
+
ngOnInit() {
|
|
250
|
+
super.ngOnInit();
|
|
251
|
+
// Refresh when rows of this view's entity change: a local save/delete, or a server-side
|
|
252
|
+
// write announced as remote-invalidate (a clone, or another server). Debounced, so a burst
|
|
253
|
+
// of writes (a clone creating many rows) reloads the view once.
|
|
254
|
+
MJGlobal.Instance.GetEventListener()
|
|
255
|
+
.pipe(filter((event) => {
|
|
256
|
+
if (event.event !== MJEventType.ComponentEvent || event.eventCode !== BaseEntity.BaseEventCode)
|
|
257
|
+
return false;
|
|
258
|
+
const entityEvent = event.args;
|
|
259
|
+
const type = entityEvent?.type;
|
|
260
|
+
if (type !== 'save' && type !== 'delete' && type !== 'remote-invalidate')
|
|
261
|
+
return false;
|
|
262
|
+
const affectedName = (entityEvent.baseEntity?.EntityInfo?.Name ?? entityEvent.entityName)?.trim().toLowerCase();
|
|
263
|
+
return !!affectedName && affectedName === this.entityInfo?.Name?.trim().toLowerCase();
|
|
264
|
+
}), debounceTime(300), takeUntil(this.destroy$))
|
|
265
|
+
// In place: a change made elsewhere shouldn't move the user off their page or sort.
|
|
266
|
+
.subscribe(() => this.entityViewerRef?.RefreshInPlace());
|
|
267
|
+
}
|
|
167
268
|
set Data(value) {
|
|
168
269
|
const previousRecordId = super.Data?.ResourceRecordID;
|
|
169
270
|
const previousEntity = super.Data?.Configuration?.Entity;
|
|
@@ -176,9 +277,9 @@ let UserViewResource = class UserViewResource extends BaseResourceComponent {
|
|
|
176
277
|
if (!this.dataLoaded || newRecordId !== previousRecordId || newEntity !== previousEntity) {
|
|
177
278
|
this.dataLoaded = true;
|
|
178
279
|
// Reset state before loading new view
|
|
179
|
-
this.
|
|
180
|
-
this.
|
|
181
|
-
this.
|
|
280
|
+
this.EntityInfo = null;
|
|
281
|
+
this.ViewEntity = null;
|
|
282
|
+
this.GridState = null;
|
|
182
283
|
this.errorMessage = null;
|
|
183
284
|
this.loadView();
|
|
184
285
|
}
|
|
@@ -239,25 +340,25 @@ let UserViewResource = class UserViewResource extends BaseResourceComponent {
|
|
|
239
340
|
if (!view) {
|
|
240
341
|
throw new Error(`View with ID ${viewId} not found`);
|
|
241
342
|
}
|
|
242
|
-
this.
|
|
343
|
+
this.ViewEntity = view;
|
|
243
344
|
// Check permissions
|
|
244
|
-
if (!this.
|
|
345
|
+
if (!this.ViewEntity.UserCanView) {
|
|
245
346
|
throw new Error('You do not have permission to view this view');
|
|
246
347
|
}
|
|
247
348
|
// Load the entity info
|
|
248
|
-
const entity = this.metadata.Entities.find(e => UUIDsEqual(e.ID, this.
|
|
349
|
+
const entity = this.metadata.Entities.find(e => UUIDsEqual(e.ID, this.ViewEntity.EntityID));
|
|
249
350
|
if (!entity) {
|
|
250
351
|
throw new Error(`Entity for view not found`);
|
|
251
352
|
}
|
|
252
|
-
this.
|
|
353
|
+
this.EntityInfo = entity;
|
|
253
354
|
// Parse grid state if available
|
|
254
|
-
if (this.
|
|
355
|
+
if (this.ViewEntity.GridState) {
|
|
255
356
|
try {
|
|
256
|
-
this.
|
|
357
|
+
this.GridState = JSON.parse(this.ViewEntity.GridState);
|
|
257
358
|
}
|
|
258
359
|
catch (e) {
|
|
259
360
|
console.warn('Failed to parse GridState:', e);
|
|
260
|
-
this.
|
|
361
|
+
this.GridState = null;
|
|
261
362
|
}
|
|
262
363
|
}
|
|
263
364
|
// View-type + per-view-type config persistence is fully owned by mj-entity-viewer
|
|
@@ -272,25 +373,29 @@ let UserViewResource = class UserViewResource extends BaseResourceComponent {
|
|
|
272
373
|
if (!entity) {
|
|
273
374
|
throw new Error(`Entity '${entityName}' not found`);
|
|
274
375
|
}
|
|
275
|
-
this.
|
|
276
|
-
this.
|
|
277
|
-
this.
|
|
376
|
+
this.EntityInfo = entity;
|
|
377
|
+
this.ViewEntity = null;
|
|
378
|
+
this.GridState = null;
|
|
278
379
|
// For dynamic views, we could create a synthetic viewEntity with just the WhereClause
|
|
279
380
|
// but for now, we'll rely on the entity-viewer's default behavior
|
|
280
381
|
}
|
|
281
382
|
/**
|
|
282
383
|
* Handle record opened event - open in new tab
|
|
283
384
|
*/
|
|
284
|
-
|
|
385
|
+
OnRecordOpened(event) {
|
|
285
386
|
if (event && event.entity && event.compositeKey) {
|
|
286
387
|
this.navigationService.OpenEntityRecord(event.entity.Name, event.compositeKey);
|
|
287
388
|
}
|
|
288
389
|
}
|
|
390
|
+
/** @deprecated Use {@link OnRecordOpened}. */
|
|
391
|
+
onRecordOpened(event) {
|
|
392
|
+
return this.OnRecordOpened(event);
|
|
393
|
+
}
|
|
289
394
|
/**
|
|
290
395
|
* Handle a related-record navigation requested from within a view-type renderer
|
|
291
396
|
* (e.g. a foreign-key cell) - open the target record in a new tab.
|
|
292
397
|
*/
|
|
293
|
-
|
|
398
|
+
OnOpenRelatedRecord(nav) {
|
|
294
399
|
if (nav?.entityName && nav.recordKey != null) {
|
|
295
400
|
// The related entity is arbitrary, so its key column can have any name — resolve the key
|
|
296
401
|
// against its metadata rather than hardcoding `ID` via FromID.
|
|
@@ -298,17 +403,29 @@ let UserViewResource = class UserViewResource extends BaseResourceComponent {
|
|
|
298
403
|
this.navigationService.OpenEntityRecord(nav.entityName, CompositeKey.FromURLSegment(entityInfo, String(nav.recordKey)));
|
|
299
404
|
}
|
|
300
405
|
}
|
|
406
|
+
/** @deprecated Use {@link OnOpenRelatedRecord}. */
|
|
407
|
+
onOpenRelatedRecord(nav) {
|
|
408
|
+
return this.OnOpenRelatedRecord(nav);
|
|
409
|
+
}
|
|
301
410
|
/**
|
|
302
411
|
* Handle data loaded event from entity-viewer
|
|
303
412
|
*/
|
|
304
|
-
|
|
413
|
+
OnDataLoaded() {
|
|
305
414
|
this.NotifyLoadComplete();
|
|
306
415
|
this.refreshFallbackExportVisibility();
|
|
307
416
|
}
|
|
417
|
+
/** @deprecated Use {@link OnDataLoaded}. */
|
|
418
|
+
onDataLoaded() {
|
|
419
|
+
return this.OnDataLoaded();
|
|
420
|
+
}
|
|
308
421
|
/** The active view type changed — recompute whether the fallback Export button is needed. */
|
|
309
|
-
|
|
422
|
+
OnViewTypeChanged() {
|
|
310
423
|
this.refreshFallbackExportVisibility();
|
|
311
424
|
}
|
|
425
|
+
/** @deprecated Use {@link OnViewTypeChanged}. */
|
|
426
|
+
onViewTypeChanged() {
|
|
427
|
+
return this.OnViewTypeChanged();
|
|
428
|
+
}
|
|
312
429
|
/**
|
|
313
430
|
* Show the wrapper's Export button only for view types that don't ship their own export UI. The
|
|
314
431
|
* entity-viewer reports this via {@link EntityViewerComponent.ActiveViewTypeHasOwnExport} (true for
|
|
@@ -316,9 +433,9 @@ let UserViewResource = class UserViewResource extends BaseResourceComponent {
|
|
|
316
433
|
* detection to avoid an ExpressionChanged error from reading child state during a CD pass.
|
|
317
434
|
*/
|
|
318
435
|
refreshFallbackExportVisibility() {
|
|
319
|
-
const next = !!this.
|
|
320
|
-
if (next !== this.
|
|
321
|
-
this.
|
|
436
|
+
const next = !!this.EntityViewerRef && !this.EntityViewerRef.ActiveViewTypeHasOwnExport;
|
|
437
|
+
if (next !== this.ShowFallbackExportButton) {
|
|
438
|
+
this.ShowFallbackExportButton = next;
|
|
322
439
|
this.cdr.detectChanges();
|
|
323
440
|
}
|
|
324
441
|
}
|
|
@@ -327,21 +444,21 @@ let UserViewResource = class UserViewResource extends BaseResourceComponent {
|
|
|
327
444
|
* FULL result set via the entity-viewer's capped, filter/sort-aware fetch (same path the grid uses,
|
|
328
445
|
* so it's bounded and warns past the cap) and writes an Excel file.
|
|
329
446
|
*/
|
|
330
|
-
async
|
|
447
|
+
async OnExport() {
|
|
331
448
|
// Never fail silently — a "nothing happens" click is impossible to diagnose. Surface the
|
|
332
449
|
// reason both in the UI and the console.
|
|
333
|
-
if (!this.
|
|
450
|
+
if (!this.EntityInfo || !this.EntityViewerRef) {
|
|
334
451
|
console.error('[ViewResource] Export: viewer not ready', {
|
|
335
|
-
hasEntity: !!this.
|
|
452
|
+
hasEntity: !!this.EntityInfo, hasViewer: !!this.EntityViewerRef
|
|
336
453
|
});
|
|
337
454
|
this.showNotification('Export is not ready yet — try again in a moment.', 'error', 5000);
|
|
338
455
|
return;
|
|
339
456
|
}
|
|
340
|
-
this.
|
|
457
|
+
this.IsExporting = true;
|
|
341
458
|
this.cdr.detectChanges();
|
|
342
459
|
this.showNotification('Preparing your Excel export…', 'info', 2000);
|
|
343
460
|
try {
|
|
344
|
-
const rows = await this.
|
|
461
|
+
const rows = await this.EntityViewerRef.FetchAllRowsForExport();
|
|
345
462
|
if (!rows || rows.length === 0) {
|
|
346
463
|
this.showNotification('Nothing to export — the view returned no records.', 'warning', 5000);
|
|
347
464
|
return;
|
|
@@ -365,31 +482,44 @@ let UserViewResource = class UserViewResource extends BaseResourceComponent {
|
|
|
365
482
|
console.error('[ViewResource] Export error:', e);
|
|
366
483
|
}
|
|
367
484
|
finally {
|
|
368
|
-
this.
|
|
485
|
+
this.IsExporting = false;
|
|
369
486
|
this.cdr.detectChanges();
|
|
370
487
|
}
|
|
371
488
|
}
|
|
372
|
-
/**
|
|
489
|
+
/** @deprecated Use {@link OnExport}. */
|
|
490
|
+
async onExport() {
|
|
491
|
+
return this.OnExport();
|
|
492
|
+
}
|
|
493
|
+
/**
|
|
494
|
+
* Columns to export — from grid state, else the view's columns, else the entity's real fields. Each
|
|
495
|
+
* column carries its field's export type, as the grid's export does, so a date-only field writes
|
|
496
|
+
* a date cell on its stored day rather than a timestamp.
|
|
497
|
+
*/
|
|
373
498
|
buildExportColumns() {
|
|
374
|
-
if (!this.
|
|
499
|
+
if (!this.EntityInfo)
|
|
375
500
|
return [];
|
|
376
|
-
|
|
377
|
-
|
|
501
|
+
const entity = this.EntityInfo;
|
|
502
|
+
const typed = (name, displayName) => {
|
|
503
|
+
const field = entity.Fields.find(f => f.Name.toLowerCase() === name.toLowerCase());
|
|
504
|
+
return { name, displayName, dataType: ExportColumnTypeForSQLType(field?.Type) };
|
|
505
|
+
};
|
|
506
|
+
if (this.GridState?.columnSettings && this.GridState.columnSettings.length > 0) {
|
|
507
|
+
return this.GridState.columnSettings
|
|
378
508
|
.filter(col => col.hidden !== true)
|
|
379
|
-
.map(col => (
|
|
509
|
+
.map(col => typed(col.Name, col.DisplayName || col.Name));
|
|
380
510
|
}
|
|
381
|
-
if (this.
|
|
382
|
-
return this.
|
|
511
|
+
if (this.ViewEntity?.Columns) {
|
|
512
|
+
return this.ViewEntity.Columns
|
|
383
513
|
.filter(col => !col.hidden)
|
|
384
|
-
.map(col => (
|
|
514
|
+
.map(col => typed(col.Name, col.DisplayName || col.Name));
|
|
385
515
|
}
|
|
386
|
-
return
|
|
516
|
+
return entity.Fields
|
|
387
517
|
.filter(f => !f.IsVirtual)
|
|
388
|
-
.map(f => (
|
|
518
|
+
.map(f => typed(f.Name, f.DisplayNameOrName));
|
|
389
519
|
}
|
|
390
520
|
buildExportFileName() {
|
|
391
|
-
const viewName = this.
|
|
392
|
-
return `${this.
|
|
521
|
+
const viewName = this.ViewEntity?.Name || 'Data';
|
|
522
|
+
return `${this.EntityInfo.Name}_${viewName}_${new Date().toISOString().split('T')[0]}`;
|
|
393
523
|
}
|
|
394
524
|
/**
|
|
395
525
|
* Get display name for the resource tab
|
|
@@ -416,38 +546,50 @@ let UserViewResource = class UserViewResource extends BaseResourceComponent {
|
|
|
416
546
|
/**
|
|
417
547
|
* Handle creating a new record for the current entity
|
|
418
548
|
*/
|
|
419
|
-
|
|
420
|
-
if (!this.
|
|
549
|
+
OnCreateNewRecord() {
|
|
550
|
+
if (!this.EntityInfo)
|
|
421
551
|
return;
|
|
422
552
|
// Use NavigationService to open a new record form
|
|
423
|
-
this.navigationService.OpenNewEntityRecord(this.
|
|
553
|
+
this.navigationService.OpenNewEntityRecord(this.EntityInfo.Name);
|
|
554
|
+
}
|
|
555
|
+
/** @deprecated Use {@link OnCreateNewRecord}. */
|
|
556
|
+
onCreateNewRecord() {
|
|
557
|
+
return this.OnCreateNewRecord();
|
|
424
558
|
}
|
|
425
559
|
/**
|
|
426
560
|
* Open the Save-as-List dialog. Only meaningful for saved views (a
|
|
427
561
|
* ViewID is required to materialize). Dynamic views fall back to a
|
|
428
562
|
* user-visible notification rather than silently doing nothing.
|
|
429
563
|
*/
|
|
430
|
-
|
|
431
|
-
if (!this.
|
|
564
|
+
OnSaveAsList() {
|
|
565
|
+
if (!this.ViewEntity?.ID) {
|
|
432
566
|
this.showNotification('Save as List requires a saved View. Save this view first.', 'info', 4000);
|
|
433
567
|
return;
|
|
434
568
|
}
|
|
435
569
|
// Best-effort record-count hint — the entity-viewer exposes the
|
|
436
570
|
// grid's row count on its gridState; we surface it so the dialog's
|
|
437
571
|
// confirm button can say "Save List (476 records)".
|
|
438
|
-
this.
|
|
439
|
-
this.
|
|
572
|
+
this.SaveAsListRecordCount = this.EntityViewerRef?.TotalRecordCount ?? null;
|
|
573
|
+
this.SaveAsListDialogVisible = true;
|
|
440
574
|
this.cdr.detectChanges();
|
|
441
575
|
}
|
|
442
|
-
|
|
443
|
-
|
|
576
|
+
/** @deprecated Use {@link OnSaveAsList}. */
|
|
577
|
+
onSaveAsList() {
|
|
578
|
+
return this.OnSaveAsList();
|
|
579
|
+
}
|
|
580
|
+
OnSaveAsListCancelled() {
|
|
581
|
+
this.SaveAsListDialogVisible = false;
|
|
444
582
|
this.cdr.detectChanges();
|
|
445
583
|
}
|
|
446
|
-
|
|
447
|
-
|
|
584
|
+
/** @deprecated Use {@link OnSaveAsListCancelled}. */
|
|
585
|
+
onSaveAsListCancelled() {
|
|
586
|
+
return this.OnSaveAsListCancelled();
|
|
587
|
+
}
|
|
588
|
+
async OnSaveAsListSubmit(payload) {
|
|
589
|
+
const viewId = this.ViewEntity?.ID;
|
|
448
590
|
if (!viewId)
|
|
449
591
|
return;
|
|
450
|
-
this.
|
|
592
|
+
this.IsSavingAsList = true;
|
|
451
593
|
this.cdr.detectChanges();
|
|
452
594
|
try {
|
|
453
595
|
const provider = this.ProviderToUse;
|
|
@@ -461,7 +603,7 @@ let UserViewResource = class UserViewResource extends BaseResourceComponent {
|
|
|
461
603
|
RefreshMode: payload.RefreshMode,
|
|
462
604
|
});
|
|
463
605
|
if (result.Success && result.CreatedListId) {
|
|
464
|
-
this.
|
|
606
|
+
this.SaveAsListDialogVisible = false;
|
|
465
607
|
this.showNotification(`List created with ${result.Counts?.Added ?? 0} record(s).`, 'success', 3000);
|
|
466
608
|
this.navigationService.OpenEntityRecord('MJ: Lists', CompositeKey.FromID(result.CreatedListId));
|
|
467
609
|
}
|
|
@@ -474,10 +616,14 @@ let UserViewResource = class UserViewResource extends BaseResourceComponent {
|
|
|
474
616
|
this.showNotification(`Save failed: ${message}`, 'error', 5000);
|
|
475
617
|
}
|
|
476
618
|
finally {
|
|
477
|
-
this.
|
|
619
|
+
this.IsSavingAsList = false;
|
|
478
620
|
this.cdr.detectChanges();
|
|
479
621
|
}
|
|
480
622
|
}
|
|
623
|
+
/** @deprecated Use {@link OnSaveAsListSubmit}. */
|
|
624
|
+
async onSaveAsListSubmit(payload) {
|
|
625
|
+
return this.OnSaveAsListSubmit(payload);
|
|
626
|
+
}
|
|
481
627
|
/**
|
|
482
628
|
* Show a notification to the user
|
|
483
629
|
*/
|
|
@@ -498,8 +644,8 @@ let UserViewResource = class UserViewResource extends BaseResourceComponent {
|
|
|
498
644
|
i0.ɵɵviewQuery(_c0, 7)(_c1, 5);
|
|
499
645
|
} if (rf & 2) {
|
|
500
646
|
let _t;
|
|
501
|
-
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.
|
|
502
|
-
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.
|
|
647
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.ContainerElement = _t.first);
|
|
648
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.EntityViewerRef = _t.first);
|
|
503
649
|
} }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 5, vars: 1, consts: [["container", ""], ["entityViewer", ""], [1, "view-resource-container"], [1, "view-loading-state"], [1, "view-error-state"], ["text", "Loading view...", "size", "large"], [1, "fas", "fa-exclamation-triangle"], [1, "view-header"], [1, "header-left"], [1, "view-title"], [1, "view-description"], [1, "header-right"], [1, "action-button", "create-button", 3, "click", "title"], [1, "fa-solid", "fa-plus"], ["title", "Materialize these results as a static List", 1, "action-button", "save-as-list-button", 3, "disabled"], ["title", "Export", 1, "action-button", "export-button", 3, "disabled"], [3, "RecordOpened", "OpenRelatedRecordRequested", "AfterViewTypeChange", "DataLoaded", "Entity", "Provider", "ViewEntity", "GridState", "AutoSaveView"], [3, "Save", "Cancel", "Provider", "Visible", "ViewId", "ViewName", "RecordCount"], ["title", "Materialize these results as a static List", 1, "action-button", "save-as-list-button", 3, "click", "disabled"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "fa-solid", "fa-floppy-disk"], ["title", "Export", 1, "action-button", "export-button", 3, "click", "disabled"], [1, "fa-solid", "fa-file-excel"]], template: function UserViewResource_Template(rf, ctx) { if (rf & 1) {
|
|
504
650
|
i0.ɵɵelementStart(0, "div", 2, 0);
|
|
505
651
|
i0.ɵɵconditionalCreate(2, UserViewResource_Conditional_2_Template, 2, 0, "div", 3)(3, UserViewResource_Conditional_3_Template, 4, 1, "div", 4)(4, UserViewResource_Conditional_4_Template, 15, 16);
|
|
@@ -516,12 +662,12 @@ export { UserViewResource };
|
|
|
516
662
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(UserViewResource, [{
|
|
517
663
|
type: Component,
|
|
518
664
|
args: [{ standalone: false, selector: 'mj-userview-resource', template: "<div #container class=\"view-resource-container\">\n @if (isLoading) {\n <div class=\"view-loading-state\">\n <mj-loading text=\"Loading view...\" size=\"large\"></mj-loading>\n </div>\n } @else if (errorMessage) {\n <div class=\"view-error-state\">\n <i class=\"fas fa-exclamation-triangle\"></i>\n <p>{{ errorMessage }}</p>\n </div>\n } @else if (entityInfo) {\n <!-- Header with title and action buttons -->\n <div class=\"view-header\">\n <div class=\"header-left\">\n <h2 class=\"view-title\">{{ viewEntity?.Name || entityInfo.Name }}</h2>\n @if (viewEntity?.Description) {\n <p class=\"view-description\">{{ viewEntity!.Description }}</p>\n }\n </div>\n <div class=\"header-right\">\n <!-- Create New Record Button -->\n <button\n class=\"action-button create-button\"\n (click)=\"onCreateNewRecord()\"\n title=\"Create new {{ entityInfo.Name }} record\">\n <i class=\"fa-solid fa-plus\"></i>\n <span>New Record</span>\n </button>\n\n <!-- Save as List Button \u2014 only meaningful for saved (non-dynamic) views. -->\n @if (viewEntity?.ID) {\n <button\n class=\"action-button save-as-list-button\"\n (click)=\"onSaveAsList()\"\n [disabled]=\"isSavingAsList\"\n title=\"Materialize these results as a static List\">\n @if (isSavingAsList) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n } @else {\n <i class=\"fa-solid fa-floppy-disk\"></i>\n }\n <span>{{ isSavingAsList ? 'Saving...' : 'Save as List' }}</span>\n </button>\n }\n <!-- Fallback Export button. Shown ONLY for view types that lack their own export UI\n (Cards / Map / Timeline). The Grid renderer has its own in-toolbar Export (full\n result set + format/sampling dialog), so this is suppressed there to avoid a\n duplicate/confusing second button. -->\n @if (showFallbackExportButton) {\n <button\n class=\"action-button export-button\"\n (click)=\"onExport()\"\n [disabled]=\"isExporting\"\n title=\"Export\">\n @if (isExporting) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n } @else {\n <i class=\"fa-solid fa-file-excel\"></i>\n }\n <span>{{ isExporting ? 'Exporting...' : 'Export' }}</span>\n </button>\n }\n </div>\n </div>\n\n <!-- Entity Viewer -->\n <mj-entity-viewer\n #entityViewer\n [Entity]=\"entityInfo\"\n [Provider]=\"Provider\"\n [ViewEntity]=\"viewEntity\"\n [GridState]=\"gridState\"\n [AutoSaveView]=\"true\"\n (RecordOpened)=\"onRecordOpened($any($event))\"\n (OpenRelatedRecordRequested)=\"onOpenRelatedRecord($event)\"\n (AfterViewTypeChange)=\"onViewTypeChanged()\"\n (DataLoaded)=\"onDataLoaded()\">\n </mj-entity-viewer>\n\n <!-- Save-as-List dialog -->\n <mj-save-view-as-list-dialog\n [Provider]=\"ProviderToUse\"\n [Visible]=\"saveAsListDialogVisible\"\n [ViewId]=\"viewEntity?.ID ?? null\"\n [ViewName]=\"viewEntity?.Name ?? null\"\n [RecordCount]=\"saveAsListRecordCount\"\n (Save)=\"onSaveAsListSubmit($event)\"\n (Cancel)=\"onSaveAsListCancelled()\">\n </mj-save-view-as-list-dialog>\n }\n</div>\n", styles: ["\n :host {\n display: block;\n width: 100%;\n height: 100%;\n position: relative;\n overflow: hidden;\n }\n .view-resource-container {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n }\n .view-header {\n padding: 16px 20px 8px 20px;\n flex-shrink: 0;\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 16px;\n }\n .header-left {\n flex: 1;\n min-width: 0;\n }\n .header-right {\n display: flex;\n gap: 8px;\n flex-shrink: 0;\n }\n .view-title {\n margin: 0 0 4px 0;\n font-size: 1.25rem;\n font-weight: 600;\n color: var(--text-primary, #1a1a1a);\n }\n .view-description {\n margin: 0;\n font-size: 0.875rem;\n color: var(--text-secondary, #666);\n }\n .action-button {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-primary);\n font-size: 0.875rem;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s ease;\n white-space: nowrap;\n }\n .action-button:hover:not(:disabled) {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-default);\n }\n .action-button:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n .action-button i {\n font-size: 0.875rem;\n }\n .create-button {\n background: var(--mj-brand-primary);\n color: white;\n border-color: var(--mj-brand-primary);\n }\n .create-button:hover:not(:disabled) {\n background: var(--mj-brand-primary-hover);\n border-color: var(--mj-brand-primary-hover);\n }\n .export-button:hover:not(:disabled) {\n color: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n }\n .view-loading-state,\n .view-error-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n gap: 16px;\n }\n .view-error-state {\n color: var(--danger-color, #dc3545);\n }\n .view-error-state i {\n font-size: 2rem;\n }\n .view-error-state p {\n margin: 0;\n font-size: 1rem;\n }\n mj-entity-viewer {\n flex: 1;\n min-height: 0;\n }\n "] }]
|
|
519
|
-
}], () => [{ type: i0.ChangeDetectorRef }, { type: i1.ExportService }], {
|
|
665
|
+
}], () => [{ type: i0.ChangeDetectorRef }, { type: i1.ExportService }], { ContainerElement: [{
|
|
520
666
|
type: ViewChild,
|
|
521
667
|
args: ['container', { static: true }]
|
|
522
|
-
}],
|
|
668
|
+
}], EntityViewerRef: [{
|
|
523
669
|
type: ViewChild,
|
|
524
670
|
args: ['entityViewer']
|
|
525
671
|
}] }); })();
|
|
526
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(UserViewResource, { className: "UserViewResource", filePath: "src/lib/resource-wrappers/view-resource.component.ts", lineNumber:
|
|
672
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(UserViewResource, { className: "UserViewResource", filePath: "src/lib/resource-wrappers/view-resource.component.ts", lineNumber: 139 }); })();
|
|
527
673
|
//# sourceMappingURL=view-resource.component.js.map
|