@memberjunction/ng-base-forms 2.116.0 → 2.117.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-field-component.d.ts +20 -1
- package/dist/lib/base-field-component.d.ts.map +1 -1
- package/dist/lib/base-field-component.js +82 -32
- package/dist/lib/base-field-component.js.map +1 -1
- package/dist/lib/base-form-component.d.ts +119 -7
- package/dist/lib/base-form-component.d.ts.map +1 -1
- package/dist/lib/base-form-component.js +210 -15
- package/dist/lib/base-form-component.js.map +1 -1
- package/dist/lib/base-form-context.d.ts +23 -0
- package/dist/lib/base-form-context.d.ts.map +1 -0
- package/dist/lib/base-form-context.js +10 -0
- package/dist/lib/base-form-context.js.map +1 -0
- package/dist/lib/base-form-section-info.d.ts +28 -0
- package/dist/lib/base-form-section-info.d.ts.map +1 -0
- package/dist/lib/base-form-section-info.js +34 -0
- package/dist/lib/base-form-section-info.js.map +1 -0
- package/dist/lib/collapsible-panel.component.d.ts +50 -0
- package/dist/lib/collapsible-panel.component.d.ts.map +1 -0
- package/dist/lib/collapsible-panel.component.js +281 -0
- package/dist/lib/collapsible-panel.component.js.map +1 -0
- package/dist/lib/form-section-controls.component.d.ts +24 -0
- package/dist/lib/form-section-controls.component.d.ts.map +1 -0
- package/dist/lib/form-section-controls.component.js +150 -0
- package/dist/lib/form-section-controls.component.js.map +1 -0
- package/dist/module.d.ts +18 -16
- package/dist/module.d.ts.map +1 -1
- package/dist/module.js +14 -4
- package/dist/module.js.map +1 -1
- package/dist/public-api.d.ts +5 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +4 -0
- package/dist/public-api.js.map +1 -1
- package/package.json +10 -10
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { EventEmitter, AfterViewInit, Renderer2 } from '@angular/core';
|
|
2
2
|
import { BaseEntity, EntityFieldInfo } from '@memberjunction/core';
|
|
3
3
|
import { BaseRecordComponent } from './base-record-component';
|
|
4
|
+
import { BaseFormContext } from './base-form-context';
|
|
4
5
|
import { MarkdownComponent } from 'ngx-markdown';
|
|
5
6
|
import * as i0 from "@angular/core";
|
|
6
7
|
/**
|
|
@@ -40,6 +41,15 @@ export declare class MJFormField extends BaseRecordComponent implements AfterVie
|
|
|
40
41
|
* If set to false, the label for the field will not be shown. The default is true.
|
|
41
42
|
*/
|
|
42
43
|
ShowLabel: boolean;
|
|
44
|
+
/**
|
|
45
|
+
* Form context containing all form-level state (filter, showEmptyFields, etc.)
|
|
46
|
+
*/
|
|
47
|
+
formContext?: BaseFormContext;
|
|
48
|
+
/**
|
|
49
|
+
* When true (default), the field will be hidden when it has no value and is in read-only mode.
|
|
50
|
+
* This helps reduce visual clutter by hiding empty fields.
|
|
51
|
+
*/
|
|
52
|
+
hideWhenEmptyInReadOnlyMode: boolean;
|
|
43
53
|
languages: import("@codemirror/language").LanguageDescription[];
|
|
44
54
|
private _displayName;
|
|
45
55
|
/**
|
|
@@ -47,6 +57,11 @@ export declare class MJFormField extends BaseRecordComponent implements AfterVie
|
|
|
47
57
|
*/
|
|
48
58
|
get DisplayName(): string;
|
|
49
59
|
set DisplayName(newValue: string);
|
|
60
|
+
/**
|
|
61
|
+
* Returns the display name with search highlighting applied if formContext.sectionFilter is set
|
|
62
|
+
*/
|
|
63
|
+
get HighlightedDisplayName(): string;
|
|
64
|
+
private escapeRegex;
|
|
50
65
|
get ExtendedType(): string;
|
|
51
66
|
private _possibleValues;
|
|
52
67
|
/**
|
|
@@ -63,10 +78,14 @@ export declare class MJFormField extends BaseRecordComponent implements AfterVie
|
|
|
63
78
|
*/
|
|
64
79
|
get IsFieldReadOnly(): boolean;
|
|
65
80
|
get FieldInfo(): EntityFieldInfo;
|
|
81
|
+
/**
|
|
82
|
+
* Returns true if the field should be hidden (empty value in read-only mode with hideWhenEmptyInReadOnlyMode enabled)
|
|
83
|
+
*/
|
|
84
|
+
get shouldHideField(): boolean;
|
|
66
85
|
markdown: MarkdownComponent | undefined;
|
|
67
86
|
constructor(renderer: Renderer2);
|
|
68
87
|
ngAfterViewInit(): void;
|
|
69
88
|
static ɵfac: i0.ɵɵFactoryDeclaration<MJFormField, never>;
|
|
70
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<MJFormField, "mj-form-field", never, { "record": { "alias": "record"; "required": false; }; "EditMode": { "alias": "EditMode"; "required": false; }; "FieldName": { "alias": "FieldName"; "required": false; }; "Type": { "alias": "Type"; "required": false; }; "LinkType": { "alias": "LinkType"; "required": false; }; "LinkComponentType": { "alias": "LinkComponentType"; "required": false; }; "ShowLabel": { "alias": "ShowLabel"; "required": false; }; "DisplayName": { "alias": "DisplayName"; "required": false; }; "PossibleValues": { "alias": "PossibleValues"; "required": false; }; "Value": { "alias": "Value"; "required": false; }; }, { "ValueChange": "ValueChange"; }, never, never, false, never>;
|
|
89
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<MJFormField, "mj-form-field", never, { "record": { "alias": "record"; "required": false; }; "EditMode": { "alias": "EditMode"; "required": false; }; "FieldName": { "alias": "FieldName"; "required": false; }; "Type": { "alias": "Type"; "required": false; }; "LinkType": { "alias": "LinkType"; "required": false; }; "LinkComponentType": { "alias": "LinkComponentType"; "required": false; }; "ShowLabel": { "alias": "ShowLabel"; "required": false; }; "formContext": { "alias": "formContext"; "required": false; }; "hideWhenEmptyInReadOnlyMode": { "alias": "hideWhenEmptyInReadOnlyMode"; "required": false; }; "DisplayName": { "alias": "DisplayName"; "required": false; }; "PossibleValues": { "alias": "PossibleValues"; "required": false; }; "Value": { "alias": "Value"; "required": false; }; }, { "ValueChange": "ValueChange"; }, never, never, false, never>;
|
|
71
90
|
}
|
|
72
91
|
//# sourceMappingURL=base-field-component.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-field-component.d.ts","sourceRoot":"","sources":["../../src/lib/base-field-component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAyB,aAAa,EAAE,SAAS,EAAqB,MAAM,eAAe,CAAC;AAC3I,OAAO,EAAE,UAAU,EAAe,eAAe,EAAqB,MAAM,sBAAsB,CAAC;AACnG,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;;AAGjD;;;;;GAKG;AACH,qBAKa,WAAY,SAAQ,mBAAoB,YAAW,aAAa;
|
|
1
|
+
{"version":3,"file":"base-field-component.d.ts","sourceRoot":"","sources":["../../src/lib/base-field-component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAyB,aAAa,EAAE,SAAS,EAAqB,MAAM,eAAe,CAAC;AAC3I,OAAO,EAAE,UAAU,EAAe,eAAe,EAAqB,MAAM,sBAAsB,CAAC;AACnG,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;;AAGjD;;;;;GAKG;AACH,qBAKa,WAAY,SAAQ,mBAAoB,YAAW,aAAa;IA8KzE,OAAO,CAAC,QAAQ;IA7KlB;;OAEG;IACM,MAAM,EAAG,UAAU,CAAC;IAC7B;;OAEG;IACM,QAAQ,EAAE,OAAO,CAAS;IACnC;;OAEG;IACM,SAAS,EAAE,MAAM,CAAM;IAChC;;OAEG;IACM,IAAI,EAAE,SAAS,GAAG,UAAU,GAAG,gBAAgB,GAAG,YAAY,GAAG,UAAU,GAAG,cAAc,GAAG,UAAU,GAAG,MAAM,CAAa;IACxI;;;OAGG;IACM,QAAQ,EAAE,OAAO,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAU;IAEhE;;OAEG;IACM,iBAAiB,EAAE,QAAQ,GAAG,UAAU,CAAc;IAE/D;;OAEG;IACM,SAAS,EAAE,OAAO,CAAQ;IAEnC;;OAEG;IACM,WAAW,CAAC,EAAE,eAAe,CAAC;IAEvC;;;OAGG;IACM,2BAA2B,EAAE,OAAO,CAAQ;IAErD,SAAS,uDAAa;IAEtB,OAAO,CAAC,YAAY,CAAuB;IAC3C;;OAEG;IACH,IACW,WAAW,IAAI,MAAM,CAO/B;IAED,IAAW,WAAW,CAAC,QAAQ,EAAE,MAAM,EAEtC;IAED;;OAEG;IACH,IAAW,sBAAsB,IAAI,MAAM,CAgB1C;IAED,OAAO,CAAC,WAAW;IAInB,IAAW,YAAY,IAAI,MAAM,CAOhC;IAED,OAAO,CAAC,eAAe,CAAyB;IAChD;;;OAGG;IACH,IAAa,cAAc,IAAI,MAAM,EAAE,CAOtC;IAED,IAAI,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,EAEpC;IAED,IACW,KAAK,IAAI,GAAG,CAUtB;IACD,IAAW,KAAK,CAAC,QAAQ,EAAE,GAAG,EAM7B;IACS,WAAW,oBAA2B;IAEhD;;OAEG;IACH,IAAW,eAAe,IAAI,OAAO,CAIpC;IAED,IAAW,SAAS,IAAI,eAAe,CAItC;IAED;;OAEG;IACH,IAAW,eAAe,IAAI,OAAO,CAcpC;IAEwC,QAAQ,EAAE,iBAAiB,GAAG,SAAS,CAAC;gBAGvE,QAAQ,EAAE,SAAS;IAK7B,eAAe,IAAI,IAAI;yCAnLZ,WAAW;2CAAX,WAAW;CA0MvB"}
|
|
@@ -14,27 +14,30 @@ import * as i8 from "ngx-markdown";
|
|
|
14
14
|
import * as i9 from "./link-field.component";
|
|
15
15
|
const _c0 = ["markdown"];
|
|
16
16
|
function MJFormField_Conditional_0_div_0_label_1_Template(rf, ctx) { if (rf & 1) {
|
|
17
|
-
i0.ɵɵ
|
|
18
|
-
i0.ɵɵtext(1);
|
|
19
|
-
i0.ɵɵelementEnd();
|
|
17
|
+
i0.ɵɵelement(0, "label", 7);
|
|
20
18
|
} if (rf & 2) {
|
|
21
19
|
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
22
|
-
i0.ɵɵ
|
|
23
|
-
i0.ɵɵtextInterpolate(ctx_r0.DisplayName);
|
|
20
|
+
i0.ɵɵproperty("innerHTML", ctx_r0.HighlightedDisplayName, i0.ɵɵsanitizeHtml);
|
|
24
21
|
} }
|
|
25
22
|
function MJFormField_Conditional_0_div_0_Case_2_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
26
|
-
i0.ɵɵelement(0, "mj-code-editor",
|
|
23
|
+
i0.ɵɵelement(0, "mj-code-editor", 8);
|
|
27
24
|
} if (rf & 2) {
|
|
28
25
|
const ctx_r0 = i0.ɵɵnextContext(4);
|
|
29
26
|
i0.ɵɵproperty("value", ctx_r0.record.Get(ctx_r0.FieldName))("readonly", true)("languages", ctx_r0.languages)("language", "JavaScript");
|
|
30
27
|
} }
|
|
31
28
|
function MJFormField_Conditional_0_div_0_Case_2_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
32
|
-
i0.ɵɵelement(0, "
|
|
29
|
+
i0.ɵɵelement(0, "input", 9);
|
|
33
30
|
} if (rf & 2) {
|
|
34
31
|
const ctx_r0 = i0.ɵɵnextContext(4);
|
|
35
|
-
i0.ɵɵproperty("
|
|
32
|
+
i0.ɵɵproperty("checked", ctx_r0.Value);
|
|
36
33
|
} }
|
|
37
34
|
function MJFormField_Conditional_0_div_0_Case_2_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
35
|
+
i0.ɵɵelement(0, "markdown", 10, 0);
|
|
36
|
+
} if (rf & 2) {
|
|
37
|
+
const ctx_r0 = i0.ɵɵnextContext(4);
|
|
38
|
+
i0.ɵɵproperty("data", ctx_r0.record.Get(ctx_r0.FieldName));
|
|
39
|
+
} }
|
|
40
|
+
function MJFormField_Conditional_0_div_0_Case_2_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
38
41
|
i0.ɵɵelementStart(0, "span");
|
|
39
42
|
i0.ɵɵtext(1);
|
|
40
43
|
i0.ɵɵelementEnd();
|
|
@@ -44,10 +47,10 @@ function MJFormField_Conditional_0_div_0_Case_2_Conditional_2_Template(rf, ctx)
|
|
|
44
47
|
i0.ɵɵtextInterpolate(ctx_r0.FormatValue(ctx_r0.FieldName, 0));
|
|
45
48
|
} }
|
|
46
49
|
function MJFormField_Conditional_0_div_0_Case_2_Template(rf, ctx) { if (rf & 1) {
|
|
47
|
-
i0.ɵɵtemplate(0, MJFormField_Conditional_0_div_0_Case_2_Conditional_0_Template, 1, 4, "mj-code-editor",
|
|
50
|
+
i0.ɵɵtemplate(0, MJFormField_Conditional_0_div_0_Case_2_Conditional_0_Template, 1, 4, "mj-code-editor", 8)(1, MJFormField_Conditional_0_div_0_Case_2_Conditional_1_Template, 1, 1, "input", 9)(2, MJFormField_Conditional_0_div_0_Case_2_Conditional_2_Template, 2, 1, "markdown", 10)(3, MJFormField_Conditional_0_div_0_Case_2_Conditional_3_Template, 2, 1, "span");
|
|
48
51
|
} if (rf & 2) {
|
|
49
52
|
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
50
|
-
i0.ɵɵconditional(ctx_r0.ExtendedType === "Code" ? 0 : ctx_r0.FieldInfo.Length === -1 ?
|
|
53
|
+
i0.ɵɵconditional(ctx_r0.ExtendedType === "Code" ? 0 : ctx_r0.Type === "checkbox" ? 1 : ctx_r0.FieldInfo.Length === -1 ? 2 : 3);
|
|
51
54
|
} }
|
|
52
55
|
function MJFormField_Conditional_0_div_0_Case_3_Template(rf, ctx) { if (rf & 1) {
|
|
53
56
|
i0.ɵɵelementStart(0, "span", 4);
|
|
@@ -81,7 +84,7 @@ function MJFormField_Conditional_0_div_0_Case_5_Template(rf, ctx) { if (rf & 1)
|
|
|
81
84
|
} }
|
|
82
85
|
function MJFormField_Conditional_0_div_0_Template(rf, ctx) { if (rf & 1) {
|
|
83
86
|
i0.ɵɵelementStart(0, "div", 2);
|
|
84
|
-
i0.ɵɵtemplate(1, MJFormField_Conditional_0_div_0_label_1_Template,
|
|
87
|
+
i0.ɵɵtemplate(1, MJFormField_Conditional_0_div_0_label_1_Template, 1, 1, "label", 3)(2, MJFormField_Conditional_0_div_0_Case_2_Template, 4, 1)(3, MJFormField_Conditional_0_div_0_Case_3_Template, 2, 2, "span", 4)(4, MJFormField_Conditional_0_div_0_Case_4_Template, 2, 2, "span", 5)(5, MJFormField_Conditional_0_div_0_Case_5_Template, 2, 3, "span", 6);
|
|
85
88
|
i0.ɵɵelementEnd();
|
|
86
89
|
} if (rf & 2) {
|
|
87
90
|
let tmp_3_0;
|
|
@@ -92,23 +95,20 @@ function MJFormField_Conditional_0_div_0_Template(rf, ctx) { if (rf & 1) {
|
|
|
92
95
|
i0.ɵɵconditional((tmp_3_0 = ctx_r0.LinkType) === "None" ? 2 : tmp_3_0 === "Email" ? 3 : tmp_3_0 === "URL" ? 4 : tmp_3_0 === "Record" ? 5 : -1);
|
|
93
96
|
} }
|
|
94
97
|
function MJFormField_Conditional_0_div_1_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
95
|
-
i0.ɵɵ
|
|
96
|
-
i0.ɵɵtext(1);
|
|
97
|
-
i0.ɵɵelementEnd();
|
|
98
|
+
i0.ɵɵelement(0, "label", 7);
|
|
98
99
|
} if (rf & 2) {
|
|
99
100
|
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
100
|
-
i0.ɵɵ
|
|
101
|
-
i0.ɵɵtextInterpolate(ctx_r0.DisplayName);
|
|
101
|
+
i0.ɵɵproperty("innerHTML", ctx_r0.HighlightedDisplayName, i0.ɵɵsanitizeHtml);
|
|
102
102
|
} }
|
|
103
103
|
function MJFormField_Conditional_0_div_1_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
104
|
-
i0.ɵɵelement(0, "mj-link-field",
|
|
104
|
+
i0.ɵɵelement(0, "mj-link-field", 11);
|
|
105
105
|
} if (rf & 2) {
|
|
106
106
|
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
107
107
|
i0.ɵɵproperty("record", ctx_r0.record)("FieldName", ctx_r0.FieldName)("LinkComponentType", ctx_r0.LinkComponentType);
|
|
108
108
|
} }
|
|
109
109
|
function MJFormField_Conditional_0_div_1_Conditional_3_Case_0_Template(rf, ctx) { if (rf & 1) {
|
|
110
110
|
const _r2 = i0.ɵɵgetCurrentView();
|
|
111
|
-
i0.ɵɵelementStart(0, "mj-code-editor",
|
|
111
|
+
i0.ɵɵelementStart(0, "mj-code-editor", 18);
|
|
112
112
|
i0.ɵɵtwoWayListener("ngModelChange", function MJFormField_Conditional_0_div_1_Conditional_3_Case_0_Template_mj_code_editor_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(4); i0.ɵɵtwoWayBindingSet(ctx_r0.Value, $event) || (ctx_r0.Value = $event); return i0.ɵɵresetView($event); });
|
|
113
113
|
i0.ɵɵelementEnd();
|
|
114
114
|
} if (rf & 2) {
|
|
@@ -118,7 +118,7 @@ function MJFormField_Conditional_0_div_1_Conditional_3_Case_0_Template(rf, ctx)
|
|
|
118
118
|
} }
|
|
119
119
|
function MJFormField_Conditional_0_div_1_Conditional_3_Case_1_Template(rf, ctx) { if (rf & 1) {
|
|
120
120
|
const _r3 = i0.ɵɵgetCurrentView();
|
|
121
|
-
i0.ɵɵelementStart(0, "kendo-textbox",
|
|
121
|
+
i0.ɵɵelementStart(0, "kendo-textbox", 19);
|
|
122
122
|
i0.ɵɵtwoWayListener("ngModelChange", function MJFormField_Conditional_0_div_1_Conditional_3_Case_1_Template_kendo_textbox_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(4); i0.ɵɵtwoWayBindingSet(ctx_r0.Value, $event) || (ctx_r0.Value = $event); return i0.ɵɵresetView($event); });
|
|
123
123
|
i0.ɵɵelementEnd();
|
|
124
124
|
} if (rf & 2) {
|
|
@@ -127,7 +127,7 @@ function MJFormField_Conditional_0_div_1_Conditional_3_Case_1_Template(rf, ctx)
|
|
|
127
127
|
} }
|
|
128
128
|
function MJFormField_Conditional_0_div_1_Conditional_3_Case_2_Template(rf, ctx) { if (rf & 1) {
|
|
129
129
|
const _r4 = i0.ɵɵgetCurrentView();
|
|
130
|
-
i0.ɵɵelementStart(0, "kendo-textarea",
|
|
130
|
+
i0.ɵɵelementStart(0, "kendo-textarea", 19);
|
|
131
131
|
i0.ɵɵtwoWayListener("ngModelChange", function MJFormField_Conditional_0_div_1_Conditional_3_Case_2_Template_kendo_textarea_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(4); i0.ɵɵtwoWayBindingSet(ctx_r0.Value, $event) || (ctx_r0.Value = $event); return i0.ɵɵresetView($event); });
|
|
132
132
|
i0.ɵɵelementEnd();
|
|
133
133
|
} if (rf & 2) {
|
|
@@ -136,7 +136,7 @@ function MJFormField_Conditional_0_div_1_Conditional_3_Case_2_Template(rf, ctx)
|
|
|
136
136
|
} }
|
|
137
137
|
function MJFormField_Conditional_0_div_1_Conditional_3_Case_3_Template(rf, ctx) { if (rf & 1) {
|
|
138
138
|
const _r5 = i0.ɵɵgetCurrentView();
|
|
139
|
-
i0.ɵɵelementStart(0, "kendo-numerictextbox",
|
|
139
|
+
i0.ɵɵelementStart(0, "kendo-numerictextbox", 20);
|
|
140
140
|
i0.ɵɵtwoWayListener("valueChange", function MJFormField_Conditional_0_div_1_Conditional_3_Case_3_Template_kendo_numerictextbox_valueChange_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(4); i0.ɵɵtwoWayBindingSet(ctx_r0.Value, $event) || (ctx_r0.Value = $event); return i0.ɵɵresetView($event); });
|
|
141
141
|
i0.ɵɵelementEnd();
|
|
142
142
|
} if (rf & 2) {
|
|
@@ -145,7 +145,7 @@ function MJFormField_Conditional_0_div_1_Conditional_3_Case_3_Template(rf, ctx)
|
|
|
145
145
|
} }
|
|
146
146
|
function MJFormField_Conditional_0_div_1_Conditional_3_Case_4_Template(rf, ctx) { if (rf & 1) {
|
|
147
147
|
const _r6 = i0.ɵɵgetCurrentView();
|
|
148
|
-
i0.ɵɵelementStart(0, "kendo-datepicker",
|
|
148
|
+
i0.ɵɵelementStart(0, "kendo-datepicker", 20);
|
|
149
149
|
i0.ɵɵtwoWayListener("valueChange", function MJFormField_Conditional_0_div_1_Conditional_3_Case_4_Template_kendo_datepicker_valueChange_0_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(4); i0.ɵɵtwoWayBindingSet(ctx_r0.Value, $event) || (ctx_r0.Value = $event); return i0.ɵɵresetView($event); });
|
|
150
150
|
i0.ɵɵelementEnd();
|
|
151
151
|
} if (rf & 2) {
|
|
@@ -154,7 +154,7 @@ function MJFormField_Conditional_0_div_1_Conditional_3_Case_4_Template(rf, ctx)
|
|
|
154
154
|
} }
|
|
155
155
|
function MJFormField_Conditional_0_div_1_Conditional_3_Case_5_Template(rf, ctx) { if (rf & 1) {
|
|
156
156
|
const _r7 = i0.ɵɵgetCurrentView();
|
|
157
|
-
i0.ɵɵelementStart(0, "input",
|
|
157
|
+
i0.ɵɵelementStart(0, "input", 21);
|
|
158
158
|
i0.ɵɵtwoWayListener("ngModelChange", function MJFormField_Conditional_0_div_1_Conditional_3_Case_5_Template_input_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r0 = i0.ɵɵnextContext(4); i0.ɵɵtwoWayBindingSet(ctx_r0.Value, $event) || (ctx_r0.Value = $event); return i0.ɵɵresetView($event); });
|
|
159
159
|
i0.ɵɵelementEnd();
|
|
160
160
|
} if (rf & 2) {
|
|
@@ -163,7 +163,7 @@ function MJFormField_Conditional_0_div_1_Conditional_3_Case_5_Template(rf, ctx)
|
|
|
163
163
|
} }
|
|
164
164
|
function MJFormField_Conditional_0_div_1_Conditional_3_Case_6_Template(rf, ctx) { if (rf & 1) {
|
|
165
165
|
const _r8 = i0.ɵɵgetCurrentView();
|
|
166
|
-
i0.ɵɵelementStart(0, "kendo-dropdownlist",
|
|
166
|
+
i0.ɵɵelementStart(0, "kendo-dropdownlist", 22);
|
|
167
167
|
i0.ɵɵtwoWayListener("ngModelChange", function MJFormField_Conditional_0_div_1_Conditional_3_Case_6_Template_kendo_dropdownlist_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r0 = i0.ɵɵnextContext(4); i0.ɵɵtwoWayBindingSet(ctx_r0.Value, $event) || (ctx_r0.Value = $event); return i0.ɵɵresetView($event); });
|
|
168
168
|
i0.ɵɵelementEnd();
|
|
169
169
|
} if (rf & 2) {
|
|
@@ -173,7 +173,7 @@ function MJFormField_Conditional_0_div_1_Conditional_3_Case_6_Template(rf, ctx)
|
|
|
173
173
|
} }
|
|
174
174
|
function MJFormField_Conditional_0_div_1_Conditional_3_Case_7_Template(rf, ctx) { if (rf & 1) {
|
|
175
175
|
const _r9 = i0.ɵɵgetCurrentView();
|
|
176
|
-
i0.ɵɵelementStart(0, "kendo-combobox",
|
|
176
|
+
i0.ɵɵelementStart(0, "kendo-combobox", 23);
|
|
177
177
|
i0.ɵɵtwoWayListener("ngModelChange", function MJFormField_Conditional_0_div_1_Conditional_3_Case_7_Template_kendo_combobox_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r0 = i0.ɵɵnextContext(4); i0.ɵɵtwoWayBindingSet(ctx_r0.Value, $event) || (ctx_r0.Value = $event); return i0.ɵɵresetView($event); });
|
|
178
178
|
i0.ɵɵelementEnd();
|
|
179
179
|
} if (rf & 2) {
|
|
@@ -182,7 +182,7 @@ function MJFormField_Conditional_0_div_1_Conditional_3_Case_7_Template(rf, ctx)
|
|
|
182
182
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r0.Value);
|
|
183
183
|
} }
|
|
184
184
|
function MJFormField_Conditional_0_div_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
185
|
-
i0.ɵɵtemplate(0, MJFormField_Conditional_0_div_1_Conditional_3_Case_0_Template, 1, 3, "mj-code-editor",
|
|
185
|
+
i0.ɵɵtemplate(0, MJFormField_Conditional_0_div_1_Conditional_3_Case_0_Template, 1, 3, "mj-code-editor", 12)(1, MJFormField_Conditional_0_div_1_Conditional_3_Case_1_Template, 1, 1, "kendo-textbox", 13)(2, MJFormField_Conditional_0_div_1_Conditional_3_Case_2_Template, 1, 1, "kendo-textarea", 13)(3, MJFormField_Conditional_0_div_1_Conditional_3_Case_3_Template, 1, 1, "kendo-numerictextbox", 14)(4, MJFormField_Conditional_0_div_1_Conditional_3_Case_4_Template, 1, 1, "kendo-datepicker", 14)(5, MJFormField_Conditional_0_div_1_Conditional_3_Case_5_Template, 1, 1, "input", 15)(6, MJFormField_Conditional_0_div_1_Conditional_3_Case_6_Template, 1, 2, "kendo-dropdownlist", 16)(7, MJFormField_Conditional_0_div_1_Conditional_3_Case_7_Template, 1, 3, "kendo-combobox", 17);
|
|
186
186
|
} if (rf & 2) {
|
|
187
187
|
let tmp_3_0;
|
|
188
188
|
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
@@ -190,7 +190,7 @@ function MJFormField_Conditional_0_div_1_Conditional_3_Template(rf, ctx) { if (r
|
|
|
190
190
|
} }
|
|
191
191
|
function MJFormField_Conditional_0_div_1_Template(rf, ctx) { if (rf & 1) {
|
|
192
192
|
i0.ɵɵelementStart(0, "div", 2);
|
|
193
|
-
i0.ɵɵtemplate(1, MJFormField_Conditional_0_div_1_Conditional_1_Template,
|
|
193
|
+
i0.ɵɵtemplate(1, MJFormField_Conditional_0_div_1_Conditional_1_Template, 1, 1, "label", 7)(2, MJFormField_Conditional_0_div_1_Conditional_2_Template, 1, 3, "mj-link-field", 11)(3, MJFormField_Conditional_0_div_1_Conditional_3_Template, 8, 1);
|
|
194
194
|
i0.ɵɵelementEnd();
|
|
195
195
|
} if (rf & 2) {
|
|
196
196
|
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
@@ -203,7 +203,7 @@ function MJFormField_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
|
203
203
|
i0.ɵɵtemplate(0, MJFormField_Conditional_0_div_0_Template, 6, 2, "div", 1)(1, MJFormField_Conditional_0_div_1_Template, 4, 2, "div", 1);
|
|
204
204
|
} if (rf & 2) {
|
|
205
205
|
const ctx_r0 = i0.ɵɵnextContext();
|
|
206
|
-
i0.ɵɵproperty("ngIf", !ctx_r0.EditMode || ctx_r0.IsFieldReadOnly);
|
|
206
|
+
i0.ɵɵproperty("ngIf", (!ctx_r0.EditMode || ctx_r0.IsFieldReadOnly) && !ctx_r0.shouldHideField);
|
|
207
207
|
i0.ɵɵadvance();
|
|
208
208
|
i0.ɵɵproperty("ngIf", ctx_r0.EditMode && !ctx_r0.IsFieldReadOnly);
|
|
209
209
|
} }
|
|
@@ -244,6 +244,15 @@ export class MJFormField extends BaseRecordComponent {
|
|
|
244
244
|
* If set to false, the label for the field will not be shown. The default is true.
|
|
245
245
|
*/
|
|
246
246
|
ShowLabel = true;
|
|
247
|
+
/**
|
|
248
|
+
* Form context containing all form-level state (filter, showEmptyFields, etc.)
|
|
249
|
+
*/
|
|
250
|
+
formContext;
|
|
251
|
+
/**
|
|
252
|
+
* When true (default), the field will be hidden when it has no value and is in read-only mode.
|
|
253
|
+
* This helps reduce visual clutter by hiding empty fields.
|
|
254
|
+
*/
|
|
255
|
+
hideWhenEmptyInReadOnlyMode = true;
|
|
247
256
|
languages = languages;
|
|
248
257
|
_displayName = null;
|
|
249
258
|
/**
|
|
@@ -263,6 +272,27 @@ export class MJFormField extends BaseRecordComponent {
|
|
|
263
272
|
set DisplayName(newValue) {
|
|
264
273
|
this._displayName = newValue;
|
|
265
274
|
}
|
|
275
|
+
/**
|
|
276
|
+
* Returns the display name with search highlighting applied if formContext.sectionFilter is set
|
|
277
|
+
*/
|
|
278
|
+
get HighlightedDisplayName() {
|
|
279
|
+
const displayName = this.DisplayName;
|
|
280
|
+
const filter = this.formContext?.sectionFilter;
|
|
281
|
+
if (!filter || !filter.trim()) {
|
|
282
|
+
return displayName;
|
|
283
|
+
}
|
|
284
|
+
const searchTerm = filter.toLowerCase().trim();
|
|
285
|
+
if (!displayName.toLowerCase().includes(searchTerm)) {
|
|
286
|
+
return displayName;
|
|
287
|
+
}
|
|
288
|
+
// Escape special regex characters
|
|
289
|
+
const escapedTerm = this.escapeRegex(searchTerm);
|
|
290
|
+
const regex = new RegExp(escapedTerm, 'gi');
|
|
291
|
+
return displayName.replace(regex, '<mark class="search-highlight">$&</mark>');
|
|
292
|
+
}
|
|
293
|
+
escapeRegex(term) {
|
|
294
|
+
return term.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
295
|
+
}
|
|
266
296
|
get ExtendedType() {
|
|
267
297
|
const entityField = this.record.GetFieldByName(this.FieldName);
|
|
268
298
|
if (!entityField) {
|
|
@@ -325,6 +355,22 @@ export class MJFormField extends BaseRecordComponent {
|
|
|
325
355
|
else
|
|
326
356
|
throw new Error(`Field ${this.FieldName} not found in record ${this.record.EntityInfo.Name}`);
|
|
327
357
|
}
|
|
358
|
+
/**
|
|
359
|
+
* Returns true if the field should be hidden (empty value in read-only mode with hideWhenEmptyInReadOnlyMode enabled)
|
|
360
|
+
*/
|
|
361
|
+
get shouldHideField() {
|
|
362
|
+
// If form-level "Show Empty Fields" is enabled, never hide
|
|
363
|
+
if (this.formContext?.showEmptyFields) {
|
|
364
|
+
return false;
|
|
365
|
+
}
|
|
366
|
+
// Don't hide if the feature is disabled or we're in edit mode
|
|
367
|
+
if (!this.hideWhenEmptyInReadOnlyMode || this.EditMode) {
|
|
368
|
+
return false;
|
|
369
|
+
}
|
|
370
|
+
// Check if the field has a value
|
|
371
|
+
const value = this.record.Get(this.FieldName);
|
|
372
|
+
return value === null || value === undefined || value === '';
|
|
373
|
+
}
|
|
328
374
|
markdown;
|
|
329
375
|
constructor(renderer) {
|
|
330
376
|
super();
|
|
@@ -359,15 +405,15 @@ export class MJFormField extends BaseRecordComponent {
|
|
|
359
405
|
} if (rf & 2) {
|
|
360
406
|
let _t;
|
|
361
407
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.markdown = _t.first);
|
|
362
|
-
} }, inputs: { record: "record", EditMode: "EditMode", FieldName: "FieldName", Type: "Type", LinkType: "LinkType", LinkComponentType: "LinkComponentType", ShowLabel: "ShowLabel", DisplayName: "DisplayName", PossibleValues: "PossibleValues", Value: "Value" }, outputs: { ValueChange: "ValueChange" }, features: [i0.ɵɵInheritDefinitionFeature], decls: 1, vars: 1, consts: [["markdown", ""], ["class", "record-form-row", 4, "ngIf"], [1, "record-form-row"], [4, "ngIf"], ["mjEmailLink", "", 3, "field"], ["mjWebLink", "", 3, "field"], ["mjFieldLink", "", 3, "record", "fieldName"], [3, "value", "readonly", "languages", "language"], [3, "data"], [3, "record", "FieldName", "LinkComponentType"], [3, "ngModel", "languages", "language"], [3, "ngModel"], [1, "narrower-component", 3, "value"], ["type", "checkbox", "kendoCheckBox", "", 3, "ngModel"], [3, "data", "ngModel"], [3, "data", "allowCustom", "ngModel"], [3, "ngModelChange", "ngModel", "languages", "language"], [3, "ngModelChange", "ngModel"], [1, "narrower-component", 3, "valueChange", "value"], ["type", "checkbox", "kendoCheckBox", "", 3, "ngModelChange", "ngModel"], [3, "ngModelChange", "data", "ngModel"], [3, "ngModelChange", "data", "allowCustom", "ngModel"]], template: function MJFormField_Template(rf, ctx) { if (rf & 1) {
|
|
408
|
+
} }, inputs: { record: "record", EditMode: "EditMode", FieldName: "FieldName", Type: "Type", LinkType: "LinkType", LinkComponentType: "LinkComponentType", ShowLabel: "ShowLabel", formContext: "formContext", hideWhenEmptyInReadOnlyMode: "hideWhenEmptyInReadOnlyMode", DisplayName: "DisplayName", PossibleValues: "PossibleValues", Value: "Value" }, outputs: { ValueChange: "ValueChange" }, features: [i0.ɵɵInheritDefinitionFeature], decls: 1, vars: 1, consts: [["markdown", ""], ["class", "record-form-row", 4, "ngIf"], [1, "record-form-row"], [3, "innerHTML", 4, "ngIf"], ["mjEmailLink", "", 3, "field"], ["mjWebLink", "", 3, "field"], ["mjFieldLink", "", 3, "record", "fieldName"], [3, "innerHTML"], [3, "value", "readonly", "languages", "language"], ["type", "checkbox", "kendoCheckBox", "", "disabled", "", 3, "checked"], [3, "data"], [3, "record", "FieldName", "LinkComponentType"], [3, "ngModel", "languages", "language"], [3, "ngModel"], [1, "narrower-component", 3, "value"], ["type", "checkbox", "kendoCheckBox", "", 3, "ngModel"], [3, "data", "ngModel"], [3, "data", "allowCustom", "ngModel"], [3, "ngModelChange", "ngModel", "languages", "language"], [3, "ngModelChange", "ngModel"], [1, "narrower-component", 3, "valueChange", "value"], ["type", "checkbox", "kendoCheckBox", "", 3, "ngModelChange", "ngModel"], [3, "ngModelChange", "data", "ngModel"], [3, "ngModelChange", "data", "allowCustom", "ngModel"]], template: function MJFormField_Template(rf, ctx) { if (rf & 1) {
|
|
363
409
|
i0.ɵɵtemplate(0, MJFormField_Conditional_0_Template, 2, 2);
|
|
364
410
|
} if (rf & 2) {
|
|
365
411
|
i0.ɵɵconditional(ctx.record.IsSaved || !ctx.IsFieldReadOnly ? 0 : -1);
|
|
366
|
-
} }, dependencies: [i1.NgIf, i2.CheckboxControlValueAccessor, i2.NgControlStatus, i2.NgModel, i3.TextAreaComponent, i3.TextBoxComponent, i3.NumericTextBoxComponent, i3.CheckBoxDirective, i4.DatePickerComponent, i5.ComboBoxComponent, i5.DropDownListComponent, i6.EmailLink, i6.FieldLink, i6.WebLink, i7.CodeEditorComponent, i8.MarkdownComponent, i9.MJLinkField], styles: [".record-form-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: auto 1fr;\n align-items: start;\n gap: 10px;\n margin-bottom: 12px;\n padding-top: 5px;\n padding-bottom: 5px;\n align-items: start; \n\n} \n \n \n.narrower-component[_ngcontent-%COMP%] {\n width: 435px;\n}\n.record-form-row[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-weight: bold;\n padding-right: 10px;\n width: 240px;\n margin-bottom: 0;\n align-self: start; \n\n}\n\n\n\n\n\n.record-form-row[_ngcontent-%COMP%] markdown[_ngcontent-%COMP%] > p[_ngcontent-%COMP%], \n.record-form-row[_ngcontent-%COMP%] markdown[_ngcontent-%COMP%] > h1[_ngcontent-%COMP%], \n.record-form-row[_ngcontent-%COMP%] markdown[_ngcontent-%COMP%] > h2[_ngcontent-%COMP%], \n.record-form-row[_ngcontent-%COMP%] markdown[_ngcontent-%COMP%] > h3[_ngcontent-%COMP%], \n.record-form-row[_ngcontent-%COMP%] markdown[_ngcontent-%COMP%] > h4[_ngcontent-%COMP%], \n.record-form-row[_ngcontent-%COMP%] markdown[_ngcontent-%COMP%] > h5[_ngcontent-%COMP%], \n.record-form-row[_ngcontent-%COMP%] markdown[_ngcontent-%COMP%] > h6[_ngcontent-%COMP%] {\n margin:0 !important;\n}\n\nmarkdown[_ngcontent-%COMP%] {\n font-size:
|
|
412
|
+
} }, dependencies: [i1.NgIf, i2.CheckboxControlValueAccessor, i2.NgControlStatus, i2.NgModel, i3.TextAreaComponent, i3.TextBoxComponent, i3.NumericTextBoxComponent, i3.CheckBoxDirective, i4.DatePickerComponent, i5.ComboBoxComponent, i5.DropDownListComponent, i6.EmailLink, i6.FieldLink, i6.WebLink, i7.CodeEditorComponent, i8.MarkdownComponent, i9.MJLinkField], styles: [".record-form-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: auto 1fr;\n align-items: start;\n gap: 10px;\n margin-bottom: 12px;\n padding-top: 5px;\n padding-bottom: 5px;\n align-items: start; \n\n} \n \n \n.narrower-component[_ngcontent-%COMP%] {\n width: 435px;\n}\n.record-form-row[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-weight: bold;\n padding-right: 10px;\n width: 240px;\n margin-bottom: 0;\n align-self: start; \n\n}\n\n\n\n.record-form-row[_ngcontent-%COMP%] > [_ngcontent-%COMP%]:nth-child(2) {\n overflow-wrap: break-word;\n word-wrap: break-word;\n word-break: break-word;\n min-width: 0;\n max-width: 100%;\n}\n\n\n\n\n\n.record-form-row[_ngcontent-%COMP%] markdown[_ngcontent-%COMP%] > p[_ngcontent-%COMP%], \n.record-form-row[_ngcontent-%COMP%] markdown[_ngcontent-%COMP%] > h1[_ngcontent-%COMP%], \n.record-form-row[_ngcontent-%COMP%] markdown[_ngcontent-%COMP%] > h2[_ngcontent-%COMP%], \n.record-form-row[_ngcontent-%COMP%] markdown[_ngcontent-%COMP%] > h3[_ngcontent-%COMP%], \n.record-form-row[_ngcontent-%COMP%] markdown[_ngcontent-%COMP%] > h4[_ngcontent-%COMP%], \n.record-form-row[_ngcontent-%COMP%] markdown[_ngcontent-%COMP%] > h5[_ngcontent-%COMP%], \n.record-form-row[_ngcontent-%COMP%] markdown[_ngcontent-%COMP%] > h6[_ngcontent-%COMP%] {\n margin:0 !important;\n}\n\nmarkdown[_ngcontent-%COMP%] {\n font-size: 14px; \n\n}\n\n\n\n.record-form-row[_ngcontent-%COMP%] label[_ngcontent-%COMP%] .search-highlight {\n background-color: #fef08a;\n color: #854d0e;\n padding: 0;\n border-radius: 2px;\n font-weight: 700;\n box-shadow: 0 0 0 2px #fef08a;\n}\n\n\n@media (min-width: 768px) {\n .record-form-row[_ngcontent-%COMP%] {\n display: grid; \n\n grid-template-columns: auto 1fr;\n align-items: start; \n\n gap: 10px;\n margin-bottom: 12px;\n padding-top: 5px;\n padding-bottom: 5px;\n }\n\n .record-form-row[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n width: 240px;\n margin-bottom: 0;\n align-self: start; \n\n }\n}"] });
|
|
367
413
|
}
|
|
368
414
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MJFormField, [{
|
|
369
415
|
type: Component,
|
|
370
|
-
args: [{ selector: 'mj-form-field', template: "<!--\n Using a blend of *ngIf and the new @switch control flow because of a bug in early Angular 17 where\n the @if wrapping the @switch didn't fully remove elements when swtiching back and forth. In the future if Angular fixes the bug\n we can get rid of the *ngIf outer div blocks and instead use @if and contain the @switch within the same div block.\n-->\n@if (record.IsSaved || !IsFieldReadOnly) {\n <!-- We only render a field if the record is either saved, or the field is editable. Meaning, for NEW records, we only show editable fields -->\n <div class=\"record-form-row\" *ngIf=\"!EditMode || IsFieldReadOnly\">\n <label *ngIf=\"ShowLabel\"
|
|
416
|
+
args: [{ selector: 'mj-form-field', template: "<!--\n Using a blend of *ngIf and the new @switch control flow because of a bug in early Angular 17 where\n the @if wrapping the @switch didn't fully remove elements when swtiching back and forth. In the future if Angular fixes the bug\n we can get rid of the *ngIf outer div blocks and instead use @if and contain the @switch within the same div block.\n-->\n@if (record.IsSaved || !IsFieldReadOnly) {\n <!-- We only render a field if the record is either saved, or the field is editable. Meaning, for NEW records, we only show editable fields -->\n <div class=\"record-form-row\" *ngIf=\"(!EditMode || IsFieldReadOnly) && !shouldHideField\">\n <label *ngIf=\"ShowLabel\" [innerHTML]=\"HighlightedDisplayName\"></label>\n @switch (LinkType) {\n @case ('None') {\n @if (ExtendedType === 'Code') {\n <mj-code-editor [value]=\"record.Get(FieldName)\" [readonly]=\"true\" [languages]=\"languages\" [language]=\"'JavaScript'\"></mj-code-editor>\n }\n @else if (Type === 'checkbox') {\n <!-- Render checkboxes as disabled checkbox controls in read mode -->\n <input type=\"checkbox\" [checked]=\"Value\" kendoCheckBox disabled />\n }\n @else if (FieldInfo.Length === -1) {\n <!-- this is a varchar(max) type of field -->\n <markdown #markdown [data]=\"record.Get(FieldName)\"></markdown>\n <!-- <span [innerHTML]=\"record.Get(FieldName) | formatText\"></span> -->\n }\n @else {\n <span>{{FormatValue(FieldName, 0)}}</span>\n }\n }\n @case ('Email') {\n <span mjEmailLink [field]=\"record.GetFieldByName(FieldName)!\" >{{FormatValue(FieldName, 0)}}</span>\n }\n @case ('URL') {\n <span mjWebLink [field]=\"record.GetFieldByName(FieldName)!\" >{{FormatValue(FieldName, 0)}}</span>\n }\n @case ('Record') {\n <span mjFieldLink [record]=\"record\" [fieldName]=\"FieldName\" >{{FormatValue(FieldName, 0)}}</span>\n }\n }\n </div>\n <div class=\"record-form-row\" *ngIf=\"EditMode && !IsFieldReadOnly\">\n @if (ShowLabel) {\n <label [innerHTML]=\"HighlightedDisplayName\"></label>\n }\n @if (FieldInfo && FieldInfo.RelatedEntity && FieldInfo.RelatedEntity.length > 0) {\n <!-- Foreign Key Link here -->\n <mj-link-field [record]=\"record\" [FieldName]=\"FieldName\" [LinkComponentType]=\"LinkComponentType\"></mj-link-field>\n }\n @else {\n <!-- Not a foreign key -->\n @switch (Type) {\n @case ('code') {\n <mj-code-editor [(ngModel)]=\"Value\" [languages]=\"languages\" [language]=\"'JavaScript'\"></mj-code-editor>\n }\n @case ('textbox') {\n <kendo-textbox [(ngModel)]=\"Value\" />\n }\n @case ('textarea') {\n <kendo-textarea [(ngModel)]=\"Value\"></kendo-textarea>\n }\n @case ('numerictextbox') {\n <kendo-numerictextbox [(value)]=\"Value\" class=\"narrower-component\" />\n }\n @case ('datepicker') {\n <kendo-datepicker [(value)]=\"Value\" class=\"narrower-component\"></kendo-datepicker>\n }\n @case ('checkbox') {\n <input type=\"checkbox\" [(ngModel)]=\"Value\" kendoCheckBox />\n }\n @case ('dropdownlist') {\n <kendo-dropdownlist [data]=\"PossibleValues\" [(ngModel)]=\"Value\"></kendo-dropdownlist>\n }\n @case ('combobox') {\n <kendo-combobox [data]=\"PossibleValues\" [allowCustom]=\"true\" [(ngModel)]=\"Value\"></kendo-combobox>\n }\n }\n }\n </div>\n}\n", styles: [".record-form-row {\n display: grid;\n grid-template-columns: auto 1fr;\n align-items: start;\n gap: 10px;\n margin-bottom: 12px;\n padding-top: 5px;\n padding-bottom: 5px;\n align-items: start; /* Ensure items are aligned at the top */\n} \n \n \n.narrower-component {\n width: 435px;\n}\n.record-form-row label {\n font-weight: bold;\n padding-right: 10px;\n width: 240px;\n margin-bottom: 0;\n align-self: start; /* Align the label to the start (top) */\n}\n\n/* Enable wrapping and vertical scrolling for field values */\n.record-form-row > :nth-child(2) {\n overflow-wrap: break-word;\n word-wrap: break-word;\n word-break: break-word;\n min-width: 0;\n max-width: 100%;\n}\n\n/*\n Eliminate the default margin and padding for the markdown elements\n */\n.record-form-row markdown > p,\n.record-form-row markdown > h1,\n.record-form-row markdown > h2,\n.record-form-row markdown > h3,\n.record-form-row markdown > h4,\n.record-form-row markdown > h5,\n.record-form-row markdown > h6 {\n margin:0 !important;\n}\n\nmarkdown {\n font-size: 14px; /* Match app standard text size (changed from 1rem) */\n}\n\n/* Search highlighting for field labels */\n.record-form-row label ::ng-deep .search-highlight {\n background-color: #fef08a;\n color: #854d0e;\n padding: 0;\n border-radius: 2px;\n font-weight: 700;\n box-shadow: 0 0 0 2px #fef08a;\n}\n\n\n@media (min-width: 768px) {\n .record-form-row {\n display: grid; /* Ensure grid display is used for larger screens as well */\n grid-template-columns: auto 1fr;\n align-items: start; /* Keep the alignment at the top */\n gap: 10px;\n margin-bottom: 12px;\n padding-top: 5px;\n padding-bottom: 5px;\n }\n\n .record-form-row label {\n width: 240px;\n margin-bottom: 0;\n align-self: start; /* Ensure the label is aligned to the top */\n }\n}\n "] }]
|
|
371
417
|
}], () => [{ type: i0.Renderer2 }], { record: [{
|
|
372
418
|
type: Input
|
|
373
419
|
}], EditMode: [{
|
|
@@ -382,6 +428,10 @@ export class MJFormField extends BaseRecordComponent {
|
|
|
382
428
|
type: Input
|
|
383
429
|
}], ShowLabel: [{
|
|
384
430
|
type: Input
|
|
431
|
+
}], formContext: [{
|
|
432
|
+
type: Input
|
|
433
|
+
}], hideWhenEmptyInReadOnlyMode: [{
|
|
434
|
+
type: Input
|
|
385
435
|
}], DisplayName: [{
|
|
386
436
|
type: Input
|
|
387
437
|
}], PossibleValues: [{
|
|
@@ -394,5 +444,5 @@ export class MJFormField extends BaseRecordComponent {
|
|
|
394
444
|
type: ViewChild,
|
|
395
445
|
args: ['markdown', { static: false }]
|
|
396
446
|
}] }); })();
|
|
397
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJFormField, { className: "MJFormField", filePath: "src/lib/base-field-component.ts", lineNumber:
|
|
447
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJFormField, { className: "MJFormField", filePath: "src/lib/base-field-component.ts", lineNumber: 19 }); })();
|
|
398
448
|
//# sourceMappingURL=base-field-component.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-field-component.js","sourceRoot":"","sources":["../../src/lib/base-field-component.ts","../../src/lib/base-field-component.html"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,EAA2D,MAAM,eAAe,CAAC;AAC3I,OAAO,EAA4C,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACnG,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"base-field-component.js","sourceRoot":"","sources":["../../src/lib/base-field-component.ts","../../src/lib/base-field-component.html"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { AfterViewInit, OnInit, OnDestroy, QueryList, ElementRef, ChangeDetectorRef } from '@angular/core';
|
|
2
2
|
import { EntityInfo, ValidationResult, EntityPermissionType, EntityRelationshipInfo, RunViewParams, RecordDependency } from '@memberjunction/core';
|
|
3
3
|
import { BaseRecordComponent } from './base-record-component';
|
|
4
|
+
import { BaseFormSectionInfo } from './base-form-section-info';
|
|
5
|
+
import { BaseFormContext } from './base-form-context';
|
|
6
|
+
import { CollapsiblePanelComponent } from './collapsible-panel.component';
|
|
4
7
|
import { SharedService } from '@memberjunction/ng-shared';
|
|
5
8
|
import { ActivatedRoute, Router } from '@angular/router';
|
|
6
9
|
import { MJTabStripComponent, TabEvent } from '@memberjunction/ng-tabstrip';
|
|
@@ -34,6 +37,7 @@ export declare abstract class BaseFormComponent extends BaseRecordComponent impl
|
|
|
34
37
|
constructor(elementRef: ElementRef, sharedService: SharedService, router: Router, route: ActivatedRoute, cdr: ChangeDetectorRef);
|
|
35
38
|
tabComponent: MJTabStripComponent;
|
|
36
39
|
tabStrips: QueryList<MJTabStripComponent>;
|
|
40
|
+
collapsiblePanels: QueryList<CollapsiblePanelComponent>;
|
|
37
41
|
get TabStripComponent(): MJTabStripComponent;
|
|
38
42
|
/**
|
|
39
43
|
* Convenience method to resize application container when required
|
|
@@ -72,13 +76,6 @@ export declare abstract class BaseFormComponent extends BaseRecordComponent impl
|
|
|
72
76
|
* @returns
|
|
73
77
|
*/
|
|
74
78
|
IsCurrentTab(tabName: string): boolean;
|
|
75
|
-
/**
|
|
76
|
-
* Returns true if the sectionName specified is currently expanded, otherwise returns false.
|
|
77
|
-
* This is used with the new collapsible section-based forms (vs the older tab-based forms).
|
|
78
|
-
* @param sectionName - The section key (camelCase) to check
|
|
79
|
-
* @returns boolean indicating if section is expanded
|
|
80
|
-
*/
|
|
81
|
-
IsCurrentSection(sectionName: string): boolean;
|
|
82
79
|
BuildRelationshipViewParams(item: EntityRelationshipInfo): RunViewParams;
|
|
83
80
|
/**
|
|
84
81
|
* Builds a RunViewParams object for a related entity based on the relationship between the current entity and the related entity
|
|
@@ -122,6 +119,121 @@ export declare abstract class BaseFormComponent extends BaseRecordComponent impl
|
|
|
122
119
|
GetListsCanAddTo(): Promise<ListEntity[]>;
|
|
123
120
|
GetRecordDependencies(): Promise<RecordDependency[]>;
|
|
124
121
|
get EntityInfo(): EntityInfo | undefined;
|
|
122
|
+
/**
|
|
123
|
+
* Array of section information including expanded state and row counts.
|
|
124
|
+
* Initialized by subclasses via initSections().
|
|
125
|
+
*/
|
|
126
|
+
protected sections: BaseFormSectionInfo[];
|
|
127
|
+
/**
|
|
128
|
+
* Map for fast section lookup by key.
|
|
129
|
+
*/
|
|
130
|
+
private sectionMap;
|
|
131
|
+
/**
|
|
132
|
+
* Current search filter text for filtering sections.
|
|
133
|
+
*/
|
|
134
|
+
searchFilter: string;
|
|
135
|
+
/**
|
|
136
|
+
* Controls whether empty fields should be shown in read-only mode.
|
|
137
|
+
* When false (default), empty fields are hidden to reduce visual clutter.
|
|
138
|
+
*/
|
|
139
|
+
showEmptyFields: boolean;
|
|
140
|
+
/**
|
|
141
|
+
* Returns the current form context containing all form-level state.
|
|
142
|
+
* This is a computed property that creates a fresh context object on each access,
|
|
143
|
+
* ensuring child components always have the latest values.
|
|
144
|
+
*/
|
|
145
|
+
get formContext(): BaseFormContext;
|
|
146
|
+
/**
|
|
147
|
+
* Subject for debouncing filter changes.
|
|
148
|
+
*/
|
|
149
|
+
private filterSubject;
|
|
150
|
+
private filterSubscription?;
|
|
151
|
+
/**
|
|
152
|
+
* Initializes the sections array. Called by subclasses in ngOnInit.
|
|
153
|
+
* Accepts either BaseFormSectionInfo instances or plain objects that will be converted.
|
|
154
|
+
* @param sections Array of section information or plain objects
|
|
155
|
+
*/
|
|
156
|
+
protected initSections(sections: (BaseFormSectionInfo | {
|
|
157
|
+
sectionKey: string;
|
|
158
|
+
sectionName: string;
|
|
159
|
+
isExpanded: boolean;
|
|
160
|
+
rowCount?: number;
|
|
161
|
+
metadata?: any;
|
|
162
|
+
})[]): void;
|
|
163
|
+
/**
|
|
164
|
+
* Gets the section info by key.
|
|
165
|
+
* @param sectionKey The section key
|
|
166
|
+
* @returns The section info or undefined
|
|
167
|
+
*/
|
|
168
|
+
protected getSection(sectionKey: string): BaseFormSectionInfo | undefined;
|
|
169
|
+
/**
|
|
170
|
+
* Checks if a section is expanded.
|
|
171
|
+
* @param sectionKey The section key
|
|
172
|
+
* @returns True if expanded, false otherwise
|
|
173
|
+
*/
|
|
174
|
+
IsSectionExpanded(sectionKey: string): boolean;
|
|
175
|
+
/**
|
|
176
|
+
* Sets the expanded state of a section.
|
|
177
|
+
* @param sectionKey The section key
|
|
178
|
+
* @param isExpanded The new expanded state
|
|
179
|
+
*/
|
|
180
|
+
SetSectionExpanded(sectionKey: string, isExpanded: boolean): void;
|
|
181
|
+
/**
|
|
182
|
+
* Gets the row count for a section.
|
|
183
|
+
* @param sectionKey The section key
|
|
184
|
+
* @returns The row count or undefined
|
|
185
|
+
*/
|
|
186
|
+
GetSectionRowCount(sectionKey: string): number | undefined;
|
|
187
|
+
/**
|
|
188
|
+
* Sets the row count for a section.
|
|
189
|
+
* @param sectionKey The section key
|
|
190
|
+
* @param rowCount The row count
|
|
191
|
+
*/
|
|
192
|
+
SetSectionRowCount(sectionKey: string, rowCount: number): void;
|
|
193
|
+
/**
|
|
194
|
+
* Toggles the expanded state of a section.
|
|
195
|
+
* @param sectionKey The section key to toggle
|
|
196
|
+
*/
|
|
197
|
+
toggleSection(sectionKey: string): void;
|
|
198
|
+
/**
|
|
199
|
+
* Expands all sections.
|
|
200
|
+
*/
|
|
201
|
+
expandAllSections(): void;
|
|
202
|
+
/**
|
|
203
|
+
* Collapses all sections.
|
|
204
|
+
*/
|
|
205
|
+
collapseAllSections(): void;
|
|
206
|
+
/**
|
|
207
|
+
* Gets the count of currently expanded sections.
|
|
208
|
+
* @returns Number of expanded sections
|
|
209
|
+
*/
|
|
210
|
+
getExpandedCount(): number;
|
|
211
|
+
/**
|
|
212
|
+
* Gets the count of visible sections after filtering.
|
|
213
|
+
* @returns Number of sections currently visible (not hidden by search filter)
|
|
214
|
+
*/
|
|
215
|
+
getVisibleSectionCount(): number;
|
|
216
|
+
/**
|
|
217
|
+
* Gets the total count of all sections (regardless of filter).
|
|
218
|
+
* @returns Total number of sections
|
|
219
|
+
*/
|
|
220
|
+
getTotalSectionCount(): number;
|
|
221
|
+
/**
|
|
222
|
+
* Handles filter change events from the section controls.
|
|
223
|
+
* Debounces the filter updates by 250ms to avoid excessive re-rendering during typing.
|
|
224
|
+
* @param searchTerm The search term to filter sections
|
|
225
|
+
*/
|
|
226
|
+
onFilterChange(searchTerm: string): void;
|
|
227
|
+
/**
|
|
228
|
+
* Gets the entity name for the current record (used for localStorage keys).
|
|
229
|
+
* @returns Entity name or empty string
|
|
230
|
+
*/
|
|
231
|
+
getEntityName(): string;
|
|
232
|
+
/**
|
|
233
|
+
* Resets all panel width modes to normal for the current entity.
|
|
234
|
+
* Clears localStorage for all panels associated with this entity.
|
|
235
|
+
*/
|
|
236
|
+
resetAllPanelWidths(): void;
|
|
125
237
|
static ɵfac: i0.ɵɵFactoryDeclaration<BaseFormComponent, never>;
|
|
126
238
|
static ɵdir: i0.ɵɵDirectiveDeclaration<BaseFormComponent, never, never, {}, {}, never, never, false, never>;
|
|
127
239
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-form-component.d.ts","sourceRoot":"","sources":["../../src/lib/base-form-component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,EAA2B,SAAS,EAAE,UAAU,EAAa,iBAAiB,
|
|
1
|
+
{"version":3,"file":"base-form-component.d.ts","sourceRoot":"","sources":["../../src/lib/base-form-component.ts"],"names":[],"mappings":"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"}
|