stream-chat-react-native-core 5.31.2-beta.2 → 5.32.0-beta.1

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 (220) hide show
  1. package/lib/commonjs/components/Channel/Channel.js +21 -20
  2. package/lib/commonjs/components/Channel/Channel.js.map +1 -1
  3. package/lib/commonjs/components/Chat/hooks/handleEventToSyncDB.js.map +1 -1
  4. package/lib/commonjs/components/Message/Message.js +9 -19
  5. package/lib/commonjs/components/Message/Message.js.map +1 -1
  6. package/lib/commonjs/components/Message/MessageSimple/MessageFooter.js +1 -2
  7. package/lib/commonjs/components/Message/MessageSimple/MessageFooter.js.map +1 -1
  8. package/lib/commonjs/components/Message/MessageSimple/ReactionList.js +54 -37
  9. package/lib/commonjs/components/Message/MessageSimple/ReactionList.js.map +1 -1
  10. package/lib/commonjs/components/Message/hooks/useCreateMessageContext.js +6 -11
  11. package/lib/commonjs/components/Message/hooks/useCreateMessageContext.js.map +1 -1
  12. package/lib/commonjs/components/Message/hooks/useProcessReactions.js +90 -0
  13. package/lib/commonjs/components/Message/hooks/useProcessReactions.js.map +1 -0
  14. package/lib/commonjs/components/MessageOverlay/MessageOverlay.js +3 -12
  15. package/lib/commonjs/components/MessageOverlay/MessageOverlay.js.map +1 -1
  16. package/lib/commonjs/components/MessageOverlay/OverlayReactions.js +47 -143
  17. package/lib/commonjs/components/MessageOverlay/OverlayReactions.js.map +1 -1
  18. package/lib/commonjs/components/MessageOverlay/OverlayReactionsItem.js +166 -0
  19. package/lib/commonjs/components/MessageOverlay/OverlayReactionsItem.js.map +1 -0
  20. package/lib/commonjs/components/MessageOverlay/hooks/useFetchReactions.js +144 -0
  21. package/lib/commonjs/components/MessageOverlay/hooks/useFetchReactions.js.map +1 -0
  22. package/lib/commonjs/contexts/messageContext/MessageContext.js.map +1 -1
  23. package/lib/commonjs/contexts/themeContext/utils/theme.js +0 -1
  24. package/lib/commonjs/contexts/themeContext/utils/theme.js.map +1 -1
  25. package/lib/commonjs/i18n/es.json +13 -13
  26. package/lib/commonjs/i18n/fr.json +13 -13
  27. package/lib/commonjs/i18n/he.json +13 -13
  28. package/lib/commonjs/i18n/hi.json +13 -13
  29. package/lib/commonjs/i18n/it.json +13 -13
  30. package/lib/commonjs/i18n/ja.json +13 -13
  31. package/lib/commonjs/i18n/ko.json +13 -13
  32. package/lib/commonjs/i18n/nl.json +13 -13
  33. package/lib/commonjs/i18n/pt-BR.json +13 -13
  34. package/lib/commonjs/i18n/ru.json +13 -13
  35. package/lib/commonjs/i18n/tr.json +13 -13
  36. package/lib/commonjs/mock-builders/generator/message.js +2 -0
  37. package/lib/commonjs/mock-builders/generator/message.js.map +1 -1
  38. package/lib/commonjs/store/QuickSqliteClient.js +1 -1
  39. package/lib/commonjs/store/apis/getReactions.js +17 -0
  40. package/lib/commonjs/store/apis/getReactions.js.map +1 -0
  41. package/lib/commonjs/store/apis/getReactionsforFilterSort.js +30 -0
  42. package/lib/commonjs/store/apis/getReactionsforFilterSort.js.map +1 -0
  43. package/lib/commonjs/store/apis/insertReaction.js +8 -1
  44. package/lib/commonjs/store/apis/insertReaction.js.map +1 -1
  45. package/lib/commonjs/store/apis/queries/selectReactionsForMessages.js +1 -1
  46. package/lib/commonjs/store/apis/queries/selectReactionsForMessages.js.map +1 -1
  47. package/lib/commonjs/store/apis/updateReaction.js +6 -6
  48. package/lib/commonjs/store/apis/updateReaction.js.map +1 -1
  49. package/lib/commonjs/store/mappers/mapMessageToStorable.js +5 -3
  50. package/lib/commonjs/store/mappers/mapMessageToStorable.js.map +1 -1
  51. package/lib/commonjs/store/mappers/mapStorableToMessage.js +5 -3
  52. package/lib/commonjs/store/mappers/mapStorableToMessage.js.map +1 -1
  53. package/lib/commonjs/store/schema.js +2 -1
  54. package/lib/commonjs/store/schema.js.map +1 -1
  55. package/lib/commonjs/utils/addReactionToLocalState.js +25 -13
  56. package/lib/commonjs/utils/addReactionToLocalState.js.map +1 -1
  57. package/lib/commonjs/utils/removeReactionFromLocalState.js +11 -3
  58. package/lib/commonjs/utils/removeReactionFromLocalState.js.map +1 -1
  59. package/lib/commonjs/utils/removeReservedFields.js +1 -1
  60. package/lib/commonjs/utils/removeReservedFields.js.map +1 -1
  61. package/lib/commonjs/utils/utils.js +19 -5
  62. package/lib/commonjs/utils/utils.js.map +1 -1
  63. package/lib/commonjs/version.json +1 -1
  64. package/lib/module/components/Channel/Channel.js +21 -20
  65. package/lib/module/components/Channel/Channel.js.map +1 -1
  66. package/lib/module/components/Chat/hooks/handleEventToSyncDB.js.map +1 -1
  67. package/lib/module/components/Message/Message.js +9 -19
  68. package/lib/module/components/Message/Message.js.map +1 -1
  69. package/lib/module/components/Message/MessageSimple/MessageFooter.js +1 -2
  70. package/lib/module/components/Message/MessageSimple/MessageFooter.js.map +1 -1
  71. package/lib/module/components/Message/MessageSimple/ReactionList.js +54 -37
  72. package/lib/module/components/Message/MessageSimple/ReactionList.js.map +1 -1
  73. package/lib/module/components/Message/hooks/useCreateMessageContext.js +6 -11
  74. package/lib/module/components/Message/hooks/useCreateMessageContext.js.map +1 -1
  75. package/lib/module/components/Message/hooks/useProcessReactions.js +90 -0
  76. package/lib/module/components/Message/hooks/useProcessReactions.js.map +1 -0
  77. package/lib/module/components/MessageOverlay/MessageOverlay.js +3 -12
  78. package/lib/module/components/MessageOverlay/MessageOverlay.js.map +1 -1
  79. package/lib/module/components/MessageOverlay/OverlayReactions.js +47 -143
  80. package/lib/module/components/MessageOverlay/OverlayReactions.js.map +1 -1
  81. package/lib/module/components/MessageOverlay/OverlayReactionsItem.js +166 -0
  82. package/lib/module/components/MessageOverlay/OverlayReactionsItem.js.map +1 -0
  83. package/lib/module/components/MessageOverlay/hooks/useFetchReactions.js +144 -0
  84. package/lib/module/components/MessageOverlay/hooks/useFetchReactions.js.map +1 -0
  85. package/lib/module/contexts/messageContext/MessageContext.js.map +1 -1
  86. package/lib/module/contexts/themeContext/utils/theme.js +0 -1
  87. package/lib/module/contexts/themeContext/utils/theme.js.map +1 -1
  88. package/lib/module/i18n/es.json +13 -13
  89. package/lib/module/i18n/fr.json +13 -13
  90. package/lib/module/i18n/he.json +13 -13
  91. package/lib/module/i18n/hi.json +13 -13
  92. package/lib/module/i18n/it.json +13 -13
  93. package/lib/module/i18n/ja.json +13 -13
  94. package/lib/module/i18n/ko.json +13 -13
  95. package/lib/module/i18n/nl.json +13 -13
  96. package/lib/module/i18n/pt-BR.json +13 -13
  97. package/lib/module/i18n/ru.json +13 -13
  98. package/lib/module/i18n/tr.json +13 -13
  99. package/lib/module/mock-builders/generator/message.js +2 -0
  100. package/lib/module/mock-builders/generator/message.js.map +1 -1
  101. package/lib/module/store/QuickSqliteClient.js +1 -1
  102. package/lib/module/store/apis/getReactions.js +17 -0
  103. package/lib/module/store/apis/getReactions.js.map +1 -0
  104. package/lib/module/store/apis/getReactionsforFilterSort.js +30 -0
  105. package/lib/module/store/apis/getReactionsforFilterSort.js.map +1 -0
  106. package/lib/module/store/apis/insertReaction.js +8 -1
  107. package/lib/module/store/apis/insertReaction.js.map +1 -1
  108. package/lib/module/store/apis/queries/selectReactionsForMessages.js +1 -1
  109. package/lib/module/store/apis/queries/selectReactionsForMessages.js.map +1 -1
  110. package/lib/module/store/apis/updateReaction.js +6 -6
  111. package/lib/module/store/apis/updateReaction.js.map +1 -1
  112. package/lib/module/store/mappers/mapMessageToStorable.js +5 -3
  113. package/lib/module/store/mappers/mapMessageToStorable.js.map +1 -1
  114. package/lib/module/store/mappers/mapStorableToMessage.js +5 -3
  115. package/lib/module/store/mappers/mapStorableToMessage.js.map +1 -1
  116. package/lib/module/store/schema.js +2 -1
  117. package/lib/module/store/schema.js.map +1 -1
  118. package/lib/module/utils/addReactionToLocalState.js +25 -13
  119. package/lib/module/utils/addReactionToLocalState.js.map +1 -1
  120. package/lib/module/utils/removeReactionFromLocalState.js +11 -3
  121. package/lib/module/utils/removeReactionFromLocalState.js.map +1 -1
  122. package/lib/module/utils/removeReservedFields.js +1 -1
  123. package/lib/module/utils/removeReservedFields.js.map +1 -1
  124. package/lib/module/utils/utils.js +19 -5
  125. package/lib/module/utils/utils.js.map +1 -1
  126. package/lib/module/version.json +1 -1
  127. package/lib/typescript/components/Channel/Channel.d.ts.map +1 -1
  128. package/lib/typescript/components/Channel/hooks/useCreateInputMessageInputContext.d.ts +2 -2
  129. package/lib/typescript/components/Chat/hooks/handleEventToSyncDB.d.ts.map +1 -1
  130. package/lib/typescript/components/Message/Message.d.ts.map +1 -1
  131. package/lib/typescript/components/Message/MessageSimple/ReactionList.d.ts +11 -3
  132. package/lib/typescript/components/Message/MessageSimple/ReactionList.d.ts.map +1 -1
  133. package/lib/typescript/components/Message/hooks/useCreateMessageContext.d.ts.map +1 -1
  134. package/lib/typescript/components/Message/hooks/useMessageActionHandlers.d.ts +1 -1
  135. package/lib/typescript/components/Message/hooks/useMessageActions.d.ts +1 -1
  136. package/lib/typescript/components/Message/hooks/useProcessReactions.d.ts +38 -0
  137. package/lib/typescript/components/Message/hooks/useProcessReactions.d.ts.map +1 -0
  138. package/lib/typescript/components/MessageOverlay/MessageOverlay.d.ts.map +1 -1
  139. package/lib/typescript/components/MessageOverlay/OverlayReactions.d.ts +2 -1
  140. package/lib/typescript/components/MessageOverlay/OverlayReactions.d.ts.map +1 -1
  141. package/lib/typescript/components/MessageOverlay/OverlayReactionsItem.d.ts +11 -0
  142. package/lib/typescript/components/MessageOverlay/OverlayReactionsItem.d.ts.map +1 -0
  143. package/lib/typescript/components/MessageOverlay/hooks/useFetchReactions.d.ts +14 -0
  144. package/lib/typescript/components/MessageOverlay/hooks/useFetchReactions.d.ts.map +1 -0
  145. package/lib/typescript/contexts/messageContext/MessageContext.d.ts +3 -6
  146. package/lib/typescript/contexts/messageContext/MessageContext.d.ts.map +1 -1
  147. package/lib/typescript/contexts/messageInputContext/MessageInputContext.d.ts +1 -1
  148. package/lib/typescript/contexts/themeContext/utils/theme.d.ts +0 -1
  149. package/lib/typescript/contexts/themeContext/utils/theme.d.ts.map +1 -1
  150. package/lib/typescript/i18n/es.json +13 -13
  151. package/lib/typescript/i18n/fr.json +13 -13
  152. package/lib/typescript/i18n/he.json +13 -13
  153. package/lib/typescript/i18n/hi.json +13 -13
  154. package/lib/typescript/i18n/it.json +13 -13
  155. package/lib/typescript/i18n/ja.json +13 -13
  156. package/lib/typescript/i18n/ko.json +13 -13
  157. package/lib/typescript/i18n/nl.json +13 -13
  158. package/lib/typescript/i18n/pt-BR.json +13 -13
  159. package/lib/typescript/i18n/ru.json +13 -13
  160. package/lib/typescript/i18n/tr.json +13 -13
  161. package/lib/typescript/store/apis/getReactions.d.ts +7 -0
  162. package/lib/typescript/store/apis/getReactions.d.ts.map +1 -0
  163. package/lib/typescript/store/apis/getReactionsforFilterSort.d.ts +14 -0
  164. package/lib/typescript/store/apis/getReactionsforFilterSort.d.ts.map +1 -0
  165. package/lib/typescript/store/apis/insertReaction.d.ts +3 -2
  166. package/lib/typescript/store/apis/insertReaction.d.ts.map +1 -1
  167. package/lib/typescript/store/apis/queries/selectReactionsForMessages.d.ts +4 -0
  168. package/lib/typescript/store/apis/queries/selectReactionsForMessages.d.ts.map +1 -1
  169. package/lib/typescript/store/apis/updateReaction.d.ts.map +1 -1
  170. package/lib/typescript/store/mappers/mapMessageToStorable.d.ts.map +1 -1
  171. package/lib/typescript/store/mappers/mapStorableToMessage.d.ts.map +1 -1
  172. package/lib/typescript/store/schema.d.ts +2 -1
  173. package/lib/typescript/store/schema.d.ts.map +1 -1
  174. package/lib/typescript/utils/addReactionToLocalState.d.ts.map +1 -1
  175. package/lib/typescript/utils/removeReactionFromLocalState.d.ts.map +1 -1
  176. package/lib/typescript/utils/removeReservedFields.d.ts.map +1 -1
  177. package/lib/typescript/utils/utils.d.ts +9 -3
  178. package/lib/typescript/utils/utils.d.ts.map +1 -1
  179. package/package.json +1 -1
  180. package/src/components/Channel/Channel.tsx +24 -34
  181. package/src/components/Chat/hooks/handleEventToSyncDB.ts +1 -2
  182. package/src/components/Message/Message.tsx +8 -26
  183. package/src/components/Message/MessageSimple/MessageFooter.tsx +1 -1
  184. package/src/components/Message/MessageSimple/ReactionList.tsx +72 -47
  185. package/src/components/Message/MessageSimple/__tests__/MessageContent.test.js +1 -1
  186. package/src/components/Message/hooks/useCreateMessageContext.ts +5 -10
  187. package/src/components/Message/hooks/useProcessReactions.ts +116 -0
  188. package/src/components/MessageOverlay/MessageOverlay.tsx +4 -17
  189. package/src/components/MessageOverlay/OverlayReactions.tsx +75 -176
  190. package/src/components/MessageOverlay/OverlayReactionsItem.tsx +188 -0
  191. package/src/components/MessageOverlay/hooks/useFetchReactions.ts +85 -0
  192. package/src/components/Thread/__tests__/__snapshots__/Thread.test.js.snap +139 -0
  193. package/src/contexts/messageContext/MessageContext.tsx +2 -6
  194. package/src/contexts/themeContext/utils/theme.ts +0 -2
  195. package/src/i18n/es.json +13 -13
  196. package/src/i18n/fr.json +13 -13
  197. package/src/i18n/he.json +13 -13
  198. package/src/i18n/hi.json +13 -13
  199. package/src/i18n/it.json +13 -13
  200. package/src/i18n/ja.json +13 -13
  201. package/src/i18n/ko.json +13 -13
  202. package/src/i18n/nl.json +13 -13
  203. package/src/i18n/pt-BR.json +13 -13
  204. package/src/i18n/ru.json +13 -13
  205. package/src/i18n/tr.json +13 -13
  206. package/src/mock-builders/generator/message.js +2 -0
  207. package/src/store/QuickSqliteClient.ts +1 -1
  208. package/src/store/apis/getReactions.ts +21 -0
  209. package/src/store/apis/getReactionsforFilterSort.ts +43 -0
  210. package/src/store/apis/insertReaction.ts +15 -5
  211. package/src/store/apis/queries/selectReactionsForMessages.ts +5 -1
  212. package/src/store/apis/updateReaction.ts +6 -18
  213. package/src/store/mappers/mapMessageToStorable.ts +4 -2
  214. package/src/store/mappers/mapStorableToMessage.ts +12 -2
  215. package/src/store/schema.ts +4 -2
  216. package/src/utils/addReactionToLocalState.ts +33 -17
  217. package/src/utils/removeReactionFromLocalState.ts +22 -2
  218. package/src/utils/removeReservedFields.ts +2 -0
  219. package/src/utils/utils.ts +19 -7
  220. package/src/version.json +1 -1
@@ -49,30 +49,45 @@ export const addReactionToLocalState = <
49
49
  message.latest_reactions = [];
50
50
  }
51
51
  message.latest_reactions = message.latest_reactions.filter((r) => r.user_id !== user.id);
52
+
52
53
  if (
53
54
  currentReaction &&
54
- message.reaction_counts &&
55
- message.reaction_counts[currentReaction.type] &&
56
- message.reaction_counts[currentReaction.type] > 0
55
+ message.reaction_groups &&
56
+ message.reaction_groups[currentReaction.type] &&
57
+ message.reaction_groups[currentReaction.type].count > 0 &&
58
+ message.reaction_groups[currentReaction.type].sum_scores > 0
57
59
  ) {
58
- message.reaction_counts[currentReaction.type] =
59
- message.reaction_counts[currentReaction.type] - 1;
60
+ message.reaction_groups[currentReaction.type].count =
61
+ message.reaction_groups[currentReaction.type].count - 1;
62
+ message.reaction_groups[currentReaction.type].sum_scores =
63
+ message.reaction_groups[currentReaction.type].sum_scores - 1;
60
64
  }
61
65
 
62
- if (!message.reaction_counts) {
63
- message.reaction_counts = {
64
- [reactionType]: 1,
65
- };
66
- } else {
67
- message.reaction_counts[reactionType] = (message.reaction_counts?.[reactionType] || 0) + 1;
68
- }
69
- } else {
70
- if (!message.reaction_counts) {
71
- message.reaction_counts = {
72
- [reactionType]: 1,
66
+ if (!message.reaction_groups) {
67
+ message.reaction_groups = {
68
+ [reactionType]: {
69
+ count: 1,
70
+ first_reaction_at: new Date().toISOString(),
71
+ last_reaction_at: new Date().toISOString(),
72
+ sum_scores: 1,
73
+ },
73
74
  };
74
75
  } else {
75
- message.reaction_counts[reactionType] = (message.reaction_counts?.[reactionType] || 0) + 1;
76
+ if (!message.reaction_groups[reactionType]) {
77
+ message.reaction_groups[reactionType] = {
78
+ count: 1,
79
+ first_reaction_at: new Date().toISOString(),
80
+ last_reaction_at: new Date().toISOString(),
81
+ sum_scores: 1,
82
+ };
83
+ } else {
84
+ message.reaction_groups[reactionType] = {
85
+ ...message.reaction_groups[reactionType],
86
+ count: message.reaction_groups[reactionType].count + 1,
87
+ last_reaction_at: new Date().toISOString(),
88
+ sum_scores: message.reaction_groups[reactionType].sum_scores + 1,
89
+ };
90
+ }
76
91
  }
77
92
  }
78
93
 
@@ -86,6 +101,7 @@ export const addReactionToLocalState = <
86
101
  });
87
102
  } else {
88
103
  insertReaction({
104
+ message,
89
105
  reaction,
90
106
  });
91
107
  }
@@ -27,8 +27,28 @@ export const removeReactionFromLocalState = <
27
27
  (r) => !(r.user_id === user?.id && r.type === reactionType),
28
28
  );
29
29
 
30
- if (message.reaction_counts?.[reactionType] && message.reaction_counts?.[reactionType] > 0) {
31
- message.reaction_counts[reactionType] = message.reaction_counts[reactionType] - 1;
30
+ if (message.reaction_groups?.[reactionType]) {
31
+ if (
32
+ message.reaction_groups[reactionType].count > 0 ||
33
+ message.reaction_groups[reactionType].sum_scores > 0
34
+ ) {
35
+ message.reaction_groups[reactionType].count = Math.max(
36
+ 0,
37
+ message.reaction_groups[reactionType].count - 1,
38
+ );
39
+ message.reaction_groups[reactionType].sum_scores = Math.max(
40
+ 0,
41
+ message.reaction_groups[reactionType].sum_scores - 1,
42
+ );
43
+ if (
44
+ message.reaction_groups[reactionType].count === 0 ||
45
+ message.reaction_groups[reactionType].sum_scores === 0
46
+ ) {
47
+ delete message.reaction_groups[reactionType];
48
+ }
49
+ } else {
50
+ delete message.reaction_groups[reactionType];
51
+ }
32
52
  }
33
53
 
34
54
  deleteReaction({
@@ -19,8 +19,10 @@ export const removeReservedFields = <
19
19
  'latest_reactions',
20
20
  'own_reactions',
21
21
  'reaction_counts',
22
+ 'reaction_groups',
22
23
  'last_message_at',
23
24
  'member_count',
25
+ 'message_text_updated_at',
24
26
  'type',
25
27
  'updated_at',
26
28
  'reply_count',
@@ -13,7 +13,8 @@ import type {
13
13
  UserResponse,
14
14
  } from 'stream-chat';
15
15
 
16
- import type { MessageType } from '../components/MessageList/hooks/useMessageList';
16
+ import { IconProps } from '../../src/icons/utils/base';
17
+ import { MessageType } from '../components/MessageList/hooks/useMessageList';
17
18
  import type {
18
19
  EmojiSearchIndex,
19
20
  MentionAllAppUsersQuery,
@@ -24,7 +25,6 @@ import type {
24
25
  SuggestionUser,
25
26
  } from '../contexts/suggestionsContext/SuggestionsContext';
26
27
  import { compiledEmojis, Emoji } from '../emoji-data';
27
- import type { IconProps } from '../icons/utils/base';
28
28
  import type { TableRowJoinedUser } from '../store/types';
29
29
  import type { DefaultStreamChatGenerics, ValueOf } from '../types/types';
30
30
 
@@ -602,19 +602,31 @@ export const hasOnlyEmojis = (text: string) => {
602
602
  * @param {FormatMessageResponse<StreamChatGenerics>} message - the message object to be stringified
603
603
  * @returns {string} The stringified message
604
604
  */
605
- const stringifyMessage = <
605
+ export const stringifyMessage = <
606
606
  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,
607
607
  >({
608
608
  deleted_at,
609
609
  latest_reactions,
610
+ reaction_groups,
611
+ readBy,
610
612
  reply_count,
611
613
  status,
614
+ text,
612
615
  type,
613
616
  updated_at,
614
- }: FormatMessageResponse<StreamChatGenerics>): string =>
615
- `${type}${deleted_at}${
616
- latest_reactions ? latest_reactions.map(({ type }) => type).join() : ''
617
- }${reply_count}${status}${updated_at?.toISOString?.() || updated_at}`;
617
+ }: FormatMessageResponse<StreamChatGenerics> | MessageType<StreamChatGenerics>): string =>
618
+ `${
619
+ latest_reactions ? latest_reactions.map(({ type, user }) => `${type}${user?.id}`).join() : ''
620
+ }${
621
+ reaction_groups
622
+ ? Object.entries(reaction_groups)
623
+ .flatMap(
624
+ ([type, { count, first_reaction_at, last_reaction_at }]) =>
625
+ `${type}${count}${first_reaction_at}${last_reaction_at}`,
626
+ )
627
+ .join()
628
+ : ''
629
+ }${type}${deleted_at}${text}${readBy}${reply_count}${status}${updated_at}`;
618
630
 
619
631
  /**
620
632
  * Reduces a list of messages to strings that are used in useEffect & useMemo
package/src/version.json CHANGED
@@ -1,3 +1,3 @@
1
1
  {
2
- "version": "5.31.2-beta.2"
2
+ "version": "5.32.0-beta.1"
3
3
  }