@leavittsoftware/web 5.10.0 → 5.12.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/leavitt/email-history-viewer/email-history-view-list-filter-dialog.d.ts +394 -0
- package/leavitt/email-history-viewer/email-history-view-list-filter-dialog.js +233 -0
- package/leavitt/email-history-viewer/email-history-view-list-filter-dialog.js.map +1 -0
- package/leavitt/email-history-viewer/email-history-viewer.d.ts +412 -0
- package/leavitt/email-history-viewer/email-history-viewer.js +377 -0
- package/leavitt/email-history-viewer/email-history-viewer.js.map +1 -0
- package/leavitt/email-history-viewer/view-sent-email-dialog.d.ts +385 -0
- package/leavitt/email-history-viewer/view-sent-email-dialog.js +125 -0
- package/leavitt/email-history-viewer/view-sent-email-dialog.js.map +1 -0
- package/package.json +2 -2
- package/titanium/confirmation-dialog/confirmation-dialog.d.ts +2 -0
- package/titanium/confirmation-dialog/confirmation-dialog.js +18 -2
- package/titanium/confirmation-dialog/confirmation-dialog.js.map +1 -1
|
@@ -0,0 +1,377 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import '../../titanium/data-table/data-table';
|
|
3
|
+
import '../../titanium/data-table/data-table-item';
|
|
4
|
+
import '../../titanium/data-table/data-table-header';
|
|
5
|
+
import '../../titanium/header/header';
|
|
6
|
+
import '../../titanium/search-input/search-input';
|
|
7
|
+
import './email-history-view-list-filter-dialog';
|
|
8
|
+
import './view-sent-email-dialog';
|
|
9
|
+
import '@material/web/icon/icon';
|
|
10
|
+
import '@material/web/iconbutton/icon-button';
|
|
11
|
+
import '@material/web/iconbutton/filled-tonal-icon-button';
|
|
12
|
+
import '@material/web/menu/menu';
|
|
13
|
+
import '@material/web/menu/menu-item';
|
|
14
|
+
import dayjs from 'dayjs/esm';
|
|
15
|
+
import { customElement, property, query, state } from 'lit/decorators.js';
|
|
16
|
+
import { FilterController } from '../../titanium/data-table/filter-controller';
|
|
17
|
+
import { DateRanges } from '../../titanium/date-range-selector/types/date-ranges';
|
|
18
|
+
import { Debouncer } from '../../titanium/helpers/debouncer';
|
|
19
|
+
import { getSearchTokens } from '../../titanium/helpers/get-search-token';
|
|
20
|
+
import { LoadWhile } from '../../titanium/helpers/load-while';
|
|
21
|
+
import { ShowSnackbarEvent } from '../../titanium/snackbar/show-snackbar-event';
|
|
22
|
+
import { a } from '../../titanium/styles/a';
|
|
23
|
+
import { ellipsis } from '../../titanium/styles/ellipsis';
|
|
24
|
+
import { LitElement, css, html } from 'lit';
|
|
25
|
+
import { repeat } from 'lit/directives/repeat.js';
|
|
26
|
+
/**
|
|
27
|
+
* @element leavitt-email-history-viewer
|
|
28
|
+
|
|
29
|
+
* @description A component that displays a list of email history for embedding in Leavitt's specific applications.
|
|
30
|
+
* @property isActive - Whether the component is active / in view
|
|
31
|
+
* @property apiService - The API service to use. This is required to fetch the email history.
|
|
32
|
+
* @property path - the route that this component will be available at
|
|
33
|
+
*/
|
|
34
|
+
let LeavittEmailHistoryViewer = class LeavittEmailHistoryViewer extends LoadWhile(LitElement) {
|
|
35
|
+
#isActive_accessor_storage;
|
|
36
|
+
get isActive() { return this.#isActive_accessor_storage; }
|
|
37
|
+
set isActive(value) { this.#isActive_accessor_storage = value; }
|
|
38
|
+
#apiService_accessor_storage;
|
|
39
|
+
get apiService() { return this.#apiService_accessor_storage; }
|
|
40
|
+
set apiService(value) { this.#apiService_accessor_storage = value; }
|
|
41
|
+
#path_accessor_storage;
|
|
42
|
+
get path() { return this.#path_accessor_storage; }
|
|
43
|
+
set path(value) { this.#path_accessor_storage = value; }
|
|
44
|
+
#logs_accessor_storage = [];
|
|
45
|
+
// Data table props
|
|
46
|
+
get logs() { return this.#logs_accessor_storage; }
|
|
47
|
+
set logs(value) { this.#logs_accessor_storage = value; }
|
|
48
|
+
#selected_accessor_storage = [];
|
|
49
|
+
get selected() { return this.#selected_accessor_storage; }
|
|
50
|
+
set selected(value) { this.#selected_accessor_storage = value; }
|
|
51
|
+
#searchTerm_accessor_storage = '';
|
|
52
|
+
get searchTerm() { return this.#searchTerm_accessor_storage; }
|
|
53
|
+
set searchTerm(value) { this.#searchTerm_accessor_storage = value; }
|
|
54
|
+
#resultTotal_accessor_storage = 0;
|
|
55
|
+
get resultTotal() { return this.#resultTotal_accessor_storage; }
|
|
56
|
+
set resultTotal(value) { this.#resultTotal_accessor_storage = value; }
|
|
57
|
+
#sortDirection_accessor_storage = 'desc';
|
|
58
|
+
get sortDirection() { return this.#sortDirection_accessor_storage; }
|
|
59
|
+
set sortDirection(value) { this.#sortDirection_accessor_storage = value; }
|
|
60
|
+
#sortBy_accessor_storage = 'SentDate';
|
|
61
|
+
get sortBy() { return this.#sortBy_accessor_storage; }
|
|
62
|
+
set sortBy(value) { this.#sortBy_accessor_storage = value; }
|
|
63
|
+
#filterController_accessor_storage;
|
|
64
|
+
get filterController() { return this.#filterController_accessor_storage; }
|
|
65
|
+
set filterController(value) { this.#filterController_accessor_storage = value; }
|
|
66
|
+
#dataTable_accessor_storage;
|
|
67
|
+
get dataTable() { return this.#dataTable_accessor_storage; }
|
|
68
|
+
set dataTable(value) { this.#dataTable_accessor_storage = value; }
|
|
69
|
+
#viewDialog_accessor_storage;
|
|
70
|
+
get viewDialog() { return this.#viewDialog_accessor_storage; }
|
|
71
|
+
set viewDialog(value) { this.#viewDialog_accessor_storage = value; }
|
|
72
|
+
#filterModal_accessor_storage;
|
|
73
|
+
get filterModal() { return this.#filterModal_accessor_storage; }
|
|
74
|
+
set filterModal(value) { this.#filterModal_accessor_storage = value; }
|
|
75
|
+
#isDirty = true;
|
|
76
|
+
constructor() {
|
|
77
|
+
super();
|
|
78
|
+
this.filterController = new FilterController('');
|
|
79
|
+
this.filterController.setFilter('dateRange', () => '');
|
|
80
|
+
this.filterController.setFilter('startDate', () => '');
|
|
81
|
+
this.filterController.setFilter('endDate', () => '');
|
|
82
|
+
this.filterController.setFilter('template', (val) => `EmailTemplateId eq ${val}`);
|
|
83
|
+
this.filterController.subscribeToFilterChange(async () => {
|
|
84
|
+
if (this.isActive) {
|
|
85
|
+
this.dataTable.resetPage();
|
|
86
|
+
this.#reload();
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
this.#isDirty = true;
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
this.filterController.loadFromQueryString();
|
|
93
|
+
}
|
|
94
|
+
updated(changedProps) {
|
|
95
|
+
if (this.isActive && changedProps.has('isActive') && this.#isDirty) {
|
|
96
|
+
this.#reload();
|
|
97
|
+
}
|
|
98
|
+
if (changedProps.has('path')) {
|
|
99
|
+
this.filterController.path = this.path;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
#reload() {
|
|
103
|
+
this.#getLogsAsync(this.searchTerm);
|
|
104
|
+
}
|
|
105
|
+
#onSortDirectionChange(e) {
|
|
106
|
+
this.sortDirection = e.detail;
|
|
107
|
+
this.dataTable.resetPage();
|
|
108
|
+
this.#reload();
|
|
109
|
+
}
|
|
110
|
+
#onSortByChange(e) {
|
|
111
|
+
this.sortBy = e.detail;
|
|
112
|
+
this.dataTable.resetPage();
|
|
113
|
+
this.#reload();
|
|
114
|
+
}
|
|
115
|
+
#doSearchDebouncer = new Debouncer((searchTerm) => this.#getLogsAsync(searchTerm));
|
|
116
|
+
renderRecipients(recipients, maxRecipients = 1) {
|
|
117
|
+
const recipientsList = recipients
|
|
118
|
+
?.split(',')
|
|
119
|
+
.filter((o) => !!o)
|
|
120
|
+
.map((o) => o.trim())
|
|
121
|
+
.reverse() ?? [];
|
|
122
|
+
if (recipientsList?.length > maxRecipients) {
|
|
123
|
+
return html `${repeat(recipientsList.slice(0, maxRecipients), (o) => o, (o) => html `${o} <br />`)} <span more> ${recipientsList.length - maxRecipients} more... </span>`;
|
|
124
|
+
}
|
|
125
|
+
return repeat(recipientsList, (o) => o, (o) => html `${o} <br />`);
|
|
126
|
+
}
|
|
127
|
+
async #getLogsAsync(searchTerm) {
|
|
128
|
+
if (!this.apiService) {
|
|
129
|
+
console.warn('No api service provided');
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
let filterParts = [];
|
|
133
|
+
const searchTokens = getSearchTokens(searchTerm);
|
|
134
|
+
const searchFilter = searchTokens.map((token) => `(contains(Subject, '${token}') or contains(Recipients, '${token}'))`).join(' and ');
|
|
135
|
+
if (searchTokens.length > 0) {
|
|
136
|
+
filterParts.push(`${searchFilter}`);
|
|
137
|
+
}
|
|
138
|
+
//Date filters
|
|
139
|
+
const dateRange = this.filterController.getValue('dateRange');
|
|
140
|
+
const startDate = dateRange === 'custom' ? this.filterController.getValue('startDate') : DateRanges.get(dateRange)?.startDate();
|
|
141
|
+
const endDate = dateRange === 'custom' ? this.filterController.getValue('endDate') : DateRanges.get(dateRange)?.endDate();
|
|
142
|
+
if (startDate) {
|
|
143
|
+
filterParts.push(`SentDate ge ${dayjs(startDate).format('YYYY-MM-DD')}`);
|
|
144
|
+
}
|
|
145
|
+
if (endDate) {
|
|
146
|
+
filterParts.push(`SentDate le ${dayjs(endDate).format('YYYY-MM-DD')}`);
|
|
147
|
+
}
|
|
148
|
+
filterParts = [...filterParts, ...this.filterController.getActiveFilterOdata()];
|
|
149
|
+
const odataParts = [
|
|
150
|
+
'select=Id,Recipients,SentDate,Subject',
|
|
151
|
+
'expand=EmailTemplate(select=Id,Name,IsExpired)',
|
|
152
|
+
`top=${await this.dataTable.getTake()}`,
|
|
153
|
+
`orderby=${this.sortBy} ${this.sortDirection}`,
|
|
154
|
+
`skip=${(await this.dataTable.getTake()) * (await this.dataTable.getPage())}`,
|
|
155
|
+
'count=true',
|
|
156
|
+
];
|
|
157
|
+
if (filterParts.length > 0) {
|
|
158
|
+
odataParts.push(`filter=${filterParts.join(' and ')}`);
|
|
159
|
+
}
|
|
160
|
+
try {
|
|
161
|
+
const get = this.apiService.getAsync(`EmailTemplateLogs/?${odataParts.join('&')}`);
|
|
162
|
+
this.dataTable.loadWhile(get);
|
|
163
|
+
this.loadWhile(get);
|
|
164
|
+
const result = await get;
|
|
165
|
+
this.resultTotal = result.odataCount;
|
|
166
|
+
this.logs = result.toList();
|
|
167
|
+
this.#isDirty = false;
|
|
168
|
+
}
|
|
169
|
+
catch (error) {
|
|
170
|
+
this.dispatchEvent(new ShowSnackbarEvent(error));
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
static { this.styles = [
|
|
174
|
+
ellipsis,
|
|
175
|
+
a,
|
|
176
|
+
css `
|
|
177
|
+
:host {
|
|
178
|
+
display: grid;
|
|
179
|
+
grid-template-columns: minmax(0, 1fr);
|
|
180
|
+
gap: 24px;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
[inactive],
|
|
184
|
+
span[time],
|
|
185
|
+
span[more] {
|
|
186
|
+
font-size: 12px;
|
|
187
|
+
line-height: 14px;
|
|
188
|
+
opacity: 0.8;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
md-filled-tonal-icon-button {
|
|
192
|
+
--md-filled-tonal-icon-button-container-height: 32px;
|
|
193
|
+
--md-filled-tonal-icon-button-icon-size: 21px;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
[hidden] {
|
|
197
|
+
display: none !important;
|
|
198
|
+
}
|
|
199
|
+
`,
|
|
200
|
+
]; }
|
|
201
|
+
render() {
|
|
202
|
+
return html `
|
|
203
|
+
<titanium-header header="Email history" subHeader="A comprehensive record of email correspondence originating from this tool." no-nav></titanium-header>
|
|
204
|
+
<titanium-data-table
|
|
205
|
+
header="Emails"
|
|
206
|
+
disable-select
|
|
207
|
+
@selected-changed=${(e) => {
|
|
208
|
+
this.selected = [...e.detail];
|
|
209
|
+
}}
|
|
210
|
+
@paging-changed=${() => this.#reload()}
|
|
211
|
+
.count=${this.resultTotal}
|
|
212
|
+
.items=${this.logs}
|
|
213
|
+
.searchTerm=${this.searchTerm}
|
|
214
|
+
>
|
|
215
|
+
<titanium-search-input
|
|
216
|
+
slot="search-button"
|
|
217
|
+
title="Search by recipients or subject"
|
|
218
|
+
placeholder="Recipients or subject"
|
|
219
|
+
.value=${this.searchTerm}
|
|
220
|
+
@input=${(e) => {
|
|
221
|
+
this.searchTerm = e.target.value;
|
|
222
|
+
this.dataTable.resetPage();
|
|
223
|
+
this.#doSearchDebouncer.debounce(this.searchTerm);
|
|
224
|
+
}}
|
|
225
|
+
></titanium-search-input>
|
|
226
|
+
|
|
227
|
+
<div slot="table-actions" style="position:relative;">
|
|
228
|
+
<md-icon-button
|
|
229
|
+
id="menu-anchor"
|
|
230
|
+
aria-haspopup="true"
|
|
231
|
+
aria-controls="menu"
|
|
232
|
+
aria-expanded="false"
|
|
233
|
+
@click=${(e) => {
|
|
234
|
+
const root = e.target.getRootNode();
|
|
235
|
+
const menu = root.querySelector('#menu');
|
|
236
|
+
menu.open = !menu.open;
|
|
237
|
+
}}
|
|
238
|
+
>
|
|
239
|
+
<md-icon>more_vert</md-icon>
|
|
240
|
+
</md-icon-button>
|
|
241
|
+
|
|
242
|
+
<md-menu
|
|
243
|
+
id="menu"
|
|
244
|
+
anchor="menu-anchor"
|
|
245
|
+
@close-menu=${(e) => {
|
|
246
|
+
e.detail.itemPath?.[0]?.action?.();
|
|
247
|
+
}}
|
|
248
|
+
>
|
|
249
|
+
<md-menu-item .action=${() => this.#reload()}>
|
|
250
|
+
<md-icon slot="start">refresh</md-icon>
|
|
251
|
+
Refresh
|
|
252
|
+
</md-menu-item>
|
|
253
|
+
</md-menu>
|
|
254
|
+
</div>
|
|
255
|
+
|
|
256
|
+
<leavitt-email-history-view-list-filter-dialog
|
|
257
|
+
.isActive=${this.isActive}
|
|
258
|
+
slot="filters"
|
|
259
|
+
.filterController=${this.filterController}
|
|
260
|
+
.apiService=${this.apiService}
|
|
261
|
+
></leavitt-email-history-view-list-filter-dialog>
|
|
262
|
+
|
|
263
|
+
<md-icon-button slot="filter-button" @click=${async () => this.filterModal.open()}>
|
|
264
|
+
<md-icon>filter_list</md-icon>
|
|
265
|
+
</md-icon-button>
|
|
266
|
+
|
|
267
|
+
<titanium-data-table-header
|
|
268
|
+
width="150px"
|
|
269
|
+
slot="table-headers"
|
|
270
|
+
title="Sent"
|
|
271
|
+
column-name="SentDate"
|
|
272
|
+
@sort-by-changed=${this.#onSortByChange}
|
|
273
|
+
.sortBy=${this.sortBy}
|
|
274
|
+
.sortDirection=${this.sortDirection}
|
|
275
|
+
@sort-direction-changed=${this.#onSortDirectionChange}
|
|
276
|
+
></titanium-data-table-header>
|
|
277
|
+
|
|
278
|
+
<titanium-data-table-header
|
|
279
|
+
large
|
|
280
|
+
slot="table-headers"
|
|
281
|
+
column-name="Subject"
|
|
282
|
+
title="Subject"
|
|
283
|
+
@sort-by-changed=${this.#onSortByChange}
|
|
284
|
+
.sortBy=${this.sortBy}
|
|
285
|
+
.sortDirection=${this.sortDirection}
|
|
286
|
+
@sort-direction-changed=${this.#onSortDirectionChange}
|
|
287
|
+
></titanium-data-table-header>
|
|
288
|
+
|
|
289
|
+
<titanium-data-table-header
|
|
290
|
+
desktop
|
|
291
|
+
slot="table-headers"
|
|
292
|
+
column-name="Recipients"
|
|
293
|
+
title="Recipients"
|
|
294
|
+
@sort-by-changed=${this.#onSortByChange}
|
|
295
|
+
.sortBy=${this.sortBy}
|
|
296
|
+
.sortDirection=${this.sortDirection}
|
|
297
|
+
@sort-direction-changed=${this.#onSortDirectionChange}
|
|
298
|
+
></titanium-data-table-header>
|
|
299
|
+
|
|
300
|
+
<titanium-data-table-header
|
|
301
|
+
desktop
|
|
302
|
+
slot="table-headers"
|
|
303
|
+
column-name="EmailTemplate/Name"
|
|
304
|
+
title="Template name"
|
|
305
|
+
@sort-by-changed=${this.#onSortByChange}
|
|
306
|
+
.sortBy=${this.sortBy}
|
|
307
|
+
.sortDirection=${this.sortDirection}
|
|
308
|
+
@sort-direction-changed=${this.#onSortDirectionChange}
|
|
309
|
+
></titanium-data-table-header>
|
|
310
|
+
<titanium-data-table-header width="50px" no-sort slot="table-headers"></titanium-data-table-header>
|
|
311
|
+
${repeat(this.logs ?? [], (item) => item.Id, (item) => html `
|
|
312
|
+
<titanium-data-table-item disable-select .item=${item} slot="items">
|
|
313
|
+
<row-item width="150px" ellipsis date
|
|
314
|
+
>${item.SentDate
|
|
315
|
+
? html `${dayjs(item.SentDate).format('MMM DD, YY')}<br /><span time>${dayjs(item.SentDate).format('h:mm A')}</span>`
|
|
316
|
+
: '-'}</row-item
|
|
317
|
+
>
|
|
318
|
+
<row-item large>${item.Subject ?? '-'} </row-item>
|
|
319
|
+
<row-item desktop title=${item.Recipients ?? ''}>${this.renderRecipients(item.Recipients ?? null)}</row-item>
|
|
320
|
+
<row-item desktop>
|
|
321
|
+
<div>${item.EmailTemplate?.Name}</div>
|
|
322
|
+
${item.EmailTemplate?.IsExpired ? html `<div inactive>Inactive</div>` : ''}</row-item
|
|
323
|
+
>
|
|
324
|
+
<row-item width="50px"
|
|
325
|
+
><md-filled-tonal-icon-button @click=${() => this.viewDialog.open(item.Id ?? 0)}><md-icon>pageview</md-icon></md-filled-tonal-icon-button>
|
|
326
|
+
</row-item>
|
|
327
|
+
</titanium-data-table-item>
|
|
328
|
+
`)}
|
|
329
|
+
</titanium-data-table>
|
|
330
|
+
<leavitt-view-sent-email-dialog .apiService=${this.apiService}></leavitt-view-sent-email-dialog>
|
|
331
|
+
`;
|
|
332
|
+
}
|
|
333
|
+
};
|
|
334
|
+
__decorate([
|
|
335
|
+
property({ type: Boolean })
|
|
336
|
+
], LeavittEmailHistoryViewer.prototype, "isActive", null);
|
|
337
|
+
__decorate([
|
|
338
|
+
property({ type: Object })
|
|
339
|
+
], LeavittEmailHistoryViewer.prototype, "apiService", null);
|
|
340
|
+
__decorate([
|
|
341
|
+
property({ type: String })
|
|
342
|
+
], LeavittEmailHistoryViewer.prototype, "path", null);
|
|
343
|
+
__decorate([
|
|
344
|
+
state()
|
|
345
|
+
], LeavittEmailHistoryViewer.prototype, "logs", null);
|
|
346
|
+
__decorate([
|
|
347
|
+
state()
|
|
348
|
+
], LeavittEmailHistoryViewer.prototype, "selected", null);
|
|
349
|
+
__decorate([
|
|
350
|
+
state()
|
|
351
|
+
], LeavittEmailHistoryViewer.prototype, "searchTerm", null);
|
|
352
|
+
__decorate([
|
|
353
|
+
state()
|
|
354
|
+
], LeavittEmailHistoryViewer.prototype, "resultTotal", null);
|
|
355
|
+
__decorate([
|
|
356
|
+
state()
|
|
357
|
+
], LeavittEmailHistoryViewer.prototype, "sortDirection", null);
|
|
358
|
+
__decorate([
|
|
359
|
+
state()
|
|
360
|
+
], LeavittEmailHistoryViewer.prototype, "sortBy", null);
|
|
361
|
+
__decorate([
|
|
362
|
+
state()
|
|
363
|
+
], LeavittEmailHistoryViewer.prototype, "filterController", null);
|
|
364
|
+
__decorate([
|
|
365
|
+
query('titanium-data-table')
|
|
366
|
+
], LeavittEmailHistoryViewer.prototype, "dataTable", null);
|
|
367
|
+
__decorate([
|
|
368
|
+
query('leavitt-view-sent-email-dialog')
|
|
369
|
+
], LeavittEmailHistoryViewer.prototype, "viewDialog", null);
|
|
370
|
+
__decorate([
|
|
371
|
+
query('leavitt-email-history-view-list-filter-dialog')
|
|
372
|
+
], LeavittEmailHistoryViewer.prototype, "filterModal", null);
|
|
373
|
+
LeavittEmailHistoryViewer = __decorate([
|
|
374
|
+
customElement('leavitt-email-history-viewer')
|
|
375
|
+
], LeavittEmailHistoryViewer);
|
|
376
|
+
export default LeavittEmailHistoryViewer;
|
|
377
|
+
//# sourceMappingURL=email-history-viewer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"email-history-viewer.js","sourceRoot":"","sources":["email-history-viewer.ts"],"names":[],"mappings":"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"}
|