@phonghq/go-chat 1.0.43 → 1.0.45

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 (106) hide show
  1. package/dist/assets/icons/IconPlan.vue.d.ts +13 -1
  2. package/dist/assets/icons/call/IconPhoneCancel.vue.d.ts +13 -1
  3. package/dist/assets/icons/customer-detail/IconPhone.vue.d.ts +13 -1
  4. package/dist/chat/App.vue.d.ts +13 -2
  5. package/dist/chat/page/home/ChatList.vue.d.ts +2 -0
  6. package/dist/chat/page/home/ChatMessageItem.vue.d.ts +1 -0
  7. package/dist/chat/page/home/ChatMessageItem2.vue.d.ts +19 -0
  8. package/dist/chat/page/home/Home.vue.d.ts +2 -0
  9. package/dist/chat/page/home/InputChat.vue.d.ts +2 -0
  10. package/dist/components/chat/call/Calling.vue.d.ts +4 -2
  11. package/dist/components/chat/common/tabs/TabBase.vue.d.ts +18 -0
  12. package/dist/components/common/drawer/DrawerBaseCustom.vue.d.ts +1 -1
  13. package/dist/components/ui/select/Select.vue.d.ts +20 -0
  14. package/dist/components/ui/select/SelectContent.vue.d.ts +24 -0
  15. package/dist/components/ui/select/SelectGroup.vue.d.ts +10 -0
  16. package/dist/components/ui/select/SelectItem.vue.d.ts +18 -0
  17. package/dist/components/ui/select/SelectItemText.vue.d.ts +10 -0
  18. package/dist/components/ui/select/SelectLabel.vue.d.ts +14 -0
  19. package/dist/components/ui/select/SelectScrollDownButton.vue.d.ts +14 -0
  20. package/dist/components/ui/select/SelectScrollUpButton.vue.d.ts +14 -0
  21. package/dist/components/ui/select/SelectSeparator.vue.d.ts +7 -0
  22. package/dist/components/ui/select/SelectTrigger.vue.d.ts +17 -0
  23. package/dist/components/ui/select/SelectValue.vue.d.ts +10 -0
  24. package/dist/components/ui/select/index.d.ts +11 -0
  25. package/dist/components/ui/tabs/Tabs.vue.d.ts +20 -0
  26. package/dist/components/ui/tabs/TabsContent.vue.d.ts +14 -0
  27. package/dist/components/ui/tabs/TabsList.vue.d.ts +14 -0
  28. package/dist/components/ui/tabs/TabsTrigger.vue.d.ts +14 -0
  29. package/dist/components/ui/tabs/index.d.ts +4 -0
  30. package/dist/composable/useInitData.d.ts +1 -1
  31. package/dist/composable/useListConversations.d.ts +1 -1
  32. package/dist/composable/useListentEvent.d.ts +5 -0
  33. package/dist/composable/usePlivo.d.ts +1 -0
  34. package/dist/constant/color.d.ts +2 -2
  35. package/dist/go-chat.es.js +14753 -14211
  36. package/dist/go-chat.umd.js +15 -15
  37. package/dist/style.css +1 -1
  38. package/dist/test/assets/icons/IconPlan.vue.js +23 -3
  39. package/dist/test/assets/icons/call/IconPhone.vue.js +6 -19
  40. package/dist/test/assets/icons/call/IconPhoneCancel.vue.js +32 -21
  41. package/dist/test/assets/icons/customer-detail/IconPhone.vue.js +23 -3
  42. package/dist/test/chat/App.vue.js +218 -301
  43. package/dist/test/chat/page/customer-check-in/CustomerCheckIn.vue.js +3 -1
  44. package/dist/test/chat/page/customer-detail/CustomerDetail.vue.js +2 -2
  45. package/dist/test/chat/page/home/ChatList.vue.js +64 -34
  46. package/dist/test/chat/page/home/ChatMessage.vue.js +10 -1
  47. package/dist/test/chat/page/home/ChatMessageItem.vue.js +63 -80
  48. package/dist/test/chat/page/home/ChatMessageItem2.vue.js +351 -0
  49. package/dist/test/chat/page/home/Home.vue.js +15 -7
  50. package/dist/test/chat/page/home/HomeHeader.vue.js +8 -4
  51. package/dist/test/chat/page/home/InputChat.vue.js +58 -37
  52. package/dist/test/components/chat/call/Calling.vue.js +111 -67
  53. package/dist/test/components/chat/common/tab/TabBase.vue.js +1 -0
  54. package/dist/test/components/chat/common/tabs/TabBase.vue.js +92 -0
  55. package/dist/test/components/chat/layout/mobile/Footer.vue.js +6 -1
  56. package/dist/test/components/common/drawer/DrawerBaseCustom.vue.js +1 -0
  57. package/dist/test/components/common/select/SelectBase.vue.js +139 -0
  58. package/dist/test/components/ui/select/Select.vue.js +49 -0
  59. package/dist/test/components/ui/select/SelectContent.vue.js +98 -0
  60. package/dist/test/components/ui/select/SelectGroup.vue.js +37 -0
  61. package/dist/test/components/ui/select/SelectItem.vue.js +86 -0
  62. package/dist/test/components/ui/select/SelectItemText.vue.js +37 -0
  63. package/dist/test/components/ui/select/SelectLabel.vue.js +40 -0
  64. package/dist/test/components/ui/select/SelectScrollDownButton.vue.js +58 -0
  65. package/dist/test/components/ui/select/SelectScrollUpButton.vue.js +58 -0
  66. package/dist/test/components/ui/select/SelectSeparator.vue.js +39 -0
  67. package/dist/test/components/ui/select/SelectTrigger.vue.js +76 -0
  68. package/dist/test/components/ui/select/SelectValue.vue.js +37 -0
  69. package/dist/test/components/ui/select/index.js +11 -0
  70. package/dist/test/components/ui/tabs/Tabs.vue.js +54 -0
  71. package/dist/test/components/ui/tabs/TabsContent.vue.js +44 -0
  72. package/dist/test/components/ui/tabs/TabsList.vue.js +44 -0
  73. package/dist/test/components/ui/tabs/TabsTrigger.vue.js +45 -0
  74. package/dist/test/components/ui/tabs/index.js +4 -0
  75. package/dist/test/composable/useInitData.js +5 -5
  76. package/dist/test/composable/useListConversations.js +32 -29
  77. package/dist/test/composable/useListentEvent.js +48 -0
  78. package/dist/test/composable/usePlivo.js +6 -1
  79. package/dist/test/constant/color.js +4 -2
  80. package/dist/test/plugins/axios-gci.js +1 -1
  81. package/dist/test/utils/chat/auth.js +1 -1
  82. package/dist/test/utils/chat/call.js +2 -3
  83. package/dist/test/utils/chat/conversation.js +2 -2
  84. package/dist/test/utils/chat/page-error.js +25 -0
  85. package/dist/test/utils/chat/user.js +7 -2
  86. package/dist/test/utils/string-helper.js +13 -0
  87. package/dist/types/chat/global.d.ts +6 -5
  88. package/dist/types/conversation.d.ts +1 -0
  89. package/dist/utils/chat/auth.d.ts +1 -1
  90. package/dist/utils/chat/conversation.d.ts +1 -0
  91. package/dist/utils/chat/page-error.d.ts +4 -0
  92. package/dist/utils/chat/user.d.ts +3 -0
  93. package/dist/utils/string-helper.d.ts +1 -0
  94. package/package.json +3 -2
  95. package/dist/components/layout/Blank.vue.d.ts +0 -9
  96. package/dist/components/layout/Default.vue.d.ts +0 -9
  97. package/dist/components/modal/Confirm.vue.d.ts +0 -2
  98. package/dist/composable/useError.d.ts +0 -4
  99. package/dist/composable/useModalConfirm.d.ts +0 -5
  100. package/dist/test/components/ListenEvent.vue.js +0 -45
  101. package/dist/test/components/layout/Blank.vue.js +0 -19
  102. package/dist/test/components/layout/Default.vue.js +0 -21
  103. package/dist/test/components/modal/Confirm.vue.js +0 -164
  104. package/dist/test/composable/useError.js +0 -10
  105. package/dist/test/composable/useModalConfirm.js +0 -39
  106. /package/dist/components/{ListenEvent.vue.d.ts → common/select/SelectBase.vue.d.ts} +0 -0
@@ -0,0 +1,351 @@
1
+ /// <reference types="C:/phonghq/go-chat-v2/node_modules/.vue-global-types/vue_3.5_0.d.ts" />
2
+ import Avatar from '../../../components/chat/customer/Avatar.vue';
3
+ import { dataProfile } from '../../../utils/chat/auth';
4
+ import { computed, nextTick } from 'vue';
5
+ import { MessageState } from '../../../constant/message';
6
+ import IconPhoneCancel from '../../../assets/icons/call/IconPhoneCancel.vue';
7
+ import { PLIVO_CALL_STATUS } from '../../../types/chat/call';
8
+ import IconPhone from '../../../assets/icons/customer-detail/IconPhone.vue';
9
+ import dayjs from 'dayjs';
10
+ import { DATE_FORMATS, TIME_ZONE_UTC } from '../../../constant/datetime';
11
+ import utc from 'dayjs/plugin/utc';
12
+ import timezone from 'dayjs/plugin/timezone';
13
+ dayjs.extend(utc);
14
+ dayjs.extend(timezone);
15
+ const props = withDefaults(defineProps(), {});
16
+ const emit = defineEmits();
17
+ const callTitle = computed(() => {
18
+ if (props.isMyMessage) {
19
+ if (props.message?.call_status == PLIVO_CALL_STATUS.CONNECT_FAILED) {
20
+ return 'Call canceled';
21
+ }
22
+ else if (props.message?.call_status == PLIVO_CALL_STATUS.CALL_END) {
23
+ return 'Outgoing audio call';
24
+ }
25
+ else if (props.message?.call_status == PLIVO_CALL_STATUS.CANCEL) {
26
+ return 'Call canceled';
27
+ }
28
+ }
29
+ else {
30
+ if (props.message?.call_status == PLIVO_CALL_STATUS.CONNECT_FAILED ||
31
+ props.message?.call_status == PLIVO_CALL_STATUS.TIME_OUT ||
32
+ props.message?.call_status == PLIVO_CALL_STATUS.CANCEL ||
33
+ props.message?.call_status == PLIVO_CALL_STATUS.NO_ANSWER ||
34
+ props.message?.call_status == PLIVO_CALL_STATUS.BUSY) {
35
+ return 'Call missed';
36
+ }
37
+ else if (props.message?.call_status == PLIVO_CALL_STATUS.CALL_END) {
38
+ return 'Incomming audio call';
39
+ }
40
+ }
41
+ return '';
42
+ });
43
+ const scrollBottom = () => {
44
+ nextTick(() => {
45
+ const eleIdContentChat = document.getElementById('content-chat');
46
+ if (eleIdContentChat) {
47
+ eleIdContentChat.scrollTop = eleIdContentChat.scrollHeight;
48
+ }
49
+ });
50
+ };
51
+ const getCallDuration = (seconds) => {
52
+ const min = Math.floor(seconds / 60);
53
+ const secs = seconds % 60;
54
+ return `${min} min${min > 1 ? 's' : ''} ${secs} sec`;
55
+ };
56
+ const getMessageStateText = (item) => {
57
+ const state = item.state;
58
+ switch (state) {
59
+ case MessageState.Sending:
60
+ return 'Sending...';
61
+ case MessageState.Uploading:
62
+ return 'Uploading...';
63
+ case MessageState.Sent:
64
+ return '';
65
+ case MessageState.Read:
66
+ return 'Seen';
67
+ case MessageState.Failed:
68
+ return item.error || 'Message failed';
69
+ default:
70
+ return '';
71
+ }
72
+ };
73
+ const getFinishTime = (time) => {
74
+ if (!dayjs(time).isValid())
75
+ return '';
76
+ return dayjs.tz(time, TIME_ZONE_UTC).local().format(DATE_FORMATS.TIME_12_FORMAT);
77
+ };
78
+ debugger; /* PartiallyEnd: #3632/scriptSetup.vue */
79
+ const __VLS_defaults = {};
80
+ const __VLS_ctx = {
81
+ ...{},
82
+ ...{},
83
+ ...{},
84
+ ...{},
85
+ ...{},
86
+ };
87
+ let __VLS_elements;
88
+ let __VLS_components;
89
+ let __VLS_directives;
90
+ __VLS_asFunctionalElement(__VLS_elements.div, __VLS_elements.div)({
91
+ ...{ class: "flex items-end mt-1" },
92
+ ...{ class: ({
93
+ 'mt-2': __VLS_ctx.shouldShowAvatar,
94
+ 'flex-col justify-end pl-[60px]': __VLS_ctx.isMyMessage,
95
+ 'gap-2': !__VLS_ctx.isMyMessage
96
+ }) },
97
+ });
98
+ // @ts-ignore
99
+ [shouldShowAvatar, isMyMessage, isMyMessage,];
100
+ if (__VLS_ctx.message.state != __VLS_ctx.MessageState.Sending || __VLS_ctx.isMyMessage) {
101
+ // @ts-ignore
102
+ [isMyMessage, message, MessageState,];
103
+ if (!__VLS_ctx.isMyMessage) {
104
+ // @ts-ignore
105
+ [isMyMessage,];
106
+ if (__VLS_ctx.shouldShowAvatar) {
107
+ // @ts-ignore
108
+ [shouldShowAvatar,];
109
+ /** @type {[typeof Avatar, ]} */ ;
110
+ // @ts-ignore
111
+ const __VLS_0 = __VLS_asFunctionalComponent(Avatar, new Avatar({
112
+ ...{ class: "shrink-0" },
113
+ src: (__VLS_ctx.data?.avatar ?? ''),
114
+ color: (__VLS_ctx.data?.color),
115
+ name: (__VLS_ctx.data?.username),
116
+ size: (__VLS_ctx.responsive == 'mobile' ? 'sm' : 'md'),
117
+ ...{ class: (__VLS_ctx.responsive == 'mobile' ? 'translate-y-[-2px]' : '') },
118
+ }));
119
+ const __VLS_1 = __VLS_0({
120
+ ...{ class: "shrink-0" },
121
+ src: (__VLS_ctx.data?.avatar ?? ''),
122
+ color: (__VLS_ctx.data?.color),
123
+ name: (__VLS_ctx.data?.username),
124
+ size: (__VLS_ctx.responsive == 'mobile' ? 'sm' : 'md'),
125
+ ...{ class: (__VLS_ctx.responsive == 'mobile' ? 'translate-y-[-2px]' : '') },
126
+ }, ...__VLS_functionalComponentArgsRest(__VLS_0));
127
+ // @ts-ignore
128
+ [data, data, data, responsive, responsive,];
129
+ }
130
+ else {
131
+ __VLS_asFunctionalElement(__VLS_elements.div, __VLS_elements.div)({
132
+ ...{ class: "shrink-0" },
133
+ ...{ class: (__VLS_ctx.responsive == 'mobile' ? 'w-8' : 'w-12') },
134
+ });
135
+ // @ts-ignore
136
+ [responsive,];
137
+ }
138
+ }
139
+ __VLS_asFunctionalElement(__VLS_elements.div, __VLS_elements.div)({});
140
+ __VLS_asFunctionalElement(__VLS_elements.div, __VLS_elements.div)({
141
+ ...{ class: "px-3 py-2 rounded-2xl max-w-xs text-left" },
142
+ ...{ class: ({
143
+ 'rounded-tl-none': !__VLS_ctx.isChatStart && !__VLS_ctx.isMyMessage,
144
+ 'rounded-bl-none': !__VLS_ctx.isChatFinished && !__VLS_ctx.isMyMessage,
145
+ 'rounded-tr-none': !__VLS_ctx.isChatStart && __VLS_ctx.isMyMessage,
146
+ 'rounded-br-none': !__VLS_ctx.isChatFinished && __VLS_ctx.isMyMessage,
147
+ '!text-white !bg-chat-success': (__VLS_ctx.message.message_uuid && !__VLS_ctx.message.is_call) || __VLS_ctx.message.is_sms,
148
+ 'bg-chat-primary text-white': __VLS_ctx.isMyMessage,
149
+ 'bg-[#E4E4E4D4] text-chat-haze-600 w-max ': !__VLS_ctx.isMyMessage
150
+ }) },
151
+ });
152
+ // @ts-ignore
153
+ [isMyMessage, isMyMessage, isMyMessage, isMyMessage, isMyMessage, isMyMessage, message, message, message, isChatStart, isChatStart, isChatFinished, isChatFinished,];
154
+ if (__VLS_ctx.message.is_call == 1) {
155
+ // @ts-ignore
156
+ [message,];
157
+ __VLS_asFunctionalElement(__VLS_elements.div, __VLS_elements.div)({
158
+ ...{ class: "flex flex-col gap-2 w-[200px]" },
159
+ });
160
+ __VLS_asFunctionalElement(__VLS_elements.p, __VLS_elements.p)({
161
+ ...{ class: "font-medium" },
162
+ ...{ class: ({ 'text-chat-error': __VLS_ctx.message.call_status !== __VLS_ctx.PLIVO_CALL_STATUS.CALL_END }) },
163
+ });
164
+ // @ts-ignore
165
+ [message, PLIVO_CALL_STATUS,];
166
+ (__VLS_ctx.callTitle);
167
+ // @ts-ignore
168
+ [callTitle,];
169
+ __VLS_asFunctionalElement(__VLS_elements.div, __VLS_elements.div)({
170
+ ...{ class: "flex items-center gap-2 shrink-0" },
171
+ });
172
+ __VLS_asFunctionalElement(__VLS_elements.div, __VLS_elements.div)({
173
+ ...{ class: "overflow-hidden w-8 h-8 rounded-full text-white" },
174
+ });
175
+ if (__VLS_ctx.message.call_status == __VLS_ctx.PLIVO_CALL_STATUS.CALL_END) {
176
+ // @ts-ignore
177
+ [message, PLIVO_CALL_STATUS,];
178
+ __VLS_asFunctionalElement(__VLS_elements.div, __VLS_elements.div)({
179
+ ...{ class: "bg-chat-success flex-center w-full h-full" },
180
+ });
181
+ /** @type {[typeof IconPhone, ]} */ ;
182
+ // @ts-ignore
183
+ const __VLS_4 = __VLS_asFunctionalComponent(IconPhone, new IconPhone({
184
+ ...{ class: "w-5 h-5" },
185
+ }));
186
+ const __VLS_5 = __VLS_4({
187
+ ...{ class: "w-5 h-5" },
188
+ }, ...__VLS_functionalComponentArgsRest(__VLS_4));
189
+ }
190
+ else {
191
+ __VLS_asFunctionalElement(__VLS_elements.div, __VLS_elements.div)({
192
+ ...{ class: "bg-chat-error flex-center w-full h-full" },
193
+ });
194
+ /** @type {[typeof IconPhoneCancel, ]} */ ;
195
+ // @ts-ignore
196
+ const __VLS_8 = __VLS_asFunctionalComponent(IconPhoneCancel, new IconPhoneCancel({
197
+ ...{ class: "w-5 h-5" },
198
+ }));
199
+ const __VLS_9 = __VLS_8({
200
+ ...{ class: "w-5 h-5" },
201
+ }, ...__VLS_functionalComponentArgsRest(__VLS_8));
202
+ }
203
+ __VLS_asFunctionalElement(__VLS_elements.span, __VLS_elements.span)({});
204
+ (__VLS_ctx.getCallDuration(__VLS_ctx.message?.duration ?? 0));
205
+ // @ts-ignore
206
+ [message, getCallDuration,];
207
+ if (__VLS_ctx.dataProfile?.user_type == 'tenant') {
208
+ // @ts-ignore
209
+ [dataProfile,];
210
+ __VLS_asFunctionalElement(__VLS_elements.button, __VLS_elements.button)({
211
+ ...{ onClick: (...[$event]) => {
212
+ if (!(__VLS_ctx.message.state != __VLS_ctx.MessageState.Sending || __VLS_ctx.isMyMessage))
213
+ return;
214
+ if (!(__VLS_ctx.message.is_call == 1))
215
+ return;
216
+ if (!(__VLS_ctx.dataProfile?.user_type == 'tenant'))
217
+ return;
218
+ __VLS_ctx.emit('callAgain');
219
+ // @ts-ignore
220
+ [emit,];
221
+ } },
222
+ ...{ class: "flex-center h-10 rounded-xl bg-chat-haze-200 font-semibold" },
223
+ });
224
+ __VLS_asFunctionalElement(__VLS_elements.p, __VLS_elements.p)({});
225
+ }
226
+ }
227
+ else if (__VLS_ctx.message.message) {
228
+ // @ts-ignore
229
+ [message,];
230
+ __VLS_asFunctionalElement(__VLS_elements.div, __VLS_elements.div)({});
231
+ __VLS_asFunctionalElement(__VLS_elements.div)({
232
+ ...{ style: ({ wordBreak: 'break-word' }) },
233
+ });
234
+ __VLS_asFunctionalDirective(__VLS_directives.vHtml)(null, { ...__VLS_directiveBindingRestFields, value: (__VLS_ctx.message.message) }, null, null);
235
+ // @ts-ignore
236
+ [message,];
237
+ }
238
+ else if (__VLS_ctx.message?.attachments?.length) {
239
+ // @ts-ignore
240
+ [message,];
241
+ __VLS_asFunctionalElement(__VLS_elements.div, __VLS_elements.div)({});
242
+ __VLS_asFunctionalElement(__VLS_elements.img)({
243
+ ...{ onLoad: (() => {
244
+ if (__VLS_ctx.isLastMessage) {
245
+ __VLS_ctx.scrollBottom();
246
+ }
247
+ }) },
248
+ src: (__VLS_ctx.message.attachments[0]?.file_path),
249
+ alt: "avatar",
250
+ });
251
+ // @ts-ignore
252
+ [message, isLastMessage, scrollBottom,];
253
+ }
254
+ if (__VLS_ctx.isChatFinished) {
255
+ // @ts-ignore
256
+ [isChatFinished,];
257
+ __VLS_asFunctionalElement(__VLS_elements.p, __VLS_elements.p)({
258
+ ...{ class: "text-sm mt-1" },
259
+ });
260
+ (__VLS_ctx.getFinishTime(__VLS_ctx.message?.created_at));
261
+ // @ts-ignore
262
+ [message, getFinishTime,];
263
+ }
264
+ if (__VLS_ctx.isMyMessage) {
265
+ // @ts-ignore
266
+ [isMyMessage,];
267
+ if ((__VLS_ctx.isLastMessage && __VLS_ctx.getMessageStateText(__VLS_ctx.message)) || __VLS_ctx.message.state == __VLS_ctx.MessageState.Failed) {
268
+ // @ts-ignore
269
+ [message, message, MessageState, isLastMessage, getMessageStateText,];
270
+ __VLS_asFunctionalElement(__VLS_elements.span, __VLS_elements.span)({
271
+ ...{ class: "text-chat-haze-200 text-xs mt-1" },
272
+ ...{ class: ({ '!text-chat-error': __VLS_ctx.message.state == __VLS_ctx.MessageState.Failed }) },
273
+ });
274
+ // @ts-ignore
275
+ [message, MessageState,];
276
+ (__VLS_ctx.getMessageStateText(__VLS_ctx.message));
277
+ // @ts-ignore
278
+ [message, getMessageStateText,];
279
+ }
280
+ }
281
+ }
282
+ /** @type {__VLS_StyleScopedClasses['flex']} */ ;
283
+ /** @type {__VLS_StyleScopedClasses['items-end']} */ ;
284
+ /** @type {__VLS_StyleScopedClasses['mt-1']} */ ;
285
+ /** @type {__VLS_StyleScopedClasses['mt-2']} */ ;
286
+ /** @type {__VLS_StyleScopedClasses['flex-col']} */ ;
287
+ /** @type {__VLS_StyleScopedClasses['justify-end']} */ ;
288
+ /** @type {__VLS_StyleScopedClasses['pl-[60px]']} */ ;
289
+ /** @type {__VLS_StyleScopedClasses['gap-2']} */ ;
290
+ /** @type {__VLS_StyleScopedClasses['shrink-0']} */ ;
291
+ /** @type {__VLS_StyleScopedClasses['shrink-0']} */ ;
292
+ /** @type {__VLS_StyleScopedClasses['px-3']} */ ;
293
+ /** @type {__VLS_StyleScopedClasses['py-2']} */ ;
294
+ /** @type {__VLS_StyleScopedClasses['rounded-2xl']} */ ;
295
+ /** @type {__VLS_StyleScopedClasses['max-w-xs']} */ ;
296
+ /** @type {__VLS_StyleScopedClasses['text-left']} */ ;
297
+ /** @type {__VLS_StyleScopedClasses['rounded-tl-none']} */ ;
298
+ /** @type {__VLS_StyleScopedClasses['rounded-bl-none']} */ ;
299
+ /** @type {__VLS_StyleScopedClasses['rounded-tr-none']} */ ;
300
+ /** @type {__VLS_StyleScopedClasses['rounded-br-none']} */ ;
301
+ /** @type {__VLS_StyleScopedClasses['!text-white']} */ ;
302
+ /** @type {__VLS_StyleScopedClasses['!bg-chat-success']} */ ;
303
+ /** @type {__VLS_StyleScopedClasses['bg-chat-primary']} */ ;
304
+ /** @type {__VLS_StyleScopedClasses['text-white']} */ ;
305
+ /** @type {__VLS_StyleScopedClasses['bg-[#E4E4E4D4]']} */ ;
306
+ /** @type {__VLS_StyleScopedClasses['text-chat-haze-600']} */ ;
307
+ /** @type {__VLS_StyleScopedClasses['w-max']} */ ;
308
+ /** @type {__VLS_StyleScopedClasses['flex']} */ ;
309
+ /** @type {__VLS_StyleScopedClasses['flex-col']} */ ;
310
+ /** @type {__VLS_StyleScopedClasses['gap-2']} */ ;
311
+ /** @type {__VLS_StyleScopedClasses['w-[200px]']} */ ;
312
+ /** @type {__VLS_StyleScopedClasses['font-medium']} */ ;
313
+ /** @type {__VLS_StyleScopedClasses['text-chat-error']} */ ;
314
+ /** @type {__VLS_StyleScopedClasses['flex']} */ ;
315
+ /** @type {__VLS_StyleScopedClasses['items-center']} */ ;
316
+ /** @type {__VLS_StyleScopedClasses['gap-2']} */ ;
317
+ /** @type {__VLS_StyleScopedClasses['shrink-0']} */ ;
318
+ /** @type {__VLS_StyleScopedClasses['overflow-hidden']} */ ;
319
+ /** @type {__VLS_StyleScopedClasses['w-8']} */ ;
320
+ /** @type {__VLS_StyleScopedClasses['h-8']} */ ;
321
+ /** @type {__VLS_StyleScopedClasses['rounded-full']} */ ;
322
+ /** @type {__VLS_StyleScopedClasses['text-white']} */ ;
323
+ /** @type {__VLS_StyleScopedClasses['bg-chat-success']} */ ;
324
+ /** @type {__VLS_StyleScopedClasses['flex-center']} */ ;
325
+ /** @type {__VLS_StyleScopedClasses['w-full']} */ ;
326
+ /** @type {__VLS_StyleScopedClasses['h-full']} */ ;
327
+ /** @type {__VLS_StyleScopedClasses['w-5']} */ ;
328
+ /** @type {__VLS_StyleScopedClasses['h-5']} */ ;
329
+ /** @type {__VLS_StyleScopedClasses['bg-chat-error']} */ ;
330
+ /** @type {__VLS_StyleScopedClasses['flex-center']} */ ;
331
+ /** @type {__VLS_StyleScopedClasses['w-full']} */ ;
332
+ /** @type {__VLS_StyleScopedClasses['h-full']} */ ;
333
+ /** @type {__VLS_StyleScopedClasses['w-5']} */ ;
334
+ /** @type {__VLS_StyleScopedClasses['h-5']} */ ;
335
+ /** @type {__VLS_StyleScopedClasses['flex-center']} */ ;
336
+ /** @type {__VLS_StyleScopedClasses['h-10']} */ ;
337
+ /** @type {__VLS_StyleScopedClasses['rounded-xl']} */ ;
338
+ /** @type {__VLS_StyleScopedClasses['bg-chat-haze-200']} */ ;
339
+ /** @type {__VLS_StyleScopedClasses['font-semibold']} */ ;
340
+ /** @type {__VLS_StyleScopedClasses['text-sm']} */ ;
341
+ /** @type {__VLS_StyleScopedClasses['mt-1']} */ ;
342
+ /** @type {__VLS_StyleScopedClasses['text-chat-haze-200']} */ ;
343
+ /** @type {__VLS_StyleScopedClasses['text-xs']} */ ;
344
+ /** @type {__VLS_StyleScopedClasses['mt-1']} */ ;
345
+ /** @type {__VLS_StyleScopedClasses['!text-chat-error']} */ ;
346
+ const __VLS_export = (await import('vue')).defineComponent({
347
+ __typeEmits: {},
348
+ __typeProps: {},
349
+ props: {},
350
+ });
351
+ export default {};
@@ -49,8 +49,8 @@ const handleDisconnectMqtt = async () => {
49
49
  };
50
50
  const mqttMessageHandler = (topic, message) => {
51
51
  // console.log(topic, message)
52
- if ((infoUser.value?.id && message?.sender_id?.toString() == infoUser.value?.id?.toString())
53
- || (infoUser.value?.id && message?.receiver_id?.toString() == infoUser.value?.id?.toString())) {
52
+ if ((infoUser.value?.id && message?.sender_id?.toString() == infoUser.value?.id?.toString()) ||
53
+ (infoUser.value?.id && message?.receiver_id?.toString() == infoUser.value?.id?.toString())) {
54
54
  const index = listMessage.value.findIndex((item) => item.id === message?.id);
55
55
  if (index < 0) {
56
56
  listMessage.value.unshift(message);
@@ -177,7 +177,12 @@ const handleSendMessage = async (data) => {
177
177
  });
178
178
  updateMessageItem(data.id, { state: MessageState.Sent });
179
179
  chatMessageRef.value?.scrollBottom();
180
- publicTopicConversationUpdate({ message: data?.message ?? '', isSendImg: !!file_upload?.length, infoUser: infoUser.value });
180
+ publicTopicConversationUpdate({
181
+ message: data?.message ?? '',
182
+ isSendImg: !!file_upload?.length,
183
+ infoUser: infoUser.value,
184
+ is_unknown: props.conversation?.is_unknown ?? 0
185
+ });
181
186
  }
182
187
  catch (error) {
183
188
  console.log(error);
@@ -311,15 +316,17 @@ const __VLS_22 = __VLS_asFunctionalComponent(InputChat, new InputChat({
311
316
  ...{ 'onSendMessage': {} },
312
317
  ...{ 'onFocus': {} },
313
318
  data: (__VLS_ctx.infoUser),
319
+ responsive: (__VLS_ctx.responsive),
314
320
  ref: "inputChatRef",
315
- ...{ class: "p-6" },
321
+ ...{ class: "p-2 sm:p-6" },
316
322
  }));
317
323
  const __VLS_23 = __VLS_22({
318
324
  ...{ 'onSendMessage': {} },
319
325
  ...{ 'onFocus': {} },
320
326
  data: (__VLS_ctx.infoUser),
327
+ responsive: (__VLS_ctx.responsive),
321
328
  ref: "inputChatRef",
322
- ...{ class: "p-6" },
329
+ ...{ class: "p-2 sm:p-6" },
323
330
  }, ...__VLS_functionalComponentArgsRest(__VLS_22));
324
331
  let __VLS_25;
325
332
  let __VLS_26;
@@ -329,7 +336,7 @@ const __VLS_28 = ({ focus: {} },
329
336
  { onFocus: (...[$event]) => {
330
337
  __VLS_ctx.emit('inputFocus');
331
338
  // @ts-ignore
332
- [infoUser, emit, handleSendMessage,];
339
+ [infoUser, responsive, emit, handleSendMessage,];
333
340
  } });
334
341
  /** @type {typeof __VLS_ctx.inputChatRef} */ ;
335
342
  var __VLS_29 = {};
@@ -344,7 +351,8 @@ var __VLS_24;
344
351
  /** @type {__VLS_StyleScopedClasses['grow']} */ ;
345
352
  /** @type {__VLS_StyleScopedClasses['grow']} */ ;
346
353
  /** @type {__VLS_StyleScopedClasses['grow']} */ ;
347
- /** @type {__VLS_StyleScopedClasses['p-6']} */ ;
354
+ /** @type {__VLS_StyleScopedClasses['p-2']} */ ;
355
+ /** @type {__VLS_StyleScopedClasses['sm:p-6']} */ ;
348
356
  // @ts-ignore
349
357
  var __VLS_16 = __VLS_15, __VLS_30 = __VLS_29;
350
358
  const __VLS_export = (await import('vue')).defineComponent({
@@ -30,7 +30,7 @@ const handleActivePlivoSmsChange = async (is_active) => {
30
30
  loading.value = true;
31
31
  await activePlivoMode({ id: dataProfile.value?.id, is_sms: is_active ? 1 : 0 });
32
32
  if (dataProfile.value != null)
33
- dataProfile.value.is_sms_active = (is_active ? 1 : 0);
33
+ dataProfile.value.is_sms_active = is_active ? 1 : 0;
34
34
  activePlivoSms.value = is_active;
35
35
  }
36
36
  catch (e) {
@@ -52,10 +52,10 @@ let __VLS_elements;
52
52
  let __VLS_components;
53
53
  let __VLS_directives;
54
54
  __VLS_asFunctionalElement(__VLS_elements.div, __VLS_elements.div)({
55
- ...{ class: "px-8 pb-4 border-b border-chat-gray-5" },
55
+ ...{ class: "px-8 py-4 h-[96px] layout-shadow border-b border-chat-gray-5 z-10" },
56
56
  });
57
57
  __VLS_asFunctionalElement(__VLS_elements.div, __VLS_elements.div)({
58
- ...{ class: "flex items-center gap-2" },
58
+ ...{ class: "flex items-center gap-2 h-full" },
59
59
  });
60
60
  if (__VLS_ctx.responsive == 'mobile') {
61
61
  // @ts-ignore
@@ -187,12 +187,16 @@ if (__VLS_ctx.data?.id && __VLS_ctx.data?.id != __VLS_ctx.digibotId.toString() &
187
187
  const __VLS_23 = __VLS_22({}, ...__VLS_functionalComponentArgsRest(__VLS_22));
188
188
  }
189
189
  /** @type {__VLS_StyleScopedClasses['px-8']} */ ;
190
- /** @type {__VLS_StyleScopedClasses['pb-4']} */ ;
190
+ /** @type {__VLS_StyleScopedClasses['py-4']} */ ;
191
+ /** @type {__VLS_StyleScopedClasses['h-[96px]']} */ ;
192
+ /** @type {__VLS_StyleScopedClasses['layout-shadow']} */ ;
191
193
  /** @type {__VLS_StyleScopedClasses['border-b']} */ ;
192
194
  /** @type {__VLS_StyleScopedClasses['border-chat-gray-5']} */ ;
195
+ /** @type {__VLS_StyleScopedClasses['z-10']} */ ;
193
196
  /** @type {__VLS_StyleScopedClasses['flex']} */ ;
194
197
  /** @type {__VLS_StyleScopedClasses['items-center']} */ ;
195
198
  /** @type {__VLS_StyleScopedClasses['gap-2']} */ ;
199
+ /** @type {__VLS_StyleScopedClasses['h-full']} */ ;
196
200
  /** @type {__VLS_StyleScopedClasses['shrink-0']} */ ;
197
201
  /** @type {__VLS_StyleScopedClasses['flex']} */ ;
198
202
  /** @type {__VLS_StyleScopedClasses['items-center']} */ ;
@@ -1,4 +1,4 @@
1
- import IconPlus from '../../../assets/icons/IconPlus.vue';
1
+ /// <reference types="C:/phonghq/go-chat-v2/node_modules/.vue-global-types/vue_3.5_0.d.ts" />
2
2
  import IconPlan from '../../../assets/icons/IconPlan.vue';
3
3
  import EmojiPicker from 'vue3-emoji-picker';
4
4
  import 'vue3-emoji-picker/css';
@@ -34,6 +34,7 @@ const handleSendMessage = async (type) => {
34
34
  return;
35
35
  messageContent = keyword.value;
36
36
  keyword.value = '';
37
+ setInputHeight(chatInputRef.value);
37
38
  }
38
39
  else if (type == 'file') {
39
40
  const file = uploadImage();
@@ -55,7 +56,7 @@ const handleSendMessage = async (type) => {
55
56
  sender_id: dataProfile.value?.id,
56
57
  status: 'read',
57
58
  attachments: attachments,
58
- is_sms: dataProfile.value?.is_sms_active,
59
+ is_sms: dataProfile.value?.is_sms_active
59
60
  };
60
61
  emit('sendMessage', data);
61
62
  };
@@ -89,7 +90,7 @@ const handleActivePlivoSmsChange = async (is_active) => {
89
90
  const setInputHeight = (e) => {
90
91
  const el = chatInputRef.value;
91
92
  el.style.height = 'auto';
92
- if (keyword.value?.replace(/\s+/g, "") == '') {
93
+ if (keyword.value?.replace(/\s+/g, '') == '') {
93
94
  el.style.height = 42 + 'px';
94
95
  keyword.value = '';
95
96
  }
@@ -101,6 +102,8 @@ const handleSetInputHeight = useDebounce((e) => {
101
102
  setInputHeight(e);
102
103
  }, 200);
103
104
  const handleInput = () => {
105
+ if (props.responsive == 'mobile') {
106
+ }
104
107
  emit('focus');
105
108
  };
106
109
  const clearInput = () => {
@@ -122,8 +125,7 @@ let __VLS_elements;
122
125
  let __VLS_components;
123
126
  let __VLS_directives;
124
127
  __VLS_asFunctionalElement(__VLS_elements.div, __VLS_elements.div)({
125
- ...{ class: "z-10" },
126
- ...{ style: {} },
128
+ ...{ class: "z-10 layout-shadow border-t border-chat-gray-5" },
127
129
  });
128
130
  __VLS_asFunctionalElement(__VLS_elements.div, __VLS_elements.div)({
129
131
  ...{ class: "flex gap-2 items-end h-max" },
@@ -147,7 +149,7 @@ __VLS_asFunctionalElement(__VLS_elements.textarea)({
147
149
  // @ts-ignore
148
150
  [setInputHeight,];
149
151
  } },
150
- ...{ class: "w-full min-h-11 overflow-hidden chat-input !rounded-xl pl-4 py-2 pr-[96px] border border-chat-haze-200" },
152
+ ...{ class: "text-[14px] sm:text-base w-full min-h-11 overflow-hidden chat-input !rounded-xl pl-4 py-2 pr-[96px] border border-chat-haze-200" },
151
153
  ref: "chatInputRef",
152
154
  rows: "1",
153
155
  placeholder: "Send Message",
@@ -157,7 +159,7 @@ __VLS_asFunctionalElement(__VLS_elements.textarea)({
157
159
  // @ts-ignore
158
160
  [keyword, chatInputRef,];
159
161
  __VLS_asFunctionalElement(__VLS_elements.div, __VLS_elements.div)({
160
- ...{ class: "flex gap-2 absolute right-0 bottom-2" },
162
+ ...{ class: "flex gap-2 -translate-y-2" },
161
163
  });
162
164
  /** @type {[typeof PopoverBase, typeof PopoverBase, ]} */ ;
163
165
  // @ts-ignore
@@ -180,8 +182,11 @@ __VLS_asFunctionalElement(__VLS_elements.button, __VLS_elements.button)({
180
182
  // @ts-ignore
181
183
  [emojiOpen, emojiOpen,];
182
184
  } },
183
- ...{ class: "h-11 w-10" },
185
+ ...{ class: "h-11 w-8" },
184
186
  });
187
+ __VLS_asFunctionalDirective(__VLS_directives.vShow)(null, { ...__VLS_directiveBindingRestFields, value: (!(__VLS_ctx.keyword != '' && __VLS_ctx.responsive == 'mobile')) }, null, null);
188
+ // @ts-ignore
189
+ [keyword, responsive,];
185
190
  {
186
191
  const { content: __VLS_4 } = __VLS_2.slots;
187
192
  const __VLS_5 = {}.EmojiPicker;
@@ -229,21 +234,12 @@ const __VLS_15 = __VLS_14({
229
234
  offset: (2),
230
235
  hideSearch: true,
231
236
  }, ...__VLS_functionalComponentArgsRest(__VLS_14));
232
- __VLS_asFunctionalElement(__VLS_elements.button, __VLS_elements.button)({
233
- ...{ onClick: (...[$event]) => {
234
- __VLS_ctx.handleSendMessage('message');
235
- // @ts-ignore
236
- [handleSendMessage,];
237
- } },
238
- ...{ class: "h-11 w-10" },
239
- });
240
- /** @type {[typeof IconPlan, ]} */ ;
241
- // @ts-ignore
242
- const __VLS_18 = __VLS_asFunctionalComponent(IconPlan, new IconPlan({}));
243
- const __VLS_19 = __VLS_18({}, ...__VLS_functionalComponentArgsRest(__VLS_18));
244
237
  __VLS_asFunctionalElement(__VLS_elements.label, __VLS_elements.label)({
245
- ...{ class: "shrink-0 cursor-pointer relative -translate-y-1" },
238
+ ...{ class: "cursor-pointer relative" },
246
239
  });
240
+ __VLS_asFunctionalDirective(__VLS_directives.vShow)(null, { ...__VLS_directiveBindingRestFields, value: (!(__VLS_ctx.keyword != '' && __VLS_ctx.responsive == 'mobile')) }, null, null);
241
+ // @ts-ignore
242
+ [keyword, responsive,];
247
243
  __VLS_asFunctionalElement(__VLS_elements.input)({
248
244
  ...{ onChange: (__VLS_ctx.handleFileUpload) },
249
245
  type: "file",
@@ -255,23 +251,49 @@ __VLS_asFunctionalElement(__VLS_elements.input)({
255
251
  // @ts-ignore
256
252
  [handleFileUpload, refInputImage,];
257
253
  __VLS_asFunctionalElement(__VLS_elements.div, __VLS_elements.div)({
258
- ...{ class: "h-11 w-11 rounded-full flex-center bg-[#002E6B]" },
254
+ ...{ class: "h-11 w-8 flex-center" },
255
+ });
256
+ __VLS_asFunctionalElement(__VLS_elements.svg, __VLS_elements.svg)({
257
+ xmlns: "http://www.w3.org/2000/svg",
258
+ viewBox: "0 0 24 24",
259
+ fill: "none",
260
+ stroke: "currentColor",
261
+ 'stroke-width': "1.5",
262
+ 'stroke-linecap': "round",
263
+ 'stroke-linejoin': "round",
264
+ ...{ class: "w-5 h-5" },
259
265
  });
260
- /** @type {[typeof IconPlus, ]} */ ;
266
+ __VLS_asFunctionalElement(__VLS_elements.path)({
267
+ d: "M21.44 11.05l-8.49 8.49a5 5 0 01-7.07-7.07l8.49-8.49a3.5 3.5 0 014.95 4.95l-8.5 8.49a2 2 0 11-2.83-2.83l7.78-7.78",
268
+ });
269
+ __VLS_asFunctionalElement(__VLS_elements.button, __VLS_elements.button)({
270
+ ...{ onClick: (...[$event]) => {
271
+ __VLS_ctx.handleSendMessage('message');
272
+ // @ts-ignore
273
+ [handleSendMessage,];
274
+ } },
275
+ ...{ class: "h-11 w-11 rounded-full flex-center bg-[#002E6B] ml-2" },
276
+ });
277
+ /** @type {[typeof IconPlan, ]} */ ;
261
278
  // @ts-ignore
262
- const __VLS_22 = __VLS_asFunctionalComponent(IconPlus, new IconPlus({
263
- ...{ class: "text-white" },
279
+ const __VLS_18 = __VLS_asFunctionalComponent(IconPlan, new IconPlan({
280
+ color: "#fff",
264
281
  }));
265
- const __VLS_23 = __VLS_22({
266
- ...{ class: "text-white" },
267
- }, ...__VLS_functionalComponentArgsRest(__VLS_22));
282
+ const __VLS_19 = __VLS_18({
283
+ color: "#fff",
284
+ }, ...__VLS_functionalComponentArgsRest(__VLS_18));
268
285
  /** @type {__VLS_StyleScopedClasses['z-10']} */ ;
286
+ /** @type {__VLS_StyleScopedClasses['layout-shadow']} */ ;
287
+ /** @type {__VLS_StyleScopedClasses['border-t']} */ ;
288
+ /** @type {__VLS_StyleScopedClasses['border-chat-gray-5']} */ ;
269
289
  /** @type {__VLS_StyleScopedClasses['flex']} */ ;
270
290
  /** @type {__VLS_StyleScopedClasses['gap-2']} */ ;
271
291
  /** @type {__VLS_StyleScopedClasses['items-end']} */ ;
272
292
  /** @type {__VLS_StyleScopedClasses['h-max']} */ ;
273
293
  /** @type {__VLS_StyleScopedClasses['relative']} */ ;
274
294
  /** @type {__VLS_StyleScopedClasses['grow']} */ ;
295
+ /** @type {__VLS_StyleScopedClasses['text-[14px]']} */ ;
296
+ /** @type {__VLS_StyleScopedClasses['sm:text-base']} */ ;
275
297
  /** @type {__VLS_StyleScopedClasses['w-full']} */ ;
276
298
  /** @type {__VLS_StyleScopedClasses['min-h-11']} */ ;
277
299
  /** @type {__VLS_StyleScopedClasses['overflow-hidden']} */ ;
@@ -284,28 +306,27 @@ const __VLS_23 = __VLS_22({
284
306
  /** @type {__VLS_StyleScopedClasses['border-chat-haze-200']} */ ;
285
307
  /** @type {__VLS_StyleScopedClasses['flex']} */ ;
286
308
  /** @type {__VLS_StyleScopedClasses['gap-2']} */ ;
287
- /** @type {__VLS_StyleScopedClasses['absolute']} */ ;
288
- /** @type {__VLS_StyleScopedClasses['right-0']} */ ;
289
- /** @type {__VLS_StyleScopedClasses['bottom-2']} */ ;
309
+ /** @type {__VLS_StyleScopedClasses['-translate-y-2']} */ ;
290
310
  /** @type {__VLS_StyleScopedClasses['h-11']} */ ;
291
- /** @type {__VLS_StyleScopedClasses['w-10']} */ ;
311
+ /** @type {__VLS_StyleScopedClasses['w-8']} */ ;
292
312
  /** @type {__VLS_StyleScopedClasses['!w-[300px]']} */ ;
293
313
  /** @type {__VLS_StyleScopedClasses['opacity-0']} */ ;
294
314
  /** @type {__VLS_StyleScopedClasses['pointer-events-none']} */ ;
295
315
  /** @type {__VLS_StyleScopedClasses['absolute']} */ ;
296
- /** @type {__VLS_StyleScopedClasses['h-11']} */ ;
297
- /** @type {__VLS_StyleScopedClasses['w-10']} */ ;
298
- /** @type {__VLS_StyleScopedClasses['shrink-0']} */ ;
299
316
  /** @type {__VLS_StyleScopedClasses['cursor-pointer']} */ ;
300
317
  /** @type {__VLS_StyleScopedClasses['relative']} */ ;
301
- /** @type {__VLS_StyleScopedClasses['-translate-y-1']} */ ;
302
318
  /** @type {__VLS_StyleScopedClasses['hidden']} */ ;
303
319
  /** @type {__VLS_StyleScopedClasses['h-11']} */ ;
320
+ /** @type {__VLS_StyleScopedClasses['w-8']} */ ;
321
+ /** @type {__VLS_StyleScopedClasses['flex-center']} */ ;
322
+ /** @type {__VLS_StyleScopedClasses['w-5']} */ ;
323
+ /** @type {__VLS_StyleScopedClasses['h-5']} */ ;
324
+ /** @type {__VLS_StyleScopedClasses['h-11']} */ ;
304
325
  /** @type {__VLS_StyleScopedClasses['w-11']} */ ;
305
326
  /** @type {__VLS_StyleScopedClasses['rounded-full']} */ ;
306
327
  /** @type {__VLS_StyleScopedClasses['flex-center']} */ ;
307
328
  /** @type {__VLS_StyleScopedClasses['bg-[#002E6B]']} */ ;
308
- /** @type {__VLS_StyleScopedClasses['text-white']} */ ;
329
+ /** @type {__VLS_StyleScopedClasses['ml-2']} */ ;
309
330
  const __VLS_export = (await import('vue')).defineComponent({
310
331
  setup: () => (__VLS_exposed),
311
332
  __typeEmits: {},