@mj-biz-apps/common-ng 5.57.0 → 5.58.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/components/company-sender-identities/__tests__/company-sender-identities.component.test.d.ts +2 -0
- package/dist/lib/components/company-sender-identities/__tests__/company-sender-identities.component.test.d.ts.map +1 -0
- package/dist/lib/components/company-sender-identities/__tests__/company-sender-identities.component.test.js +296 -0
- package/dist/lib/components/company-sender-identities/__tests__/company-sender-identities.component.test.js.map +1 -0
- package/dist/lib/components/company-sender-identities/company-sender-identities.component.d.ts +82 -0
- package/dist/lib/components/company-sender-identities/company-sender-identities.component.d.ts.map +1 -0
- package/dist/lib/components/company-sender-identities/company-sender-identities.component.js +519 -0
- package/dist/lib/components/company-sender-identities/company-sender-identities.component.js.map +1 -0
- package/dist/lib/components/party-field/__tests__/party-field.component.test.js +112 -1
- package/dist/lib/components/party-field/__tests__/party-field.component.test.js.map +1 -1
- package/dist/lib/components/party-field/party-field.component.d.ts +26 -4
- package/dist/lib/components/party-field/party-field.component.d.ts.map +1 -1
- package/dist/lib/components/party-field/party-field.component.js +73 -15
- package/dist/lib/components/party-field/party-field.component.js.map +1 -1
- package/dist/lib/components/relationship-list/__tests__/relationship-list-party-picker.test.d.ts +2 -0
- package/dist/lib/components/relationship-list/__tests__/relationship-list-party-picker.test.d.ts.map +1 -0
- package/dist/lib/components/relationship-list/__tests__/relationship-list-party-picker.test.js +37 -0
- package/dist/lib/components/relationship-list/__tests__/relationship-list-party-picker.test.js.map +1 -0
- package/dist/lib/components/relationship-list/relationship-list.component.d.ts +1 -0
- package/dist/lib/components/relationship-list/relationship-list.component.d.ts.map +1 -1
- package/dist/lib/components/relationship-list/relationship-list.component.js +22 -11
- package/dist/lib/components/relationship-list/relationship-list.component.js.map +1 -1
- package/dist/lib/custom/custom-forms.module.d.ts +25 -23
- package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
- package/dist/lib/custom/custom-forms.module.js +11 -1
- package/dist/lib/custom/custom-forms.module.js.map +1 -1
- package/dist/lib/custom/panels/__tests__/company-sender-identities.panel.test.d.ts +3 -0
- package/dist/lib/custom/panels/__tests__/company-sender-identities.panel.test.d.ts.map +1 -0
- package/dist/lib/custom/panels/__tests__/company-sender-identities.panel.test.js +46 -0
- package/dist/lib/custom/panels/__tests__/company-sender-identities.panel.test.js.map +1 -0
- package/dist/lib/custom/panels/company-sender-identities.panel.d.ts +18 -0
- package/dist/lib/custom/panels/company-sender-identities.panel.d.ts.map +1 -0
- package/dist/lib/custom/panels/company-sender-identities.panel.js +63 -0
- package/dist/lib/custom/panels/company-sender-identities.panel.js.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonCompanySenderIdentity/mjbizappscommoncompanysenderidentity.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonCompanySenderIdentity/mjbizappscommoncompanysenderidentity.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonCompanySenderIdentity/mjbizappscommoncompanysenderidentity.form.component.js +71 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonCompanySenderIdentity/mjbizappscommoncompanysenderidentity.form.component.js.map +1 -0
- package/dist/lib/generated/generated-forms.module.d.ts +38 -37
- package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
- package/dist/lib/generated/generated-forms.module.js +3 -0
- package/dist/lib/generated/generated-forms.module.js.map +1 -1
- package/dist/public-api.d.ts +3 -1
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +2 -0
- package/dist/public-api.js.map +1 -1
- package/package.json +4 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"company-sender-identities.component.test.d.ts","sourceRoot":"","sources":["../../../../../src/lib/components/company-sender-identities/__tests__/company-sender-identities.component.test.ts"],"names":[],"mappings":"AAAA,OAAO,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
import '@angular/compiler';
|
|
2
|
+
import { ChangeDetectorRef, Injector, runInInjectionContext } from '@angular/core';
|
|
3
|
+
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
|
4
|
+
import { MJConfirmService } from '@memberjunction/ng-ui-components';
|
|
5
|
+
const H = vi.hoisted(() => ({
|
|
6
|
+
runView: vi.fn(),
|
|
7
|
+
}));
|
|
8
|
+
vi.mock('@memberjunction/core', async (importOriginal) => {
|
|
9
|
+
const actual = await importOriginal();
|
|
10
|
+
return {
|
|
11
|
+
...actual,
|
|
12
|
+
RunView: { FromMetadataProvider: () => ({ RunView: H.runView }) },
|
|
13
|
+
};
|
|
14
|
+
});
|
|
15
|
+
import { CompanySenderIdentitiesComponent } from '../company-sender-identities.component';
|
|
16
|
+
function row(id, address, isDefault, kind = 'Mailbox') {
|
|
17
|
+
return {
|
|
18
|
+
ID: id,
|
|
19
|
+
CompanyID: 'co-1',
|
|
20
|
+
Kind: kind,
|
|
21
|
+
Address: address,
|
|
22
|
+
DisplayName: null,
|
|
23
|
+
IsDefault: isDefault,
|
|
24
|
+
LatestResult: null,
|
|
25
|
+
Save: vi.fn(async () => true),
|
|
26
|
+
Delete: vi.fn(async () => true),
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
function asEntity(r) {
|
|
30
|
+
return r;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* `inject()` needs an injection context; a small injector gives it one without TestBed.
|
|
34
|
+
* These are unit tests of the load/add/default/remove logic, not of rendering.
|
|
35
|
+
*/
|
|
36
|
+
function build(rows, newRow) {
|
|
37
|
+
H.runView.mockResolvedValue({ Success: true, Results: rows });
|
|
38
|
+
const getEntityObject = vi.fn(async () => newRow);
|
|
39
|
+
const confirmDelete = vi.fn(async () => true);
|
|
40
|
+
const injector = Injector.create({
|
|
41
|
+
providers: [
|
|
42
|
+
{ provide: ChangeDetectorRef, useValue: { detectChanges: () => undefined } },
|
|
43
|
+
{ provide: MJConfirmService, useValue: { ConfirmDelete: confirmDelete } },
|
|
44
|
+
],
|
|
45
|
+
});
|
|
46
|
+
const component = runInInjectionContext(injector, () => new CompanySenderIdentitiesComponent());
|
|
47
|
+
component.CompanyID = 'co-1';
|
|
48
|
+
component.Provider = { CurrentUser: { ID: 'u1' }, GetEntityObject: getEntityObject };
|
|
49
|
+
return { component, getEntityObject, confirmDelete };
|
|
50
|
+
}
|
|
51
|
+
describe('CompanySenderIdentitiesComponent', () => {
|
|
52
|
+
beforeEach(() => {
|
|
53
|
+
H.runView.mockReset();
|
|
54
|
+
});
|
|
55
|
+
it('loadAll runs one RunView filtered by CompanyID and exposes the rows', async () => {
|
|
56
|
+
const rows = [row('r1', 'hr@acme.com', true), row('r2', 'acme.com', false, 'Domain')];
|
|
57
|
+
const { component } = build(rows);
|
|
58
|
+
await component.loadAll();
|
|
59
|
+
expect(H.runView).toHaveBeenCalledTimes(1);
|
|
60
|
+
const params = H.runView.mock.calls[0][0];
|
|
61
|
+
expect(params.EntityName).toBe('MJ_BizApps_Common: Company Sender Identities');
|
|
62
|
+
expect(params.ExtraFilter).toContain("CompanyID = 'co-1'");
|
|
63
|
+
// Keeps the read out of the client coalescer, where another component's failing query rejects it.
|
|
64
|
+
expect(params.BypassCache).toBe(true);
|
|
65
|
+
expect(params.OrderBy).toContain('Address');
|
|
66
|
+
expect(component.Rows.map((r) => r.ID)).toEqual(['r1', 'r2']);
|
|
67
|
+
expect(component.Loading).toBe(false);
|
|
68
|
+
expect(component.Error).toBeNull();
|
|
69
|
+
});
|
|
70
|
+
it('loadAll escapes the company ID in the filter', async () => {
|
|
71
|
+
const { component } = build([]);
|
|
72
|
+
component.CompanyID = "co-1' OR 1=1 --";
|
|
73
|
+
await component.loadAll();
|
|
74
|
+
const params = H.runView.mock.calls[0][0];
|
|
75
|
+
expect(params.ExtraFilter).toBe("CompanyID = 'co-1'' OR 1=1 --'");
|
|
76
|
+
});
|
|
77
|
+
it('addRow refuses a malformed address before any save and shows the error', async () => {
|
|
78
|
+
const { component, getEntityObject } = build([]);
|
|
79
|
+
const added = await component.addRow('Mailbox', 'not-an-address', null);
|
|
80
|
+
expect(added).toBe(false);
|
|
81
|
+
expect(getEntityObject).not.toHaveBeenCalled();
|
|
82
|
+
expect(component.Error).toContain('not-an-address');
|
|
83
|
+
});
|
|
84
|
+
it('addRow refuses an address already listed, in any case, before any save', async () => {
|
|
85
|
+
const { component, getEntityObject } = build([row('r1', 'hr@acme.com', false)]);
|
|
86
|
+
await component.loadAll();
|
|
87
|
+
const added = await component.addRow('Mailbox', ' HR@ACME.com ', null);
|
|
88
|
+
expect(added).toBe(false);
|
|
89
|
+
expect(getEntityObject).not.toHaveBeenCalled();
|
|
90
|
+
expect(component.Error).toContain('"hr@acme.com" is already in this company\'s senders');
|
|
91
|
+
});
|
|
92
|
+
it('cancelAdd closes the form and clears its validation error', async () => {
|
|
93
|
+
const { component } = build([]);
|
|
94
|
+
component.openAddForm('Mailbox');
|
|
95
|
+
await component.addRow('Mailbox', 'not-an-address', null);
|
|
96
|
+
expect(component.Error).not.toBeNull();
|
|
97
|
+
component.cancelAdd();
|
|
98
|
+
expect(component.ShowAddForm).toBe(false);
|
|
99
|
+
expect(component.Error).toBeNull();
|
|
100
|
+
});
|
|
101
|
+
it('addRow saves a valid sender, shows the verification reminder and emits DataChanged', async () => {
|
|
102
|
+
const created = row('new', '', false);
|
|
103
|
+
const { component } = build([], created);
|
|
104
|
+
const emitted = vi.fn();
|
|
105
|
+
component.DataChanged.subscribe(emitted);
|
|
106
|
+
const added = await component.addRow('Mailbox', ' HR@Acme.com ', 'Acme HR');
|
|
107
|
+
expect(added).toBe(true);
|
|
108
|
+
expect(created.Kind).toBe('Mailbox');
|
|
109
|
+
expect(created.Address).toBe('hr@acme.com');
|
|
110
|
+
expect(created.DisplayName).toBe('Acme HR');
|
|
111
|
+
expect(created.CompanyID).toBe('co-1');
|
|
112
|
+
expect(created.Save).toHaveBeenCalledTimes(1);
|
|
113
|
+
expect(component.Notice).toBe('Make sure this sender is verified in your mail provider before using it.');
|
|
114
|
+
expect(emitted).toHaveBeenCalledTimes(1);
|
|
115
|
+
});
|
|
116
|
+
it('addRow reports a saved row whose list reload failed, and still emits DataChanged', async () => {
|
|
117
|
+
const created = row('new', '', false);
|
|
118
|
+
const { component } = build([], created);
|
|
119
|
+
H.runView.mockResolvedValue({ Success: false, ErrorMessage: 'connection reset', Results: [] });
|
|
120
|
+
const emitted = vi.fn();
|
|
121
|
+
component.DataChanged.subscribe(emitted);
|
|
122
|
+
const errorLog = vi.spyOn(console, 'error').mockImplementation(() => undefined);
|
|
123
|
+
const added = await component.addRow('Mailbox', 'hr@acme.com', null);
|
|
124
|
+
expect(added).toBe(true);
|
|
125
|
+
expect(created.Save).toHaveBeenCalledTimes(1);
|
|
126
|
+
expect(component.Error).toContain('Saved');
|
|
127
|
+
expect(component.Error).toContain('hr@acme.com');
|
|
128
|
+
expect(component.Error).toContain('could not be reloaded');
|
|
129
|
+
expect(emitted).toHaveBeenCalledTimes(1);
|
|
130
|
+
expect(errorLog).toHaveBeenCalledWith('[CompanySenderIdentities]', component.Error, expect.any(Error));
|
|
131
|
+
errorLog.mockRestore();
|
|
132
|
+
});
|
|
133
|
+
it('addRow reports a failed save with the address', async () => {
|
|
134
|
+
const created = row('new', '', false);
|
|
135
|
+
created.Save.mockResolvedValue(false);
|
|
136
|
+
created.LatestResult = { Message: 'duplicate key', CompleteMessage: 'duplicate key' };
|
|
137
|
+
const { component } = build([], created);
|
|
138
|
+
const added = await component.addRow('Mailbox', 'hr@acme.com', null);
|
|
139
|
+
expect(added).toBe(false);
|
|
140
|
+
expect(component.Error).toContain('hr@acme.com');
|
|
141
|
+
expect(component.Error).toContain('duplicate key');
|
|
142
|
+
expect(component.Notice).toBeNull();
|
|
143
|
+
});
|
|
144
|
+
it('setDefault demotes the current default before promoting the chosen row', async () => {
|
|
145
|
+
const current = row('r1', 'old@acme.com', true);
|
|
146
|
+
const chosen = row('r2', 'new@acme.com', false);
|
|
147
|
+
const saves = [];
|
|
148
|
+
current.Save.mockImplementation(async () => {
|
|
149
|
+
saves.push(`${current.Address}:${current.IsDefault}`);
|
|
150
|
+
return true;
|
|
151
|
+
});
|
|
152
|
+
chosen.Save.mockImplementation(async () => {
|
|
153
|
+
saves.push(`${chosen.Address}:${chosen.IsDefault}`);
|
|
154
|
+
return true;
|
|
155
|
+
});
|
|
156
|
+
const { component } = build([current, chosen]);
|
|
157
|
+
await component.loadAll();
|
|
158
|
+
const emitted = vi.fn();
|
|
159
|
+
component.DataChanged.subscribe(emitted);
|
|
160
|
+
const ok = await component.setDefault(asEntity(chosen));
|
|
161
|
+
expect(ok).toBe(true);
|
|
162
|
+
expect(saves).toEqual(['old@acme.com:false', 'new@acme.com:true']);
|
|
163
|
+
expect(emitted).toHaveBeenCalledTimes(1);
|
|
164
|
+
});
|
|
165
|
+
it('setDefault reports a failed demote with the address and stops', async () => {
|
|
166
|
+
const current = row('r1', 'old@acme.com', true);
|
|
167
|
+
current.Save.mockResolvedValue(false);
|
|
168
|
+
current.LatestResult = { Message: 'locked', CompleteMessage: 'locked' };
|
|
169
|
+
const chosen = row('r2', 'new@acme.com', false);
|
|
170
|
+
const { component } = build([current, chosen]);
|
|
171
|
+
await component.loadAll();
|
|
172
|
+
const ok = await component.setDefault(asEntity(chosen));
|
|
173
|
+
expect(ok).toBe(false);
|
|
174
|
+
expect(component.Error).toContain('old@acme.com');
|
|
175
|
+
expect(chosen.Save).not.toHaveBeenCalled();
|
|
176
|
+
expect(current.IsDefault).toBe(true);
|
|
177
|
+
});
|
|
178
|
+
it('setDefault reports a failed promote with the chosen address', async () => {
|
|
179
|
+
const current = row('r1', 'old@acme.com', true);
|
|
180
|
+
const chosen = row('r2', 'new@acme.com', false);
|
|
181
|
+
chosen.Save.mockResolvedValue(false);
|
|
182
|
+
chosen.LatestResult = { Message: 'boom', CompleteMessage: 'boom' };
|
|
183
|
+
const { component } = build([current, chosen]);
|
|
184
|
+
await component.loadAll();
|
|
185
|
+
const ok = await component.setDefault(asEntity(chosen));
|
|
186
|
+
expect(ok).toBe(false);
|
|
187
|
+
expect(component.Error).toContain('new@acme.com');
|
|
188
|
+
expect(chosen.IsDefault).toBe(false);
|
|
189
|
+
});
|
|
190
|
+
it('setDefault refuses a Domain row without saving', async () => {
|
|
191
|
+
const domain = row('r1', 'acme.com', false, 'Domain');
|
|
192
|
+
const { component } = build([domain]);
|
|
193
|
+
await component.loadAll();
|
|
194
|
+
expect(await component.setDefault(asEntity(domain))).toBe(false);
|
|
195
|
+
expect(domain.Save).not.toHaveBeenCalled();
|
|
196
|
+
});
|
|
197
|
+
it('removeRow deletes and emits DataChanged', async () => {
|
|
198
|
+
const target = row('r1', 'hr@acme.com', false);
|
|
199
|
+
const { component, confirmDelete } = build([target]);
|
|
200
|
+
await component.loadAll();
|
|
201
|
+
const emitted = vi.fn();
|
|
202
|
+
component.DataChanged.subscribe(emitted);
|
|
203
|
+
const removed = await component.removeRow(asEntity(target));
|
|
204
|
+
expect(removed).toBe(true);
|
|
205
|
+
expect(confirmDelete).toHaveBeenCalledTimes(1);
|
|
206
|
+
expect(target.Delete).toHaveBeenCalledTimes(1);
|
|
207
|
+
expect(emitted).toHaveBeenCalledTimes(1);
|
|
208
|
+
});
|
|
209
|
+
// BaseEntity resets a deleted object's fields, so a row left in the list until the reload
|
|
210
|
+
// finishes re-renders with a changed value (Angular NG0100 in dev mode).
|
|
211
|
+
it('removeRow drops the deleted row from the list even when the reload after it fails', async () => {
|
|
212
|
+
const keep = row('r1', 'keep@acme.com', false);
|
|
213
|
+
const target = row('r2', 'gone@acme.com', false);
|
|
214
|
+
const { component } = build([keep, target]);
|
|
215
|
+
await component.loadAll();
|
|
216
|
+
H.runView.mockRejectedValueOnce(new Error('connection reset'));
|
|
217
|
+
const errorLog = vi.spyOn(console, 'error').mockImplementation(() => undefined);
|
|
218
|
+
expect(await component.removeRow(asEntity(target))).toBe(true);
|
|
219
|
+
expect(component.Rows.map((r) => r.ID)).toEqual(['r1']);
|
|
220
|
+
errorLog.mockRestore();
|
|
221
|
+
});
|
|
222
|
+
it('removeRow does nothing when the user cancels the confirmation', async () => {
|
|
223
|
+
const target = row('r1', 'hr@acme.com', false);
|
|
224
|
+
const { component, confirmDelete } = build([target]);
|
|
225
|
+
confirmDelete.mockResolvedValue(false);
|
|
226
|
+
await component.loadAll();
|
|
227
|
+
expect(await component.removeRow(asEntity(target))).toBe(false);
|
|
228
|
+
expect(target.Delete).not.toHaveBeenCalled();
|
|
229
|
+
});
|
|
230
|
+
it('removeRow reports a failed delete with the address', async () => {
|
|
231
|
+
const target = row('r1', 'hr@acme.com', false);
|
|
232
|
+
target.Delete.mockResolvedValue(false);
|
|
233
|
+
target.LatestResult = { Message: 'in use', CompleteMessage: 'in use' };
|
|
234
|
+
const { component } = build([target]);
|
|
235
|
+
await component.loadAll();
|
|
236
|
+
expect(await component.removeRow(asEntity(target))).toBe(false);
|
|
237
|
+
expect(component.Error).toContain('hr@acme.com');
|
|
238
|
+
expect(component.Error).toContain('in use');
|
|
239
|
+
});
|
|
240
|
+
describe('switching to another company', () => {
|
|
241
|
+
// The host form reuses this component when it navigates from one Company to the next.
|
|
242
|
+
it('discards a slow load for the previous company that resolves after the switch', async () => {
|
|
243
|
+
const stale = { resolve: () => undefined };
|
|
244
|
+
const { component } = build([]);
|
|
245
|
+
H.runView.mockReturnValueOnce(new Promise((resolve) => (stale.resolve = resolve)));
|
|
246
|
+
const pendingFirst = component.ngOnInit(); // co-1's load stays pending
|
|
247
|
+
H.runView.mockResolvedValueOnce({ Success: true, Results: [row('b1', 'jobs@bolt.io', false)] });
|
|
248
|
+
component.CompanyID = 'co-2';
|
|
249
|
+
await vi.waitFor(() => expect(component.Rows.map((r) => r.ID)).toEqual(['b1']));
|
|
250
|
+
stale.resolve({ Success: true, Results: [row('a1', 'hr@acme.com', false)] });
|
|
251
|
+
await pendingFirst;
|
|
252
|
+
expect(component.Rows.map((r) => r.ID)).toEqual(['b1']);
|
|
253
|
+
expect(component.Loading).toBe(false);
|
|
254
|
+
});
|
|
255
|
+
it('reloads for the new company through the CompanyID input', async () => {
|
|
256
|
+
const { component } = build([]);
|
|
257
|
+
await component.ngOnInit();
|
|
258
|
+
H.runView.mockClear();
|
|
259
|
+
component.CompanyID = 'co-2';
|
|
260
|
+
await vi.waitFor(() => expect(H.runView).toHaveBeenCalledTimes(1));
|
|
261
|
+
const params = H.runView.mock.calls[0][0];
|
|
262
|
+
expect(params.ExtraFilter).toContain("CompanyID = 'co-2'");
|
|
263
|
+
});
|
|
264
|
+
it("clears the previous company's notice, error and add-form draft", async () => {
|
|
265
|
+
const { component } = build([], row('new', '', false));
|
|
266
|
+
await component.ngOnInit();
|
|
267
|
+
component.openAddForm('Domain');
|
|
268
|
+
component.NewAddress = 'half-typed.com';
|
|
269
|
+
component.Notice = 'Make sure this sender is verified';
|
|
270
|
+
component.Error = 'old error';
|
|
271
|
+
component.CompanyID = 'co-2';
|
|
272
|
+
expect(component.Notice).toBeNull();
|
|
273
|
+
expect(component.Error).toBeNull();
|
|
274
|
+
expect(component.ShowAddForm).toBe(false);
|
|
275
|
+
expect(component.NewAddress).toBe('');
|
|
276
|
+
expect(component.NewKind).toBe('Mailbox');
|
|
277
|
+
});
|
|
278
|
+
});
|
|
279
|
+
it('setDefault reloads and emits DataChanged when the demote saved but the promote failed', async () => {
|
|
280
|
+
const current = row('r1', 'old@acme.com', true);
|
|
281
|
+
const chosen = row('r2', 'new@acme.com', false);
|
|
282
|
+
chosen.Save.mockResolvedValue(false);
|
|
283
|
+
const { component } = build([current, chosen]);
|
|
284
|
+
await component.loadAll();
|
|
285
|
+
H.runView.mockClear();
|
|
286
|
+
H.runView.mockResolvedValue({ Success: true, Results: [current, chosen] });
|
|
287
|
+
const emitted = vi.fn();
|
|
288
|
+
component.DataChanged.subscribe(emitted);
|
|
289
|
+
const ok = await component.setDefault(asEntity(chosen));
|
|
290
|
+
expect(ok).toBe(false);
|
|
291
|
+
expect(H.runView).toHaveBeenCalledTimes(1); // the list is re-read: the database changed
|
|
292
|
+
expect(emitted).toHaveBeenCalledTimes(1);
|
|
293
|
+
expect(component.Error).toContain('"old@acme.com" is no longer the default');
|
|
294
|
+
});
|
|
295
|
+
});
|
|
296
|
+
//# sourceMappingURL=company-sender-identities.component.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"company-sender-identities.component.test.js","sourceRoot":"","sources":["../../../../../src/lib/components/company-sender-identities/__tests__/company-sender-identities.component.test.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/components/company-sender-identities/company-sender-identities.component.d.ts
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { EventEmitter, OnInit } from '@angular/core';
|
|
2
|
+
import { IMetadataProvider } from '@memberjunction/core';
|
|
3
|
+
import { CompanySenderIdentityEntity, SenderIdentityKind } from '@mj-biz-apps/common-entities';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
/** Shown after a successful add. The panel never calls the mail provider (spec §8). */
|
|
6
|
+
export declare const SENDER_VERIFICATION_REMINDER = "Make sure this sender is verified in your mail provider before using it.";
|
|
7
|
+
/**
|
|
8
|
+
* Lists and edits the From addresses a Company may send mail as: Mailbox rows (one address) and
|
|
9
|
+
* Domain rows (any address at that domain). One Mailbox may be the company's default sender.
|
|
10
|
+
*
|
|
11
|
+
* Every user-facing error names the address it is about, and every failure lands in `Error`
|
|
12
|
+
* (rendered in the template), never only in the console.
|
|
13
|
+
*/
|
|
14
|
+
export declare class CompanySenderIdentitiesComponent implements OnInit {
|
|
15
|
+
private readonly cdr;
|
|
16
|
+
private readonly confirm;
|
|
17
|
+
private _companyID;
|
|
18
|
+
private initialized;
|
|
19
|
+
/**
|
|
20
|
+
* The host form reuses this component when it moves to another Company, so a new value resets
|
|
21
|
+
* the previous company's rows, messages and add-form draft and reloads.
|
|
22
|
+
*/
|
|
23
|
+
set CompanyID(value: string | null);
|
|
24
|
+
get CompanyID(): string | null;
|
|
25
|
+
EditMode: boolean;
|
|
26
|
+
Provider?: IMetadataProvider;
|
|
27
|
+
DataChanged: EventEmitter<void>;
|
|
28
|
+
Rows: CompanySenderIdentityEntity[];
|
|
29
|
+
Loading: boolean;
|
|
30
|
+
Saving: boolean;
|
|
31
|
+
Error: string | null;
|
|
32
|
+
/** One-line confirmation after an add (the verification reminder). */
|
|
33
|
+
Notice: string | null;
|
|
34
|
+
ShowAddForm: boolean;
|
|
35
|
+
NewKind: SenderIdentityKind;
|
|
36
|
+
NewAddress: string;
|
|
37
|
+
NewDisplayName: string;
|
|
38
|
+
/** The provider actually used: the one passed in, or the ambient one. */
|
|
39
|
+
get ProviderToUse(): IMetadataProvider;
|
|
40
|
+
ngOnInit(): Promise<void>;
|
|
41
|
+
/** Set default is offered only on a Mailbox row that is not already the default. */
|
|
42
|
+
canSetDefault(row: CompanySenderIdentityEntity): boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Reload the company's rows (one RunView). A load that finishes after the input moved to
|
|
45
|
+
* another company is dropped, so a slow answer for the old company never overwrites the new one.
|
|
46
|
+
*/
|
|
47
|
+
loadAll(): Promise<void>;
|
|
48
|
+
/** Add a Mailbox or Domain row. Refuses a malformed address before anything is saved. */
|
|
49
|
+
addRow(kind: SenderIdentityKind, address: string, displayName: string | null): Promise<boolean>;
|
|
50
|
+
/**
|
|
51
|
+
* Make `row` the company's default Mailbox. The current default is demoted first and saved,
|
|
52
|
+
* then `row` is promoted: the database allows one default per company, so the order matters.
|
|
53
|
+
*/
|
|
54
|
+
setDefault(row: CompanySenderIdentityEntity): Promise<boolean>;
|
|
55
|
+
/** Delete `row` after the user confirms. */
|
|
56
|
+
removeRow(row: CompanySenderIdentityEntity): Promise<boolean>;
|
|
57
|
+
/** Template handler for the add form's Add button. */
|
|
58
|
+
onAdd(): Promise<void>;
|
|
59
|
+
openAddForm(kind: SenderIdentityKind): void;
|
|
60
|
+
/** Close the add form. Its validation error goes with it, so a stale message never lingers. */
|
|
61
|
+
cancelAdd(): void;
|
|
62
|
+
/**
|
|
63
|
+
* Shared wrapper for every write: one write at a time, a fresh error/notice, and a reload plus
|
|
64
|
+
* DataChanged whenever the database changed (even when the write as a whole did not succeed).
|
|
65
|
+
* `work` sets `Error` itself on an expected failure; an unexpected throw is reported with
|
|
66
|
+
* `context` (which names the address).
|
|
67
|
+
*/
|
|
68
|
+
private runMutation;
|
|
69
|
+
/** The write already succeeded, so a failed reload is reported as such rather than as a failed write. */
|
|
70
|
+
private reloadAfterWrite;
|
|
71
|
+
/** The company's rows. Throws (with context) when the RunView fails, so callers report it. */
|
|
72
|
+
private queryRows;
|
|
73
|
+
/** Sets IsDefault and saves; on failure restores the local value so the list matches the database. */
|
|
74
|
+
private saveIsDefault;
|
|
75
|
+
private requireCompanyID;
|
|
76
|
+
/** Forget everything that belonged to the previous company. */
|
|
77
|
+
private resetForCompany;
|
|
78
|
+
private resetAddForm;
|
|
79
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<CompanySenderIdentitiesComponent, never>;
|
|
80
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<CompanySenderIdentitiesComponent, "bizapps-company-sender-identities", never, { "CompanyID": { "alias": "CompanyID"; "required": false; }; "EditMode": { "alias": "EditMode"; "required": false; }; "Provider": { "alias": "Provider"; "required": false; }; }, { "DataChanged": "DataChanged"; }, never, never, true, never>;
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=company-sender-identities.component.d.ts.map
|
package/dist/lib/components/company-sender-identities/company-sender-identities.component.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"company-sender-identities.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/company-sender-identities/company-sender-identities.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAGH,YAAY,EAEZ,MAAM,EAGT,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,iBAAiB,EAAqB,MAAM,sBAAsB,CAAC;AAI5E,OAAO,EACH,2BAA2B,EAE3B,kBAAkB,EACrB,MAAM,8BAA8B,CAAC;;AAItC,uFAAuF;AACvF,eAAO,MAAM,4BAA4B,6EAA6E,CAAC;AAavH;;;;;;GAMG;AACH,qBAOa,gCAAiC,YAAW,MAAM;IAC3D,OAAO,CAAC,QAAQ,CAAC,GAAG,CAA6B;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4B;IACpD,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,WAAW,CAAS;IAE5B;;;OAGG;IACH,IACW,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAMxC;IACD,IAAW,SAAS,IAAI,MAAM,GAAG,IAAI,CAEpC;IAEQ,QAAQ,UAAQ;IAChB,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAE5B,WAAW,qBAA4B;IAE1C,IAAI,EAAE,2BAA2B,EAAE,CAAM;IACzC,OAAO,UAAS;IAChB,MAAM,UAAS;IACf,KAAK,EAAE,MAAM,GAAG,IAAI,CAAQ;IACnC,sEAAsE;IAC/D,MAAM,EAAE,MAAM,GAAG,IAAI,CAAQ;IAE7B,WAAW,UAAS;IACpB,OAAO,EAAE,kBAAkB,CAAa;IACxC,UAAU,SAAM;IAChB,cAAc,SAAM;IAE3B,yEAAyE;IACzE,IAAW,aAAa,IAAI,iBAAiB,CAE5C;IAEY,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtC,oFAAoF;IAC7E,aAAa,CAAC,GAAG,EAAE,2BAA2B,GAAG,OAAO;IAI/D;;;OAGG;IACU,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAoBrC,yFAAyF;IAC5E,MAAM,CAAC,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC;IA+B5G;;;OAGG;IACU,UAAU,CAAC,GAAG,EAAE,2BAA2B,GAAG,OAAO,CAAC,OAAO,CAAC;IAoB3E,4CAA4C;IAC/B,SAAS,CAAC,GAAG,EAAE,2BAA2B,GAAG,OAAO,CAAC,OAAO,CAAC;IAsB1E,sDAAsD;IACzC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B,WAAW,CAAC,IAAI,EAAE,kBAAkB,GAAG,IAAI;IAQlD,+FAA+F;IACxF,SAAS,IAAI,IAAI;IAMxB;;;;;OAKG;YACW,WAAW;IAyBzB,yGAAyG;YAC3F,gBAAgB;IAW9B,8FAA8F;YAChF,SAAS;IAyBvB,sGAAsG;YACxF,aAAa;IAS3B,OAAO,CAAC,gBAAgB;IAOxB,+DAA+D;IAC/D,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,YAAY;yCAhRX,gCAAgC;2CAAhC,gCAAgC;CAsR5C"}
|