@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.
@@ -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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"}