index.vue 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. <template>
  2. <ToolbarItemContainer
  3. ref="container"
  4. :iconFile="faceIcon"
  5. title="表情"
  6. @onDialogShow="onDialogShow"
  7. @onDialogClose="onDialogClose"
  8. >
  9. <EmojiPickerDialog
  10. @insertEmoji="insertEmoji"
  11. @sendMessage="sendMessage"
  12. @onClose="onClose"
  13. />
  14. </ToolbarItemContainer>
  15. </template>
  16. <script lang="ts" setup>
  17. import {
  18. TUIStore,
  19. StoreName,
  20. IConversationModel,
  21. } from '@tencentcloud/chat-uikit-engine';
  22. import { ref } from '../../../../adapter-vue';
  23. import faceIcon from '../../../../assets/icon/face.png';
  24. import EmojiPickerDialog from './emoji-picker-dialog.vue';
  25. import ToolbarItemContainer from '../toolbar-item-container/index.vue';
  26. import { isH5 } from '../../../../utils/env';
  27. import { ToolbarDisplayType } from '../../../../interface';
  28. interface IEmits {
  29. (e: 'sendMessage'): void;
  30. (e: 'toggleComponent'): void;
  31. (e: 'insertEmoji', emoji: any): void;
  32. (e: 'dialogShowInH5', dialogRef: HTMLElement): void;
  33. (e: 'dialogCloseInH5', dialogRef: HTMLElement): void;
  34. (e: 'changeToolbarDisplayType', type: ToolbarDisplayType): void;
  35. }
  36. const emits = defineEmits<IEmits>();
  37. const currentConversation = ref();
  38. const container = ref<InstanceType<typeof ToolbarItemContainer>>();
  39. TUIStore.watch(StoreName.CONV, {
  40. currentConversation: (conversation: IConversationModel) => {
  41. currentConversation.value = conversation;
  42. },
  43. });
  44. const onDialogShow = (dialogRef: any) => {
  45. if (!isH5) {
  46. return;
  47. }
  48. emits('changeToolbarDisplayType', 'emojiPicker');
  49. emits('dialogShowInH5', dialogRef.value);
  50. };
  51. const onDialogClose = (dialogRef: any) => {
  52. if (!isH5) {
  53. return;
  54. }
  55. emits('changeToolbarDisplayType', 'none');
  56. emits('dialogCloseInH5', dialogRef.value);
  57. };
  58. const insertEmoji = (emojiObj) => {
  59. emits('insertEmoji', emojiObj);
  60. };
  61. const sendMessage = () => {
  62. emits('sendMessage');
  63. };
  64. const onClose = () => {
  65. container.value?.toggleDialogDisplay(false);
  66. };
  67. defineExpose({
  68. closeEmojiPicker: onClose,
  69. });
  70. </script>
  71. <style lang="scss" scoped src="./style/index.scss"></style>