@atlaskit/teams-public 2.7.0 → 2.9.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 (269) hide show
  1. package/CHANGELOG.md +87 -0
  2. package/confluence-icon/package.json +9 -0
  3. package/dist/cjs/common/hooks/useSpaceInviteScheduler.js +2 -2
  4. package/dist/cjs/common/ui/container-icon/index.js +9 -9
  5. package/dist/cjs/common/ui/loom-avatar/getAvatarText.js +9 -0
  6. package/dist/cjs/common/ui/loom-avatar/hash.js +13 -0
  7. package/dist/cjs/common/ui/loom-avatar/main.js +9 -7
  8. package/dist/cjs/common/ui/loom-avatar/pickContainerColor.js +19 -0
  9. package/dist/cjs/common/ui/loom-avatar/pickTextColor.js +19 -0
  10. package/dist/cjs/common/ui/team-link-card-actions/index.js +12 -12
  11. package/dist/cjs/common/utils/analytics.js +2 -2
  12. package/dist/cjs/common/utils/container-to-new-web-link.js +13 -0
  13. package/dist/cjs/common/utils/get-container-properties.js +6 -6
  14. package/dist/cjs/common/utils/{get-link-domain.js → get-domain-from-link-uri.js} +4 -14
  15. package/dist/cjs/common/utils/get-is-experiment-enabled.js +3 -3
  16. package/dist/cjs/common/utils/is-new-team-web-link.js +9 -0
  17. package/dist/cjs/common/utils/team-web-link-converters.js +1 -34
  18. package/dist/cjs/common/utils/unsafe-get-domain-from-url.js +16 -0
  19. package/dist/cjs/common/utils/web-link-to-container.js +15 -0
  20. package/dist/cjs/common/utils/web-links-to-containers.js +16 -0
  21. package/dist/cjs/controllers/hooks/use-refresh-containers-on-container-created/index.js +1 -1
  22. package/dist/cjs/controllers/hooks/use-team-containers/actions-2.js +488 -0
  23. package/dist/cjs/controllers/hooks/use-team-containers/actions.js +383 -0
  24. package/dist/cjs/controllers/hooks/use-team-containers/connected-teams.js +5 -0
  25. package/dist/cjs/controllers/hooks/use-team-containers/containers-deep-equal.js +23 -0
  26. package/dist/cjs/controllers/hooks/use-team-containers/containers-equal.js +29 -0
  27. package/dist/cjs/controllers/hooks/use-team-containers/fire-analytics-props.js +1 -0
  28. package/dist/cjs/controllers/hooks/use-team-containers/get-error-details.js +14 -0
  29. package/dist/cjs/controllers/hooks/use-team-containers/get-initial-team-state.js +18 -0
  30. package/dist/cjs/controllers/hooks/use-team-containers/index.js +17 -465
  31. package/dist/cjs/controllers/hooks/use-team-containers/initial-connected-teams-state.js +14 -0
  32. package/dist/cjs/controllers/hooks/use-team-containers/multi-team.js +4 -634
  33. package/dist/cjs/controllers/hooks/use-team-containers/normalize-error.js +12 -0
  34. package/dist/cjs/controllers/hooks/use-team-containers/state.js +5 -0
  35. package/dist/cjs/controllers/hooks/use-team-containers/store.js +23 -0
  36. package/dist/cjs/controllers/hooks/use-team-containers/team-containers-state.js +5 -0
  37. package/dist/cjs/controllers/hooks/use-team-containers/team-state.js +5 -0
  38. package/dist/cjs/controllers/hooks/use-team-containers/use-connected-teams-2.js +56 -0
  39. package/dist/cjs/controllers/hooks/use-team-containers/use-connected-teams.js +36 -0
  40. package/dist/cjs/controllers/hooks/use-team-containers/use-team-containers-2.js +86 -0
  41. package/dist/cjs/controllers/hooks/use-team-containers/use-team-containers-hook.js +9 -0
  42. package/dist/cjs/controllers/hooks/use-team-containers/use-team-containers.js +55 -0
  43. package/dist/cjs/controllers/hooks/use-team-links-and-containers/index.js +9 -7
  44. package/dist/cjs/controllers/hooks/use-team-web-links/actions.js +328 -0
  45. package/dist/cjs/controllers/hooks/use-team-web-links/index.js +17 -359
  46. package/dist/cjs/controllers/hooks/use-team-web-links/initial-state.js +19 -0
  47. package/dist/cjs/controllers/hooks/use-team-web-links/store.js +14 -0
  48. package/dist/cjs/controllers/hooks/use-team-web-links/use-team-web-links-actions.js +21 -0
  49. package/dist/cjs/controllers/hooks/use-team-web-links/use-team-web-links.js +19 -0
  50. package/dist/cjs/controllers/index.js +6 -5
  51. package/dist/cjs/controllers/product-permission/getProductPermissionRequestBody.js +28 -0
  52. package/dist/cjs/controllers/product-permission/hasProductPermission.js +23 -0
  53. package/dist/cjs/controllers/product-permission/main.js +4 -3
  54. package/dist/cjs/controllers/product-permission/transformPermissions.js +22 -0
  55. package/dist/cjs/controllers/product-permission/utils.js +19 -51
  56. package/dist/cjs/index.js +8 -6
  57. package/dist/cjs/next/ui/team-containers/team-link-card/index.js +4 -4
  58. package/dist/cjs/ui/team-containers/add-container-card/{index.js → AddContainerCard.js} +8 -52
  59. package/dist/cjs/ui/team-containers/add-container-card/getAddContainerCards.js +54 -0
  60. package/dist/cjs/ui/team-containers/disconnect-dialog/index.js +5 -5
  61. package/dist/cjs/ui/team-containers/main.compiled.css +1 -0
  62. package/dist/cjs/ui/team-containers/main.js +34 -29
  63. package/dist/cjs/ui/team-containers/no-product-access-empty-state/index.js +1 -1
  64. package/dist/cjs/ui/team-containers/team-link-card/index.js +19 -17
  65. package/dist/es2019/common/assets/index.js +10 -0
  66. package/dist/es2019/common/hooks/useSpaceInviteScheduler.js +1 -1
  67. package/dist/es2019/common/ui/container-icon/index.js +5 -5
  68. package/dist/es2019/common/ui/loom-avatar/getAvatarText.js +3 -0
  69. package/dist/es2019/common/ui/loom-avatar/hash.js +6 -0
  70. package/dist/es2019/common/ui/loom-avatar/index.js +4 -0
  71. package/dist/es2019/common/ui/loom-avatar/main.js +5 -3
  72. package/dist/es2019/common/ui/loom-avatar/pickContainerColor.js +13 -0
  73. package/dist/es2019/common/ui/loom-avatar/pickTextColor.js +13 -0
  74. package/dist/es2019/common/ui/team-link-card-actions/index.js +6 -4
  75. package/dist/es2019/common/utils/analytics.js +1 -1
  76. package/dist/es2019/common/utils/container-to-new-web-link.js +7 -0
  77. package/dist/es2019/common/utils/get-container-properties.js +2 -2
  78. package/dist/es2019/common/utils/{get-link-domain.js → get-domain-from-link-uri.js} +2 -11
  79. package/dist/es2019/common/utils/get-is-experiment-enabled.js +1 -1
  80. package/dist/es2019/common/utils/is-new-team-web-link.js +3 -0
  81. package/dist/es2019/common/utils/team-web-link-converters.js +0 -25
  82. package/dist/es2019/common/utils/unsafe-get-domain-from-url.js +10 -0
  83. package/dist/es2019/common/utils/web-link-to-container.js +9 -0
  84. package/dist/es2019/common/utils/web-links-to-containers.js +7 -0
  85. package/dist/es2019/controllers/hooks/use-refresh-containers-on-container-created/index.js +1 -1
  86. package/dist/es2019/controllers/hooks/use-team-containers/actions-2.js +413 -0
  87. package/dist/es2019/controllers/hooks/use-team-containers/actions.js +260 -0
  88. package/dist/es2019/controllers/hooks/use-team-containers/connected-teams.js +1 -0
  89. package/dist/es2019/controllers/hooks/use-team-containers/containers-deep-equal.js +13 -0
  90. package/dist/es2019/controllers/hooks/use-team-containers/containers-equal.js +17 -0
  91. package/dist/es2019/controllers/hooks/use-team-containers/fire-analytics-props.js +0 -0
  92. package/dist/es2019/controllers/hooks/use-team-containers/get-error-details.js +8 -0
  93. package/dist/es2019/controllers/hooks/use-team-containers/get-initial-team-state.js +10 -0
  94. package/dist/es2019/controllers/hooks/use-team-containers/index.js +13 -329
  95. package/dist/es2019/controllers/hooks/use-team-containers/initial-connected-teams-state.js +8 -0
  96. package/dist/es2019/controllers/hooks/use-team-containers/multi-team.js +2 -541
  97. package/dist/es2019/controllers/hooks/use-team-containers/normalize-error.js +6 -0
  98. package/dist/es2019/controllers/hooks/use-team-containers/state.js +1 -0
  99. package/dist/es2019/controllers/hooks/use-team-containers/store.js +17 -0
  100. package/dist/es2019/controllers/hooks/use-team-containers/team-containers-state.js +1 -0
  101. package/dist/es2019/controllers/hooks/use-team-containers/team-state.js +1 -0
  102. package/dist/es2019/controllers/hooks/use-team-containers/use-connected-teams-2.js +44 -0
  103. package/dist/es2019/controllers/hooks/use-team-containers/use-connected-teams.js +20 -0
  104. package/dist/es2019/controllers/hooks/use-team-containers/use-team-containers-2.js +59 -0
  105. package/dist/es2019/controllers/hooks/use-team-containers/use-team-containers-hook.js +3 -0
  106. package/dist/es2019/controllers/hooks/use-team-containers/use-team-containers.js +28 -0
  107. package/dist/es2019/controllers/hooks/use-team-links-and-containers/index.js +5 -3
  108. package/dist/es2019/controllers/hooks/use-team-web-links/actions.js +177 -0
  109. package/dist/es2019/controllers/hooks/use-team-web-links/index.js +13 -217
  110. package/dist/es2019/controllers/hooks/use-team-web-links/initial-state.js +13 -0
  111. package/dist/es2019/controllers/hooks/use-team-web-links/store.js +8 -0
  112. package/dist/es2019/controllers/hooks/use-team-web-links/use-team-web-links-actions.js +15 -0
  113. package/dist/es2019/controllers/hooks/use-team-web-links/use-team-web-links.js +13 -0
  114. package/dist/es2019/controllers/index.js +17 -3
  115. package/dist/es2019/controllers/product-permission/getProductPermissionRequestBody.js +19 -0
  116. package/dist/es2019/controllers/product-permission/hasProductPermission.js +15 -0
  117. package/dist/es2019/controllers/product-permission/main.js +2 -1
  118. package/dist/es2019/controllers/product-permission/transformPermissions.js +15 -0
  119. package/dist/es2019/controllers/product-permission/utils.js +11 -48
  120. package/dist/es2019/i18n/index.js +88 -0
  121. package/dist/es2019/index.js +5 -3
  122. package/dist/es2019/next/index.js +10 -0
  123. package/dist/es2019/next/ui/team-containers/team-link-card/index.js +2 -2
  124. package/dist/es2019/ui/team-containers/add-container-card/{index.js → AddContainerCard.js} +4 -41
  125. package/dist/es2019/ui/team-containers/add-container-card/getAddContainerCards.js +40 -0
  126. package/dist/es2019/ui/team-containers/disconnect-dialog/index.js +2 -2
  127. package/dist/es2019/ui/team-containers/index.js +12 -1
  128. package/dist/es2019/ui/team-containers/main.compiled.css +1 -0
  129. package/dist/es2019/ui/team-containers/main.js +17 -11
  130. package/dist/es2019/ui/team-containers/no-product-access-empty-state/index.js +1 -1
  131. package/dist/es2019/ui/team-containers/team-link-card/index.js +9 -7
  132. package/dist/esm/common/assets/index.js +10 -0
  133. package/dist/esm/common/hooks/useSpaceInviteScheduler.js +1 -1
  134. package/dist/esm/common/ui/container-icon/index.js +5 -5
  135. package/dist/esm/common/ui/loom-avatar/getAvatarText.js +3 -0
  136. package/dist/esm/common/ui/loom-avatar/hash.js +6 -0
  137. package/dist/esm/common/ui/loom-avatar/index.js +4 -0
  138. package/dist/esm/common/ui/loom-avatar/main.js +5 -3
  139. package/dist/esm/common/ui/loom-avatar/pickContainerColor.js +13 -0
  140. package/dist/esm/common/ui/loom-avatar/pickTextColor.js +13 -0
  141. package/dist/esm/common/ui/team-link-card-actions/index.js +6 -4
  142. package/dist/esm/common/utils/analytics.js +1 -1
  143. package/dist/esm/common/utils/container-to-new-web-link.js +7 -0
  144. package/dist/esm/common/utils/get-container-properties.js +2 -2
  145. package/dist/esm/common/utils/{get-link-domain.js → get-domain-from-link-uri.js} +2 -11
  146. package/dist/esm/common/utils/get-is-experiment-enabled.js +1 -1
  147. package/dist/esm/common/utils/is-new-team-web-link.js +3 -0
  148. package/dist/esm/common/utils/team-web-link-converters.js +0 -28
  149. package/dist/esm/common/utils/unsafe-get-domain-from-url.js +10 -0
  150. package/dist/esm/common/utils/web-link-to-container.js +9 -0
  151. package/dist/esm/common/utils/web-links-to-containers.js +10 -0
  152. package/dist/esm/controllers/hooks/use-refresh-containers-on-container-created/index.js +1 -1
  153. package/dist/esm/controllers/hooks/use-team-containers/actions-2.js +481 -0
  154. package/dist/esm/controllers/hooks/use-team-containers/actions.js +376 -0
  155. package/dist/esm/controllers/hooks/use-team-containers/connected-teams.js +1 -0
  156. package/dist/esm/controllers/hooks/use-team-containers/containers-deep-equal.js +16 -0
  157. package/dist/esm/controllers/hooks/use-team-containers/containers-equal.js +22 -0
  158. package/dist/esm/controllers/hooks/use-team-containers/fire-analytics-props.js +0 -0
  159. package/dist/esm/controllers/hooks/use-team-containers/get-error-details.js +8 -0
  160. package/dist/esm/controllers/hooks/use-team-containers/get-initial-team-state.js +12 -0
  161. package/dist/esm/controllers/hooks/use-team-containers/index.js +13 -467
  162. package/dist/esm/controllers/hooks/use-team-containers/initial-connected-teams-state.js +8 -0
  163. package/dist/esm/controllers/hooks/use-team-containers/multi-team.js +2 -631
  164. package/dist/esm/controllers/hooks/use-team-containers/normalize-error.js +6 -0
  165. package/dist/esm/controllers/hooks/use-team-containers/state.js +1 -0
  166. package/dist/esm/controllers/hooks/use-team-containers/store.js +17 -0
  167. package/dist/esm/controllers/hooks/use-team-containers/team-containers-state.js +1 -0
  168. package/dist/esm/controllers/hooks/use-team-containers/team-state.js +1 -0
  169. package/dist/esm/controllers/hooks/use-team-containers/use-connected-teams-2.js +49 -0
  170. package/dist/esm/controllers/hooks/use-team-containers/use-connected-teams.js +29 -0
  171. package/dist/esm/controllers/hooks/use-team-containers/use-team-containers-2.js +79 -0
  172. package/dist/esm/controllers/hooks/use-team-containers/use-team-containers-hook.js +3 -0
  173. package/dist/esm/controllers/hooks/use-team-containers/use-team-containers.js +48 -0
  174. package/dist/esm/controllers/hooks/use-team-links-and-containers/index.js +5 -3
  175. package/dist/esm/controllers/hooks/use-team-web-links/actions.js +321 -0
  176. package/dist/esm/controllers/hooks/use-team-web-links/index.js +13 -361
  177. package/dist/esm/controllers/hooks/use-team-web-links/initial-state.js +13 -0
  178. package/dist/esm/controllers/hooks/use-team-web-links/store.js +8 -0
  179. package/dist/esm/controllers/hooks/use-team-web-links/use-team-web-links-actions.js +15 -0
  180. package/dist/esm/controllers/hooks/use-team-web-links/use-team-web-links.js +13 -0
  181. package/dist/esm/controllers/index.js +17 -3
  182. package/dist/esm/controllers/product-permission/getProductPermissionRequestBody.js +21 -0
  183. package/dist/esm/controllers/product-permission/hasProductPermission.js +17 -0
  184. package/dist/esm/controllers/product-permission/main.js +2 -1
  185. package/dist/esm/controllers/product-permission/transformPermissions.js +15 -0
  186. package/dist/esm/controllers/product-permission/utils.js +11 -49
  187. package/dist/esm/i18n/index.js +88 -0
  188. package/dist/esm/index.js +5 -3
  189. package/dist/esm/next/index.js +10 -0
  190. package/dist/esm/next/ui/team-containers/team-link-card/index.js +2 -2
  191. package/dist/esm/ui/team-containers/add-container-card/{index.js → AddContainerCard.js} +4 -48
  192. package/dist/esm/ui/team-containers/add-container-card/getAddContainerCards.js +47 -0
  193. package/dist/esm/ui/team-containers/disconnect-dialog/index.js +2 -2
  194. package/dist/esm/ui/team-containers/index.js +12 -1
  195. package/dist/esm/ui/team-containers/main.compiled.css +1 -0
  196. package/dist/esm/ui/team-containers/main.js +17 -11
  197. package/dist/esm/ui/team-containers/no-product-access-empty-state/index.js +1 -1
  198. package/dist/esm/ui/team-containers/team-link-card/index.js +9 -7
  199. package/dist/types/common/assets/index.d.ts +9 -0
  200. package/dist/types/common/ui/loom-avatar/getAvatarText.d.ts +1 -0
  201. package/dist/types/common/ui/loom-avatar/hash.d.ts +1 -0
  202. package/dist/types/common/ui/loom-avatar/index.d.ts +3 -0
  203. package/dist/types/common/ui/loom-avatar/pickContainerColor.d.ts +8 -0
  204. package/dist/types/common/ui/loom-avatar/pickTextColor.d.ts +8 -0
  205. package/dist/types/common/utils/container-to-new-web-link.d.ts +2 -0
  206. package/dist/types/common/utils/{get-link-domain.d.ts → get-domain-from-link-uri.d.ts} +0 -7
  207. package/dist/types/common/utils/is-new-team-web-link.d.ts +2 -0
  208. package/dist/types/common/utils/team-web-link-converters.d.ts +0 -5
  209. package/dist/types/common/utils/unsafe-get-domain-from-url.d.ts +7 -0
  210. package/dist/types/common/utils/web-link-to-container.d.ts +3 -0
  211. package/dist/types/common/utils/web-links-to-containers.d.ts +3 -0
  212. package/dist/types/controllers/hooks/use-team-containers/actions-2.d.ts +13 -0
  213. package/dist/types/controllers/hooks/use-team-containers/actions.d.ts +12 -0
  214. package/dist/types/controllers/hooks/use-team-containers/connected-teams.d.ts +9 -0
  215. package/dist/types/controllers/hooks/use-team-containers/containers-deep-equal.d.ts +12 -0
  216. package/dist/types/controllers/hooks/use-team-containers/containers-equal.d.ts +11 -0
  217. package/dist/types/controllers/hooks/use-team-containers/fire-analytics-props.d.ts +7 -0
  218. package/dist/types/controllers/hooks/use-team-containers/get-error-details.d.ts +4 -0
  219. package/dist/types/controllers/hooks/use-team-containers/get-initial-team-state.d.ts +2 -0
  220. package/dist/types/controllers/hooks/use-team-containers/index.d.ts +12 -59
  221. package/dist/types/controllers/hooks/use-team-containers/initial-connected-teams-state.d.ts +2 -0
  222. package/dist/types/controllers/hooks/use-team-containers/multi-team.d.ts +3 -53
  223. package/dist/types/controllers/hooks/use-team-containers/normalize-error.d.ts +1 -0
  224. package/dist/types/controllers/hooks/use-team-containers/state.d.ts +6 -0
  225. package/dist/types/controllers/hooks/use-team-containers/store.d.ts +4 -0
  226. package/dist/types/controllers/hooks/use-team-containers/team-containers-state.d.ts +16 -0
  227. package/dist/types/controllers/hooks/use-team-containers/team-state.d.ts +11 -0
  228. package/dist/types/controllers/hooks/use-team-containers/use-connected-teams-2.d.ts +11 -0
  229. package/dist/types/controllers/hooks/use-team-containers/use-connected-teams.d.ts +11 -0
  230. package/dist/types/controllers/hooks/use-team-containers/use-team-containers-2.d.ts +15 -0
  231. package/dist/types/controllers/hooks/use-team-containers/use-team-containers-hook.d.ts +12 -0
  232. package/dist/types/controllers/hooks/use-team-containers/use-team-containers.d.ts +21 -0
  233. package/dist/types/controllers/hooks/use-team-web-links/actions.d.ts +12 -0
  234. package/dist/types/controllers/hooks/use-team-web-links/index.d.ts +12 -165
  235. package/dist/types/controllers/hooks/use-team-web-links/initial-state.d.ts +2 -0
  236. package/dist/types/controllers/hooks/use-team-web-links/store.d.ts +4 -0
  237. package/dist/types/controllers/hooks/use-team-web-links/use-team-web-links-actions.d.ts +147 -0
  238. package/dist/types/controllers/hooks/use-team-web-links/use-team-web-links.d.ts +13 -0
  239. package/dist/types/controllers/index.d.ts +16 -3
  240. package/dist/types/controllers/product-permission/getProductPermissionRequestBody.d.ts +2 -0
  241. package/dist/types/controllers/product-permission/hasProductPermission.d.ts +5 -0
  242. package/dist/types/controllers/product-permission/transformPermissions.d.ts +2 -0
  243. package/dist/types/controllers/product-permission/utils.d.ts +10 -5
  244. package/dist/types/i18n/index.d.ts +87 -0
  245. package/dist/types/index.d.ts +5 -3
  246. package/dist/types/next/index.d.ts +9 -0
  247. package/dist/types/ui/team-containers/add-container-card/AddContainerCard.d.ts +12 -0
  248. package/dist/types/ui/team-containers/add-container-card/{index.d.ts → getAddContainerCards.d.ts} +1 -11
  249. package/dist/types/ui/team-containers/index.d.ts +9 -0
  250. package/dist/types/ui/team-containers/types.d.ts +1 -1
  251. package/jira-icon/package.json +9 -0
  252. package/loom-icon/package.json +9 -0
  253. package/package.json +19 -19
  254. package/product-permission/get-product-permission-request-body/package.json +10 -0
  255. package/product-permission/has-product-permission/package.json +10 -0
  256. package/product-permission/transform-permissions/package.json +10 -0
  257. package/use-connected-teams/package.json +10 -0
  258. package/use-team-containers/use-team-containers/package.json +10 -0
  259. package/use-team-containers/use-team-containers-hook/package.json +10 -0
  260. package/use-team-web-links/actions/package.json +10 -0
  261. package/use-team-web-links/use-team-web-links/package.json +10 -0
  262. package/use-team-web-links-actions/package.json +10 -0
  263. package/dist/cjs/common/ui/loom-avatar/utils.js +0 -39
  264. package/dist/es2019/common/ui/loom-avatar/utils.js +0 -33
  265. package/dist/esm/common/ui/loom-avatar/utils.js +0 -33
  266. package/dist/types/common/ui/loom-avatar/utils.d.ts +0 -16
  267. /package/dist/cjs/ui/team-containers/add-container-card/{index.compiled.css → AddContainerCard.compiled.css} +0 -0
  268. /package/dist/es2019/ui/team-containers/add-container-card/{index.compiled.css → AddContainerCard.compiled.css} +0 -0
  269. /package/dist/esm/ui/team-containers/add-container-card/{index.compiled.css → AddContainerCard.compiled.css} +0 -0
@@ -0,0 +1,59 @@
1
+ import { useCallback, useEffect } from 'react';
2
+ import { useAnalyticsEvents } from '@atlaskit/analytics-next';
3
+ import { useAnalyticsEvents as useAnalyticsEventsNext } from '@atlaskit/teams-app-internal-analytics';
4
+ import { usePeopleAndTeamAnalytics } from '../../../common/utils/analytics';
5
+ import { getErrorDetails } from './get-error-details';
6
+ import { getInitialTeamState } from './get-initial-team-state';
7
+ import { useTeamContainersHook } from './multi-team';
8
+ export const useTeamContainers = (teamId, enable = true) => {
9
+ const [state, actions] = useTeamContainersHook();
10
+ const {
11
+ fireOperationalEvent
12
+ } = usePeopleAndTeamAnalytics();
13
+ const {
14
+ createAnalyticsEvent
15
+ } = useAnalyticsEvents();
16
+ const {
17
+ fireEvent
18
+ } = useAnalyticsEventsNext();
19
+ const fireOperationalAnalytics = useCallback((action, actionSubject, error) => {
20
+ fireOperationalEvent(createAnalyticsEvent, {
21
+ action: action,
22
+ actionSubject: actionSubject,
23
+ attributes: {
24
+ teamId,
25
+ ...(error && {
26
+ error: getErrorDetails(error)
27
+ })
28
+ }
29
+ });
30
+ }, [fireOperationalEvent, createAnalyticsEvent, teamId]);
31
+ useEffect(() => {
32
+ if (enable) {
33
+ // Get fresh state to ensure we're checking the correct team
34
+ const currentState = state;
35
+ const teamState = currentState.teams[teamId];
36
+ // Only fetch if not already loaded or loading
37
+ if (!(teamState !== null && teamState !== void 0 && teamState.hasLoaded) && !(teamState !== null && teamState !== void 0 && teamState.loading)) {
38
+ actions.fetchTeamContainers(teamId, fireOperationalAnalytics, fireEvent);
39
+ }
40
+ }
41
+ // eslint-disable-next-line react-hooks/exhaustive-deps
42
+ }, [teamId, enable]);
43
+ const refetchTeamContainers = useCallback(async () => actions.refetchTeamContainers(teamId, fireOperationalAnalytics, fireEvent), [teamId, actions, fireOperationalAnalytics, fireEvent]);
44
+
45
+ // Always get the state for the specific teamId to avoid showing wrong team's data
46
+ const teamState = state.teams[teamId] || getInitialTeamState();
47
+ return {
48
+ teamContainers: teamState.teamContainers,
49
+ loading: teamState.loading,
50
+ hasLoaded: teamState.hasLoaded,
51
+ error: teamState.error,
52
+ unlinkError: teamState.unlinkError,
53
+ teamId: teamState.teamId,
54
+ connectedTeams: teamState.connectedTeams,
55
+ addTeamContainer: teamContainer => actions.addTeamContainer(teamId, teamContainer),
56
+ unlinkTeamContainers: containerId => actions.unlinkTeamContainers(teamId, containerId),
57
+ refetchTeamContainers
58
+ };
59
+ };
@@ -0,0 +1,3 @@
1
+ import { createHook } from 'react-sweet-state';
2
+ import { TeamContainersStore } from './store';
3
+ export const useTeamContainersHook = createHook(TeamContainersStore);
@@ -0,0 +1,28 @@
1
+ import { useCallback, useEffect } from 'react';
2
+ import { fg } from '@atlaskit/platform-feature-flags';
3
+ import { useAnalyticsEvents } from '@atlaskit/teams-app-internal-analytics';
4
+ import { useTeamContainers as useTeamContainersMulti } from './use-team-containers-2';
5
+ import { useTeamContainersHook } from './use-team-containers-hook';
6
+ export const useTeamContainers = (teamId, enable = true) => {
7
+ const [state, actions] = useTeamContainersHook();
8
+ const useMultiTeam = fg('enable_multi_team_containers_state');
9
+ const multiTeamResult = useTeamContainersMulti(teamId, useMultiTeam ? enable : false);
10
+ const {
11
+ fireEvent
12
+ } = useAnalyticsEvents();
13
+ useEffect(() => {
14
+ if (enable && !useMultiTeam) {
15
+ actions.fetchTeamContainers(teamId, fireEvent);
16
+ }
17
+ }, [teamId, actions, enable, fireEvent, useMultiTeam]);
18
+ const refetchTeamContainers = useCallback(async () => actions.refetchTeamContainers(fireEvent), [actions, fireEvent]);
19
+ if (useMultiTeam) {
20
+ return multiTeamResult;
21
+ }
22
+ return {
23
+ ...state,
24
+ addTeamContainer: actions.addTeamContainer,
25
+ unlinkTeamContainers: containerId => actions.unlinkTeamContainers(teamId, containerId),
26
+ refetchTeamContainers
27
+ };
28
+ };
@@ -1,7 +1,9 @@
1
1
  import { useCallback, useEffect, useMemo } from 'react';
2
- import { containerToNewWebLink, isNewTeamWebLink, webLinksToContainers } from '../../../common/utils/team-web-link-converters';
3
- import { useTeamContainers } from '../use-team-containers';
4
- import { useTeamWebLinks } from '../use-team-web-links';
2
+ import { containerToNewWebLink } from '../../../common/utils/container-to-new-web-link';
3
+ import { isNewTeamWebLink } from '../../../common/utils/is-new-team-web-link';
4
+ import { webLinksToContainers } from '../../../common/utils/web-links-to-containers';
5
+ import { useTeamContainers } from '../use-team-containers/use-team-containers';
6
+ import { useTeamWebLinks } from '../use-team-web-links/use-team-web-links';
5
7
  const MAX_LINKS_LIMIT = 10;
6
8
  export const useTeamLinksAndContainers = (teamId, enableContainers = true) => {
7
9
  const {
@@ -0,0 +1,177 @@
1
+ import { teamsClient } from '@atlaskit/teams-client';
2
+ import { initialState } from './initial-state';
3
+ export const actions = {
4
+ getTeamWebLinks: teamId => async ({
5
+ getState,
6
+ setState,
7
+ dispatch
8
+ }) => {
9
+ const {
10
+ links,
11
+ teamId: currentTeamId,
12
+ hasLoaded,
13
+ isLoading
14
+ } = getState();
15
+ if (isLoading || teamId === currentTeamId && hasLoaded && links.length > 0) {
16
+ return;
17
+ }
18
+ const initialLinks = teamId === currentTeamId ? links : [];
19
+ setState({
20
+ teamId,
21
+ isLoading: true,
22
+ hasLoaded: false,
23
+ hasError: false,
24
+ shouldReload: false,
25
+ links: initialLinks
26
+ });
27
+ try {
28
+ const {
29
+ entities
30
+ } = await teamsClient.getTeamLinksByTeamId(teamId);
31
+ if (getState().teamId !== teamId) {
32
+ return;
33
+ }
34
+ setState({
35
+ isLoading: false,
36
+ hasLoaded: true,
37
+ hasError: false,
38
+ shouldReload: false,
39
+ links: entities
40
+ });
41
+ if (entities.length > 0) {
42
+ dispatch(actions.getTeamWebLinkIcons(teamId));
43
+ }
44
+ } catch (e) {
45
+ if (getState().teamId !== teamId) {
46
+ return;
47
+ }
48
+ setState({
49
+ isLoading: false,
50
+ hasLoaded: true,
51
+ hasError: true,
52
+ errorType: e instanceof Error ? e : undefined,
53
+ shouldReload: false,
54
+ links: []
55
+ });
56
+ }
57
+ },
58
+ getTeamWebLinkIcons: teamId => async ({
59
+ getState,
60
+ setState
61
+ }) => {
62
+ const {
63
+ links,
64
+ linkIcons: currentIcons
65
+ } = getState();
66
+ if (links.length === 0) {
67
+ return;
68
+ }
69
+ const linkUrls = links.map(link => link.linkUri);
70
+ const uncachedUrls = linkUrls.filter(url => !currentIcons.some(icon => icon.linkUrl === url));
71
+ if (uncachedUrls.length > 0) {
72
+ try {
73
+ setState({
74
+ iconsLoading: true,
75
+ iconsError: false
76
+ });
77
+ const newIconData = await teamsClient.getTeamLinkIcons(uncachedUrls);
78
+ if (getState().teamId === teamId) {
79
+ setState({
80
+ linkIcons: [...currentIcons, ...(newIconData || [])],
81
+ iconsLoading: false,
82
+ iconsError: false,
83
+ iconHasLoaded: true
84
+ });
85
+ }
86
+ } catch {
87
+ if (getState().teamId === teamId) {
88
+ setState({
89
+ iconsLoading: false,
90
+ iconsError: true,
91
+ iconHasLoaded: true
92
+ });
93
+ }
94
+ }
95
+ } else {
96
+ setState({
97
+ iconsLoading: false,
98
+ iconsError: false,
99
+ iconHasLoaded: true
100
+ });
101
+ }
102
+ },
103
+ createTeamWebLink: (teamId, newLink) => async ({
104
+ getState,
105
+ setState,
106
+ dispatch
107
+ }) => {
108
+ const result = await teamsClient.createTeamLink(teamId, newLink);
109
+ const currentState = getState();
110
+ if (currentState.teamId !== teamId) {
111
+ return result;
112
+ }
113
+ setState({
114
+ links: [...currentState.links, result]
115
+ });
116
+ dispatch(actions.getTeamWebLinkIcons(teamId));
117
+ return result;
118
+ },
119
+ updateTeamWebLink: (teamId, linkId, newLink) => async ({
120
+ getState,
121
+ setState,
122
+ dispatch
123
+ }) => {
124
+ const result = await teamsClient.updateTeamLink(teamId, linkId, newLink);
125
+ const currentState = getState();
126
+ if (currentState.teamId !== teamId) {
127
+ return result;
128
+ }
129
+ const oldLink = currentState.links.find(link => link.linkId === linkId);
130
+ const urlChanged = oldLink && oldLink.linkUri !== result.linkUri;
131
+ setState({
132
+ links: currentState.links.map(link => link.linkId === linkId ? result : link)
133
+ });
134
+ if (urlChanged) {
135
+ const updatedIcons = currentState.linkIcons.filter(icon => icon.linkUrl !== oldLink.linkUri);
136
+ setState({
137
+ linkIcons: updatedIcons
138
+ });
139
+ dispatch(actions.getTeamWebLinkIcons(teamId));
140
+ }
141
+ return result;
142
+ },
143
+ removeWebLink: (teamId, linkId) => async ({
144
+ getState,
145
+ setState
146
+ }) => {
147
+ const currentState = getState();
148
+ if (currentState.teamId !== teamId) {
149
+ return;
150
+ }
151
+ await teamsClient.deleteTeamLink(teamId, linkId);
152
+ setState({
153
+ links: currentState.links.filter(link => link.linkId !== linkId)
154
+ });
155
+ },
156
+ fetchWebLinkTitle: url => async ({
157
+ setState
158
+ }) => {
159
+ if (!url) {
160
+ return undefined;
161
+ }
162
+ try {
163
+ const title = await teamsClient.getWebLinkTitle(url);
164
+ return title;
165
+ } catch {
166
+ return undefined;
167
+ }
168
+ },
169
+ initialState: state => ({
170
+ setState
171
+ }) => {
172
+ setState({
173
+ ...initialState,
174
+ ...state
175
+ });
176
+ }
177
+ };
@@ -1,217 +1,13 @@
1
- import { createHook, createStore } from 'react-sweet-state';
2
- import { fg } from '@atlaskit/platform-feature-flags';
3
- import { teamsClient } from '@atlaskit/teams-client';
4
- import { useTeamWebLinksActions as useTeamWebLinksActionsMulti, useTeamWebLinks as useTeamWebLinksMulti } from './multi-team';
5
- const initialState = {
6
- teamId: '',
7
- isLoading: false,
8
- hasLoaded: false,
9
- hasError: false,
10
- shouldReload: false,
11
- errorType: null,
12
- links: [],
13
- linkIcons: [],
14
- iconsLoading: false,
15
- iconsError: false,
16
- iconHasLoaded: false
17
- };
18
- export const actions = {
19
- getTeamWebLinks: teamId => async ({
20
- getState,
21
- setState,
22
- dispatch
23
- }) => {
24
- const {
25
- links,
26
- teamId: currentTeamId,
27
- hasLoaded,
28
- isLoading
29
- } = getState();
30
- if (isLoading || teamId === currentTeamId && hasLoaded && links.length > 0) {
31
- return;
32
- }
33
- const initialLinks = teamId === currentTeamId ? links : [];
34
- setState({
35
- teamId,
36
- isLoading: true,
37
- hasLoaded: false,
38
- hasError: false,
39
- shouldReload: false,
40
- links: initialLinks
41
- });
42
- try {
43
- const {
44
- entities
45
- } = await teamsClient.getTeamLinksByTeamId(teamId);
46
- if (getState().teamId !== teamId) {
47
- return;
48
- }
49
- setState({
50
- isLoading: false,
51
- hasLoaded: true,
52
- hasError: false,
53
- shouldReload: false,
54
- links: entities
55
- });
56
- if (entities.length > 0) {
57
- dispatch(actions.getTeamWebLinkIcons(teamId));
58
- }
59
- } catch (e) {
60
- if (getState().teamId !== teamId) {
61
- return;
62
- }
63
- setState({
64
- isLoading: false,
65
- hasLoaded: true,
66
- hasError: true,
67
- errorType: e instanceof Error ? e : undefined,
68
- shouldReload: false,
69
- links: []
70
- });
71
- }
72
- },
73
- getTeamWebLinkIcons: teamId => async ({
74
- getState,
75
- setState
76
- }) => {
77
- const {
78
- links,
79
- linkIcons: currentIcons
80
- } = getState();
81
- if (links.length === 0) {
82
- return;
83
- }
84
- const linkUrls = links.map(link => link.linkUri);
85
- const uncachedUrls = linkUrls.filter(url => !currentIcons.some(icon => icon.linkUrl === url));
86
- if (uncachedUrls.length > 0) {
87
- try {
88
- setState({
89
- iconsLoading: true,
90
- iconsError: false
91
- });
92
- const newIconData = await teamsClient.getTeamLinkIcons(uncachedUrls);
93
- if (getState().teamId === teamId) {
94
- setState({
95
- linkIcons: [...currentIcons, ...(newIconData || [])],
96
- iconsLoading: false,
97
- iconsError: false,
98
- iconHasLoaded: true
99
- });
100
- }
101
- } catch {
102
- if (getState().teamId === teamId) {
103
- setState({
104
- iconsLoading: false,
105
- iconsError: true,
106
- iconHasLoaded: true
107
- });
108
- }
109
- }
110
- } else {
111
- setState({
112
- iconsLoading: false,
113
- iconsError: false,
114
- iconHasLoaded: true
115
- });
116
- }
117
- },
118
- createTeamWebLink: (teamId, newLink) => async ({
119
- getState,
120
- setState,
121
- dispatch
122
- }) => {
123
- const result = await teamsClient.createTeamLink(teamId, newLink);
124
- const currentState = getState();
125
- if (currentState.teamId !== teamId) {
126
- return result;
127
- }
128
- setState({
129
- links: [...currentState.links, result]
130
- });
131
- dispatch(actions.getTeamWebLinkIcons(teamId));
132
- return result;
133
- },
134
- updateTeamWebLink: (teamId, linkId, newLink) => async ({
135
- getState,
136
- setState,
137
- dispatch
138
- }) => {
139
- const result = await teamsClient.updateTeamLink(teamId, linkId, newLink);
140
- const currentState = getState();
141
- if (currentState.teamId !== teamId) {
142
- return result;
143
- }
144
- const oldLink = currentState.links.find(link => link.linkId === linkId);
145
- const urlChanged = oldLink && oldLink.linkUri !== result.linkUri;
146
- setState({
147
- links: currentState.links.map(link => link.linkId === linkId ? result : link)
148
- });
149
- if (urlChanged) {
150
- const updatedIcons = currentState.linkIcons.filter(icon => icon.linkUrl !== oldLink.linkUri);
151
- setState({
152
- linkIcons: updatedIcons
153
- });
154
- dispatch(actions.getTeamWebLinkIcons(teamId));
155
- }
156
- return result;
157
- },
158
- removeWebLink: (teamId, linkId) => async ({
159
- getState,
160
- setState
161
- }) => {
162
- const currentState = getState();
163
- if (currentState.teamId !== teamId) {
164
- return;
165
- }
166
- await teamsClient.deleteTeamLink(teamId, linkId);
167
- setState({
168
- links: currentState.links.filter(link => link.linkId !== linkId)
169
- });
170
- },
171
- fetchWebLinkTitle: url => async ({
172
- setState
173
- }) => {
174
- if (!url) {
175
- return undefined;
176
- }
177
- try {
178
- const title = await teamsClient.getWebLinkTitle(url);
179
- return title;
180
- } catch {
181
- return undefined;
182
- }
183
- },
184
- initialState: state => ({
185
- setState
186
- }) => {
187
- setState({
188
- ...initialState,
189
- ...state
190
- });
191
- }
192
- };
193
- const TeamWebLinksStore = createStore({
194
- initialState,
195
- actions,
196
- name: 'teamWebLinksStore'
197
- });
198
- const useTeamWebLinksOriginal = createHook(TeamWebLinksStore);
199
- const useTeamWebLinksActionsOriginal = createHook(TeamWebLinksStore, {
200
- selector: null
201
- });
202
- export const useTeamWebLinks = teamId => {
203
- const originalResult = useTeamWebLinksOriginal();
204
- const multiResult = useTeamWebLinksMulti(teamId || '');
205
- if (fg('enable_multi_team_containers_state')) {
206
- return multiResult;
207
- }
208
- return originalResult;
209
- };
210
- export const useTeamWebLinksActions = () => {
211
- const originalResult = useTeamWebLinksActionsOriginal();
212
- const multiResult = useTeamWebLinksActionsMulti();
213
- if (fg('enable_multi_team_containers_state')) {
214
- return multiResult;
215
- }
216
- return originalResult;
217
- };
1
+ /* eslint-disable @repo/internal/deprecations/deprecation-ticket-required -- VOLTC-139 tracks removal of these deprecated re-export shims. */
2
+ /**
3
+ * @deprecated Use `import { actions } from '@atlaskit/teams-public/use-team-web-links/actions'` instead.
4
+ */
5
+ export { actions } from './actions';
6
+ /**
7
+ * @deprecated Use `import { useTeamWebLinks } from '@atlaskit/teams-public/use-team-web-links/use-team-web-links'` instead.
8
+ */
9
+ export { useTeamWebLinks } from './use-team-web-links';
10
+ /**
11
+ * @deprecated Use `import { useTeamWebLinksActions } from '@atlaskit/teams-public/use-team-web-links-actions'` instead.
12
+ */
13
+ export { useTeamWebLinksActions } from './use-team-web-links-actions';
@@ -0,0 +1,13 @@
1
+ export const initialState = {
2
+ teamId: '',
3
+ isLoading: false,
4
+ hasLoaded: false,
5
+ hasError: false,
6
+ shouldReload: false,
7
+ errorType: null,
8
+ links: [],
9
+ linkIcons: [],
10
+ iconsLoading: false,
11
+ iconsError: false,
12
+ iconHasLoaded: false
13
+ };
@@ -0,0 +1,8 @@
1
+ import { createStore } from 'react-sweet-state';
2
+ import { actions } from './actions';
3
+ import { initialState } from './initial-state';
4
+ export const TeamWebLinksStore = createStore({
5
+ initialState,
6
+ actions,
7
+ name: 'teamWebLinksStore'
8
+ });
@@ -0,0 +1,15 @@
1
+ import { createHook } from 'react-sweet-state';
2
+ import { fg } from '@atlaskit/platform-feature-flags';
3
+ import { useTeamWebLinksActions as useTeamWebLinksActionsMulti } from './multi-team';
4
+ import { TeamWebLinksStore } from './store';
5
+ const useTeamWebLinksActionsOriginal = createHook(TeamWebLinksStore, {
6
+ selector: null
7
+ });
8
+ export const useTeamWebLinksActions = () => {
9
+ const originalResult = useTeamWebLinksActionsOriginal();
10
+ const multiResult = useTeamWebLinksActionsMulti();
11
+ if (fg('enable_multi_team_containers_state')) {
12
+ return multiResult;
13
+ }
14
+ return originalResult;
15
+ };
@@ -0,0 +1,13 @@
1
+ import { createHook } from 'react-sweet-state';
2
+ import { fg } from '@atlaskit/platform-feature-flags';
3
+ import { useTeamWebLinks as useTeamWebLinksMulti } from './multi-team';
4
+ import { TeamWebLinksStore } from './store';
5
+ const useTeamWebLinksOriginal = createHook(TeamWebLinksStore);
6
+ export const useTeamWebLinks = teamId => {
7
+ const originalResult = useTeamWebLinksOriginal();
8
+ const multiResult = useTeamWebLinksMulti(teamId || '');
9
+ if (fg('enable_multi_team_containers_state')) {
10
+ return multiResult;
11
+ }
12
+ return originalResult;
13
+ };
@@ -1,3 +1,17 @@
1
- export { useTeamContainers } from './hooks/use-team-containers';
2
- export { useTeamWebLinks, useTeamWebLinksActions } from './hooks/use-team-web-links';
3
- export { hasProductPermission } from './product-permission/utils';
1
+ /* eslint-disable @repo/internal/deprecations/deprecation-ticket-required -- VOLTC-139 tracks removal of these deprecated re-export shims. */
2
+ /**
3
+ * @deprecated Use `import { useTeamContainers } from '@atlaskit/teams-public/use-team-containers/use-team-containers'` instead.
4
+ */
5
+ export { useTeamContainers } from './hooks/use-team-containers/use-team-containers';
6
+ /**
7
+ * @deprecated Use `import { useTeamWebLinks } from '@atlaskit/teams-public/use-team-web-links/use-team-web-links'` instead.
8
+ */
9
+ export { useTeamWebLinks } from './hooks/use-team-web-links/use-team-web-links';
10
+ /**
11
+ * @deprecated Use `import { useTeamWebLinksActions } from '@atlaskit/teams-public/use-team-web-links-actions'` instead.
12
+ */
13
+ export { useTeamWebLinksActions } from './hooks/use-team-web-links/use-team-web-links-actions';
14
+ /**
15
+ * @deprecated Use `import { hasProductPermission } from '@atlaskit/teams-public/product-permission/has-product-permission'` instead.
16
+ */
17
+ export { hasProductPermission } from './product-permission/hasProductPermission';
@@ -0,0 +1,19 @@
1
+ const PRODUCTS = ['confluence', 'jira', 'jira-core', 'jira-software', 'jira-servicedesk', 'jira-product-discovery', 'loom'];
2
+ export const getProductPermissionRequestBody = (cloudId, userId, permissionIds) => {
3
+ const body = permissionIds.reduce((acc, permissionId) => {
4
+ const permission = {
5
+ permissionId,
6
+ resourceId: '',
7
+ principalId: `ari:cloud:identity::user/${userId}`,
8
+ dontRequirePrincipalInSite: true
9
+ };
10
+ PRODUCTS.forEach(product => {
11
+ acc.push({
12
+ ...permission,
13
+ resourceId: `ari:cloud:${product}::site/${cloudId}`
14
+ });
15
+ });
16
+ return acc;
17
+ }, []);
18
+ return JSON.stringify(body);
19
+ };
@@ -0,0 +1,15 @@
1
+ /**
2
+ * @deprecated Use hasProductPermission from "@atlaskit/teams-app-internal-product-permissions" instead
3
+ */
4
+ export const hasProductPermission = (permissions, product, permissionIds) => {
5
+ if (!permissions[product]) {
6
+ return false;
7
+ }
8
+ if ((!permissionIds || permissionIds.length === 0) && permissions[product]) {
9
+ return Object.values(permissions[product] || {}).some(value => value === true);
10
+ }
11
+ return permissionIds === null || permissionIds === void 0 ? void 0 : permissionIds.some(permissionId => {
12
+ const productPermissions = permissions[product];
13
+ return productPermissions === null || productPermissions === void 0 ? void 0 : productPermissions[permissionId];
14
+ });
15
+ };
@@ -1,5 +1,6 @@
1
1
  import { createHook, createStore } from 'react-sweet-state';
2
- import { getProductPermissionRequestBody, transformPermissions } from './utils';
2
+ import { getProductPermissionRequestBody } from './getProductPermissionRequestBody';
3
+ import { transformPermissions } from './transformPermissions';
3
4
  const actions = {
4
5
  getPermissions: ({
5
6
  userId,
@@ -0,0 +1,15 @@
1
+ import { SUPPORTED_PRODUCTS } from './types';
2
+ export const transformPermissions = permissions => {
3
+ return permissions.reduce((acc, permission) => {
4
+ SUPPORTED_PRODUCTS.forEach(supportedProduct => {
5
+ if (permission.resourceId.includes(supportedProduct)) {
6
+ var _acc$supportedProduct;
7
+ acc[supportedProduct] = {
8
+ ...acc[supportedProduct],
9
+ [permission.permissionId]: ((_acc$supportedProduct = acc[supportedProduct]) === null || _acc$supportedProduct === void 0 ? void 0 : _acc$supportedProduct[permission.permissionId]) || permission.permitted
10
+ };
11
+ }
12
+ });
13
+ return acc;
14
+ }, {});
15
+ };