@social-mail/social-mail-client 1.2.308 → 1.2.310

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 +461 -23
  2. package/dist/admin/AdminAppIndex.pack.js.map +1 -1
  3. package/dist/admin/AdminAppIndex.pack.min.js +6 -6
  4. package/dist/admin/AdminAppIndex.pack.min.js.map +1 -1
  5. package/dist/model/model.d.ts +76 -4
  6. package/dist/model/model.d.ts.map +1 -1
  7. package/dist/model/model.js +356 -16
  8. package/dist/model/model.js.map +1 -1
  9. package/dist/public/channel/ChannelView.pack.js +397 -19
  10. package/dist/public/channel/ChannelView.pack.js.map +1 -1
  11. package/dist/public/channel/ChannelView.pack.min.js +3 -3
  12. package/dist/public/channel/ChannelView.pack.min.js.map +1 -1
  13. package/dist/public/store/Store.pack.js +356 -16
  14. package/dist/public/store/Store.pack.js.map +1 -1
  15. package/dist/public/store/Store.pack.min.js +1 -1
  16. package/dist/public/store/Store.pack.min.js.map +1 -1
  17. package/dist/tsconfig.tsbuildinfo +1 -1
  18. package/dist/web/AppIndex.pack.js +461 -23
  19. package/dist/web/AppIndex.pack.js.map +1 -1
  20. package/dist/web/AppIndex.pack.min.js +6 -6
  21. package/dist/web/AppIndex.pack.min.js.map +1 -1
  22. package/dist/web/commands/MailAppEvents.d.ts +6 -0
  23. package/dist/web/commands/MailAppEvents.d.ts.map +1 -0
  24. package/dist/web/commands/MailAppEvents.js +16 -0
  25. package/dist/web/commands/MailAppEvents.js.map +1 -0
  26. package/dist/web/page/mails/ConversationPage.d.ts +3 -0
  27. package/dist/web/page/mails/ConversationPage.d.ts.map +1 -1
  28. package/dist/web/page/mails/ConversationPage.js +53 -2
  29. package/dist/web/page/mails/ConversationPage.js.map +1 -1
  30. package/dist/web/page/mails/MailboxContacts.d.ts +2 -0
  31. package/dist/web/page/mails/MailboxContacts.d.ts.map +1 -1
  32. package/dist/web/page/mails/MailboxContacts.js +11 -2
  33. package/dist/web/page/mails/MailboxContacts.js.map +1 -1
  34. package/dist/web/page/mails/service/ConversationService.d.ts +2 -0
  35. package/dist/web/page/mails/service/ConversationService.d.ts.map +1 -1
  36. package/dist/web/page/mails/service/ConversationService.js +21 -2
  37. package/dist/web/page/mails/service/ConversationService.js.map +1 -1
  38. package/package.json +1 -1
  39. package/src/model/model.ts +112 -10
  40. package/src/web/commands/MailAppEvents.ts +8 -0
  41. package/src/web/page/mails/ConversationPage.tsx +54 -1
  42. package/src/web/page/mails/MailboxContacts.tsx +8 -0
  43. package/src/web/page/mails/service/ConversationService.tsx +16 -0
@@ -336,15 +336,13 @@ export interface ICachedItem extends IClrEntity {
336
336
  expiry?: DateTime;
337
337
  ready?: boolean;
338
338
  slide?: boolean;
339
- lockToken?: string | null;
340
- lockExpiry?: DateTime | null;
341
339
  }
342
340
 
343
341
  export const CachedItem: IModel<ICachedItem> = new Model<ICachedItem>(
344
342
  "CachedItem",
345
- ["itemID","keyHash"],
346
- { key: "",expiry: new DefaultFactory(() => new DateTime()),ready: false,slide: false },
347
- {"name":"cached_item","keys":[{"name":"itemID","type":"number","generated":"identity"},{"name":"keyHash","type":"string"}],"properties":[{"name":"key","type":"string","default":["key","\"\""]},{"name":"expiry","type":"DateTime","default":["expiry","new DefaultFactory(() => new DateTime())"]},{"name":"ready","type":"boolean","default":["ready","false"]},{"name":"slide","type":"boolean","default":["slide","false"]},{"name":"lockToken","type":"string","default":["lockToken","\"\""]},{"name":"lockExpiry","type":"DateTime","default":["lockExpiry","new DefaultFactory(() => new DateTime())"]}],"relations":[]}
343
+ ["itemID"],
344
+ { keyHash: "",key: "",expiry: new DefaultFactory(() => new DateTime()),ready: false,slide: false },
345
+ {"name":"cached_item","keys":[{"name":"itemID","type":"number","generated":"identity"}],"properties":[{"name":"keyHash","type":"string","default":["keyHash","\"\""]},{"name":"key","type":"string","default":["key","\"\""]},{"name":"expiry","type":"DateTime","default":["expiry","new DefaultFactory(() => new DateTime())"]},{"name":"ready","type":"boolean","default":["ready","false"]},{"name":"slide","type":"boolean","default":["slide","false"]}],"relations":[]}
348
346
  );
349
347
  modelEntitySchemas["CachedItem"] = CachedItem;
350
348
 
@@ -462,13 +460,15 @@ export interface IEmail extends IClrEntity {
462
460
  userID?: number | null;
463
461
  readonly received?: boolean;
464
462
  headers?: string | null;
463
+ hasUnsubscribe?: boolean;
465
464
  headerMessageID?: string | null;
465
+ inReplyTo?: string | null;
466
466
  externalEmailID?: string | null;
467
467
  dateReceived?: DateTime;
468
468
  dateCreated?: DateTime;
469
469
  dateSent?: DateTime | null;
470
470
  dateUpdated?: DateTime | null;
471
- status?: "queued" | "received" | "draft" | "published" | "pending-approval" | "scheduled" | "sent" | "sent-failed" | "deleted";
471
+ status?: "queued" | "received" | "draft" | "published" | "pending-approval" | "scheduled" | "sent" | "sent-failed" | "deleted" | "closed";
472
472
  forwardCount?: number;
473
473
  replyCount?: number;
474
474
  viewCount?: number;
@@ -481,7 +481,7 @@ export interface IEmail extends IClrEntity {
481
481
  parentID?: number | null;
482
482
  threadID?: number | null;
483
483
  forwardedID?: number | null;
484
- closed?: DateTime | null;
484
+ lastReplyID?: number | null;
485
485
  engagement?: string | null;
486
486
  tags?: string | null;
487
487
  senderEmail?: IEmailAddress;
@@ -495,6 +495,8 @@ export interface IEmail extends IClrEntity {
495
495
  threadChildren?: ICollection<IEmail>;
496
496
  forwarded?: IEmail;
497
497
  forwards?: ICollection<IEmail>;
498
+ lastReply?: IEmail;
499
+ lastRepliedThreads?: ICollection<IEmail>;
498
500
  attachments?: ICollection<IAppFile>;
499
501
  engagements?: ICollection<IEmailEngagement>;
500
502
  recipients?: ICollection<IEmailRecipient>;
@@ -505,13 +507,13 @@ export interface IEmail extends IClrEntity {
505
507
  subscriberActivities?: ICollection<ISubscriberActivity>;
506
508
  }
507
509
 
508
- export const EmailStatusArray = [{"label":"queued","value":"queued"},{"label":"received","value":"received"},{"label":"draft","value":"draft"},{"label":"published","value":"published"},{"label":"pending-approval","value":"pending-approval"},{"label":"scheduled","value":"scheduled"},{"label":"sent","value":"sent"},{"label":"sent-failed","value":"sent-failed"},{"label":"deleted","value":"deleted"}];
510
+ export const EmailStatusArray = [{"label":"queued","value":"queued"},{"label":"received","value":"received"},{"label":"draft","value":"draft"},{"label":"published","value":"published"},{"label":"pending-approval","value":"pending-approval"},{"label":"scheduled","value":"scheduled"},{"label":"sent","value":"sent"},{"label":"sent-failed","value":"sent-failed"},{"label":"deleted","value":"deleted"},{"label":"closed","value":"closed"}];
509
511
 
510
512
  export const Email: IModel<IEmail> = new Model<IEmail>(
511
513
  "Email",
512
514
  ["emailID"],
513
- { senderName: "",received: false,dateReceived: new DefaultFactory(() => new DateTime()),dateCreated: new DefaultFactory(() => new DateTime()),status: "queued",forwardCount: 0,replyCount: 0,viewCount: 0,emailSize: 0,originalFileSize: 0 },
514
- {"name":"emails","keys":[{"name":"emailID","type":"number","generated":"identity"}],"properties":[{"name":"subject","type":"string","default":["subject","\"\""]},{"name":"summary","type":"string","default":["summary","\"\""]},{"name":"textBody","type":"string","default":["textBody","\"\""]},{"name":"htmlBody","type":"string","default":["htmlBody","\"\""]},{"name":"senderName","type":"string","default":["senderName","\"\""]},{"name":"senderID","type":"number"},{"name":"userID","type":"number"},{"name":"received","type":"boolean","default":["received","false"]},{"name":"headers","type":"string","default":["headers","\"\""]},{"name":"headerMessageID","type":"string","default":["headerMessageID","\"\""]},{"name":"externalEmailID","type":"string","default":["externalEmailID","\"\""]},{"name":"dateReceived","type":"DateTime","default":["dateReceived","new DefaultFactory(() => new DateTime())"]},{"name":"dateCreated","type":"DateTime","default":["dateCreated","new DefaultFactory(() => new DateTime())"]},{"name":"dateSent","type":"DateTime","default":["dateSent","new DefaultFactory(() => new DateTime())"]},{"name":"dateUpdated","type":"DateTime","default":["dateUpdated","new DefaultFactory(() => new DateTime())"]},{"name":"status","type":"string","default":["status","\"queued\""]},{"name":"forwardCount","type":"number","default":["forwardCount","0"]},{"name":"replyCount","type":"number","default":["replyCount","0"]},{"name":"viewCount","type":"number","default":["viewCount","0"]},{"name":"mimeFileID","type":"number"},{"name":"sentMessageID","type":"string","default":["sentMessageID","\"\""]},{"name":"htmlBodyID","type":"number"},{"name":"emailSize","type":"number","default":["emailSize","0"]},{"name":"originalFileSize","type":"number","default":["originalFileSize","0"]},{"name":"workflowID","type":"string","default":["workflowID","\"\""]},{"name":"parentID","type":"number"},{"name":"threadID","type":"number"},{"name":"forwardedID","type":"number"},{"name":"closed","type":"DateTime","default":["closed","new DefaultFactory(() => new DateTime())"]},{"name":"engagement","type":"string","default":["engagement","\"\""]},{"name":"tags","type":"string","default":["tags","\"\""]}],"relations":[{"name":"senderEmail","fkMap":[{"fk":"senderID","relatedKey":"emailAddressID"}],"relatedName":"EmailAddress"},{"name":"senderUser","fkMap":[{"fk":"userID","relatedKey":"userID"}],"relatedName":"User"},{"name":"mimeFile","fkMap":[{"fk":"mimeFileID","relatedKey":"logID"}],"relatedName":"EmailLog"},{"name":"logs","isCollection":true,"isInverse":true,"relatedName":"EmailLog"},{"name":"htmlBodyFile","fkMap":[{"fk":"htmlBodyID","relatedKey":"logID"}],"relatedName":"EmailLog"},{"name":"parent","fkMap":[{"fk":"parentID","relatedKey":"emailID"}],"relatedName":"Email"},{"name":"children","isCollection":true,"isInverse":true,"relatedName":"Email"},{"name":"thread","fkMap":[{"fk":"threadID","relatedKey":"emailID"}],"relatedName":"Email"},{"name":"threadChildren","isCollection":true,"isInverse":true,"relatedName":"Email"},{"name":"forwarded","fkMap":[{"fk":"forwardedID","relatedKey":"emailID"}],"relatedName":"Email"},{"name":"forwards","isCollection":true,"isInverse":true,"relatedName":"Email"},{"name":"attachments","isCollection":true,"isInverse":true,"relatedName":"AppFile"},{"name":"engagements","isCollection":true,"isInverse":true,"relatedName":"EmailEngagement"},{"name":"recipients","isCollection":true,"isInverse":true,"relatedName":"EmailRecipient"},{"name":"emailTags","isCollection":true,"isInverse":true,"relatedName":"EmailTag"},{"name":"mailboxes","isCollection":true,"isInverse":true,"relatedName":"MailboxEmail"},{"name":"lastEmailThreads","isCollection":true,"isInverse":true,"relatedName":"MailboxContact"},{"name":"threadContacts","isCollection":true,"isInverse":true,"relatedName":"MailboxContactEmail"},{"name":"subscriberActivities","isCollection":true,"isInverse":true,"relatedName":"SubscriberActivity"}]}
515
+ { senderName: "",received: false,hasUnsubscribe: false,dateReceived: new DefaultFactory(() => new DateTime()),dateCreated: new DefaultFactory(() => new DateTime()),status: "queued",forwardCount: 0,replyCount: 0,viewCount: 0,emailSize: 0,originalFileSize: 0 },
516
+ {"name":"emails","keys":[{"name":"emailID","type":"number","generated":"identity"}],"properties":[{"name":"subject","type":"string","default":["subject","\"\""]},{"name":"summary","type":"string","default":["summary","\"\""]},{"name":"textBody","type":"string","default":["textBody","\"\""]},{"name":"htmlBody","type":"string","default":["htmlBody","\"\""]},{"name":"senderName","type":"string","default":["senderName","\"\""]},{"name":"senderID","type":"number"},{"name":"userID","type":"number"},{"name":"received","type":"boolean","default":["received","false"]},{"name":"headers","type":"string","default":["headers","\"\""]},{"name":"hasUnsubscribe","type":"boolean","default":["hasUnsubscribe","false"]},{"name":"headerMessageID","type":"string","default":["headerMessageID","\"\""]},{"name":"inReplyTo","type":"string","default":["inReplyTo","\"\""]},{"name":"externalEmailID","type":"string","default":["externalEmailID","\"\""]},{"name":"dateReceived","type":"DateTime","default":["dateReceived","new DefaultFactory(() => new DateTime())"]},{"name":"dateCreated","type":"DateTime","default":["dateCreated","new DefaultFactory(() => new DateTime())"]},{"name":"dateSent","type":"DateTime","default":["dateSent","new DefaultFactory(() => new DateTime())"]},{"name":"dateUpdated","type":"DateTime","default":["dateUpdated","new DefaultFactory(() => new DateTime())"]},{"name":"status","type":"string","default":["status","\"queued\""]},{"name":"forwardCount","type":"number","default":["forwardCount","0"]},{"name":"replyCount","type":"number","default":["replyCount","0"]},{"name":"viewCount","type":"number","default":["viewCount","0"]},{"name":"mimeFileID","type":"number"},{"name":"sentMessageID","type":"string","default":["sentMessageID","\"\""]},{"name":"htmlBodyID","type":"number"},{"name":"emailSize","type":"number","default":["emailSize","0"]},{"name":"originalFileSize","type":"number","default":["originalFileSize","0"]},{"name":"workflowID","type":"string","default":["workflowID","\"\""]},{"name":"parentID","type":"number"},{"name":"threadID","type":"number"},{"name":"forwardedID","type":"number"},{"name":"lastReplyID","type":"number"},{"name":"engagement","type":"string","default":["engagement","\"\""]},{"name":"tags","type":"string","default":["tags","\"\""]}],"relations":[{"name":"senderEmail","fkMap":[{"fk":"senderID","relatedKey":"emailAddressID"}],"relatedName":"EmailAddress"},{"name":"senderUser","fkMap":[{"fk":"userID","relatedKey":"userID"}],"relatedName":"User"},{"name":"mimeFile","fkMap":[{"fk":"mimeFileID","relatedKey":"logID"}],"relatedName":"EmailLog"},{"name":"logs","isCollection":true,"isInverse":true,"relatedName":"EmailLog"},{"name":"htmlBodyFile","fkMap":[{"fk":"htmlBodyID","relatedKey":"logID"}],"relatedName":"EmailLog"},{"name":"parent","fkMap":[{"fk":"parentID","relatedKey":"emailID"}],"relatedName":"Email"},{"name":"children","isCollection":true,"isInverse":true,"relatedName":"Email"},{"name":"thread","fkMap":[{"fk":"threadID","relatedKey":"emailID"}],"relatedName":"Email"},{"name":"threadChildren","isCollection":true,"isInverse":true,"relatedName":"Email"},{"name":"forwarded","fkMap":[{"fk":"forwardedID","relatedKey":"emailID"}],"relatedName":"Email"},{"name":"forwards","isCollection":true,"isInverse":true,"relatedName":"Email"},{"name":"lastReply","fkMap":[{"fk":"lastReplyID","relatedKey":"emailID"}],"relatedName":"Email"},{"name":"lastRepliedThreads","isCollection":true,"isInverse":true,"relatedName":"Email"},{"name":"attachments","isCollection":true,"isInverse":true,"relatedName":"AppFile"},{"name":"engagements","isCollection":true,"isInverse":true,"relatedName":"EmailEngagement"},{"name":"recipients","isCollection":true,"isInverse":true,"relatedName":"EmailRecipient"},{"name":"emailTags","isCollection":true,"isInverse":true,"relatedName":"EmailTag"},{"name":"mailboxes","isCollection":true,"isInverse":true,"relatedName":"MailboxEmail"},{"name":"lastEmailThreads","isCollection":true,"isInverse":true,"relatedName":"MailboxContact"},{"name":"threadContacts","isCollection":true,"isInverse":true,"relatedName":"MailboxContactEmail"},{"name":"subscriberActivities","isCollection":true,"isInverse":true,"relatedName":"SubscriberActivity"}]}
515
517
  );
516
518
  modelEntitySchemas["Email"] = Email;
517
519
 
@@ -713,6 +715,7 @@ export interface IMailboxContact extends IClrEntity {
713
715
  blocked?: boolean;
714
716
  mute?: boolean;
715
717
  status?: "invited" | "added" | "active" | "unsubscribed" | "blocked";
718
+ closeAllConversations?: boolean;
716
719
  notify?: boolean;
717
720
  emailAddressText?: string;
718
721
  name?: string;
@@ -1535,6 +1538,105 @@ export const Tag: IModel<ITag> = new Model<ITag>(
1535
1538
  );
1536
1539
  modelEntitySchemas["Tag"] = Tag;
1537
1540
 
1541
+ export interface IVirtualServer extends IClrEntity {
1542
+ readonly serverID?: number;
1543
+ serverName?: string;
1544
+ ownerEmailAddress?: string | null;
1545
+ ownerPhoneNumber?: string | null;
1546
+ active?: boolean;
1547
+ bucketName?: string | null;
1548
+ database?: string | null;
1549
+ host?: string;
1550
+ forwardHost?: string | null;
1551
+ forwardPublicKey?: string | null;
1552
+ environmentVariables?: string | null;
1553
+ maxStorageGB?: number;
1554
+ dnsZones?: ICollection<IDnsZone>;
1555
+ }
1556
+
1557
+ export const VirtualServer: IModel<IVirtualServer> = new Model<IVirtualServer>(
1558
+ "VirtualServer",
1559
+ ["serverID"],
1560
+ { serverName: "",active: false,host: "",maxStorageGB: 0 },
1561
+ {"name":"virtual_servers","keys":[{"name":"serverID","type":"number","generated":"identity"}],"properties":[{"name":"serverName","type":"string","default":["serverName","\"\""]},{"name":"ownerEmailAddress","type":"string","default":["ownerEmailAddress","\"\""]},{"name":"ownerPhoneNumber","type":"string","default":["ownerPhoneNumber","\"\""]},{"name":"active","type":"boolean","default":["active","false"]},{"name":"bucketName","type":"string","default":["bucketName","\"\""]},{"name":"database","type":"string","default":["database","\"\""]},{"name":"host","type":"string","default":["host","\"\""]},{"name":"forwardHost","type":"string","default":["forwardHost","\"\""]},{"name":"forwardPrivateKey","type":"string","default":["forwardPrivateKey","\"\""]},{"name":"forwardPublicKey","type":"string","default":["forwardPublicKey","\"\""]},{"name":"environmentVariables","type":"string","default":["environmentVariables","\"\""]},{"name":"maxStorageGB","type":"number","default":["maxStorageGB","0"]}],"relations":[{"name":"dnsZones","isCollection":true,"isInverse":true,"relatedName":"DnsZone"}]}
1562
+ );
1563
+ modelEntitySchemas["VirtualServer"] = VirtualServer;
1564
+
1565
+ export interface IDnsZone extends IClrEntity {
1566
+ readonly zoneID?: number;
1567
+ serverID?: number;
1568
+ zone?: string;
1569
+ keySigningKeyID?: number;
1570
+ zoneSigningKeyID?: number;
1571
+ dateCreated?: DateTime;
1572
+ dateUpdated?: DateTime;
1573
+ signed?: string | null;
1574
+ unsigned?: string | null;
1575
+ virtualServer?: IVirtualServer;
1576
+ ksk?: IDnsSigningKey;
1577
+ zsk?: IDnsSigningKey;
1578
+ records?: ICollection<IDnsZoneRecord>;
1579
+ }
1580
+
1581
+ export const DnsZone: IModel<IDnsZone> = new Model<IDnsZone>(
1582
+ "DnsZone",
1583
+ ["zoneID"],
1584
+ { zone: "",dateCreated: new DefaultFactory(() => new DateTime()),dateUpdated: new DefaultFactory(() => new DateTime()) },
1585
+ {"name":"dns_zones","keys":[{"name":"zoneID","type":"number","generated":"identity"}],"properties":[{"name":"serverID","type":"number"},{"name":"zone","type":"string","default":["zone","\"\""]},{"name":"zoneLowerCase","type":"string","generated":"computed"},{"name":"keySigningKeyID","type":"number"},{"name":"zoneSigningKeyID","type":"number"},{"name":"dateCreated","type":"DateTime","default":["dateCreated","new DefaultFactory(() => new DateTime())"]},{"name":"dateUpdated","type":"DateTime","default":["dateUpdated","new DefaultFactory(() => new DateTime())"]},{"name":"signed","type":"string","default":["signed","\"\""]},{"name":"unsigned","type":"string","default":["unsigned","\"\""]}],"relations":[{"name":"virtualServer","fkMap":[{"fk":"serverID","relatedKey":"serverID"}],"relatedName":"VirtualServer"},{"name":"ksk","fkMap":[{"fk":"keySigningKeyID","relatedKey":"keyID"}],"relatedName":"DnsSigningKey"},{"name":"zsk","fkMap":[{"fk":"zoneSigningKeyID","relatedKey":"keyID"}],"relatedName":"DnsSigningKey"},{"name":"records","isCollection":true,"isInverse":true,"relatedName":"DnsZoneRecord"}]}
1586
+ );
1587
+ modelEntitySchemas["DnsZone"] = DnsZone;
1588
+
1589
+ export interface IDnsZoneRecord extends IClrEntity {
1590
+ readonly recordID?: number;
1591
+ zoneID?: number;
1592
+ disabled?: boolean;
1593
+ name?: string;
1594
+ type?: "A" | "AAAA" | "CNAME" | "MX" | "TXT" | "PTR" | "SRV" | "CAA" | "NS" | "SOA";
1595
+ isAlias?: boolean;
1596
+ value?: string;
1597
+ ttl?: number;
1598
+ dateCreated?: DateTime;
1599
+ dateUpdated?: DateTime;
1600
+ notes?: string | null;
1601
+ signature?: string | null;
1602
+ expiryDate?: DateTime | null;
1603
+ readonly fqdn?: string | null;
1604
+ hosted?: boolean;
1605
+ zone?: IDnsZone;
1606
+ }
1607
+
1608
+ export const DnsZoneRecordTypeArray = [{"label":"A","value":"A"},{"label":"AAAA","value":"AAAA"},{"label":"CNAME","value":"CNAME"},{"label":"MX","value":"MX"},{"label":"TXT","value":"TXT"},{"label":"PTR","value":"PTR"},{"label":"SRV","value":"SRV"},{"label":"CAA","value":"CAA"},{"label":"NS","value":"NS"},{"label":"SOA","value":"SOA"}];
1609
+
1610
+ export const DnsZoneRecord: IModel<IDnsZoneRecord> = new Model<IDnsZoneRecord>(
1611
+ "DnsZoneRecord",
1612
+ ["recordID"],
1613
+ { disabled: false,name: "",type: "A",isAlias: false,value: "",ttl: 0,dateCreated: new DefaultFactory(() => new DateTime()),dateUpdated: new DefaultFactory(() => new DateTime()),hosted: false },
1614
+ {"name":"dns_zone_records","keys":[{"name":"recordID","type":"number","generated":"identity"}],"properties":[{"name":"zoneID","type":"number"},{"name":"disabled","type":"boolean","default":["disabled","false"]},{"name":"name","type":"string","default":["name","\"\""]},{"name":"type","type":"Object","default":["type","\"A\""]},{"name":"isAlias","type":"boolean","default":["isAlias","false"]},{"name":"value","type":"string","default":["value","\"\""]},{"name":"ttl","type":"number","default":["ttl","0"]},{"name":"dateCreated","type":"DateTime","default":["dateCreated","new DefaultFactory(() => new DateTime())"]},{"name":"dateUpdated","type":"DateTime","default":["dateUpdated","new DefaultFactory(() => new DateTime())"]},{"name":"notes","type":"string","default":["notes","\"\""]},{"name":"signature","type":"string","default":["signature","\"\""]},{"name":"expiryDate","type":"DateTime","default":["expiryDate","new DefaultFactory(() => new DateTime())"]},{"name":"fqdn","type":"string","default":["fqdn","\"\""]},{"name":"hosted","type":"boolean","default":["hosted","false"]}],"relations":[{"name":"zone","fkMap":[{"fk":"zoneID","relatedKey":"zoneID"}],"relatedName":"DnsZone"}]}
1615
+ );
1616
+ modelEntitySchemas["DnsZoneRecord"] = DnsZoneRecord;
1617
+
1618
+ export interface IDnsSigningKey extends IClrEntity {
1619
+ readonly keyID?: number;
1620
+ publicKey?: string;
1621
+ digestAlgorithm?: number;
1622
+ signingAlgorithm?: number;
1623
+ digest?: string;
1624
+ flags?: number;
1625
+ dateCreated?: DateTime;
1626
+ expiryDate?: DateTime;
1627
+ fileName?: string;
1628
+ kskZones?: ICollection<IDnsZone>;
1629
+ zskZones?: ICollection<IDnsZone>;
1630
+ }
1631
+
1632
+ export const DnsSigningKey: IModel<IDnsSigningKey> = new Model<IDnsSigningKey>(
1633
+ "DnsSigningKey",
1634
+ ["keyID"],
1635
+ { publicKey: "",digestAlgorithm: 0,signingAlgorithm: 0,digest: "",flags: 0,dateCreated: new DefaultFactory(() => new DateTime()),expiryDate: new DefaultFactory(() => new DateTime()),fileName: "" },
1636
+ {"name":"dns_signing_keys","keys":[{"name":"keyID","type":"number","generated":"identity"}],"properties":[{"name":"publicKey","type":"string","default":["publicKey","\"\""]},{"name":"privateKey","type":"string","default":["privateKey","\"\""]},{"name":"digestAlgorithm","type":"number","default":["digestAlgorithm","0"]},{"name":"signingAlgorithm","type":"number","default":["signingAlgorithm","0"]},{"name":"digest","type":"string","default":["digest","\"\""]},{"name":"flags","type":"number","default":["flags","0"]},{"name":"dateCreated","type":"DateTime","default":["dateCreated","new DefaultFactory(() => new DateTime())"]},{"name":"expiryDate","type":"DateTime","default":["expiryDate","new DefaultFactory(() => new DateTime())"]},{"name":"fileName","type":"string","default":["fileName","\"\""]}],"relations":[{"name":"kskZones","isCollection":true,"isInverse":true,"relatedName":"DnsZone"},{"name":"zskZones","isCollection":true,"isInverse":true,"relatedName":"DnsZone"}]}
1637
+ );
1638
+ modelEntitySchemas["DnsSigningKey"] = DnsSigningKey;
1639
+
1538
1640
  const fixRelatedSchemas = (schema) => {
1539
1641
  for (const key in schema) {
1540
1642
  if (Object.prototype.hasOwnProperty.call(schema, key)) {
@@ -0,0 +1,8 @@
1
+ import EventScope from "@web-atoms/core/dist/core/EventScope";
2
+ import { IMailboxContact } from "../../model/model";
3
+
4
+ export const MailAppEvents = {
5
+
6
+ mailboxContactUpdated: EventScope.create<IMailboxContact>()
7
+
8
+ };
@@ -178,6 +178,19 @@ export default class ConversationPage extends ContentPage {
178
178
 
179
179
  const isDraft = item.status === "draft";
180
180
 
181
+ if (item.status === "closed") {
182
+ return <div
183
+ class={itemCss}
184
+ data-sent={sent}>
185
+ <div data-layout="row">
186
+ <div data-flex="stretch-full" text={`Closed by ${item.senderName}`}/>
187
+ <div
188
+ text={DateFormats.relative.short(internalDate)}
189
+ title={DateFormats.withWeekDayAndTime(internalDate)}/>
190
+ </div>
191
+ </div>;
192
+ }
193
+
181
194
  let readStatus = "";
182
195
  let readColor = "";
183
196
  if (sent) {
@@ -297,7 +310,23 @@ export default class ConversationPage extends ContentPage {
297
310
  this.actionRenderer = () => <PopupActionButton
298
311
  icon="fas fa-bars"
299
312
  >
300
- <div data-layout="vertical-flex" style-width="200px">
313
+ <div
314
+ data-layout="vertical-flex"
315
+ style-width="200px"
316
+ data-font-size="small">
317
+ <MenuItem
318
+ data-click-event="close-all-threads"
319
+ label="Close All Threads"
320
+ />
321
+ { !this.parameters.autoClose
322
+ ? <MenuItem
323
+ data-click-event="close-permanently"
324
+ label="Close Threads Permanently"
325
+ />
326
+ : <MenuItem
327
+ data-click-event="open-threads"
328
+ label="Open Threads on new Email"
329
+ />}
301
330
  { this.parameters.blocked
302
331
  ? <MenuItem
303
332
  data-click-event="unblock-sender"
@@ -413,6 +442,30 @@ export default class ConversationPage extends ContentPage {
413
442
  await this.conversationService.stopEmail(thread);
414
443
  }
415
444
 
445
+ @Action({
446
+ onEvent: "close-all-threads",
447
+ confirm: "You sure you want to close all threads?"
448
+ })
449
+ async closeAllThreads() {
450
+ await this.conversationService.closeAllThreads(this.parameters);
451
+ }
452
+
453
+ @Action({
454
+ onEvent: "close-permanently",
455
+ confirm: "Are you sure, you wan to close this contact permanently?"
456
+ })
457
+ async closePermament() {
458
+ await this.conversationService.closePermanently(this.parameters);
459
+ }
460
+
461
+ @Action({
462
+ onEvent: "open-threads",
463
+ confirm: "Are you sure you want to change this contact to normal?"
464
+ })
465
+ async openThreads() {
466
+ await this.conversationService.closePermanently(this.parameters);
467
+ }
468
+
416
469
  @Action({ onEvent: "forward-email"})
417
470
  async forwardEmail(thread: IMailboxContactEmail, ce: CustomEvent) {
418
471
  void InlinePopup.show(ce.target as HTMLElement, <div
@@ -25,6 +25,7 @@ import AddMiniContactPage from "./contact/AddMiniContactPage";
25
25
  import PopupService from "@web-atoms/core/dist/web/services/PopupService";
26
26
  import MailboxService from "../../../common/pages/mailboxes/services/MailboxService";
27
27
  import { toKMBString } from "../../../common/NumberFormats";
28
+ import { MailAppEvents } from "../../commands/MailAppEvents";
28
29
 
29
30
  const css = styled.css `
30
31
 
@@ -201,6 +202,7 @@ export default class MailsPage extends MasterDetailPage {
201
202
  private version = 1;
202
203
 
203
204
  private conversationType = "all";
205
+ private threadsRepeater: AtomRepeater;
204
206
 
205
207
  async init() {
206
208
 
@@ -251,6 +253,7 @@ export default class MailsPage extends MasterDetailPage {
251
253
  data-items-updated-event="mails-available"
252
254
  data-selection-updated-event="mail-selected"
253
255
  selectedItem={Bind.twoWays(() => this.selectedThread)}
256
+ presenter={Bind.presenter((c) => this.threadsRepeater = c)}
254
257
  selectOnClick={true}
255
258
  items={this.mails}
256
259
  { ... InfiniteRepeater.pagedItems((start) => (c, e, cancelToken) => this.mailService.list({
@@ -307,6 +310,11 @@ export default class MailsPage extends MasterDetailPage {
307
310
  }));
308
311
  }
309
312
 
313
+ @Action({ onEvent: MailAppEvents.mailboxContactUpdated})
314
+ updateMailboxContact(mc: IMailboxContact) {
315
+ this.threadsRepeater.refreshItem(mc);
316
+ }
317
+
310
318
  @Action({ onEvent: "compose-template"})
311
319
  async composeTemplate() {
312
320
  const template = await PageNavigator.pushPageForResult(ChooserTemplatePage);
@@ -14,6 +14,7 @@ import BusyProgress from "../../../../services/BusyProgress";
14
14
  import EmailContentDownloader from "../../../../services/email/EmailContentDownloader";
15
15
  import EngagementService from "./EngagementService";
16
16
  import { apiPath } from "../../../../common/apiPath";
17
+ import { MailAppEvents } from "../../../commands/MailAppEvents";
17
18
 
18
19
  export const renderMail = AtomControl.registerProperty("data-html", "html", (c, e, value) => {
19
20
  if (!value) {
@@ -105,6 +106,21 @@ export default class ConversationService {
105
106
  @Inject
106
107
  private engagementService: EngagementService;
107
108
 
109
+ async closeAllThreads(contact: IMailboxContact) {
110
+ contact.dateUpdated = DateTime.now;
111
+ contact.closeAllConversations = true;
112
+ await this.entityService.save(contact, (c) => c);
113
+ (contact as any).openThreads = 0;
114
+ MailAppEvents.mailboxContactUpdated.dispatchEvent(contact);
115
+ }
116
+
117
+ async closePermanently(contact: IMailboxContact) {
118
+ contact.autoClose = !contact.autoClose;
119
+ contact.dateUpdated = DateTime.now;
120
+ await this.entityService.save(contact, (c) => c);
121
+ MailAppEvents.mailboxContactUpdated.dispatchEvent(contact);
122
+ }
123
+
108
124
  public async getDraft({ mailboxID, emailAddressID, email }: IMailboxContactEmail) {
109
125
  const draft = "draft";
110
126
  return await this.entityService.query(MailboxContactEmail)