@droppii-org/chat-sdk 0.7.2 → 0.7.3

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 (48) hide show
  1. package/dist/components/conversation-detail/ConversationMessageList.d.ts.map +1 -1
  2. package/dist/components/conversation-detail/ConversationMessageList.js +23 -5
  3. package/dist/components/conversation-inbox/ConversationInboxItem.d.ts.map +1 -1
  4. package/dist/components/conversation-inbox/ConversationInboxItem.js +1 -1
  5. package/dist/components/message/item/ConsultantChatButton.d.ts +6 -0
  6. package/dist/components/message/item/ConsultantChatButton.d.ts.map +1 -0
  7. package/dist/components/message/item/ConsultantChatButton.js +19 -0
  8. package/dist/components/message/item/CustomMessage.d.ts.map +1 -1
  9. package/dist/components/message/item/CustomMessage.js +6 -1
  10. package/dist/components/message/item/EventMessage.d.ts +11 -0
  11. package/dist/components/message/item/EventMessage.d.ts.map +1 -0
  12. package/dist/components/message/item/EventMessage.js +28 -0
  13. package/dist/components/message/item/consultantCta.d.ts +8 -0
  14. package/dist/components/message/item/consultantCta.d.ts.map +1 -0
  15. package/dist/components/message/item/consultantCta.js +5 -0
  16. package/dist/components/message/item/index.d.ts.map +1 -1
  17. package/dist/components/message/item/index.js +10 -4
  18. package/dist/components/message/item/otherSenders.d.ts.map +1 -1
  19. package/dist/components/message/item/otherSenders.js +4 -1
  20. package/dist/hooks/conversation/useConsultantChatNavigation.d.ts +12 -0
  21. package/dist/hooks/conversation/useConsultantChatNavigation.d.ts.map +1 -0
  22. package/dist/hooks/conversation/useConsultantChatNavigation.js +94 -0
  23. package/dist/hooks/message/useMessage.d.ts +1 -1
  24. package/dist/hooks/message/useMessage.d.ts.map +1 -1
  25. package/dist/hooks/message/useMessage.js +7 -4
  26. package/dist/hooks/message/useNewMessageAnnouncement.d.ts.map +1 -1
  27. package/dist/hooks/message/useNewMessageAnnouncement.js +3 -1
  28. package/dist/index.d.ts +2 -2
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/index.js +1 -1
  31. package/dist/locales/vi/common.json +1 -0
  32. package/dist/screens/conversation-detail/index.d.ts.map +1 -1
  33. package/dist/screens/conversation-detail/index.js +20 -1
  34. package/dist/store/conversation.d.ts.map +1 -1
  35. package/dist/store/conversation.js +3 -0
  36. package/dist/store/type.d.ts +8 -0
  37. package/dist/store/type.d.ts.map +1 -1
  38. package/dist/styles/global.css +1 -1
  39. package/dist/types/customMessage.d.ts +17 -0
  40. package/dist/types/customMessage.d.ts.map +1 -1
  41. package/dist/types/customMessage.js +8 -0
  42. package/dist/utils/common.d.ts +2 -0
  43. package/dist/utils/common.d.ts.map +1 -1
  44. package/dist/utils/common.js +14 -4
  45. package/dist/utils/customMessage.d.ts +7 -1
  46. package/dist/utils/customMessage.d.ts.map +1 -1
  47. package/dist/utils/customMessage.js +55 -1
  48. package/package.json +1 -1
@@ -1,14 +1,35 @@
1
- import { CustomMessageType, } from "../types/customMessage";
1
+ import { MessageType } from "@droppii-org/wasm-client-sdk";
2
+ import { SUPPORT_SYSTEM_SENDER_ID } from "../constants";
3
+ import { CustomMessageType, MallEventType, } from "../types/customMessage";
2
4
  const KNOWN_CUSTOM_MESSAGE_TYPES = Object.values(CustomMessageType);
5
+ const CONSULTANT_SELECTION_EVENTS = [
6
+ MallEventType.SelectConsultant,
7
+ MallEventType.SelectDroppiiConsultant,
8
+ ];
3
9
  const isCustomElemOrderData = (data) => {
4
10
  if (typeof data !== "object" || data === null)
5
11
  return false;
6
12
  const orderData = data;
7
13
  return (typeof orderData.id === "string" && typeof orderData.orderCode === "string");
8
14
  };
15
+ const isCustomElemEventData = (data) => typeof data === "object" &&
16
+ data !== null &&
17
+ typeof data.type === "string";
18
+ /** Any event-tagged custom message, whoever sent it. */
19
+ export const isEventCustomMessage = (message) => {
20
+ var _a;
21
+ return (message === null || message === void 0 ? void 0 : message.contentType) === MessageType.CustomMessage &&
22
+ ((_a = message === null || message === void 0 ? void 0 : message.customElem) === null || _a === void 0 ? void 0 : _a.extension) === CustomMessageType.Event;
23
+ };
24
+ // Only chat-service (as the OpenIM admin) may send these; anything else
25
+ // using the same extension is a forgery and must not look official.
26
+ export const isSystemEventMessage = (message) => isEventCustomMessage(message) && (message === null || message === void 0 ? void 0 : message.sendID) === SUPPORT_SYSTEM_SENDER_ID;
9
27
  export const isRenderableCustomMessage = (message) => {
10
28
  var _a;
11
29
  const extension = (_a = message === null || message === void 0 ? void 0 : message.customElem) === null || _a === void 0 ? void 0 : _a.extension;
30
+ if (extension === CustomMessageType.Event) {
31
+ return isSystemEventMessage(message);
32
+ }
12
33
  return !!extension && KNOWN_CUSTOM_MESSAGE_TYPES.includes(extension);
13
34
  };
14
35
  export const parseCustomMessagePayload = (message) => {
@@ -29,8 +50,41 @@ export const parseCustomMessagePayload = (message) => {
29
50
  ? { type: CustomMessageType.Order, data: parsedData }
30
51
  : null;
31
52
  }
53
+ if (customElem.extension === CustomMessageType.Event) {
54
+ return isCustomElemEventData(parsedData)
55
+ ? { type: CustomMessageType.Event, data: parsedData }
56
+ : null;
57
+ }
32
58
  return {
33
59
  type: CustomMessageType.Product,
34
60
  data: parsedData,
35
61
  };
36
62
  };
63
+ /** The rich-text HTML chat-service puts in `ex` alongside an event message. */
64
+ export const getEventMessageHtml = (message) => {
65
+ var _a, _b;
66
+ try {
67
+ const ex = JSON.parse((message === null || message === void 0 ? void 0 : message.ex) || "{}");
68
+ return ((_b = (_a = ex === null || ex === void 0 ? void 0 : ex.messageInfo) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.content) || "";
69
+ }
70
+ catch (_c) {
71
+ return "";
72
+ }
73
+ };
74
+ // The newest consultant selection (Droppii included) gets the button when it
75
+ // names a consultant; a window short of the newest messages shows none.
76
+ export const findConsultantCtaMessageId = (newestFirstMessages, hasMoreNew) => {
77
+ if (hasMoreNew)
78
+ return null;
79
+ for (const message of newestFirstMessages) {
80
+ if (!isSystemEventMessage(message))
81
+ continue;
82
+ const payload = parseCustomMessagePayload(message);
83
+ if ((payload === null || payload === void 0 ? void 0 : payload.type) !== CustomMessageType.Event)
84
+ continue;
85
+ if (!CONSULTANT_SELECTION_EVENTS.includes(payload.data.type))
86
+ continue;
87
+ return payload.data.consultantId ? message.clientMsgID : null;
88
+ }
89
+ return null;
90
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@droppii-org/chat-sdk",
3
- "version": "0.7.2",
3
+ "version": "0.7.3",
4
4
  "description": "Droppii React Chat SDK",
5
5
  "repository": {
6
6
  "type": "git",