@mj-biz-apps/issues-ng 0.0.1 → 1.0.1

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.
Files changed (42) hide show
  1. package/dist/lib/components/report-issue/report-issue.component.d.ts +74 -0
  2. package/dist/lib/components/report-issue/report-issue.component.d.ts.map +1 -0
  3. package/dist/lib/components/report-issue/report-issue.component.js +344 -0
  4. package/dist/lib/components/report-issue/report-issue.component.js.map +1 -0
  5. package/dist/lib/custom/custom-forms.module.d.ts +12 -0
  6. package/dist/lib/custom/custom-forms.module.d.ts.map +1 -0
  7. package/dist/lib/custom/custom-forms.module.js +43 -0
  8. package/dist/lib/custom/custom-forms.module.js.map +1 -0
  9. package/dist/lib/generated/Entities/mjBizAppsIssuesIssue/mjbizappsissuesissue.form.component.d.ts +10 -0
  10. package/dist/lib/generated/Entities/mjBizAppsIssuesIssue/mjbizappsissuesissue.form.component.d.ts.map +1 -0
  11. package/dist/lib/generated/Entities/mjBizAppsIssuesIssue/mjbizappsissuesissue.form.component.js +108 -0
  12. package/dist/lib/generated/Entities/mjBizAppsIssuesIssue/mjbizappsissuesissue.form.component.js.map +1 -0
  13. package/dist/lib/generated/Entities/mjBizAppsIssuesIssueComment/mjbizappsissuesissuecomment.form.component.d.ts +10 -0
  14. package/dist/lib/generated/Entities/mjBizAppsIssuesIssueComment/mjbizappsissuesissuecomment.form.component.d.ts.map +1 -0
  15. package/dist/lib/generated/Entities/mjBizAppsIssuesIssueComment/mjbizappsissuesissuecomment.form.component.js +65 -0
  16. package/dist/lib/generated/Entities/mjBizAppsIssuesIssueComment/mjbizappsissuesissuecomment.form.component.js.map +1 -0
  17. package/dist/lib/generated/Entities/mjBizAppsIssuesIssueNumberSequence/mjbizappsissuesissuenumbersequence.form.component.d.ts +10 -0
  18. package/dist/lib/generated/Entities/mjBizAppsIssuesIssueNumberSequence/mjbizappsissuesissuenumbersequence.form.component.d.ts.map +1 -0
  19. package/dist/lib/generated/Entities/mjBizAppsIssuesIssueNumberSequence/mjbizappsissuesissuenumbersequence.form.component.js +59 -0
  20. package/dist/lib/generated/Entities/mjBizAppsIssuesIssueNumberSequence/mjbizappsissuesissuenumbersequence.form.component.js.map +1 -0
  21. package/dist/lib/generated/Entities/mjBizAppsIssuesIssueStatus/mjbizappsissuesissuestatus.form.component.d.ts +10 -0
  22. package/dist/lib/generated/Entities/mjBizAppsIssuesIssueStatus/mjbizappsissuesissuestatus.form.component.d.ts.map +1 -0
  23. package/dist/lib/generated/Entities/mjBizAppsIssuesIssueStatus/mjbizappsissuesissuestatus.form.component.js +88 -0
  24. package/dist/lib/generated/Entities/mjBizAppsIssuesIssueStatus/mjbizappsissuesissuestatus.form.component.js.map +1 -0
  25. package/dist/lib/generated/Entities/mjBizAppsIssuesIssueType/mjbizappsissuesissuetype.form.component.d.ts +10 -0
  26. package/dist/lib/generated/Entities/mjBizAppsIssuesIssueType/mjbizappsissuesissuetype.form.component.d.ts.map +1 -0
  27. package/dist/lib/generated/Entities/mjBizAppsIssuesIssueType/mjbizappsissuesissuetype.form.component.js +94 -0
  28. package/dist/lib/generated/Entities/mjBizAppsIssuesIssueType/mjbizappsissuesissuetype.form.component.js.map +1 -0
  29. package/dist/lib/generated/class-registrations-manifest.d.ts +22 -0
  30. package/dist/lib/generated/class-registrations-manifest.d.ts.map +1 -0
  31. package/dist/lib/generated/class-registrations-manifest.js +34 -0
  32. package/dist/lib/generated/class-registrations-manifest.js.map +1 -0
  33. package/dist/lib/generated/generated-forms.module.d.ts +22 -0
  34. package/dist/lib/generated/generated-forms.module.d.ts.map +1 -0
  35. package/dist/lib/generated/generated-forms.module.js +75 -0
  36. package/dist/lib/generated/generated-forms.module.js.map +1 -0
  37. package/dist/public-api.d.ts +20 -0
  38. package/dist/public-api.d.ts.map +1 -0
  39. package/dist/public-api.js +30 -0
  40. package/dist/public-api.js.map +1 -0
  41. package/package.json +45 -7
  42. package/README.md +0 -45
@@ -0,0 +1,74 @@
1
+ import { EventEmitter } from '@angular/core';
2
+ import { mjBizAppsIssuesIssueEntity, mjBizAppsIssuesIssueTypeEntity } from '@mj-biz-apps/issues-entities';
3
+ import * as i0 from "@angular/core";
4
+ /** Severity / Priority union (mirrors the Issue entity). */
5
+ type IssuePriority = 'Low' | 'Medium' | 'High' | 'Critical';
6
+ /**
7
+ * ReportIssueComponent — a self-contained "Report an Issue / Submit Feedback" dialog.
8
+ *
9
+ * This is the entry point the Shell Extension surfaces (avatar/context menu). It is a thin
10
+ * client-side UI: it creates an Issue record directly via the MJ entity API (which routes
11
+ * through GraphQLDataProvider in the browser), defaulting status to the configured default
12
+ * status and priority to the chosen type's DefaultPriority. Server-side IssueType action hooks
13
+ * fire automatically when the record is saved.
14
+ *
15
+ * It can be opened standalone, or "about" a specific record by setting SourceEntityID +
16
+ * SourceRecordID (e.g. "report an issue about THIS dashboard"). AppScope tags which product the
17
+ * issue belongs to.
18
+ *
19
+ * Usage:
20
+ * ```html
21
+ * <mj-report-issue [(Visible)]="showReport" AppScope="MJC"
22
+ * (Submitted)="onIssueSubmitted($event)"></mj-report-issue>
23
+ * ```
24
+ */
25
+ export declare class ReportIssueComponent {
26
+ private cdr;
27
+ private _visible;
28
+ /** Controls dialog visibility. On open, loads reference data (once). */
29
+ set Visible(value: boolean);
30
+ get Visible(): boolean;
31
+ VisibleChange: EventEmitter<boolean>;
32
+ /** Optional polymorphic source: the entity this issue is about. */
33
+ SourceEntityID: string | null;
34
+ /** Optional polymorphic source: the record ID this issue is about. */
35
+ SourceRecordID: string | null;
36
+ /** Optional app/product scope tag stamped onto the issue. */
37
+ AppScope: string | null;
38
+ /** Optional reporter email for anonymous/external reporters. */
39
+ ReporterEmail: string | null;
40
+ /** Emits the created Issue after a successful submit. */
41
+ Submitted: EventEmitter<mjBizAppsIssuesIssueEntity>;
42
+ /** Emits when the dialog is cancelled/closed without submitting. */
43
+ Cancelled: EventEmitter<void>;
44
+ IsLoading: boolean;
45
+ IsSubmitting: boolean;
46
+ ErrorMessage: string | null;
47
+ IssueTypes: mjBizAppsIssuesIssueTypeEntity[];
48
+ Title: string;
49
+ Description: string;
50
+ SelectedTypeID: string | null;
51
+ Severity: IssuePriority;
52
+ readonly SeverityOptions: IssuePriority[];
53
+ private defaultStatusID;
54
+ private referenceLoaded;
55
+ /** Loads issue types + the default status the first time the dialog opens. */
56
+ private onOpen;
57
+ private loadReferenceData;
58
+ /** Whether the form is valid enough to submit. */
59
+ get CanSubmit(): boolean;
60
+ /** Creates the Issue record and emits Submitted on success. */
61
+ Submit(): Promise<void>;
62
+ /** Cancels the dialog without submitting. */
63
+ Cancel(): void;
64
+ /** Handles the dialog's own Close event (escape/backdrop/X). */
65
+ OnDialogClose(): void;
66
+ /** The DefaultPriority of the currently-selected type, or 'Medium'. */
67
+ private selectedTypeDefaultPriority;
68
+ private resetForm;
69
+ private close;
70
+ static ɵfac: i0.ɵɵFactoryDeclaration<ReportIssueComponent, never>;
71
+ static ɵcmp: i0.ɵɵComponentDeclaration<ReportIssueComponent, "mj-report-issue", never, { "Visible": { "alias": "Visible"; "required": false; }; "SourceEntityID": { "alias": "SourceEntityID"; "required": false; }; "SourceRecordID": { "alias": "SourceRecordID"; "required": false; }; "AppScope": { "alias": "AppScope"; "required": false; }; "ReporterEmail": { "alias": "ReporterEmail"; "required": false; }; }, { "VisibleChange": "VisibleChange"; "Submitted": "Submitted"; "Cancelled": "Cancelled"; }, never, never, true, never>;
72
+ }
73
+ export {};
74
+ //# sourceMappingURL=report-issue.component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report-issue.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/report-issue/report-issue.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,YAAY,EAGb,MAAM,eAAe,CAAC;AAgBvB,OAAO,EACL,0BAA0B,EAC1B,8BAA8B,EAE/B,MAAM,8BAA8B,CAAC;;AAEtC,4DAA4D;AAC5D,KAAK,aAAa,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;AAE5D;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAgBa,oBAAoB;IAC/B,OAAO,CAAC,GAAG,CAA6B;IAMxC,OAAO,CAAC,QAAQ,CAAS;IACzB,wEAAwE;IACxE,IACI,OAAO,CAAC,KAAK,EAAE,OAAO,EAMzB;IACD,IAAI,OAAO,IAAI,OAAO,CAErB;IACS,aAAa,wBAA+B;IAEtD,mEAAmE;IAC1D,cAAc,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC9C,sEAAsE;IAC7D,cAAc,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC9C,6DAA6D;IACpD,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAQ;IACxC,gEAAgE;IACvD,aAAa,EAAE,MAAM,GAAG,IAAI,CAAQ;IAE7C,yDAAyD;IAC/C,SAAS,2CAAkD;IACrE,oEAAoE;IAC1D,SAAS,qBAA4B;IAMxC,SAAS,UAAS;IAClB,YAAY,UAAS;IACrB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAQ;IAEnC,UAAU,EAAE,8BAA8B,EAAE,CAAM;IAGlD,KAAK,SAAM;IACX,WAAW,SAAM;IACjB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAQ;IACrC,QAAQ,EAAE,aAAa,CAAY;IAE1C,SAAgB,eAAe,EAAE,aAAa,EAAE,CAAyC;IAEzF,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,eAAe,CAAS;IAMhC,8EAA8E;YAChE,MAAM;YAmBN,iBAAiB;IAmC/B,kDAAkD;IAClD,IAAW,SAAS,IAAI,OAAO,CAE9B;IAED,+DAA+D;IAClD,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAyCpC,6CAA6C;IACtC,MAAM,IAAI,IAAI;IAKrB,gEAAgE;IACzD,aAAa,IAAI,IAAI;IAQ5B,uEAAuE;IACvE,OAAO,CAAC,2BAA2B;IAKnC,OAAO,CAAC,SAAS;IAQjB,OAAO,CAAC,KAAK;yCAhMF,oBAAoB;2CAApB,oBAAoB;CAqMhC"}
@@ -0,0 +1,344 @@
1
+ import { Component, Input, Output, EventEmitter, inject, ChangeDetectorRef, } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { FormsModule } from '@angular/forms';
4
+ import { Metadata, RunView, LogError } from '@memberjunction/core';
5
+ import { MJDialogComponent, MJDialogTitlebarComponent, MJDialogActionsComponent, MJDropdownComponent, MJButtonDirective, } from '@memberjunction/ng-ui-components';
6
+ // LoadingComponent (<mj-loading>) is declared by SharedGenericModule (non-standalone),
7
+ // so we import the module rather than the component into this standalone component.
8
+ import { SharedGenericModule } from '@memberjunction/ng-shared-generic';
9
+ import * as i0 from "@angular/core";
10
+ import * as i1 from "@angular/forms";
11
+ import * as i2 from "@memberjunction/ng-shared-generic";
12
+ function ReportIssueComponent_Conditional_0_Conditional_5_Template(rf, ctx) { if (rf & 1) {
13
+ i0.ɵɵelementStart(0, "div", 4);
14
+ i0.ɵɵelement(1, "mj-loading", 8);
15
+ i0.ɵɵelementEnd();
16
+ } }
17
+ function ReportIssueComponent_Conditional_0_Conditional_6_Conditional_1_Template(rf, ctx) { if (rf & 1) {
18
+ i0.ɵɵelementStart(0, "div", 9);
19
+ i0.ɵɵelement(1, "i", 17);
20
+ i0.ɵɵtext(2);
21
+ i0.ɵɵelementEnd();
22
+ } if (rf & 2) {
23
+ const ctx_r1 = i0.ɵɵnextContext(3);
24
+ i0.ɵɵadvance(2);
25
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.ErrorMessage, " ");
26
+ } }
27
+ function ReportIssueComponent_Conditional_0_Conditional_6_Template(rf, ctx) { if (rf & 1) {
28
+ const _r3 = i0.ɵɵgetCurrentView();
29
+ i0.ɵɵelementStart(0, "div", 5);
30
+ i0.ɵɵconditionalCreate(1, ReportIssueComponent_Conditional_0_Conditional_6_Conditional_1_Template, 3, 1, "div", 9);
31
+ i0.ɵɵelementStart(2, "label", 10)(3, "span", 11);
32
+ i0.ɵɵtext(4, "Type");
33
+ i0.ɵɵelementEnd();
34
+ i0.ɵɵelementStart(5, "mj-dropdown", 12);
35
+ i0.ɵɵtwoWayListener("ngModelChange", function ReportIssueComponent_Conditional_0_Conditional_6_Template_mj_dropdown_ngModelChange_5_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.SelectedTypeID, $event) || (ctx_r1.SelectedTypeID = $event); return i0.ɵɵresetView($event); });
36
+ i0.ɵɵelementEnd()();
37
+ i0.ɵɵelementStart(6, "label", 10)(7, "span", 11);
38
+ i0.ɵɵtext(8, "Title ");
39
+ i0.ɵɵelementStart(9, "span", 13);
40
+ i0.ɵɵtext(10, "*");
41
+ i0.ɵɵelementEnd()();
42
+ i0.ɵɵelementStart(11, "input", 14);
43
+ i0.ɵɵtwoWayListener("ngModelChange", function ReportIssueComponent_Conditional_0_Conditional_6_Template_input_ngModelChange_11_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.Title, $event) || (ctx_r1.Title = $event); return i0.ɵɵresetView($event); });
44
+ i0.ɵɵelementEnd()();
45
+ i0.ɵɵelementStart(12, "label", 10)(13, "span", 11);
46
+ i0.ɵɵtext(14, "Description");
47
+ i0.ɵɵelementEnd();
48
+ i0.ɵɵelementStart(15, "textarea", 15);
49
+ i0.ɵɵtwoWayListener("ngModelChange", function ReportIssueComponent_Conditional_0_Conditional_6_Template_textarea_ngModelChange_15_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.Description, $event) || (ctx_r1.Description = $event); return i0.ɵɵresetView($event); });
50
+ i0.ɵɵelementEnd()();
51
+ i0.ɵɵelementStart(16, "label", 10)(17, "span", 11);
52
+ i0.ɵɵtext(18, "Severity");
53
+ i0.ɵɵelementEnd();
54
+ i0.ɵɵelementStart(19, "mj-dropdown", 16);
55
+ i0.ɵɵtwoWayListener("ngModelChange", function ReportIssueComponent_Conditional_0_Conditional_6_Template_mj_dropdown_ngModelChange_19_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.Severity, $event) || (ctx_r1.Severity = $event); return i0.ɵɵresetView($event); });
56
+ i0.ɵɵelementEnd()()();
57
+ } if (rf & 2) {
58
+ const ctx_r1 = i0.ɵɵnextContext(2);
59
+ i0.ɵɵadvance();
60
+ i0.ɵɵconditional(ctx_r1.ErrorMessage ? 1 : -1);
61
+ i0.ɵɵadvance(4);
62
+ i0.ɵɵproperty("Data", ctx_r1.IssueTypes)("ValuePrimitive", true);
63
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r1.SelectedTypeID);
64
+ i0.ɵɵadvance(6);
65
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r1.Title);
66
+ i0.ɵɵadvance(4);
67
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r1.Description);
68
+ i0.ɵɵadvance(4);
69
+ i0.ɵɵproperty("Data", ctx_r1.SeverityOptions)("ValuePrimitive", true);
70
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r1.Severity);
71
+ } }
72
+ function ReportIssueComponent_Conditional_0_Conditional_9_Template(rf, ctx) { if (rf & 1) {
73
+ i0.ɵɵtext(0, " Submitting\u2026 ");
74
+ } }
75
+ function ReportIssueComponent_Conditional_0_Conditional_10_Template(rf, ctx) { if (rf & 1) {
76
+ i0.ɵɵtext(0, " Submit ");
77
+ } }
78
+ function ReportIssueComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
79
+ const _r1 = i0.ɵɵgetCurrentView();
80
+ i0.ɵɵelementStart(0, "mj-dialog", 1);
81
+ i0.ɵɵlistener("Close", function ReportIssueComponent_Conditional_0_Template_mj_dialog_Close_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnDialogClose()); });
82
+ i0.ɵɵelementStart(1, "mj-dialog-titlebar")(2, "span", 2);
83
+ i0.ɵɵelement(3, "i", 3);
84
+ i0.ɵɵtext(4, " Report an Issue");
85
+ i0.ɵɵelementEnd()();
86
+ i0.ɵɵconditionalCreate(5, ReportIssueComponent_Conditional_0_Conditional_5_Template, 2, 0, "div", 4)(6, ReportIssueComponent_Conditional_0_Conditional_6_Template, 20, 9, "div", 5);
87
+ i0.ɵɵelementStart(7, "mj-dialog-actions")(8, "button", 6);
88
+ i0.ɵɵlistener("click", function ReportIssueComponent_Conditional_0_Template_button_click_8_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.Submit()); });
89
+ i0.ɵɵconditionalCreate(9, ReportIssueComponent_Conditional_0_Conditional_9_Template, 1, 0)(10, ReportIssueComponent_Conditional_0_Conditional_10_Template, 1, 0);
90
+ i0.ɵɵelementEnd();
91
+ i0.ɵɵelementStart(11, "button", 7);
92
+ i0.ɵɵlistener("click", function ReportIssueComponent_Conditional_0_Template_button_click_11_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.Cancel()); });
93
+ i0.ɵɵtext(12, " Cancel ");
94
+ i0.ɵɵelementEnd()()();
95
+ } if (rf & 2) {
96
+ const ctx_r1 = i0.ɵɵnextContext();
97
+ i0.ɵɵproperty("Visible", ctx_r1.Visible)("Width", 560)("Closeable", true);
98
+ i0.ɵɵadvance(5);
99
+ i0.ɵɵconditional(ctx_r1.IsLoading ? 5 : 6);
100
+ i0.ɵɵadvance(3);
101
+ i0.ɵɵproperty("disabled", !ctx_r1.CanSubmit);
102
+ i0.ɵɵadvance();
103
+ i0.ɵɵconditional(ctx_r1.IsSubmitting ? 9 : 10);
104
+ i0.ɵɵadvance(2);
105
+ i0.ɵɵproperty("disabled", ctx_r1.IsSubmitting);
106
+ } }
107
+ /**
108
+ * ReportIssueComponent — a self-contained "Report an Issue / Submit Feedback" dialog.
109
+ *
110
+ * This is the entry point the Shell Extension surfaces (avatar/context menu). It is a thin
111
+ * client-side UI: it creates an Issue record directly via the MJ entity API (which routes
112
+ * through GraphQLDataProvider in the browser), defaulting status to the configured default
113
+ * status and priority to the chosen type's DefaultPriority. Server-side IssueType action hooks
114
+ * fire automatically when the record is saved.
115
+ *
116
+ * It can be opened standalone, or "about" a specific record by setting SourceEntityID +
117
+ * SourceRecordID (e.g. "report an issue about THIS dashboard"). AppScope tags which product the
118
+ * issue belongs to.
119
+ *
120
+ * Usage:
121
+ * ```html
122
+ * <mj-report-issue [(Visible)]="showReport" AppScope="MJC"
123
+ * (Submitted)="onIssueSubmitted($event)"></mj-report-issue>
124
+ * ```
125
+ */
126
+ export class ReportIssueComponent {
127
+ cdr = inject(ChangeDetectorRef);
128
+ // ----------------------------------------------------------------
129
+ // Inputs / Outputs
130
+ // ----------------------------------------------------------------
131
+ _visible = false;
132
+ /** Controls dialog visibility. On open, loads reference data (once). */
133
+ set Visible(value) {
134
+ const wasVisible = this._visible;
135
+ this._visible = value;
136
+ if (value && !wasVisible) {
137
+ void this.onOpen();
138
+ }
139
+ }
140
+ get Visible() {
141
+ return this._visible;
142
+ }
143
+ VisibleChange = new EventEmitter();
144
+ /** Optional polymorphic source: the entity this issue is about. */
145
+ SourceEntityID = null;
146
+ /** Optional polymorphic source: the record ID this issue is about. */
147
+ SourceRecordID = null;
148
+ /** Optional app/product scope tag stamped onto the issue. */
149
+ AppScope = null;
150
+ /** Optional reporter email for anonymous/external reporters. */
151
+ ReporterEmail = null;
152
+ /** Emits the created Issue after a successful submit. */
153
+ Submitted = new EventEmitter();
154
+ /** Emits when the dialog is cancelled/closed without submitting. */
155
+ Cancelled = new EventEmitter();
156
+ // ----------------------------------------------------------------
157
+ // State
158
+ // ----------------------------------------------------------------
159
+ IsLoading = false;
160
+ IsSubmitting = false;
161
+ ErrorMessage = null;
162
+ IssueTypes = [];
163
+ // Form model
164
+ Title = '';
165
+ Description = '';
166
+ SelectedTypeID = null;
167
+ Severity = 'Medium';
168
+ SeverityOptions = ['Low', 'Medium', 'High', 'Critical'];
169
+ defaultStatusID = null;
170
+ referenceLoaded = false;
171
+ // ----------------------------------------------------------------
172
+ // Lifecycle
173
+ // ----------------------------------------------------------------
174
+ /** Loads issue types + the default status the first time the dialog opens. */
175
+ async onOpen() {
176
+ this.resetForm();
177
+ if (this.referenceLoaded) {
178
+ return;
179
+ }
180
+ this.IsLoading = true;
181
+ this.cdr.detectChanges();
182
+ try {
183
+ await this.loadReferenceData();
184
+ this.referenceLoaded = true;
185
+ }
186
+ catch (err) {
187
+ this.ErrorMessage = 'Failed to load issue options. Please try again.';
188
+ LogError(`ReportIssueComponent.onOpen: ${err instanceof Error ? err.message : String(err)}`);
189
+ }
190
+ finally {
191
+ this.IsLoading = false;
192
+ this.cdr.detectChanges();
193
+ }
194
+ }
195
+ async loadReferenceData() {
196
+ const rv = new RunView();
197
+ const [typesResult, statusesResult] = await rv.RunViews([
198
+ {
199
+ EntityName: 'MJ_BizApps_Issues: Issue Types',
200
+ ExtraFilter: 'IsActive = 1',
201
+ OrderBy: 'Name',
202
+ ResultType: 'entity_object',
203
+ },
204
+ {
205
+ EntityName: 'MJ_BizApps_Issues: Issue Status',
206
+ ExtraFilter: 'IsDefault = 1',
207
+ ResultType: 'entity_object',
208
+ },
209
+ ]);
210
+ if (typesResult.Success) {
211
+ this.IssueTypes = typesResult.Results;
212
+ this.SelectedTypeID = this.IssueTypes[0]?.ID ?? null;
213
+ }
214
+ else {
215
+ LogError(`ReportIssueComponent: failed to load Issue Types: ${typesResult.ErrorMessage}`);
216
+ }
217
+ if (statusesResult.Success) {
218
+ const statuses = statusesResult.Results;
219
+ this.defaultStatusID = statuses[0]?.ID ?? null;
220
+ }
221
+ else {
222
+ LogError(`ReportIssueComponent: failed to load default status: ${statusesResult.ErrorMessage}`);
223
+ }
224
+ }
225
+ // ----------------------------------------------------------------
226
+ // Actions
227
+ // ----------------------------------------------------------------
228
+ /** Whether the form is valid enough to submit. */
229
+ get CanSubmit() {
230
+ return !this.IsSubmitting && this.Title.trim().length > 0 && !!this.SelectedTypeID && !!this.defaultStatusID;
231
+ }
232
+ /** Creates the Issue record and emits Submitted on success. */
233
+ async Submit() {
234
+ if (!this.CanSubmit) {
235
+ return;
236
+ }
237
+ this.IsSubmitting = true;
238
+ this.ErrorMessage = null;
239
+ this.cdr.detectChanges();
240
+ try {
241
+ const md = new Metadata();
242
+ const issue = await md.GetEntityObject('MJ_BizApps_Issues: Issues');
243
+ issue.NewRecord();
244
+ issue.Title = this.Title.trim();
245
+ issue.Description = this.Description.trim() || null;
246
+ issue.IssueTypeID = this.SelectedTypeID;
247
+ issue.StatusID = this.defaultStatusID;
248
+ issue.Severity = this.Severity;
249
+ issue.Priority = this.selectedTypeDefaultPriority();
250
+ issue.ReporterEmail = this.ReporterEmail;
251
+ issue.SourceEntityID = this.SourceEntityID;
252
+ issue.SourceRecordID = this.SourceRecordID;
253
+ issue.AppScope = this.AppScope;
254
+ const saved = await issue.Save();
255
+ if (!saved) {
256
+ this.ErrorMessage = issue.LatestResult?.CompleteMessage ?? 'Failed to submit the issue.';
257
+ LogError(`ReportIssueComponent.Submit: ${this.ErrorMessage}`);
258
+ return;
259
+ }
260
+ this.Submitted.emit(issue);
261
+ this.close();
262
+ }
263
+ catch (err) {
264
+ this.ErrorMessage = 'An unexpected error occurred while submitting.';
265
+ LogError(`ReportIssueComponent.Submit: ${err instanceof Error ? err.message : String(err)}`);
266
+ }
267
+ finally {
268
+ this.IsSubmitting = false;
269
+ this.cdr.detectChanges();
270
+ }
271
+ }
272
+ /** Cancels the dialog without submitting. */
273
+ Cancel() {
274
+ this.Cancelled.emit();
275
+ this.close();
276
+ }
277
+ /** Handles the dialog's own Close event (escape/backdrop/X). */
278
+ OnDialogClose() {
279
+ this.Cancel();
280
+ }
281
+ // ----------------------------------------------------------------
282
+ // Helpers
283
+ // ----------------------------------------------------------------
284
+ /** The DefaultPriority of the currently-selected type, or 'Medium'. */
285
+ selectedTypeDefaultPriority() {
286
+ const type = this.IssueTypes.find((t) => t.ID === this.SelectedTypeID);
287
+ return type?.DefaultPriority ?? 'Medium';
288
+ }
289
+ resetForm() {
290
+ this.Title = '';
291
+ this.Description = '';
292
+ this.Severity = 'Medium';
293
+ this.ErrorMessage = null;
294
+ this.SelectedTypeID = this.IssueTypes[0]?.ID ?? null;
295
+ }
296
+ close() {
297
+ this._visible = false;
298
+ this.VisibleChange.emit(false);
299
+ this.cdr.detectChanges();
300
+ }
301
+ static ɵfac = function ReportIssueComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ReportIssueComponent)(); };
302
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ReportIssueComponent, selectors: [["mj-report-issue"]], inputs: { Visible: "Visible", SourceEntityID: "SourceEntityID", SourceRecordID: "SourceRecordID", AppScope: "AppScope", ReporterEmail: "ReporterEmail" }, outputs: { VisibleChange: "VisibleChange", Submitted: "Submitted", Cancelled: "Cancelled" }, decls: 1, vars: 1, consts: [["Title", "Report an Issue", 3, "Visible", "Width", "Closeable"], ["Title", "Report an Issue", 3, "Close", "Visible", "Width", "Closeable"], [1, "ri-title"], [1, "fa-solid", "fa-life-ring"], [1, "ri-loading"], [1, "ri-body"], ["mjButton", "", "variant", "primary", 3, "click", "disabled"], ["mjButton", "", "variant", "secondary", 3, "click", "disabled"], ["text", "Loading options...", "size", "medium"], ["role", "alert", 1, "ri-error"], [1, "ri-field"], [1, "ri-label"], ["TextField", "Name", "ValueField", "ID", "Placeholder", "Select an issue type", 3, "ngModelChange", "Data", "ValuePrimitive", "ngModel"], [1, "ri-required"], ["type", "text", "maxlength", "500", "placeholder", "Short summary of the issue", 1, "mj-input", 3, "ngModelChange", "ngModel"], ["rows", "5", "placeholder", "What happened? Steps to reproduce, expected vs. actual\u2026", 1, "mj-textarea", 3, "ngModelChange", "ngModel"], [3, "ngModelChange", "Data", "ValuePrimitive", "ngModel"], [1, "fa-solid", "fa-triangle-exclamation"]], template: function ReportIssueComponent_Template(rf, ctx) { if (rf & 1) {
303
+ i0.ɵɵconditionalCreate(0, ReportIssueComponent_Conditional_0_Template, 13, 7, "mj-dialog", 0);
304
+ } if (rf & 2) {
305
+ i0.ɵɵconditional(ctx.Visible ? 0 : -1);
306
+ } }, dependencies: [CommonModule,
307
+ FormsModule, i1.DefaultValueAccessor, i1.NgControlStatus, i1.MaxLengthValidator, i1.NgModel, MJDialogComponent,
308
+ MJDialogTitlebarComponent,
309
+ MJDialogActionsComponent,
310
+ MJDropdownComponent,
311
+ MJButtonDirective,
312
+ SharedGenericModule, i2.LoadingComponent], styles: [".ri-title[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.ri-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.ri-loading[_ngcontent-%COMP%] {\n display: flex;\n justify-content: center;\n align-items: center;\n min-height: 160px;\n}\n\n.ri-body[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 16px;\n padding: 4px 2px;\n}\n\n.ri-field[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.ri-label[_ngcontent-%COMP%] {\n font-size: 0.85rem;\n font-weight: 600;\n color: var(--mj-text-secondary);\n}\n\n.ri-required[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n.ri-error[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 12px;\n border-radius: 6px;\n font-size: 0.9rem;\n color: var(--mj-status-error-text);\n background: var(--mj-status-error-bg);\n border: 1px solid var(--mj-status-error-border);\n}\n\n\n\n.ri-field[_ngcontent-%COMP%] .mj-input[_ngcontent-%COMP%], \n.ri-field[_ngcontent-%COMP%] .mj-textarea[_ngcontent-%COMP%] {\n width: 100%;\n box-sizing: border-box;\n}\n\n.ri-field[_ngcontent-%COMP%] .mj-textarea[_ngcontent-%COMP%] {\n resize: vertical;\n min-height: 96px;\n}"] });
313
+ }
314
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ReportIssueComponent, [{
315
+ type: Component,
316
+ args: [{ selector: 'mj-report-issue', standalone: true, imports: [
317
+ CommonModule,
318
+ FormsModule,
319
+ MJDialogComponent,
320
+ MJDialogTitlebarComponent,
321
+ MJDialogActionsComponent,
322
+ MJDropdownComponent,
323
+ MJButtonDirective,
324
+ SharedGenericModule,
325
+ ], template: "@if (Visible) {\n <mj-dialog [Visible]=\"Visible\" Title=\"Report an Issue\" [Width]=\"560\" [Closeable]=\"true\" (Close)=\"OnDialogClose()\">\n <mj-dialog-titlebar>\n <span class=\"ri-title\"><i class=\"fa-solid fa-life-ring\"></i> Report an Issue</span>\n </mj-dialog-titlebar>\n\n @if (IsLoading) {\n <div class=\"ri-loading\">\n <mj-loading text=\"Loading options...\" size=\"medium\"></mj-loading>\n </div>\n } @else {\n <div class=\"ri-body\">\n @if (ErrorMessage) {\n <div class=\"ri-error\" role=\"alert\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i> {{ ErrorMessage }}\n </div>\n }\n\n <label class=\"ri-field\">\n <span class=\"ri-label\">Type</span>\n <mj-dropdown\n [Data]=\"IssueTypes\"\n TextField=\"Name\"\n ValueField=\"ID\"\n [ValuePrimitive]=\"true\"\n Placeholder=\"Select an issue type\"\n [(ngModel)]=\"SelectedTypeID\">\n </mj-dropdown>\n </label>\n\n <label class=\"ri-field\">\n <span class=\"ri-label\">Title <span class=\"ri-required\">*</span></span>\n <input\n class=\"mj-input\"\n type=\"text\"\n maxlength=\"500\"\n placeholder=\"Short summary of the issue\"\n [(ngModel)]=\"Title\" />\n </label>\n\n <label class=\"ri-field\">\n <span class=\"ri-label\">Description</span>\n <textarea\n class=\"mj-textarea\"\n rows=\"5\"\n placeholder=\"What happened? Steps to reproduce, expected vs. actual\u2026\"\n [(ngModel)]=\"Description\"></textarea>\n </label>\n\n <label class=\"ri-field\">\n <span class=\"ri-label\">Severity</span>\n <mj-dropdown\n [Data]=\"SeverityOptions\"\n [ValuePrimitive]=\"true\"\n [(ngModel)]=\"Severity\">\n </mj-dropdown>\n </label>\n </div>\n }\n\n <mj-dialog-actions>\n <!-- Confirm/submit on the LEFT, cancel on the RIGHT (MJ convention). -->\n <button mjButton variant=\"primary\" [disabled]=\"!CanSubmit\" (click)=\"Submit()\">\n @if (IsSubmitting) { Submitting\u2026 } @else { Submit }\n </button>\n <button mjButton variant=\"secondary\" [disabled]=\"IsSubmitting\" (click)=\"Cancel()\">\n Cancel\n </button>\n </mj-dialog-actions>\n </mj-dialog>\n}\n", styles: [".ri-title {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.ri-title i {\n color: var(--mj-brand-primary);\n}\n\n.ri-loading {\n display: flex;\n justify-content: center;\n align-items: center;\n min-height: 160px;\n}\n\n.ri-body {\n display: flex;\n flex-direction: column;\n gap: 16px;\n padding: 4px 2px;\n}\n\n.ri-field {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.ri-label {\n font-size: 0.85rem;\n font-weight: 600;\n color: var(--mj-text-secondary);\n}\n\n.ri-required {\n color: var(--mj-status-error);\n}\n\n.ri-error {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 12px;\n border-radius: 6px;\n font-size: 0.9rem;\n color: var(--mj-status-error-text);\n background: var(--mj-status-error-bg);\n border: 1px solid var(--mj-status-error-border);\n}\n\n/* Native form controls use the shared MJ input/textarea classes; only layout here. */\n.ri-field .mj-input,\n.ri-field .mj-textarea {\n width: 100%;\n box-sizing: border-box;\n}\n\n.ri-field .mj-textarea {\n resize: vertical;\n min-height: 96px;\n}\n"] }]
326
+ }], null, { Visible: [{
327
+ type: Input
328
+ }], VisibleChange: [{
329
+ type: Output
330
+ }], SourceEntityID: [{
331
+ type: Input
332
+ }], SourceRecordID: [{
333
+ type: Input
334
+ }], AppScope: [{
335
+ type: Input
336
+ }], ReporterEmail: [{
337
+ type: Input
338
+ }], Submitted: [{
339
+ type: Output
340
+ }], Cancelled: [{
341
+ type: Output
342
+ }] }); })();
343
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ReportIssueComponent, { className: "ReportIssueComponent", filePath: "lib/components/report-issue/report-issue.component.ts", lineNumber: 68 }); })();
344
+ //# sourceMappingURL=report-issue.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report-issue.component.js","sourceRoot":"","sources":["../../../../src/lib/components/report-issue/report-issue.component.ts","../../../../src/lib/components/report-issue/report-issue.component.html"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import * as i0 from "@angular/core";
2
+ import * as i1 from "@angular/common";
3
+ import * as i2 from "@angular/forms";
4
+ import * as i3 from "@memberjunction/ng-base-forms";
5
+ import * as i4 from "@memberjunction/ng-link-directives";
6
+ import * as i5 from "../components/report-issue/report-issue.component";
7
+ export declare class CustomFormsModule {
8
+ static ɵfac: i0.ɵɵFactoryDeclaration<CustomFormsModule, never>;
9
+ static ɵmod: i0.ɵɵNgModuleDeclaration<CustomFormsModule, never, [typeof i1.CommonModule, typeof i2.FormsModule, typeof i3.BaseFormsModule, typeof i4.LinkDirectivesModule, typeof i5.ReportIssueComponent], [typeof i5.ReportIssueComponent]>;
10
+ static ɵinj: i0.ɵɵInjectorDeclaration<CustomFormsModule>;
11
+ }
12
+ //# sourceMappingURL=custom-forms.module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-forms.module.d.ts","sourceRoot":"","sources":["../../../src/lib/custom/custom-forms.module.ts"],"names":[],"mappings":";;;;;;AAWA,qBAca,iBAAiB;yCAAjB,iBAAiB;0CAAjB,iBAAiB;0CAAjB,iBAAiB;CAAI"}
@@ -0,0 +1,43 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { FormsModule } from '@angular/forms';
4
+ // MemberJunction Imports
5
+ import { BaseFormsModule } from '@memberjunction/ng-base-forms';
6
+ import { LinkDirectivesModule } from '@memberjunction/ng-link-directives';
7
+ // Standalone feature components (imported, not declared)
8
+ import { ReportIssueComponent } from '../components/report-issue/report-issue.component';
9
+ import * as i0 from "@angular/core";
10
+ export class CustomFormsModule {
11
+ static ɵfac = function CustomFormsModule_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || CustomFormsModule)(); };
12
+ static ɵmod = /*@__PURE__*/ i0.ɵɵdefineNgModule({ type: CustomFormsModule });
13
+ static ɵinj = /*@__PURE__*/ i0.ɵɵdefineInjector({ imports: [CommonModule,
14
+ FormsModule,
15
+ BaseFormsModule,
16
+ LinkDirectivesModule,
17
+ // Standalone components used across the app
18
+ ReportIssueComponent] });
19
+ }
20
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CustomFormsModule, [{
21
+ type: NgModule,
22
+ args: [{
23
+ declarations: [],
24
+ imports: [
25
+ CommonModule,
26
+ FormsModule,
27
+ BaseFormsModule,
28
+ LinkDirectivesModule,
29
+ // Standalone components used across the app
30
+ ReportIssueComponent
31
+ ],
32
+ exports: [
33
+ ReportIssueComponent
34
+ ]
35
+ }]
36
+ }], null, null); })();
37
+ (function () { (typeof ngJitMode === "undefined" || ngJitMode) && i0.ɵɵsetNgModuleScope(CustomFormsModule, { imports: [CommonModule,
38
+ FormsModule,
39
+ BaseFormsModule,
40
+ LinkDirectivesModule,
41
+ // Standalone components used across the app
42
+ ReportIssueComponent], exports: [ReportIssueComponent] }); })();
43
+ //# sourceMappingURL=custom-forms.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-forms.module.js","sourceRoot":"","sources":["../../../src/lib/custom/custom-forms.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,yBAAyB;AACzB,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAE1E,yDAAyD;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mDAAmD,CAAC;;AAgBzF,MAAM,OAAO,iBAAiB;2GAAjB,iBAAiB;4DAAjB,iBAAiB;gEAX1B,YAAY;YACZ,WAAW;YACX,eAAe;YACf,oBAAoB;YACpB,4CAA4C;YAC5C,oBAAoB;;iFAMX,iBAAiB;cAd7B,QAAQ;eAAC;gBACR,YAAY,EAAE,EAAE;gBAChB,OAAO,EAAE;oBACP,YAAY;oBACZ,WAAW;oBACX,eAAe;oBACf,oBAAoB;oBACpB,4CAA4C;oBAC5C,oBAAoB;iBACrB;gBACD,OAAO,EAAE;oBACP,oBAAoB;iBACrB;aACF;;wFACY,iBAAiB,cAX1B,YAAY;QACZ,WAAW;QACX,eAAe;QACf,oBAAoB;QACpB,4CAA4C;QAC5C,oBAAoB,aAGpB,oBAAoB"}
@@ -0,0 +1,10 @@
1
+ import { mjBizAppsIssuesIssueEntity } from '@mj-biz-apps/issues-entities';
2
+ import { BaseFormComponent } from '@memberjunction/ng-base-forms';
3
+ import * as i0 from "@angular/core";
4
+ export declare class mjBizAppsIssuesIssueFormComponent extends BaseFormComponent {
5
+ record: mjBizAppsIssuesIssueEntity;
6
+ ngOnInit(): Promise<void>;
7
+ static ɵfac: i0.ɵɵFactoryDeclaration<mjBizAppsIssuesIssueFormComponent, never>;
8
+ static ɵcmp: i0.ɵɵComponentDeclaration<mjBizAppsIssuesIssueFormComponent, "gen-mjbizappsissuesissue-form", never, {}, {}, never, never, false, never>;
9
+ }
10
+ //# sourceMappingURL=mjbizappsissuesissue.form.component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mjbizappsissuesissue.form.component.d.ts","sourceRoot":"","sources":["../../../../../src/lib/generated/Entities/mjBizAppsIssuesIssue/mjbizappsissuesissue.form.component.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAE1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;;AAGlE,qBAMa,iCAAkC,SAAQ,iBAAiB;IAC7D,MAAM,EAAG,0BAA0B,CAAC;IAE5B,QAAQ;yCAHd,iCAAiC;2CAAjC,iCAAiC;CAU7C"}