@atlaskit/teams-public 2.8.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 (266) hide show
  1. package/CHANGELOG.md +76 -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.js +26 -24
  62. package/dist/cjs/ui/team-containers/no-product-access-empty-state/index.js +1 -1
  63. package/dist/cjs/ui/team-containers/team-link-card/index.js +19 -17
  64. package/dist/es2019/common/assets/index.js +10 -0
  65. package/dist/es2019/common/hooks/useSpaceInviteScheduler.js +1 -1
  66. package/dist/es2019/common/ui/container-icon/index.js +5 -5
  67. package/dist/es2019/common/ui/loom-avatar/getAvatarText.js +3 -0
  68. package/dist/es2019/common/ui/loom-avatar/hash.js +6 -0
  69. package/dist/es2019/common/ui/loom-avatar/index.js +4 -0
  70. package/dist/es2019/common/ui/loom-avatar/main.js +5 -3
  71. package/dist/es2019/common/ui/loom-avatar/pickContainerColor.js +13 -0
  72. package/dist/es2019/common/ui/loom-avatar/pickTextColor.js +13 -0
  73. package/dist/es2019/common/ui/team-link-card-actions/index.js +6 -4
  74. package/dist/es2019/common/utils/analytics.js +1 -1
  75. package/dist/es2019/common/utils/container-to-new-web-link.js +7 -0
  76. package/dist/es2019/common/utils/get-container-properties.js +2 -2
  77. package/dist/es2019/common/utils/{get-link-domain.js → get-domain-from-link-uri.js} +2 -11
  78. package/dist/es2019/common/utils/get-is-experiment-enabled.js +1 -1
  79. package/dist/es2019/common/utils/is-new-team-web-link.js +3 -0
  80. package/dist/es2019/common/utils/team-web-link-converters.js +0 -25
  81. package/dist/es2019/common/utils/unsafe-get-domain-from-url.js +10 -0
  82. package/dist/es2019/common/utils/web-link-to-container.js +9 -0
  83. package/dist/es2019/common/utils/web-links-to-containers.js +7 -0
  84. package/dist/es2019/controllers/hooks/use-refresh-containers-on-container-created/index.js +1 -1
  85. package/dist/es2019/controllers/hooks/use-team-containers/actions-2.js +413 -0
  86. package/dist/es2019/controllers/hooks/use-team-containers/actions.js +260 -0
  87. package/dist/es2019/controllers/hooks/use-team-containers/connected-teams.js +1 -0
  88. package/dist/es2019/controllers/hooks/use-team-containers/containers-deep-equal.js +13 -0
  89. package/dist/es2019/controllers/hooks/use-team-containers/containers-equal.js +17 -0
  90. package/dist/es2019/controllers/hooks/use-team-containers/fire-analytics-props.js +0 -0
  91. package/dist/es2019/controllers/hooks/use-team-containers/get-error-details.js +8 -0
  92. package/dist/es2019/controllers/hooks/use-team-containers/get-initial-team-state.js +10 -0
  93. package/dist/es2019/controllers/hooks/use-team-containers/index.js +13 -329
  94. package/dist/es2019/controllers/hooks/use-team-containers/initial-connected-teams-state.js +8 -0
  95. package/dist/es2019/controllers/hooks/use-team-containers/multi-team.js +2 -541
  96. package/dist/es2019/controllers/hooks/use-team-containers/normalize-error.js +6 -0
  97. package/dist/es2019/controllers/hooks/use-team-containers/state.js +1 -0
  98. package/dist/es2019/controllers/hooks/use-team-containers/store.js +17 -0
  99. package/dist/es2019/controllers/hooks/use-team-containers/team-containers-state.js +1 -0
  100. package/dist/es2019/controllers/hooks/use-team-containers/team-state.js +1 -0
  101. package/dist/es2019/controllers/hooks/use-team-containers/use-connected-teams-2.js +44 -0
  102. package/dist/es2019/controllers/hooks/use-team-containers/use-connected-teams.js +20 -0
  103. package/dist/es2019/controllers/hooks/use-team-containers/use-team-containers-2.js +59 -0
  104. package/dist/es2019/controllers/hooks/use-team-containers/use-team-containers-hook.js +3 -0
  105. package/dist/es2019/controllers/hooks/use-team-containers/use-team-containers.js +28 -0
  106. package/dist/es2019/controllers/hooks/use-team-links-and-containers/index.js +5 -3
  107. package/dist/es2019/controllers/hooks/use-team-web-links/actions.js +177 -0
  108. package/dist/es2019/controllers/hooks/use-team-web-links/index.js +13 -217
  109. package/dist/es2019/controllers/hooks/use-team-web-links/initial-state.js +13 -0
  110. package/dist/es2019/controllers/hooks/use-team-web-links/store.js +8 -0
  111. package/dist/es2019/controllers/hooks/use-team-web-links/use-team-web-links-actions.js +15 -0
  112. package/dist/es2019/controllers/hooks/use-team-web-links/use-team-web-links.js +13 -0
  113. package/dist/es2019/controllers/index.js +17 -3
  114. package/dist/es2019/controllers/product-permission/getProductPermissionRequestBody.js +19 -0
  115. package/dist/es2019/controllers/product-permission/hasProductPermission.js +15 -0
  116. package/dist/es2019/controllers/product-permission/main.js +2 -1
  117. package/dist/es2019/controllers/product-permission/transformPermissions.js +15 -0
  118. package/dist/es2019/controllers/product-permission/utils.js +11 -48
  119. package/dist/es2019/i18n/index.js +88 -0
  120. package/dist/es2019/index.js +5 -3
  121. package/dist/es2019/next/index.js +10 -0
  122. package/dist/es2019/next/ui/team-containers/team-link-card/index.js +2 -2
  123. package/dist/es2019/ui/team-containers/add-container-card/{index.js → AddContainerCard.js} +4 -41
  124. package/dist/es2019/ui/team-containers/add-container-card/getAddContainerCards.js +40 -0
  125. package/dist/es2019/ui/team-containers/disconnect-dialog/index.js +2 -2
  126. package/dist/es2019/ui/team-containers/index.js +12 -1
  127. package/dist/es2019/ui/team-containers/main.js +9 -7
  128. package/dist/es2019/ui/team-containers/no-product-access-empty-state/index.js +1 -1
  129. package/dist/es2019/ui/team-containers/team-link-card/index.js +9 -7
  130. package/dist/esm/common/assets/index.js +10 -0
  131. package/dist/esm/common/hooks/useSpaceInviteScheduler.js +1 -1
  132. package/dist/esm/common/ui/container-icon/index.js +5 -5
  133. package/dist/esm/common/ui/loom-avatar/getAvatarText.js +3 -0
  134. package/dist/esm/common/ui/loom-avatar/hash.js +6 -0
  135. package/dist/esm/common/ui/loom-avatar/index.js +4 -0
  136. package/dist/esm/common/ui/loom-avatar/main.js +5 -3
  137. package/dist/esm/common/ui/loom-avatar/pickContainerColor.js +13 -0
  138. package/dist/esm/common/ui/loom-avatar/pickTextColor.js +13 -0
  139. package/dist/esm/common/ui/team-link-card-actions/index.js +6 -4
  140. package/dist/esm/common/utils/analytics.js +1 -1
  141. package/dist/esm/common/utils/container-to-new-web-link.js +7 -0
  142. package/dist/esm/common/utils/get-container-properties.js +2 -2
  143. package/dist/esm/common/utils/{get-link-domain.js → get-domain-from-link-uri.js} +2 -11
  144. package/dist/esm/common/utils/get-is-experiment-enabled.js +1 -1
  145. package/dist/esm/common/utils/is-new-team-web-link.js +3 -0
  146. package/dist/esm/common/utils/team-web-link-converters.js +0 -28
  147. package/dist/esm/common/utils/unsafe-get-domain-from-url.js +10 -0
  148. package/dist/esm/common/utils/web-link-to-container.js +9 -0
  149. package/dist/esm/common/utils/web-links-to-containers.js +10 -0
  150. package/dist/esm/controllers/hooks/use-refresh-containers-on-container-created/index.js +1 -1
  151. package/dist/esm/controllers/hooks/use-team-containers/actions-2.js +481 -0
  152. package/dist/esm/controllers/hooks/use-team-containers/actions.js +376 -0
  153. package/dist/esm/controllers/hooks/use-team-containers/connected-teams.js +1 -0
  154. package/dist/esm/controllers/hooks/use-team-containers/containers-deep-equal.js +16 -0
  155. package/dist/esm/controllers/hooks/use-team-containers/containers-equal.js +22 -0
  156. package/dist/esm/controllers/hooks/use-team-containers/fire-analytics-props.js +0 -0
  157. package/dist/esm/controllers/hooks/use-team-containers/get-error-details.js +8 -0
  158. package/dist/esm/controllers/hooks/use-team-containers/get-initial-team-state.js +12 -0
  159. package/dist/esm/controllers/hooks/use-team-containers/index.js +13 -467
  160. package/dist/esm/controllers/hooks/use-team-containers/initial-connected-teams-state.js +8 -0
  161. package/dist/esm/controllers/hooks/use-team-containers/multi-team.js +2 -631
  162. package/dist/esm/controllers/hooks/use-team-containers/normalize-error.js +6 -0
  163. package/dist/esm/controllers/hooks/use-team-containers/state.js +1 -0
  164. package/dist/esm/controllers/hooks/use-team-containers/store.js +17 -0
  165. package/dist/esm/controllers/hooks/use-team-containers/team-containers-state.js +1 -0
  166. package/dist/esm/controllers/hooks/use-team-containers/team-state.js +1 -0
  167. package/dist/esm/controllers/hooks/use-team-containers/use-connected-teams-2.js +49 -0
  168. package/dist/esm/controllers/hooks/use-team-containers/use-connected-teams.js +29 -0
  169. package/dist/esm/controllers/hooks/use-team-containers/use-team-containers-2.js +79 -0
  170. package/dist/esm/controllers/hooks/use-team-containers/use-team-containers-hook.js +3 -0
  171. package/dist/esm/controllers/hooks/use-team-containers/use-team-containers.js +48 -0
  172. package/dist/esm/controllers/hooks/use-team-links-and-containers/index.js +5 -3
  173. package/dist/esm/controllers/hooks/use-team-web-links/actions.js +321 -0
  174. package/dist/esm/controllers/hooks/use-team-web-links/index.js +13 -361
  175. package/dist/esm/controllers/hooks/use-team-web-links/initial-state.js +13 -0
  176. package/dist/esm/controllers/hooks/use-team-web-links/store.js +8 -0
  177. package/dist/esm/controllers/hooks/use-team-web-links/use-team-web-links-actions.js +15 -0
  178. package/dist/esm/controllers/hooks/use-team-web-links/use-team-web-links.js +13 -0
  179. package/dist/esm/controllers/index.js +17 -3
  180. package/dist/esm/controllers/product-permission/getProductPermissionRequestBody.js +21 -0
  181. package/dist/esm/controllers/product-permission/hasProductPermission.js +17 -0
  182. package/dist/esm/controllers/product-permission/main.js +2 -1
  183. package/dist/esm/controllers/product-permission/transformPermissions.js +15 -0
  184. package/dist/esm/controllers/product-permission/utils.js +11 -49
  185. package/dist/esm/i18n/index.js +88 -0
  186. package/dist/esm/index.js +5 -3
  187. package/dist/esm/next/index.js +10 -0
  188. package/dist/esm/next/ui/team-containers/team-link-card/index.js +2 -2
  189. package/dist/esm/ui/team-containers/add-container-card/{index.js → AddContainerCard.js} +4 -48
  190. package/dist/esm/ui/team-containers/add-container-card/getAddContainerCards.js +47 -0
  191. package/dist/esm/ui/team-containers/disconnect-dialog/index.js +2 -2
  192. package/dist/esm/ui/team-containers/index.js +12 -1
  193. package/dist/esm/ui/team-containers/main.js +9 -7
  194. package/dist/esm/ui/team-containers/no-product-access-empty-state/index.js +1 -1
  195. package/dist/esm/ui/team-containers/team-link-card/index.js +9 -7
  196. package/dist/types/common/assets/index.d.ts +9 -0
  197. package/dist/types/common/ui/loom-avatar/getAvatarText.d.ts +1 -0
  198. package/dist/types/common/ui/loom-avatar/hash.d.ts +1 -0
  199. package/dist/types/common/ui/loom-avatar/index.d.ts +3 -0
  200. package/dist/types/common/ui/loom-avatar/pickContainerColor.d.ts +8 -0
  201. package/dist/types/common/ui/loom-avatar/pickTextColor.d.ts +8 -0
  202. package/dist/types/common/utils/container-to-new-web-link.d.ts +2 -0
  203. package/dist/types/common/utils/{get-link-domain.d.ts → get-domain-from-link-uri.d.ts} +0 -7
  204. package/dist/types/common/utils/is-new-team-web-link.d.ts +2 -0
  205. package/dist/types/common/utils/team-web-link-converters.d.ts +0 -5
  206. package/dist/types/common/utils/unsafe-get-domain-from-url.d.ts +7 -0
  207. package/dist/types/common/utils/web-link-to-container.d.ts +3 -0
  208. package/dist/types/common/utils/web-links-to-containers.d.ts +3 -0
  209. package/dist/types/controllers/hooks/use-team-containers/actions-2.d.ts +13 -0
  210. package/dist/types/controllers/hooks/use-team-containers/actions.d.ts +12 -0
  211. package/dist/types/controllers/hooks/use-team-containers/connected-teams.d.ts +9 -0
  212. package/dist/types/controllers/hooks/use-team-containers/containers-deep-equal.d.ts +12 -0
  213. package/dist/types/controllers/hooks/use-team-containers/containers-equal.d.ts +11 -0
  214. package/dist/types/controllers/hooks/use-team-containers/fire-analytics-props.d.ts +7 -0
  215. package/dist/types/controllers/hooks/use-team-containers/get-error-details.d.ts +4 -0
  216. package/dist/types/controllers/hooks/use-team-containers/get-initial-team-state.d.ts +2 -0
  217. package/dist/types/controllers/hooks/use-team-containers/index.d.ts +12 -59
  218. package/dist/types/controllers/hooks/use-team-containers/initial-connected-teams-state.d.ts +2 -0
  219. package/dist/types/controllers/hooks/use-team-containers/multi-team.d.ts +3 -53
  220. package/dist/types/controllers/hooks/use-team-containers/normalize-error.d.ts +1 -0
  221. package/dist/types/controllers/hooks/use-team-containers/state.d.ts +6 -0
  222. package/dist/types/controllers/hooks/use-team-containers/store.d.ts +4 -0
  223. package/dist/types/controllers/hooks/use-team-containers/team-containers-state.d.ts +16 -0
  224. package/dist/types/controllers/hooks/use-team-containers/team-state.d.ts +11 -0
  225. package/dist/types/controllers/hooks/use-team-containers/use-connected-teams-2.d.ts +11 -0
  226. package/dist/types/controllers/hooks/use-team-containers/use-connected-teams.d.ts +11 -0
  227. package/dist/types/controllers/hooks/use-team-containers/use-team-containers-2.d.ts +15 -0
  228. package/dist/types/controllers/hooks/use-team-containers/use-team-containers-hook.d.ts +12 -0
  229. package/dist/types/controllers/hooks/use-team-containers/use-team-containers.d.ts +21 -0
  230. package/dist/types/controllers/hooks/use-team-web-links/actions.d.ts +12 -0
  231. package/dist/types/controllers/hooks/use-team-web-links/index.d.ts +12 -165
  232. package/dist/types/controllers/hooks/use-team-web-links/initial-state.d.ts +2 -0
  233. package/dist/types/controllers/hooks/use-team-web-links/store.d.ts +4 -0
  234. package/dist/types/controllers/hooks/use-team-web-links/use-team-web-links-actions.d.ts +147 -0
  235. package/dist/types/controllers/hooks/use-team-web-links/use-team-web-links.d.ts +13 -0
  236. package/dist/types/controllers/index.d.ts +16 -3
  237. package/dist/types/controllers/product-permission/getProductPermissionRequestBody.d.ts +2 -0
  238. package/dist/types/controllers/product-permission/hasProductPermission.d.ts +5 -0
  239. package/dist/types/controllers/product-permission/transformPermissions.d.ts +2 -0
  240. package/dist/types/controllers/product-permission/utils.d.ts +10 -5
  241. package/dist/types/i18n/index.d.ts +87 -0
  242. package/dist/types/index.d.ts +5 -3
  243. package/dist/types/next/index.d.ts +9 -0
  244. package/dist/types/ui/team-containers/add-container-card/AddContainerCard.d.ts +12 -0
  245. package/dist/types/ui/team-containers/add-container-card/{index.d.ts → getAddContainerCards.d.ts} +1 -11
  246. package/dist/types/ui/team-containers/index.d.ts +9 -0
  247. package/dist/types/ui/team-containers/types.d.ts +1 -1
  248. package/jira-icon/package.json +9 -0
  249. package/loom-icon/package.json +9 -0
  250. package/package.json +2 -2
  251. package/product-permission/get-product-permission-request-body/package.json +10 -0
  252. package/product-permission/has-product-permission/package.json +10 -0
  253. package/product-permission/transform-permissions/package.json +10 -0
  254. package/use-connected-teams/package.json +10 -0
  255. package/use-team-containers/use-team-containers/package.json +10 -0
  256. package/use-team-containers/use-team-containers-hook/package.json +10 -0
  257. package/use-team-web-links/actions/package.json +10 -0
  258. package/use-team-web-links/use-team-web-links/package.json +10 -0
  259. package/use-team-web-links-actions/package.json +10 -0
  260. package/dist/cjs/common/ui/loom-avatar/utils.js +0 -39
  261. package/dist/es2019/common/ui/loom-avatar/utils.js +0 -33
  262. package/dist/esm/common/ui/loom-avatar/utils.js +0 -33
  263. package/dist/types/common/ui/loom-avatar/utils.d.ts +0 -16
  264. /package/dist/cjs/ui/team-containers/add-container-card/{index.compiled.css → AddContainerCard.compiled.css} +0 -0
  265. /package/dist/es2019/ui/team-containers/add-container-card/{index.compiled.css → AddContainerCard.compiled.css} +0 -0
  266. /package/dist/esm/ui/team-containers/add-container-card/{index.compiled.css → AddContainerCard.compiled.css} +0 -0
@@ -1,551 +1,12 @@
1
- import { useCallback, useEffect } from 'react';
2
1
  import { createHook, createStore } from 'react-sweet-state';
3
- import { useAnalyticsEvents } from '@atlaskit/analytics-next';
4
- import { useAnalyticsEvents as useAnalyticsEventsNext } from '@atlaskit/teams-app-internal-analytics';
5
- import { teamsClient } from '@atlaskit/teams-client';
6
- import { usePeopleAndTeamAnalytics } from '../../../common/utils/analytics';
7
- const initialConnectedTeamsState = {
8
- containerId: undefined,
9
- isLoading: false,
10
- hasLoaded: false,
11
- teams: undefined,
12
- error: null,
13
- numberOfTeams: undefined
14
- };
15
- const getInitialTeamState = () => ({
16
- teamContainers: [],
17
- loading: false,
18
- hasLoaded: false,
19
- error: null,
20
- unlinkError: null,
21
- teamId: null,
22
- connectedTeams: initialConnectedTeamsState
23
- });
2
+ import { actions } from './actions-2';
24
3
  const initialState = {
25
4
  teams: {},
26
5
  unlinkError: null
27
6
  };
28
- function containersEqual(arr1, arr2) {
29
- if (arr1.length !== arr2.length) {
30
- return false;
31
- }
32
- const sortById = (a, b) => a.id.localeCompare(b.id);
33
- const sorted1 = [...arr1].sort(sortById);
34
- const sorted2 = [...arr2].sort(sortById);
35
- return sorted1.every((item, index) => item.id === sorted2[index].id);
36
- }
37
- function normalizeError(err) {
38
- if (err instanceof Error) {
39
- return err;
40
- }
41
- return new Error(typeof err === 'string' ? err : JSON.stringify(err));
42
- }
43
- function getErrorDetails(err) {
44
- const error = normalizeError(err);
45
- return {
46
- message: error.message,
47
- stack: error.stack
48
- };
49
- }
50
- const actions = {
51
- fetchTeamContainers: (teamId, fireAnalytics, fireAnalyticsNext) => async ({
52
- setState,
53
- getState
54
- }) => {
55
- const {
56
- teams
57
- } = getState();
58
- const currentTeamState = teams[teamId];
59
- // Only skip if already loaded and not currently loading (prevents duplicate fetches)
60
- if (currentTeamState !== null && currentTeamState !== void 0 && currentTeamState.hasLoaded && !currentTeamState.loading) {
61
- return;
62
- }
63
- // Skip if currently loading to prevent concurrent fetches
64
- if (currentTeamState !== null && currentTeamState !== void 0 && currentTeamState.loading) {
65
- return;
66
- }
67
- setState({
68
- teams: {
69
- ...teams,
70
- [teamId]: {
71
- ...getInitialTeamState(),
72
- teamContainers: [],
73
- // Ensure empty containers for new fetch
74
- loading: true,
75
- hasLoaded: false
76
- }
77
- }
78
- });
79
- try {
80
- const containers = await teamsClient.getTeamContainers(teamId);
81
- fireAnalyticsNext('operational.fetchTeamContainers.succeeded', {
82
- teamId
83
- });
84
-
85
- // Get fresh state after async operation
86
- const currentState = getState();
87
- const currentTeamState = currentState.teams[teamId];
88
- if (!currentTeamState || currentTeamState.loading === false) {
89
- // Team state was cleared or fetch was cancelled, don't update
90
- return;
91
- }
92
- // Only update if we're still loading (prevents race conditions when teamId changes)
93
- if (currentTeamState.loading) {
94
- setState({
95
- teams: {
96
- ...currentState.teams,
97
- [teamId]: {
98
- ...currentTeamState,
99
- teamContainers: containers,
100
- loading: false,
101
- error: null,
102
- hasLoaded: true,
103
- teamId
104
- }
105
- }
106
- });
107
- }
108
- } catch (err) {
109
- fireAnalyticsNext('operational.fetchTeamContainers.failed', {
110
- teamId,
111
- error: getErrorDetails(err)
112
- });
113
-
114
- // Get fresh state after async operation
115
- const currentState = getState();
116
- if (!currentState.teams[teamId]) {
117
- return;
118
- }
119
- setState({
120
- teams: {
121
- ...currentState.teams,
122
- [teamId]: {
123
- ...currentState.teams[teamId],
124
- teamContainers: [],
125
- error: normalizeError(err),
126
- loading: false,
127
- hasLoaded: true,
128
- teamId
129
- }
130
- }
131
- });
132
- }
133
- },
134
- refetchTeamContainers: (teamId, fireAnalytics, fireAnalyticsNext) => async ({
135
- setState,
136
- getState
137
- }) => {
138
- const {
139
- teams
140
- } = getState();
141
- const currentTeamState = teams[teamId];
142
- if (!currentTeamState) {
143
- return;
144
- }
145
- try {
146
- const containers = await teamsClient.getTeamContainers(teamId);
147
- fireAnalyticsNext('operational.refetchTeamContainers.succeeded', {
148
- teamId
149
- });
150
- if (!containersEqual(containers, currentTeamState.teamContainers)) {
151
- setState({
152
- teams: {
153
- ...teams,
154
- [teamId]: {
155
- ...currentTeamState,
156
- teamContainers: containers,
157
- loading: false,
158
- error: null,
159
- hasLoaded: true,
160
- teamId
161
- }
162
- }
163
- });
164
- }
165
- } catch (err) {
166
- fireAnalyticsNext('operational.refetchTeamContainers.failed', {
167
- teamId,
168
- error: getErrorDetails(err)
169
- });
170
- setState({
171
- teams: {
172
- ...teams,
173
- [teamId]: {
174
- ...currentTeamState,
175
- error: normalizeError(err),
176
- loading: false,
177
- hasLoaded: true,
178
- teamId
179
- }
180
- }
181
- });
182
- }
183
- },
184
- fetchNumberOfConnectedTeams: (teamId, containerId, fireAnalytics, fireAnalyticsNext) => async ({
185
- setState,
186
- getState
187
- }) => {
188
- const {
189
- teams
190
- } = getState();
191
- const currentTeamState = teams[teamId];
192
- if (!currentTeamState) {
193
- return;
194
- }
195
- const {
196
- connectedTeams: {
197
- containerId: currentContainerId
198
- }
199
- } = currentTeamState;
200
- if (currentContainerId === containerId) {
201
- return;
202
- }
203
- setState({
204
- teams: {
205
- ...teams,
206
- [teamId]: {
207
- ...currentTeamState,
208
- connectedTeams: {
209
- ...initialConnectedTeamsState,
210
- containerId,
211
- numberOfTeams: undefined
212
- }
213
- }
214
- }
215
- });
216
- try {
217
- const numberOfTeams = await teamsClient.getNumberOfConnectedTeams(containerId);
218
- fireAnalyticsNext('operational.fetchNumberOfConnectedTeams.succeeded', {
219
- numberOfTeams,
220
- containerId
221
- });
222
- const currentState = getState();
223
- const updatedTeamState = currentState.teams[teamId];
224
- if (updatedTeamState) {
225
- setState({
226
- teams: {
227
- ...currentState.teams,
228
- [teamId]: {
229
- ...updatedTeamState,
230
- connectedTeams: {
231
- ...initialConnectedTeamsState,
232
- containerId,
233
- numberOfTeams,
234
- hasLoaded: true
235
- }
236
- }
237
- }
238
- });
239
- }
240
- } catch (e) {
241
- fireAnalyticsNext('operational.fetchNumberOfConnectedTeams.failed', {
242
- numberOfTeams: initialConnectedTeamsState.numberOfTeams || null,
243
- containerId,
244
- error: getErrorDetails(e)
245
- });
246
- const currentState = getState();
247
- const updatedTeamState = currentState.teams[teamId];
248
- if (updatedTeamState) {
249
- setState({
250
- teams: {
251
- ...currentState.teams,
252
- [teamId]: {
253
- ...updatedTeamState,
254
- connectedTeams: {
255
- ...initialConnectedTeamsState,
256
- containerId,
257
- error: normalizeError(e)
258
- }
259
- }
260
- }
261
- });
262
- }
263
- }
264
- },
265
- fetchConnectedTeams: (teamId, containerId, fireAnalytics, fireAnalyticsNext) => async ({
266
- setState,
267
- getState
268
- }) => {
269
- const {
270
- teams
271
- } = getState();
272
- const currentTeamState = teams[teamId];
273
- if (!currentTeamState) {
274
- return;
275
- }
276
- const {
277
- connectedTeams: {
278
- containerId: currentContainerId,
279
- numberOfTeams,
280
- hasLoaded
281
- }
282
- } = currentTeamState;
283
- if (currentContainerId === containerId && hasLoaded) {
284
- return;
285
- }
286
- setState({
287
- teams: {
288
- ...teams,
289
- [teamId]: {
290
- ...currentTeamState,
291
- connectedTeams: {
292
- containerId,
293
- isLoading: true,
294
- hasLoaded: false,
295
- teams: undefined,
296
- error: null,
297
- numberOfTeams
298
- }
299
- }
300
- }
301
- });
302
- try {
303
- const teamsResult = await teamsClient.getConnectedTeams(containerId);
304
- fireAnalyticsNext('operational.fetchConnectedTeams.succeeded', {
305
- numberOfTeams: numberOfTeams || null,
306
- containerId
307
- });
308
- const currentState = getState();
309
- const updatedTeamState = currentState.teams[teamId];
310
- if (updatedTeamState) {
311
- setState({
312
- teams: {
313
- ...currentState.teams,
314
- [teamId]: {
315
- ...updatedTeamState,
316
- connectedTeams: {
317
- containerId,
318
- isLoading: false,
319
- hasLoaded: true,
320
- teams: teamsResult,
321
- error: null,
322
- numberOfTeams
323
- }
324
- }
325
- }
326
- });
327
- }
328
- } catch (e) {
329
- fireAnalyticsNext('operational.fetchConnectedTeams.failed', {
330
- numberOfTeams: numberOfTeams || null,
331
- containerId,
332
- error: getErrorDetails(e)
333
- });
334
- const currentState = getState();
335
- const updatedTeamState = currentState.teams[teamId];
336
- if (updatedTeamState) {
337
- setState({
338
- teams: {
339
- ...currentState.teams,
340
- [teamId]: {
341
- ...updatedTeamState,
342
- connectedTeams: {
343
- containerId,
344
- isLoading: false,
345
- hasLoaded: false,
346
- teams: [],
347
- error: normalizeError(e),
348
- numberOfTeams
349
- }
350
- }
351
- }
352
- });
353
- }
354
- }
355
- },
356
- unlinkTeamContainers: (teamId, containerId) => async ({
357
- setState,
358
- getState
359
- }) => {
360
- const {
361
- teams
362
- } = getState();
363
- const currentTeamState = teams[teamId];
364
- if (currentTeamState) {
365
- setState({
366
- teams: {
367
- ...teams,
368
- [teamId]: {
369
- ...currentTeamState,
370
- unlinkError: null
371
- }
372
- }
373
- });
374
- }
375
- try {
376
- const mutationResult = await teamsClient.unlinkTeamContainer(teamId, containerId);
377
- const currentState = getState();
378
- const updatedTeamState = currentState.teams[teamId];
379
- if (!updatedTeamState) {
380
- return;
381
- }
382
- if (mutationResult.deleteTeamConnectedToContainer.errors.length) {
383
- // Just handle 1 error at a time should be sufficient as we disconnect only 1 container at a time
384
- setState({
385
- teams: {
386
- ...currentState.teams,
387
- [teamId]: {
388
- ...updatedTeamState,
389
- unlinkError: mutationResult.deleteTeamConnectedToContainer.errors[0]
390
- }
391
- }
392
- });
393
- } else {
394
- const newContainers = updatedTeamState.teamContainers.filter(container => container.id !== containerId);
395
- const shouldResetConnectedTeams = updatedTeamState.connectedTeams.containerId === containerId;
396
- setState({
397
- teams: {
398
- ...currentState.teams,
399
- [teamId]: {
400
- ...updatedTeamState,
401
- teamContainers: newContainers,
402
- ...(shouldResetConnectedTeams && {
403
- connectedTeams: initialConnectedTeamsState
404
- }),
405
- unlinkError: null
406
- }
407
- }
408
- });
409
- }
410
- } catch (err) {
411
- const currentState = getState();
412
- const updatedTeamState = currentState.teams[teamId];
413
- if (updatedTeamState) {
414
- setState({
415
- teams: {
416
- ...currentState.teams,
417
- [teamId]: {
418
- ...updatedTeamState,
419
- unlinkError: normalizeError(err)
420
- }
421
- }
422
- });
423
- }
424
- }
425
- },
426
- addTeamContainer: (teamId, teamContainer) => async ({
427
- setState,
428
- getState
429
- }) => {
430
- const {
431
- teams
432
- } = getState();
433
- const currentTeamState = teams[teamId];
434
- if (!currentTeamState) {
435
- return;
436
- }
437
- const containerExists = currentTeamState.teamContainers.some(container => container.id === teamContainer.id);
438
- if (containerExists) {
439
- return;
440
- }
441
- const shouldResetConnectedTeams = currentTeamState.connectedTeams.containerId === teamContainer.id;
442
- setState({
443
- teams: {
444
- ...teams,
445
- [teamId]: {
446
- ...currentTeamState,
447
- teamContainers: [...currentTeamState.teamContainers, teamContainer],
448
- ...(shouldResetConnectedTeams && {
449
- connectedTeams: initialConnectedTeamsState
450
- }),
451
- teamId
452
- }
453
- }
454
- });
455
- }
456
- };
457
7
  const Store = createStore({
458
8
  initialState,
459
9
  actions,
460
10
  name: 'multiTeamContainersStore'
461
11
  });
462
- export const useTeamContainersHook = createHook(Store);
463
- export const useTeamContainers = (teamId, enable = true) => {
464
- const [state, actions] = useTeamContainersHook();
465
- const {
466
- fireOperationalEvent
467
- } = usePeopleAndTeamAnalytics();
468
- const {
469
- createAnalyticsEvent
470
- } = useAnalyticsEvents();
471
- const {
472
- fireEvent
473
- } = useAnalyticsEventsNext();
474
- const fireOperationalAnalytics = useCallback((action, actionSubject, error) => {
475
- fireOperationalEvent(createAnalyticsEvent, {
476
- action: action,
477
- actionSubject: actionSubject,
478
- attributes: {
479
- teamId,
480
- ...(error && {
481
- error: getErrorDetails(error)
482
- })
483
- }
484
- });
485
- }, [fireOperationalEvent, createAnalyticsEvent, teamId]);
486
- useEffect(() => {
487
- if (enable) {
488
- // Get fresh state to ensure we're checking the correct team
489
- const currentState = state;
490
- const teamState = currentState.teams[teamId];
491
- // Only fetch if not already loaded or loading
492
- if (!(teamState !== null && teamState !== void 0 && teamState.hasLoaded) && !(teamState !== null && teamState !== void 0 && teamState.loading)) {
493
- actions.fetchTeamContainers(teamId, fireOperationalAnalytics, fireEvent);
494
- }
495
- }
496
- // eslint-disable-next-line react-hooks/exhaustive-deps
497
- }, [teamId, enable]);
498
- const refetchTeamContainers = useCallback(async () => actions.refetchTeamContainers(teamId, fireOperationalAnalytics, fireEvent), [teamId, actions, fireOperationalAnalytics, fireEvent]);
499
-
500
- // Always get the state for the specific teamId to avoid showing wrong team's data
501
- const teamState = state.teams[teamId] || getInitialTeamState();
502
- return {
503
- teamContainers: teamState.teamContainers,
504
- loading: teamState.loading,
505
- hasLoaded: teamState.hasLoaded,
506
- error: teamState.error,
507
- unlinkError: teamState.unlinkError,
508
- teamId: teamState.teamId,
509
- connectedTeams: teamState.connectedTeams,
510
- addTeamContainer: teamContainer => actions.addTeamContainer(teamId, teamContainer),
511
- unlinkTeamContainers: containerId => actions.unlinkTeamContainers(teamId, containerId),
512
- refetchTeamContainers
513
- };
514
- };
515
- export const useConnectedTeams = teamId => {
516
- const [state, actions] = useTeamContainersHook();
517
- const {
518
- fireOperationalEvent
519
- } = usePeopleAndTeamAnalytics();
520
- const {
521
- createAnalyticsEvent
522
- } = useAnalyticsEvents();
523
- const {
524
- fireEvent
525
- } = useAnalyticsEventsNext();
526
- const fireOperationalAnalytics = useCallback(({
527
- action,
528
- actionSubject,
529
- containerId,
530
- numberOfTeams,
531
- error
532
- }) => {
533
- fireOperationalEvent(createAnalyticsEvent, {
534
- action: action,
535
- actionSubject: actionSubject,
536
- attributes: {
537
- containerId,
538
- numberOfTeams,
539
- ...(error && {
540
- error: getErrorDetails(error)
541
- })
542
- }
543
- });
544
- }, [fireOperationalEvent, createAnalyticsEvent]);
545
- const teamState = state.teams[teamId] || getInitialTeamState();
546
- return {
547
- ...teamState.connectedTeams,
548
- fetchNumberOfConnectedTeams: containerId => actions.fetchNumberOfConnectedTeams(teamId, containerId, fireOperationalAnalytics, fireEvent),
549
- fetchConnectedTeams: containerId => actions.fetchConnectedTeams(teamId, containerId, fireOperationalAnalytics, fireEvent)
550
- };
551
- };
12
+ export const useTeamContainersHook = createHook(Store);
@@ -0,0 +1,6 @@
1
+ export function normalizeError(err) {
2
+ if (err instanceof Error) {
3
+ return err;
4
+ }
5
+ return new Error(typeof err === 'string' ? err : JSON.stringify(err));
6
+ }
@@ -0,0 +1,17 @@
1
+ import { createStore } from 'react-sweet-state';
2
+ import { actions } from './actions';
3
+ import { initialConnectedTeamsState } from './initial-connected-teams-state';
4
+ const initialState = {
5
+ teamContainers: [],
6
+ loading: true,
7
+ hasLoaded: false,
8
+ error: null,
9
+ unlinkError: null,
10
+ teamId: null,
11
+ connectedTeams: initialConnectedTeamsState
12
+ };
13
+ export const TeamContainersStore = createStore({
14
+ initialState,
15
+ actions,
16
+ name: 'teamContainersStore'
17
+ });
@@ -0,0 +1,44 @@
1
+ import { useCallback } 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 useConnectedTeams = teamId => {
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(({
20
+ action,
21
+ actionSubject,
22
+ containerId,
23
+ numberOfTeams,
24
+ error
25
+ }) => {
26
+ fireOperationalEvent(createAnalyticsEvent, {
27
+ action: action,
28
+ actionSubject: actionSubject,
29
+ attributes: {
30
+ containerId,
31
+ numberOfTeams,
32
+ ...(error && {
33
+ error: getErrorDetails(error)
34
+ })
35
+ }
36
+ });
37
+ }, [fireOperationalEvent, createAnalyticsEvent]);
38
+ const teamState = state.teams[teamId] || getInitialTeamState();
39
+ return {
40
+ ...teamState.connectedTeams,
41
+ fetchNumberOfConnectedTeams: containerId => actions.fetchNumberOfConnectedTeams(teamId, containerId, fireOperationalAnalytics, fireEvent),
42
+ fetchConnectedTeams: containerId => actions.fetchConnectedTeams(teamId, containerId, fireOperationalAnalytics, fireEvent)
43
+ };
44
+ };
@@ -0,0 +1,20 @@
1
+ import { fg } from '@atlaskit/platform-feature-flags';
2
+ import { useAnalyticsEvents } from '@atlaskit/teams-app-internal-analytics';
3
+ import { useConnectedTeams as useConnectedTeamsMulti } from './use-connected-teams-2';
4
+ import { useTeamContainersHook } from './use-team-containers-hook';
5
+ export const useConnectedTeams = teamId => {
6
+ const [state, actions] = useTeamContainersHook();
7
+ const useMultiTeam = fg('enable_multi_team_containers_state');
8
+ const multiTeamResult = useConnectedTeamsMulti(useMultiTeam ? teamId || '' : '');
9
+ const {
10
+ fireEvent
11
+ } = useAnalyticsEvents();
12
+ if (useMultiTeam) {
13
+ return multiTeamResult;
14
+ }
15
+ return {
16
+ ...state.connectedTeams,
17
+ fetchNumberOfConnectedTeams: containerId => actions.fetchNumberOfConnectedTeams(containerId, fireEvent),
18
+ fetchConnectedTeams: containerId => actions.fetchConnectedTeams(containerId, fireEvent)
19
+ };
20
+ };