@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.
Files changed (43) hide show
  1. package/dist/admin/AdminAppIndex.pack.js +320 -159
  2. package/dist/admin/AdminAppIndex.pack.js.map +1 -1
  3. package/dist/admin/AdminAppIndex.pack.min.js +41 -41
  4. package/dist/admin/AdminAppIndex.pack.min.js.map +1 -1
  5. package/dist/public/channel/ChannelView.pack.js +118 -33
  6. package/dist/public/channel/ChannelView.pack.js.map +1 -1
  7. package/dist/public/channel/ChannelView.pack.min.js +2 -2
  8. package/dist/public/channel/ChannelView.pack.min.js.map +1 -1
  9. package/dist/services/email/EmailContentDownloader.d.ts +0 -2
  10. package/dist/services/email/EmailContentDownloader.d.ts.map +1 -1
  11. package/dist/services/email/EmailContentDownloader.js +2 -30
  12. package/dist/services/email/EmailContentDownloader.js.map +1 -1
  13. package/dist/tsconfig.tsbuildinfo +1 -1
  14. package/dist/web/AppIndex.pack.js +320 -159
  15. package/dist/web/AppIndex.pack.js.map +1 -1
  16. package/dist/web/AppIndex.pack.min.js +41 -41
  17. package/dist/web/AppIndex.pack.min.js.map +1 -1
  18. package/dist/web/page/mails/ConversationPage.d.ts +1 -0
  19. package/dist/web/page/mails/ConversationPage.d.ts.map +1 -1
  20. package/dist/web/page/mails/ConversationPage.js +16 -3
  21. package/dist/web/page/mails/ConversationPage.js.map +1 -1
  22. package/dist/web/page/mails/engagements/EngagementDetails.d.ts +10 -0
  23. package/dist/web/page/mails/engagements/EngagementDetails.d.ts.map +1 -0
  24. package/dist/web/page/mails/engagements/EngagementDetails.js +82 -0
  25. package/dist/web/page/mails/engagements/EngagementDetails.js.map +1 -0
  26. package/dist/web/page/mails/mini-compose/MiniComposeBox.d.ts.map +1 -1
  27. package/dist/web/page/mails/mini-compose/MiniComposeBox.js +0 -1
  28. package/dist/web/page/mails/mini-compose/MiniComposeBox.js.map +1 -1
  29. package/dist/web/page/mails/service/ConversationService.d.ts +1 -0
  30. package/dist/web/page/mails/service/ConversationService.d.ts.map +1 -1
  31. package/dist/web/page/mails/service/ConversationService.js +6 -2
  32. package/dist/web/page/mails/service/ConversationService.js.map +1 -1
  33. package/dist/web/page/mails/service/EngagementService.d.ts +18 -0
  34. package/dist/web/page/mails/service/EngagementService.d.ts.map +1 -0
  35. package/dist/web/page/mails/service/EngagementService.js +85 -0
  36. package/dist/web/page/mails/service/EngagementService.js.map +1 -0
  37. package/package.json +1 -1
  38. package/src/services/email/EmailContentDownloader.ts +0 -50
  39. package/src/web/page/mails/ConversationPage.tsx +15 -2
  40. package/src/web/page/mails/engagements/EngagementDetails.tsx +70 -0
  41. package/src/web/page/mails/mini-compose/MiniComposeBox.tsx +0 -1
  42. package/src/web/page/mails/service/ConversationService.tsx +5 -0
  43. 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":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@social-mail/social-mail-client",
3
- "version": "1.2.85",
3
+ "version": "1.2.86",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -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) => <span text={`${x.engagement} ${x.count}`}/>)}
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="fad fa-face-smile-plus" title="React"/>
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
+ }
@@ -127,7 +127,6 @@ export default class MiniComposeBox extends AtomControl {
127
127
  <ToggleEmoji/>
128
128
  </Toolbar>
129
129
  <input
130
- autofocus={true}
131
130
  style-place-self="stretch"
132
131
  style-margin-left="5px"
133
132
  style-margin-right="5px"
@@ -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
+ }