@memberjunction/ng-base-forms 4.0.0 → 4.1.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/base-form-component.d.ts +103 -215
- package/dist/lib/base-form-component.d.ts.map +1 -1
- package/dist/lib/base-form-component.js +384 -541
- package/dist/lib/base-form-component.js.map +1 -1
- package/dist/lib/container/record-form-container.component.d.ts +165 -0
- package/dist/lib/container/record-form-container.component.d.ts.map +1 -0
- package/dist/lib/container/record-form-container.component.js +534 -0
- package/dist/lib/container/record-form-container.component.js.map +1 -0
- package/dist/lib/explorer-entity-data-grid.component.d.ts +7 -5
- package/dist/lib/explorer-entity-data-grid.component.d.ts.map +1 -1
- package/dist/lib/explorer-entity-data-grid.component.js +15 -9
- package/dist/lib/explorer-entity-data-grid.component.js.map +1 -1
- package/dist/lib/field/form-field.component.d.ts +268 -0
- package/dist/lib/field/form-field.component.d.ts.map +1 -0
- package/dist/lib/field/form-field.component.js +1194 -0
- package/dist/lib/field/form-field.component.js.map +1 -0
- package/dist/lib/form-state.interface.d.ts +2 -0
- package/dist/lib/form-state.interface.d.ts.map +1 -1
- package/dist/lib/form-state.interface.js.map +1 -1
- package/dist/lib/form-state.service.d.ts +14 -0
- package/dist/lib/form-state.service.d.ts.map +1 -1
- package/dist/lib/form-state.service.js +19 -0
- package/dist/lib/form-state.service.js.map +1 -1
- package/dist/lib/panel/collapsible-panel.component.d.ts +139 -0
- package/dist/lib/panel/collapsible-panel.component.d.ts.map +1 -0
- package/dist/lib/panel/collapsible-panel.component.js +468 -0
- package/dist/lib/panel/collapsible-panel.component.js.map +1 -0
- package/dist/lib/toolbar/form-toolbar.component.d.ts +170 -0
- package/dist/lib/toolbar/form-toolbar.component.d.ts.map +1 -0
- package/dist/lib/toolbar/form-toolbar.component.js +830 -0
- package/dist/lib/toolbar/form-toolbar.component.js.map +1 -0
- package/dist/lib/types/form-events.d.ts +90 -0
- package/dist/lib/types/form-events.d.ts.map +1 -0
- package/dist/lib/types/form-events.js +45 -0
- package/dist/lib/types/form-events.js.map +1 -0
- package/dist/lib/types/form-types.d.ts +150 -0
- package/dist/lib/types/form-types.d.ts.map +1 -0
- package/dist/lib/types/form-types.js +12 -0
- package/dist/lib/types/form-types.js.map +1 -0
- package/dist/lib/types/navigation-events.d.ts +88 -0
- package/dist/lib/types/navigation-events.d.ts.map +1 -0
- package/dist/lib/types/navigation-events.js +2 -0
- package/dist/lib/types/navigation-events.js.map +1 -0
- package/dist/lib/types/toolbar-config.d.ts +66 -0
- package/dist/lib/types/toolbar-config.d.ts.map +1 -0
- package/dist/lib/types/toolbar-config.js +38 -0
- package/dist/lib/types/toolbar-config.js.map +1 -0
- package/dist/module.d.ts +28 -20
- package/dist/module.d.ts.map +1 -1
- package/dist/module.js +47 -74
- package/dist/module.js.map +1 -1
- package/dist/public-api.d.ts +20 -8
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +24 -9
- package/dist/public-api.js.map +1 -1
- package/package.json +20 -23
- package/README.md +0 -449
- package/dist/lib/base-field-component.d.ts +0 -152
- package/dist/lib/base-field-component.d.ts.map +0 -1
- package/dist/lib/base-field-component.js +0 -669
- package/dist/lib/base-field-component.js.map +0 -1
- package/dist/lib/base-form-context.d.ts +0 -23
- package/dist/lib/base-form-context.d.ts.map +0 -1
- package/dist/lib/base-form-context.js +0 -10
- package/dist/lib/base-form-context.js.map +0 -1
- package/dist/lib/collapsible-panel.component.d.ts +0 -68
- package/dist/lib/collapsible-panel.component.d.ts.map +0 -1
- package/dist/lib/collapsible-panel.component.js +0 -330
- package/dist/lib/collapsible-panel.component.js.map +0 -1
- package/dist/lib/form-section-controls.component.d.ts +0 -35
- package/dist/lib/form-section-controls.component.d.ts.map +0 -1
- package/dist/lib/form-section-controls.component.js +0 -273
- package/dist/lib/form-section-controls.component.js.map +0 -1
- package/dist/lib/link-field.component.d.ts +0 -62
- package/dist/lib/link-field.component.d.ts.map +0 -1
- package/dist/lib/link-field.component.js +0 -392
- package/dist/lib/link-field.component.js.map +0 -1
|
@@ -0,0 +1,534 @@
|
|
|
1
|
+
import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy, ChangeDetectorRef, inject, ContentChildren, ViewEncapsulation } from '@angular/core';
|
|
2
|
+
import { Subject } from 'rxjs';
|
|
3
|
+
import { takeUntil } from 'rxjs/operators';
|
|
4
|
+
import { DEFAULT_TOOLBAR_CONFIG } from '../types/toolbar-config';
|
|
5
|
+
import { MjCollapsiblePanelComponent } from '../panel/collapsible-panel.component';
|
|
6
|
+
import { BeforeHistoryViewEventArgs, BeforeListManagementEventArgs } from '../types/form-events';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "@memberjunction/ng-record-changes";
|
|
9
|
+
import * as i2 from "@memberjunction/ng-list-management";
|
|
10
|
+
import * as i3 from "../toolbar/form-toolbar.component";
|
|
11
|
+
const _c0 = [[["", "before-toolbar", ""]], [["", "before-panels", ""]], [["", "field-panels", ""]], [["", "after-panels", ""]], "*"];
|
|
12
|
+
const _c1 = ["[before-toolbar]", "[before-panels]", "[field-panels]", "[after-panels]", "*"];
|
|
13
|
+
const _c2 = a0 => [a0];
|
|
14
|
+
const _c3 = (a0, a1, a2) => ({ mode: "manage", entityId: a0, entityName: a1, recordIds: a2, allowCreate: true });
|
|
15
|
+
function MjRecordFormContainerComponent_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
16
|
+
const _r1 = i0.ɵɵgetCurrentView();
|
|
17
|
+
i0.ɵɵelementStart(0, "div", 5)(1, "div", 9);
|
|
18
|
+
i0.ɵɵelement(2, "i", 10);
|
|
19
|
+
i0.ɵɵelementEnd();
|
|
20
|
+
i0.ɵɵelementStart(3, "h3", 11);
|
|
21
|
+
i0.ɵɵtext(4, "No sections found");
|
|
22
|
+
i0.ɵɵelementEnd();
|
|
23
|
+
i0.ɵɵelementStart(5, "p", 12);
|
|
24
|
+
i0.ɵɵtext(6, " No sections match \"");
|
|
25
|
+
i0.ɵɵelementStart(7, "strong");
|
|
26
|
+
i0.ɵɵtext(8);
|
|
27
|
+
i0.ɵɵelementEnd();
|
|
28
|
+
i0.ɵɵtext(9, "\". ");
|
|
29
|
+
i0.ɵɵelement(10, "br");
|
|
30
|
+
i0.ɵɵtext(11, "Try a different search term or ");
|
|
31
|
+
i0.ɵɵelementStart(12, "a", 13);
|
|
32
|
+
i0.ɵɵlistener("click", function MjRecordFormContainerComponent_Conditional_8_Template_a_click_12_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); ctx_r1.OnFilterChange(""); return i0.ɵɵresetView($event.preventDefault()); });
|
|
33
|
+
i0.ɵɵtext(13, "clear the search");
|
|
34
|
+
i0.ɵɵelementEnd();
|
|
35
|
+
i0.ɵɵtext(14, ". ");
|
|
36
|
+
i0.ɵɵelementEnd()();
|
|
37
|
+
} if (rf & 2) {
|
|
38
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
39
|
+
i0.ɵɵadvance(8);
|
|
40
|
+
i0.ɵɵtextInterpolate(ctx_r1.EffectiveSearchFilter);
|
|
41
|
+
} }
|
|
42
|
+
function MjRecordFormContainerComponent_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
43
|
+
const _r3 = i0.ɵɵgetCurrentView();
|
|
44
|
+
i0.ɵɵelementStart(0, "mj-record-changes", 14);
|
|
45
|
+
i0.ɵɵlistener("dialogClosed", function MjRecordFormContainerComponent_Conditional_12_Template_mj_record_changes_dialogClosed_0_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnRecordChangesClosed()); });
|
|
46
|
+
i0.ɵɵelementEnd();
|
|
47
|
+
} if (rf & 2) {
|
|
48
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
49
|
+
i0.ɵɵproperty("record", ctx_r1.EffectiveRecord);
|
|
50
|
+
} }
|
|
51
|
+
function MjRecordFormContainerComponent_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
52
|
+
const _r4 = i0.ɵɵgetCurrentView();
|
|
53
|
+
i0.ɵɵelementStart(0, "mj-list-management-dialog", 15);
|
|
54
|
+
i0.ɵɵlistener("complete", function MjRecordFormContainerComponent_Conditional_13_Template_mj_list_management_dialog_complete_0_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnListManagementClosed()); })("cancel", function MjRecordFormContainerComponent_Conditional_13_Template_mj_list_management_dialog_cancel_0_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnListManagementClosed()); });
|
|
55
|
+
i0.ɵɵelementEnd();
|
|
56
|
+
} if (rf & 2) {
|
|
57
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
58
|
+
i0.ɵɵproperty("visible", ctx_r1.ShowListManagement)("config", i0.ɵɵpureFunction3(4, _c3, ctx_r1.EffectiveRecord.EntityInfo.ID, ctx_r1.EffectiveRecord.EntityInfo.Name, i0.ɵɵpureFunction1(2, _c2, ctx_r1.EffectiveRecord.PrimaryKey.Values()[0])));
|
|
59
|
+
} }
|
|
60
|
+
/**
|
|
61
|
+
* Top-level container that composes the toolbar, content slots, and sticky behavior.
|
|
62
|
+
*
|
|
63
|
+
* **Two usage modes:**
|
|
64
|
+
*
|
|
65
|
+
* 1. **With FormComponent** (generated forms): Pass `[FormComponent]="this"` and the
|
|
66
|
+
* container derives all state from the BaseFormComponent instance. Save/Cancel/Edit
|
|
67
|
+
* are handled internally by calling FormComponent methods.
|
|
68
|
+
*
|
|
69
|
+
* 2. **Standalone**: Pass individual @Input properties and handle all @Output events.
|
|
70
|
+
*
|
|
71
|
+
* @example Generated form usage:
|
|
72
|
+
* ```html
|
|
73
|
+
* <mj-record-form-container [Record]="record" [FormComponent]="this"
|
|
74
|
+
* (Navigate)="OnFormNavigate($event)"
|
|
75
|
+
* (DeleteRequested)="OnDeleteRequested()"
|
|
76
|
+
* (FavoriteToggled)="OnFavoriteToggled()"
|
|
77
|
+
* (HistoryRequested)="OnHistoryRequested()"
|
|
78
|
+
* (ListManagementRequested)="OnListManagementRequested()">
|
|
79
|
+
*
|
|
80
|
+
* <mj-collapsible-panel field-panels ...>
|
|
81
|
+
* <mj-form-field ...></mj-form-field>
|
|
82
|
+
* </mj-collapsible-panel>
|
|
83
|
+
*
|
|
84
|
+
* <mj-collapsible-panel after-panels ...>
|
|
85
|
+
* <!-- related entity grid -->
|
|
86
|
+
* </mj-collapsible-panel>
|
|
87
|
+
* </mj-record-form-container>
|
|
88
|
+
* ```
|
|
89
|
+
*/
|
|
90
|
+
export class MjRecordFormContainerComponent {
|
|
91
|
+
cdr = inject(ChangeDetectorRef);
|
|
92
|
+
destroy$ = new Subject();
|
|
93
|
+
panelNavReset$ = new Subject();
|
|
94
|
+
// ---- Internal State ----
|
|
95
|
+
/** Controls visibility of record changes drawer */
|
|
96
|
+
ShowRecordChanges = false;
|
|
97
|
+
/** Controls visibility of list management dialog */
|
|
98
|
+
ShowListManagement = false;
|
|
99
|
+
// ---- Primary Inputs ----
|
|
100
|
+
/** The entity record being displayed/edited */
|
|
101
|
+
Record;
|
|
102
|
+
/**
|
|
103
|
+
* Reference to the parent form component (e.g. BaseFormComponent subclass).
|
|
104
|
+
* When provided, the container derives toolbar state from this reference and
|
|
105
|
+
* handles Save/Cancel/Edit internally by calling its methods.
|
|
106
|
+
*/
|
|
107
|
+
FormComponent = null;
|
|
108
|
+
// ---- Fallback Inputs (used when FormComponent is NOT provided) ----
|
|
109
|
+
EntityInfo = null;
|
|
110
|
+
EditMode = false;
|
|
111
|
+
UserCanEdit = false;
|
|
112
|
+
UserCanDelete = false;
|
|
113
|
+
IsFavorite = false;
|
|
114
|
+
FavoriteInitDone = false;
|
|
115
|
+
IsDirty = false;
|
|
116
|
+
DirtyFieldNames = [];
|
|
117
|
+
ListCount = 0;
|
|
118
|
+
IsSaving = false;
|
|
119
|
+
ToolbarConfig = DEFAULT_TOOLBAR_CONFIG;
|
|
120
|
+
WidthMode = 'centered';
|
|
121
|
+
// ---- Outputs ----
|
|
122
|
+
/** Emitted for all navigation actions (the host app maps these to its routing) */
|
|
123
|
+
Navigate = new EventEmitter();
|
|
124
|
+
/** Emitted when edit mode changes (only in standalone mode; FormComponent mode handled internally) */
|
|
125
|
+
EditModeChange = new EventEmitter();
|
|
126
|
+
/** Emitted BEFORE save - can be cancelled by setting event.Cancel = true */
|
|
127
|
+
BeforeSave = new EventEmitter();
|
|
128
|
+
/** Emitted when save is requested (only in standalone mode) */
|
|
129
|
+
SaveRequested = new EventEmitter();
|
|
130
|
+
/** Emitted BEFORE cancel - can be cancelled by setting event.Cancel = true */
|
|
131
|
+
BeforeCancel = new EventEmitter();
|
|
132
|
+
/** Emitted when cancel is requested (only in standalone mode) */
|
|
133
|
+
CancelRequested = new EventEmitter();
|
|
134
|
+
/** Emitted BEFORE delete - can be cancelled by setting event.Cancel = true */
|
|
135
|
+
BeforeDelete = new EventEmitter();
|
|
136
|
+
/** Emitted when delete is confirmed (host app handles actual deletion) */
|
|
137
|
+
DeleteRequested = new EventEmitter();
|
|
138
|
+
/** Emitted when favorite toggle is requested */
|
|
139
|
+
FavoriteToggled = new EventEmitter();
|
|
140
|
+
/** Emitted BEFORE history view - can be cancelled by setting event.Cancel = true */
|
|
141
|
+
BeforeHistoryView = new EventEmitter();
|
|
142
|
+
/** Emitted when history view is requested */
|
|
143
|
+
HistoryRequested = new EventEmitter();
|
|
144
|
+
/** Emitted BEFORE list management - can be cancelled by setting event.Cancel = true */
|
|
145
|
+
BeforeListManagement = new EventEmitter();
|
|
146
|
+
/** Emitted when list management is requested */
|
|
147
|
+
ListManagementRequested = new EventEmitter();
|
|
148
|
+
/** Emitted when show-changes is requested */
|
|
149
|
+
ShowChangesRequested = new EventEmitter();
|
|
150
|
+
/** Emitted when a custom toolbar button is clicked */
|
|
151
|
+
CustomButtonClick = new EventEmitter();
|
|
152
|
+
// ---- Content Children ----
|
|
153
|
+
Panels;
|
|
154
|
+
// ---- FormComponent accessor ----
|
|
155
|
+
/** Typed accessor for the form component reference */
|
|
156
|
+
get fc() {
|
|
157
|
+
return this.FormComponent;
|
|
158
|
+
}
|
|
159
|
+
// ---- Effective state (bridges FormComponent → toolbar inputs) ----
|
|
160
|
+
get EffectiveRecord() {
|
|
161
|
+
return this.fc?.record ?? this.Record;
|
|
162
|
+
}
|
|
163
|
+
get EffectiveEditMode() {
|
|
164
|
+
return this.fc?.EditMode ?? this.EditMode;
|
|
165
|
+
}
|
|
166
|
+
get EffectiveUserCanEdit() {
|
|
167
|
+
return this.fc?.UserCanEdit ?? this.UserCanEdit;
|
|
168
|
+
}
|
|
169
|
+
get EffectiveUserCanDelete() {
|
|
170
|
+
return this.fc?.UserCanDelete ?? this.UserCanDelete;
|
|
171
|
+
}
|
|
172
|
+
get EffectiveIsFavorite() {
|
|
173
|
+
return this.fc?.IsFavorite ?? this.IsFavorite;
|
|
174
|
+
}
|
|
175
|
+
get EffectiveFavoriteInitDone() {
|
|
176
|
+
return this.fc?.FavoriteInitDone ?? this.FavoriteInitDone;
|
|
177
|
+
}
|
|
178
|
+
get EffectiveEntityInfo() {
|
|
179
|
+
return this.fc?.EntityInfo ?? this.EntityInfo;
|
|
180
|
+
}
|
|
181
|
+
get EffectiveIsDirty() {
|
|
182
|
+
if (this.fc) {
|
|
183
|
+
return this.fc.record?.Dirty ?? false;
|
|
184
|
+
}
|
|
185
|
+
return this.IsDirty;
|
|
186
|
+
}
|
|
187
|
+
get EffectiveDirtyFieldNames() {
|
|
188
|
+
if (this.fc?.record?.Fields) {
|
|
189
|
+
return this.fc.record.Fields.filter(f => f.Dirty).map(f => f.Name);
|
|
190
|
+
}
|
|
191
|
+
return this.DirtyFieldNames;
|
|
192
|
+
}
|
|
193
|
+
get EffectiveIsSaving() {
|
|
194
|
+
return this.IsSaving;
|
|
195
|
+
}
|
|
196
|
+
get EffectiveWidthMode() {
|
|
197
|
+
if (this.fc?.getFormWidthMode) {
|
|
198
|
+
return this.fc.getFormWidthMode();
|
|
199
|
+
}
|
|
200
|
+
return this.WidthMode;
|
|
201
|
+
}
|
|
202
|
+
get EffectiveSearchFilter() {
|
|
203
|
+
return this.fc?.searchFilter ?? '';
|
|
204
|
+
}
|
|
205
|
+
get EffectiveShowEmptyFields() {
|
|
206
|
+
return this.fc?.showEmptyFields ?? false;
|
|
207
|
+
}
|
|
208
|
+
get EffectiveHasCustomSectionOrder() {
|
|
209
|
+
if (this.fc?.hasCustomSectionOrder) {
|
|
210
|
+
return this.fc.hasCustomSectionOrder();
|
|
211
|
+
}
|
|
212
|
+
return false;
|
|
213
|
+
}
|
|
214
|
+
// ---- Section counts ----
|
|
215
|
+
get TotalSectionCount() {
|
|
216
|
+
if (this.fc?.getTotalSectionCount) {
|
|
217
|
+
return this.fc.getTotalSectionCount();
|
|
218
|
+
}
|
|
219
|
+
return this.Panels?.length ?? 0;
|
|
220
|
+
}
|
|
221
|
+
get VisibleSectionCount() {
|
|
222
|
+
if (this.fc?.getVisibleSectionCount) {
|
|
223
|
+
return this.fc.getVisibleSectionCount();
|
|
224
|
+
}
|
|
225
|
+
if (!this.Panels)
|
|
226
|
+
return 0;
|
|
227
|
+
return this.Panels.filter(p => p.IsVisible).length;
|
|
228
|
+
}
|
|
229
|
+
get ExpandedSectionCount() {
|
|
230
|
+
if (this.fc?.getExpandedCount) {
|
|
231
|
+
return this.fc.getExpandedCount();
|
|
232
|
+
}
|
|
233
|
+
if (!this.Panels)
|
|
234
|
+
return 0;
|
|
235
|
+
return this.Panels.filter(p => p.Expanded && p.IsVisible).length;
|
|
236
|
+
}
|
|
237
|
+
// ---- Lifecycle ----
|
|
238
|
+
ngAfterContentInit() {
|
|
239
|
+
// Subscribe to panel Navigate events and relay them
|
|
240
|
+
this.SubscribeToPanelNavigateEvents();
|
|
241
|
+
// Watch for panel changes to update counts and re-subscribe
|
|
242
|
+
this.Panels.changes.pipe(takeUntil(this.destroy$)).subscribe(() => {
|
|
243
|
+
this.SubscribeToPanelNavigateEvents();
|
|
244
|
+
this.cdr.markForCheck();
|
|
245
|
+
});
|
|
246
|
+
// Watch for changes to record dirty state
|
|
247
|
+
this.watchRecordChanges();
|
|
248
|
+
}
|
|
249
|
+
ngOnDestroy() {
|
|
250
|
+
this.panelNavReset$.next();
|
|
251
|
+
this.panelNavReset$.complete();
|
|
252
|
+
this.destroy$.next();
|
|
253
|
+
this.destroy$.complete();
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Subscribes to Navigate events from all child collapsible panels
|
|
257
|
+
* and relays them through this container's Navigate output.
|
|
258
|
+
*/
|
|
259
|
+
SubscribeToPanelNavigateEvents() {
|
|
260
|
+
this.panelNavReset$.next(); // tear down previous subscriptions
|
|
261
|
+
this.Panels.forEach(panel => {
|
|
262
|
+
panel.Navigate.pipe(takeUntil(this.panelNavReset$)).subscribe((event) => {
|
|
263
|
+
this.Navigate.emit(event);
|
|
264
|
+
});
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Monitor record dirty state changes and trigger change detection.
|
|
269
|
+
* This ensures the edit banner updates when fields are modified.
|
|
270
|
+
*/
|
|
271
|
+
watchRecordChanges() {
|
|
272
|
+
// Poll for dirty state changes (BaseEntity doesn't expose observables)
|
|
273
|
+
const checkInterval = setInterval(() => {
|
|
274
|
+
if (this.EffectiveRecord?.Dirty !== undefined) {
|
|
275
|
+
this.cdr.markForCheck();
|
|
276
|
+
}
|
|
277
|
+
}, 200);
|
|
278
|
+
// Cleanup on destroy
|
|
279
|
+
this.destroy$.subscribe(() => clearInterval(checkInterval));
|
|
280
|
+
}
|
|
281
|
+
// ---- Toolbar Event Handlers ----
|
|
282
|
+
/**
|
|
283
|
+
* Navigation events are always re-emitted for the host app to handle.
|
|
284
|
+
*/
|
|
285
|
+
OnNavigate(event) {
|
|
286
|
+
this.Navigate.emit(event);
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Edit mode change: delegate to FormComponent if available, otherwise re-emit.
|
|
290
|
+
*/
|
|
291
|
+
OnEditModeChange(editMode) {
|
|
292
|
+
if (this.fc) {
|
|
293
|
+
if (editMode) {
|
|
294
|
+
this.fc.StartEditMode();
|
|
295
|
+
}
|
|
296
|
+
else {
|
|
297
|
+
this.fc.EndEditMode();
|
|
298
|
+
}
|
|
299
|
+
this.cdr.markForCheck();
|
|
300
|
+
}
|
|
301
|
+
else {
|
|
302
|
+
this.EditModeChange.emit(editMode);
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* Save: delegate to FormComponent if available, otherwise re-emit.
|
|
307
|
+
*/
|
|
308
|
+
async OnSaveRequested() {
|
|
309
|
+
if (this.fc?.SaveRecord) {
|
|
310
|
+
// Mark as saving to prevent double-click
|
|
311
|
+
this.IsSaving = true;
|
|
312
|
+
this.cdr.markForCheck();
|
|
313
|
+
try {
|
|
314
|
+
await this.fc.SaveRecord(true);
|
|
315
|
+
}
|
|
316
|
+
finally {
|
|
317
|
+
// Use microtask timing to avoid ExpressionChangedAfterItHasBeenCheckedError
|
|
318
|
+
await Promise.resolve();
|
|
319
|
+
this.IsSaving = false;
|
|
320
|
+
this.cdr.markForCheck();
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
else {
|
|
324
|
+
this.SaveRequested.emit();
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* Cancel: delegate to FormComponent if available, otherwise re-emit.
|
|
329
|
+
*/
|
|
330
|
+
OnCancelRequested() {
|
|
331
|
+
if (this.fc?.CancelEdit) {
|
|
332
|
+
this.fc.CancelEdit();
|
|
333
|
+
this.cdr.markForCheck();
|
|
334
|
+
}
|
|
335
|
+
else {
|
|
336
|
+
this.CancelRequested.emit();
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
/**
|
|
340
|
+
* Delete, Favorite, History, Lists, ShowChanges: always re-emit for host app.
|
|
341
|
+
*/
|
|
342
|
+
OnDeleteRequested() {
|
|
343
|
+
this.DeleteRequested.emit();
|
|
344
|
+
}
|
|
345
|
+
OnFavoriteToggled() {
|
|
346
|
+
this.FavoriteToggled.emit();
|
|
347
|
+
}
|
|
348
|
+
OnHistoryRequested() {
|
|
349
|
+
// Check if event should be cancelled
|
|
350
|
+
const beforeEvent = new BeforeHistoryViewEventArgs();
|
|
351
|
+
this.BeforeHistoryView.emit(beforeEvent);
|
|
352
|
+
if (beforeEvent.Cancel)
|
|
353
|
+
return;
|
|
354
|
+
// If not cancelled, show built-in record changes drawer
|
|
355
|
+
this.ShowRecordChanges = true;
|
|
356
|
+
this.cdr.markForCheck();
|
|
357
|
+
// Also emit for backward compatibility
|
|
358
|
+
this.HistoryRequested.emit();
|
|
359
|
+
}
|
|
360
|
+
OnListManagementRequested() {
|
|
361
|
+
// Check if event should be cancelled
|
|
362
|
+
const beforeEvent = new BeforeListManagementEventArgs();
|
|
363
|
+
this.BeforeListManagement.emit(beforeEvent);
|
|
364
|
+
if (beforeEvent.Cancel)
|
|
365
|
+
return;
|
|
366
|
+
// If not cancelled, show built-in list management dialog
|
|
367
|
+
this.ShowListManagement = true;
|
|
368
|
+
this.cdr.markForCheck();
|
|
369
|
+
// Also emit for backward compatibility
|
|
370
|
+
this.ListManagementRequested.emit();
|
|
371
|
+
}
|
|
372
|
+
OnRecordChangesClosed() {
|
|
373
|
+
this.ShowRecordChanges = false;
|
|
374
|
+
this.cdr.markForCheck();
|
|
375
|
+
}
|
|
376
|
+
OnListManagementClosed() {
|
|
377
|
+
this.ShowListManagement = false;
|
|
378
|
+
this.cdr.markForCheck();
|
|
379
|
+
}
|
|
380
|
+
OnShowChangesRequested() {
|
|
381
|
+
if (this.fc?.ShowChanges) {
|
|
382
|
+
this.fc.ShowChanges();
|
|
383
|
+
}
|
|
384
|
+
else {
|
|
385
|
+
this.ShowChangesRequested.emit();
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
// ---- Section Control Handlers ----
|
|
389
|
+
OnFilterChange(filter) {
|
|
390
|
+
if (this.fc?.onFilterChange) {
|
|
391
|
+
this.fc.onFilterChange(filter);
|
|
392
|
+
this.cdr.markForCheck();
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
OnExpandAll() {
|
|
396
|
+
if (this.fc?.expandAllSections) {
|
|
397
|
+
this.fc.expandAllSections();
|
|
398
|
+
this.cdr.markForCheck();
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
OnCollapseAll() {
|
|
402
|
+
if (this.fc?.collapseAllSections) {
|
|
403
|
+
this.fc.collapseAllSections();
|
|
404
|
+
this.cdr.markForCheck();
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
OnShowEmptyFieldsChange(show) {
|
|
408
|
+
if (this.fc) {
|
|
409
|
+
this.fc.showEmptyFields = show;
|
|
410
|
+
this.cdr.markForCheck();
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
OnWidthModeChange(mode) {
|
|
414
|
+
if (this.fc?.setFormWidthMode) {
|
|
415
|
+
this.fc.setFormWidthMode(mode);
|
|
416
|
+
this.cdr.markForCheck();
|
|
417
|
+
}
|
|
418
|
+
else {
|
|
419
|
+
this.WidthMode = mode;
|
|
420
|
+
this.cdr.markForCheck();
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
OnResetSectionOrder() {
|
|
424
|
+
if (this.fc?.resetSectionOrder) {
|
|
425
|
+
this.fc.resetSectionOrder();
|
|
426
|
+
this.cdr.markForCheck();
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
static ɵfac = function MjRecordFormContainerComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || MjRecordFormContainerComponent)(); };
|
|
430
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MjRecordFormContainerComponent, selectors: [["mj-record-form-container"]], contentQueries: function MjRecordFormContainerComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
|
|
431
|
+
i0.ɵɵcontentQuery(dirIndex, MjCollapsiblePanelComponent, 5);
|
|
432
|
+
} if (rf & 2) {
|
|
433
|
+
let _t;
|
|
434
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.Panels = _t);
|
|
435
|
+
} }, inputs: { Record: "Record", FormComponent: "FormComponent", EntityInfo: "EntityInfo", EditMode: "EditMode", UserCanEdit: "UserCanEdit", UserCanDelete: "UserCanDelete", IsFavorite: "IsFavorite", FavoriteInitDone: "FavoriteInitDone", IsDirty: "IsDirty", DirtyFieldNames: "DirtyFieldNames", ListCount: "ListCount", IsSaving: "IsSaving", ToolbarConfig: "ToolbarConfig", WidthMode: "WidthMode" }, outputs: { Navigate: "Navigate", EditModeChange: "EditModeChange", BeforeSave: "BeforeSave", SaveRequested: "SaveRequested", BeforeCancel: "BeforeCancel", CancelRequested: "CancelRequested", BeforeDelete: "BeforeDelete", DeleteRequested: "DeleteRequested", FavoriteToggled: "FavoriteToggled", BeforeHistoryView: "BeforeHistoryView", HistoryRequested: "HistoryRequested", BeforeListManagement: "BeforeListManagement", ListManagementRequested: "ListManagementRequested", ShowChangesRequested: "ShowChangesRequested", CustomButtonClick: "CustomButtonClick" }, standalone: false, ngContentSelectors: _c1, decls: 14, vars: 26, consts: [[3, "Navigate", "EditModeChange", "BeforeSave", "SaveRequested", "BeforeCancel", "CancelRequested", "BeforeDelete", "DeleteRequested", "FavoriteToggled", "BeforeHistoryView", "HistoryRequested", "BeforeListManagement", "ListManagementRequested", "ShowChangesRequested", "CustomButtonClick", "FilterChange", "ExpandAllRequested", "CollapseAllRequested", "ShowEmptyFieldsChange", "WidthModeChange", "ResetSectionOrderRequested", "Record", "EditMode", "UserCanEdit", "UserCanDelete", "IsFavorite", "FavoriteInitDone", "IsDirty", "DirtyFieldNames", "ListCount", "EntityInfo", "Config", "IsSaving", "VisibleSectionCount", "TotalSectionCount", "ExpandedSectionCount", "SearchFilter", "ShowEmptyFields", "WidthMode", "HasCustomSectionOrder"], [1, "mj-forms-scroll-area"], [1, "mj-forms-panels-container"], [1, "mj-before-panels"], [1, "mj-forms-field-panels"], [1, "mj-forms-empty-search-state"], [1, "mj-after-panels"], [3, "record"], [3, "visible", "config"], [1, "mj-forms-empty-search-icon"], [1, "fa-solid", "fa-magnifying-glass"], [1, "mj-forms-empty-search-title"], [1, "mj-forms-empty-search-message"], ["href", "#", 1, "mj-forms-empty-search-link", 3, "click"], [3, "dialogClosed", "record"], [3, "complete", "cancel", "visible", "config"]], template: function MjRecordFormContainerComponent_Template(rf, ctx) { if (rf & 1) {
|
|
436
|
+
i0.ɵɵprojectionDef(_c0);
|
|
437
|
+
i0.ɵɵprojection(0);
|
|
438
|
+
i0.ɵɵelementStart(1, "mj-form-toolbar", 0);
|
|
439
|
+
i0.ɵɵlistener("Navigate", function MjRecordFormContainerComponent_Template_mj_form_toolbar_Navigate_1_listener($event) { return ctx.OnNavigate($event); })("EditModeChange", function MjRecordFormContainerComponent_Template_mj_form_toolbar_EditModeChange_1_listener($event) { return ctx.OnEditModeChange($event); })("BeforeSave", function MjRecordFormContainerComponent_Template_mj_form_toolbar_BeforeSave_1_listener($event) { return ctx.BeforeSave.emit($event); })("SaveRequested", function MjRecordFormContainerComponent_Template_mj_form_toolbar_SaveRequested_1_listener() { return ctx.OnSaveRequested(); })("BeforeCancel", function MjRecordFormContainerComponent_Template_mj_form_toolbar_BeforeCancel_1_listener($event) { return ctx.BeforeCancel.emit($event); })("CancelRequested", function MjRecordFormContainerComponent_Template_mj_form_toolbar_CancelRequested_1_listener() { return ctx.OnCancelRequested(); })("BeforeDelete", function MjRecordFormContainerComponent_Template_mj_form_toolbar_BeforeDelete_1_listener($event) { return ctx.BeforeDelete.emit($event); })("DeleteRequested", function MjRecordFormContainerComponent_Template_mj_form_toolbar_DeleteRequested_1_listener() { return ctx.OnDeleteRequested(); })("FavoriteToggled", function MjRecordFormContainerComponent_Template_mj_form_toolbar_FavoriteToggled_1_listener() { return ctx.OnFavoriteToggled(); })("BeforeHistoryView", function MjRecordFormContainerComponent_Template_mj_form_toolbar_BeforeHistoryView_1_listener($event) { return ctx.BeforeHistoryView.emit($event); })("HistoryRequested", function MjRecordFormContainerComponent_Template_mj_form_toolbar_HistoryRequested_1_listener() { return ctx.OnHistoryRequested(); })("BeforeListManagement", function MjRecordFormContainerComponent_Template_mj_form_toolbar_BeforeListManagement_1_listener($event) { return ctx.BeforeListManagement.emit($event); })("ListManagementRequested", function MjRecordFormContainerComponent_Template_mj_form_toolbar_ListManagementRequested_1_listener() { return ctx.OnListManagementRequested(); })("ShowChangesRequested", function MjRecordFormContainerComponent_Template_mj_form_toolbar_ShowChangesRequested_1_listener() { return ctx.OnShowChangesRequested(); })("CustomButtonClick", function MjRecordFormContainerComponent_Template_mj_form_toolbar_CustomButtonClick_1_listener($event) { return ctx.CustomButtonClick.emit($event); })("FilterChange", function MjRecordFormContainerComponent_Template_mj_form_toolbar_FilterChange_1_listener($event) { return ctx.OnFilterChange($event); })("ExpandAllRequested", function MjRecordFormContainerComponent_Template_mj_form_toolbar_ExpandAllRequested_1_listener() { return ctx.OnExpandAll(); })("CollapseAllRequested", function MjRecordFormContainerComponent_Template_mj_form_toolbar_CollapseAllRequested_1_listener() { return ctx.OnCollapseAll(); })("ShowEmptyFieldsChange", function MjRecordFormContainerComponent_Template_mj_form_toolbar_ShowEmptyFieldsChange_1_listener($event) { return ctx.OnShowEmptyFieldsChange($event); })("WidthModeChange", function MjRecordFormContainerComponent_Template_mj_form_toolbar_WidthModeChange_1_listener($event) { return ctx.OnWidthModeChange($event); })("ResetSectionOrderRequested", function MjRecordFormContainerComponent_Template_mj_form_toolbar_ResetSectionOrderRequested_1_listener() { return ctx.OnResetSectionOrder(); });
|
|
440
|
+
i0.ɵɵelementEnd();
|
|
441
|
+
i0.ɵɵelementStart(2, "div", 1)(3, "div", 2)(4, "div", 3);
|
|
442
|
+
i0.ɵɵprojection(5, 1);
|
|
443
|
+
i0.ɵɵelementEnd();
|
|
444
|
+
i0.ɵɵelementStart(6, "div", 4);
|
|
445
|
+
i0.ɵɵprojection(7, 2);
|
|
446
|
+
i0.ɵɵconditionalCreate(8, MjRecordFormContainerComponent_Conditional_8_Template, 15, 1, "div", 5);
|
|
447
|
+
i0.ɵɵelementEnd();
|
|
448
|
+
i0.ɵɵelementStart(9, "div", 6);
|
|
449
|
+
i0.ɵɵprojection(10, 3);
|
|
450
|
+
i0.ɵɵelementEnd();
|
|
451
|
+
i0.ɵɵprojection(11, 4);
|
|
452
|
+
i0.ɵɵelementEnd()();
|
|
453
|
+
i0.ɵɵconditionalCreate(12, MjRecordFormContainerComponent_Conditional_12_Template, 1, 1, "mj-record-changes", 7);
|
|
454
|
+
i0.ɵɵconditionalCreate(13, MjRecordFormContainerComponent_Conditional_13_Template, 1, 8, "mj-list-management-dialog", 8);
|
|
455
|
+
} if (rf & 2) {
|
|
456
|
+
i0.ɵɵadvance();
|
|
457
|
+
i0.ɵɵproperty("Record", ctx.EffectiveRecord)("EditMode", ctx.EffectiveEditMode)("UserCanEdit", ctx.EffectiveUserCanEdit)("UserCanDelete", ctx.EffectiveUserCanDelete)("IsFavorite", ctx.EffectiveIsFavorite)("FavoriteInitDone", ctx.EffectiveFavoriteInitDone)("IsDirty", ctx.EffectiveIsDirty)("DirtyFieldNames", ctx.EffectiveDirtyFieldNames)("ListCount", ctx.ListCount)("EntityInfo", ctx.EffectiveEntityInfo)("Config", ctx.ToolbarConfig)("IsSaving", ctx.EffectiveIsSaving)("VisibleSectionCount", ctx.VisibleSectionCount)("TotalSectionCount", ctx.TotalSectionCount)("ExpandedSectionCount", ctx.ExpandedSectionCount)("SearchFilter", ctx.EffectiveSearchFilter)("ShowEmptyFields", ctx.EffectiveShowEmptyFields)("WidthMode", ctx.EffectiveWidthMode)("HasCustomSectionOrder", ctx.EffectiveHasCustomSectionOrder);
|
|
458
|
+
i0.ɵɵadvance(2);
|
|
459
|
+
i0.ɵɵclassProp("mj-forms-panels--full-width", ctx.EffectiveWidthMode === "full-width")("mj-forms-panels--edit-mode", ctx.EffectiveEditMode);
|
|
460
|
+
i0.ɵɵadvance(5);
|
|
461
|
+
i0.ɵɵconditional(ctx.EffectiveSearchFilter && ctx.VisibleSectionCount === 0 ? 8 : -1);
|
|
462
|
+
i0.ɵɵadvance(4);
|
|
463
|
+
i0.ɵɵconditional(ctx.ShowRecordChanges && ctx.EffectiveRecord ? 12 : -1);
|
|
464
|
+
i0.ɵɵadvance();
|
|
465
|
+
i0.ɵɵconditional(ctx.ShowListManagement && ctx.EffectiveRecord ? 13 : -1);
|
|
466
|
+
} }, dependencies: [i1.RecordChangesComponent, i2.ListManagementDialogComponent, i3.MjFormToolbarComponent], styles: ["/* ============================================\n RECORD FORM CONTAINER\n Top-level wrapper: toolbar + scrollable content\n ============================================ */\nmj-record-form-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n position: relative;\n overflow: hidden;\n}\n\n/* ViewEncapsulation.None fallback \u2014 ensure the element itself constrains overflow */\nmj-record-form-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n position: relative;\n overflow: hidden;\n}\n\n/* ============================================\n SCROLL AREA (full-width so mouse wheel works anywhere)\n ============================================ */\n.mj-forms-scroll-area {\n flex: 1;\n overflow-y: auto;\n overflow-x: hidden;\n background: #eef0f3;\n}\n\n/* ============================================\n PANELS CONTAINER (centered content within scroll area)\n ============================================ */\n.mj-forms-panels-container {\n padding: 24px 32px 48px;\n max-width: 920px;\n margin: 0 auto;\n width: 100%;\n box-sizing: border-box;\n}\n\n.mj-forms-panels--full-width {\n max-width: none;\n padding-left: 24px;\n padding-right: 24px;\n}\n\n/* Field panels area - vertical flex with gap between sections */\n.mj-forms-field-panels {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n/* After panels area - typically related entity grids */\n.mj-after-panels {\n display: flex;\n flex-direction: column;\n gap: 16px;\n margin-top: 24px;\n}\n\n/* Only show margin-top when after-panels has content */\n.mj-after-panels:empty {\n margin-top: 0;\n}\n\n/* Hide related entity panels in edit mode */\n.mj-forms-panels--edit-mode .mj-before-panels,\n.mj-forms-panels--edit-mode .mj-after-panels {\n display: none;\n}\n\n/* ============================================\n EMPTY SEARCH STATE\n ============================================ */\n.mj-forms-empty-search-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 80px 24px;\n text-align: center;\n min-height: 400px;\n}\n\n.mj-forms-empty-search-icon {\n width: 80px;\n height: 80px;\n border-radius: 50%;\n background: linear-gradient(135deg, #f3f4f6 0%, #e5e7eb 100%);\n display: flex;\n align-items: center;\n justify-content: center;\n margin-bottom: 24px;\n}\n\n.mj-forms-empty-search-icon i {\n font-size: 32px;\n color: #9ca3af;\n}\n\n.mj-forms-empty-search-title {\n font-size: 20px;\n font-weight: 600;\n color: #1f2937;\n margin: 0 0 12px 0;\n}\n\n.mj-forms-empty-search-message {\n font-size: 14px;\n color: #6b7280;\n line-height: 1.6;\n max-width: 400px;\n margin: 0;\n}\n\n.mj-forms-empty-search-message strong {\n color: #374151;\n font-weight: 600;\n}\n\n.mj-forms-empty-search-link {\n color: #667eea;\n text-decoration: none;\n font-weight: 500;\n}\n\n.mj-forms-empty-search-link:hover {\n text-decoration: underline;\n}\n\n/* ============================================\n RESPONSIVE\n ============================================ */\n@media (max-width: 768px) {\n .mj-forms-panels-container {\n padding: 16px 12px 32px;\n }\n}\n"], encapsulation: 2, changeDetection: 0 });
|
|
467
|
+
}
|
|
468
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MjRecordFormContainerComponent, [{
|
|
469
|
+
type: Component,
|
|
470
|
+
args: [{ standalone: false, selector: 'mj-record-form-container', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<!-- ============================================\n BEFORE-TOOLBAR SLOT\n ============================================ -->\n<ng-content select=\"[before-toolbar]\"></ng-content>\n\n<!-- ============================================\n TOOLBAR (bridges FormComponent state \u2192 toolbar inputs)\n ============================================ -->\n<mj-form-toolbar\n [Record]=\"EffectiveRecord\"\n [EditMode]=\"EffectiveEditMode\"\n [UserCanEdit]=\"EffectiveUserCanEdit\"\n [UserCanDelete]=\"EffectiveUserCanDelete\"\n [IsFavorite]=\"EffectiveIsFavorite\"\n [FavoriteInitDone]=\"EffectiveFavoriteInitDone\"\n [IsDirty]=\"EffectiveIsDirty\"\n [DirtyFieldNames]=\"EffectiveDirtyFieldNames\"\n [ListCount]=\"ListCount\"\n [EntityInfo]=\"EffectiveEntityInfo\"\n [Config]=\"ToolbarConfig\"\n [IsSaving]=\"EffectiveIsSaving\"\n [VisibleSectionCount]=\"VisibleSectionCount\"\n [TotalSectionCount]=\"TotalSectionCount\"\n [ExpandedSectionCount]=\"ExpandedSectionCount\"\n [SearchFilter]=\"EffectiveSearchFilter\"\n [ShowEmptyFields]=\"EffectiveShowEmptyFields\"\n [WidthMode]=\"EffectiveWidthMode\"\n [HasCustomSectionOrder]=\"EffectiveHasCustomSectionOrder\"\n (Navigate)=\"OnNavigate($event)\"\n (EditModeChange)=\"OnEditModeChange($event)\"\n (BeforeSave)=\"BeforeSave.emit($event)\"\n (SaveRequested)=\"OnSaveRequested()\"\n (BeforeCancel)=\"BeforeCancel.emit($event)\"\n (CancelRequested)=\"OnCancelRequested()\"\n (BeforeDelete)=\"BeforeDelete.emit($event)\"\n (DeleteRequested)=\"OnDeleteRequested()\"\n (FavoriteToggled)=\"OnFavoriteToggled()\"\n (BeforeHistoryView)=\"BeforeHistoryView.emit($event)\"\n (HistoryRequested)=\"OnHistoryRequested()\"\n (BeforeListManagement)=\"BeforeListManagement.emit($event)\"\n (ListManagementRequested)=\"OnListManagementRequested()\"\n (ShowChangesRequested)=\"OnShowChangesRequested()\"\n (CustomButtonClick)=\"CustomButtonClick.emit($event)\"\n (FilterChange)=\"OnFilterChange($event)\"\n (ExpandAllRequested)=\"OnExpandAll()\"\n (CollapseAllRequested)=\"OnCollapseAll()\"\n (ShowEmptyFieldsChange)=\"OnShowEmptyFieldsChange($event)\"\n (WidthModeChange)=\"OnWidthModeChange($event)\"\n (ResetSectionOrderRequested)=\"OnResetSectionOrder()\">\n</mj-form-toolbar>\n\n<!-- ============================================\n SCROLL AREA (full-width so mouse wheel works anywhere)\n ============================================ -->\n<div class=\"mj-forms-scroll-area\">\n <div class=\"mj-forms-panels-container\"\n [class.mj-forms-panels--full-width]=\"EffectiveWidthMode === 'full-width'\"\n [class.mj-forms-panels--edit-mode]=\"EffectiveEditMode\">\n <!-- Before-panels slot (related entities displayed before fields) -->\n <div class=\"mj-before-panels\">\n <ng-content select=\"[before-panels]\"></ng-content>\n </div>\n\n <!-- Field panels slot -->\n <div class=\"mj-forms-field-panels\">\n <ng-content select=\"[field-panels]\"></ng-content>\n\n <!-- Empty state when no sections match search -->\n @if (EffectiveSearchFilter && VisibleSectionCount === 0) {\n <div class=\"mj-forms-empty-search-state\">\n <div class=\"mj-forms-empty-search-icon\">\n <i class=\"fa-solid fa-magnifying-glass\"></i>\n </div>\n <h3 class=\"mj-forms-empty-search-title\">No sections found</h3>\n <p class=\"mj-forms-empty-search-message\">\n No sections match \"<strong>{{ EffectiveSearchFilter }}</strong>\".\n <br>Try a different search term or <a href=\"#\" (click)=\"OnFilterChange(''); $event.preventDefault()\" class=\"mj-forms-empty-search-link\">clear the search</a>.\n </p>\n </div>\n }\n </div>\n\n <!-- After-panels slot (related entities displayed after fields) -->\n <div class=\"mj-after-panels\">\n <ng-content select=\"[after-panels]\"></ng-content>\n </div>\n\n <!-- Catch-all for any other projected content -->\n <ng-content></ng-content>\n </div>\n</div>\n\n<!-- ============================================\n RECORD CHANGES DRAWER (shown when history button clicked)\n ============================================ -->\n@if (ShowRecordChanges && EffectiveRecord) {\n <mj-record-changes\n [record]=\"EffectiveRecord\"\n (dialogClosed)=\"OnRecordChangesClosed()\">\n </mj-record-changes>\n}\n\n<!-- ============================================\n LIST MANAGEMENT DIALOG (shown when lists button clicked)\n ============================================ -->\n@if (ShowListManagement && EffectiveRecord) {\n <mj-list-management-dialog\n [visible]=\"ShowListManagement\"\n [config]=\"{\n mode: 'manage',\n entityId: EffectiveRecord.EntityInfo.ID,\n entityName: EffectiveRecord.EntityInfo.Name,\n recordIds: [EffectiveRecord.PrimaryKey.Values()[0]],\n allowCreate: true\n }\"\n (complete)=\"OnListManagementClosed()\"\n (cancel)=\"OnListManagementClosed()\">\n </mj-list-management-dialog>\n}\n", styles: ["/* ============================================\n RECORD FORM CONTAINER\n Top-level wrapper: toolbar + scrollable content\n ============================================ */\nmj-record-form-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n position: relative;\n overflow: hidden;\n}\n\n/* ViewEncapsulation.None fallback \u2014 ensure the element itself constrains overflow */\nmj-record-form-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n position: relative;\n overflow: hidden;\n}\n\n/* ============================================\n SCROLL AREA (full-width so mouse wheel works anywhere)\n ============================================ */\n.mj-forms-scroll-area {\n flex: 1;\n overflow-y: auto;\n overflow-x: hidden;\n background: #eef0f3;\n}\n\n/* ============================================\n PANELS CONTAINER (centered content within scroll area)\n ============================================ */\n.mj-forms-panels-container {\n padding: 24px 32px 48px;\n max-width: 920px;\n margin: 0 auto;\n width: 100%;\n box-sizing: border-box;\n}\n\n.mj-forms-panels--full-width {\n max-width: none;\n padding-left: 24px;\n padding-right: 24px;\n}\n\n/* Field panels area - vertical flex with gap between sections */\n.mj-forms-field-panels {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n/* After panels area - typically related entity grids */\n.mj-after-panels {\n display: flex;\n flex-direction: column;\n gap: 16px;\n margin-top: 24px;\n}\n\n/* Only show margin-top when after-panels has content */\n.mj-after-panels:empty {\n margin-top: 0;\n}\n\n/* Hide related entity panels in edit mode */\n.mj-forms-panels--edit-mode .mj-before-panels,\n.mj-forms-panels--edit-mode .mj-after-panels {\n display: none;\n}\n\n/* ============================================\n EMPTY SEARCH STATE\n ============================================ */\n.mj-forms-empty-search-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 80px 24px;\n text-align: center;\n min-height: 400px;\n}\n\n.mj-forms-empty-search-icon {\n width: 80px;\n height: 80px;\n border-radius: 50%;\n background: linear-gradient(135deg, #f3f4f6 0%, #e5e7eb 100%);\n display: flex;\n align-items: center;\n justify-content: center;\n margin-bottom: 24px;\n}\n\n.mj-forms-empty-search-icon i {\n font-size: 32px;\n color: #9ca3af;\n}\n\n.mj-forms-empty-search-title {\n font-size: 20px;\n font-weight: 600;\n color: #1f2937;\n margin: 0 0 12px 0;\n}\n\n.mj-forms-empty-search-message {\n font-size: 14px;\n color: #6b7280;\n line-height: 1.6;\n max-width: 400px;\n margin: 0;\n}\n\n.mj-forms-empty-search-message strong {\n color: #374151;\n font-weight: 600;\n}\n\n.mj-forms-empty-search-link {\n color: #667eea;\n text-decoration: none;\n font-weight: 500;\n}\n\n.mj-forms-empty-search-link:hover {\n text-decoration: underline;\n}\n\n/* ============================================\n RESPONSIVE\n ============================================ */\n@media (max-width: 768px) {\n .mj-forms-panels-container {\n padding: 16px 12px 32px;\n }\n}\n"] }]
|
|
471
|
+
}], null, { Record: [{
|
|
472
|
+
type: Input
|
|
473
|
+
}], FormComponent: [{
|
|
474
|
+
type: Input
|
|
475
|
+
}], EntityInfo: [{
|
|
476
|
+
type: Input
|
|
477
|
+
}], EditMode: [{
|
|
478
|
+
type: Input
|
|
479
|
+
}], UserCanEdit: [{
|
|
480
|
+
type: Input
|
|
481
|
+
}], UserCanDelete: [{
|
|
482
|
+
type: Input
|
|
483
|
+
}], IsFavorite: [{
|
|
484
|
+
type: Input
|
|
485
|
+
}], FavoriteInitDone: [{
|
|
486
|
+
type: Input
|
|
487
|
+
}], IsDirty: [{
|
|
488
|
+
type: Input
|
|
489
|
+
}], DirtyFieldNames: [{
|
|
490
|
+
type: Input
|
|
491
|
+
}], ListCount: [{
|
|
492
|
+
type: Input
|
|
493
|
+
}], IsSaving: [{
|
|
494
|
+
type: Input
|
|
495
|
+
}], ToolbarConfig: [{
|
|
496
|
+
type: Input
|
|
497
|
+
}], WidthMode: [{
|
|
498
|
+
type: Input
|
|
499
|
+
}], Navigate: [{
|
|
500
|
+
type: Output
|
|
501
|
+
}], EditModeChange: [{
|
|
502
|
+
type: Output
|
|
503
|
+
}], BeforeSave: [{
|
|
504
|
+
type: Output
|
|
505
|
+
}], SaveRequested: [{
|
|
506
|
+
type: Output
|
|
507
|
+
}], BeforeCancel: [{
|
|
508
|
+
type: Output
|
|
509
|
+
}], CancelRequested: [{
|
|
510
|
+
type: Output
|
|
511
|
+
}], BeforeDelete: [{
|
|
512
|
+
type: Output
|
|
513
|
+
}], DeleteRequested: [{
|
|
514
|
+
type: Output
|
|
515
|
+
}], FavoriteToggled: [{
|
|
516
|
+
type: Output
|
|
517
|
+
}], BeforeHistoryView: [{
|
|
518
|
+
type: Output
|
|
519
|
+
}], HistoryRequested: [{
|
|
520
|
+
type: Output
|
|
521
|
+
}], BeforeListManagement: [{
|
|
522
|
+
type: Output
|
|
523
|
+
}], ListManagementRequested: [{
|
|
524
|
+
type: Output
|
|
525
|
+
}], ShowChangesRequested: [{
|
|
526
|
+
type: Output
|
|
527
|
+
}], CustomButtonClick: [{
|
|
528
|
+
type: Output
|
|
529
|
+
}], Panels: [{
|
|
530
|
+
type: ContentChildren,
|
|
531
|
+
args: [MjCollapsiblePanelComponent, { descendants: true }]
|
|
532
|
+
}] }); })();
|
|
533
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MjRecordFormContainerComponent, { className: "MjRecordFormContainerComponent", filePath: "src/lib/container/record-form-container.component.ts", lineNumber: 62 }); })();
|
|
534
|
+
//# sourceMappingURL=record-form-container.component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-form-container.component.js","sourceRoot":"","sources":["../../../src/lib/container/record-form-container.component.ts","../../../src/lib/container/record-form-container.component.html"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EACtC,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,EAClD,eAAe,EACf,iBAAiB,EAClB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAqB,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAGpF,OAAO,EAAE,2BAA2B,EAAE,MAAM,sCAAsC,CAAC;AACnF,OAAO,EAIL,0BAA0B,EAC1B,6BAA6B,EAE9B,MAAM,sBAAsB,CAAC;;;;;;;;;;;ICkDpB,AADF,8BAAyC,aACC;IACtC,wBAA4C;IAC9C,iBAAM;IACN,8BAAwC;IAAA,iCAAiB;IAAA,iBAAK;IAC9D,6BAAyC;IACvC,qCAAmB;IAAA,8BAAQ;IAAA,YAA2B;IAAA,iBAAS;IAAA,oBAC/D;IAAA,sBAAI;IAAA,gDAA+B;IAAA,8BAAqG;IAAzF,8KAAS,sBAAe,EAAE,CAAC,wBAAE,uBAAuB,KAAC;IAAoC,iCAAgB;IAAA,iBAAI;IAAA,mBAC9J;IACF,AADE,iBAAI,EACA;;;IAHyB,eAA2B;IAA3B,kDAA2B;;;;IAqBhE,6CAE2C;IAAzC,4NAAgB,8BAAuB,KAAC;IAC1C,iBAAoB;;;IAFlB,+CAA0B;;;;IAS5B,qDAUsC;IAApC,AADA,4NAAY,+BAAwB,KAAC,2MAC3B,+BAAwB,KAAC;IACrC,iBAA4B;;;IAT1B,AADA,mDAA8B,+LAO5B;;AD3FN;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AASH,MAAM,OAAO,8BAA8B;IACjC,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAChC,QAAQ,GAAG,IAAI,OAAO,EAAQ,CAAC;IAC/B,cAAc,GAAG,IAAI,OAAO,EAAQ,CAAC;IAE7C,2BAA2B;IAE3B,mDAAmD;IACnD,iBAAiB,GAAG,KAAK,CAAC;IAE1B,oDAAoD;IACpD,kBAAkB,GAAG,KAAK,CAAC;IAE3B,2BAA2B;IAE3B,+CAA+C;IACtC,MAAM,CAAc;IAE7B;;;;OAIG;IACM,aAAa,GAA6B,IAAI,CAAC;IAExD,sEAAsE;IAE7D,UAAU,GAAsB,IAAI,CAAC;IACrC,QAAQ,GAAG,KAAK,CAAC;IACjB,WAAW,GAAG,KAAK,CAAC;IACpB,aAAa,GAAG,KAAK,CAAC;IACtB,UAAU,GAAG,KAAK,CAAC;IACnB,gBAAgB,GAAG,KAAK,CAAC;IACzB,OAAO,GAAG,KAAK,CAAC;IAChB,eAAe,GAAa,EAAE,CAAC;IAC/B,SAAS,GAAG,CAAC,CAAC;IACd,QAAQ,GAAG,KAAK,CAAC;IACjB,aAAa,GAAsB,sBAAsB,CAAC;IAC1D,SAAS,GAAkB,UAAU,CAAC;IAE/C,oBAAoB;IAEpB,kFAAkF;IACxE,QAAQ,GAAG,IAAI,YAAY,EAAuB,CAAC;IAE7D,sGAAsG;IAC5F,cAAc,GAAG,IAAI,YAAY,EAAW,CAAC;IAEvD,4EAA4E;IAClE,UAAU,GAAG,IAAI,YAAY,EAAuB,CAAC;IAE/D,+DAA+D;IACrD,aAAa,GAAG,IAAI,YAAY,EAAQ,CAAC;IAEnD,8EAA8E;IACpE,YAAY,GAAG,IAAI,YAAY,EAAyB,CAAC;IAEnE,iEAAiE;IACvD,eAAe,GAAG,IAAI,YAAY,EAAQ,CAAC;IAErD,8EAA8E;IACpE,YAAY,GAAG,IAAI,YAAY,EAAyB,CAAC;IAEnE,0EAA0E;IAChE,eAAe,GAAG,IAAI,YAAY,EAAQ,CAAC;IAErD,gDAAgD;IACtC,eAAe,GAAG,IAAI,YAAY,EAAQ,CAAC;IAErD,oFAAoF;IAC1E,iBAAiB,GAAG,IAAI,YAAY,EAA8B,CAAC;IAE7E,6CAA6C;IACnC,gBAAgB,GAAG,IAAI,YAAY,EAAQ,CAAC;IAEtD,uFAAuF;IAC7E,oBAAoB,GAAG,IAAI,YAAY,EAAiC,CAAC;IAEnF,gDAAgD;IACtC,uBAAuB,GAAG,IAAI,YAAY,EAAQ,CAAC;IAE7D,6CAA6C;IACnC,oBAAoB,GAAG,IAAI,YAAY,EAAQ,CAAC;IAE1D,sDAAsD;IAC5C,iBAAiB,GAAG,IAAI,YAAY,EAAqC,CAAC;IAEpF,6BAA6B;IAG7B,MAAM,CAA0C;IAEhD,mCAAmC;IAEnC,sDAAsD;IACtD,IAAY,EAAE;QACZ,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,qEAAqE;IAErE,IAAI,eAAe;QACjB,OAAO,IAAI,CAAC,EAAE,EAAE,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC;IACxC,CAAC;IAED,IAAI,iBAAiB;QACnB,OAAO,IAAI,CAAC,EAAE,EAAE,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC;IAC5C,CAAC;IAED,IAAI,oBAAoB;QACtB,OAAO,IAAI,CAAC,EAAE,EAAE,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC;IAClD,CAAC;IAED,IAAI,sBAAsB;QACxB,OAAO,IAAI,CAAC,EAAE,EAAE,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC;IACtD,CAAC;IAED,IAAI,mBAAmB;QACrB,OAAO,IAAI,CAAC,EAAE,EAAE,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC;IAChD,CAAC;IAED,IAAI,yBAAyB;QAC3B,OAAO,IAAI,CAAC,EAAE,EAAE,gBAAgB,IAAI,IAAI,CAAC,gBAAgB,CAAC;IAC5D,CAAC;IAED,IAAI,mBAAmB;QACrB,OAAQ,IAAI,CAAC,EAAE,EAAE,UAAyB,IAAI,IAAI,CAAC,UAAU,CAAC;IAChE,CAAC;IAED,IAAI,gBAAgB;QAClB,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,IAAI,KAAK,CAAC;QACxC,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,IAAI,wBAAwB;QAC1B,IAAI,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACrE,CAAC;QACD,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAED,IAAI,iBAAiB;QACnB,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,IAAI,kBAAkB;QACpB,IAAI,IAAI,CAAC,EAAE,EAAE,gBAAgB,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC,EAAE,CAAC,gBAAgB,EAAE,CAAC;QACpC,CAAC;QACD,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,IAAI,qBAAqB;QACvB,OAAO,IAAI,CAAC,EAAE,EAAE,YAAY,IAAI,EAAE,CAAC;IACrC,CAAC;IAED,IAAI,wBAAwB;QAC1B,OAAO,IAAI,CAAC,EAAE,EAAE,eAAe,IAAI,KAAK,CAAC;IAC3C,CAAC;IAED,IAAI,8BAA8B;QAChC,IAAI,IAAI,CAAC,EAAE,EAAE,qBAAqB,EAAE,CAAC;YACnC,OAAO,IAAI,CAAC,EAAE,CAAC,qBAAqB,EAAE,CAAC;QACzC,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,2BAA2B;IAE3B,IAAI,iBAAiB;QACnB,IAAI,IAAI,CAAC,EAAE,EAAE,oBAAoB,EAAE,CAAC;YAClC,OAAO,IAAI,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC;QACxC,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,IAAI,mBAAmB;QACrB,IAAI,IAAI,CAAC,EAAE,EAAE,sBAAsB,EAAE,CAAC;YACpC,OAAO,IAAI,CAAC,EAAE,CAAC,sBAAsB,EAAE,CAAC;QAC1C,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO,CAAC,CAAC;QAC3B,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC;IACrD,CAAC;IAED,IAAI,oBAAoB;QACtB,IAAI,IAAI,CAAC,EAAE,EAAE,gBAAgB,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC,EAAE,CAAC,gBAAgB,EAAE,CAAC;QACpC,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO,CAAC,CAAC;QAC3B,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC;IACnE,CAAC;IAED,sBAAsB;IAEtB,kBAAkB;QAChB,oDAAoD;QACpD,IAAI,CAAC,8BAA8B,EAAE,CAAC;QAEtC,4DAA4D;QAC5D,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,EAAE;YAChE,IAAI,CAAC,8BAA8B,EAAE,CAAC;YACtC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC1B,CAAC,CAAC,CAAC;QAEH,0CAA0C;QAC1C,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;IAED,WAAW;QACT,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;QAC3B,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC;IAED;;;OAGG;IACK,8BAA8B;QACpC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,mCAAmC;QAC/D,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAC1B,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAA0B,EAAE,EAAE;gBAC3F,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC5B,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACK,kBAAkB;QACxB,uEAAuE;QACvE,MAAM,aAAa,GAAG,WAAW,CAAC,GAAG,EAAE;YACrC,IAAI,IAAI,CAAC,eAAe,EAAE,KAAK,KAAK,SAAS,EAAE,CAAC;gBAC9C,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;YAC1B,CAAC;QACH,CAAC,EAAE,GAAG,CAAC,CAAC;QAER,qBAAqB;QACrB,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,mCAAmC;IAEnC;;OAEG;IACH,UAAU,CAAC,KAA0B;QACnC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,QAAiB;QAChC,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACZ,IAAI,QAAQ,EAAE,CAAC;gBACb,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC;YAC1B,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;YACxB,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC1B,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe;QACnB,IAAI,IAAI,CAAC,EAAE,EAAE,UAAU,EAAE,CAAC;YACxB,yCAAyC;YACzC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;YAExB,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACjC,CAAC;oBAAS,CAAC;gBACT,4EAA4E;gBAC5E,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;gBACxB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;gBACtB,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;YAC1B,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;QAC5B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,iBAAiB;QACf,IAAI,IAAI,CAAC,EAAE,EAAE,UAAU,EAAE,CAAC;YACxB,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC;YACrB,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC1B,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;QAC9B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,iBAAiB;QACf,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;IAC9B,CAAC;IAED,iBAAiB;QACf,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;IAC9B,CAAC;IAED,kBAAkB;QAChB,qCAAqC;QACrC,MAAM,WAAW,GAAG,IAAI,0BAA0B,EAAE,CAAC;QACrD,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACzC,IAAI,WAAW,CAAC,MAAM;YAAE,OAAO;QAE/B,wDAAwD;QACxD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAExB,uCAAuC;QACvC,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC;IAC/B,CAAC;IAED,yBAAyB;QACvB,qCAAqC;QACrC,MAAM,WAAW,GAAG,IAAI,6BAA6B,EAAE,CAAC;QACxD,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC5C,IAAI,WAAW,CAAC,MAAM;YAAE,OAAO;QAE/B,yDAAyD;QACzD,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAC/B,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAExB,uCAAuC;QACvC,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,CAAC;IACtC,CAAC;IAED,qBAAqB;QACnB,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;QAC/B,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;IAC1B,CAAC;IAED,sBAAsB;QACpB,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;QAChC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;IAC1B,CAAC;IAED,sBAAsB;QACpB,IAAI,IAAI,CAAC,EAAE,EAAE,WAAW,EAAE,CAAC;YACzB,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;QACxB,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC;QACnC,CAAC;IACH,CAAC;IAED,qCAAqC;IAErC,cAAc,CAAC,MAAc;QAC3B,IAAI,IAAI,CAAC,EAAE,EAAE,cAAc,EAAE,CAAC;YAC5B,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YAC/B,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,WAAW;QACT,IAAI,IAAI,CAAC,EAAE,EAAE,iBAAiB,EAAE,CAAC;YAC/B,IAAI,CAAC,EAAE,CAAC,iBAAiB,EAAE,CAAC;YAC5B,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,aAAa;QACX,IAAI,IAAI,CAAC,EAAE,EAAE,mBAAmB,EAAE,CAAC;YACjC,IAAI,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC;YAC9B,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,uBAAuB,CAAC,IAAa;QACnC,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACZ,IAAI,CAAC,EAAE,CAAC,eAAe,GAAG,IAAI,CAAC;YAC/B,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,iBAAiB,CAAC,IAAmB;QACnC,IAAI,IAAI,CAAC,EAAE,EAAE,gBAAgB,EAAE,CAAC;YAC9B,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;YAC/B,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC1B,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACtB,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,mBAAmB;QACjB,IAAI,IAAI,CAAC,EAAE,EAAE,iBAAiB,EAAE,CAAC;YAC/B,IAAI,CAAC,EAAE,CAAC,iBAAiB,EAAE,CAAC;YAC5B,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC1B,CAAC;IACH,CAAC;wHAvZU,8BAA8B;6DAA9B,8BAA8B;wCAyFxB,2BAA2B;;;;;;YCnJ9C,kBAAmD;YAKnD,0CAwCuD;YAArD,AADA,AADA,AADA,AADA,AADA,AADA,AADA,AADA,AADA,AADA,AADA,AADA,AADA,AADA,AADA,AADA,AADA,AADA,AADA,AADA,gIAAY,sBAAkB,IAAC,+HACb,4BAAwB,IAAC,uHAC7B,2BAAuB,IAAC,uHACrB,qBAAiB,IAAC,2HACnB,6BAAyB,IAAC,2HACvB,uBAAmB,IAAC,2HACvB,6BAAyB,IAAC,2HACvB,uBAAmB,IAAC,2HACpB,uBAAmB,IAAC,qIAClB,kCAA8B,IAAC,6HAChC,wBAAoB,IAAC,2IACjB,qCAAiC,IAAC,2IAC/B,+BAA2B,IAAC,qIAC/B,4BAAwB,IAAC,qIAC5B,kCAA8B,IAAC,2HACpC,0BAAsB,IAAC,iIACjB,iBAAa,IAAC,qIACZ,mBAAe,IAAC,6IACf,mCAA+B,IAAC,iIACtC,6BAAyB,IAAC,iJACf,yBAAqB,IAAC;YACtD,iBAAkB;YAUd,AAJF,AADF,8BAAkC,aAG4B,aAE5B;YAC5B,qBAAkD;YACpD,iBAAM;YAGN,8BAAmC;YACjC,qBAAiD;YAGjD,iGAA0D;YAY5D,iBAAM;YAGN,8BAA6B;YAC3B,sBAAiD;YACnD,iBAAM;YAGN,sBAAyB;YAE7B,AADE,iBAAM,EACF;YAKN,gHAA4C;YAU5C,wHAA6C;;YAhG3C,cAA0B;YAkB1B,AADA,AADA,AADA,AADA,AADA,AADA,AADA,AADA,AADA,AADA,AADA,AADA,AADA,AADA,AADA,AADA,AADA,AADA,4CAA0B,mCACI,yCACM,6CACI,uCACN,mDACY,iCAClB,iDACgB,4BACrB,uCACW,6BACV,mCACM,gDACa,4CACJ,kDACM,2CACP,iDACM,qCACZ,6DACwB;YA6BnD,eAAyE;YACzE,AADA,sFAAyE,qDACnB;YAWvD,eAWC;YAXD,qFAWC;YAgBP,eAKC;YALD,wEAKC;YAKD,cAaC;YAbD,yEAaC;;;iFDzDY,8BAA8B;cAR1C,SAAS;6BACI,KAAK,YACP,0BAA0B,mBACnB,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI;;kBAoBpC,KAAK;;kBAOL,KAAK;;kBAIL,KAAK;;kBACL,KAAK;;kBACL,KAAK;;kBACL,KAAK;;kBACL,KAAK;;kBACL,KAAK;;kBACL,KAAK;;kBACL,KAAK;;kBACL,KAAK;;kBACL,KAAK;;kBACL,KAAK;;kBACL,KAAK;;kBAKL,MAAM;;kBAGN,MAAM;;kBAGN,MAAM;;kBAGN,MAAM;;kBAGN,MAAM;;kBAGN,MAAM;;kBAGN,MAAM;;kBAGN,MAAM;;kBAGN,MAAM;;kBAGN,MAAM;;kBAGN,MAAM;;kBAGN,MAAM;;kBAGN,MAAM;;kBAGN,MAAM;;kBAGN,MAAM;;kBAIN,eAAe;mBAAC,2BAA2B,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;;kFAzFxD,8BAA8B"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { EventEmitter } from '@angular/core';
|
|
2
2
|
import { RunViewParams } from '@memberjunction/core';
|
|
3
3
|
import { EntityDataGridComponent, AfterRowDoubleClickEventArgs, AfterRowClickEventArgs, AfterDataLoadEventArgs, GridToolbarConfig, GridSelectionMode } from '@memberjunction/ng-entity-viewer';
|
|
4
|
+
import { FormNavigationEvent } from './types/navigation-events';
|
|
4
5
|
import * as i0 from "@angular/core";
|
|
5
6
|
/**
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* SharedService.OpenEntityRecord.
|
|
7
|
+
* Wrapper for EntityDataGridComponent that emits navigation events on row double-click.
|
|
8
|
+
* The host application subscribes to Navigate events and maps them to its routing system.
|
|
9
9
|
*
|
|
10
10
|
* This component is used by CodeGen for related entity grids in forms.
|
|
11
11
|
*/
|
|
@@ -19,17 +19,19 @@ export declare class ExplorerEntityDataGridComponent {
|
|
|
19
19
|
ToolbarConfig: GridToolbarConfig;
|
|
20
20
|
SelectionMode: GridSelectionMode;
|
|
21
21
|
/**
|
|
22
|
-
* When true, double-clicking a row
|
|
22
|
+
* When true, double-clicking a row emits a Navigate event.
|
|
23
23
|
* Defaults to true.
|
|
24
24
|
*/
|
|
25
25
|
NavigateOnDoubleClick: boolean;
|
|
26
26
|
AfterRowDoubleClick: EventEmitter<AfterRowDoubleClickEventArgs>;
|
|
27
27
|
AfterRowClick: EventEmitter<AfterRowClickEventArgs>;
|
|
28
28
|
AfterDataLoad: EventEmitter<AfterDataLoadEventArgs>;
|
|
29
|
+
/** Emitted when a row is double-clicked and NavigateOnDoubleClick is true */
|
|
30
|
+
Navigate: EventEmitter<FormNavigationEvent>;
|
|
29
31
|
onRowDoubleClick(event: AfterRowDoubleClickEventArgs): void;
|
|
30
32
|
onRowClick(event: AfterRowClickEventArgs): void;
|
|
31
33
|
onDataLoad(event: AfterDataLoadEventArgs): void;
|
|
32
34
|
static ɵfac: i0.ɵɵFactoryDeclaration<ExplorerEntityDataGridComponent, never>;
|
|
33
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ExplorerEntityDataGridComponent, "mj-explorer-entity-data-grid", never, { "Params": { "alias": "Params"; "required": false; }; "NewRecordValues": { "alias": "NewRecordValues"; "required": false; }; "AllowLoad": { "alias": "AllowLoad"; "required": false; }; "ShowToolbar": { "alias": "ShowToolbar"; "required": false; }; "Height": { "alias": "Height"; "required": false; }; "ToolbarConfig": { "alias": "ToolbarConfig"; "required": false; }; "SelectionMode": { "alias": "SelectionMode"; "required": false; }; "NavigateOnDoubleClick": { "alias": "NavigateOnDoubleClick"; "required": false; }; }, { "AfterRowDoubleClick": "AfterRowDoubleClick"; "AfterRowClick": "AfterRowClick"; "AfterDataLoad": "AfterDataLoad"; }, never, never, false, never>;
|
|
35
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ExplorerEntityDataGridComponent, "mj-explorer-entity-data-grid", never, { "Params": { "alias": "Params"; "required": false; }; "NewRecordValues": { "alias": "NewRecordValues"; "required": false; }; "AllowLoad": { "alias": "AllowLoad"; "required": false; }; "ShowToolbar": { "alias": "ShowToolbar"; "required": false; }; "Height": { "alias": "Height"; "required": false; }; "ToolbarConfig": { "alias": "ToolbarConfig"; "required": false; }; "SelectionMode": { "alias": "SelectionMode"; "required": false; }; "NavigateOnDoubleClick": { "alias": "NavigateOnDoubleClick"; "required": false; }; }, { "AfterRowDoubleClick": "AfterRowDoubleClick"; "AfterRowClick": "AfterRowClick"; "AfterDataLoad": "AfterDataLoad"; "Navigate": "Navigate"; }, never, never, false, never>;
|
|
34
36
|
}
|
|
35
37
|
//# sourceMappingURL=explorer-entity-data-grid.component.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"explorer-entity-data-grid.component.d.ts","sourceRoot":"","sources":["../../src/lib/explorer-entity-data-grid.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAa,MAAM,eAAe,CAAC;AAClF,OAAO,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"explorer-entity-data-grid.component.d.ts","sourceRoot":"","sources":["../../src/lib/explorer-entity-data-grid.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAa,MAAM,eAAe,CAAC;AAClF,OAAO,EAAE,aAAa,EAAgB,MAAM,sBAAsB,CAAC;AACnE,OAAO,EACH,uBAAuB,EACvB,4BAA4B,EAC5B,sBAAsB,EACtB,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,EACpB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;;AAEhE;;;;;GAKG;AACH,qBA0Ba,+BAA+B;IAChB,SAAS,EAAG,uBAAuB,CAAC;IAGnD,MAAM,EAAE,aAAa,GAAG,IAAI,CAAQ;IACpC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAM;IAC9C,SAAS,EAAE,OAAO,CAAQ;IAC1B,WAAW,EAAE,OAAO,CAAQ;IAC5B,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,aAAa,CAAU;IACjD,aAAa,EAAE,iBAAiB,CAAM;IACtC,aAAa,EAAE,iBAAiB,CAAY;IAErD;;;OAGG;IACM,qBAAqB,EAAE,OAAO,CAAQ;IAGrC,mBAAmB,6CAAoD;IACvE,aAAa,uCAA8C;IAC3D,aAAa,uCAA8C;IAErE,6EAA6E;IACnE,QAAQ,oCAA2C;IAE7D,gBAAgB,CAAC,KAAK,EAAE,4BAA4B,GAAG,IAAI;IAmB3D,UAAU,CAAC,KAAK,EAAE,sBAAsB,GAAG,IAAI;IAK/C,UAAU,CAAC,KAAK,EAAE,sBAAsB,GAAG,IAAI;yCAlDtC,+BAA+B;2CAA/B,+BAA+B;CAsD3C"}
|