@mj-biz-apps/common-ng 5.57.1 → 5.59.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.
Files changed (45) hide show
  1. package/dist/lib/components/company-sender-identities/__tests__/company-sender-identities.component.test.d.ts +2 -0
  2. package/dist/lib/components/company-sender-identities/__tests__/company-sender-identities.component.test.d.ts.map +1 -0
  3. package/dist/lib/components/company-sender-identities/__tests__/company-sender-identities.component.test.js +296 -0
  4. package/dist/lib/components/company-sender-identities/__tests__/company-sender-identities.component.test.js.map +1 -0
  5. package/dist/lib/components/company-sender-identities/company-sender-identities.component.d.ts +82 -0
  6. package/dist/lib/components/company-sender-identities/company-sender-identities.component.d.ts.map +1 -0
  7. package/dist/lib/components/company-sender-identities/company-sender-identities.component.js +519 -0
  8. package/dist/lib/components/company-sender-identities/company-sender-identities.component.js.map +1 -0
  9. package/dist/lib/components/party-field/__tests__/party-field.component.test.js +134 -3
  10. package/dist/lib/components/party-field/__tests__/party-field.component.test.js.map +1 -1
  11. package/dist/lib/components/party-field/party-field.component.d.ts +34 -2
  12. package/dist/lib/components/party-field/party-field.component.d.ts.map +1 -1
  13. package/dist/lib/components/party-field/party-field.component.js +167 -25
  14. package/dist/lib/components/party-field/party-field.component.js.map +1 -1
  15. package/dist/lib/components/relationship-list/__tests__/relationship-list-party-picker.test.js +3 -0
  16. package/dist/lib/components/relationship-list/__tests__/relationship-list-party-picker.test.js.map +1 -1
  17. package/dist/lib/components/relationship-list/relationship-list.component.d.ts +2 -1
  18. package/dist/lib/components/relationship-list/relationship-list.component.d.ts.map +1 -1
  19. package/dist/lib/components/relationship-list/relationship-list.component.js +44 -41
  20. package/dist/lib/components/relationship-list/relationship-list.component.js.map +1 -1
  21. package/dist/lib/custom/custom-forms.module.d.ts +25 -23
  22. package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
  23. package/dist/lib/custom/custom-forms.module.js +11 -1
  24. package/dist/lib/custom/custom-forms.module.js.map +1 -1
  25. package/dist/lib/custom/panels/__tests__/company-sender-identities.panel.test.d.ts +3 -0
  26. package/dist/lib/custom/panels/__tests__/company-sender-identities.panel.test.d.ts.map +1 -0
  27. package/dist/lib/custom/panels/__tests__/company-sender-identities.panel.test.js +46 -0
  28. package/dist/lib/custom/panels/__tests__/company-sender-identities.panel.test.js.map +1 -0
  29. package/dist/lib/custom/panels/company-sender-identities.panel.d.ts +18 -0
  30. package/dist/lib/custom/panels/company-sender-identities.panel.d.ts.map +1 -0
  31. package/dist/lib/custom/panels/company-sender-identities.panel.js +63 -0
  32. package/dist/lib/custom/panels/company-sender-identities.panel.js.map +1 -0
  33. package/dist/lib/generated/Entities/mjBizAppsCommonCompanySenderIdentity/mjbizappscommoncompanysenderidentity.form.component.d.ts +10 -0
  34. package/dist/lib/generated/Entities/mjBizAppsCommonCompanySenderIdentity/mjbizappscommoncompanysenderidentity.form.component.d.ts.map +1 -0
  35. package/dist/lib/generated/Entities/mjBizAppsCommonCompanySenderIdentity/mjbizappscommoncompanysenderidentity.form.component.js +71 -0
  36. package/dist/lib/generated/Entities/mjBizAppsCommonCompanySenderIdentity/mjbizappscommoncompanysenderidentity.form.component.js.map +1 -0
  37. package/dist/lib/generated/generated-forms.module.d.ts +38 -37
  38. package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
  39. package/dist/lib/generated/generated-forms.module.js +3 -0
  40. package/dist/lib/generated/generated-forms.module.js.map +1 -1
  41. package/dist/public-api.d.ts +2 -0
  42. package/dist/public-api.d.ts.map +1 -1
  43. package/dist/public-api.js +2 -0
  44. package/dist/public-api.js.map +1 -1
  45. package/package.json +4 -2
@@ -0,0 +1,519 @@
1
+ import { ChangeDetectorRef, Component, EventEmitter, Input, Output, inject, } from '@angular/core';
2
+ import { FormsModule } from '@angular/forms';
3
+ import { Metadata, RunView } from '@memberjunction/core';
4
+ import { EscapeSQLString, UUIDsEqual } from '@memberjunction/global';
5
+ import { MJButtonDirective, MJConfirmService } from '@memberjunction/ng-ui-components';
6
+ import { SharedGenericModule } from '@memberjunction/ng-shared-generic';
7
+ import { NormalizeSenderIdentity, } from '@mj-biz-apps/common-entities';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "@angular/forms";
10
+ import * as i2 from "@memberjunction/ng-shared-generic";
11
+ const _forTrack0 = ($index, $item) => $item.ID;
12
+ function CompanySenderIdentitiesComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
13
+ i0.ɵɵelementStart(0, "div", 1);
14
+ i0.ɵɵelement(1, "i", 4);
15
+ i0.ɵɵelementStart(2, "span");
16
+ i0.ɵɵtext(3);
17
+ i0.ɵɵelementEnd()();
18
+ } if (rf & 2) {
19
+ const ctx_r0 = i0.ɵɵnextContext();
20
+ i0.ɵɵadvance(3);
21
+ i0.ɵɵtextInterpolate(ctx_r0.Error);
22
+ } }
23
+ function CompanySenderIdentitiesComponent_Conditional_2_Template(rf, ctx) { if (rf & 1) {
24
+ i0.ɵɵelementStart(0, "div", 2);
25
+ i0.ɵɵelement(1, "i", 5);
26
+ i0.ɵɵelementStart(2, "span");
27
+ i0.ɵɵtext(3);
28
+ i0.ɵɵelementEnd()();
29
+ } if (rf & 2) {
30
+ const ctx_r0 = i0.ɵɵnextContext();
31
+ i0.ɵɵadvance(3);
32
+ i0.ɵɵtextInterpolate(ctx_r0.Notice);
33
+ } }
34
+ function CompanySenderIdentitiesComponent_Conditional_3_Template(rf, ctx) { if (rf & 1) {
35
+ i0.ɵɵelementStart(0, "div", 3);
36
+ i0.ɵɵelement(1, "mj-loading", 6);
37
+ i0.ɵɵelementEnd();
38
+ } }
39
+ function CompanySenderIdentitiesComponent_Conditional_4_Conditional_0_Template(rf, ctx) { if (rf & 1) {
40
+ i0.ɵɵelementStart(0, "div", 7);
41
+ i0.ɵɵtext(1, "No email senders yet.");
42
+ i0.ɵɵelementEnd();
43
+ } }
44
+ function CompanySenderIdentitiesComponent_Conditional_4_Conditional_1_For_2_Conditional_5_Template(rf, ctx) { if (rf & 1) {
45
+ i0.ɵɵelementStart(0, "span", 13);
46
+ i0.ɵɵtext(1);
47
+ i0.ɵɵelementEnd();
48
+ } if (rf & 2) {
49
+ const row_r2 = i0.ɵɵnextContext().$implicit;
50
+ i0.ɵɵadvance();
51
+ i0.ɵɵtextInterpolate(row_r2.DisplayName);
52
+ } }
53
+ function CompanySenderIdentitiesComponent_Conditional_4_Conditional_1_For_2_Conditional_6_Template(rf, ctx) { if (rf & 1) {
54
+ i0.ɵɵelementStart(0, "span", 14);
55
+ i0.ɵɵtext(1, "Default");
56
+ i0.ɵɵelementEnd();
57
+ } }
58
+ function CompanySenderIdentitiesComponent_Conditional_4_Conditional_1_For_2_Conditional_7_Conditional_1_Template(rf, ctx) { if (rf & 1) {
59
+ const _r4 = i0.ɵɵgetCurrentView();
60
+ i0.ɵɵelementStart(0, "button", 17);
61
+ i0.ɵɵlistener("click", function CompanySenderIdentitiesComponent_Conditional_4_Conditional_1_For_2_Conditional_7_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r4); const row_r2 = i0.ɵɵnextContext(2).$implicit; const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.setDefault(row_r2)); });
62
+ i0.ɵɵelement(1, "i", 19);
63
+ i0.ɵɵtext(2, " Set default ");
64
+ i0.ɵɵelementEnd();
65
+ } if (rf & 2) {
66
+ const ctx_r0 = i0.ɵɵnextContext(5);
67
+ i0.ɵɵproperty("disabled", ctx_r0.Saving);
68
+ } }
69
+ function CompanySenderIdentitiesComponent_Conditional_4_Conditional_1_For_2_Conditional_7_Template(rf, ctx) { if (rf & 1) {
70
+ const _r3 = i0.ɵɵgetCurrentView();
71
+ i0.ɵɵelementStart(0, "div", 15);
72
+ i0.ɵɵconditionalCreate(1, CompanySenderIdentitiesComponent_Conditional_4_Conditional_1_For_2_Conditional_7_Conditional_1_Template, 3, 1, "button", 16);
73
+ i0.ɵɵelementStart(2, "button", 17);
74
+ i0.ɵɵlistener("click", function CompanySenderIdentitiesComponent_Conditional_4_Conditional_1_For_2_Conditional_7_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r3); const row_r2 = i0.ɵɵnextContext().$implicit; const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.removeRow(row_r2)); });
75
+ i0.ɵɵelement(3, "i", 18);
76
+ i0.ɵɵtext(4, " Remove ");
77
+ i0.ɵɵelementEnd()();
78
+ } if (rf & 2) {
79
+ const row_r2 = i0.ɵɵnextContext().$implicit;
80
+ const ctx_r0 = i0.ɵɵnextContext(3);
81
+ i0.ɵɵadvance();
82
+ i0.ɵɵconditional(ctx_r0.canSetDefault(row_r2) ? 1 : -1);
83
+ i0.ɵɵadvance();
84
+ i0.ɵɵproperty("disabled", ctx_r0.Saving);
85
+ } }
86
+ function CompanySenderIdentitiesComponent_Conditional_4_Conditional_1_For_2_Template(rf, ctx) { if (rf & 1) {
87
+ i0.ɵɵelementStart(0, "li", 9);
88
+ i0.ɵɵelement(1, "i", 10);
89
+ i0.ɵɵelementStart(2, "div", 11)(3, "span", 12);
90
+ i0.ɵɵtext(4);
91
+ i0.ɵɵelementEnd();
92
+ i0.ɵɵconditionalCreate(5, CompanySenderIdentitiesComponent_Conditional_4_Conditional_1_For_2_Conditional_5_Template, 2, 1, "span", 13);
93
+ i0.ɵɵelementEnd();
94
+ i0.ɵɵconditionalCreate(6, CompanySenderIdentitiesComponent_Conditional_4_Conditional_1_For_2_Conditional_6_Template, 2, 0, "span", 14);
95
+ i0.ɵɵconditionalCreate(7, CompanySenderIdentitiesComponent_Conditional_4_Conditional_1_For_2_Conditional_7_Template, 5, 2, "div", 15);
96
+ i0.ɵɵelementEnd();
97
+ } if (rf & 2) {
98
+ const row_r2 = ctx.$implicit;
99
+ const ctx_r0 = i0.ɵɵnextContext(3);
100
+ i0.ɵɵadvance();
101
+ i0.ɵɵclassProp("fa-envelope", row_r2.Kind === "Mailbox")("fa-globe", row_r2.Kind === "Domain");
102
+ i0.ɵɵproperty("title", row_r2.Kind);
103
+ i0.ɵɵadvance(3);
104
+ i0.ɵɵtextInterpolate(row_r2.Address);
105
+ i0.ɵɵadvance();
106
+ i0.ɵɵconditional(row_r2.DisplayName ? 5 : -1);
107
+ i0.ɵɵadvance();
108
+ i0.ɵɵconditional(row_r2.IsDefault ? 6 : -1);
109
+ i0.ɵɵadvance();
110
+ i0.ɵɵconditional(ctx_r0.EditMode ? 7 : -1);
111
+ } }
112
+ function CompanySenderIdentitiesComponent_Conditional_4_Conditional_1_Template(rf, ctx) { if (rf & 1) {
113
+ i0.ɵɵelementStart(0, "ul", 8);
114
+ i0.ɵɵrepeaterCreate(1, CompanySenderIdentitiesComponent_Conditional_4_Conditional_1_For_2_Template, 8, 9, "li", 9, _forTrack0);
115
+ i0.ɵɵelementEnd();
116
+ } if (rf & 2) {
117
+ const ctx_r0 = i0.ɵɵnextContext(2);
118
+ i0.ɵɵadvance();
119
+ i0.ɵɵrepeater(ctx_r0.Rows);
120
+ } }
121
+ function CompanySenderIdentitiesComponent_Conditional_4_Conditional_2_Conditional_0_Conditional_9_Template(rf, ctx) { if (rf & 1) {
122
+ const _r6 = i0.ɵɵgetCurrentView();
123
+ i0.ɵɵelementStart(0, "input", 32);
124
+ i0.ɵɵtwoWayListener("ngModelChange", function CompanySenderIdentitiesComponent_Conditional_4_Conditional_2_Conditional_0_Conditional_9_Template_input_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(4); i0.ɵɵtwoWayBindingSet(ctx_r0.NewDisplayName, $event) || (ctx_r0.NewDisplayName = $event); return i0.ɵɵresetView($event); });
125
+ i0.ɵɵelementEnd();
126
+ } if (rf & 2) {
127
+ const ctx_r0 = i0.ɵɵnextContext(4);
128
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r0.NewDisplayName);
129
+ i0.ɵɵproperty("disabled", ctx_r0.Saving);
130
+ } }
131
+ function CompanySenderIdentitiesComponent_Conditional_4_Conditional_2_Conditional_0_Template(rf, ctx) { if (rf & 1) {
132
+ const _r5 = i0.ɵɵgetCurrentView();
133
+ i0.ɵɵelementStart(0, "div", 20)(1, "div", 22)(2, "button", 23);
134
+ i0.ɵɵlistener("click", function CompanySenderIdentitiesComponent_Conditional_4_Conditional_2_Conditional_0_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.NewKind = "Mailbox"); });
135
+ i0.ɵɵelement(3, "i", 24);
136
+ i0.ɵɵtext(4, " Mailbox ");
137
+ i0.ɵɵelementEnd();
138
+ i0.ɵɵelementStart(5, "button", 23);
139
+ i0.ɵɵlistener("click", function CompanySenderIdentitiesComponent_Conditional_4_Conditional_2_Conditional_0_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.NewKind = "Domain"); });
140
+ i0.ɵɵelement(6, "i", 25);
141
+ i0.ɵɵtext(7, " Domain ");
142
+ i0.ɵɵelementEnd()();
143
+ i0.ɵɵelementStart(8, "input", 26);
144
+ i0.ɵɵtwoWayListener("ngModelChange", function CompanySenderIdentitiesComponent_Conditional_4_Conditional_2_Conditional_0_Template_input_ngModelChange_8_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r0.NewAddress, $event) || (ctx_r0.NewAddress = $event); return i0.ɵɵresetView($event); });
145
+ i0.ɵɵelementEnd();
146
+ i0.ɵɵconditionalCreate(9, CompanySenderIdentitiesComponent_Conditional_4_Conditional_2_Conditional_0_Conditional_9_Template, 1, 2, "input", 27);
147
+ i0.ɵɵelementStart(10, "div", 28)(11, "button", 29);
148
+ i0.ɵɵlistener("click", function CompanySenderIdentitiesComponent_Conditional_4_Conditional_2_Conditional_0_Template_button_click_11_listener() { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.onAdd()); });
149
+ i0.ɵɵelement(12, "i", 30);
150
+ i0.ɵɵtext(13, " Add ");
151
+ i0.ɵɵelementEnd();
152
+ i0.ɵɵelementStart(14, "button", 31);
153
+ i0.ɵɵlistener("click", function CompanySenderIdentitiesComponent_Conditional_4_Conditional_2_Conditional_0_Template_button_click_14_listener() { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.cancelAdd()); });
154
+ i0.ɵɵtext(15, " Cancel ");
155
+ i0.ɵɵelementEnd()()();
156
+ } if (rf & 2) {
157
+ const ctx_r0 = i0.ɵɵnextContext(3);
158
+ i0.ɵɵadvance(2);
159
+ i0.ɵɵproperty("variant", ctx_r0.NewKind === "Mailbox" ? "primary" : "secondary")("disabled", ctx_r0.Saving);
160
+ i0.ɵɵadvance(3);
161
+ i0.ɵɵproperty("variant", ctx_r0.NewKind === "Domain" ? "primary" : "secondary")("disabled", ctx_r0.Saving);
162
+ i0.ɵɵadvance(3);
163
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r0.NewAddress);
164
+ i0.ɵɵproperty("disabled", ctx_r0.Saving)("placeholder", ctx_r0.NewKind === "Mailbox" ? "name@example.com" : "example.com");
165
+ i0.ɵɵadvance();
166
+ i0.ɵɵconditional(ctx_r0.NewKind === "Mailbox" ? 9 : -1);
167
+ i0.ɵɵadvance(2);
168
+ i0.ɵɵproperty("disabled", ctx_r0.Saving || !ctx_r0.NewAddress.trim());
169
+ i0.ɵɵadvance(3);
170
+ i0.ɵɵproperty("disabled", ctx_r0.Saving);
171
+ } }
172
+ function CompanySenderIdentitiesComponent_Conditional_4_Conditional_2_Conditional_1_Template(rf, ctx) { if (rf & 1) {
173
+ const _r7 = i0.ɵɵgetCurrentView();
174
+ i0.ɵɵelementStart(0, "div", 21)(1, "button", 31);
175
+ i0.ɵɵlistener("click", function CompanySenderIdentitiesComponent_Conditional_4_Conditional_2_Conditional_1_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r7); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.openAddForm("Mailbox")); });
176
+ i0.ɵɵelement(2, "i", 33);
177
+ i0.ɵɵtext(3, " Add mailbox ");
178
+ i0.ɵɵelementEnd();
179
+ i0.ɵɵelementStart(4, "button", 31);
180
+ i0.ɵɵlistener("click", function CompanySenderIdentitiesComponent_Conditional_4_Conditional_2_Conditional_1_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r7); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.openAddForm("Domain")); });
181
+ i0.ɵɵelement(5, "i", 33);
182
+ i0.ɵɵtext(6, " Add domain ");
183
+ i0.ɵɵelementEnd()();
184
+ } if (rf & 2) {
185
+ const ctx_r0 = i0.ɵɵnextContext(3);
186
+ i0.ɵɵadvance();
187
+ i0.ɵɵproperty("disabled", ctx_r0.Saving);
188
+ i0.ɵɵadvance(3);
189
+ i0.ɵɵproperty("disabled", ctx_r0.Saving);
190
+ } }
191
+ function CompanySenderIdentitiesComponent_Conditional_4_Conditional_2_Template(rf, ctx) { if (rf & 1) {
192
+ i0.ɵɵconditionalCreate(0, CompanySenderIdentitiesComponent_Conditional_4_Conditional_2_Conditional_0_Template, 16, 10, "div", 20)(1, CompanySenderIdentitiesComponent_Conditional_4_Conditional_2_Conditional_1_Template, 7, 2, "div", 21);
193
+ } if (rf & 2) {
194
+ const ctx_r0 = i0.ɵɵnextContext(2);
195
+ i0.ɵɵconditional(ctx_r0.ShowAddForm ? 0 : 1);
196
+ } }
197
+ function CompanySenderIdentitiesComponent_Conditional_4_Template(rf, ctx) { if (rf & 1) {
198
+ i0.ɵɵconditionalCreate(0, CompanySenderIdentitiesComponent_Conditional_4_Conditional_0_Template, 2, 0, "div", 7)(1, CompanySenderIdentitiesComponent_Conditional_4_Conditional_1_Template, 3, 0, "ul", 8);
199
+ i0.ɵɵconditionalCreate(2, CompanySenderIdentitiesComponent_Conditional_4_Conditional_2_Template, 2, 1);
200
+ } if (rf & 2) {
201
+ const ctx_r0 = i0.ɵɵnextContext();
202
+ i0.ɵɵconditional(ctx_r0.Rows.length === 0 ? 0 : 1);
203
+ i0.ɵɵadvance(2);
204
+ i0.ɵɵconditional(ctx_r0.EditMode ? 2 : -1);
205
+ } }
206
+ const ENTITY_NAME = 'MJ_BizApps_Common: Company Sender Identities';
207
+ /** Shown after a successful add. The panel never calls the mail provider (spec §8). */
208
+ export const SENDER_VERIFICATION_REMINDER = 'Make sure this sender is verified in your mail provider before using it.';
209
+ const SAVED = { Saved: true, Changed: true };
210
+ const NOT_SAVED = { Saved: false, Changed: false };
211
+ /**
212
+ * Lists and edits the From addresses a Company may send mail as: Mailbox rows (one address) and
213
+ * Domain rows (any address at that domain). One Mailbox may be the company's default sender.
214
+ *
215
+ * Every user-facing error names the address it is about, and every failure lands in `Error`
216
+ * (rendered in the template), never only in the console.
217
+ */
218
+ export class CompanySenderIdentitiesComponent {
219
+ cdr = inject(ChangeDetectorRef);
220
+ confirm = inject(MJConfirmService);
221
+ _companyID = null;
222
+ initialized = false;
223
+ /**
224
+ * The host form reuses this component when it moves to another Company, so a new value resets
225
+ * the previous company's rows, messages and add-form draft and reloads.
226
+ */
227
+ set CompanyID(value) {
228
+ if (sameCompany(value, this._companyID))
229
+ return;
230
+ this._companyID = value;
231
+ if (!this.initialized)
232
+ return;
233
+ this.resetForCompany();
234
+ void this.loadAll();
235
+ }
236
+ get CompanyID() {
237
+ return this._companyID;
238
+ }
239
+ EditMode = true;
240
+ Provider;
241
+ DataChanged = new EventEmitter();
242
+ Rows = [];
243
+ Loading = false;
244
+ Saving = false;
245
+ Error = null;
246
+ /** One-line confirmation after an add (the verification reminder). */
247
+ Notice = null;
248
+ ShowAddForm = false;
249
+ NewKind = 'Mailbox';
250
+ NewAddress = '';
251
+ NewDisplayName = '';
252
+ /** The provider actually used: the one passed in, or the ambient one. */
253
+ get ProviderToUse() {
254
+ return this.Provider ?? Metadata.Provider;
255
+ }
256
+ async ngOnInit() {
257
+ this.initialized = true;
258
+ await this.loadAll();
259
+ }
260
+ /** Set default is offered only on a Mailbox row that is not already the default. */
261
+ canSetDefault(row) {
262
+ return row.Kind === 'Mailbox' && !row.IsDefault;
263
+ }
264
+ /**
265
+ * Reload the company's rows (one RunView). A load that finishes after the input moved to
266
+ * another company is dropped, so a slow answer for the old company never overwrites the new one.
267
+ */
268
+ async loadAll() {
269
+ const companyId = this.CompanyID;
270
+ this.Loading = true;
271
+ this.Error = null;
272
+ this.cdr.detectChanges();
273
+ try {
274
+ const rows = await this.queryRows(companyId);
275
+ if (sameCompany(companyId, this.CompanyID))
276
+ this.Rows = rows;
277
+ }
278
+ catch (err) {
279
+ if (!sameCompany(companyId, this.CompanyID))
280
+ return;
281
+ this.Error = `Could not load email senders for company ${companyId}: ${err instanceof Error ? err.message : String(err)}`;
282
+ console.error('[CompanySenderIdentities]', this.Error, err);
283
+ }
284
+ finally {
285
+ if (sameCompany(companyId, this.CompanyID)) {
286
+ this.Loading = false;
287
+ this.cdr.detectChanges();
288
+ }
289
+ }
290
+ }
291
+ /** Add a Mailbox or Domain row. Refuses a malformed address before anything is saved. */
292
+ async addRow(kind, address, displayName) {
293
+ const normalized = NormalizeSenderIdentity(kind, address, displayName);
294
+ // The unique index on (CompanyID, Address) is the real guard; this check only spares the
295
+ // operator the server's raw SQL error text for the common case of re-adding a listed address.
296
+ const problems = this.Rows.some((r) => r.Address === normalized.address)
297
+ ? [...normalized.errors, `"${normalized.address}" is already in this company's senders`]
298
+ : normalized.errors;
299
+ if (problems.length > 0) {
300
+ this.Error = problems.join('; ');
301
+ this.Notice = null;
302
+ this.cdr.detectChanges();
303
+ return false;
304
+ }
305
+ return this.runMutation(`adding "${normalized.address}"`, async () => {
306
+ const p = this.ProviderToUse;
307
+ const entity = await p.GetEntityObject(ENTITY_NAME, p.CurrentUser);
308
+ entity.CompanyID = this.requireCompanyID();
309
+ entity.Kind = kind;
310
+ entity.Address = normalized.address;
311
+ entity.DisplayName = normalized.displayName;
312
+ entity.IsDefault = false;
313
+ if (!(await entity.Save())) {
314
+ this.Error = failureText(`Could not add "${normalized.address}"`, entity);
315
+ return NOT_SAVED;
316
+ }
317
+ this.resetAddForm();
318
+ this.Notice = SENDER_VERIFICATION_REMINDER;
319
+ return SAVED;
320
+ });
321
+ }
322
+ /**
323
+ * Make `row` the company's default Mailbox. The current default is demoted first and saved,
324
+ * then `row` is promoted: the database allows one default per company, so the order matters.
325
+ */
326
+ async setDefault(row) {
327
+ if (!this.canSetDefault(row)) {
328
+ return false;
329
+ }
330
+ return this.runMutation(`making "${row.Address}" the default`, async () => {
331
+ const current = this.Rows.find((r) => r.IsDefault && !UUIDsEqual(r.ID, row.ID));
332
+ if (current && !(await this.saveIsDefault(current, false))) {
333
+ this.Error = failureText(`Could not remove the default from "${current.Address}"`, current);
334
+ return NOT_SAVED;
335
+ }
336
+ if (!(await this.saveIsDefault(row, true))) {
337
+ const lost = current ? `; "${current.Address}" is no longer the default` : '';
338
+ this.Error = failureText(`Could not make "${row.Address}" the default`, row) + lost;
339
+ // The demote already committed, so the list is re-read and the host told.
340
+ return { Saved: false, Changed: current !== undefined };
341
+ }
342
+ return SAVED;
343
+ });
344
+ }
345
+ /** Delete `row` after the user confirms. */
346
+ async removeRow(row) {
347
+ const confirmed = await this.confirm.ConfirmDelete({
348
+ title: 'Remove sender',
349
+ message: `Remove "${row.Address}" from this company's email senders?`,
350
+ confirmText: 'Remove',
351
+ });
352
+ if (!confirmed) {
353
+ return false;
354
+ }
355
+ return this.runMutation(`removing "${row.Address}"`, async () => {
356
+ const address = row.Address;
357
+ if (!(await row.Delete())) {
358
+ this.Error = failureText(`Could not remove "${address}"`, row);
359
+ return NOT_SAVED;
360
+ }
361
+ // Drop it now: BaseEntity resets a deleted object's fields, and a row still in the list
362
+ // until the reload lands would re-render with changed values (NG0100 in dev mode).
363
+ this.Rows = this.Rows.filter((r) => !UUIDsEqual(r.ID, row.ID));
364
+ return SAVED;
365
+ });
366
+ }
367
+ /** Template handler for the add form's Add button. */
368
+ async onAdd() {
369
+ const displayName = this.NewKind === 'Mailbox' ? this.NewDisplayName : null;
370
+ await this.addRow(this.NewKind, this.NewAddress, displayName);
371
+ }
372
+ openAddForm(kind) {
373
+ this.resetAddForm();
374
+ this.NewKind = kind;
375
+ this.ShowAddForm = true;
376
+ this.Notice = null;
377
+ this.cdr.detectChanges();
378
+ }
379
+ /** Close the add form. Its validation error goes with it, so a stale message never lingers. */
380
+ cancelAdd() {
381
+ this.resetAddForm();
382
+ this.Error = null;
383
+ this.cdr.detectChanges();
384
+ }
385
+ /**
386
+ * Shared wrapper for every write: one write at a time, a fresh error/notice, and a reload plus
387
+ * DataChanged whenever the database changed (even when the write as a whole did not succeed).
388
+ * `work` sets `Error` itself on an expected failure; an unexpected throw is reported with
389
+ * `context` (which names the address).
390
+ */
391
+ async runMutation(context, work) {
392
+ if (this.Saving) {
393
+ return false;
394
+ }
395
+ this.Saving = true;
396
+ this.Error = null;
397
+ this.Notice = null;
398
+ this.cdr.detectChanges();
399
+ try {
400
+ const outcome = await work();
401
+ if (outcome.Changed) {
402
+ await this.reloadAfterWrite(context);
403
+ this.DataChanged.emit();
404
+ }
405
+ return outcome.Saved;
406
+ }
407
+ catch (err) {
408
+ this.Error = `Failed while ${context}: ${err instanceof Error ? err.message : String(err)}`;
409
+ console.error('[CompanySenderIdentities]', this.Error, err);
410
+ return false;
411
+ }
412
+ finally {
413
+ this.Saving = false;
414
+ this.cdr.detectChanges();
415
+ }
416
+ }
417
+ /** The write already succeeded, so a failed reload is reported as such rather than as a failed write. */
418
+ async reloadAfterWrite(context) {
419
+ const companyId = this.CompanyID;
420
+ try {
421
+ const rows = await this.queryRows(companyId);
422
+ if (sameCompany(companyId, this.CompanyID))
423
+ this.Rows = rows;
424
+ }
425
+ catch (err) {
426
+ this.Error = `Saved while ${context}, but the list could not be reloaded: ${err instanceof Error ? err.message : String(err)}`;
427
+ console.error('[CompanySenderIdentities]', this.Error, err);
428
+ }
429
+ }
430
+ /** The company's rows. Throws (with context) when the RunView fails, so callers report it. */
431
+ async queryRows(companyId) {
432
+ if (!companyId)
433
+ return [];
434
+ const p = this.ProviderToUse;
435
+ const result = await RunView.FromMetadataProvider(p).RunView({
436
+ EntityName: ENTITY_NAME,
437
+ ExtraFilter: `CompanyID = '${EscapeSQLString(companyId)}'`,
438
+ OrderBy: 'Address ASC',
439
+ ResultType: 'entity_object',
440
+ // BypassCache also keeps this read out of the client's RunView coalescer, which
441
+ // merges concurrent RunViews from every component on the page into one batch and
442
+ // rejects ALL callers if any one query fails. On MJ 6.1.x the Company form's own
443
+ // overview panel queries the unprefixed 'Employees' entity (fixed in 6.2.0-edge.3),
444
+ // so a coalesced load here always failed with "Entity Employees not found".
445
+ // The list is a handful of rows, so skipping the cache costs nothing.
446
+ BypassCache: true,
447
+ }, p.CurrentUser);
448
+ if (!result.Success) {
449
+ throw new Error(result.ErrorMessage || 'RunView returned no error message');
450
+ }
451
+ return result.Results ?? [];
452
+ }
453
+ /** Sets IsDefault and saves; on failure restores the local value so the list matches the database. */
454
+ async saveIsDefault(row, value) {
455
+ row.IsDefault = value;
456
+ const saved = await row.Save();
457
+ if (!saved) {
458
+ row.IsDefault = !value;
459
+ }
460
+ return saved;
461
+ }
462
+ requireCompanyID() {
463
+ if (!this.CompanyID) {
464
+ throw new Error('no CompanyID is set on the widget');
465
+ }
466
+ return this.CompanyID;
467
+ }
468
+ /** Forget everything that belonged to the previous company. */
469
+ resetForCompany() {
470
+ this.Rows = [];
471
+ this.Error = null;
472
+ this.Notice = null;
473
+ this.resetAddForm();
474
+ }
475
+ resetAddForm() {
476
+ this.ShowAddForm = false;
477
+ this.NewKind = 'Mailbox';
478
+ this.NewAddress = '';
479
+ this.NewDisplayName = '';
480
+ }
481
+ static ɵfac = function CompanySenderIdentitiesComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || CompanySenderIdentitiesComponent)(); };
482
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: CompanySenderIdentitiesComponent, selectors: [["bizapps-company-sender-identities"]], inputs: { CompanyID: "CompanyID", EditMode: "EditMode", Provider: "Provider" }, outputs: { DataChanged: "DataChanged" }, decls: 5, vars: 3, consts: [[1, "csi-container"], ["role", "alert", 1, "csi-alert", "csi-alert-error"], ["role", "status", 1, "csi-alert", "csi-alert-info"], [1, "csi-loading"], [1, "fa-solid", "fa-circle-exclamation"], [1, "fa-solid", "fa-circle-info"], ["text", "Loading email senders..."], [1, "csi-empty"], [1, "csi-list"], [1, "csi-row"], [1, "csi-kind-icon", "fa-solid", 3, "title"], [1, "csi-text"], [1, "csi-address"], [1, "csi-display-name"], [1, "csi-default-badge"], [1, "csi-row-actions"], ["mjButton", "", "size", "sm", "variant", "flat", 3, "disabled"], ["mjButton", "", "size", "sm", "variant", "flat", 3, "click", "disabled"], [1, "fa-solid", "fa-trash"], [1, "fa-solid", "fa-star"], [1, "csi-add-card"], [1, "csi-add-buttons"], ["role", "group", "aria-label", "Sender kind", 1, "csi-kind-toggle"], ["mjButton", "", "size", "sm", 3, "click", "variant", "disabled"], [1, "fa-solid", "fa-envelope"], [1, "fa-solid", "fa-globe"], ["type", "text", "aria-label", "Address", 1, "csi-input", 3, "ngModelChange", "ngModel", "disabled", "placeholder"], ["type", "text", "placeholder", "Display name (optional)", "aria-label", "Display name", 1, "csi-input", 3, "ngModel", "disabled"], [1, "csi-add-actions"], ["mjButton", "", "size", "sm", "variant", "primary", 3, "click", "disabled"], [1, "fa-solid", "fa-check"], ["mjButton", "", "size", "sm", "variant", "secondary", 3, "click", "disabled"], ["type", "text", "placeholder", "Display name (optional)", "aria-label", "Display name", 1, "csi-input", 3, "ngModelChange", "ngModel", "disabled"], [1, "fa-solid", "fa-plus"]], template: function CompanySenderIdentitiesComponent_Template(rf, ctx) { if (rf & 1) {
483
+ i0.ɵɵelementStart(0, "div", 0);
484
+ i0.ɵɵconditionalCreate(1, CompanySenderIdentitiesComponent_Conditional_1_Template, 4, 1, "div", 1);
485
+ i0.ɵɵconditionalCreate(2, CompanySenderIdentitiesComponent_Conditional_2_Template, 4, 1, "div", 2);
486
+ i0.ɵɵconditionalCreate(3, CompanySenderIdentitiesComponent_Conditional_3_Template, 2, 0, "div", 3)(4, CompanySenderIdentitiesComponent_Conditional_4_Template, 3, 2);
487
+ i0.ɵɵelementEnd();
488
+ } if (rf & 2) {
489
+ i0.ɵɵadvance();
490
+ i0.ɵɵconditional(ctx.Error ? 1 : -1);
491
+ i0.ɵɵadvance();
492
+ i0.ɵɵconditional(ctx.Notice ? 2 : -1);
493
+ i0.ɵɵadvance();
494
+ i0.ɵɵconditional(ctx.Loading ? 3 : 4);
495
+ } }, dependencies: [FormsModule, i1.DefaultValueAccessor, i1.NgControlStatus, i1.NgModel, MJButtonDirective, SharedGenericModule, i2.LoadingComponent], styles: ["[_nghost-%COMP%] {\n display: block;\n width: 100%;\n}\n\n.csi-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 12px 0;\n}\n\n.csi-alert[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n padding: 8px 12px;\n border-radius: 6px;\n font-size: 13px;\n}\n\n.csi-alert-error[_ngcontent-%COMP%] {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error-text);\n border: 1px solid var(--mj-status-error);\n}\n\n.csi-alert-info[_ngcontent-%COMP%] {\n background: var(--mj-status-info-bg);\n color: var(--mj-text-primary);\n border: 1px solid var(--mj-status-info);\n}\n\n.csi-loading[_ngcontent-%COMP%] {\n height: 80px;\n}\n\n.csi-empty[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-secondary);\n}\n\n.csi-list[_ngcontent-%COMP%] {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.csi-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 8px 12px;\n border: 1px solid var(--mj-border-subtle);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n}\n\n.csi-kind-icon[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n width: 16px;\n text-align: center;\n}\n\n.csi-text[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-width: 0;\n}\n\n.csi-address[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-primary);\n overflow-wrap: anywhere;\n}\n\n.csi-display-name[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n.csi-default-badge[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n padding: 2px 8px;\n border-radius: 6px;\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success-text);\n border: 1px solid var(--mj-status-success);\n}\n\n.csi-row-actions[_ngcontent-%COMP%], \n.csi-add-buttons[_ngcontent-%COMP%], \n.csi-add-actions[_ngcontent-%COMP%], \n.csi-kind-toggle[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n}\n\n.csi-add-card[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n padding: 12px 14px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface-sunken);\n}\n\n.csi-input[_ngcontent-%COMP%] {\n padding: 6px 10px;\n font-size: 13px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n}\n\n.csi-input[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n}"] });
496
+ }
497
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CompanySenderIdentitiesComponent, [{
498
+ type: Component,
499
+ args: [{ selector: 'bizapps-company-sender-identities', standalone: true, imports: [FormsModule, MJButtonDirective, SharedGenericModule], template: "<div class=\"csi-container\">\n @if (Error) {\n <div class=\"csi-alert csi-alert-error\" role=\"alert\">\n <i class=\"fa-solid fa-circle-exclamation\"></i>\n <span>{{ Error }}</span>\n </div>\n }\n @if (Notice) {\n <div class=\"csi-alert csi-alert-info\" role=\"status\">\n <i class=\"fa-solid fa-circle-info\"></i>\n <span>{{ Notice }}</span>\n </div>\n }\n\n @if (Loading) {\n <div class=\"csi-loading\">\n <mj-loading text=\"Loading email senders...\"></mj-loading>\n </div>\n } @else {\n @if (Rows.length === 0) {\n <div class=\"csi-empty\">No email senders yet.</div>\n } @else {\n <ul class=\"csi-list\">\n @for (row of Rows; track row.ID) {\n <li class=\"csi-row\">\n <i class=\"csi-kind-icon fa-solid\"\n [class.fa-envelope]=\"row.Kind === 'Mailbox'\"\n [class.fa-globe]=\"row.Kind === 'Domain'\"\n [title]=\"row.Kind\"></i>\n <div class=\"csi-text\">\n <span class=\"csi-address\">{{ row.Address }}</span>\n @if (row.DisplayName) {\n <span class=\"csi-display-name\">{{ row.DisplayName }}</span>\n }\n </div>\n @if (row.IsDefault) {\n <span class=\"csi-default-badge\">Default</span>\n }\n @if (EditMode) {\n <div class=\"csi-row-actions\">\n @if (canSetDefault(row)) {\n <button mjButton size=\"sm\" variant=\"flat\" [disabled]=\"Saving\" (click)=\"setDefault(row)\">\n <i class=\"fa-solid fa-star\"></i> Set default\n </button>\n }\n <button mjButton size=\"sm\" variant=\"flat\" [disabled]=\"Saving\" (click)=\"removeRow(row)\">\n <i class=\"fa-solid fa-trash\"></i> Remove\n </button>\n </div>\n }\n </li>\n }\n </ul>\n }\n\n @if (EditMode) {\n @if (ShowAddForm) {\n <div class=\"csi-add-card\">\n <div class=\"csi-kind-toggle\" role=\"group\" aria-label=\"Sender kind\">\n <button mjButton size=\"sm\" [variant]=\"NewKind === 'Mailbox' ? 'primary' : 'secondary'\"\n [disabled]=\"Saving\" (click)=\"NewKind = 'Mailbox'\">\n <i class=\"fa-solid fa-envelope\"></i> Mailbox\n </button>\n <button mjButton size=\"sm\" [variant]=\"NewKind === 'Domain' ? 'primary' : 'secondary'\"\n [disabled]=\"Saving\" (click)=\"NewKind = 'Domain'\">\n <i class=\"fa-solid fa-globe\"></i> Domain\n </button>\n </div>\n <input class=\"csi-input\" type=\"text\" [(ngModel)]=\"NewAddress\" [disabled]=\"Saving\"\n [placeholder]=\"NewKind === 'Mailbox' ? 'name@example.com' : 'example.com'\"\n aria-label=\"Address\">\n @if (NewKind === 'Mailbox') {\n <input class=\"csi-input\" type=\"text\" [(ngModel)]=\"NewDisplayName\" [disabled]=\"Saving\"\n placeholder=\"Display name (optional)\" aria-label=\"Display name\">\n }\n <div class=\"csi-add-actions\">\n <button mjButton size=\"sm\" variant=\"primary\" [disabled]=\"Saving || !NewAddress.trim()\" (click)=\"onAdd()\">\n <i class=\"fa-solid fa-check\"></i> Add\n </button>\n <button mjButton size=\"sm\" variant=\"secondary\" [disabled]=\"Saving\" (click)=\"cancelAdd()\">\n Cancel\n </button>\n </div>\n </div>\n } @else {\n <div class=\"csi-add-buttons\">\n <button mjButton size=\"sm\" variant=\"secondary\" [disabled]=\"Saving\" (click)=\"openAddForm('Mailbox')\">\n <i class=\"fa-solid fa-plus\"></i> Add mailbox\n </button>\n <button mjButton size=\"sm\" variant=\"secondary\" [disabled]=\"Saving\" (click)=\"openAddForm('Domain')\">\n <i class=\"fa-solid fa-plus\"></i> Add domain\n </button>\n </div>\n }\n }\n }\n</div>\n", styles: [":host {\n display: block;\n width: 100%;\n}\n\n.csi-container {\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 12px 0;\n}\n\n.csi-alert {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n padding: 8px 12px;\n border-radius: 6px;\n font-size: 13px;\n}\n\n.csi-alert-error {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error-text);\n border: 1px solid var(--mj-status-error);\n}\n\n.csi-alert-info {\n background: var(--mj-status-info-bg);\n color: var(--mj-text-primary);\n border: 1px solid var(--mj-status-info);\n}\n\n.csi-loading {\n height: 80px;\n}\n\n.csi-empty {\n font-size: 13px;\n color: var(--mj-text-secondary);\n}\n\n.csi-list {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.csi-row {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 8px 12px;\n border: 1px solid var(--mj-border-subtle);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n}\n\n.csi-kind-icon {\n color: var(--mj-text-secondary);\n width: 16px;\n text-align: center;\n}\n\n.csi-text {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-width: 0;\n}\n\n.csi-address {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-primary);\n overflow-wrap: anywhere;\n}\n\n.csi-display-name {\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n.csi-default-badge {\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n padding: 2px 8px;\n border-radius: 6px;\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success-text);\n border: 1px solid var(--mj-status-success);\n}\n\n.csi-row-actions,\n.csi-add-buttons,\n.csi-add-actions,\n.csi-kind-toggle {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n}\n\n.csi-add-card {\n display: flex;\n flex-direction: column;\n gap: 8px;\n padding: 12px 14px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface-sunken);\n}\n\n.csi-input {\n padding: 6px 10px;\n font-size: 13px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n}\n\n.csi-input:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n}\n"] }]
500
+ }], null, { CompanyID: [{
501
+ type: Input
502
+ }], EditMode: [{
503
+ type: Input
504
+ }], Provider: [{
505
+ type: Input
506
+ }], DataChanged: [{
507
+ type: Output
508
+ }] }); })();
509
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CompanySenderIdentitiesComponent, { className: "CompanySenderIdentitiesComponent", filePath: "lib/components/company-sender-identities/company-sender-identities.component.ts", lineNumber: 51 }); })();
510
+ /** `prefix` names the address; the entity's own message is appended when it has one. */
511
+ function failureText(prefix, entity) {
512
+ const detail = entity.LatestResult?.CompleteMessage || entity.LatestResult?.Message;
513
+ return detail ? `${prefix}: ${detail}` : prefix;
514
+ }
515
+ /** Company IDs compare with UUIDsEqual (SQL Server and PostgreSQL differ in case); null only equals null. */
516
+ function sameCompany(a, b) {
517
+ return a !== null && b !== null ? UUIDsEqual(a, b) : a === b;
518
+ }
519
+ //# sourceMappingURL=company-sender-identities.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"company-sender-identities.component.js","sourceRoot":"","sources":["../../../../src/lib/components/company-sender-identities/company-sender-identities.component.ts","../../../../src/lib/components/company-sender-identities/company-sender-identities.component.html"],"names":[],"mappings":"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"}