@subiz/widget-v4 4.1.114 → 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.
@@ -758,6 +758,7 @@ a.product_attachment__title {
758
758
  .message-event-actions {
759
759
  position: absolute;
760
760
  bottom: -18px;
761
+ margin-top: 4px;
761
762
  left: calc(100% - 40px);
762
763
  display: none;
763
764
  border: 1px solid #dee2e6;
@@ -788,10 +789,37 @@ a.product_attachment__title {
788
789
  background-size: 20px 20px;
789
790
  }
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;
791
820
  }
792
821
 
793
822
  .message-event-action-btn {
794
- width: 24px;
795
823
  height: 24px;
796
824
  display: flex;
797
825
  align-items: center;
@@ -800,18 +828,30 @@ a.product_attachment__title {
800
828
  padding: 2px;
801
829
 
802
830
  &:hover {
831
+ background-color: #ececec;
803
832
  .message-event-action-btn-svg {
804
- background-color: #ececec;
805
833
  }
806
834
  }
807
835
 
808
836
  &.active:hover {
837
+ background-color: #dbfde3;
809
838
  .message-event-action-btn-svg {
810
- background-color: #dbfde3;
811
839
  }
812
840
  }
813
841
  }
814
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
+
815
855
  .message-event-action-btn .message-event-action-btn-svg {
816
856
  width: 20px;
817
857
  height: 20px;
@@ -823,20 +863,20 @@ a.product_attachment__title {
823
863
  }
824
864
 
825
865
  .message-event-action-btn-svg.like {
826
- background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjNWE2MjY4IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgc3Ryb2tlLXdpZHRoPSIxIj4gPHBhdGggZD0iTTcgMTF2OGExIDEgMCAwIDEgLTEgMWgtMmExIDEgMCAwIDEgLTEgLTF2LTdhMSAxIDAgMCAxIDEgLTFoM2E0IDQgMCAwIDAgNCAtNHYtMWEyIDIgMCAwIDEgNCAwdjVoM2EyIDIgMCAwIDEgMiAybC0xIDVhMiAzIDAgMCAxIC0yIDJoLTdhMyAzIDAgMCAxIC0zIC0zIj48L3BhdGg+IDwvc3ZnPiAK');
866
+ background-image: url('data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiAgd2lkdGg9IjI0IiAgaGVpZ2h0PSIyNCIgIHZpZXdCb3g9IjAgMCAyNCAyNCIgIGZpbGw9Im5vbmUiICBzdHJva2U9IiM2Yzc1N2QiICBzdHJva2Utd2lkdGg9IjIiICBzdHJva2UtbGluZWNhcD0icm91bmQiICBzdHJva2UtbGluZWpvaW49InJvdW5kIiAgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItdGh1bWItdXAiPjxwYXRoIHN0cm9rZT0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik03IDExdjhhMSAxIDAgMCAxIC0xIDFoLTJhMSAxIDAgMCAxIC0xIC0xdi03YTEgMSAwIDAgMSAxIC0xaDNhNCA0IDAgMCAwIDQgLTR2LTFhMiAyIDAgMCAxIDQgMHY1aDNhMiAyIDAgMCAxIDIgMmwtMSA1YTIgMyAwIDAgMSAtMiAyaC03YTMgMyAwIDAgMSAtMyAtMyIgLz48L3N2Zz4K');
827
867
  }
828
868
  .message-event-action-btn-svg.dislike {
829
- background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjNWE2MjY4IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgc3Ryb2tlLXdpZHRoPSIxIj4gPHBhdGggZD0iTTcgMTN2LThhMSAxIDAgMCAwIC0xIC0xaC0yYTEgMSAwIDAgMCAtMSAxdjdhMSAxIDAgMCAwIDEgMWgzYTQgNCAwIDAgMSA0IDR2MWEyIDIgMCAwIDAgNCAwdi01aDNhMiAyIDAgMCAwIDIgLTJsLTEgLTVhMiAzIDAgMCAwIC0yIC0yaC03YTMgMyAwIDAgMCAtMyAzIj48L3BhdGg+IDwvc3ZnPiAK');
869
+ background-image: url('data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiAgd2lkdGg9IjI0IiAgaGVpZ2h0PSIyNCIgIHZpZXdCb3g9IjAgMCAyNCAyNCIgIGZpbGw9Im5vbmUiICBzdHJva2U9IiM2Yzc1N2QiICBzdHJva2Utd2lkdGg9IjIiICBzdHJva2UtbGluZWNhcD0icm91bmQiICBzdHJva2UtbGluZWpvaW49InJvdW5kIiAgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItdGh1bWItZG93biI+PHBhdGggc3Ryb2tlPSJub25lIiBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTcgMTN2LThhMSAxIDAgMCAwIC0xIC0xaC0yYTEgMSAwIDAgMCAtMSAxdjdhMSAxIDAgMCAwIDEgMWgzYTQgNCAwIDAgMSA0IDR2MWEyIDIgMCAwIDAgNCAwdi01aDNhMiAyIDAgMCAwIDIgLTJsLTEgLTVhMiAzIDAgMCAwIC0yIC0yaC03YTMgMyAwIDAgMCAtMyAzIiAvPjwvc3ZnPgo=');
830
870
  }
831
871
  .message-event-action-btn:hover .message-event-action-btn-svg.like {
832
- background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBzdHJva2Utd2lkdGg9IjEiPiA8cGF0aCBkPSJNNyAxMXY4YTEgMSAwIDAgMSAtMSAxaC0yYTEgMSAwIDAgMSAtMSAtMXYtN2ExIDEgMCAwIDEgMSAtMWgzYTQgNCAwIDAgMCA0IC00di0xYTIgMiAwIDAgMSA0IDB2NWgzYTIgMiAwIDAgMSAyIDJsLTEgNWEyIDMgMCAwIDEgLTIgMmgtN2EzIDMgMCAwIDEgLTMgLTMiPjwvcGF0aD4gPC9zdmc+IA==');
872
+ background-image: url('data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiAgd2lkdGg9IjI0IiAgaGVpZ2h0PSIyNCIgIHZpZXdCb3g9IjAgMCAyNCAyNCIgIGZpbGw9Im5vbmUiICBzdHJva2U9ImJsYWNrIiAgc3Ryb2tlLXdpZHRoPSIyIiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiAgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgIGNsYXNzPSJpY29uIGljb24tdGFibGVyIGljb25zLXRhYmxlci1vdXRsaW5lIGljb24tdGFibGVyLXRodW1iLXVwIj48cGF0aCBzdHJva2U9Im5vbmUiIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNNyAxMXY4YTEgMSAwIDAgMSAtMSAxaC0yYTEgMSAwIDAgMSAtMSAtMXYtN2ExIDEgMCAwIDEgMSAtMWgzYTQgNCAwIDAgMCA0IC00di0xYTIgMiAwIDAgMSA0IDB2NWgzYTIgMiAwIDAgMSAyIDJsLTEgNWEyIDMgMCAwIDEgLTIgMmgtN2EzIDMgMCAwIDEgLTMgLTMiIC8+PC9zdmc+Cg==');
833
873
  }
834
874
  .message-event-action-btn:hover .message-event-action-btn-svg.dislike {
835
- background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBzdHJva2Utd2lkdGg9IjEiPiA8cGF0aCBkPSJNNyAxM3YtOGExIDEgMCAwIDAgLTEgLTFoLTJhMSAxIDAgMCAwIC0xIDF2N2ExIDEgMCAwIDAgMSAxaDNhNCA0IDAgMCAxIDQgNHYxYTIgMiAwIDAgMCA0IDB2LTVoM2EyIDIgMCAwIDAgMiAtMmwtMSAtNWEyIDMgMCAwIDAgLTIgLTJoLTdhMyAzIDAgMCAwIC0zIDMiPjwvcGF0aD4gPC9zdmc+IA==');
875
+ background-image: url('data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiAgd2lkdGg9IjI0IiAgaGVpZ2h0PSIyNCIgIHZpZXdCb3g9IjAgMCAyNCAyNCIgIGZpbGw9Im5vbmUiICBzdHJva2U9ImJsYWNrIiAgc3Ryb2tlLXdpZHRoPSIyIiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiAgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgIGNsYXNzPSJpY29uIGljb24tdGFibGVyIGljb25zLXRhYmxlci1vdXRsaW5lIGljb24tdGFibGVyLXRodW1iLWRvd24iPjxwYXRoIHN0cm9rZT0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik03IDEzdi04YTEgMSAwIDAgMCAtMSAtMWgtMmExIDEgMCAwIDAgLTEgMXY3YTEgMSAwIDAgMCAxIDFoM2E0IDQgMCAwIDEgNCA0djFhMiAyIDAgMCAwIDQgMHYtNWgzYTIgMiAwIDAgMCAyIC0ybC0xIC01YTIgMyAwIDAgMCAtMiAtMmgtN2EzIDMgMCAwIDAgLTMgMyIgLz48L3N2Zz4K');
836
876
  }
837
877
  .message-event-action-btn.active .message-event-action-btn-svg.like {
838
- background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMzRDNzU5IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgc3Ryb2tlLXdpZHRoPSIyIj4gPHBhdGggZD0iTTcgMTF2OGExIDEgMCAwIDEgLTEgMWgtMmExIDEgMCAwIDEgLTEgLTF2LTdhMSAxIDAgMCAxIDEgLTFoM2E0IDQgMCAwIDAgNCAtNHYtMWEyIDIgMCAwIDEgNCAwdjVoM2EyIDIgMCAwIDEgMiAybC0xIDVhMiAzIDAgMCAxIC0yIDJoLTdhMyAzIDAgMCAxIC0zIC0zIj48L3BhdGg+IDwvc3ZnPiAK');
878
+ background-image: url('data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiAgd2lkdGg9IjI0IiAgaGVpZ2h0PSIyNCIgIHZpZXdCb3g9IjAgMCAyNCAyNCIgIGZpbGw9IiMzNEM3NTkiICBjbGFzcz0iaWNvbiBpY29uLXRhYmxlciBpY29ucy10YWJsZXItZmlsbGVkIGljb24tdGFibGVyLXRodW1iLXVwIj48cGF0aCBzdHJva2U9Im5vbmUiIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMTMgM2EzIDMgMCAwIDEgMi45OTUgMi44MjRsLjAwNSAuMTc2djRoMmEzIDMgMCAwIDEgMi45OCAyLjY1bC4wMTUgLjE3NGwuMDA1IC4xNzZsLS4wMiAuMTk2bC0xLjAwNiA1LjAzMmMtLjM4MSAxLjYyNiAtMS41MDIgMi43OTYgLTIuODEgMi43OGwtLjE2NCAtLjAwOGgtOGExIDEgMCAwIDEgLS45OTMgLS44ODNsLS4wMDcgLS4xMTdsLjAwMSAtOS41MzZhMSAxIDAgMCAxIC41IC0uODY1YTIuOTk4IDIuOTk4IDAgMCAwIDEuNDkyIC0yLjM5N2wuMDA3IC0uMjAydi0xYTMgMyAwIDAgMSAzIC0zeiIgLz48cGF0aCBkPSJNNSAxMGExIDEgMCAwIDEgLjk5MyAuODgzbC4wMDcgLjExN3Y5YTEgMSAwIDAgMSAtLjg4MyAuOTkzbC0uMTE3IC4wMDdoLTFhMiAyIDAgMCAxIC0xLjk5NSAtMS44NWwtLjAwNSAtLjE1di03YTIgMiAwIDAgMSAxLjg1IC0xLjk5NWwuMTUgLS4wMDVoMXoiIC8+PC9zdmc+Cg==');
839
879
  }
840
880
  .message-event-action-btn.active .message-event-action-btn-svg.dislike {
841
- background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMzRDNzU5IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgc3Ryb2tlLXdpZHRoPSIyIj4gPHBhdGggZD0iTTcgMTN2LThhMSAxIDAgMCAwIC0xIC0xaC0yYTEgMSAwIDAgMCAtMSAxdjdhMSAxIDAgMCAwIDEgMWgzYTQgNCAwIDAgMSA0IDR2MWEyIDIgMCAwIDAgNCAwdi01aDNhMiAyIDAgMCAwIDIgLTJsLTEgLTVhMiAzIDAgMCAwIC0yIC0yaC03YTMgMyAwIDAgMCAtMyAzIj48L3BhdGg+IDwvc3ZnPiAK');
881
+ background-image: url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzI0ODBfOTUpIj4KPHBhdGggZD0iTTEzIDIxLjAwNzlDMTMuNzY1IDIxLjAwOCAxNC41MDEyIDIwLjcxNTcgMTUuMDU3OSAyMC4xOTFDMTUuNjE0NyAxOS42NjYyIDE1Ljk0OTkgMTguOTQ4NiAxNS45OTUgMTguMTg0OUwxNiAxOC4wMDc5VjE0LjAwNzlIMThDMTguNzM1MSAxNC4wMDggMTkuNDQ0NyAxMy43MzgyIDE5Ljk5NCAxMy4yNDk3QzIwLjU0MzQgMTIuNzYxMiAyMC44OTQyIDEyLjA4OCAyMC45OCAxMS4zNTc5TDIwLjk5NSAxMS4xODQ5TDIxIDExLjAwNzlMMjAuOTggMTAuODExOUwxOS45NzQgNS43Nzk5MkMxOS41OTMgNC4xNTQ5MiAxOC40NzIgMi45ODM5MiAxNy4xNjQgMi45OTk5MkwxNyAzLjAwNzkySDlDOC43NTQ5MSAzLjAwNzk4IDguNTE4MzggMy4wOTgwNCA4LjMzNTMzIDMuMjYxMDFDOC4xNTIyNyAzLjQyMzk3IDguMDM1NDMgMy42NDg0OSA4LjAwNyAzLjg5MTkyTDggNC4wMDc5Mkw4LjAwMSAxMy41NDM5QzguMDAxIDEzLjcxOTUgOC4wNDcyMSAxMy44OTE5IDguMTM0OTggMTQuMDQzOUM4LjIyMjc1IDE0LjE5NTkgOC4zNDg5OCAxNC4zMjIyIDguNTAxIDE0LjQwOTlDOC45MjcyOSAxNC42NTYxIDkuMjg2NCAxNS4wMDM1IDkuNTQ2NjEgMTUuNDIxM0M5LjgwNjgyIDE1LjgzOTIgOS45NjAxMyAxNi4zMTQ3IDkuOTkzIDE2LjgwNTlMMTAgMTcuMDA3OVYxOC4wMDc5QzEwIDE4LjgwMzYgMTAuMzE2MSAxOS41NjY2IDEwLjg3ODcgMjAuMTI5MkMxMS40NDEzIDIwLjY5MTggMTIuMjA0NCAyMS4wMDc5IDEzIDIxLjAwNzlaIiBmaWxsPSIjMzMzMzMzIi8+CjxwYXRoIGQ9Ik01IDE0LjAwODFDNS4yNDQ5MyAxNC4wMDggNS40ODEzNCAxMy45MTgxIDUuNjY0MzcgMTMuNzU1M0M1Ljg0NzQxIDEzLjU5MjYgNS45NjQzNCAxMy4zNjgzIDUuOTkzIDEzLjEyNTFMNiAxMy4wMDgxVjQuMDA4MDZDNS45OTk5NyAzLjc2MzEyIDUuOTEwMDQgMy41MjY3MiA1Ljc0NzI4IDMuMzQzNjhDNS41ODQ1MyAzLjE2MDY1IDUuMzYwMjUgMy4wNDM3MSA1LjExNyAzLjAxNTA2TDUgMy4wMDgwNkg0QzMuNDk1MSAzLjAwNzkzIDMuMDA4ODQgMy4xOTg3OCAyLjYzODgxIDMuNTQyMjlDMi4yNjg3OCAzLjg4NTc5IDIuMDQyMzYgNC4zNTY1NCAyLjAwNSA0Ljg2MDA2TDIgNS4wMTAwNlYxMi4wMTAxQzIuMDAwMDkgMTIuNTE0NSAyLjE5MDc3IDEzLjAwMDIgMi41MzM4NCAxMy4zN0MyLjg3NjkgMTMuNzM5NyAzLjM0NzAyIDEzLjk2NjIgMy44NSAxNC4wMDQxTDQgMTQuMDA5MUw1IDE0LjAwODFaIiBmaWxsPSIjMzMzMzMzIi8+CjwvZz4KPGRlZnM+CjxjbGlwUGF0aCBpZD0iY2xpcDBfMjQ4MF85NSI+CjxyZWN0IHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0id2hpdGUiLz4KPC9jbGlwUGF0aD4KPC9kZWZzPgo8L3N2Zz4K');
842
882
  }
@@ -163,6 +163,7 @@ class Event extends _common.Com {
163
163
  t: this.props.t
164
164
  }));
165
165
  }
166
+ if (this.props.store.isAIDevMode()) $time = null;
166
167
  let t = new _index.default.Date(ev.created).toLocaleString();
167
168
  if (_index.default.get(ev, 'by.type') !== 'user') {
168
169
  let $sender = null;
@@ -224,7 +225,7 @@ class Event extends _common.Com {
224
225
  store: this.props.store,
225
226
  ev: ev,
226
227
  onSelect: e => this.chooseQuickReply(e)
227
- }), this.renderReactions())));
228
+ }), this.renderReactions(), this.renderAIDevNote())));
228
229
  }
229
230
  if (_index.default.get(ev, 'data.message.idempotency_key') === ev.id && this.props.store.now() - ev.created < 900) {
230
231
  _index.default.setTimeout(() => this.setState({
@@ -313,6 +314,16 @@ class Event extends _common.Com {
313
314
  }
314
315
  }
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
+ }
316
327
  let {
317
328
  pongs
318
329
  } = this.state;
@@ -339,6 +350,7 @@ class Event extends _common.Com {
339
350
  this._reacting = false;
340
351
  }
341
352
  renderReactions() {
353
+ if (this.props.store.isAIDevMode()) return null;
342
354
  let ev = _index.default.get(this.props.event, 'ev') || {};
343
355
  let pongs = _index.default.get(ev, 'data.message.pongs') || [];
344
356
  let hasLike = this.hasLike();
@@ -361,6 +373,31 @@ class Event extends _common.Com {
361
373
  class: "message-event-action-btn-svg dislike"
362
374
  })));
363
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
+ }
364
401
  renderUpdateConvo(ev) {
365
402
  var state = _index.default.get(ev, 'data.conversation.state');
366
403
  if (state === 'active') return null;
@@ -27,6 +27,7 @@ class InfoMessage extends _common.Com {
27
27
  t: this.props.t
28
28
  }));
29
29
  }
30
+ if (this.props.store.isAIDevMode()) $time = null;
30
31
  if (ev.type === 'conversation_rated') {
31
32
  var rating = _index.default.get(ev, 'data.conversation.ratings.0', {
32
33
  no_rating: 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
- }, (0, _preact.h)(_Header.default, {
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;
@@ -46,6 +46,9 @@ class Widget {
46
46
  await this.store.readyGate.entry();
47
47
  cb();
48
48
  }
49
+ setAIDevMode(mode) {
50
+ this.store.setAIDevMode(mode);
51
+ }
49
52
  setTrackPageView(val) {
50
53
  this.store.setTrackPageview(val);
51
54
  }
@@ -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');
@@ -768,6 +777,7 @@ class Store {
768
777
  this._typing(cid);
769
778
  }
770
779
  async startConvo(req) {
780
+ if (!req) req = {};
771
781
  await this.readyGate.entry();
772
782
  this.convoGate.close();
773
783
  if (!req.source) req.source = document.location.href;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@subiz/widget-v4",
3
- "version": "4.1.114",
3
+ "version": "4.1.115",
4
4
  "main": "./compiled_src/lib.js",
5
5
  "scripts": {
6
6
  "dev": "npx webpack serve --config webpack.dev.js",
@@ -31,7 +31,7 @@
31
31
  "babel-plugin-syntax-jsx": "^6.18.0",
32
32
  "html-webpack-plugin": "^5.6.3",
33
33
  "puppeteer": "^24.6.0",
34
- "webpack": "^5.98.0",
34
+ "webpack": "^5.99.1",
35
35
  "webpack-bundle-analyzer": "^4.10.2",
36
36
  "webpack-cli": "^6.0.1",
37
37
  "webpack-dev-server": "^5.2.1"
@@ -160,6 +160,7 @@ export default class Event extends Com {
160
160
  </div>
161
161
  )
162
162
  }
163
+ if (this.props.store.isAIDevMode()) $time = null
163
164
 
164
165
  let t = new sb.Date(ev.created).toLocaleString()
165
166
  // message of agent
@@ -203,6 +204,7 @@ export default class Event extends Com {
203
204
  <OrderAttachments t={this.props.t} store={this.props.store} ev={ev} />
204
205
  <QuickReplies store={this.props.store} ev={ev} onSelect={(e) => this.chooseQuickReply(e)} />
205
206
  {this.renderReactions()}
207
+ {this.renderAIDevNote()}
206
208
  </div>
207
209
  </div>
208
210
  </div>
@@ -274,6 +276,17 @@ export default class Event extends Com {
274
276
  },
275
277
  },
276
278
  }
279
+ if (action == 'dislike' && this.props.store.isAIDevMode()) {
280
+ this.props.store.emitConvoEvent({
281
+ type: 'bad_feedbacked',
282
+ data: {
283
+ event: ev,
284
+ id: ev.id,
285
+ conversion_id: cid,
286
+ },
287
+ })
288
+ }
289
+
277
290
  let {pongs} = this.state
278
291
  if (action === 'like') {
279
292
  pongs = pongs.filter((pong) => pong.type !== 'dislike')
@@ -293,6 +306,8 @@ export default class Event extends Com {
293
306
  }
294
307
 
295
308
  renderReactions() {
309
+ if (this.props.store.isAIDevMode()) return null
310
+
296
311
  let ev = sb.get(this.props.event, 'ev') || {}
297
312
  let pongs = sb.get(ev, 'data.message.pongs') || []
298
313
  let hasLike = this.hasLike()
@@ -314,6 +329,32 @@ export default class Event extends Com {
314
329
  )
315
330
  }
316
331
 
332
+ renderAIDevNote() {
333
+ if (!this.props.isLast) return null
334
+ if (!this.props.store.isAIDevMode()) return null
335
+
336
+ let ev = sb.get(this.props.event, 'ev') || {}
337
+ let pongs = sb.get(ev, 'data.message.pongs') || []
338
+ let hasLike = this.hasLike()
339
+ let hasDislike = this.hasDislike()
340
+
341
+ let likecls = 'message-event-action-btn message-event-action-btn__dev message-event-action-btn_like'
342
+ if (hasLike) likecls += ' active'
343
+ let dislikecls = 'message-event-action-btn message-event-action-btn__dev message-event-action-btn_dislike'
344
+ if (hasDislike) dislikecls += ' active'
345
+
346
+ return (
347
+ <div class='message-event-actions'>
348
+ <div class={likecls} onClick={() => this.onSendReaction(hasLike ? 'remove_like' : 'like')}>
349
+ <div class='message-event-action-btn-svg like' /> Good
350
+ </div>
351
+ <div class={dislikecls} onClick={() => this.onSendReaction(hasDislike ? 'remove_dislike' : 'dislike')}>
352
+ <div class='message-event-action-btn-svg dislike' /> Bad
353
+ </div>
354
+ </div>
355
+ )
356
+ }
357
+
317
358
  renderUpdateConvo(ev) {
318
359
  var state = sb.get(ev, 'data.conversation.state')
319
360
  if (state === 'active') return null
@@ -15,6 +15,7 @@ export default class InfoMessage extends Com {
15
15
  render() {
16
16
  let ev = this.props.ev.ev
17
17
  var $time = null
18
+
18
19
  if (this.props.ev.show_time) {
19
20
  $time = (
20
21
  <div class='convo-event-time'>
@@ -23,6 +24,8 @@ export default class InfoMessage extends Com {
23
24
  )
24
25
  }
25
26
 
27
+ if (this.props.store.isAIDevMode()) $time = null
28
+
26
29
  // if (this.ev.type === 'conversation_rating_requested') return <div class="info-message"></div>
27
30
  if (ev.type === 'conversation_rated') {
28
31
  var rating = sb.get(ev, 'data.conversation.ratings.0', {no_rating: true, rating: 0})
@@ -1,8 +1,10 @@
1
1
  var logo = require('../../assets/img/subiz-mono.svg')
2
2
  import {h} from 'preact'
3
+
3
4
  export default function PoweredBy(props) {
4
5
  // dont render on mobile
5
6
  if (props.store.isMobile()) return null
7
+ if (props.store.isAIDevMode()) return null
6
8
  let user = props.store.matchUser() || {}
7
9
  var link = `https://subiz.com.vn/?utm_source=${
8
10
  window.location.host || `id-${user.account_id}`
@@ -130,11 +130,13 @@ export default class Widget extends Com {
130
130
  let position = sb.get(accountSetting, 'desktop_button.position') || 'right'
131
131
  if (this.props.store.isMobile()) position = sb.get(accountSetting, 'mobile_button.position', position)
132
132
  let cls = 'widget-container widget-container--' + position
133
- if (!this.props.store.isMobile() && sb.get(accountSetting, 'window_mode') === 'full')
133
+ if ( !this.props.store.isMobile() && sb.get(accountSetting, 'window_mode') === 'full')
134
134
  cls += ' widget-container--full'
135
135
  if (!this.props.isShow) cls += ' widget-container--hide'
136
- return (
137
- <div class={cls}>
136
+ let hideheader = sb.get(accountSetting, 'header.hidden', false)
137
+ var $header
138
+ if (!hideheader) {
139
+ $header = (
138
140
  <Header
139
141
  t={this.props.t}
140
142
  plugin={this.props.plugin}
@@ -144,6 +146,11 @@ export default class Widget extends Com {
144
146
  onClose={this.props.onClose}
145
147
  onGotoList={() => this.props.onGo({view: 'list'})}
146
148
  />
149
+ )
150
+ }
151
+ return (
152
+ <div class={cls}>
153
+ {$header}
147
154
  {$body}
148
155
  </div>
149
156
  )
package/src/lib.js CHANGED
@@ -35,6 +35,10 @@ class Widget {
35
35
  cb()
36
36
  }
37
37
 
38
+ setAIDevMode(mode) {
39
+ this.store.setAIDevMode(mode)
40
+ }
41
+
38
42
  setTrackPageView(val) {
39
43
  this.store.setTrackPageview(val)
40
44
  }
@@ -210,6 +210,18 @@ export default class Store {
210
210
  this.pubsub.publish('highlight', pluginid, ref)
211
211
  }
212
212
 
213
+ emitConvoEvent(ev) {
214
+ this.pubsub.publish('events', ev)
215
+ }
216
+
217
+ setAIDevMode(mode) {
218
+ this.ai_dev_mode = mode
219
+ }
220
+
221
+ isAIDevMode() {
222
+ return this.ai_dev_mode
223
+ }
224
+
213
225
  overrideDeviceType(type) {
214
226
  this.forceDevice = type
215
227
  this.pubsub.publish('account')
@@ -912,6 +924,7 @@ export default class Store {
912
924
  _typing = sb.throttle((convoid) => this.api.sendTyping(convoid), 3000, {trailing: false})
913
925
 
914
926
  async startConvo(req) {
927
+ if (!req) req = {}
915
928
  await this.readyGate.entry()
916
929
  this.convoGate.close()
917
930