@subiz/widget-v4 4.1.178 → 4.1.184
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/assets/less/base.less +28 -0
- package/assets/less/chatbox.less +4 -0
- package/assets/less/message.less +0 -8
- package/assets/less/widget.less +197 -2
- package/assets/less/widget_header.less +2 -1
- package/chat.js +0 -1
- package/compiled_src/chatbox/ChatButton.js +183 -82
- package/compiled_src/chatbox/Widget.js +2 -1
- package/compiled_src/chatbox/main.js +44 -53
- package/compiled_src/store/store.js +40 -17
- package/package.json +5 -5
- package/src/chatbox/ChatButton.js +197 -77
- package/src/chatbox/Widget.js +4 -2
- package/src/chatbox/main.js +30 -52
- package/src/store/store.js +56 -18
- package/dist/127.js +0 -273
- package/dist/132.js +0 -2802
- package/dist/185.js +0 -1827
- package/dist/1991cfb4656.127.js +0 -1
- package/dist/1991cfb4656.132.js +0 -1
- package/dist/1991cfb4656.185.js +0 -1
- package/dist/1991cfb4656.27.js +0 -1
- package/dist/1991cfb4656.278.js +0 -1
- package/dist/1991cfb4656.339.js +0 -1
- package/dist/1991cfb4656.459.js +0 -1
- package/dist/1991cfb4656.490.js +0 -1
- package/dist/1991cfb4656.74.js +0 -1
- package/dist/1991cfb4656.997.js +0 -1
- package/dist/1991cfb4656.app.js +0 -1
- package/dist/1991cfb4656.chat.html +0 -1
- package/dist/1991cfb4656.chat.js +0 -1
- package/dist/1991cfb4656.form.html +0 -1
- package/dist/1991cfb4656.form.js +0 -1
- package/dist/1991cfb4656.index.html +0 -72
- package/dist/1991cfb4656.library.html +0 -72
- package/dist/1991cfb4656.library.js +0 -1
- package/dist/1991cfb4656.preview.html +0 -759
- package/dist/1991cfb4656.preview.js +0 -1
- package/dist/1991cfb4656.webview.js +0 -1
- package/dist/27.js +0 -107
- package/dist/278.js +0 -417
- package/dist/459.js +0 -107
- package/dist/490.js +0 -305
- package/dist/74.js +0 -372
- package/dist/997.js +0 -107
- package/dist/HASH +0 -1
- package/dist/assets/img/Facebook.64607ec.png +0 -0
- package/dist/assets/img/Zalo.6845707.png +0 -0
- package/dist/assets/img/award1a.1a58e10.png +0 -0
- package/dist/assets/img/award3a.3b74423.png +0 -0
- package/dist/assets/img/award4a.ed6ccd4.png +0 -0
- package/dist/assets/img/award5.39eb7ae.png +0 -0
- package/dist/assets/img/bubble_default.7d5e4ab.svg +0 -20
- package/dist/assets/img/caret.998eb8f.svg +0 -1
- package/dist/assets/img/convos_empty.2353007.svg +0 -72
- package/dist/assets/img/default.06e6ee0.jpg +0 -0
- package/dist/assets/img/default_avatar.5b74dc1.png +0 -0
- package/dist/assets/img/done_gray.d7e8203.svg +0 -4
- package/dist/assets/img/done_green.b817fd4.svg +0 -4
- package/dist/assets/img/emoji/messenger/sub_23.529_58.824.d5faf14.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_23.529_60.784.1420241.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_25.490_0.000.1e6b2c0.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_25.490_45.098.3dfbc08.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_25.490_5.882.4b49e94.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_27.451_72.549.7114f58.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_27.451_84.314.231e2b7.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_27.451_96.078.ddbb008.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_29.412_5.882.61f3359.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_58.824_100.000.6df72bc.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_58.824_45.098.3d7a7ad.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_58.824_47.059.0f4d6e2.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_58.824_54.902.65724c1.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_58.824_64.706.9da3cba.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_58.824_72.549.edca5cf.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_58.824_78.431.f910f2a.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_58.824_88.235.def4e71.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_60.784_11.765.49c03d0.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_60.784_27.451.46b54e5.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_60.784_29.412.e36d284.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_60.784_3.922.bb191b0.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_60.784_35.294.af7b927.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_60.784_7.843.98f2a99.png +0 -0
- package/dist/assets/img/empty.29bed2d.svg +0 -23
- package/dist/assets/img/empty_1.0b98af0.svg +0 -11
- package/dist/assets/img/examplte_logo.f86535f.svg +0 -1
- package/dist/assets/img/external-link.90577cc.svg +0 -1
- package/dist/assets/img/fb_inverse_circle.36c2cfc.png +0 -0
- package/dist/assets/img/ghn.070f8e3.svg +0 -17
- package/dist/assets/img/ghtk.326eac1.svg +0 -18
- package/dist/assets/img/image_default.be0698b.png +0 -0
- package/dist/assets/img/info.ebce7ea.svg +0 -1
- package/dist/assets/img/loader.37000a7.svg +0 -1
- package/dist/assets/img/loading_static.a27f0ac.svg +0 -10
- package/dist/assets/img/main-service1.d536cc2.png +0 -0
- package/dist/assets/img/main-service2.9b99549.png +0 -0
- package/dist/assets/img/not_found_search.2ddb8d1.png +0 -0
- package/dist/assets/img/package.8d37d0f.svg +0 -5
- package/dist/assets/img/package_fade.763c001.svg +0 -1
- package/dist/assets/img/rating--average.1ea492c.svg +0 -12
- package/dist/assets/img/rating--great.e3d712e.svg +0 -16
- package/dist/assets/img/rating--poor.2938a25.svg +0 -12
- package/dist/assets/img/search.f9705ff.svg +0 -1
- package/dist/assets/img/send.6db52a9.svg +0 -3
- package/dist/assets/img/shop.f7dc7d8.svg +0 -1
- package/dist/assets/img/shop_faded.df7845a.svg +0 -1
- package/dist/assets/img/stars_v2.79cf728.png +0 -0
- package/dist/assets/img/subiz-mono.8fbc067.svg +0 -3
- package/dist/assets/img/x.26fdfa3.svg +0 -5
- package/dist/malicious-app.js +0 -17
- package/dist/screenshoot.html +0 -7
- package/dist/screenshoot.js +0 -11988
package/assets/less/base.less
CHANGED
|
@@ -16,6 +16,8 @@
|
|
|
16
16
|
@red: #dc3545;
|
|
17
17
|
@yellow: #ffc107;
|
|
18
18
|
@green: #28a745;
|
|
19
|
+
@green-light-bg: #28a74526;
|
|
20
|
+
@border: @gray-300;
|
|
19
21
|
|
|
20
22
|
@link: #0d6efd;
|
|
21
23
|
@link-hover: #024dbc;
|
|
@@ -65,3 +67,29 @@
|
|
|
65
67
|
-moz-mask-image: url(@url);
|
|
66
68
|
mask-image: url(@url);
|
|
67
69
|
}
|
|
70
|
+
|
|
71
|
+
.badge {
|
|
72
|
+
padding: 2px 8px;
|
|
73
|
+
font-size: 12px;
|
|
74
|
+
font-weight: 600;
|
|
75
|
+
border-radius: 6px;
|
|
76
|
+
display: inline-flex;
|
|
77
|
+
align-items: center;
|
|
78
|
+
|
|
79
|
+
&.badge--success {
|
|
80
|
+
.color(@green);
|
|
81
|
+
background: @green-light-bg;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
.dot {
|
|
86
|
+
width: 8px;
|
|
87
|
+
height: 8px;
|
|
88
|
+
border-radius: 4px;
|
|
89
|
+
flex-shrink: 0;
|
|
90
|
+
background: @black;
|
|
91
|
+
|
|
92
|
+
&.dot--success {
|
|
93
|
+
background: @green;
|
|
94
|
+
}
|
|
95
|
+
}
|
package/assets/less/chatbox.less
CHANGED
|
@@ -92,6 +92,7 @@ body div#sbz92 {
|
|
|
92
92
|
|
|
93
93
|
font-family: @font-family-sans-serif;
|
|
94
94
|
font-size: @font-size-base;
|
|
95
|
+
line-height: 1.25;
|
|
95
96
|
|
|
96
97
|
-webkit-box-sizing: border-box; // Safari/Chrome, other WebKit
|
|
97
98
|
-moz-box-sizing: border-box; // Firefox, other Gecko
|
|
@@ -209,6 +210,9 @@ body div#sbz92 {
|
|
|
209
210
|
.ml-2 {
|
|
210
211
|
margin-left: @spacer2;
|
|
211
212
|
}
|
|
213
|
+
.mr-1 {
|
|
214
|
+
margin-right: @spacer1;
|
|
215
|
+
}
|
|
212
216
|
.mr-2 {
|
|
213
217
|
margin-right: @spacer2;
|
|
214
218
|
}
|
package/assets/less/message.less
CHANGED
|
@@ -507,7 +507,6 @@ a.message_error {
|
|
|
507
507
|
}
|
|
508
508
|
|
|
509
509
|
.url-button-attachment {
|
|
510
|
-
text-decoration: none;
|
|
511
510
|
padding: 10px;
|
|
512
511
|
display: block;
|
|
513
512
|
padding-top: 9px;
|
|
@@ -542,13 +541,6 @@ a.message_error {
|
|
|
542
541
|
|
|
543
542
|
.generic-attachment--element.clickable {
|
|
544
543
|
cursor: pointer;
|
|
545
|
-
.generic-attachment--element-title {
|
|
546
|
-
.color(@link);
|
|
547
|
-
}
|
|
548
|
-
|
|
549
|
-
&:hover .generic-attachment--element-title {
|
|
550
|
-
.color(@link-hover);
|
|
551
|
-
}
|
|
552
544
|
}
|
|
553
545
|
|
|
554
546
|
.widget_body__events__error_msg {
|
package/assets/less/widget.less
CHANGED
|
@@ -291,7 +291,7 @@
|
|
|
291
291
|
position: relative;
|
|
292
292
|
}
|
|
293
293
|
|
|
294
|
-
.
|
|
294
|
+
.embed-chat {
|
|
295
295
|
.widget-body--events {
|
|
296
296
|
width: 600px;
|
|
297
297
|
margin: 0 auto;
|
|
@@ -302,6 +302,23 @@
|
|
|
302
302
|
max-width: 600px;
|
|
303
303
|
margin: 20px auto;
|
|
304
304
|
}
|
|
305
|
+
|
|
306
|
+
.widget-header--inner {
|
|
307
|
+
max-width: 100%;
|
|
308
|
+
width: 600px;
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
.widget-body--content {
|
|
312
|
+
width: 600px;
|
|
313
|
+
margin: 0 auto;
|
|
314
|
+
max-width: 100%;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
.convo-list {
|
|
318
|
+
width: 600px;
|
|
319
|
+
margin: 0 auto;
|
|
320
|
+
max-width: 100%;
|
|
321
|
+
}
|
|
305
322
|
}
|
|
306
323
|
|
|
307
324
|
.widget-body--content {
|
|
@@ -402,9 +419,13 @@
|
|
|
402
419
|
scale: 1;
|
|
403
420
|
transition:
|
|
404
421
|
filter 250ms ease,
|
|
405
|
-
opacity 0.
|
|
422
|
+
opacity 0.15s ease-in,
|
|
406
423
|
scale 0.125s ease-in-out,
|
|
407
424
|
transform 0.2s ease-in-out;
|
|
425
|
+
|
|
426
|
+
&.hidden {
|
|
427
|
+
opacity: 0;
|
|
428
|
+
}
|
|
408
429
|
}
|
|
409
430
|
|
|
410
431
|
.chat-button:hover {
|
|
@@ -574,3 +595,177 @@
|
|
|
574
595
|
color: #fff;
|
|
575
596
|
}
|
|
576
597
|
}
|
|
598
|
+
|
|
599
|
+
.widget-preview-text-message--header {
|
|
600
|
+
display: flex;
|
|
601
|
+
overflow: hidden;
|
|
602
|
+
align-items: center;
|
|
603
|
+
width: 100%;
|
|
604
|
+
|
|
605
|
+
.widget-preview--avatar {
|
|
606
|
+
width: 24px;
|
|
607
|
+
height: 24px;
|
|
608
|
+
flex-shrink: 0;
|
|
609
|
+
margin-right: 10px;
|
|
610
|
+
}
|
|
611
|
+
}
|
|
612
|
+
|
|
613
|
+
.widget-preview-text-message--author {
|
|
614
|
+
flex: 1;
|
|
615
|
+
overflow: hidden;
|
|
616
|
+
display: flex;
|
|
617
|
+
align-items: center;
|
|
618
|
+
|
|
619
|
+
.badge {
|
|
620
|
+
margin-left: 10px;
|
|
621
|
+
}
|
|
622
|
+
}
|
|
623
|
+
|
|
624
|
+
.widget-preview-text-message--author-text {
|
|
625
|
+
text-overflow: ellipsis;
|
|
626
|
+
white-space: nowrap;
|
|
627
|
+
overflow: hidden;
|
|
628
|
+
line-height: 1.5;
|
|
629
|
+
.color(@secondary-color);
|
|
630
|
+
}
|
|
631
|
+
|
|
632
|
+
.widget-preview-text-message--content {
|
|
633
|
+
margin-top: 10px;
|
|
634
|
+
white-space: pre-wrap;
|
|
635
|
+
}
|
|
636
|
+
|
|
637
|
+
.widget-preview-quick-reply-wrapper {
|
|
638
|
+
z-index: @z-index-3;
|
|
639
|
+
width: 100%;
|
|
640
|
+
margin-bottom: 15px;
|
|
641
|
+
display: flex;
|
|
642
|
+
flex-direction: column;
|
|
643
|
+
align-items: flex-start;
|
|
644
|
+
|
|
645
|
+
&.right {
|
|
646
|
+
align-items: flex-end;
|
|
647
|
+
}
|
|
648
|
+
}
|
|
649
|
+
|
|
650
|
+
.widget-preview-quick-reply-item {
|
|
651
|
+
border-radius: 20px;
|
|
652
|
+
padding: 8px 20px;
|
|
653
|
+
background: @white;
|
|
654
|
+
border: 1.5px solid;
|
|
655
|
+
border-color: @primary-color;
|
|
656
|
+
.color(@primary-color);
|
|
657
|
+
margin-bottom: 15px;
|
|
658
|
+
cursor: pointer;
|
|
659
|
+
transition: 0.3s ease;
|
|
660
|
+
position: relative;
|
|
661
|
+
|
|
662
|
+
&:last-child {
|
|
663
|
+
margin-bottom: 0;
|
|
664
|
+
}
|
|
665
|
+
|
|
666
|
+
&:hover {
|
|
667
|
+
.color(@white);
|
|
668
|
+
background-color: @primary-color;
|
|
669
|
+
}
|
|
670
|
+
}
|
|
671
|
+
|
|
672
|
+
.widget-preview-image-wrapper {
|
|
673
|
+
z-index: @z-index-3;
|
|
674
|
+
width: 100%;
|
|
675
|
+
margin-bottom: 15px;
|
|
676
|
+
display: flex;
|
|
677
|
+
flex-direction: column;
|
|
678
|
+
align-items: flex-start;
|
|
679
|
+
|
|
680
|
+
&.right {
|
|
681
|
+
align-items: flex-end;
|
|
682
|
+
}
|
|
683
|
+
}
|
|
684
|
+
|
|
685
|
+
.widget-preview-image-item {
|
|
686
|
+
max-width: 300px;
|
|
687
|
+
border-radius: 15px;
|
|
688
|
+
box-shadow: 0px 5px 30px rgba(0, 0, 0, 0.15);
|
|
689
|
+
border: 1px solid @border;
|
|
690
|
+
overflow: hidden;
|
|
691
|
+
cursor: pointer;
|
|
692
|
+
|
|
693
|
+
img {
|
|
694
|
+
width: 100%;
|
|
695
|
+
max-height: 300px;
|
|
696
|
+
object-fit: cover;
|
|
697
|
+
}
|
|
698
|
+
}
|
|
699
|
+
|
|
700
|
+
.widget-preview-text-message {
|
|
701
|
+
z-index: @z-index-3;
|
|
702
|
+
background: @white;
|
|
703
|
+
box-shadow: 0px 5px 30px rgba(0, 0, 0, 0.15);
|
|
704
|
+
border: 1px solid @border;
|
|
705
|
+
border-radius: 15px;
|
|
706
|
+
max-width: 100%;
|
|
707
|
+
min-width: 210px;
|
|
708
|
+
margin-bottom: 15px;
|
|
709
|
+
padding: 15px 20px;
|
|
710
|
+
positive: relative;
|
|
711
|
+
cursor: pointer;
|
|
712
|
+
|
|
713
|
+
&.right {
|
|
714
|
+
border-bottom-right-radius: 8px;
|
|
715
|
+
}
|
|
716
|
+
&.left {
|
|
717
|
+
border-bottom-left-radius: 8px;
|
|
718
|
+
}
|
|
719
|
+
}
|
|
720
|
+
|
|
721
|
+
.widget-preview-new-wrapper {
|
|
722
|
+
max-width: 340px;
|
|
723
|
+
position: relative;
|
|
724
|
+
opacity: 1;
|
|
725
|
+
transition:
|
|
726
|
+
opacity 0.15s ease-in,
|
|
727
|
+
transform 0.15s ease-in;
|
|
728
|
+
transform: translateY(0);
|
|
729
|
+
|
|
730
|
+
&.hidden {
|
|
731
|
+
transform: translateY(20px);
|
|
732
|
+
transition:
|
|
733
|
+
opacity 0.15s ease-out,
|
|
734
|
+
transform 0.15s ease-out;
|
|
735
|
+
opacity: 0;
|
|
736
|
+
}
|
|
737
|
+
|
|
738
|
+
&:hover {
|
|
739
|
+
.widget-preview-x-wrapper {
|
|
740
|
+
display: flex;
|
|
741
|
+
}
|
|
742
|
+
}
|
|
743
|
+
|
|
744
|
+
.widget-preview--btn-close {
|
|
745
|
+
width: 32px;
|
|
746
|
+
height: 32px;
|
|
747
|
+
background-color: #00000040;
|
|
748
|
+
background-size: 16px 16px;
|
|
749
|
+
background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IiNmZmYiIHN0cm9rZS13aWR0aD0iMi4yIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJmZWF0aGVyIGZlYXRoZXIteCI+PGxpbmUgeDE9IjE4IiB5MT0iNiIgeDI9IjYiIHkyPSIxOCI+PC9saW5lPjxsaW5lIHgxPSI2IiB5MT0iNiIgeDI9IjE4IiB5Mj0iMTgiPjwvbGluZT48L3N2Zz4K');
|
|
750
|
+
|
|
751
|
+
&:hover {
|
|
752
|
+
background-color: #00000066;
|
|
753
|
+
}
|
|
754
|
+
}
|
|
755
|
+
}
|
|
756
|
+
|
|
757
|
+
.widget-preview-x-wrapper {
|
|
758
|
+
display: none;
|
|
759
|
+
justify-content: flex-start;
|
|
760
|
+
width: calc(100% + 40px);
|
|
761
|
+
position: absolute;
|
|
762
|
+
padding: 15px 20px;
|
|
763
|
+
left: -20px;
|
|
764
|
+
bottom: 100%;
|
|
765
|
+
|
|
766
|
+
&.right {
|
|
767
|
+
justify-content: flex-end;
|
|
768
|
+
left: unset;
|
|
769
|
+
right: -20px;
|
|
770
|
+
}
|
|
771
|
+
}
|
package/chat.js
CHANGED
|
@@ -15,12 +15,14 @@ let defaultAvatar = require('../../assets/img/default_avatar.png');
|
|
|
15
15
|
class ChatButton extends _common.Com {
|
|
16
16
|
constructor(props) {
|
|
17
17
|
super(props);
|
|
18
|
-
this.
|
|
19
|
-
|
|
18
|
+
this.state = {
|
|
19
|
+
hasPreviewDom: false,
|
|
20
|
+
previewExtraCls: 'hidden',
|
|
20
21
|
previewEvent: {},
|
|
21
|
-
|
|
22
|
-
}
|
|
23
|
-
this.
|
|
22
|
+
ready: false
|
|
23
|
+
};
|
|
24
|
+
this.readyGate = new _index.default.Gate();
|
|
25
|
+
this.prepareButtonImage();
|
|
24
26
|
this.props.store.onUpdate(this, _ => this.forceUpdate());
|
|
25
27
|
this.props.store.onConvoEvent(this, ev => {
|
|
26
28
|
if (_index.default.get(ev, 'type') !== 'message_sent') return;
|
|
@@ -41,11 +43,34 @@ class ChatButton extends _common.Com {
|
|
|
41
43
|
let message = _index.default.get(ev, 'data.message.text') || '';
|
|
42
44
|
if (!message && isquickreplies) return;
|
|
43
45
|
}
|
|
44
|
-
this.
|
|
45
|
-
|
|
46
|
+
let screen = _index.default.get(this.props.store.matchLastview(), 'screen');
|
|
47
|
+
let minimized = _index.default.get(this.props.store.matchLastview(), 'minimized');
|
|
48
|
+
if (screen === 'widget') return;
|
|
49
|
+
if (minimized && Date.now() - minimized < Ms30Mins) return;
|
|
50
|
+
if (this.props.store.isMobile()) {
|
|
51
|
+
this.props.store.updateLastview({
|
|
52
|
+
previewEvent: ev
|
|
53
|
+
});
|
|
54
|
+
this.forceUpdate();
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
this.props.store.updateLastview({
|
|
58
|
+
screen: 'preview',
|
|
46
59
|
previewEvent: ev
|
|
47
60
|
});
|
|
61
|
+
this.forceUpdate();
|
|
48
62
|
});
|
|
63
|
+
this.props.store.onLastview(this, () => {
|
|
64
|
+
let screen = _index.default.get(this.props.store.matchLastview(), 'screen');
|
|
65
|
+
let previewEvent = _index.default.get(this.props.store.matchLastview(), 'previewEvent') || {};
|
|
66
|
+
let isOpen = screen === 'preview' && _index.default.size(previewEvent) > 0;
|
|
67
|
+
if (isOpen) {
|
|
68
|
+
this.makeAnimateShowPreview(previewEvent);
|
|
69
|
+
} else {
|
|
70
|
+
this.makeAnimateHidePreview();
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
this.loadGreeting();
|
|
49
74
|
}
|
|
50
75
|
fixMissingSetting(chatbox) {
|
|
51
76
|
chatbox = _index.default.cloneDeep(chatbox);
|
|
@@ -74,26 +99,13 @@ class ChatButton extends _common.Com {
|
|
|
74
99
|
let hiddenButtonDesktop = _index.default.get(accountSetting, 'desktop_button.hidden');
|
|
75
100
|
if (hiddenButtonDesktop) return null;
|
|
76
101
|
let cls = 'widget-layout widget-layout--' + position;
|
|
77
|
-
|
|
78
|
-
if (!this.props.isShow) {
|
|
102
|
+
if (!this.props.isShow || !this.state.ready) {
|
|
79
103
|
cls += ' widget-layout--hidden';
|
|
80
|
-
opacity = 0;
|
|
81
104
|
}
|
|
82
105
|
return (0, _preact.h)("div", {
|
|
83
|
-
class: cls
|
|
84
|
-
style: 'opacity: ' + opacity + ' !important'
|
|
106
|
+
class: cls
|
|
85
107
|
}, this.renderPreview(), this.renderButton());
|
|
86
108
|
}
|
|
87
|
-
ClearPreview() {
|
|
88
|
-
this.setState({
|
|
89
|
-
previewEvent: {}
|
|
90
|
-
});
|
|
91
|
-
}
|
|
92
|
-
ClosePreview() {
|
|
93
|
-
this.setState({
|
|
94
|
-
displayPreview: false
|
|
95
|
-
});
|
|
96
|
-
}
|
|
97
109
|
pickBestGreeting() {
|
|
98
110
|
let convoM = this.props.store.matchConvo('*');
|
|
99
111
|
let unseenConvo = _index.default.filter(convoM, convo => {
|
|
@@ -125,30 +137,80 @@ class ChatButton extends _common.Com {
|
|
|
125
137
|
}
|
|
126
138
|
return unseenConvo[0].last_message_sent;
|
|
127
139
|
}
|
|
128
|
-
|
|
140
|
+
showPreview(ev) {
|
|
141
|
+
this.props.store.updateLastview({
|
|
142
|
+
screen: 'preview',
|
|
143
|
+
previewEvent: ev
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
async makeAnimateShowPreview(ev) {
|
|
147
|
+
await this.readyGate.entry();
|
|
148
|
+
let agent = this.getAgentOfPreviewEvent(ev);
|
|
149
|
+
await _index.default.preloadImg(agent.avatar_url);
|
|
150
|
+
if (this.state.hasPreviewDom) {
|
|
151
|
+
this.setState({
|
|
152
|
+
previewExtraCls: 'hidden'
|
|
153
|
+
});
|
|
154
|
+
if (this._animateTimeout) clearTimeout(this._animateTimeout);
|
|
155
|
+
this._animateTimeout = setTimeout(() => {
|
|
156
|
+
this.setState({
|
|
157
|
+
previewExtraCls: '',
|
|
158
|
+
previewEvent: ev
|
|
159
|
+
});
|
|
160
|
+
}, 200);
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
129
163
|
this.setState({
|
|
130
|
-
|
|
131
|
-
|
|
164
|
+
hasPreviewDom: true,
|
|
165
|
+
previewExtraCls: 'hidden',
|
|
166
|
+
previewEvent: {}
|
|
132
167
|
});
|
|
168
|
+
if (this._animateTimeout) clearTimeout(this._animateTimeout);
|
|
169
|
+
this._animateTimeout = setTimeout(() => {
|
|
170
|
+
this.setState({
|
|
171
|
+
previewExtraCls: '',
|
|
172
|
+
previewEvent: ev
|
|
173
|
+
});
|
|
174
|
+
}, 200);
|
|
133
175
|
}
|
|
134
|
-
|
|
176
|
+
makeAnimateHidePreview() {
|
|
177
|
+
if (this._animateTimeout) clearTimeout(this._animateTimeout);
|
|
135
178
|
this.setState({
|
|
179
|
+
previewExtraCls: 'hidden'
|
|
180
|
+
});
|
|
181
|
+
this._animateTimeout = setTimeout(() => {
|
|
182
|
+
this.setState({
|
|
183
|
+
hasPreviewDom: false,
|
|
184
|
+
previewEvent: {}
|
|
185
|
+
});
|
|
186
|
+
}, 200);
|
|
187
|
+
}
|
|
188
|
+
ShowGreeting() {
|
|
189
|
+
let ev = this.pickBestGreeting();
|
|
190
|
+
this.showPreview(ev);
|
|
191
|
+
}
|
|
192
|
+
HideGreeting() {
|
|
193
|
+
this.props.store.updateLastview({
|
|
194
|
+
screen: 'button',
|
|
195
|
+
minimized: Date.now(),
|
|
136
196
|
previewEvent: {}
|
|
137
197
|
});
|
|
138
198
|
}
|
|
139
199
|
loadGreeting() {
|
|
200
|
+
let minimized = _index.default.get(this.props.store.matchLastview(), 'minimized');
|
|
201
|
+
let screen = _index.default.get(this.props.store.matchLastview(), 'screen');
|
|
202
|
+
if (screen !== 'preview') return;
|
|
203
|
+
if (minimized && Date.now() - minimized < Ms30Mins) return;
|
|
204
|
+
let previewEvent = _index.default.get(this.props.store.matchLastview(), 'previewEvent') || {};
|
|
205
|
+
if (_index.default.size(previewEvent) > 0) {
|
|
206
|
+
this.showPreview(previewEvent);
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
140
209
|
let accountSetting = this.props.plugin.chatbox;
|
|
141
|
-
if (new _index.default.Date().getTime() - this.props.store.matchClosePreviewAt() < Ms30Mins) return;
|
|
142
210
|
let greeting = _index.default.get(accountSetting, 'greeting', {});
|
|
143
211
|
let text = this.props.t.i18n(_index.default.get(greeting, 'greeting', {})) || greeting.message;
|
|
144
212
|
let enabled = greeting.enabled;
|
|
145
|
-
if (this.props.store.isMobile()) {
|
|
146
|
-
enabled = enabled && !_index.default.get(greeting, 'mobile_disabled');
|
|
147
|
-
}
|
|
148
213
|
if (!text || !enabled) {
|
|
149
|
-
this.setState({
|
|
150
|
-
previewEvent: {}
|
|
151
|
-
});
|
|
152
214
|
return;
|
|
153
215
|
}
|
|
154
216
|
this.ShowGreeting();
|
|
@@ -168,14 +230,14 @@ class ChatButton extends _common.Com {
|
|
|
168
230
|
return this.onPreviewClick();
|
|
169
231
|
}
|
|
170
232
|
onPreviewClick(e) {
|
|
171
|
-
let
|
|
233
|
+
let previewEvent = _index.default.get(this.props.store.matchLastview(), 'previewEvent') || {};
|
|
234
|
+
let cid = _index.default.convoOfEv(previewEvent);
|
|
172
235
|
if (!cid) {
|
|
173
236
|
let convos = _index.default.map(this.props.store.matchConvo('*'));
|
|
174
237
|
let convo = _index.default.find(convos, convo => !_index.default.isConvoSeen(convo, this.props.store.matchUser().id));
|
|
175
238
|
if (!convo) convo = convos[0] || {};
|
|
176
239
|
cid = convo.id;
|
|
177
240
|
}
|
|
178
|
-
this.closePreview(e);
|
|
179
241
|
this.props.onClick && this.props.onClick({
|
|
180
242
|
view: 'chat',
|
|
181
243
|
cid
|
|
@@ -188,68 +250,113 @@ class ChatButton extends _common.Com {
|
|
|
188
250
|
class: "chat-button--unread"
|
|
189
251
|
}, unreadcount);
|
|
190
252
|
}
|
|
191
|
-
|
|
253
|
+
getAgentOfPreviewEvent(ev) {
|
|
192
254
|
let account = this.props.store.matchAccount();
|
|
193
|
-
if (!account) return null;
|
|
194
255
|
let accountSetting = this.props.plugin.chatbox;
|
|
195
|
-
let
|
|
256
|
+
let previewEvent = ev;
|
|
257
|
+
let byid = _index.default.get(previewEvent, 'by.display_id', _index.default.get(previewEvent, 'by.id'));
|
|
196
258
|
let agent = this.props.store.matchAgent(byid);
|
|
197
259
|
if (!agent) agent = this.props.store.matchAgent('*')[byid] || {};
|
|
198
260
|
agent = _index.default.cloneDeep(agent);
|
|
199
261
|
agent.fullname = agent.fullname || _index.default.get(account, 'name') || this.props.t('agent');
|
|
200
262
|
agent.avatar_url = agent.avatar_url || account.logo_url || require('../../assets/img/image_default.png');
|
|
201
|
-
let position = _index.default.get(accountSetting, 'desktop_button.position') || 'right';
|
|
202
|
-
if (this.props.store.isMobile()) {
|
|
203
|
-
position = _index.default.get(accountSetting, 'mobile_button.position') || position;
|
|
204
|
-
}
|
|
205
263
|
if (accountSetting && accountSetting.hide_agent_profile) {
|
|
206
264
|
agent = Object.assign({}, account, {
|
|
207
265
|
avatar_url: account.logo_url || require('../../assets/img/image_default.png'),
|
|
208
266
|
fullname: account.name || this.props.t('agent')
|
|
209
267
|
});
|
|
210
268
|
}
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
if (
|
|
269
|
+
return agent;
|
|
270
|
+
}
|
|
271
|
+
renderPreview() {
|
|
272
|
+
if (this.props.store.isMobile()) return;
|
|
273
|
+
if (!this.state.hasPreviewDom) return;
|
|
274
|
+
let previewEvent = this.state.previewEvent;
|
|
275
|
+
let agent = this.getAgentOfPreviewEvent(previewEvent);
|
|
276
|
+
let account = this.props.store.matchAccount();
|
|
277
|
+
let accountSetting = this.props.plugin.chatbox;
|
|
278
|
+
let position = _index.default.get(accountSetting, 'desktop_button.position') || 'right';
|
|
279
|
+
if (this.props.store.isMobile()) {
|
|
280
|
+
position = _index.default.get(accountSetting, 'mobile_button.position') || position;
|
|
281
|
+
}
|
|
282
|
+
let tags = this.renderMessagePreview(previewEvent);
|
|
283
|
+
let attachments = _index.default.get(previewEvent, 'data.message.attachments') || [];
|
|
284
|
+
let quickReplies = _index.default.find(attachments, att => att.type === 'quick_replies');
|
|
285
|
+
quickReplies = _index.default.get(quickReplies, 'quick_replies') || [];
|
|
286
|
+
let imgAtt = _index.default.find(attachments, att => _index.default.includes(att.mimetype, 'image') && att.url);
|
|
287
|
+
let uri = _index.default.get(imgAtt, 'url') || '';
|
|
288
|
+
if (uri && !uri.startsWith('https://') && !uri.startsWith('http://') && !uri.startsWith('content://') && !uri.startsWith('data:')) {
|
|
289
|
+
uri = this.props.store.FileURL + uri;
|
|
290
|
+
}
|
|
215
291
|
return (0, _preact.h)("div", {
|
|
216
|
-
class:
|
|
292
|
+
class: `widget-preview-new-wrapper ${this.state.previewExtraCls}`
|
|
217
293
|
}, (0, _preact.h)("div", {
|
|
218
|
-
class:
|
|
219
|
-
}, (0, _preact.h)("img", {
|
|
220
|
-
alt: "widget avatar",
|
|
221
|
-
class: "widget-preview--avatar",
|
|
222
|
-
src: this.props.store.replaceFileUrl(agent.avatar_url),
|
|
223
|
-
onError: ev => this.onProfileError(ev),
|
|
224
|
-
onload: _ => this.onProfileReady()
|
|
225
|
-
}), (0, _preact.h)("div", {
|
|
226
|
-
class: "widget-preview--content",
|
|
227
|
-
onClick: e => this.onPreviewClick(e)
|
|
294
|
+
class: `widget-preview-x-wrapper ${position}`
|
|
228
295
|
}, (0, _preact.h)("div", {
|
|
229
|
-
class: "widget-preview--title"
|
|
230
|
-
}, agent.fullname), (0, _preact.h)("p", {
|
|
231
|
-
class: "widget-preview--message"
|
|
232
|
-
}, tags)), (0, _preact.h)("div", {
|
|
233
296
|
class: "widget-preview--btn-close",
|
|
234
297
|
onClick: e => this.closePreview(e)
|
|
235
298
|
})), (0, _preact.h)("div", {
|
|
236
|
-
class:
|
|
299
|
+
class: `widget-preview-text-message ${position}`,
|
|
237
300
|
onClick: e => this.onPreviewClick(e)
|
|
238
301
|
}, (0, _preact.h)("div", {
|
|
239
|
-
class: "widget-preview
|
|
240
|
-
},
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
302
|
+
class: "widget-preview-text-message--header"
|
|
303
|
+
}, (0, _preact.h)("img", {
|
|
304
|
+
alt: "widget avatar",
|
|
305
|
+
class: "widget-preview--avatar",
|
|
306
|
+
src: this.props.store.replaceFileUrl(agent.avatar_url)
|
|
307
|
+
}), (0, _preact.h)("div", {
|
|
308
|
+
class: "widget-preview-text-message--author"
|
|
309
|
+
}, (0, _preact.h)("div", {
|
|
310
|
+
class: "widget-preview-text-message--author-text"
|
|
311
|
+
}, agent.fullname), accountSetting.is_online && (0, _preact.h)("div", {
|
|
312
|
+
class: "badge badge--success"
|
|
313
|
+
}, (0, _preact.h)("div", {
|
|
314
|
+
class: "dot dot--success mr-1"
|
|
315
|
+
}), 'ONLINE'))), (0, _preact.h)("div", {
|
|
316
|
+
class: "widget-preview-text-message--content"
|
|
317
|
+
}, tags)), uri && (0, _preact.h)("div", {
|
|
318
|
+
class: `widget-preview-image-wrapper ${position}`
|
|
319
|
+
}, (0, _preact.h)("div", {
|
|
320
|
+
class: "widget-preview-image-item",
|
|
321
|
+
onClick: () => this.onPreviewClick()
|
|
322
|
+
}, (0, _preact.h)("img", {
|
|
323
|
+
src: uri
|
|
324
|
+
}))), _index.default.size(quickReplies) > 0 && (0, _preact.h)("div", {
|
|
325
|
+
class: `widget-preview-quick-reply-wrapper ${position}`
|
|
326
|
+
}, _index.default.map(quickReplies, reply => {
|
|
327
|
+
if (!(reply.title || '').trim()) return;
|
|
328
|
+
return (0, _preact.h)("div", {
|
|
329
|
+
class: "widget-preview-quick-reply-item",
|
|
330
|
+
onClick: () => {
|
|
331
|
+
this.props.onSelectQuickReply({
|
|
332
|
+
text: reply.title,
|
|
333
|
+
format: 'plaintext',
|
|
334
|
+
conversation_id: _index.default.convoOfEv(previewEvent),
|
|
335
|
+
attachments: [{
|
|
336
|
+
type: 'postback',
|
|
337
|
+
postback: {
|
|
338
|
+
event_id: previewEvent.id,
|
|
339
|
+
payload: reply.payload
|
|
340
|
+
}
|
|
341
|
+
}]
|
|
342
|
+
});
|
|
343
|
+
}
|
|
344
|
+
}, reply.title);
|
|
345
|
+
})));
|
|
247
346
|
}
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
347
|
+
async prepareButtonImage() {
|
|
348
|
+
let accountSetting = this.props.plugin.chatbox;
|
|
349
|
+
accountSetting = this.fixMissingSetting(accountSetting);
|
|
350
|
+
let imgsrc = _index.default.get(accountSetting, 'desktop_button.background_image_url') || _index.default.get(accountSetting, 'desktop_button.background_mask_url') || defaultBubble;
|
|
351
|
+
if (this.props.store.isMobile()) {
|
|
352
|
+
imgsrc = _index.default.get(accountSetting, 'mobile_button.background_image_url') || _index.default.get(accountSetting, 'mobile_button.background_mask_url') || imgsrc;
|
|
353
|
+
}
|
|
354
|
+
imgsrc = this.props.store.replaceFileUrl(imgsrc);
|
|
355
|
+
await _index.default.preloadImg(imgsrc);
|
|
356
|
+
this.setState({
|
|
357
|
+
ready: true
|
|
251
358
|
});
|
|
252
|
-
this.
|
|
359
|
+
this.readyGate.open();
|
|
253
360
|
}
|
|
254
361
|
renderButton() {
|
|
255
362
|
if (typeof sbz_info != 'undefined') sbz_info.render_chatbox_button = _index.default.Date.now();
|
|
@@ -353,9 +460,7 @@ class ChatButton extends _common.Com {
|
|
|
353
460
|
height: "70",
|
|
354
461
|
alt: "chat button",
|
|
355
462
|
class: "chat-button--img",
|
|
356
|
-
|
|
357
|
-
src: imgsrc,
|
|
358
|
-
onError: (e, a) => this.onChatButtonError(e, a)
|
|
463
|
+
src: imgsrc
|
|
359
464
|
})), this.renderUnread());
|
|
360
465
|
}
|
|
361
466
|
onProfileError(ev) {
|
|
@@ -402,11 +507,7 @@ class ChatButton extends _common.Com {
|
|
|
402
507
|
e.preventDefault();
|
|
403
508
|
e.stopPropagation();
|
|
404
509
|
}
|
|
405
|
-
this.
|
|
406
|
-
displayPreview: false
|
|
407
|
-
});
|
|
408
|
-
this.props.store.closePreview();
|
|
409
|
-
this.forceUpdate();
|
|
510
|
+
this.HideGreeting();
|
|
410
511
|
}
|
|
411
512
|
}
|
|
412
513
|
exports.default = ChatButton;
|