@social-mail/social-mail-client 1.2.84 → 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 +338 -161
- 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 +338 -161
- package/dist/web/AppIndex.pack.js.map +1 -1
- package/dist/web/AppIndex.pack.min.js +42 -42
- 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 +1 -0
- package/dist/web/page/mails/mini-compose/MiniComposeBox.d.ts.map +1 -1
- package/dist/web/page/mails/mini-compose/MiniComposeBox.js +17 -2
- 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/dist/web/page/mails/service/MailService.js +1 -1
- package/dist/web/page/mails/service/MailService.js.map +1 -1
- 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 +34 -15
- package/src/web/page/mails/service/ConversationService.tsx +5 -0
- package/src/web/page/mails/service/EngagementService.tsx +69 -0
- package/src/web/page/mails/service/MailService.ts +1 -1
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
System.register(["tslib", "@web-atoms/core/dist/di/Inject", "../../../../services/EntityService", "../../../../model/model", "../../../../common/cache/CacheTTL", "@web-atoms/date-time/dist/DateTime", "../../../../services/email/EmailContentDownloader", "@web-atoms/core/dist/di/DISingleton"], function (_export, _context) {
|
|
2
|
+
"use strict";
|
|
3
|
+
|
|
4
|
+
var __awaiter, __decorate, __metadata, Inject, EntityService, Email, EmailEngagement, CacheTTL, DateTime, EmailContentDownloader, DISingleton, cacheSeconds, EngagementService;
|
|
5
|
+
return {
|
|
6
|
+
setters: [function (_tslib) {
|
|
7
|
+
__awaiter = _tslib.__awaiter;
|
|
8
|
+
__decorate = _tslib.__decorate;
|
|
9
|
+
__metadata = _tslib.__metadata;
|
|
10
|
+
}, function (_webAtomsCoreDistDiInject) {
|
|
11
|
+
Inject = _webAtomsCoreDistDiInject.Inject;
|
|
12
|
+
}, function (_servicesEntityService) {
|
|
13
|
+
EntityService = _servicesEntityService.default;
|
|
14
|
+
}, function (_modelModel) {
|
|
15
|
+
Email = _modelModel.Email;
|
|
16
|
+
EmailEngagement = _modelModel.EmailEngagement;
|
|
17
|
+
}, function (_commonCacheCacheTTL) {
|
|
18
|
+
CacheTTL = _commonCacheCacheTTL.CacheTTL;
|
|
19
|
+
}, function (_webAtomsDateTimeDistDateTime) {
|
|
20
|
+
DateTime = _webAtomsDateTimeDistDateTime.default;
|
|
21
|
+
}, function (_servicesEmailEmailContentDownloader) {
|
|
22
|
+
EmailContentDownloader = _servicesEmailEmailContentDownloader.default;
|
|
23
|
+
}, function (_webAtomsCoreDistDiDISingleton) {
|
|
24
|
+
DISingleton = _webAtomsCoreDistDiDISingleton.default;
|
|
25
|
+
}],
|
|
26
|
+
execute: function () {
|
|
27
|
+
cacheSeconds = CacheTTL.seconds.oneMonth;
|
|
28
|
+
EngagementService = class EngagementService {
|
|
29
|
+
downloadEngagements(email) {
|
|
30
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
31
|
+
try {
|
|
32
|
+
const {
|
|
33
|
+
emailID
|
|
34
|
+
} = email;
|
|
35
|
+
let now = DateTime.now;
|
|
36
|
+
const minute = Math.floor(now.minute / 5);
|
|
37
|
+
now = now.addMinutes(-minute);
|
|
38
|
+
const cacheVersion = email.dateUpdated ? DateTime.from(email.dateUpdated).msSinceEpoch.toString(36) : "-";
|
|
39
|
+
email.engagements = yield this.entityService.query(EmailEngagement).where({
|
|
40
|
+
emailID
|
|
41
|
+
}, p => x => x.emailID === p.emailID).toArray({
|
|
42
|
+
cacheVersion,
|
|
43
|
+
cacheSeconds: 300
|
|
44
|
+
});
|
|
45
|
+
} catch (error) {
|
|
46
|
+
console.error(error);
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
list({
|
|
51
|
+
start = 0,
|
|
52
|
+
size = 50,
|
|
53
|
+
engagement = "",
|
|
54
|
+
emailID = 0,
|
|
55
|
+
mailboxID = 0,
|
|
56
|
+
emailAddressID = 0,
|
|
57
|
+
dateUpdated = null
|
|
58
|
+
}) {
|
|
59
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
60
|
+
const q = this.entityService.query(Email).where({
|
|
61
|
+
mailboxID,
|
|
62
|
+
emailAddressID,
|
|
63
|
+
engagement,
|
|
64
|
+
emailID
|
|
65
|
+
}, p => x => x.engagement === p.engagement && x.parentID === p.emailID);
|
|
66
|
+
const cacheVersion = dateUpdated ? DateTime.from(dateUpdated).msSinceEpoch.toString(36) : "-";
|
|
67
|
+
const list = yield q.toPagedList({
|
|
68
|
+
start,
|
|
69
|
+
size,
|
|
70
|
+
cacheVersion,
|
|
71
|
+
cacheSeconds
|
|
72
|
+
});
|
|
73
|
+
yield Promise.all(list.items.map(x => this.emailContentDownloder.download(x)));
|
|
74
|
+
return list;
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
__decorate([Inject, __metadata("design:type", EntityService)], EngagementService.prototype, "entityService", void 0);
|
|
79
|
+
__decorate([Inject, __metadata("design:type", EmailContentDownloader)], EngagementService.prototype, "emailContentDownloder", void 0);
|
|
80
|
+
EngagementService = __decorate([DISingleton()], EngagementService);
|
|
81
|
+
_export("default", EngagementService);
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
});
|
|
85
|
+
//# sourceMappingURL=EngagementService.js.map
|
|
@@ -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"}
|
|
@@ -88,7 +88,7 @@ System.register(["tslib", "@web-atoms/core/dist/di/DISingleton", "@web-atoms/cor
|
|
|
88
88
|
if (!line.trim()) {
|
|
89
89
|
continue;
|
|
90
90
|
}
|
|
91
|
-
email.subject || (email.subject = line.substring(0, 80));
|
|
91
|
+
email.subject || (email.subject = line.trim().substring(0, 80));
|
|
92
92
|
break;
|
|
93
93
|
}
|
|
94
94
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["DISingleton","_webAtomsCoreDistDiDISingleton","default","_webAtomsCoreDistDiInject","Inject","_servicesEntityService","EntityService","_modelModel","AppFile","Mailbox","MailboxContact","UserPushSubscription","_commonSql","Sql","_commonEventsCommonEvents","CommonEvents","execute","MailService","mailbox","mailboxID","mb","entityService","query","where","p","x","include","emailAddress","firstOrDefault","notify","emailAddressID","list","search","start","size","version","showBlocked","cancelToken","q","blocked","orderByDescending","dateUpdated","likeSearch","text","iLike","lastEmail","textBody","subject","name","senderName","toPagedList","raw","email","originalFileID","file","appFileID","rs","fetch","url","send","lines","split","line","trim","substring","iterator","recipients","emailAddressText","cloner","attachments","copy","save","onEmailScheduled","dispatchEvent","deleteAttachment","create","$deleted","onFileDeleted","__decorate","_export"],"sources":["../../../../../src/web/page/mails/service/MailService.ts"],"sourcesContent":[null],"mappings":";;;;;;;;;;MAAOA,WAAW,GAAAC,8BAAA,CAAAC,OAAA;IAAA,aAAAC,yBAAA;MACTC,MAAM,GAAAD,yBAAA,CAANC,MAAM;IAAA,aAAAC,sBAAA;MACRC,aAAa,GAAAD,sBAAA,CAAAH,OAAA;IAAA,aAAAK,WAAA;MACXC,OAAO,GAAAD,WAAA,CAAPC,OAAO;MAAyCC,OAAO,GAAAF,WAAA,CAAPE,OAAO;MAAEC,cAAc,GAAAH,WAAA,CAAdG,cAAc;MAAEC,oBAAoB,GAAAJ,WAAA,CAApBI,oBAAoB;IAAA,aAAAC,UAAA;MAC7FC,GAAG,GAAAD,UAAA,CAAHC,GAAG;IAAA,aAAAC,yBAAA;MACHC,YAAY,GAAAD,yBAAA,CAAZC,YAAY;IAAA;IAAAC,OAAA,WAAAA,CAAA;MAGAC,WAAW,GAAjB,MAAMA,WAAW;QAKtBC,OAAOA,CAACC,SAAiB;;YAC3B,MAAMC,EAAE,GAAG,MAAM,IAAI,CAACC,aAAa,CAACC,KAAK,CAACb,OAAO,CAAC,CAC7Cc,KAAK,CAAC;cAAEJ;YAAS,CAAE,EAAGK,CAAC,IAAMC,CAAC,IAAKA,CAAC,CAACN,SAAS,KAAKK,CAAC,CAACL,SAAS,CAAC,CAC/DO,OAAO,CAAED,CAAC,IAAKA,CAAC,CAACE,YAAY,CAAC,CAC9BC,cAAc,EAAE;YACrB,MAAMC,MAAM,GAAG,MAAM,IAAI,CAACR,aAAa,CAACC,KAAK,CAACX,oBAAoB,CAAC,CAC9DY,KAAK,CAAC;cAAEJ;YAAS,CAAE,EAAGK,CAAC,IAAMC,CAAC,IAAKA,CAAC,CAACN,SAAS,KAAKK,CAAC,CAACL,SAAS,IAAIM,CAAC,CAACK,cAAc,KAAK,IAAI,CAAC,CAC5FF,cAAc,EAAE;YACrBR,EAAE,CAACS,MAAM,GAAG,CAAC,CAACA,MAAM;YACpB,OAAOT,EAAE;UACb,CAAC;;QAEKW,IAAIA,CAAC;UACPC,MAAM,GAAG,EAAE;UACXb,SAAS;UACTc,KAAK,GAAG,CAAC;UACTC,IAAI,GAAG,EAAE;UACTC,OAAO,GAAG,CAAC;UACXC,WAAW,GAAG,KAAK;UACnBC;QAAW,CACd;;YACG,IAAIC,CAAC,GAAG,IAAI,CAACjB,aAAa,CAACC,KAAK,CAACZ,cAAc,CAAC,CAC3Ca,KAAK,CAAC;cAAEJ,SAAS;cAAEiB;YAAW,CAAE,EAAGZ,CAAC,IAAMC,CAAC,IAAKA,CAAC,CAACN,SAAS,KAAKK,CAAC,CAACL,SAAS,IAAIM,CAAC,CAACc,OAAO,KAAKf,CAAC,CAACY,WAAW,CAAC,CAC3GI,iBAAiB,CAAEf,CAAC,IAAKA,CAAC,CAACgB,WAAW,CAAC;YAC5C,IAAIT,MAAM,EAAE;cACR,MAAMU,UAAU,GAAG,IAAIV,MAAM,GAAG;cAChCM,CAAC,GAAGA,CAAC,CAACf,KAAK,CAAC;gBAAES,MAAM;gBAAEU;cAAU,CAAE,EAAGlB,CAAC,IAAMC,CAAC,IAAKA,CAAC,CAACE,YAAY,CAACA,YAAY,KAAKH,CAAC,CAACQ,MAAM,IACnFnB,GAAG,CAAC8B,IAAI,CAACC,KAAK,CAACnB,CAAC,CAACoB,SAAS,CAACC,QAAQ,EAAEtB,CAAC,CAACkB,UAAU,CAAC,IAClD7B,GAAG,CAAC8B,IAAI,CAACC,KAAK,CAACnB,CAAC,CAACoB,SAAS,CAACE,OAAO,EAAEvB,CAAC,CAACkB,UAAU,CAAC,IACjD7B,GAAG,CAAC8B,IAAI,CAACC,KAAK,CAACnB,CAAC,CAACE,YAAY,CAACqB,IAAI,EAAExB,CAAC,CAACkB,UAAU,CAAC,IACjD7B,GAAG,CAAC8B,IAAI,CAACC,KAAK,CAACnB,CAAC,CAACoB,SAAS,CAACI,UAAU,EAAEzB,CAAC,CAACkB,UAAU,CAAC,CAC1D;;YAEL,OAAOJ,CAAC,CACHZ,OAAO,CAAED,CAAC,IAAK,CAAEA,CAAC,CAACE,YAAY,EAAEF,CAAC,CAACoB,SAAS,CAAE,CAAC,CAC/CK,WAAW,CAAC;cAAEjB,KAAK;cAAEC,IAAI;cAAEG;YAAW,CAAE,CAAC;UAClD,CAAC;;QAEKc,GAAGA,CAACC,KAAa;;YACnB,MAAM;cAAEC;YAAc,CAAE,GAAGD,KAAK;YAChC,MAAME,IAAI,GAAG,MAAM,IAAI,CAACjC,aAAa,CAACC,KAAK,CAACd,OAAO,CAAC,CAACe,KAAK,CAAC;cAAE8B;YAAc,CAAE,EAAG7B,CAAC,IAAMC,CAAC,IAAKA,CAAC,CAAC8B,SAAS,KAAK/B,CAAC,CAAC6B,cAAc,CAAC,CAACzB,cAAc,EAAE;YAC/I,MAAM4B,EAAE,GAAG,MAAMC,KAAK,CAACH,IAAI,CAACI,GAAG,CAAC;YAChC,OAAO,MAAMF,EAAE,CAACb,IAAI,EAAE;UAC1B,CAAC;;QAEKgB,IAAIA,CAACP,KAAa;;YACpB,MAAM;cAAEN;YAAQ,CAAE,GAAGM,KAAK;YAC1B,IAAIN,QAAQ,IAAI,CAACM,KAAK,CAACL,OAAO,EAAG;cAC7B,MAAMa,KAAK,GAAGd,QAAQ,CAACe,KAAK,CAAC,IAAI,CAAC;cAClC,KAAK,MAAMC,IAAI,IAAIF,KAAK,EAAE;gBACtB,IAAI,CAACE,IAAI,CAACC,IAAI,EAAE,EAAE;kBACd;;gBAEJX,KAAK,CAACL,OAAO,KAAbK,KAAK,CAACL,OAAO,GAAKe,IAAI,
|
|
1
|
+
{"version":3,"names":["DISingleton","_webAtomsCoreDistDiDISingleton","default","_webAtomsCoreDistDiInject","Inject","_servicesEntityService","EntityService","_modelModel","AppFile","Mailbox","MailboxContact","UserPushSubscription","_commonSql","Sql","_commonEventsCommonEvents","CommonEvents","execute","MailService","mailbox","mailboxID","mb","entityService","query","where","p","x","include","emailAddress","firstOrDefault","notify","emailAddressID","list","search","start","size","version","showBlocked","cancelToken","q","blocked","orderByDescending","dateUpdated","likeSearch","text","iLike","lastEmail","textBody","subject","name","senderName","toPagedList","raw","email","originalFileID","file","appFileID","rs","fetch","url","send","lines","split","line","trim","substring","iterator","recipients","emailAddressText","cloner","attachments","copy","save","onEmailScheduled","dispatchEvent","deleteAttachment","create","$deleted","onFileDeleted","__decorate","_export"],"sources":["../../../../../src/web/page/mails/service/MailService.ts"],"sourcesContent":[null],"mappings":"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"}
|
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
|
+
}
|
|
@@ -84,6 +84,8 @@ export default class MiniComposeBox extends AtomControl {
|
|
|
84
84
|
|
|
85
85
|
private editor: InlineHtmlEditor;
|
|
86
86
|
|
|
87
|
+
private prevSave: Promise<any>;
|
|
88
|
+
|
|
87
89
|
constructor(app, e) {
|
|
88
90
|
super(app, e);
|
|
89
91
|
this.element.className = css;
|
|
@@ -109,20 +111,32 @@ export default class MiniComposeBox extends AtomControl {
|
|
|
109
111
|
|
|
110
112
|
this.render(<div>
|
|
111
113
|
<MailHtmlEditor
|
|
112
|
-
toolbar={() => <div
|
|
113
|
-
<
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
114
|
+
toolbar={() => <div>
|
|
115
|
+
<Toolbar>
|
|
116
|
+
<Insert/>
|
|
117
|
+
<Separator/>
|
|
118
|
+
<Bold/>
|
|
119
|
+
<Italic/>
|
|
120
|
+
<Underline/>
|
|
121
|
+
<StrikeThrough/>
|
|
122
|
+
<Align alignment="above"/>
|
|
123
|
+
<Separator/>
|
|
124
|
+
<AddLink/>
|
|
125
|
+
<Unlink/>
|
|
126
|
+
<Separator/>
|
|
127
|
+
<ToggleEmoji/>
|
|
128
|
+
</Toolbar>
|
|
129
|
+
<input
|
|
130
|
+
style-place-self="stretch"
|
|
131
|
+
style-margin-left="5px"
|
|
132
|
+
style-margin-right="5px"
|
|
133
|
+
style-padding-left="10px"
|
|
134
|
+
style-padding-right="5px"
|
|
135
|
+
style-outline="none"
|
|
136
|
+
style-border="none"
|
|
137
|
+
placeholder="Subject ... "
|
|
138
|
+
value={Bind.sourceTwoWays(this, (x) => x.source.draft.subject)}/>
|
|
139
|
+
</div>}
|
|
126
140
|
data-element="editor"
|
|
127
141
|
data-html-editor="email-editor"
|
|
128
142
|
presenter={Bind.presenter((c) => this.editor = c )}
|
|
@@ -184,13 +198,17 @@ export default class MiniComposeBox extends AtomControl {
|
|
|
184
198
|
if (!this.editor?.htmlTextContent) {
|
|
185
199
|
return;
|
|
186
200
|
}
|
|
201
|
+
if (this.prevSave) {
|
|
202
|
+
await this.prevSave;
|
|
203
|
+
}
|
|
187
204
|
this.draft ??= Email.create({
|
|
188
205
|
attachments: []
|
|
189
206
|
});
|
|
190
207
|
const { html , text } = this.editor.htmlTextContent;
|
|
191
208
|
this.draft.htmlBody = html;
|
|
192
209
|
this.draft.textBody = text;
|
|
193
|
-
|
|
210
|
+
this.prevSave = this.save();
|
|
211
|
+
await this.prevSave;
|
|
194
212
|
}
|
|
195
213
|
|
|
196
214
|
@Action({ onEvent: CommonEvents.onEmailUnscheduled})
|
|
@@ -218,6 +236,7 @@ export default class MiniComposeBox extends AtomControl {
|
|
|
218
236
|
this.draft.dateSent = DateTime.now.add(TimeSpan.fromSeconds(30));
|
|
219
237
|
await this.mailService.send(this.draft);
|
|
220
238
|
this.draft = Email.create({
|
|
239
|
+
subject: "",
|
|
221
240
|
htmlBody: `<div contentEditable="true"><p></p><br/></div>`,
|
|
222
241
|
attachments: []
|
|
223
242
|
});
|
|
@@ -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
|
+
}
|