@subiz/widget-v4 4.1.113 → 4.1.115
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/message.less +148 -9
- package/compiled_src/chatbox/Event.js +131 -2
- package/compiled_src/chatbox/Events.js +24 -11
- package/compiled_src/chatbox/ImageAttachments.js +1 -1
- package/compiled_src/chatbox/InfoMessage.js +1 -0
- package/compiled_src/chatbox/PoweredBy.js +1 -0
- package/compiled_src/chatbox/Widget.js +16 -11
- package/compiled_src/lib.js +3 -0
- package/compiled_src/store/store.js +25 -1
- package/dist/195ec5442e3.278.js +1 -0
- package/dist/{19565267fde.app.js → 195ec5442e3.app.js} +1 -1
- package/dist/{19565267fde.index.html → 195ec5442e3.index.html} +1 -1
- package/dist/{19565267fde.library.html → 195ec5442e3.library.html} +1 -1
- package/dist/{19565267fde.library.js → 195ec5442e3.library.js} +1 -1
- package/dist/{19565267fde.preview.html → 195ec5442e3.preview.html} +1 -1
- package/dist/{19565267fde.preview.js → 195ec5442e3.preview.js} +1 -1
- package/dist/{19565267fde.webview.js → 195ec5442e3.webview.js} +1 -1
- package/dist/278.js +1 -1
- package/dist/HASH +1 -1
- package/package.json +3 -3
- package/src/chatbox/Event.js +151 -28
- package/src/chatbox/Events.js +27 -13
- package/src/chatbox/ImageAttachments.js +1 -1
- package/src/chatbox/InfoMessage.js +3 -0
- package/src/chatbox/PoweredBy.js +2 -0
- package/src/chatbox/Widget.js +10 -3
- package/src/lib.js +4 -0
- package/src/store/store.js +29 -1
- package/dist/19565267fde.278.js +0 -1
- /package/dist/{19565267fde.127.js → 195ec5442e3.127.js} +0 -0
- /package/dist/{19565267fde.132.js → 195ec5442e3.132.js} +0 -0
- /package/dist/{19565267fde.185.js → 195ec5442e3.185.js} +0 -0
- /package/dist/{19565267fde.27.js → 195ec5442e3.27.js} +0 -0
- /package/dist/{19565267fde.459.js → 195ec5442e3.459.js} +0 -0
- /package/dist/{19565267fde.490.js → 195ec5442e3.490.js} +0 -0
- /package/dist/{19565267fde.74.js → 195ec5442e3.74.js} +0 -0
- /package/dist/{19565267fde.997.js → 195ec5442e3.997.js} +0 -0
package/assets/less/message.less
CHANGED
|
@@ -13,10 +13,10 @@
|
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
.mobile .widget-body--events {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
16
|
+
display: flex;
|
|
17
|
+
flex-direction: column;
|
|
18
|
+
justify-content: flex-end;
|
|
19
|
+
padding-bottom: 15px;
|
|
20
20
|
}
|
|
21
21
|
|
|
22
22
|
.widget-body--events-container.widget-body--events-container__error {
|
|
@@ -108,12 +108,15 @@
|
|
|
108
108
|
|
|
109
109
|
.message-text--agent {
|
|
110
110
|
white-space: pre-wrap;
|
|
111
|
-
margin: 5px 0 0;
|
|
112
111
|
display: inline-block;
|
|
113
112
|
background-color: @primary-color;
|
|
114
113
|
.color(@text-color);
|
|
115
114
|
padding: 10px 14px 10px 14px;
|
|
116
115
|
}
|
|
116
|
+
.message-agent.message-text--agent {
|
|
117
|
+
max-width: unset;
|
|
118
|
+
margin-top: 0;
|
|
119
|
+
}
|
|
117
120
|
|
|
118
121
|
.message-user__container {
|
|
119
122
|
display: flex;
|
|
@@ -148,13 +151,13 @@
|
|
|
148
151
|
}
|
|
149
152
|
|
|
150
153
|
.message-user.message-user-images-container {
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
+
width: 85%;
|
|
155
|
+
display: flex;
|
|
156
|
+
justify-content: flex-end;
|
|
154
157
|
}
|
|
155
158
|
|
|
156
159
|
.message-user.message-user-audio {
|
|
157
|
-
|
|
160
|
+
flex: 1;
|
|
158
161
|
}
|
|
159
162
|
|
|
160
163
|
.message-agent {
|
|
@@ -741,3 +744,139 @@ a.product_attachment__title {
|
|
|
741
744
|
margin-left: 5px;
|
|
742
745
|
margin-top: -2px;
|
|
743
746
|
}
|
|
747
|
+
|
|
748
|
+
.agent-convo-event-wrapper {
|
|
749
|
+
max-width: 85%;
|
|
750
|
+
margin-top: 5px;
|
|
751
|
+
}
|
|
752
|
+
|
|
753
|
+
.agent-convo-event-inner {
|
|
754
|
+
width: fit-content;
|
|
755
|
+
position: relative;
|
|
756
|
+
}
|
|
757
|
+
|
|
758
|
+
.message-event-actions {
|
|
759
|
+
position: absolute;
|
|
760
|
+
bottom: -18px;
|
|
761
|
+
margin-top: 4px;
|
|
762
|
+
left: calc(100% - 40px);
|
|
763
|
+
display: none;
|
|
764
|
+
border: 1px solid #dee2e6;
|
|
765
|
+
background-color: white;
|
|
766
|
+
border-radius: 4px;
|
|
767
|
+
z-index: 10;
|
|
768
|
+
}
|
|
769
|
+
|
|
770
|
+
.agent-convo-event-inner:hover .message-event-actions {
|
|
771
|
+
display: flex;
|
|
772
|
+
}
|
|
773
|
+
|
|
774
|
+
.agent-convo-event-inner.last {
|
|
775
|
+
.message-event-actions {
|
|
776
|
+
display: flex;
|
|
777
|
+
position: unset;
|
|
778
|
+
margin-top: 4px;
|
|
779
|
+
border: none;
|
|
780
|
+
padding: 0;
|
|
781
|
+
}
|
|
782
|
+
|
|
783
|
+
.message-event-action-btn {
|
|
784
|
+
padding: 0;
|
|
785
|
+
.message-event-action-btn-svg {
|
|
786
|
+
width: 24px;
|
|
787
|
+
height: 24px;
|
|
788
|
+
background-position: 2px 2px;
|
|
789
|
+
background-size: 20px 20px;
|
|
790
|
+
}
|
|
791
|
+
}
|
|
792
|
+
|
|
793
|
+
.message-event-action-btn.message-event-action-btn__dev {
|
|
794
|
+
.color(@gray-600);
|
|
795
|
+
padding-right: 10px;
|
|
796
|
+
border-radius: 5px;
|
|
797
|
+
.message-event-action-btn-svg {
|
|
798
|
+
width: 24px;
|
|
799
|
+
height: 24px;
|
|
800
|
+
background-position: 2px 2px;
|
|
801
|
+
background-size: 20px 20px;
|
|
802
|
+
}
|
|
803
|
+
}
|
|
804
|
+
|
|
805
|
+
.message-event-action-btn.message-event-action-btn__dev:hover {
|
|
806
|
+
.color(@black);
|
|
807
|
+
}
|
|
808
|
+
|
|
809
|
+
.message-event-action-btn.message-event-action-btn__dev.message-event-action-btn_like.active {
|
|
810
|
+
.color(#34c759);
|
|
811
|
+
}
|
|
812
|
+
|
|
813
|
+
.message-event-action-btn.message-event-action-btn__dev.message-event-action-btn_like.active {
|
|
814
|
+
.color(#34c759);
|
|
815
|
+
}
|
|
816
|
+
}
|
|
817
|
+
|
|
818
|
+
.message-event-action-btn.message-event-action-btn__dev:hover {
|
|
819
|
+
background-color: unset;
|
|
820
|
+
}
|
|
821
|
+
|
|
822
|
+
.message-event-action-btn {
|
|
823
|
+
height: 24px;
|
|
824
|
+
display: flex;
|
|
825
|
+
align-items: center;
|
|
826
|
+
justify-content: center;
|
|
827
|
+
cursor: pointer;
|
|
828
|
+
padding: 2px;
|
|
829
|
+
|
|
830
|
+
&:hover {
|
|
831
|
+
background-color: #ececec;
|
|
832
|
+
.message-event-action-btn-svg {
|
|
833
|
+
}
|
|
834
|
+
}
|
|
835
|
+
|
|
836
|
+
&.active:hover {
|
|
837
|
+
background-color: #dbfde3;
|
|
838
|
+
.message-event-action-btn-svg {
|
|
839
|
+
}
|
|
840
|
+
}
|
|
841
|
+
}
|
|
842
|
+
|
|
843
|
+
.message-event-action-btn.message-event-action-btn__dev {
|
|
844
|
+
padding: 0px;
|
|
845
|
+
|
|
846
|
+
&:hover {
|
|
847
|
+
background-color: unset;
|
|
848
|
+
}
|
|
849
|
+
|
|
850
|
+
&.active:hover {
|
|
851
|
+
background-color: unset;
|
|
852
|
+
}
|
|
853
|
+
}
|
|
854
|
+
|
|
855
|
+
.message-event-action-btn .message-event-action-btn-svg {
|
|
856
|
+
width: 20px;
|
|
857
|
+
height: 20px;
|
|
858
|
+
border-radius: 4px;
|
|
859
|
+
background-position: 2px 2px;
|
|
860
|
+
background-size: 16px 16px;
|
|
861
|
+
background-repeat: no-repeat;
|
|
862
|
+
background-position: center;
|
|
863
|
+
}
|
|
864
|
+
|
|
865
|
+
.message-event-action-btn-svg.like {
|
|
866
|
+
background-image: url('data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiAgd2lkdGg9IjI0IiAgaGVpZ2h0PSIyNCIgIHZpZXdCb3g9IjAgMCAyNCAyNCIgIGZpbGw9Im5vbmUiICBzdHJva2U9IiM2Yzc1N2QiICBzdHJva2Utd2lkdGg9IjIiICBzdHJva2UtbGluZWNhcD0icm91bmQiICBzdHJva2UtbGluZWpvaW49InJvdW5kIiAgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItdGh1bWItdXAiPjxwYXRoIHN0cm9rZT0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik03IDExdjhhMSAxIDAgMCAxIC0xIDFoLTJhMSAxIDAgMCAxIC0xIC0xdi03YTEgMSAwIDAgMSAxIC0xaDNhNCA0IDAgMCAwIDQgLTR2LTFhMiAyIDAgMCAxIDQgMHY1aDNhMiAyIDAgMCAxIDIgMmwtMSA1YTIgMyAwIDAgMSAtMiAyaC03YTMgMyAwIDAgMSAtMyAtMyIgLz48L3N2Zz4K');
|
|
867
|
+
}
|
|
868
|
+
.message-event-action-btn-svg.dislike {
|
|
869
|
+
background-image: url('data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiAgd2lkdGg9IjI0IiAgaGVpZ2h0PSIyNCIgIHZpZXdCb3g9IjAgMCAyNCAyNCIgIGZpbGw9Im5vbmUiICBzdHJva2U9IiM2Yzc1N2QiICBzdHJva2Utd2lkdGg9IjIiICBzdHJva2UtbGluZWNhcD0icm91bmQiICBzdHJva2UtbGluZWpvaW49InJvdW5kIiAgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItdGh1bWItZG93biI+PHBhdGggc3Ryb2tlPSJub25lIiBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTcgMTN2LThhMSAxIDAgMCAwIC0xIC0xaC0yYTEgMSAwIDAgMCAtMSAxdjdhMSAxIDAgMCAwIDEgMWgzYTQgNCAwIDAgMSA0IDR2MWEyIDIgMCAwIDAgNCAwdi01aDNhMiAyIDAgMCAwIDIgLTJsLTEgLTVhMiAzIDAgMCAwIC0yIC0yaC03YTMgMyAwIDAgMCAtMyAzIiAvPjwvc3ZnPgo=');
|
|
870
|
+
}
|
|
871
|
+
.message-event-action-btn:hover .message-event-action-btn-svg.like {
|
|
872
|
+
background-image: url('data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiAgd2lkdGg9IjI0IiAgaGVpZ2h0PSIyNCIgIHZpZXdCb3g9IjAgMCAyNCAyNCIgIGZpbGw9Im5vbmUiICBzdHJva2U9ImJsYWNrIiAgc3Ryb2tlLXdpZHRoPSIyIiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiAgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgIGNsYXNzPSJpY29uIGljb24tdGFibGVyIGljb25zLXRhYmxlci1vdXRsaW5lIGljb24tdGFibGVyLXRodW1iLXVwIj48cGF0aCBzdHJva2U9Im5vbmUiIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNNyAxMXY4YTEgMSAwIDAgMSAtMSAxaC0yYTEgMSAwIDAgMSAtMSAtMXYtN2ExIDEgMCAwIDEgMSAtMWgzYTQgNCAwIDAgMCA0IC00di0xYTIgMiAwIDAgMSA0IDB2NWgzYTIgMiAwIDAgMSAyIDJsLTEgNWEyIDMgMCAwIDEgLTIgMmgtN2EzIDMgMCAwIDEgLTMgLTMiIC8+PC9zdmc+Cg==');
|
|
873
|
+
}
|
|
874
|
+
.message-event-action-btn:hover .message-event-action-btn-svg.dislike {
|
|
875
|
+
background-image: url('data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiAgd2lkdGg9IjI0IiAgaGVpZ2h0PSIyNCIgIHZpZXdCb3g9IjAgMCAyNCAyNCIgIGZpbGw9Im5vbmUiICBzdHJva2U9ImJsYWNrIiAgc3Ryb2tlLXdpZHRoPSIyIiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiAgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgIGNsYXNzPSJpY29uIGljb24tdGFibGVyIGljb25zLXRhYmxlci1vdXRsaW5lIGljb24tdGFibGVyLXRodW1iLWRvd24iPjxwYXRoIHN0cm9rZT0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik03IDEzdi04YTEgMSAwIDAgMCAtMSAtMWgtMmExIDEgMCAwIDAgLTEgMXY3YTEgMSAwIDAgMCAxIDFoM2E0IDQgMCAwIDEgNCA0djFhMiAyIDAgMCAwIDQgMHYtNWgzYTIgMiAwIDAgMCAyIC0ybC0xIC01YTIgMyAwIDAgMCAtMiAtMmgtN2EzIDMgMCAwIDAgLTMgMyIgLz48L3N2Zz4K');
|
|
876
|
+
}
|
|
877
|
+
.message-event-action-btn.active .message-event-action-btn-svg.like {
|
|
878
|
+
background-image: url('data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiAgd2lkdGg9IjI0IiAgaGVpZ2h0PSIyNCIgIHZpZXdCb3g9IjAgMCAyNCAyNCIgIGZpbGw9IiMzNEM3NTkiICBjbGFzcz0iaWNvbiBpY29uLXRhYmxlciBpY29ucy10YWJsZXItZmlsbGVkIGljb24tdGFibGVyLXRodW1iLXVwIj48cGF0aCBzdHJva2U9Im5vbmUiIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMTMgM2EzIDMgMCAwIDEgMi45OTUgMi44MjRsLjAwNSAuMTc2djRoMmEzIDMgMCAwIDEgMi45OCAyLjY1bC4wMTUgLjE3NGwuMDA1IC4xNzZsLS4wMiAuMTk2bC0xLjAwNiA1LjAzMmMtLjM4MSAxLjYyNiAtMS41MDIgMi43OTYgLTIuODEgMi43OGwtLjE2NCAtLjAwOGgtOGExIDEgMCAwIDEgLS45OTMgLS44ODNsLS4wMDcgLS4xMTdsLjAwMSAtOS41MzZhMSAxIDAgMCAxIC41IC0uODY1YTIuOTk4IDIuOTk4IDAgMCAwIDEuNDkyIC0yLjM5N2wuMDA3IC0uMjAydi0xYTMgMyAwIDAgMSAzIC0zeiIgLz48cGF0aCBkPSJNNSAxMGExIDEgMCAwIDEgLjk5MyAuODgzbC4wMDcgLjExN3Y5YTEgMSAwIDAgMSAtLjg4MyAuOTkzbC0uMTE3IC4wMDdoLTFhMiAyIDAgMCAxIC0xLjk5NSAtMS44NWwtLjAwNSAtLjE1di03YTIgMiAwIDAgMSAxLjg1IC0xLjk5NWwuMTUgLS4wMDVoMXoiIC8+PC9zdmc+Cg==');
|
|
879
|
+
}
|
|
880
|
+
.message-event-action-btn.active .message-event-action-btn-svg.dislike {
|
|
881
|
+
background-image: url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzI0ODBfOTUpIj4KPHBhdGggZD0iTTEzIDIxLjAwNzlDMTMuNzY1IDIxLjAwOCAxNC41MDEyIDIwLjcxNTcgMTUuMDU3OSAyMC4xOTFDMTUuNjE0NyAxOS42NjYyIDE1Ljk0OTkgMTguOTQ4NiAxNS45OTUgMTguMTg0OUwxNiAxOC4wMDc5VjE0LjAwNzlIMThDMTguNzM1MSAxNC4wMDggMTkuNDQ0NyAxMy43MzgyIDE5Ljk5NCAxMy4yNDk3QzIwLjU0MzQgMTIuNzYxMiAyMC44OTQyIDEyLjA4OCAyMC45OCAxMS4zNTc5TDIwLjk5NSAxMS4xODQ5TDIxIDExLjAwNzlMMjAuOTggMTAuODExOUwxOS45NzQgNS43Nzk5MkMxOS41OTMgNC4xNTQ5MiAxOC40NzIgMi45ODM5MiAxNy4xNjQgMi45OTk5MkwxNyAzLjAwNzkySDlDOC43NTQ5MSAzLjAwNzk4IDguNTE4MzggMy4wOTgwNCA4LjMzNTMzIDMuMjYxMDFDOC4xNTIyNyAzLjQyMzk3IDguMDM1NDMgMy42NDg0OSA4LjAwNyAzLjg5MTkyTDggNC4wMDc5Mkw4LjAwMSAxMy41NDM5QzguMDAxIDEzLjcxOTUgOC4wNDcyMSAxMy44OTE5IDguMTM0OTggMTQuMDQzOUM4LjIyMjc1IDE0LjE5NTkgOC4zNDg5OCAxNC4zMjIyIDguNTAxIDE0LjQwOTlDOC45MjcyOSAxNC42NTYxIDkuMjg2NCAxNS4wMDM1IDkuNTQ2NjEgMTUuNDIxM0M5LjgwNjgyIDE1LjgzOTIgOS45NjAxMyAxNi4zMTQ3IDkuOTkzIDE2LjgwNTlMMTAgMTcuMDA3OVYxOC4wMDc5QzEwIDE4LjgwMzYgMTAuMzE2MSAxOS41NjY2IDEwLjg3ODcgMjAuMTI5MkMxMS40NDEzIDIwLjY5MTggMTIuMjA0NCAyMS4wMDc5IDEzIDIxLjAwNzlaIiBmaWxsPSIjMzMzMzMzIi8+CjxwYXRoIGQ9Ik01IDE0LjAwODFDNS4yNDQ5MyAxNC4wMDggNS40ODEzNCAxMy45MTgxIDUuNjY0MzcgMTMuNzU1M0M1Ljg0NzQxIDEzLjU5MjYgNS45NjQzNCAxMy4zNjgzIDUuOTkzIDEzLjEyNTFMNiAxMy4wMDgxVjQuMDA4MDZDNS45OTk5NyAzLjc2MzEyIDUuOTEwMDQgMy41MjY3MiA1Ljc0NzI4IDMuMzQzNjhDNS41ODQ1MyAzLjE2MDY1IDUuMzYwMjUgMy4wNDM3MSA1LjExNyAzLjAxNTA2TDUgMy4wMDgwNkg0QzMuNDk1MSAzLjAwNzkzIDMuMDA4ODQgMy4xOTg3OCAyLjYzODgxIDMuNTQyMjlDMi4yNjg3OCAzLjg4NTc5IDIuMDQyMzYgNC4zNTY1NCAyLjAwNSA0Ljg2MDA2TDIgNS4wMTAwNlYxMi4wMTAxQzIuMDAwMDkgMTIuNTE0NSAyLjE5MDc3IDEzLjAwMDIgMi41MzM4NCAxMy4zN0MyLjg3NjkgMTMuNzM5NyAzLjM0NzAyIDEzLjk2NjIgMy44NSAxNC4wMDQxTDQgMTQuMDA5MUw1IDE0LjAwODFaIiBmaWxsPSIjMzMzMzMzIi8+CjwvZz4KPGRlZnM+CjxjbGlwUGF0aCBpZD0iY2xpcDBfMjQ4MF85NSI+CjxyZWN0IHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0id2hpdGUiLz4KPC9jbGlwUGF0aD4KPC9kZWZzPgo8L3N2Zz4K');
|
|
882
|
+
}
|
|
@@ -28,7 +28,11 @@ const LoadOrderAttachments = () => Promise.resolve().then(() => _interopRequireW
|
|
|
28
28
|
class Event extends _common.Com {
|
|
29
29
|
constructor(props) {
|
|
30
30
|
super(props);
|
|
31
|
+
this.props.store.onConvoEvent(this, ev => this.onEvent(ev));
|
|
31
32
|
this.refForm = (0, _preact.createRef)();
|
|
33
|
+
this.state = {
|
|
34
|
+
pongs: _index.default.get(this.props.event, 'ev.data.message.pongs') || []
|
|
35
|
+
};
|
|
32
36
|
}
|
|
33
37
|
render() {
|
|
34
38
|
var ev = _index.default.get(this.props.event, 'ev', {});
|
|
@@ -52,6 +56,24 @@ class Event extends _common.Com {
|
|
|
52
56
|
focus() {
|
|
53
57
|
this.refForm.current && this.refForm.current.focus();
|
|
54
58
|
}
|
|
59
|
+
onEvent(ev) {
|
|
60
|
+
if (ev.id !== _index.default.get(this.props.event, 'ev.id')) return;
|
|
61
|
+
this.setState({
|
|
62
|
+
pongs: _index.default.get(ev, 'data.message.pongs') || []
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
hasLike() {
|
|
66
|
+
let {
|
|
67
|
+
pongs
|
|
68
|
+
} = this.state;
|
|
69
|
+
return !!_index.default.find(pongs, pong => pong.type === 'like');
|
|
70
|
+
}
|
|
71
|
+
hasDislike() {
|
|
72
|
+
let {
|
|
73
|
+
pongs
|
|
74
|
+
} = this.state;
|
|
75
|
+
return !!_index.default.find(pongs, pong => pong.type === 'dislike');
|
|
76
|
+
}
|
|
55
77
|
chooseQuickReply(reply) {
|
|
56
78
|
let ev = _index.default.get(this.props.event, 'ev', {});
|
|
57
79
|
let message = {
|
|
@@ -141,14 +163,21 @@ class Event extends _common.Com {
|
|
|
141
163
|
t: this.props.t
|
|
142
164
|
}));
|
|
143
165
|
}
|
|
166
|
+
if (this.props.store.isAIDevMode()) $time = null;
|
|
144
167
|
let t = new _index.default.Date(ev.created).toLocaleString();
|
|
145
168
|
if (_index.default.get(ev, 'by.type') !== 'user') {
|
|
146
169
|
let $sender = null;
|
|
147
170
|
if (this.props.event.mode === 'lead') $sender = this.renderAgentAvatar(ev);
|
|
171
|
+
let innercls = 'agent-convo-event-inner';
|
|
172
|
+
if (this.props.isLast) innercls += ' last';
|
|
148
173
|
return (0, _preact.h)("div", {
|
|
149
174
|
class: "convo-event agent-message",
|
|
150
175
|
title: t
|
|
151
|
-
}, $time, $sender, (0, _preact.h)(
|
|
176
|
+
}, $time, $sender, (0, _preact.h)("div", {
|
|
177
|
+
class: "agent-convo-event-wrapper"
|
|
178
|
+
}, (0, _preact.h)("div", {
|
|
179
|
+
class: innercls
|
|
180
|
+
}, (0, _preact.h)(_TextMessage.default, {
|
|
152
181
|
store: this.props.store,
|
|
153
182
|
ev: ev,
|
|
154
183
|
onLink: this.props.onLink
|
|
@@ -196,7 +225,7 @@ class Event extends _common.Com {
|
|
|
196
225
|
store: this.props.store,
|
|
197
226
|
ev: ev,
|
|
198
227
|
onSelect: e => this.chooseQuickReply(e)
|
|
199
|
-
}));
|
|
228
|
+
}), this.renderReactions(), this.renderAIDevNote())));
|
|
200
229
|
}
|
|
201
230
|
if (_index.default.get(ev, 'data.message.idempotency_key') === ev.id && this.props.store.now() - ev.created < 900) {
|
|
202
231
|
_index.default.setTimeout(() => this.setState({
|
|
@@ -269,6 +298,106 @@ class Event extends _common.Com {
|
|
|
269
298
|
ev: ev
|
|
270
299
|
})), $error);
|
|
271
300
|
}
|
|
301
|
+
async onSendReaction(action) {
|
|
302
|
+
if (this._reacting) return;
|
|
303
|
+
let ev = this.props.event.ev;
|
|
304
|
+
let cid = _index.default.get(ev, 'data.message.conversation_id');
|
|
305
|
+
ev = {
|
|
306
|
+
type: 'message_pong',
|
|
307
|
+
data: {
|
|
308
|
+
message: {
|
|
309
|
+
id: ev.id,
|
|
310
|
+
pongs: [{
|
|
311
|
+
type: action
|
|
312
|
+
}],
|
|
313
|
+
conversion_id: cid
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
};
|
|
317
|
+
if (action == 'dislike' && this.props.store.isAIDevMode()) {
|
|
318
|
+
this.props.store.emitConvoEvent({
|
|
319
|
+
type: 'bad_feedbacked',
|
|
320
|
+
data: {
|
|
321
|
+
event: ev,
|
|
322
|
+
id: ev.id,
|
|
323
|
+
conversion_id: cid
|
|
324
|
+
}
|
|
325
|
+
});
|
|
326
|
+
}
|
|
327
|
+
let {
|
|
328
|
+
pongs
|
|
329
|
+
} = this.state;
|
|
330
|
+
if (action === 'like') {
|
|
331
|
+
pongs = pongs.filter(pong => pong.type !== 'dislike');
|
|
332
|
+
pongs.push({
|
|
333
|
+
type: 'like'
|
|
334
|
+
});
|
|
335
|
+
} else if (action === 'dislike') {
|
|
336
|
+
pongs = pongs.filter(pong => pong.type !== 'like');
|
|
337
|
+
pongs.push({
|
|
338
|
+
type: 'dislike'
|
|
339
|
+
});
|
|
340
|
+
} else if (action === 'remove_like') {
|
|
341
|
+
pongs = pongs.filter(pong => pong.type !== 'like');
|
|
342
|
+
} else if (action === 'remove_dislike') {
|
|
343
|
+
pongs = pongs.filter(pong => pong.type !== 'dislike');
|
|
344
|
+
}
|
|
345
|
+
this.setState({
|
|
346
|
+
pongs
|
|
347
|
+
});
|
|
348
|
+
this._reacting = true;
|
|
349
|
+
let res = await this.props.store.sendReaction(cid, ev);
|
|
350
|
+
this._reacting = false;
|
|
351
|
+
}
|
|
352
|
+
renderReactions() {
|
|
353
|
+
if (this.props.store.isAIDevMode()) return null;
|
|
354
|
+
let ev = _index.default.get(this.props.event, 'ev') || {};
|
|
355
|
+
let pongs = _index.default.get(ev, 'data.message.pongs') || [];
|
|
356
|
+
let hasLike = this.hasLike();
|
|
357
|
+
let hasDislike = this.hasDislike();
|
|
358
|
+
let likecls = 'message-event-action-btn';
|
|
359
|
+
if (hasLike) likecls += ' active';
|
|
360
|
+
let dislikecls = 'message-event-action-btn';
|
|
361
|
+
if (hasDislike) dislikecls += ' active';
|
|
362
|
+
return (0, _preact.h)("div", {
|
|
363
|
+
class: "message-event-actions"
|
|
364
|
+
}, (0, _preact.h)("div", {
|
|
365
|
+
class: likecls,
|
|
366
|
+
onClick: () => this.onSendReaction(hasLike ? 'remove_like' : 'like')
|
|
367
|
+
}, (0, _preact.h)("div", {
|
|
368
|
+
class: "message-event-action-btn-svg like"
|
|
369
|
+
})), (0, _preact.h)("div", {
|
|
370
|
+
class: dislikecls,
|
|
371
|
+
onClick: () => this.onSendReaction(hasDislike ? 'remove_dislike' : 'dislike')
|
|
372
|
+
}, (0, _preact.h)("div", {
|
|
373
|
+
class: "message-event-action-btn-svg dislike"
|
|
374
|
+
})));
|
|
375
|
+
}
|
|
376
|
+
renderAIDevNote() {
|
|
377
|
+
if (!this.props.isLast) return null;
|
|
378
|
+
if (!this.props.store.isAIDevMode()) return null;
|
|
379
|
+
let ev = _index.default.get(this.props.event, 'ev') || {};
|
|
380
|
+
let pongs = _index.default.get(ev, 'data.message.pongs') || [];
|
|
381
|
+
let hasLike = this.hasLike();
|
|
382
|
+
let hasDislike = this.hasDislike();
|
|
383
|
+
let likecls = 'message-event-action-btn message-event-action-btn__dev message-event-action-btn_like';
|
|
384
|
+
if (hasLike) likecls += ' active';
|
|
385
|
+
let dislikecls = 'message-event-action-btn message-event-action-btn__dev message-event-action-btn_dislike';
|
|
386
|
+
if (hasDislike) dislikecls += ' active';
|
|
387
|
+
return (0, _preact.h)("div", {
|
|
388
|
+
class: "message-event-actions"
|
|
389
|
+
}, (0, _preact.h)("div", {
|
|
390
|
+
class: likecls,
|
|
391
|
+
onClick: () => this.onSendReaction(hasLike ? 'remove_like' : 'like')
|
|
392
|
+
}, (0, _preact.h)("div", {
|
|
393
|
+
class: "message-event-action-btn-svg like"
|
|
394
|
+
}), " Good"), (0, _preact.h)("div", {
|
|
395
|
+
class: dislikecls,
|
|
396
|
+
onClick: () => this.onSendReaction(hasDislike ? 'remove_dislike' : 'dislike')
|
|
397
|
+
}, (0, _preact.h)("div", {
|
|
398
|
+
class: "message-event-action-btn-svg dislike"
|
|
399
|
+
}), " Bad"));
|
|
400
|
+
}
|
|
272
401
|
renderUpdateConvo(ev) {
|
|
273
402
|
var state = _index.default.get(ev, 'data.conversation.state');
|
|
274
403
|
if (state === 'active') return null;
|
|
@@ -52,17 +52,30 @@ class Events extends _common.Com {
|
|
|
52
52
|
ev: ev
|
|
53
53
|
}));
|
|
54
54
|
processEvents(convo, events);
|
|
55
|
-
let
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
55
|
+
let lastAgentMessageSentId = '';
|
|
56
|
+
for (let i = events.length - 1; i >= 0; i--) {
|
|
57
|
+
let ev = _index.default.get(events, [i, 'ev']) || {};
|
|
58
|
+
let bytype = _index.default.get(ev, 'by.type');
|
|
59
|
+
if (bytype !== 'user' && ev.type === 'message_sent') {
|
|
60
|
+
lastAgentMessageSentId = ev.id;
|
|
61
|
+
break;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
let $events = _index.default.map(events, ev => {
|
|
65
|
+
let isLast = ev.ev.id === lastAgentMessageSentId;
|
|
66
|
+
return (0, _preact.h)(_Event.default, {
|
|
67
|
+
isLast: isLast,
|
|
68
|
+
chatbox: this.props.chatbox,
|
|
69
|
+
onLink: this.props.onLink,
|
|
70
|
+
store: this.props.store,
|
|
71
|
+
onFormSubmit: this.props.onFormSubmit,
|
|
72
|
+
onSend: this.props.onSend,
|
|
73
|
+
onPostback: this.props.onPostback,
|
|
74
|
+
event: ev,
|
|
75
|
+
t: this.props.t,
|
|
76
|
+
key: ev.ev.id
|
|
77
|
+
});
|
|
78
|
+
});
|
|
66
79
|
let $loading = null;
|
|
67
80
|
let style = 'opacity: 1 !important';
|
|
68
81
|
if (this.state.loading || this.props.creating) {
|
|
@@ -27,7 +27,7 @@ class ImageAttachment extends _common.Com {
|
|
|
27
27
|
const MAX_HEIGHT = 240;
|
|
28
28
|
const DEFAULT_MAX_WIDTH = 267;
|
|
29
29
|
let $container = this.containerRef.current;
|
|
30
|
-
this.frameWidth = $container ? $container.offsetWidth : DEFAULT_MAX_WIDTH;
|
|
30
|
+
this.frameWidth = $container ? $container.parentNode.parentNode.offsetWidth : DEFAULT_MAX_WIDTH;
|
|
31
31
|
this.frameHeight = MAX_HEIGHT;
|
|
32
32
|
this.setState({
|
|
33
33
|
ready: true
|
|
@@ -8,6 +8,7 @@ var _preact = require("preact");
|
|
|
8
8
|
var logo = require('../../assets/img/subiz-mono.svg');
|
|
9
9
|
function PoweredBy(props) {
|
|
10
10
|
if (props.store.isMobile()) return null;
|
|
11
|
+
if (props.store.isAIDevMode()) return null;
|
|
11
12
|
let user = props.store.matchUser() || {};
|
|
12
13
|
var link = `https://subiz.com.vn/?utm_source=${window.location.host || `id-${user.account_id}`}&utm_medium=widget&utm_campaign=widget_referral`;
|
|
13
14
|
return (0, _preact.h)("div", {
|
|
@@ -201,19 +201,24 @@ class Widget extends _common.Com {
|
|
|
201
201
|
let cls = 'widget-container widget-container--' + position;
|
|
202
202
|
if (!this.props.store.isMobile() && _index.default.get(accountSetting, 'window_mode') === 'full') cls += ' widget-container--full';
|
|
203
203
|
if (!this.props.isShow) cls += ' widget-container--hide';
|
|
204
|
+
let hideheader = _index.default.get(accountSetting, 'header.hidden', false);
|
|
205
|
+
var $header;
|
|
206
|
+
if (!hideheader) {
|
|
207
|
+
$header = (0, _preact.h)(_Header.default, {
|
|
208
|
+
t: this.props.t,
|
|
209
|
+
plugin: this.props.plugin,
|
|
210
|
+
store: this.props.store,
|
|
211
|
+
cid: this.props.cid,
|
|
212
|
+
view: this.props.view,
|
|
213
|
+
onClose: this.props.onClose,
|
|
214
|
+
onGotoList: () => this.props.onGo({
|
|
215
|
+
view: 'list'
|
|
216
|
+
})
|
|
217
|
+
});
|
|
218
|
+
}
|
|
204
219
|
return (0, _preact.h)("div", {
|
|
205
220
|
class: cls
|
|
206
|
-
},
|
|
207
|
-
t: this.props.t,
|
|
208
|
-
plugin: this.props.plugin,
|
|
209
|
-
store: this.props.store,
|
|
210
|
-
cid: this.props.cid,
|
|
211
|
-
view: this.props.view,
|
|
212
|
-
onClose: this.props.onClose,
|
|
213
|
-
onGotoList: () => this.props.onGo({
|
|
214
|
-
view: 'list'
|
|
215
|
-
})
|
|
216
|
-
}), $body);
|
|
221
|
+
}, $header, $body);
|
|
217
222
|
}
|
|
218
223
|
async submitPrechatForm(form, formName) {
|
|
219
224
|
if (this.state.submiting) return;
|
package/compiled_src/lib.js
CHANGED
|
@@ -334,6 +334,15 @@ class Store {
|
|
|
334
334
|
highlight(pluginid, ref) {
|
|
335
335
|
this.pubsub.publish('highlight', pluginid, ref);
|
|
336
336
|
}
|
|
337
|
+
emitConvoEvent(ev) {
|
|
338
|
+
this.pubsub.publish('events', ev);
|
|
339
|
+
}
|
|
340
|
+
setAIDevMode(mode) {
|
|
341
|
+
this.ai_dev_mode = mode;
|
|
342
|
+
}
|
|
343
|
+
isAIDevMode() {
|
|
344
|
+
return this.ai_dev_mode;
|
|
345
|
+
}
|
|
337
346
|
overrideDeviceType(type) {
|
|
338
347
|
this.forceDevice = type;
|
|
339
348
|
this.pubsub.publish('account');
|
|
@@ -722,7 +731,17 @@ class Store {
|
|
|
722
731
|
var oldev = this.chain.match(cid, msgid);
|
|
723
732
|
if (!_index.default.get(oldev, 'data.message')) return;
|
|
724
733
|
var pongs = _index.default.get(oldev, 'data.message.pongs', []);
|
|
725
|
-
|
|
734
|
+
let newpongs = _index.default.get(ev, 'data.message.pongs', []) || [];
|
|
735
|
+
pongs = pongs.concat(newpongs);
|
|
736
|
+
if (newpongs.length === 1) {
|
|
737
|
+
let pongtype = newpongs[0].type;
|
|
738
|
+
if (pongtype === 'like' || pongtype === 'remove_dislike') {
|
|
739
|
+
pongs = pongs.filter(pong => pong.type !== 'dislike');
|
|
740
|
+
}
|
|
741
|
+
if (pongtype === 'dislike' || pongtype === 'remove_like') {
|
|
742
|
+
pongs = pongs.filter(pong => pong.type !== 'like');
|
|
743
|
+
}
|
|
744
|
+
}
|
|
726
745
|
oldev.data.message.pongs = pongs;
|
|
727
746
|
_index.default.map(pongs, pong => {
|
|
728
747
|
if (pong.member_id == user.id && pong.type === 'seen') {
|
|
@@ -731,6 +750,7 @@ class Store {
|
|
|
731
750
|
}
|
|
732
751
|
});
|
|
733
752
|
this.chain.put(cid, oldev.id, _index.default.getMs(oldev.created), oldev);
|
|
753
|
+
this.pubsub.publish('events', oldev);
|
|
734
754
|
}
|
|
735
755
|
if (ev.type === 'message_sent') {
|
|
736
756
|
let idemkey = _index.default.get(ev, 'data.message.idempotency_key');
|
|
@@ -757,6 +777,7 @@ class Store {
|
|
|
757
777
|
this._typing(cid);
|
|
758
778
|
}
|
|
759
779
|
async startConvo(req) {
|
|
780
|
+
if (!req) req = {};
|
|
760
781
|
await this.readyGate.entry();
|
|
761
782
|
this.convoGate.close();
|
|
762
783
|
if (!req.source) req.source = document.location.href;
|
|
@@ -782,6 +803,9 @@ class Store {
|
|
|
782
803
|
createPostback(cid, postback) {
|
|
783
804
|
return this.api.createPostback(cid, postback);
|
|
784
805
|
}
|
|
806
|
+
sendReaction(cid, ev) {
|
|
807
|
+
return this.api.sendConvoEvent(cid, ev);
|
|
808
|
+
}
|
|
785
809
|
async sendConvoEvent(cid, type, data) {
|
|
786
810
|
await this.readyGate.entry();
|
|
787
811
|
var idempotency = _index.default.randomString(36);
|