@atlaskit/reactions 21.4.0 → 21.6.0

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 (319) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/MockReactionsClient/package.json +7 -0
  3. package/dist/cjs/MockReactionsClient.js +276 -0
  4. package/dist/cjs/analytics/analytics.js +141 -0
  5. package/dist/cjs/analytics/index.js +4 -134
  6. package/dist/cjs/client/ReactionServiceClient.js +29 -6
  7. package/dist/cjs/components/{Counter.js → Counter/Counter.js} +32 -39
  8. package/dist/cjs/components/Counter/index.js +36 -0
  9. package/dist/cjs/components/Counter/styles.js +33 -0
  10. package/dist/cjs/components/EmojiButton/EmojiButton.js +58 -0
  11. package/dist/cjs/components/EmojiButton/index.js +19 -0
  12. package/dist/cjs/components/EmojiButton/styles.js +25 -0
  13. package/dist/cjs/components/FlashAnimation/FlashAnimation.js +42 -0
  14. package/dist/cjs/components/FlashAnimation/index.js +19 -0
  15. package/dist/cjs/components/{FlashAnimation.js → FlashAnimation/styles.js} +7 -26
  16. package/dist/cjs/components/Reaction/Reaction.js +163 -0
  17. package/dist/cjs/components/Reaction/index.js +19 -0
  18. package/dist/cjs/components/Reaction/styles.js +70 -0
  19. package/dist/cjs/components/ReactionPicker/ReactionPicker.js +272 -0
  20. package/dist/cjs/components/ReactionPicker/index.js +19 -0
  21. package/dist/cjs/components/ReactionPicker/styles.js +37 -0
  22. package/dist/cjs/components/ReactionTooltip/ReactionTooltip.js +71 -0
  23. package/dist/cjs/components/ReactionTooltip/index.js +19 -0
  24. package/dist/cjs/components/ReactionTooltip/styles.js +46 -0
  25. package/dist/cjs/components/Reactions/Reactions.js +200 -0
  26. package/dist/cjs/components/Reactions/index.js +25 -0
  27. package/dist/cjs/components/Reactions/styles.js +29 -0
  28. package/dist/cjs/components/Selector/Selector.js +132 -0
  29. package/dist/cjs/components/Selector/index.js +30 -0
  30. package/dist/cjs/components/Selector/styles.js +56 -0
  31. package/dist/cjs/components/ShowMore/ShowMore.js +71 -0
  32. package/dist/cjs/components/ShowMore/index.js +19 -0
  33. package/dist/cjs/components/ShowMore/styles.js +44 -0
  34. package/dist/cjs/components/Trigger/Trigger.js +59 -0
  35. package/dist/cjs/components/Trigger/index.js +13 -0
  36. package/dist/cjs/components/Trigger/styles.js +46 -0
  37. package/dist/cjs/components/{UfoErrorBoundary.js → UfoErrorBoundary/UfoErrorBoundary.js} +3 -0
  38. package/dist/cjs/components/UfoErrorBoundary/index.js +13 -0
  39. package/dist/cjs/containers/ConnectedReactionPicker/ConnectedReactionPicker.js +62 -0
  40. package/dist/cjs/containers/ConnectedReactionPicker/index.js +13 -0
  41. package/dist/cjs/containers/ConnectedReactionsView/ConnectedReactionsView.js +258 -0
  42. package/dist/cjs/containers/ConnectedReactionsView/index.js +13 -0
  43. package/dist/cjs/containers/index.js +23 -13
  44. package/dist/cjs/hooks/index.js +13 -0
  45. package/dist/cjs/hooks/useClickAway.js +35 -0
  46. package/dist/cjs/index.js +8 -0
  47. package/dist/cjs/shared/constants.js +44 -0
  48. package/dist/cjs/{components → shared}/i18n.js +1 -1
  49. package/dist/cjs/shared/index.js +24 -0
  50. package/dist/cjs/shared/utils.js +54 -0
  51. package/dist/cjs/store/{ReactionsStore.js → MemoryReactionsStore.js} +41 -18
  52. package/dist/cjs/store/ReactionConsumer.js +43 -15
  53. package/dist/cjs/store/index.js +8 -2
  54. package/dist/cjs/store/utils.js +4 -10
  55. package/dist/cjs/{client/ReactionClient.js → types/client.js} +0 -0
  56. package/dist/cjs/types/index.js +2 -2
  57. package/dist/cjs/types/reaction.js +43 -0
  58. package/dist/cjs/types/{DetailedReaction.js → store.js} +0 -0
  59. package/dist/cjs/version.json +1 -1
  60. package/dist/es2019/MockReactionsClient.js +126 -0
  61. package/dist/es2019/analytics/analytics.js +64 -0
  62. package/dist/es2019/analytics/index.js +3 -65
  63. package/dist/es2019/analytics/ufo.js +0 -1
  64. package/dist/es2019/client/ReactionServiceClient.js +31 -6
  65. package/dist/es2019/components/{Counter.js → Counter/Counter.js} +26 -31
  66. package/dist/es2019/components/Counter/index.js +3 -0
  67. package/dist/es2019/components/Counter/styles.js +20 -0
  68. package/dist/es2019/components/EmojiButton/EmojiButton.js +35 -0
  69. package/dist/es2019/components/EmojiButton/index.js +1 -0
  70. package/dist/es2019/components/EmojiButton/styles.js +16 -0
  71. package/dist/es2019/components/FlashAnimation/FlashAnimation.js +18 -0
  72. package/dist/es2019/components/FlashAnimation/index.js +1 -0
  73. package/dist/es2019/components/{FlashAnimation.js → FlashAnimation/styles.js} +6 -17
  74. package/dist/es2019/components/Reaction/Reaction.js +104 -0
  75. package/dist/es2019/components/Reaction/index.js +1 -0
  76. package/dist/es2019/components/Reaction/styles.js +55 -0
  77. package/dist/es2019/components/ReactionPicker/ReactionPicker.js +208 -0
  78. package/dist/es2019/components/ReactionPicker/index.js +1 -0
  79. package/dist/es2019/components/ReactionPicker/styles.js +23 -0
  80. package/dist/es2019/components/ReactionTooltip/ReactionTooltip.js +46 -0
  81. package/dist/es2019/components/ReactionTooltip/index.js +1 -0
  82. package/dist/es2019/components/ReactionTooltip/styles.js +32 -0
  83. package/dist/es2019/components/Reactions/Reactions.js +156 -0
  84. package/dist/es2019/components/Reactions/index.js +1 -0
  85. package/dist/es2019/components/Reactions/styles.js +19 -0
  86. package/dist/es2019/components/Selector/Selector.js +98 -0
  87. package/dist/es2019/components/Selector/index.js +3 -0
  88. package/dist/es2019/components/Selector/styles.js +39 -0
  89. package/dist/es2019/components/ShowMore/ShowMore.js +43 -0
  90. package/dist/es2019/components/ShowMore/index.js +1 -0
  91. package/dist/es2019/components/ShowMore/styles.js +30 -0
  92. package/dist/es2019/components/{Trigger.js → Trigger/Trigger.js} +15 -20
  93. package/dist/es2019/components/Trigger/index.js +1 -0
  94. package/dist/es2019/components/Trigger/styles.js +24 -0
  95. package/dist/es2019/components/{UfoErrorBoundary.js → UfoErrorBoundary/UfoErrorBoundary.js} +4 -0
  96. package/dist/es2019/components/UfoErrorBoundary/index.js +1 -0
  97. package/dist/es2019/containers/ConnectedReactionPicker/ConnectedReactionPicker.js +27 -0
  98. package/dist/es2019/containers/ConnectedReactionPicker/index.js +1 -0
  99. package/dist/es2019/containers/ConnectedReactionsView/ConnectedReactionsView.js +166 -0
  100. package/dist/es2019/containers/ConnectedReactionsView/index.js +1 -0
  101. package/dist/es2019/containers/index.js +2 -2
  102. package/dist/es2019/hooks/index.js +1 -0
  103. package/dist/es2019/hooks/useClickAway.js +27 -0
  104. package/dist/es2019/index.js +3 -1
  105. package/dist/es2019/shared/constants.js +32 -0
  106. package/dist/es2019/{components → shared}/i18n.js +1 -1
  107. package/dist/es2019/shared/index.js +6 -0
  108. package/dist/es2019/shared/utils.js +35 -0
  109. package/dist/es2019/store/{ReactionsStore.js → MemoryReactionsStore.js} +40 -14
  110. package/dist/es2019/store/ReactionConsumer.js +18 -12
  111. package/dist/es2019/store/index.js +1 -1
  112. package/dist/es2019/store/utils.js +8 -4
  113. package/dist/es2019/{client/ReactionClient.js → types/client.js} +0 -0
  114. package/dist/es2019/types/index.js +1 -1
  115. package/dist/es2019/types/reaction.js +34 -0
  116. package/dist/es2019/types/{DetailedReaction.js → store.js} +0 -0
  117. package/dist/es2019/version.json +1 -1
  118. package/dist/esm/MockReactionsClient.js +257 -0
  119. package/dist/esm/analytics/analytics.js +99 -0
  120. package/dist/esm/analytics/index.js +3 -99
  121. package/dist/esm/analytics/ufo.js +0 -1
  122. package/dist/esm/client/ReactionServiceClient.js +30 -6
  123. package/dist/esm/components/{Counter.js → Counter/Counter.js} +26 -31
  124. package/dist/esm/components/Counter/index.js +3 -0
  125. package/dist/esm/components/Counter/styles.js +20 -0
  126. package/dist/esm/components/EmojiButton/EmojiButton.js +35 -0
  127. package/dist/esm/components/EmojiButton/index.js +1 -0
  128. package/dist/esm/components/EmojiButton/styles.js +16 -0
  129. package/dist/esm/components/FlashAnimation/FlashAnimation.js +20 -0
  130. package/dist/esm/components/FlashAnimation/index.js +1 -0
  131. package/dist/esm/components/{FlashAnimation.js → FlashAnimation/styles.js} +6 -19
  132. package/dist/esm/components/Reaction/Reaction.js +131 -0
  133. package/dist/esm/components/Reaction/index.js +1 -0
  134. package/dist/esm/components/Reaction/styles.js +55 -0
  135. package/dist/esm/components/ReactionPicker/ReactionPicker.js +243 -0
  136. package/dist/esm/components/ReactionPicker/index.js +1 -0
  137. package/dist/esm/components/ReactionPicker/styles.js +23 -0
  138. package/dist/esm/components/ReactionTooltip/ReactionTooltip.js +46 -0
  139. package/dist/esm/components/ReactionTooltip/index.js +1 -0
  140. package/dist/esm/components/ReactionTooltip/styles.js +32 -0
  141. package/dist/esm/components/Reactions/Reactions.js +166 -0
  142. package/dist/esm/components/Reactions/index.js +1 -0
  143. package/dist/esm/components/Reactions/styles.js +19 -0
  144. package/dist/esm/components/Selector/Selector.js +107 -0
  145. package/dist/esm/components/Selector/index.js +3 -0
  146. package/dist/esm/components/Selector/styles.js +41 -0
  147. package/dist/esm/components/ShowMore/ShowMore.js +46 -0
  148. package/dist/esm/components/ShowMore/index.js +1 -0
  149. package/dist/esm/components/ShowMore/styles.js +30 -0
  150. package/dist/esm/components/{Trigger.js → Trigger/Trigger.js} +15 -20
  151. package/dist/esm/components/Trigger/index.js +1 -0
  152. package/dist/esm/components/Trigger/styles.js +31 -0
  153. package/dist/esm/components/{UfoErrorBoundary.js → UfoErrorBoundary/UfoErrorBoundary.js} +4 -0
  154. package/dist/esm/components/UfoErrorBoundary/index.js +1 -0
  155. package/dist/esm/containers/ConnectedReactionPicker/ConnectedReactionPicker.js +46 -0
  156. package/dist/esm/containers/ConnectedReactionPicker/index.js +1 -0
  157. package/dist/esm/containers/ConnectedReactionsView/ConnectedReactionsView.js +227 -0
  158. package/dist/esm/containers/ConnectedReactionsView/index.js +1 -0
  159. package/dist/esm/containers/index.js +2 -2
  160. package/dist/esm/hooks/index.js +1 -0
  161. package/dist/esm/hooks/useClickAway.js +28 -0
  162. package/dist/esm/index.js +3 -1
  163. package/dist/esm/shared/constants.js +34 -0
  164. package/dist/esm/{components → shared}/i18n.js +1 -1
  165. package/dist/esm/shared/index.js +6 -0
  166. package/dist/esm/shared/utils.js +41 -0
  167. package/dist/esm/store/{ReactionsStore.js → MemoryReactionsStore.js} +40 -17
  168. package/dist/esm/store/ReactionConsumer.js +42 -15
  169. package/dist/esm/store/index.js +1 -1
  170. package/dist/esm/store/utils.js +8 -4
  171. package/dist/{es2019/types/ReactionSource.js → esm/types/client.js} +0 -0
  172. package/dist/esm/types/index.js +1 -1
  173. package/dist/esm/types/reaction.js +34 -0
  174. package/dist/{es2019/types/ReactionSummary.js → esm/types/store.js} +0 -0
  175. package/dist/esm/version.json +1 -1
  176. package/dist/types/MockReactionsClient.d.ts +20 -0
  177. package/dist/types/analytics/analytics.d.ts +96 -0
  178. package/dist/types/analytics/index.d.ts +1 -96
  179. package/dist/types/client/ReactionServiceClient.d.ts +27 -10
  180. package/dist/types/client/index.d.ts +0 -1
  181. package/dist/types/components/Counter/Counter.d.ts +40 -0
  182. package/dist/types/components/Counter/index.d.ts +3 -0
  183. package/dist/types/components/Counter/styles.d.ts +3 -0
  184. package/dist/types/components/EmojiButton/EmojiButton.d.ts +22 -0
  185. package/dist/types/components/EmojiButton/index.d.ts +2 -0
  186. package/dist/types/components/EmojiButton/styles.d.ts +1 -0
  187. package/dist/types/components/FlashAnimation/FlashAnimation.d.ts +20 -0
  188. package/dist/types/components/FlashAnimation/index.d.ts +2 -0
  189. package/dist/types/components/FlashAnimation/styles.d.ts +3 -0
  190. package/dist/types/components/Reaction/Reaction.d.ts +38 -0
  191. package/dist/types/components/Reaction/index.d.ts +2 -0
  192. package/dist/types/components/Reaction/styles.d.ts +10 -0
  193. package/dist/types/components/ReactionPicker/ReactionPicker.d.ts +53 -0
  194. package/dist/types/components/ReactionPicker/index.d.ts +2 -0
  195. package/dist/types/components/ReactionPicker/styles.d.ts +3 -0
  196. package/dist/types/components/ReactionTooltip/ReactionTooltip.d.ts +22 -0
  197. package/dist/types/components/ReactionTooltip/index.d.ts +2 -0
  198. package/dist/types/components/ReactionTooltip/styles.d.ts +4 -0
  199. package/dist/types/components/Reactions/Reactions.d.ts +64 -0
  200. package/dist/types/components/Reactions/index.d.ts +2 -0
  201. package/dist/types/components/Reactions/styles.d.ts +2 -0
  202. package/dist/types/components/Selector/Selector.d.ts +34 -0
  203. package/dist/types/components/Selector/index.d.ts +3 -0
  204. package/dist/types/components/Selector/styles.d.ts +10 -0
  205. package/dist/types/components/ShowMore/ShowMore.d.ts +34 -0
  206. package/dist/types/components/ShowMore/index.d.ts +2 -0
  207. package/dist/types/components/ShowMore/styles.d.ts +3 -0
  208. package/dist/types/components/Trigger/Trigger.d.ts +23 -0
  209. package/dist/types/components/Trigger/index.d.ts +2 -0
  210. package/dist/types/components/Trigger/styles.d.ts +5 -0
  211. package/dist/types/components/UfoErrorBoundary/UfoErrorBoundary.d.ts +16 -0
  212. package/dist/types/components/UfoErrorBoundary/index.d.ts +2 -0
  213. package/dist/types/components/index.d.ts +4 -1
  214. package/dist/types/containers/ConnectedReactionPicker/ConnectedReactionPicker.d.ts +27 -0
  215. package/dist/types/containers/ConnectedReactionPicker/index.d.ts +2 -0
  216. package/dist/types/containers/ConnectedReactionsView/ConnectedReactionsView.d.ts +52 -0
  217. package/dist/types/containers/ConnectedReactionsView/index.d.ts +2 -0
  218. package/dist/types/containers/index.d.ts +2 -2
  219. package/dist/types/hooks/index.d.ts +1 -0
  220. package/dist/types/hooks/useClickAway.d.ts +8 -0
  221. package/dist/types/index.d.ts +2 -2
  222. package/dist/types/shared/constants.d.ts +13 -0
  223. package/dist/types/{components → shared}/i18n.d.ts +0 -0
  224. package/dist/types/shared/index.d.ts +3 -0
  225. package/dist/types/shared/utils.d.ts +11 -0
  226. package/dist/types/store/{ReactionsStore.d.ts → MemoryReactionsStore.d.ts} +23 -26
  227. package/dist/types/store/ReactionConsumer.d.ts +47 -19
  228. package/dist/types/store/index.d.ts +2 -2
  229. package/dist/types/store/utils.d.ts +3 -7
  230. package/dist/types/types/Actions.d.ts +20 -4
  231. package/dist/types/types/User.d.ts +6 -0
  232. package/dist/types/types/client.d.ts +38 -0
  233. package/dist/types/types/index.d.ts +5 -7
  234. package/dist/types/types/reaction.d.ts +82 -0
  235. package/dist/types/types/store.d.ts +63 -0
  236. package/docs/0-intro.tsx +118 -27
  237. package/docs/1-connected-reaction-picker.tsx +133 -0
  238. package/docs/2-connected-reactions-view.tsx +130 -0
  239. package/docs/3-reactions-store.tsx +71 -0
  240. package/docs/4-reaction-service-client.tsx +42 -0
  241. package/extract-react-type/ConnectedReactionPicker.ts +6 -0
  242. package/extract-react-type/ConnectedReactionsView.ts +6 -0
  243. package/extract-react-type/Reaction.ts +6 -0
  244. package/extract-react-type/Reactions.ts +6 -0
  245. package/extract-react-type/actions.ts +6 -0
  246. package/extract-react-type/reactionClient.ts +6 -0
  247. package/extract-react-type/reactionsStore.ts +6 -0
  248. package/package.json +24 -7
  249. package/dist/cjs/client/MockReactionsClient.js +0 -183
  250. package/dist/cjs/components/EmojiButton.js +0 -100
  251. package/dist/cjs/components/Reaction.js +0 -226
  252. package/dist/cjs/components/ReactionPicker.js +0 -289
  253. package/dist/cjs/components/ReactionTooltip.js +0 -82
  254. package/dist/cjs/components/Reactions.js +0 -194
  255. package/dist/cjs/components/Selector.js +0 -189
  256. package/dist/cjs/components/ShowMore.js +0 -119
  257. package/dist/cjs/components/Trigger.js +0 -58
  258. package/dist/cjs/components/utils.js +0 -28
  259. package/dist/cjs/containers/ConnectedReactionPicker.js +0 -44
  260. package/dist/cjs/containers/ConnectedReactionsView.js +0 -139
  261. package/dist/cjs/types/ReactionSource.js +0 -5
  262. package/dist/cjs/types/ReactionStatus.js +0 -15
  263. package/dist/cjs/types/ReactionSummary.js +0 -5
  264. package/dist/cjs/types/Reactions.js +0 -5
  265. package/dist/cjs/types/ReactionsState.js +0 -5
  266. package/dist/es2019/client/MockReactionsClient.js +0 -123
  267. package/dist/es2019/components/EmojiButton.js +0 -50
  268. package/dist/es2019/components/Reaction.js +0 -180
  269. package/dist/es2019/components/ReactionPicker.js +0 -239
  270. package/dist/es2019/components/ReactionTooltip.js +0 -66
  271. package/dist/es2019/components/Reactions.js +0 -150
  272. package/dist/es2019/components/Selector.js +0 -127
  273. package/dist/es2019/components/ShowMore.js +0 -71
  274. package/dist/es2019/components/utils.js +0 -13
  275. package/dist/es2019/containers/ConnectedReactionPicker.js +0 -27
  276. package/dist/es2019/containers/ConnectedReactionsView.js +0 -118
  277. package/dist/es2019/types/ReactionStatus.js +0 -8
  278. package/dist/es2019/types/Reactions.js +0 -1
  279. package/dist/es2019/types/ReactionsState.js +0 -1
  280. package/dist/esm/client/MockReactionsClient.js +0 -164
  281. package/dist/esm/client/ReactionClient.js +0 -1
  282. package/dist/esm/components/EmojiButton.js +0 -77
  283. package/dist/esm/components/Reaction.js +0 -204
  284. package/dist/esm/components/ReactionPicker.js +0 -266
  285. package/dist/esm/components/ReactionTooltip.js +0 -63
  286. package/dist/esm/components/Reactions.js +0 -180
  287. package/dist/esm/components/Selector.js +0 -160
  288. package/dist/esm/components/ShowMore.js +0 -95
  289. package/dist/esm/components/utils.js +0 -15
  290. package/dist/esm/containers/ConnectedReactionPicker.js +0 -29
  291. package/dist/esm/containers/ConnectedReactionsView.js +0 -116
  292. package/dist/esm/types/DetailedReaction.js +0 -1
  293. package/dist/esm/types/ReactionSource.js +0 -1
  294. package/dist/esm/types/ReactionStatus.js +0 -8
  295. package/dist/esm/types/ReactionSummary.js +0 -1
  296. package/dist/esm/types/Reactions.js +0 -1
  297. package/dist/esm/types/ReactionsState.js +0 -1
  298. package/dist/types/client/MockReactionsClient.d.ts +0 -28
  299. package/dist/types/client/ReactionClient.d.ts +0 -25
  300. package/dist/types/components/Counter.d.ts +0 -14
  301. package/dist/types/components/EmojiButton.d.ts +0 -12
  302. package/dist/types/components/FlashAnimation.d.ts +0 -13
  303. package/dist/types/components/Reaction.d.ts +0 -25
  304. package/dist/types/components/ReactionPicker.d.ts +0 -39
  305. package/dist/types/components/ReactionTooltip.d.ts +0 -9
  306. package/dist/types/components/Reactions.d.ts +0 -49
  307. package/dist/types/components/Selector.d.ts +0 -27
  308. package/dist/types/components/ShowMore.d.ts +0 -21
  309. package/dist/types/components/Trigger.d.ts +0 -7
  310. package/dist/types/components/UfoErrorBoundary.d.ts +0 -9
  311. package/dist/types/components/utils.d.ts +0 -4
  312. package/dist/types/containers/ConnectedReactionPicker.d.ts +0 -10
  313. package/dist/types/containers/ConnectedReactionsView.d.ts +0 -19
  314. package/dist/types/types/DetailedReaction.d.ts +0 -7
  315. package/dist/types/types/ReactionSource.d.ts +0 -1
  316. package/dist/types/types/ReactionStatus.d.ts +0 -6
  317. package/dist/types/types/ReactionSummary.d.ts +0 -10
  318. package/dist/types/types/Reactions.d.ts +0 -4
  319. package/dist/types/types/ReactionsState.d.ts +0 -17
@@ -0,0 +1,156 @@
1
+ /** @jsx jsx */
2
+ import React, { useCallback, useEffect, useMemo, useRef } from 'react';
3
+ import { jsx } from '@emotion/core';
4
+ import { useAnalyticsEvents } from '@atlaskit/analytics-next';
5
+ import Tooltip from '@atlaskit/tooltip';
6
+ import { FormattedMessage } from 'react-intl-next';
7
+ import { Analytics } from '../../analytics';
8
+ import { ReactionStatus } from '../../types';
9
+ import { i18n } from '../../shared';
10
+ import { Reaction } from '../Reaction';
11
+ import { ReactionPicker } from '../ReactionPicker';
12
+ import * as styles from './styles';
13
+
14
+ /**
15
+ * Test id for wrapper Reactions div
16
+ */
17
+ export const RENDER_REACTIONS_TESTID = 'render-reactions';
18
+ /**
19
+ * Test id for the tooltip
20
+ */
21
+
22
+ export const RENDER_TOOLTIP_TESTID = 'render-tooltip';
23
+
24
+ /**
25
+ * Renders list of reactions
26
+ */
27
+ export const Reactions = /*#__PURE__*/React.memo(({
28
+ flash = {},
29
+ status,
30
+ errorMessage,
31
+ loadReaction,
32
+ quickReactionEmojiIds,
33
+ containerAri,
34
+ ari,
35
+ pickerQuickReactionEmojiIds,
36
+ onReactionHover,
37
+ onSelection,
38
+ reactions = [],
39
+ emojiProvider,
40
+ allowAllEmojis,
41
+ onReactionClick
42
+ }) => {
43
+ const {
44
+ createAnalyticsEvent
45
+ } = useAnalyticsEvents();
46
+ let openTime = useRef();
47
+ let renderTime = useRef();
48
+
49
+ if (status !== ReactionStatus.ready) {
50
+ renderTime.current = Date.now();
51
+ }
52
+
53
+ useEffect(() => {
54
+ if (status === ReactionStatus.notLoaded) {
55
+ loadReaction();
56
+ }
57
+ }, [status, loadReaction]);
58
+ useEffect(() => {
59
+ if (status === ReactionStatus.ready && renderTime.current) {
60
+ Analytics.createAndFireSafe(createAnalyticsEvent, Analytics.createReactionsRenderedEvent, renderTime.current);
61
+ renderTime.current = undefined;
62
+ }
63
+ }, [createAnalyticsEvent, status]);
64
+ /**
65
+ * Get content of the tooltip
66
+ */
67
+
68
+ const getTooltip = () => {
69
+ switch (status) {
70
+ case ReactionStatus.error:
71
+ return errorMessage || jsx(FormattedMessage, i18n.messages.unexpectedError);
72
+
73
+ case ReactionStatus.loading:
74
+ case ReactionStatus.notLoaded:
75
+ return jsx(FormattedMessage, i18n.messages.loadingReactions);
76
+
77
+ default:
78
+ return undefined;
79
+ }
80
+ };
81
+
82
+ const handleReactionMouseEnter = summary => {
83
+ if (onReactionHover) {
84
+ onReactionHover(summary.emojiId);
85
+ }
86
+ };
87
+
88
+ const handlePickerOpen = useCallback(() => {
89
+ openTime.current = Date.now();
90
+ Analytics.createAndFireSafe(createAnalyticsEvent, Analytics.createPickerButtonClickedEvent, reactions.length);
91
+ }, [createAnalyticsEvent, reactions]);
92
+ const handleOnCancel = useCallback(() => {
93
+ Analytics.createAndFireSafe(createAnalyticsEvent, Analytics.createPickerCancelledEvent, openTime.current);
94
+ openTime.current = undefined;
95
+ }, [createAnalyticsEvent]);
96
+ const handleOnMore = useCallback(() => {
97
+ Analytics.createAndFireSafe(createAnalyticsEvent, Analytics.createPickerMoreClickedEvent, openTime.current);
98
+ }, [createAnalyticsEvent]);
99
+ const handleOnSelection = useCallback((emojiId, source) => {
100
+ Analytics.createAndFireSafe(createAnalyticsEvent, Analytics.createReactionSelectionEvent, source, emojiId, reactions.find(reaction => reaction.emojiId === emojiId), openTime.current);
101
+ openTime.current = undefined;
102
+ onSelection(emojiId);
103
+ }, [createAnalyticsEvent, onSelection, reactions]);
104
+ /**
105
+ * Get the reactions that we want to render are any reactions with a count greater than zero as well as any default emoji not already shown
106
+ */
107
+
108
+ const memorizedReactions = useMemo(() => {
109
+ //
110
+
111
+ /**
112
+ * If reactions not empty, don't show quick reactions Pre defined emoji or if its empty => return the current list of reactions
113
+ */
114
+ if (reactions.length > 0 || !quickReactionEmojiIds) {
115
+ return reactions;
116
+ } // add any missing default reactions
117
+
118
+
119
+ const items = quickReactionEmojiIds.filter(emojiId => !reactions.some(reaction => reaction.emojiId === emojiId)).map(emojiId => {
120
+ return {
121
+ ari,
122
+ containerAri,
123
+ emojiId,
124
+ count: 0,
125
+ reacted: false
126
+ };
127
+ });
128
+ return reactions.concat(items);
129
+ }, [ari, containerAri, quickReactionEmojiIds, reactions]);
130
+ return jsx("div", {
131
+ css: styles.wrapperStyle,
132
+ "data-testid": RENDER_REACTIONS_TESTID
133
+ }, memorizedReactions.map(reaction => jsx(Reaction, {
134
+ key: reaction.emojiId,
135
+ css: styles.reactionStyle,
136
+ reaction: reaction,
137
+ emojiProvider: emojiProvider,
138
+ onClick: onReactionClick,
139
+ onMouseEnter: handleReactionMouseEnter,
140
+ flash: flash[reaction.emojiId]
141
+ })), jsx(Tooltip, {
142
+ testId: RENDER_TOOLTIP_TESTID,
143
+ content: getTooltip()
144
+ }, jsx(ReactionPicker, {
145
+ css: styles.reactionStyle,
146
+ emojiProvider: emojiProvider,
147
+ miniMode: true,
148
+ allowAllEmojis: allowAllEmojis,
149
+ pickerQuickReactionEmojiIds: pickerQuickReactionEmojiIds,
150
+ disabled: status !== ReactionStatus.ready,
151
+ onSelection: handleOnSelection,
152
+ onOpen: handlePickerOpen,
153
+ onCancel: handleOnCancel,
154
+ onShowMore: handleOnMore
155
+ })));
156
+ });
@@ -0,0 +1 @@
1
+ export { Reactions, RENDER_REACTIONS_TESTID, RENDER_TOOLTIP_TESTID } from './Reactions';
@@ -0,0 +1,19 @@
1
+ /** @jsx jsx */
2
+ import { css } from '@emotion/core';
3
+ export const reactionStyle = css({
4
+ display: 'inline-block',
5
+ // top margin of 2px to allow spacing between rows when wrapped (paired with top margin in reactionsStyle)
6
+ margin: '2px 4px 0 4px'
7
+ });
8
+ export const wrapperStyle = css({
9
+ display: 'flex',
10
+ flexWrap: 'wrap',
11
+ position: 'relative',
12
+ alignItems: 'center',
13
+ borderRadius: '15px',
14
+ // To allow to row spacing of 2px on wrap, and 0px on first row
15
+ marginTop: '-2px',
16
+ '> :first-of-type > :first-child': {
17
+ marginLeft: 0
18
+ }
19
+ });
@@ -0,0 +1,98 @@
1
+ /** @jsx jsx */
2
+ import React, { useEffect, useRef, useState } from 'react';
3
+ import { jsx } from '@emotion/core';
4
+ import Tooltip from '@atlaskit/tooltip';
5
+ import { constants } from '../../shared';
6
+ import { EmojiButton } from '../EmojiButton';
7
+ import { ShowMore } from '../ShowMore';
8
+ import * as styles from './styles';
9
+ /**
10
+ * Test id for wrapper Selector div
11
+ */
12
+
13
+ export const RENDER_SELECTOR_TESTID = 'render-selector';
14
+
15
+ /**
16
+ * Reactions picker panel part of the <ReactionPicker /> component
17
+ */
18
+ export const Selector = ({
19
+ emojiProvider,
20
+ onMoreClick,
21
+ onSelection,
22
+ showMore,
23
+ pickerQuickReactionEmojiIds = constants.DefaultReactions
24
+ }) => {
25
+ const [selection, setSelection] = useState();
26
+ /**
27
+ * Collection of global DOM timeout ids when user selects emojis for animation display
28
+ */
29
+
30
+ const timeoutIds = useRef([]);
31
+ /**
32
+ * Clear the timeouts for the selected emojis when the component unmounts
33
+ */
34
+
35
+ useEffect(() => {
36
+ const timeoutValues = timeoutIds.current;
37
+ return function cleanup() {
38
+ timeoutValues.forEach(clearTimeout);
39
+ };
40
+ }, []);
41
+ /**
42
+ * event handler when an emoji gets selected
43
+ * @param item selected emoji
44
+ * @param description depth detail of the selected emoji
45
+ * @param event Dom event data
46
+ */
47
+
48
+ const onSelected = (item, description, event) => {
49
+ timeoutIds.current.push(window.setTimeout(() => {
50
+ onSelection(item, description, event);
51
+ }, 250));
52
+ setSelection(item);
53
+ };
54
+ /**
55
+ * custom css styling for the emoji icon
56
+ * @param index location of the emoji in the rendered list of items
57
+ */
58
+
59
+
60
+ const emojiStyleAnimation = index => ({
61
+ animationDelay: `${index * 50}ms`
62
+ });
63
+ /**
64
+ * Render the default emoji icon
65
+ * @param emoji emoji item
66
+ * @param index location of the emoji in the array
67
+ */
68
+
69
+
70
+ const renderEmoji = (emoji, index) => {
71
+ var _emoji$id;
72
+
73
+ return jsx("div", {
74
+ key: (_emoji$id = emoji.id) !== null && _emoji$id !== void 0 ? _emoji$id : emoji.shortName,
75
+ className: emoji === selection ? 'selected' : undefined,
76
+ css: [styles.emojiStyle, styles.revealStyle],
77
+ style: emojiStyleAnimation(index),
78
+ "data-testid": RENDER_SELECTOR_TESTID
79
+ }, jsx(Tooltip, {
80
+ content: emoji.shortName
81
+ }, jsx(EmojiButton, {
82
+ emojiId: emoji,
83
+ emojiProvider: emojiProvider,
84
+ onClick: onSelected
85
+ })));
86
+ };
87
+
88
+ return jsx("div", {
89
+ css: styles.selectorStyle
90
+ }, pickerQuickReactionEmojiIds ? pickerQuickReactionEmojiIds.map(renderEmoji) : null, showMore ? jsx(ShowMore, {
91
+ key: "more",
92
+ buttonStyle: styles.revealStyle,
93
+ style: {
94
+ button: emojiStyleAnimation(constants.DefaultReactions.length)
95
+ },
96
+ onClick: onMoreClick
97
+ }) : null);
98
+ };
@@ -0,0 +1,3 @@
1
+ export { Selector, RENDER_SELECTOR_TESTID } from './Selector';
2
+ import * as _styles from './styles';
3
+ export { _styles as styles };
@@ -0,0 +1,39 @@
1
+ /** @jsx jsx */
2
+ import { css, keyframes } from '@emotion/core';
3
+ export const selectorStyle = css({
4
+ boxSizing: 'border-box',
5
+ display: 'flex',
6
+ padding: 0
7
+ });
8
+ export const emojiStyle = css({
9
+ display: 'inline-block',
10
+ opacity: 0,
11
+ '&.selected': {
12
+ transition: 'transform 200ms ease-in-out ',
13
+ transform: 'translateY(-48px) scale(2.667)'
14
+ }
15
+ });
16
+ export const revealAnimation = keyframes({
17
+ '0%': {
18
+ opacity: 1,
19
+ transform: 'scale(0.5)'
20
+ },
21
+ '75%': {
22
+ transform: 'scale(1.25)'
23
+ },
24
+ '100%': {
25
+ opacity: 1,
26
+ transform: 'scale(1)'
27
+ }
28
+ });
29
+ export const revealStyle = css({
30
+ animation: `${revealAnimation} 150ms ease-in-out forwards`
31
+ });
32
+ /**
33
+ * custom css styling for the emoji icon
34
+ * @param index location of the emoji in the rendered list of items
35
+ */
36
+
37
+ export const emojiStyleAnimation = index => ({
38
+ animationDelay: `${index * 50}ms`
39
+ });
@@ -0,0 +1,43 @@
1
+ /** @jsx jsx */
2
+ import React from 'react';
3
+ import { jsx } from '@emotion/core';
4
+ import { FormattedMessage } from 'react-intl-next';
5
+ import EditorMoreIcon from '@atlaskit/icon/glyph/editor/more';
6
+ import Tooltip from '@atlaskit/tooltip';
7
+ import { i18n } from '../../shared';
8
+ import * as styles from './styles';
9
+ /**
10
+ * Test id for wrapper button
11
+ */
12
+
13
+ export const RENDER_SHOWMORE_TESTID = 'show-more-button';
14
+
15
+ /**
16
+ * Show more custom emojis button
17
+ */
18
+ export const ShowMore = ({
19
+ onClick,
20
+ style = {},
21
+ className = {},
22
+ buttonStyle
23
+ }) => {
24
+ return jsx("div", {
25
+ className: className.container,
26
+ css: styles.moreEmojiContainerStyle,
27
+ style: style.container
28
+ }, jsx("div", {
29
+ css: styles.separatorStyle
30
+ }), jsx(FormattedMessage, i18n.messages.moreEmoji, message => jsx(Tooltip, {
31
+ content: message
32
+ }, jsx("button", {
33
+ className: className.button,
34
+ css: [styles.moreButtonStyle, buttonStyle],
35
+ title: i18n.messages.moreEmoji.defaultMessage,
36
+ type: "button",
37
+ style: style.button,
38
+ onMouseDown: onClick,
39
+ "data-testid": RENDER_SHOWMORE_TESTID
40
+ }, jsx(EditorMoreIcon, {
41
+ label: "More"
42
+ })))));
43
+ };
@@ -0,0 +1 @@
1
+ export { ShowMore, RENDER_SHOWMORE_TESTID } from './ShowMore';
@@ -0,0 +1,30 @@
1
+ /** @jsx jsx */
2
+ import { css } from '@emotion/core';
3
+ import { borderRadius } from '@atlaskit/theme/constants';
4
+ import { N30A } from '@atlaskit/theme/colors';
5
+ import { token } from '@atlaskit/tokens';
6
+ export const moreEmojiContainerStyle = css({
7
+ display: 'flex'
8
+ });
9
+ export const moreButtonStyle = css({
10
+ opacity: 0,
11
+ outline: 'none',
12
+ backgroundColor: 'transparent',
13
+ border: 0,
14
+ borderRadius: `${borderRadius()}px`,
15
+ cursor: 'pointer',
16
+ margin: '4px 4px 4px 0',
17
+ padding: '4px',
18
+ width: '38px',
19
+ verticalAlign: 'top',
20
+ '&:hover': {
21
+ backgroundColor: token('color.background.neutral.subtle.hovered', N30A)
22
+ }
23
+ });
24
+ export const separatorStyle = css({
25
+ backgroundColor: token('color.border', N30A),
26
+ margin: '8px 8px 8px 4px',
27
+ width: '1px',
28
+ height: '60%',
29
+ display: 'inline-block'
30
+ });
@@ -1,38 +1,33 @@
1
1
  /** @jsx jsx */
2
- import { jsx, css } from '@emotion/core';
2
+ import React from 'react';
3
+ import { jsx } from '@emotion/core';
3
4
  import Button from '@atlaskit/button/standard-button';
4
5
  import EmojiAddIcon from '@atlaskit/icon/glyph/emoji-add';
5
- import React from 'react';
6
- const triggerStyle = css({
7
- width: '32px',
8
- height: '32px',
9
- display: 'flex',
10
- justifyContent: 'center',
11
- alignItems: 'center',
12
- lineHeight: '16px',
13
- '&.miniMode': {
14
- width: '24px',
15
- height: '24px'
16
- }
17
- });
6
+ import * as styles from './styles';
7
+
8
+ /**
9
+ * Render a button to open the reactions picker
10
+ */
18
11
  export const Trigger = /*#__PURE__*/React.forwardRef((props, ref) => {
19
12
  const {
20
13
  miniMode,
21
14
  disabled = false
22
15
  } = props;
23
16
 
24
- const handleMouseDown = () => {
25
- if (props.onClick) {
26
- props.onClick();
17
+ const handleMouseDown = (e, analyticsEvent) => {
18
+ if (props.onClick && !props.disabled) {
19
+ props.onClick(e, analyticsEvent);
27
20
  }
28
21
  };
29
22
 
30
23
  return jsx(Button, {
31
- className: miniMode ? 'miniMode' : '',
32
- css: triggerStyle,
24
+ css: styles.triggerStyle({
25
+ miniMode,
26
+ disabled
27
+ }),
33
28
  appearance: "subtle",
34
29
  onClick: handleMouseDown,
35
- isDisabled: disabled,
30
+ "aria-disabled": disabled,
36
31
  iconBefore: jsx(EmojiAddIcon, {
37
32
  size: "small",
38
33
  label: "Add reaction"
@@ -0,0 +1 @@
1
+ export { Trigger } from './Trigger';
@@ -0,0 +1,24 @@
1
+ /** @jsx jsx */
2
+ import { css } from '@emotion/core';
3
+ import { token } from '@atlaskit/tokens';
4
+ import { N70 } from '@atlaskit/theme/colors';
5
+ export const DISABLED_BUTTON_COLOR = `${token('color.text.disabled', N70)} !important`;
6
+ export const triggerStyle = ({
7
+ miniMode = false,
8
+ disabled = false
9
+ }) => css({
10
+ width: '32px',
11
+ height: '32px',
12
+ display: 'flex',
13
+ justifyContent: 'center',
14
+ alignItems: 'center',
15
+ lineHeight: '16px',
16
+ ...(miniMode && {
17
+ width: '24px',
18
+ height: '24px'
19
+ }),
20
+ ...(disabled && {
21
+ color: DISABLED_BUTTON_COLOR,
22
+ cursor: 'not-allowed'
23
+ })
24
+ });
@@ -1,4 +1,8 @@
1
1
  import React from 'react';
2
+
3
+ /**
4
+ * Error boundary wrapper to notify "failure" for UFO events of components when there was a re-rendering exception caught inside the `componentDidCatch` event handler
5
+ */
2
6
  export class UfoErrorBoundary extends React.Component {
3
7
  componentDidCatch(error, errorInfo) {
4
8
  for (const exp of this.props.experiences) {
@@ -0,0 +1 @@
1
+ export { UfoErrorBoundary } from './UfoErrorBoundary';
@@ -0,0 +1,27 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
2
+ import React from 'react';
3
+ import { ReactionPicker, UfoErrorBoundary } from '../../components';
4
+ import { UFO } from '../../analytics';
5
+
6
+ /**
7
+ * Reaction Picker component
8
+ */
9
+ export const ConnectedReactionPicker = props => {
10
+ /**
11
+ * callback event when an emoji item is selected
12
+ * @param emojiId unique id for the reaction emoji
13
+ */
14
+ const onSelection = emojiId => {
15
+ (async () => {
16
+ const _store = await Promise.resolve(props.store);
17
+
18
+ _store.addReaction(props.containerAri, props.ari, emojiId);
19
+ })();
20
+ };
21
+
22
+ return /*#__PURE__*/React.createElement(UfoErrorBoundary, {
23
+ experiences: [UFO.PickerRender]
24
+ }, /*#__PURE__*/React.createElement(ReactionPicker, _extends({}, props, {
25
+ onSelection: onSelection
26
+ })));
27
+ };
@@ -0,0 +1 @@
1
+ export { ConnectedReactionPicker } from './ConnectedReactionPicker';