@social-mail/social-mail-client 1.2.85 → 1.2.86
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/admin/AdminAppIndex.pack.js +320 -159
- package/dist/admin/AdminAppIndex.pack.js.map +1 -1
- package/dist/admin/AdminAppIndex.pack.min.js +41 -41
- package/dist/admin/AdminAppIndex.pack.min.js.map +1 -1
- package/dist/public/channel/ChannelView.pack.js +118 -33
- package/dist/public/channel/ChannelView.pack.js.map +1 -1
- package/dist/public/channel/ChannelView.pack.min.js +2 -2
- package/dist/public/channel/ChannelView.pack.min.js.map +1 -1
- package/dist/services/email/EmailContentDownloader.d.ts +0 -2
- package/dist/services/email/EmailContentDownloader.d.ts.map +1 -1
- package/dist/services/email/EmailContentDownloader.js +2 -30
- package/dist/services/email/EmailContentDownloader.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/web/AppIndex.pack.js +320 -159
- package/dist/web/AppIndex.pack.js.map +1 -1
- package/dist/web/AppIndex.pack.min.js +41 -41
- package/dist/web/AppIndex.pack.min.js.map +1 -1
- package/dist/web/page/mails/ConversationPage.d.ts +1 -0
- package/dist/web/page/mails/ConversationPage.d.ts.map +1 -1
- package/dist/web/page/mails/ConversationPage.js +16 -3
- package/dist/web/page/mails/ConversationPage.js.map +1 -1
- package/dist/web/page/mails/engagements/EngagementDetails.d.ts +10 -0
- package/dist/web/page/mails/engagements/EngagementDetails.d.ts.map +1 -0
- package/dist/web/page/mails/engagements/EngagementDetails.js +82 -0
- package/dist/web/page/mails/engagements/EngagementDetails.js.map +1 -0
- package/dist/web/page/mails/mini-compose/MiniComposeBox.d.ts.map +1 -1
- package/dist/web/page/mails/mini-compose/MiniComposeBox.js +0 -1
- package/dist/web/page/mails/mini-compose/MiniComposeBox.js.map +1 -1
- package/dist/web/page/mails/service/ConversationService.d.ts +1 -0
- package/dist/web/page/mails/service/ConversationService.d.ts.map +1 -1
- package/dist/web/page/mails/service/ConversationService.js +6 -2
- package/dist/web/page/mails/service/ConversationService.js.map +1 -1
- package/dist/web/page/mails/service/EngagementService.d.ts +18 -0
- package/dist/web/page/mails/service/EngagementService.d.ts.map +1 -0
- package/dist/web/page/mails/service/EngagementService.js +85 -0
- package/dist/web/page/mails/service/EngagementService.js.map +1 -0
- package/package.json +1 -1
- package/src/services/email/EmailContentDownloader.ts +0 -50
- package/src/web/page/mails/ConversationPage.tsx +15 -2
- package/src/web/page/mails/engagements/EngagementDetails.tsx +70 -0
- package/src/web/page/mails/mini-compose/MiniComposeBox.tsx +0 -1
- package/src/web/page/mails/service/ConversationService.tsx +5 -0
- package/src/web/page/mails/service/EngagementService.tsx +69 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Inject","_webAtomsCoreDistDiInject","_servicesEntityService","EntityService","default","_modelModel","Email","EmailEngagement","_commonCacheCacheTTL","CacheTTL","_webAtomsDateTimeDistDateTime","DateTime","_servicesEmailEmailContentDownloader","EmailContentDownloader","_webAtomsCoreDistDiDISingleton","DISingleton","execute","cacheSeconds","seconds","oneMonth","EngagementService","downloadEngagements","email","emailID","now","minute","Math","floor","addMinutes","cacheVersion","dateUpdated","from","msSinceEpoch","toString","engagements","entityService","query","where","p","x","toArray","error","console","list","start","size","engagement","mailboxID","emailAddressID","q","parentID","toPagedList","Promise","all","items","map","emailContentDownloder","download","__decorate","_export"],"sources":["../../../../../src/web/page/mails/service/EngagementService.tsx"],"sourcesContent":[null],"mappings":";;;;;;;;;;MACSA,MAAM,GAAAC,yBAAA,CAAND,MAAM;IAAA,aAAAE,sBAAA;MACRC,aAAa,GAAAD,sBAAA,CAAAE,OAAA;IAAA,aAAAC,WAAA;MACXC,KAAK,GAAAD,WAAA,CAALC,KAAK;MAAEC,eAAe,GAAAF,WAAA,CAAfE,eAAe;IAAA,aAAAC,oBAAA;MACtBC,QAAQ,GAAAD,oBAAA,CAARC,QAAQ;IAAA,aAAAC,6BAAA;MACVC,QAAQ,GAAAD,6BAAA,CAAAN,OAAA;IAAA,aAAAQ,oCAAA;MACRC,sBAAsB,GAAAD,oCAAA,CAAAR,OAAA;IAAA,aAAAU,8BAAA;MACtBC,WAAW,GAAAD,8BAAA,CAAAV,OAAA;IAAA;IAAAY,OAAA,WAAAA,CAAA;MAEZC,YAAY,GAAGR,QAAQ,CAACS,OAAO,CAACC,QAAQ;MAGzBC,iBAAiB,GAAvB,MAAMA,iBAAiB;QAQ5BC,mBAAmBA,CAACC,KAAa;;YAEnC,IAAI;cACA,MAAM;gBAAEC;cAAO,CAAE,GAAGD,KAAK;cAEzB,IAAIE,GAAG,GAAGb,QAAQ,CAACa,GAAG;cACtB,MAAMC,MAAM,GAAGC,IAAI,CAACC,KAAK,CAACH,GAAG,CAACC,MAAM,GAAG,CAAC,CAAC;cACzCD,GAAG,GAAGA,GAAG,CAACI,UAAU,CAAC,CAACH,MAAM,CAAC;cAE7B,MAAMI,YAAY,GAAGP,KAAK,CAACQ,WAAW,GAAGnB,QAAQ,CAACoB,IAAI,CAACT,KAAK,CAACQ,WAAW,CAAC,CAACE,YAAY,CAACC,QAAQ,CAAC,EAAE,CAAC,GAAG,GAAG;cAEzGX,KAAK,CAACY,WAAW,GAAG,MAAM,IAAI,CAACC,aAAa,CAACC,KAAK,CAAC7B,eAAe,CAAC,CAC9D8B,KAAK,CAAC;gBAAEd;cAAO,CAAE,EAAGe,CAAC,IAAMC,CAAC,IAAKA,CAAC,CAAChB,OAAO,KAAKe,CAAC,CAACf,OAAO,CAAC,CACzDiB,OAAO,CAAC;gBACLX,YAAY;gBACZZ,YAAY,EAAE;eACjB,CAAC;aACT,CAAC,OAAOwB,KAAK,EAAE;cACZC,OAAO,CAACD,KAAK,CAACA,KAAK,CAAC;;UAE7B,CAAC;;QAEME,IAAIA,CAAC;UACPC,KAAK,GAAG,CAAC;UACTC,IAAI,GAAG,EAAE;UACTC,UAAU,GAAG,EAAE;UACfvB,OAAO,GAAG,CAAC;UACXwB,SAAS,GAAG,CAAC;UACbC,cAAc,GAAG,CAAC;UAClBlB,WAAW,GAAG;QAAI,CACrB;;YACG,MAAMmB,CAAC,GAAG,IAAI,CAACd,aAAa,CAACC,KAAK,CAAC9B,KAAK,CAAC,CACpC+B,KAAK,CAAC;cAAEU,SAAS;cAAEC,cAAc;cAAEF,UAAU;cAAEvB;YAAO,CAAC,EAAGe,CAAC,IACnDC,CAAC,IAAKA,CAAC,CAACO,UAAU,KAAKR,CAAC,CAACQ,UAAU,IACjCP,CAAC,CAACW,QAAQ,KAAKZ,CAAC,CAACf,OAAO,CAClC;YAEL,MAAMM,YAAY,GAAGC,WAAW,GAAGnB,QAAQ,CAACoB,IAAI,CAACD,WAAW,CAAC,CAACE,YAAY,CAACC,QAAQ,CAAC,EAAE,CAAC,GAAG,GAAG;YAE7F,MAAMU,IAAI,GAAG,MAAMM,CAAC,CAACE,WAAW,CAC5B;cAAEP,KAAK;cAAEC,IAAI;cAAEhB,YAAY;cAAGZ;YAAY,CAAE,CAC/C;YAED,MAAMmC,OAAO,CAACC,GAAG,CAACV,IAAI,CAACW,KAAK,CAACC,GAAG,CAAEhB,CAAC,IAAK,IAAI,CAACiB,qBAAqB,CAACC,QAAQ,CAAClB,CAAC,CAAC,CAAC,CAAC;YAEhF,OAAOI,IAAI;UACf,CAAC;;OAEJ;MAtDGe,UAAA,EAAC1D,MAAM,E,0BACQG,aAAa,E,uDAAC;MAE7BuD,UAAA,EAAC1D,MAAM,E,0BACgBa,sBAAsB,E,+DAAC;MAN7BO,iBAAiB,GAAAsC,UAAA,EADrC3C,WAAW,EAAE,C,EACOK,iBAAiB,CAwDrC;MAAAuC,OAAA,YAxDoBvC,iBAAiB;IAAA;EAAA;AAAA"}
|
package/package.json
CHANGED
|
@@ -9,13 +9,8 @@ import DateTime from "@web-atoms/date-time/dist/DateTime";
|
|
|
9
9
|
@DISingleton({})
|
|
10
10
|
export default class EmailContentDownloader extends TaskManager {
|
|
11
11
|
|
|
12
|
-
@Inject
|
|
13
|
-
private entityService: EntityService;
|
|
14
|
-
|
|
15
12
|
async download(email: IEmail) {
|
|
16
13
|
|
|
17
|
-
await this.downloadEngagements(email);
|
|
18
|
-
|
|
19
14
|
if (email.htmlBody) {
|
|
20
15
|
return email.htmlBody;
|
|
21
16
|
}
|
|
@@ -53,49 +48,4 @@ export default class EmailContentDownloader extends TaskManager {
|
|
|
53
48
|
});
|
|
54
49
|
}
|
|
55
50
|
|
|
56
|
-
async downloadEngagements(email: IEmail) {
|
|
57
|
-
|
|
58
|
-
const { emailID } = email;
|
|
59
|
-
|
|
60
|
-
let now = DateTime.now;
|
|
61
|
-
const minute = Math.floor(now.minute / 5);
|
|
62
|
-
now = now.addMinutes(-minute);
|
|
63
|
-
|
|
64
|
-
const cacheVersion = email.dateUpdated ? DateTime.from(email.dateUpdated).msSinceEpoch.toString(36) : "-";
|
|
65
|
-
|
|
66
|
-
email.engagements = await this.entityService.query(EmailEngagement)
|
|
67
|
-
.where({ emailID }, (p) => (x) => x.emailID === p.emailID)
|
|
68
|
-
.toArray({
|
|
69
|
-
cacheVersion,
|
|
70
|
-
cacheSeconds: 300
|
|
71
|
-
});
|
|
72
|
-
|
|
73
|
-
// const cache = await window.caches.open("email-content-engagements");
|
|
74
|
-
// const cacheKey = new URL(email.htmlBodyUrl, location.href);
|
|
75
|
-
// const content = await cache.match(cacheKey);
|
|
76
|
-
|
|
77
|
-
// if (content) {
|
|
78
|
-
// email.engagements = await content.json();
|
|
79
|
-
// return;
|
|
80
|
-
// }
|
|
81
|
-
// return await this.run(async () => {
|
|
82
|
-
|
|
83
|
-
// for(let i = 0;i<3;i++) {
|
|
84
|
-
// try {
|
|
85
|
-
// const text = await this.entityService.query(EmailEngagement)
|
|
86
|
-
// .where();
|
|
87
|
-
// await cache.put(cacheKey, new Response(text, {
|
|
88
|
-
// headers: {
|
|
89
|
-
// "cache-control": "public, max-age=86000"
|
|
90
|
-
// }
|
|
91
|
-
// }));
|
|
92
|
-
// return email.htmlBody = text;
|
|
93
|
-
// } catch (error){
|
|
94
|
-
// // eslint-disable-next-line no-console
|
|
95
|
-
// console.error(error);
|
|
96
|
-
// }
|
|
97
|
-
// }
|
|
98
|
-
// });
|
|
99
|
-
}
|
|
100
|
-
|
|
101
51
|
}
|
|
@@ -29,6 +29,7 @@ import { CommonEvents } from "../../../common/events/CommonEvents";
|
|
|
29
29
|
import DateTime from "@web-atoms/date-time/dist/DateTime";
|
|
30
30
|
import EmojiPicker from "../../../common/controls/emoji-picker/EmojiPicker";
|
|
31
31
|
import EntityService from "../../../services/EntityService";
|
|
32
|
+
import EngagementDetails from "./engagements/EngagementDetails";
|
|
32
33
|
|
|
33
34
|
const itemCss = styled.css `
|
|
34
35
|
border: solid 1px lightgray;
|
|
@@ -179,7 +180,12 @@ export default class ConversationPage extends ContentPage {
|
|
|
179
180
|
<div class="message" { ... renderMail(thread)} ></div>
|
|
180
181
|
</LimitedText>
|
|
181
182
|
{ item.engagements?.length && <div class="engagements">
|
|
182
|
-
{ ... item.engagements.map((x) =>
|
|
183
|
+
{ ... item.engagements.map((x) =>
|
|
184
|
+
<span
|
|
185
|
+
data-click-event="view-engagements"
|
|
186
|
+
data-cursor="pointer"
|
|
187
|
+
title={`View all ${x.engagement} ${x.count}`}
|
|
188
|
+
text={`${x.engagement} ${x.count}`}/>)}
|
|
183
189
|
</div>}
|
|
184
190
|
{ item.attachments?.length && <div class="attachments" data-layout="flex-wrap-padding">
|
|
185
191
|
{ ... item.attachments.map(FilePreview)}
|
|
@@ -191,7 +197,7 @@ export default class ConversationPage extends ContentPage {
|
|
|
191
197
|
|
|
192
198
|
<i
|
|
193
199
|
data-click-event="react-email"
|
|
194
|
-
class="
|
|
200
|
+
class="fa-light fa-face-smile-plus" title="React"/>
|
|
195
201
|
<i
|
|
196
202
|
data-click-event="reply-email"
|
|
197
203
|
class="fas fa-reply" title="Reply"/>
|
|
@@ -471,6 +477,13 @@ export default class ConversationPage extends ContentPage {
|
|
|
471
477
|
await this.conversationService.block(this.parameters);
|
|
472
478
|
}
|
|
473
479
|
|
|
480
|
+
@Action({
|
|
481
|
+
onEvent: "view-engagements"
|
|
482
|
+
})
|
|
483
|
+
async viewEngagements(thread: IMailboxContactEmail) {
|
|
484
|
+
PageNavigator.pushPage(EngagementDetails, thread);
|
|
485
|
+
}
|
|
486
|
+
|
|
474
487
|
@Action({
|
|
475
488
|
onEvent: "delete-draft",
|
|
476
489
|
confirm: "Are you sure you want to delete this draft?"
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { PopupWindowPage } from "@web-atoms/web-controls/dist/mobile-app/MobileApp";
|
|
2
|
+
import { IEmail, IMailboxContactEmail } from "../../../../model/model";
|
|
3
|
+
import XNode from "@web-atoms/core/dist/core/XNode";
|
|
4
|
+
import ToggleButtonBar from "@web-atoms/web-controls/dist/basic/ToggleButtonBar";
|
|
5
|
+
import AtomRepeater from "@web-atoms/web-controls/dist/basic/AtomRepeater";
|
|
6
|
+
import Bind from "@web-atoms/core/dist/core/Bind";
|
|
7
|
+
import InfiniteRepeater from "../../../../common/controls/repeater/InfiniteRepeater";
|
|
8
|
+
import InjectProperty from "@web-atoms/core/dist/core/InjectProperty";
|
|
9
|
+
import EngagementService from "../service/EngagementService";
|
|
10
|
+
import { DateFormats } from "../../../../common/date/DateFormats";
|
|
11
|
+
|
|
12
|
+
export default class EngagementDetails extends PopupWindowPage<IMailboxContactEmail> {
|
|
13
|
+
|
|
14
|
+
selectedEngagement = "";
|
|
15
|
+
|
|
16
|
+
emails: IEmail[] = [];
|
|
17
|
+
|
|
18
|
+
@InjectProperty
|
|
19
|
+
engagementService: EngagementService;
|
|
20
|
+
|
|
21
|
+
async init() {
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
const {
|
|
25
|
+
email: {
|
|
26
|
+
engagements,
|
|
27
|
+
emailID,
|
|
28
|
+
dateUpdated
|
|
29
|
+
},
|
|
30
|
+
emailAddressID,
|
|
31
|
+
mailboxID,
|
|
32
|
+
} = this.parameters;
|
|
33
|
+
|
|
34
|
+
this.title = "Responses";
|
|
35
|
+
|
|
36
|
+
this.selectedEngagement = engagements[0].engagement;
|
|
37
|
+
|
|
38
|
+
this.headerRenderer = () => <div>
|
|
39
|
+
<ToggleButtonBar
|
|
40
|
+
items={engagements}
|
|
41
|
+
labelPath={(x) => `${x.engagement} ${x.count}`}
|
|
42
|
+
valuePath={(x) => x.engagement}
|
|
43
|
+
value={Bind.twoWaysImmediate(() => this.selectedEngagement)}
|
|
44
|
+
/>
|
|
45
|
+
</div>;
|
|
46
|
+
|
|
47
|
+
this.renderer = <div>
|
|
48
|
+
<AtomRepeater
|
|
49
|
+
data-layout="data-grid"
|
|
50
|
+
items={this.emails}
|
|
51
|
+
{ ... InfiniteRepeater.pagedItems((start) =>
|
|
52
|
+
(c, e, cancelToken) => this.engagementService.list({
|
|
53
|
+
start,
|
|
54
|
+
engagement: this.selectedEngagement,
|
|
55
|
+
emailID,
|
|
56
|
+
emailAddressID,
|
|
57
|
+
mailboxID,
|
|
58
|
+
dateUpdated
|
|
59
|
+
})
|
|
60
|
+
)}
|
|
61
|
+
itemRenderer={(item: IEmail) => <div>
|
|
62
|
+
<div text={item.senderName}/>
|
|
63
|
+
<div text={item.engagement}/>
|
|
64
|
+
<div text={DateFormats.relative.short(item.dateReceived)}/>
|
|
65
|
+
</div>}
|
|
66
|
+
/>
|
|
67
|
+
</div>;
|
|
68
|
+
|
|
69
|
+
}
|
|
70
|
+
}
|
|
@@ -12,6 +12,7 @@ import DateTime from "@web-atoms/date-time/dist/DateTime";
|
|
|
12
12
|
import { CommonEvents } from "../../../../common/events/CommonEvents";
|
|
13
13
|
import BusyProgress from "../../../../services/BusyProgress";
|
|
14
14
|
import EmailContentDownloader from "../../../../services/email/EmailContentDownloader";
|
|
15
|
+
import EngagementService from "./EngagementService";
|
|
15
16
|
|
|
16
17
|
export const renderMail = AtomControl.registerProperty("data-html", "html", (c, e, value) => {
|
|
17
18
|
if (!value) {
|
|
@@ -111,6 +112,9 @@ export default class ConversationService {
|
|
|
111
112
|
@Inject
|
|
112
113
|
private emailContentDownloader: EmailContentDownloader;
|
|
113
114
|
|
|
115
|
+
@Inject
|
|
116
|
+
private engagementService: EngagementService;
|
|
117
|
+
|
|
114
118
|
public async getDraft({ mailboxID, emailAddressID, email }: IMailboxContactEmail) {
|
|
115
119
|
const draft = "draft";
|
|
116
120
|
return await this.entityService.query(MailboxContactEmail)
|
|
@@ -208,6 +212,7 @@ export default class ConversationService {
|
|
|
208
212
|
email.textBody ??= "";
|
|
209
213
|
|
|
210
214
|
tasks.push(this.downloadEmailContent(email));
|
|
215
|
+
tasks.push(this.engagementService.downloadEngagements(email));
|
|
211
216
|
}
|
|
212
217
|
await Promise.all(tasks);
|
|
213
218
|
} finally {
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import DITransient from "@web-atoms/core/dist/di/DITransient";
|
|
2
|
+
import { Inject } from "@web-atoms/core/dist/di/Inject";
|
|
3
|
+
import EntityService from "../../../../services/EntityService";
|
|
4
|
+
import { Email, EmailEngagement, IEmail, MailboxContactEmail } from "../../../../model/model";
|
|
5
|
+
import { CacheTTL } from "../../../../common/cache/CacheTTL";
|
|
6
|
+
import DateTime from "@web-atoms/date-time/dist/DateTime";
|
|
7
|
+
import EmailContentDownloader from "../../../../services/email/EmailContentDownloader";
|
|
8
|
+
import DISingleton from "@web-atoms/core/dist/di/DISingleton";
|
|
9
|
+
|
|
10
|
+
const cacheSeconds = CacheTTL.seconds.oneMonth;
|
|
11
|
+
|
|
12
|
+
@DISingleton()
|
|
13
|
+
export default class EngagementService {
|
|
14
|
+
|
|
15
|
+
@Inject
|
|
16
|
+
entityService: EntityService;
|
|
17
|
+
|
|
18
|
+
@Inject
|
|
19
|
+
emailContentDownloder: EmailContentDownloader;
|
|
20
|
+
|
|
21
|
+
async downloadEngagements(email: IEmail) {
|
|
22
|
+
|
|
23
|
+
try {
|
|
24
|
+
const { emailID } = email;
|
|
25
|
+
|
|
26
|
+
let now = DateTime.now;
|
|
27
|
+
const minute = Math.floor(now.minute / 5);
|
|
28
|
+
now = now.addMinutes(-minute);
|
|
29
|
+
|
|
30
|
+
const cacheVersion = email.dateUpdated ? DateTime.from(email.dateUpdated).msSinceEpoch.toString(36) : "-";
|
|
31
|
+
|
|
32
|
+
email.engagements = await this.entityService.query(EmailEngagement)
|
|
33
|
+
.where({ emailID }, (p) => (x) => x.emailID === p.emailID)
|
|
34
|
+
.toArray({
|
|
35
|
+
cacheVersion,
|
|
36
|
+
cacheSeconds: 300
|
|
37
|
+
});
|
|
38
|
+
} catch (error) {
|
|
39
|
+
console.error(error);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
async list({
|
|
44
|
+
start = 0,
|
|
45
|
+
size = 50,
|
|
46
|
+
engagement = "",
|
|
47
|
+
emailID = 0,
|
|
48
|
+
mailboxID = 0,
|
|
49
|
+
emailAddressID = 0,
|
|
50
|
+
dateUpdated = null
|
|
51
|
+
}) {
|
|
52
|
+
const q = this.entityService.query(Email)
|
|
53
|
+
.where({ mailboxID, emailAddressID, engagement, emailID}, (p) =>
|
|
54
|
+
(x) => x.engagement === p.engagement
|
|
55
|
+
&& x.parentID === p.emailID
|
|
56
|
+
);
|
|
57
|
+
|
|
58
|
+
const cacheVersion = dateUpdated ? DateTime.from(dateUpdated).msSinceEpoch.toString(36) : "-";
|
|
59
|
+
|
|
60
|
+
const list = await q.toPagedList(
|
|
61
|
+
{ start, size, cacheVersion , cacheSeconds }
|
|
62
|
+
);
|
|
63
|
+
|
|
64
|
+
await Promise.all(list.items.map((x) => this.emailContentDownloder.download(x)));
|
|
65
|
+
|
|
66
|
+
return list;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
}
|