@subiz/widget-v4 4.0.48 → 4.0.52

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 (84) hide show
  1. package/assets/img/default.jpg +0 -0
  2. package/assets/img/external-link.svg +1 -0
  3. package/assets/less/message.less +210 -42
  4. package/compiled_src/chatbox/Event.js +22 -2
  5. package/compiled_src/chatbox/OrderAttachments.js +112 -0
  6. package/compiled_src/chatbox/ProductAttachments.js +79 -0
  7. package/compiled_src/chatbox/TextMessage.js +1 -1
  8. package/compiled_src/plugin.js +8 -2
  9. package/compiled_src/store/api.js +1 -0
  10. package/compiled_src/store/store.js +140 -0
  11. package/compiled_src/util/common.js +12 -1
  12. package/compiled_src/util/pubsub.js +6 -3
  13. package/dist/17d517e44e2.178.js +1 -0
  14. package/dist/17d517e44e2.213.js +1 -0
  15. package/dist/17d517e44e2.362.js +1 -0
  16. package/dist/17d517e44e2.441.js +1 -0
  17. package/dist/17d517e44e2.605.js +1 -0
  18. package/dist/17d517e44e2.619.js +1 -0
  19. package/dist/17d517e44e2.678.js +1 -0
  20. package/dist/17d517e44e2.74.js +1 -0
  21. package/dist/17d517e44e2.782.js +1 -0
  22. package/dist/17d517e44e2.app.js +1 -0
  23. package/dist/17d517e44e2.index.html +21 -0
  24. package/dist/17d517e44e2.library.html +21 -0
  25. package/dist/17d517e44e2.library.js +1 -0
  26. package/dist/17d517e44e2.preview.html +759 -0
  27. package/dist/17d517e44e2.preview.js +1 -0
  28. package/dist/HASH +1 -1
  29. package/dist/assets/img/Facebook.64607ec.png +0 -0
  30. package/dist/assets/img/Zalo.6845707.png +0 -0
  31. package/dist/assets/img/award1a.1a58e10.png +0 -0
  32. package/dist/assets/img/award3a.3b74423.png +0 -0
  33. package/dist/assets/img/award4a.ed6ccd4.png +0 -0
  34. package/dist/assets/img/award5.39eb7ae.png +0 -0
  35. package/dist/assets/img/bubble_default.7d5e4ab.svg +20 -0
  36. package/dist/assets/img/convos_empty.2353007.svg +72 -0
  37. package/dist/assets/img/default.06e6ee0.jpg +0 -0
  38. package/dist/assets/img/default_avatar.5b74dc1.png +0 -0
  39. package/dist/assets/img/done_gray.d7e8203.svg +4 -0
  40. package/dist/assets/img/emoji/messenger/sub_23.529_58.824.d5faf14.png +0 -0
  41. package/dist/assets/img/emoji/messenger/sub_23.529_60.784.1420241.png +0 -0
  42. package/dist/assets/img/emoji/messenger/sub_25.490_0.000.1e6b2c0.png +0 -0
  43. package/dist/assets/img/emoji/messenger/sub_25.490_45.098.3dfbc08.png +0 -0
  44. package/dist/assets/img/emoji/messenger/sub_25.490_5.882.4b49e94.png +0 -0
  45. package/dist/assets/img/emoji/messenger/sub_27.451_72.549.7114f58.png +0 -0
  46. package/dist/assets/img/emoji/messenger/sub_27.451_84.314.231e2b7.png +0 -0
  47. package/dist/assets/img/emoji/messenger/sub_27.451_96.078.ddbb008.png +0 -0
  48. package/dist/assets/img/emoji/messenger/sub_29.412_5.882.61f3359.png +0 -0
  49. package/dist/assets/img/emoji/messenger/sub_58.824_100.000.6df72bc.png +0 -0
  50. package/dist/assets/img/emoji/messenger/sub_58.824_45.098.3d7a7ad.png +0 -0
  51. package/dist/assets/img/emoji/messenger/sub_58.824_47.059.0f4d6e2.png +0 -0
  52. package/dist/assets/img/emoji/messenger/sub_58.824_54.902.65724c1.png +0 -0
  53. package/dist/assets/img/emoji/messenger/sub_58.824_64.706.9da3cba.png +0 -0
  54. package/dist/assets/img/emoji/messenger/sub_58.824_72.549.edca5cf.png +0 -0
  55. package/dist/assets/img/emoji/messenger/sub_58.824_78.431.f910f2a.png +0 -0
  56. package/dist/assets/img/emoji/messenger/sub_58.824_88.235.def4e71.png +0 -0
  57. package/dist/assets/img/emoji/messenger/sub_60.784_11.765.49c03d0.png +0 -0
  58. package/dist/assets/img/emoji/messenger/sub_60.784_27.451.46b54e5.png +0 -0
  59. package/dist/assets/img/emoji/messenger/sub_60.784_29.412.e36d284.png +0 -0
  60. package/dist/assets/img/emoji/messenger/sub_60.784_3.922.bb191b0.png +0 -0
  61. package/dist/assets/img/emoji/messenger/sub_60.784_35.294.af7b927.png +0 -0
  62. package/dist/assets/img/emoji/messenger/sub_60.784_7.843.98f2a99.png +0 -0
  63. package/dist/assets/img/empty.29bed2d.svg +23 -0
  64. package/dist/assets/img/examplte_logo.f86535f.svg +1 -0
  65. package/dist/assets/img/external-link.90577cc.svg +1 -0
  66. package/dist/assets/img/fb_inverse_circle.36c2cfc.png +0 -0
  67. package/dist/assets/img/image_default.be0698b.png +0 -0
  68. package/dist/assets/img/loading_static.8f403ae.svg +10 -0
  69. package/dist/assets/img/main-service1.d536cc2.png +0 -0
  70. package/dist/assets/img/main-service2.9b99549.png +0 -0
  71. package/dist/assets/img/rating--average.1ea492c.svg +12 -0
  72. package/dist/assets/img/rating--great.e3d712e.svg +16 -0
  73. package/dist/assets/img/rating--poor.2938a25.svg +12 -0
  74. package/dist/assets/img/send.6db52a9.svg +3 -0
  75. package/dist/assets/img/subiz-mono.877e9f5.svg +3 -0
  76. package/package.json +18 -18
  77. package/src/chatbox/Event.js +72 -56
  78. package/src/chatbox/OrderAttachments.js +109 -0
  79. package/src/chatbox/ProductAttachments.js +70 -0
  80. package/src/chatbox/TextMessage.js +1 -1
  81. package/src/plugin.js +9 -4
  82. package/src/store/api.js +2 -5
  83. package/src/store/store.js +138 -8
  84. package/src/util/common.js +6 -0
Binary file
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-external-link"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path><polyline points="15 3 21 3 21 9"></polyline><line x1="10" y1="14" x2="21" y2="3"></line></svg>
@@ -34,7 +34,7 @@
34
34
 
35
35
  .file-attachment--agent {
36
36
  background-color: @primary-color;
37
- width: fit-content;
37
+ width: fit-content;
38
38
  }
39
39
 
40
40
  .file-attachment--user {
@@ -46,7 +46,7 @@
46
46
  display: flex;
47
47
  flex-direction: row;
48
48
  align-items: center;
49
- width: fit-content;
49
+ width: fit-content;
50
50
  }
51
51
 
52
52
  .file-attachment--agent .file-attachment--filename {
@@ -55,7 +55,7 @@
55
55
  text-overflow: ellipsis;
56
56
  white-space: nowrap;
57
57
  overflow: hidden;
58
- max-width: 200px;
58
+ max-width: 200px;
59
59
  }
60
60
 
61
61
  .file-attachment--user .file-attachment--filename {
@@ -64,7 +64,7 @@
64
64
  text-overflow: ellipsis;
65
65
  overflow: hidden;
66
66
  white-space: nowrap;
67
- max-width: 200px;
67
+ max-width: 200px;
68
68
  }
69
69
 
70
70
  .file-attachment--download {
@@ -148,13 +148,13 @@
148
148
  }
149
149
 
150
150
  a.message_error {
151
- color: @red;
151
+ .color(@red);
152
152
  display: block;
153
153
  text-align: end;
154
154
  font-size: 13px;
155
155
  margin-bottom: 10px;
156
156
  &:hover {
157
- color: @red;
157
+ .color(@red);
158
158
  }
159
159
  }
160
160
 
@@ -392,7 +392,6 @@ a.message_error {
392
392
  }
393
393
  }
394
394
 
395
-
396
395
  .message_quick_replies {
397
396
  display: flex;
398
397
  flex-wrap: wrap;
@@ -405,7 +404,7 @@ a.message_error {
405
404
  border: 1px solid @primary-color;
406
405
  margin-right: 10px;
407
406
  margin-top: 10px;
408
- color: @primary-color;
407
+ .color(@primary-color);
409
408
  border-radius: 5px;
410
409
  user-select: none;
411
410
  overflow: hidden;
@@ -447,9 +446,9 @@ a.message_error {
447
446
  display: inline-block;
448
447
  vertical-align: top;
449
448
 
450
- &:last-child {
451
- margin-right: 0;
452
- }
449
+ &:last-child {
450
+ margin-right: 0;
451
+ }
453
452
  .generic-attachment--element-img {
454
453
  width: 100%;
455
454
  height: 150px;
@@ -500,38 +499,207 @@ a.message_error {
500
499
  }
501
500
 
502
501
  .generic-attachment-navigator {
503
- position: absolute;
504
- top: 50%;
505
- transform: translateY(-50%);
506
- cursor: pointer;
507
- width: 20px;
508
- font-size: 80px;
509
- display: flex;
510
- align-items: center;
511
- justify-content: center;
512
- color: rgba(255, 255, 255, 0.85);
513
- text-shadow: 0 10px 25px rgba(0, 0, 0, 0.75);
514
- z-index: 999;
515
- user-select: none;
516
-
517
- &:hover {
518
- text-shadow: 0 10px 20px rgba(0, 0, 0, 0.75);
519
- color: rgba(255, 255, 255, 1);
520
- }
521
-
522
- &.generic-attachment-navigator--disabled {
523
- display: none;
524
- }
525
-
526
- &.generic-attachment-navigator--left {
527
- left: 2px;
528
- }
529
-
530
- &.generic-attachment-navigator--right {
531
- right: 2px;
532
- }
502
+ position: absolute;
503
+ top: 50%;
504
+ transform: translateY(-50%);
505
+ cursor: pointer;
506
+ width: 20px;
507
+ font-size: 80px;
508
+ display: flex;
509
+ align-items: center;
510
+ justify-content: center;
511
+ .color(rgba(255, 255, 255, 0.85));
512
+ text-shadow: 0 10px 25px rgba(0, 0, 0, 0.75);
513
+ z-index: 999;
514
+ user-select: none;
515
+
516
+ &:hover {
517
+ text-shadow: 0 10px 20px rgba(0, 0, 0, 0.75);
518
+ .color(rgba(255, 255, 255, 1));
519
+ }
520
+
521
+ &.generic-attachment-navigator--disabled {
522
+ display: none;
523
+ }
524
+
525
+ &.generic-attachment-navigator--left {
526
+ left: 2px;
527
+ }
528
+
529
+ &.generic-attachment-navigator--right {
530
+ right: 2px;
531
+ }
533
532
  }
534
533
 
535
534
  .generic-attachment-navigator-icon {
536
- font-size: 80px;
535
+ font-size: 80px;
536
+ }
537
+
538
+ .order_attachment__product_img {
539
+ width: 40px;
540
+ height: 40px;
541
+ margin-right: 10px;
542
+ border-radius: 5px;
543
+ flex-shrink: 0;
544
+ display: block;
545
+ object-fit: contain;
546
+ background: whitesmoke;
547
+ }
548
+
549
+ .order_attachment__product_name {
550
+ text-overflow: ellipsis;
551
+ white-space: nowrap;
552
+ overflow: hidden;
553
+ .color(black);
554
+ }
555
+
556
+ .order_attachment__header {
557
+ padding-bottom: 5px;
558
+ border-bottom: 1px solid #ccc;
559
+ margin-bottom: 5px;
560
+ display: flex;
561
+ align-items: center;
562
+ justify-content: space-between;
563
+ }
564
+
565
+ .order_attachment__product_desc {
566
+ text-overflow: ellipsis;
567
+ white-space: nowrap;
568
+ overflow: hidden;
569
+ .color(#999);
570
+ font-size: 13px;
571
+ }
572
+
573
+ .order_attachment__product {
574
+ display: flex;
575
+ align-items: center;
576
+ margin-top: 5px;
577
+ margin-bottom: 5;
578
+ }
579
+
580
+ .order_attachment__text_sm {
581
+ font-size: 13px;
582
+ }
583
+
584
+ .order_attachment__text_muted {
585
+ .color(@text-muted);
586
+ }
587
+
588
+ .order_attachment__text_truncate {
589
+ text-overflow: ellipsis;
590
+ white-space: nowrap;
591
+ overflow: hidden;
592
+ }
593
+
594
+ .order_attachment {
595
+ margin-top: 10px;
596
+ .color(black);
597
+ border: 1px solid #aaa;
598
+ background: white;
599
+ border-radius: 8px;
600
+ width: 220px;
601
+ overflow-y: auto;
602
+ overflow-x: hidden;
603
+ padding: 10px;
604
+ }
605
+ .order_attachment__footer {
606
+ margin-top: 10px;
607
+ padding-top: 10px;
608
+ display: flex;
609
+ justify-content: space-between;
610
+ border-top: 1px solid #ccc;
611
+ line-height: 1;
612
+ }
613
+
614
+ .order_attachment__label {
615
+ font-size: 13px;
616
+ .color(#777);
617
+ margin-top: 10px;
618
+ }
619
+
620
+ .order_attachment.order_attachment__user {
621
+ margin-right: 50px;
622
+
623
+ align-self: flex-end;
624
+
625
+ margin-right: 0;
626
+ margin-left: 50px;
627
+ align-self: flex-start;
628
+ }
629
+
630
+ .product_attachment {
631
+ margin-top: 10px;
632
+
633
+ border: 1px solid #d8d8d8;
634
+ background: white;
635
+ border-radius: 7px;
636
+ overflow: hidden;
637
+ width: 200px;
638
+ display: inline-block;
639
+ vertical-align: top;
640
+ transition: all 0.1s;
641
+ }
642
+
643
+ .product_attachment.product_attachment__user {
644
+ margin-right: 50px;
645
+
646
+ align-self: flex-end;
647
+
648
+ margin-right: 0;
649
+ margin-left: 50px;
650
+ align-self: flex-start;
651
+ }
652
+
653
+ .product_attachment__img {
654
+ width: 200px;
655
+ height: 200px;
656
+ border-bottom: 1px solid #d8d8d8;
657
+ object-fit: cover;
658
+ display: block;
659
+ }
660
+
661
+ .product_attachment__price {
662
+ padding-left: 10px;
663
+ }
664
+
665
+ .product_attachment__btns {
666
+ margin-top: 5px;
667
+ }
668
+ .product_attachment__btn {
669
+ border-top: 1px solid #d8d8d8;
670
+ display: flex;
671
+ padding: 8px 10px;
672
+ align-items: center;
673
+ .color(@black);
674
+ justify-content: center;
675
+ cursor: pointer;
676
+ text-transform: capitalize;
677
+ &:last-child {
678
+ margin-right: 0;
679
+ }
680
+ &:hover {
681
+ .color(@primary-color);
682
+ }
683
+ }
684
+
685
+ a.product_attachment__title {
686
+ display: block;
687
+ padding: 8px 10px 0 10px;
688
+ font-weight: 500;
689
+ .color(@black);
690
+
691
+ word-break: break-all;
692
+ }
693
+
694
+ .product_attachment__subtitle {
695
+ padding: 5px 10px;
696
+ .color(#aaa);
697
+ padding-top: 0;
698
+ }
699
+
700
+ .product_attachment__btn_external_link {
701
+ width: 16px;
702
+ height: 16px;
703
+ margin-left: 5px;
704
+ margin-top: -2px;
537
705
  }
@@ -21,6 +21,10 @@ var _FormSubmitAttachments = _interopRequireDefault(require("./FormSubmitAttachm
21
21
 
22
22
  var _GenericTemplateAttachments = _interopRequireDefault(require("./GenericTemplateAttachments.js"));
23
23
 
24
+ var _ProductAttachments = _interopRequireDefault(require("./ProductAttachments.js"));
25
+
26
+ var _OrderAttachments = _interopRequireDefault(require("./OrderAttachments.js"));
27
+
24
28
  var _VideoAttachments = _interopRequireDefault(require("./VideoAttachments.js"));
25
29
 
26
30
  var _TextMessage = _interopRequireDefault(require("./TextMessage.js"));
@@ -153,11 +157,14 @@ class Event extends _common.Com {
153
157
  }));
154
158
  }
155
159
 
160
+ let t = new _index.default.Date(ev.created).toLocaleString();
161
+
156
162
  if (_index.default.get(ev, 'by.type') !== 'user') {
157
163
  let $sender = null;
158
164
  if (this.props.event.mode === 'lead') $sender = this.renderAgentAvatar(ev);
159
165
  return (0, _preact.h)("div", {
160
- class: "convo-event agent-message"
166
+ class: "convo-event agent-message",
167
+ title: t
161
168
  }, $time, $sender, (0, _preact.h)(_TextMessage.default, {
162
169
  store: this.props.store,
163
170
  ev: ev
@@ -190,6 +197,14 @@ class Event extends _common.Com {
190
197
  store: this.props.store,
191
198
  ev: ev,
192
199
  onSelect: e => this.choosePostbackBtn(e)
200
+ }), (0, _preact.h)(_ProductAttachments.default, {
201
+ t: this.props.t,
202
+ store: this.props.store,
203
+ ev: ev
204
+ }), (0, _preact.h)(_OrderAttachments.default, {
205
+ t: this.props.t,
206
+ store: this.props.store,
207
+ ev: ev
193
208
  }), (0, _preact.h)(_QuickReplies.default, {
194
209
  store: this.props.store,
195
210
  ev: ev,
@@ -232,7 +247,8 @@ class Event extends _common.Com {
232
247
  }
233
248
 
234
249
  return (0, _preact.h)("div", {
235
- class: "convo-event user-message"
250
+ class: "convo-event user-message",
251
+ title: t
236
252
  }, $time, $sender, (0, _preact.h)("div", {
237
253
  class: "message-user__container"
238
254
  }, $dot, (0, _preact.h)(_TextMessage.default, {
@@ -259,6 +275,10 @@ class Event extends _common.Com {
259
275
  onSubmit: this.props.onFormSubmit,
260
276
  ref: this.refForm,
261
277
  ev: ev
278
+ }), (0, _preact.h)(_ProductAttachments.default, {
279
+ t: this.props.t,
280
+ store: this.props.store,
281
+ ev: ev
262
282
  }), (0, _preact.h)(_FormSubmitAttachments.default, {
263
283
  store: this.props.store,
264
284
  ev: ev
@@ -0,0 +1,112 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _index = _interopRequireDefault(require("../util/index.js"));
9
+
10
+ var _common = require("../common.js");
11
+
12
+ var _preact = require("preact");
13
+
14
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
+
16
+ class ProductAttachments extends _common.Com {
17
+ render() {
18
+ let byType = _index.default.get(this.props.ev, 'by.type');
19
+
20
+ if (byType === 'user') return null;
21
+ let acc = this.props.store.matchAccount();
22
+
23
+ var attachments = _index.default.get(this.props.ev, 'data.message.attachments', []);
24
+
25
+ let orders = _index.default.filter(attachments, att => att.type === 'order' && att.order).map(att => att.order);
26
+
27
+ if (orders.length === 0) return null;
28
+
29
+ let $orders = _index.default.map(orders, (order, index) => {
30
+ let $note = null;
31
+
32
+ if (order.note) {
33
+ $note = (0, _preact.h)("div", null, (0, _preact.h)("div", {
34
+ class: "order_attachment__label"
35
+ }, this.props.t('note')), (0, _preact.h)("div", {
36
+ class: "order_attachment__text_truncate"
37
+ }, order.note));
38
+ }
39
+
40
+ let $products = null;
41
+
42
+ if (_index.default.size(order.items) > 0) {
43
+ $products = (0, _preact.h)("div", null, (0, _preact.h)("div", {
44
+ class: "order_attachment__label"
45
+ }, this.props.t('product')), _index.default.map(order.items, item => {
46
+ let product = item.product || {};
47
+ return (0, _preact.h)("div", {
48
+ class: "order_attachment__product"
49
+ }, (0, _preact.h)("img", {
50
+ class: "order_attachment__product_img",
51
+ src: (_index.default.get(product, 'images.0'), require('../../assets/img/default.jpg'))
52
+ }), (0, _preact.h)("div", {
53
+ style: "overflow: hidden !important;"
54
+ }, (0, _preact.h)("div", {
55
+ class: "order_attachment__product_name"
56
+ }, product.name), (0, _preact.h)("div", {
57
+ class: "order_attachment__product_desc"
58
+ }, product.description || product.long_description), (0, _preact.h)("div", {
59
+ class: "order_attachment__product_desc"
60
+ }, this.props.t('qty'), " ", item.quantity, "\xA0\xB7\xA0", _index.default.formatCurrency(product.price))));
61
+ }));
62
+ }
63
+
64
+ let {
65
+ total
66
+ } = this.props.store.getOrderTotal(order);
67
+ let $total = (0, _preact.h)("div", {
68
+ class: "order_attachment__footer"
69
+ }, (0, _preact.h)("div", null, this.props.t('total')), ' ', (0, _preact.h)("div", null, (0, _preact.h)("b", null, _index.default.formatCurrency(total))));
70
+
71
+ let addr = _index.default.get(order, 'shipping.address', {});
72
+
73
+ let fulladdr = [addr.street, addr.ward, addr.district, addr.region, addr.country].filter(a => a).join(', ');
74
+ let address = fulladdr;
75
+ let phoneattr = _index.default.find(_index.default.get(order, 'user.attributes', []), attr => attr.key === 'phones') || {
76
+ key: 'phones',
77
+ text: ''
78
+ };
79
+
80
+ let phone = _index.default.get(order, 'shipping.address.phone', '').trim();
81
+
82
+ phone = phone || _index.default.trim(phoneattr.text);
83
+ if (phone) phone = this.props.t('phn') + ': ' + phone;
84
+ let $shipto = null;
85
+
86
+ if (address || phone) {
87
+ $shipto = (0, _preact.h)("div", null, (0, _preact.h)("div", {
88
+ class: "order_attachment__label"
89
+ }, this.props.t('ship_to')), (0, _preact.h)("div", {
90
+ class: "order_attachment__text_truncate"
91
+ }, address), (0, _preact.h)("div", {
92
+ class: "order_attachment__text_truncate"
93
+ }, phone));
94
+ }
95
+
96
+ return (0, _preact.h)("div", {
97
+ class: `order_attachment order_attachment__${byType}`
98
+ }, (0, _preact.h)("div", {
99
+ class: "order_attachment__header"
100
+ }, this.props.t('order'), (0, _preact.h)("span", {
101
+ class: "order_attachment__text_muted order_attachment__text_sm"
102
+ }, "#", order.id)), $products, $shipto, (0, _preact.h)("div", null, (0, _preact.h)("div", {
103
+ class: "order_attachment__label"
104
+ }, this.props.t('payment')), (0, _preact.h)("div", null, "COD")), $note, $total);
105
+ });
106
+
107
+ return $orders;
108
+ }
109
+
110
+ }
111
+
112
+ exports.default = ProductAttachments;
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _index = _interopRequireDefault(require("../util/index.js"));
9
+
10
+ var _common = require("../common.js");
11
+
12
+ var _preact = require("preact");
13
+
14
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
+
16
+ class ProductAttachments extends _common.Com {
17
+ render() {
18
+ let byType = _index.default.get(this.props.ev, 'by.type');
19
+
20
+ if (byType === 'user') return null;
21
+
22
+ let attachments = _index.default.get(this.props.ev, 'data.message.attachments', []);
23
+
24
+ let products = _index.default.filter(attachments, att => _index.default.get(att, 'type') === 'product' || _index.default.get(att, 'type') === 'product_preview');
25
+
26
+ products = products.filter(product => product.product && product.product.name);
27
+ if (products.length === 0) return null;
28
+ let acc = this.props.store.matchAccount();
29
+
30
+ let $products = _index.default.map(products, (att, index) => {
31
+ let product = att.product;
32
+ let $detailbtn = null;
33
+ let url = product.url || product.mobile_url;
34
+ if (this.props.store.isMobile()) url = product.mobile_url || product.url;
35
+ if (url) $detailbtn = (0, _preact.h)("a", {
36
+ class: "product_attachment__btn",
37
+ href: url,
38
+ target: "_blank"
39
+ }, this.props.t('detail'), (0, _preact.h)("img", {
40
+ src: require('../../assets/img/external-link.svg'),
41
+ class: "product_attachment__btn_external_link"
42
+ }));
43
+ let $title = (0, _preact.h)("a", {
44
+ href: url,
45
+ class: "product_attachment__title",
46
+ target: "_blank"
47
+ }, product.name);
48
+ let $subtitle = null;
49
+ let desc = product.description || product.long_description;
50
+ if (desc) $subtitle = (0, _preact.h)("div", {
51
+ class: "product_attachment__subtitle"
52
+ }, desc);
53
+ let $price = null;
54
+
55
+ if (product.price) {
56
+ $price = (0, _preact.h)("div", {
57
+ class: "product_attachment__price"
58
+ }, product.currency || _index.default.get(acc, 'currency', ''), " ", _index.default.formatCurrency(product.price));
59
+ }
60
+
61
+ return (0, _preact.h)("div", {
62
+ class: 'product_attachment product_attachment__' + byType
63
+ }, (0, _preact.h)("div", null, (0, _preact.h)("a", {
64
+ href: this.props.store.replaceFileUrl(product.image),
65
+ target: "_blank"
66
+ }, (0, _preact.h)("img", {
67
+ class: "product_attachment__img",
68
+ src: this.props.store.replaceFileUrl(product.image)
69
+ }))), $title, $subtitle, $price, (0, _preact.h)("div", {
70
+ class: "product_attachment__btns"
71
+ }, $detailbtn));
72
+ });
73
+
74
+ return $products;
75
+ }
76
+
77
+ }
78
+
79
+ exports.default = ProductAttachments;
@@ -31,7 +31,7 @@ let marked = (obj, text) => {
31
31
  const loadMarked = () => Promise.resolve().then(() => _interopRequireWildcard(require('marked')));
32
32
 
33
33
  (async () => {
34
- let markedf = (await loadMarked()).default;
34
+ let markedf = (await loadMarked()).marked;
35
35
 
36
36
  marked = (obj, text) => markedf(text);
37
37
 
@@ -407,10 +407,16 @@ function downloadLanguage(store, locale, force) {
407
407
  }
408
408
 
409
409
  const getLocale = (plugin, loc) => {
410
- let found = _index.default.find(plugin.locales, l => l === loc);
410
+ if (!loc) loc = '';
411
+
412
+ let found = _index.default.find(plugin.locales, l => l.toLowerCase().trim() === loc.toLowerCase().trim());
411
413
 
412
414
  if (found) return loc;
413
- found = _index.default.find(plugin.locales, l => (l || '').toLowerCase().includes(loc.toLowerCase()));
415
+ found = _index.default.find(plugin.locales, l => {
416
+ l = l.replace('-', '_').split('_')[0].trim().toLowerCase();
417
+ let compareloc = loc.replace('-', '_').split('_')[0].trim().toLowerCase();
418
+ return l == compareloc;
419
+ });
414
420
  if (found) return found;
415
421
  return plugin.locale || 'en-US';
416
422
  };
@@ -157,6 +157,7 @@ class _default {
157
157
  data: {
158
158
  product: {
159
159
  url: pageUrl,
160
+ name: pageTitle,
160
161
  title: pageTitle
161
162
  }
162
163
  }