@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,260 @@
1
+ import { teamsClient } from '@atlaskit/teams-client';
2
+ import { containersDeepEqual } from './containers-deep-equal';
3
+ import { initialConnectedTeamsState } from './initial-connected-teams-state';
4
+ export const actions = {
5
+ fetchTeamContainers: (teamId, fireAnalytics) => async ({
6
+ setState,
7
+ getState
8
+ }) => {
9
+ const {
10
+ teamId: currentTeamId
11
+ } = getState();
12
+ if (currentTeamId === teamId) {
13
+ return;
14
+ }
15
+ setState({
16
+ loading: true,
17
+ error: null,
18
+ teamContainers: [],
19
+ teamId,
20
+ hasLoaded: false
21
+ });
22
+ try {
23
+ const containers = await teamsClient.getTeamContainers(teamId);
24
+ fireAnalytics('operational.fetchTeamContainers.succeeded', {
25
+ teamId
26
+ });
27
+ setState({
28
+ teamContainers: containers,
29
+ loading: false,
30
+ error: null,
31
+ hasLoaded: true
32
+ });
33
+ } catch (err) {
34
+ fireAnalytics('operational.fetchTeamContainers.failed', {
35
+ teamId,
36
+ error: {
37
+ message: err.message || JSON.stringify(err),
38
+ stack: err.stack
39
+ }
40
+ });
41
+ setState({
42
+ teamContainers: [],
43
+ error: err,
44
+ loading: false,
45
+ hasLoaded: true
46
+ });
47
+ }
48
+ },
49
+ refetchTeamContainers: fireAnalytics => async ({
50
+ setState,
51
+ getState
52
+ }) => {
53
+ const {
54
+ teamId
55
+ } = getState();
56
+ if (!teamId) {
57
+ return;
58
+ }
59
+ try {
60
+ const containers = await teamsClient.getTeamContainers(teamId);
61
+ fireAnalytics('operational.refetchTeamContainers.succeeded', {
62
+ teamId
63
+ });
64
+ // optimisation to avoid unnecessary state updates
65
+ if (!containersDeepEqual(containers, getState().teamContainers)) {
66
+ setState({
67
+ teamContainers: containers,
68
+ loading: false,
69
+ error: null,
70
+ hasLoaded: true
71
+ });
72
+ }
73
+ } catch (err) {
74
+ fireAnalytics('operational.refetchTeamContainers.failed', {
75
+ teamId,
76
+ error: {
77
+ message: err.message || JSON.stringify(err),
78
+ stack: err.stack
79
+ }
80
+ });
81
+ setState({
82
+ teamContainers: getState().teamContainers,
83
+ error: err,
84
+ loading: false,
85
+ hasLoaded: true
86
+ });
87
+ }
88
+ },
89
+ fetchNumberOfConnectedTeams: (containerId, fireAnalytics) => async ({
90
+ setState,
91
+ getState
92
+ }) => {
93
+ const {
94
+ connectedTeams: {
95
+ containerId: currentContainerId
96
+ }
97
+ } = getState();
98
+ if (currentContainerId === containerId) {
99
+ return;
100
+ }
101
+ setState({
102
+ connectedTeams: {
103
+ ...initialConnectedTeamsState,
104
+ containerId,
105
+ numberOfTeams: undefined
106
+ }
107
+ });
108
+ try {
109
+ const numberOfTeams = await teamsClient.getNumberOfConnectedTeams(containerId);
110
+ fireAnalytics('operational.fetchNumberOfConnectedTeams.succeeded', {
111
+ numberOfTeams,
112
+ containerId
113
+ });
114
+ setState({
115
+ connectedTeams: {
116
+ ...initialConnectedTeamsState,
117
+ containerId,
118
+ numberOfTeams
119
+ }
120
+ });
121
+ } catch (e) {
122
+ fireAnalytics('operational.fetchNumberOfConnectedTeams.failed', {
123
+ numberOfTeams: initialConnectedTeamsState.numberOfTeams || null,
124
+ containerId,
125
+ error: {
126
+ message: e.message || JSON.stringify(e),
127
+ stack: e.stack
128
+ }
129
+ });
130
+ setState({
131
+ connectedTeams: {
132
+ ...initialConnectedTeamsState,
133
+ containerId,
134
+ error: e
135
+ }
136
+ });
137
+ }
138
+ },
139
+ fetchConnectedTeams: (containerId, fireAnalytics) => async ({
140
+ setState,
141
+ getState
142
+ }) => {
143
+ const {
144
+ connectedTeams: {
145
+ containerId: currentContainerId,
146
+ numberOfTeams,
147
+ hasLoaded
148
+ }
149
+ } = getState();
150
+ if (currentContainerId === containerId && hasLoaded) {
151
+ return;
152
+ }
153
+ setState({
154
+ connectedTeams: {
155
+ containerId,
156
+ isLoading: true,
157
+ hasLoaded: false,
158
+ teams: undefined,
159
+ error: null,
160
+ numberOfTeams
161
+ }
162
+ });
163
+ try {
164
+ const teams = await teamsClient.getConnectedTeams(containerId);
165
+ fireAnalytics('operational.fetchConnectedTeams.succeeded', {
166
+ numberOfTeams: numberOfTeams || null,
167
+ containerId
168
+ });
169
+ setState({
170
+ connectedTeams: {
171
+ containerId,
172
+ isLoading: false,
173
+ hasLoaded: true,
174
+ teams,
175
+ error: null,
176
+ numberOfTeams
177
+ }
178
+ });
179
+ } catch (e) {
180
+ fireAnalytics('operational.fetchConnectedTeams.failed', {
181
+ numberOfTeams: numberOfTeams || null,
182
+ containerId,
183
+ error: {
184
+ message: e.message || JSON.stringify(e),
185
+ stack: e.stack
186
+ }
187
+ });
188
+ setState({
189
+ connectedTeams: {
190
+ containerId,
191
+ isLoading: false,
192
+ hasLoaded: false,
193
+ teams: [],
194
+ error: e,
195
+ numberOfTeams
196
+ }
197
+ });
198
+ }
199
+ },
200
+ unlinkTeamContainers: (teamId, containerId) => async ({
201
+ setState,
202
+ getState
203
+ }) => {
204
+ setState({
205
+ unlinkError: null
206
+ });
207
+ try {
208
+ const mutationResult = await teamsClient.unlinkTeamContainer(teamId, containerId);
209
+ if (mutationResult.deleteTeamConnectedToContainer.errors.length) {
210
+ // Just handle 1 error at a time should be suffcient as we disconenct only 1 container at a time
211
+ setState({
212
+ unlinkError: mutationResult.deleteTeamConnectedToContainer.errors[0]
213
+ });
214
+ } else {
215
+ const {
216
+ teamContainers,
217
+ connectedTeams
218
+ } = getState();
219
+ const newContainers = teamContainers.filter(container => container.id !== containerId);
220
+ if (connectedTeams.containerId === containerId) {
221
+ setState({
222
+ teamContainers: newContainers,
223
+ connectedTeams: initialConnectedTeamsState
224
+ });
225
+ } else {
226
+ setState({
227
+ teamContainers: newContainers
228
+ });
229
+ }
230
+ }
231
+ } catch (err) {
232
+ setState({
233
+ unlinkError: err
234
+ });
235
+ }
236
+ },
237
+ addTeamContainer: teamContainer => async ({
238
+ setState,
239
+ getState
240
+ }) => {
241
+ const {
242
+ teamContainers,
243
+ connectedTeams
244
+ } = getState();
245
+ const containerExists = teamContainers.some(container => container.id === teamContainer.id);
246
+ if (containerExists) {
247
+ return;
248
+ }
249
+ if (connectedTeams.containerId === teamContainer.id) {
250
+ setState({
251
+ teamContainers: [...teamContainers, teamContainer],
252
+ connectedTeams: initialConnectedTeamsState
253
+ });
254
+ } else {
255
+ setState({
256
+ teamContainers: [...teamContainers, teamContainer]
257
+ });
258
+ }
259
+ }
260
+ };
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Compares two container lists for deep equality, ignoring order.
3
+ *
4
+ * 1. Sorts both lists by `id`.
5
+ * 2. Serialises each and compares the results, so a change to any field counts as a difference.
6
+ *
7
+ * Contrast with `containersEqual` in `./containers-equal`, which compares `id` alone and so
8
+ * treats two lists of the same containers as equal even when their contents differ.
9
+ */
10
+ export function containersDeepEqual(arr1, arr2) {
11
+ const sortById = (a, b) => a.id.localeCompare(b.id);
12
+ return JSON.stringify([...arr1].sort(sortById)) === JSON.stringify([...arr2].sort(sortById));
13
+ }
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Compares two container lists by id, ignoring order.
3
+ *
4
+ * 1. Returns false immediately if the lengths differ.
5
+ * 2. Sorts both lists by `id` and compares ids pairwise, so field-level changes are ignored.
6
+ *
7
+ * Contrast with `containersDeepEqual` in `./containers-deep-equal`, which also compares contents.
8
+ */
9
+ export function containersEqual(arr1, arr2) {
10
+ if (arr1.length !== arr2.length) {
11
+ return false;
12
+ }
13
+ const sortById = (a, b) => a.id.localeCompare(b.id);
14
+ const sorted1 = [...arr1].sort(sortById);
15
+ const sorted2 = [...arr2].sort(sortById);
16
+ return sorted1.every((item, index) => item.id === sorted2[index].id);
17
+ }
@@ -0,0 +1,8 @@
1
+ import { normalizeError } from './normalize-error';
2
+ export function getErrorDetails(err) {
3
+ const error = normalizeError(err);
4
+ return {
5
+ message: error.message,
6
+ stack: error.stack
7
+ };
8
+ }
@@ -0,0 +1,10 @@
1
+ import { initialConnectedTeamsState } from './initial-connected-teams-state';
2
+ export const getInitialTeamState = () => ({
3
+ teamContainers: [],
4
+ loading: false,
5
+ hasLoaded: false,
6
+ error: null,
7
+ unlinkError: null,
8
+ teamId: null,
9
+ connectedTeams: initialConnectedTeamsState
10
+ });
@@ -1,329 +1,13 @@
1
- import { useCallback, useEffect } from 'react';
2
- import { createHook, createStore } from 'react-sweet-state';
3
- import { fg } from '@atlaskit/platform-feature-flags';
4
- import { useAnalyticsEvents } from '@atlaskit/teams-app-internal-analytics';
5
- import { teamsClient } from '@atlaskit/teams-client';
6
- import { useConnectedTeams as useConnectedTeamsMulti, useTeamContainers as useTeamContainersMulti } from './multi-team';
7
- const initialConnectedTeamsState = {
8
- containerId: undefined,
9
- isLoading: false,
10
- hasLoaded: false,
11
- teams: undefined,
12
- error: null,
13
- numberOfTeams: undefined
14
- };
15
- const initialState = {
16
- teamContainers: [],
17
- loading: true,
18
- hasLoaded: false,
19
- error: null,
20
- unlinkError: null,
21
- teamId: null,
22
- connectedTeams: initialConnectedTeamsState
23
- };
24
- function containersEqual(arr1, arr2) {
25
- const sortById = (a, b) => a.id.localeCompare(b.id);
26
- return JSON.stringify([...arr1].sort(sortById)) === JSON.stringify([...arr2].sort(sortById));
27
- }
28
- const actions = {
29
- fetchTeamContainers: (teamId, fireAnalytics) => async ({
30
- setState,
31
- getState
32
- }) => {
33
- const {
34
- teamId: currentTeamId
35
- } = getState();
36
- if (currentTeamId === teamId) {
37
- return;
38
- }
39
- setState({
40
- loading: true,
41
- error: null,
42
- teamContainers: [],
43
- teamId,
44
- hasLoaded: false
45
- });
46
- try {
47
- const containers = await teamsClient.getTeamContainers(teamId);
48
- fireAnalytics('operational.fetchTeamContainers.succeeded', {
49
- teamId
50
- });
51
- setState({
52
- teamContainers: containers,
53
- loading: false,
54
- error: null,
55
- hasLoaded: true
56
- });
57
- } catch (err) {
58
- fireAnalytics('operational.fetchTeamContainers.failed', {
59
- teamId,
60
- error: {
61
- message: err.message || JSON.stringify(err),
62
- stack: err.stack
63
- }
64
- });
65
- setState({
66
- teamContainers: [],
67
- error: err,
68
- loading: false,
69
- hasLoaded: true
70
- });
71
- }
72
- },
73
- refetchTeamContainers: fireAnalytics => async ({
74
- setState,
75
- getState
76
- }) => {
77
- const {
78
- teamId
79
- } = getState();
80
- if (!teamId) {
81
- return;
82
- }
83
- try {
84
- const containers = await teamsClient.getTeamContainers(teamId);
85
- fireAnalytics('operational.refetchTeamContainers.succeeded', {
86
- teamId
87
- });
88
- // optimisation to avoid unnecessary state updates
89
- if (!containersEqual(containers, getState().teamContainers)) {
90
- setState({
91
- teamContainers: containers,
92
- loading: false,
93
- error: null,
94
- hasLoaded: true
95
- });
96
- }
97
- } catch (err) {
98
- fireAnalytics('operational.refetchTeamContainers.failed', {
99
- teamId,
100
- error: {
101
- message: err.message || JSON.stringify(err),
102
- stack: err.stack
103
- }
104
- });
105
- setState({
106
- teamContainers: getState().teamContainers,
107
- error: err,
108
- loading: false,
109
- hasLoaded: true
110
- });
111
- }
112
- },
113
- fetchNumberOfConnectedTeams: (containerId, fireAnalytics) => async ({
114
- setState,
115
- getState
116
- }) => {
117
- const {
118
- connectedTeams: {
119
- containerId: currentContainerId
120
- }
121
- } = getState();
122
- if (currentContainerId === containerId) {
123
- return;
124
- }
125
- setState({
126
- connectedTeams: {
127
- ...initialConnectedTeamsState,
128
- containerId,
129
- numberOfTeams: undefined
130
- }
131
- });
132
- try {
133
- const numberOfTeams = await teamsClient.getNumberOfConnectedTeams(containerId);
134
- fireAnalytics('operational.fetchNumberOfConnectedTeams.succeeded', {
135
- numberOfTeams,
136
- containerId
137
- });
138
- setState({
139
- connectedTeams: {
140
- ...initialConnectedTeamsState,
141
- containerId,
142
- numberOfTeams
143
- }
144
- });
145
- } catch (e) {
146
- fireAnalytics('operational.fetchNumberOfConnectedTeams.failed', {
147
- numberOfTeams: initialConnectedTeamsState.numberOfTeams || null,
148
- containerId,
149
- error: {
150
- message: e.message || JSON.stringify(e),
151
- stack: e.stack
152
- }
153
- });
154
- setState({
155
- connectedTeams: {
156
- ...initialConnectedTeamsState,
157
- containerId,
158
- error: e
159
- }
160
- });
161
- }
162
- },
163
- fetchConnectedTeams: (containerId, fireAnalytics) => async ({
164
- setState,
165
- getState
166
- }) => {
167
- const {
168
- connectedTeams: {
169
- containerId: currentContainerId,
170
- numberOfTeams,
171
- hasLoaded
172
- }
173
- } = getState();
174
- if (currentContainerId === containerId && hasLoaded) {
175
- return;
176
- }
177
- setState({
178
- connectedTeams: {
179
- containerId,
180
- isLoading: true,
181
- hasLoaded: false,
182
- teams: undefined,
183
- error: null,
184
- numberOfTeams
185
- }
186
- });
187
- try {
188
- const teams = await teamsClient.getConnectedTeams(containerId);
189
- fireAnalytics('operational.fetchConnectedTeams.succeeded', {
190
- numberOfTeams: numberOfTeams || null,
191
- containerId
192
- });
193
- setState({
194
- connectedTeams: {
195
- containerId,
196
- isLoading: false,
197
- hasLoaded: true,
198
- teams,
199
- error: null,
200
- numberOfTeams
201
- }
202
- });
203
- } catch (e) {
204
- fireAnalytics('operational.fetchConnectedTeams.failed', {
205
- numberOfTeams: numberOfTeams || null,
206
- containerId,
207
- error: {
208
- message: e.message || JSON.stringify(e),
209
- stack: e.stack
210
- }
211
- });
212
- setState({
213
- connectedTeams: {
214
- containerId,
215
- isLoading: false,
216
- hasLoaded: false,
217
- teams: [],
218
- error: e,
219
- numberOfTeams
220
- }
221
- });
222
- }
223
- },
224
- unlinkTeamContainers: (teamId, containerId) => async ({
225
- setState,
226
- getState
227
- }) => {
228
- setState({
229
- unlinkError: null
230
- });
231
- try {
232
- const mutationResult = await teamsClient.unlinkTeamContainer(teamId, containerId);
233
- if (mutationResult.deleteTeamConnectedToContainer.errors.length) {
234
- // Just handle 1 error at a time should be suffcient as we disconenct only 1 container at a time
235
- setState({
236
- unlinkError: mutationResult.deleteTeamConnectedToContainer.errors[0]
237
- });
238
- } else {
239
- const {
240
- teamContainers,
241
- connectedTeams
242
- } = getState();
243
- const newContainers = teamContainers.filter(container => container.id !== containerId);
244
- if (connectedTeams.containerId === containerId) {
245
- setState({
246
- teamContainers: newContainers,
247
- connectedTeams: initialConnectedTeamsState
248
- });
249
- } else {
250
- setState({
251
- teamContainers: newContainers
252
- });
253
- }
254
- }
255
- } catch (err) {
256
- setState({
257
- unlinkError: err
258
- });
259
- }
260
- },
261
- addTeamContainer: teamContainer => async ({
262
- setState,
263
- getState
264
- }) => {
265
- const {
266
- teamContainers,
267
- connectedTeams
268
- } = getState();
269
- const containerExists = teamContainers.some(container => container.id === teamContainer.id);
270
- if (containerExists) {
271
- return;
272
- }
273
- if (connectedTeams.containerId === teamContainer.id) {
274
- setState({
275
- teamContainers: [...teamContainers, teamContainer],
276
- connectedTeams: initialConnectedTeamsState
277
- });
278
- } else {
279
- setState({
280
- teamContainers: [...teamContainers, teamContainer]
281
- });
282
- }
283
- }
284
- };
285
- const Store = createStore({
286
- initialState,
287
- actions,
288
- name: 'teamContainersStore'
289
- });
290
- export const useTeamContainersHook = createHook(Store);
291
- export const useTeamContainers = (teamId, enable = true) => {
292
- const [state, actions] = useTeamContainersHook();
293
- const useMultiTeam = fg('enable_multi_team_containers_state');
294
- const multiTeamResult = useTeamContainersMulti(teamId, useMultiTeam ? enable : false);
295
- const {
296
- fireEvent
297
- } = useAnalyticsEvents();
298
- useEffect(() => {
299
- if (enable && !useMultiTeam) {
300
- actions.fetchTeamContainers(teamId, fireEvent);
301
- }
302
- }, [teamId, actions, enable, fireEvent, useMultiTeam]);
303
- const refetchTeamContainers = useCallback(async () => actions.refetchTeamContainers(fireEvent), [actions, fireEvent]);
304
- if (useMultiTeam) {
305
- return multiTeamResult;
306
- }
307
- return {
308
- ...state,
309
- addTeamContainer: actions.addTeamContainer,
310
- unlinkTeamContainers: containerId => actions.unlinkTeamContainers(teamId, containerId),
311
- refetchTeamContainers
312
- };
313
- };
314
- export const useConnectedTeams = teamId => {
315
- const [state, actions] = useTeamContainersHook();
316
- const useMultiTeam = fg('enable_multi_team_containers_state');
317
- const multiTeamResult = useConnectedTeamsMulti(useMultiTeam ? teamId || '' : '');
318
- const {
319
- fireEvent
320
- } = useAnalyticsEvents();
321
- if (useMultiTeam) {
322
- return multiTeamResult;
323
- }
324
- return {
325
- ...state.connectedTeams,
326
- fetchNumberOfConnectedTeams: containerId => actions.fetchNumberOfConnectedTeams(containerId, fireEvent),
327
- fetchConnectedTeams: containerId => actions.fetchConnectedTeams(containerId, fireEvent)
328
- };
329
- };
1
+ /* eslint-disable @repo/internal/deprecations/deprecation-ticket-required -- VOLTC-139 tracks removal of these deprecated re-export shims. */
2
+ /**
3
+ * @deprecated Use `import { useTeamContainersHook } from '@atlaskit/teams-public/use-team-containers/use-team-containers-hook'` instead.
4
+ */
5
+ export { useTeamContainersHook } from './use-team-containers-hook';
6
+ /**
7
+ * @deprecated Use `import { useTeamContainers } from '@atlaskit/teams-public/use-team-containers/use-team-containers'` instead.
8
+ */
9
+ export { useTeamContainers } from './use-team-containers';
10
+ /**
11
+ * @deprecated Use `import { useConnectedTeams } from '@atlaskit/teams-public/use-connected-teams'` instead.
12
+ */
13
+ export { useConnectedTeams } from './use-connected-teams';
@@ -0,0 +1,8 @@
1
+ export const initialConnectedTeamsState = {
2
+ containerId: undefined,
3
+ isLoading: false,
4
+ hasLoaded: false,
5
+ teams: undefined,
6
+ error: null,
7
+ numberOfTeams: undefined
8
+ };