@atlaskit/teams-public 0.36.2 → 0.37.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 (34) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/cjs/common/ui/container-icon/index.compiled.css +3 -2
  3. package/dist/cjs/common/ui/container-icon/index.js +38 -16
  4. package/dist/cjs/controllers/hooks/use-team-links-and-containers/index.js +4 -0
  5. package/dist/cjs/controllers/hooks/use-team-web-links/index.js +8 -4
  6. package/dist/cjs/ui/team-containers/add-container-card/index.js +1 -1
  7. package/dist/cjs/ui/team-containers/linked-container-card/index.js +1 -1
  8. package/dist/cjs/ui/team-containers/main.js +7 -1
  9. package/dist/cjs/ui/team-containers/team-link-card/index.js +6 -2
  10. package/dist/es2019/common/ui/container-icon/index.compiled.css +3 -2
  11. package/dist/es2019/common/ui/container-icon/index.js +32 -11
  12. package/dist/es2019/controllers/hooks/use-team-links-and-containers/index.js +5 -1
  13. package/dist/es2019/controllers/hooks/use-team-web-links/index.js +8 -4
  14. package/dist/es2019/ui/team-containers/add-container-card/index.js +1 -1
  15. package/dist/es2019/ui/team-containers/linked-container-card/index.js +1 -1
  16. package/dist/es2019/ui/team-containers/main.js +7 -1
  17. package/dist/es2019/ui/team-containers/team-link-card/index.js +6 -2
  18. package/dist/esm/common/ui/container-icon/index.compiled.css +3 -2
  19. package/dist/esm/common/ui/container-icon/index.js +38 -16
  20. package/dist/esm/controllers/hooks/use-team-links-and-containers/index.js +4 -0
  21. package/dist/esm/controllers/hooks/use-team-web-links/index.js +8 -4
  22. package/dist/esm/ui/team-containers/add-container-card/index.js +1 -1
  23. package/dist/esm/ui/team-containers/linked-container-card/index.js +1 -1
  24. package/dist/esm/ui/team-containers/main.js +7 -1
  25. package/dist/esm/ui/team-containers/team-link-card/index.js +6 -2
  26. package/dist/types/common/ui/container-icon/index.d.ts +3 -1
  27. package/dist/types/controllers/hooks/use-team-links-and-containers/index.d.ts +2 -0
  28. package/dist/types/controllers/hooks/use-team-web-links/types.d.ts +1 -0
  29. package/dist/types/ui/team-containers/team-link-card/index.d.ts +3 -1
  30. package/dist/types-ts4.5/common/ui/container-icon/index.d.ts +3 -1
  31. package/dist/types-ts4.5/controllers/hooks/use-team-links-and-containers/index.d.ts +2 -0
  32. package/dist/types-ts4.5/controllers/hooks/use-team-web-links/types.d.ts +1 -0
  33. package/dist/types-ts4.5/ui/team-containers/team-link-card/index.d.ts +3 -1
  34. package/package.json +2 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @atlaskit/teams-public
2
2
 
3
+ ## 0.37.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#170230](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/pull-requests/170230)
8
+ [`ad865e02e9ef7`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/ad865e02e9ef7) -
9
+ [ux] NO-ISSUE Improve the icon experience by checking its loading state
10
+
11
+ ### Patch Changes
12
+
13
+ - Updated dependencies
14
+
3
15
  ## 0.36.2
4
16
 
5
17
  ### Patch Changes
@@ -1,6 +1,6 @@
1
1
 
2
- ._2rko1hkb{border-radius:var(--ds-border-radius-050,4px)}
3
- ._2rkoop52{border-radius:var(--ds-border-radius-100,8px)}._12jimuej{outline-color:var(--ds-border,#091e4224)}
2
+ ._2rkogqwt{border-radius:var(--ds-border-radius-050,2px)}
3
+ ._2rkopd34{border-radius:var(--ds-border-radius-200,8px)}._12jimuej{outline-color:var(--ds-border,#091e4224)}
4
4
  ._18u0v77o{margin-left:var(--ds-space-025,2px)}
5
5
  ._19pkv77o{margin-top:var(--ds-space-025,2px)}
6
6
  ._1bah1h6o{justify-content:center}
@@ -12,5 +12,6 @@
12
12
  ._4cvr1h6o{align-items:center}
13
13
  ._4t3i1tcg{height:24px}
14
14
  ._4t3i1u1b{height:34px}
15
+ ._bfhkn82g{background-color:var(--ds-skeleton,#091e420f)}
15
16
  ._bfhkqbzx{background-color:var(--ds-surface-sunken,#f7f8f9)}
16
17
  ._otyrv77o{margin-bottom:var(--ds-space-025,2px)}
@@ -14,28 +14,50 @@ var _link = _interopRequireDefault(require("@atlaskit/icon/core/link"));
14
14
  var _compiled = require("@atlaskit/primitives/compiled");
15
15
  var _loomAvatar = require("../loom-avatar");
16
16
  var styles = {
17
- linkIconWrapperMedium: "_2rkoop52 _1bsb1u1b _4t3i1u1b _1e0c1txw _4cvr1h6o _1bah1h6o _12jimuej _1qu2nqa1 _bfhkqbzx",
18
- linkIconWrapperSmall: "_2rko1hkb _1bsb1tcg _4t3i1tcg _1e0c1txw _4cvr1h6o _1bah1h6o _19pkv77o _2hwxv77o _otyrv77o _18u0v77o _12jimuej _1qu2nqa1 _bfhkqbzx"
17
+ linkIconWrapperMedium: "_2rkopd34 _1bsb1u1b _4t3i1u1b _1e0c1txw _4cvr1h6o _1bah1h6o _12jimuej _1qu2nqa1 _bfhkqbzx",
18
+ linkIconWrapperSmall: "_2rkogqwt _1bsb1tcg _4t3i1tcg _1e0c1txw _4cvr1h6o _1bah1h6o _19pkv77o _2hwxv77o _otyrv77o _18u0v77o _12jimuej _1qu2nqa1 _bfhkqbzx",
19
+ skeletonMedium: "_2rkopd34 _bfhkn82g _1bsb1u1b _4t3i1u1b",
20
+ skeletonSmall: "_2rkogqwt _bfhkn82g _1bsb1tcg _4t3i1tcg"
19
21
  };
20
- var ContainerIcon = exports.ContainerIcon = function ContainerIcon(_ref) {
21
- var containerType = _ref.containerType,
22
- title = _ref.title,
23
- containerIcon = _ref.containerIcon,
24
- _ref$size = _ref.size,
25
- size = _ref$size === void 0 ? 'medium' : _ref$size;
22
+ var IconSkeleton = function IconSkeleton(_ref) {
23
+ var size = _ref.size,
24
+ testId = _ref.testId;
25
+ return /*#__PURE__*/_react.default.createElement(_compiled.Box, {
26
+ xcss: size === 'medium' ? styles.skeletonMedium : styles.skeletonSmall,
27
+ testId: "container-icon-skeleton"
28
+ });
29
+ };
30
+ var ContainerIcon = exports.ContainerIcon = function ContainerIcon(_ref2) {
31
+ var containerType = _ref2.containerType,
32
+ title = _ref2.title,
33
+ containerIcon = _ref2.containerIcon,
34
+ _ref2$size = _ref2.size,
35
+ size = _ref2$size === void 0 ? 'medium' : _ref2$size,
36
+ _ref2$iconsLoading = _ref2.iconsLoading,
37
+ iconsLoading = _ref2$iconsLoading === void 0 ? false : _ref2$iconsLoading,
38
+ _ref2$iconHasLoaded = _ref2.iconHasLoaded,
39
+ iconHasLoaded = _ref2$iconHasLoaded === void 0 ? true : _ref2$iconHasLoaded;
40
+ var isMedium = size === 'medium';
26
41
  if (containerType === 'LoomSpace') {
27
42
  return /*#__PURE__*/_react.default.createElement(_loomAvatar.LoomSpaceAvatar, {
28
43
  spaceName: title,
29
- size: size === 'medium' ? 'large' : size
44
+ size: isMedium ? 'large' : size
30
45
  });
31
46
  }
32
- if (containerType === 'WebLink' && !containerIcon) {
33
- return /*#__PURE__*/_react.default.createElement(_compiled.Box, {
34
- xcss: size === 'medium' ? styles.linkIconWrapperMedium : styles.linkIconWrapperSmall
35
- }, /*#__PURE__*/_react.default.createElement(_link.default, {
36
- label: "",
37
- testId: "linked-container-WebLink-icon"
38
- }));
47
+ if (containerType === 'WebLink') {
48
+ if (iconsLoading || !iconHasLoaded) {
49
+ return /*#__PURE__*/_react.default.createElement(IconSkeleton, {
50
+ size: size
51
+ });
52
+ }
53
+ if (!containerIcon) {
54
+ return /*#__PURE__*/_react.default.createElement(_compiled.Box, {
55
+ xcss: isMedium ? styles.linkIconWrapperMedium : styles.linkIconWrapperSmall
56
+ }, /*#__PURE__*/_react.default.createElement(_link.default, {
57
+ label: "",
58
+ testId: "linked-container-WebLink-icon"
59
+ }));
60
+ }
39
61
  }
40
62
  return /*#__PURE__*/_react.default.createElement(_avatar.default, {
41
63
  appearance: "square",
@@ -34,6 +34,8 @@ var useTeamLinksAndContainers = exports.useTeamLinksAndContainers = function use
34
34
  webLinksLoading = _useTeamWebLinks2$.isLoading,
35
35
  webLinksError = _useTeamWebLinks2$.hasError,
36
36
  webLinksHasLoaded = _useTeamWebLinks2$.hasLoaded,
37
+ iconsLoading = _useTeamWebLinks2$.iconsLoading,
38
+ iconHasLoaded = _useTeamWebLinks2$.iconHasLoaded,
37
39
  _useTeamWebLinks2$2 = _useTeamWebLinks2[1],
38
40
  getTeamWebLinks = _useTeamWebLinks2$2.getTeamWebLinks,
39
41
  createTeamWebLink = _useTeamWebLinks2$2.createTeamWebLink,
@@ -160,6 +162,8 @@ var useTeamLinksAndContainers = exports.useTeamLinksAndContainers = function use
160
162
  hasLoaded: containersHasLoaded && webLinksHasLoaded,
161
163
  teamLinks: allContainers,
162
164
  canAddMoreLink: canAddMoreLink,
165
+ iconsLoading: iconsLoading,
166
+ iconHasLoaded: iconHasLoaded,
163
167
  addTeamLink: addTeamLink,
164
168
  updateTeamLinkById: updateTeamLinkById,
165
169
  removeTeamLink: removeTeamLink
@@ -23,7 +23,8 @@ var _initialState = {
23
23
  links: [],
24
24
  linkIcons: [],
25
25
  iconsLoading: false,
26
- iconsError: false
26
+ iconsError: false,
27
+ iconHasLoaded: false
27
28
  };
28
29
  var actions = exports.actions = {
29
30
  getTeamWebLinks: function getTeamWebLinks(teamId) {
@@ -136,7 +137,8 @@ var actions = exports.actions = {
136
137
  setState({
137
138
  linkIcons: [].concat((0, _toConsumableArray2.default)(currentIcons), (0, _toConsumableArray2.default)(newIconData || [])),
138
139
  iconsLoading: false,
139
- iconsError: false
140
+ iconsError: false,
141
+ iconHasLoaded: true
140
142
  });
141
143
  }
142
144
  _context2.next = 18;
@@ -147,7 +149,8 @@ var actions = exports.actions = {
147
149
  if (getState().teamId === teamId) {
148
150
  setState({
149
151
  iconsLoading: false,
150
- iconsError: true
152
+ iconsError: true,
153
+ iconHasLoaded: true
151
154
  });
152
155
  }
153
156
  case 18:
@@ -156,7 +159,8 @@ var actions = exports.actions = {
156
159
  case 20:
157
160
  setState({
158
161
  iconsLoading: false,
159
- iconsError: false
162
+ iconsError: false,
163
+ iconHasLoaded: true
160
164
  });
161
165
  case 21:
162
166
  case "end":
@@ -76,7 +76,7 @@ var AddContainerCard = exports.AddContainerCard = function AddContainerCard(_ref
76
76
  e.stopPropagation();
77
77
  }
78
78
  })), /*#__PURE__*/_react.default.createElement(_compiled.Stack, (0, _platformFeatureFlags.fg)('enable_medium_size_icons_for_team_link_cards') ? {
79
- space: "space.025"
79
+ space: 'space.025'
80
80
  } : {}, /*#__PURE__*/_react.default.createElement(_compiled.Text, {
81
81
  maxLines: 1,
82
82
  weight: "medium",
@@ -140,7 +140,7 @@ var LinkedContainerCard = exports.LinkedContainerCard = function LinkedContainer
140
140
  space: "space.100",
141
141
  xcss: styles.card
142
142
  }, getContainerIcon(containerType, title, containerIcon), /*#__PURE__*/_react.default.createElement(_compiled.Stack, (0, _platformFeatureFlags.fg)('enable_medium_size_icons_for_team_link_cards') ? {
143
- space: "space.025"
143
+ space: 'space.025'
144
144
  } : {}, /*#__PURE__*/_react.default.createElement(_compiled.Text, {
145
145
  maxLines: 1,
146
146
  weight: "medium",
@@ -53,7 +53,9 @@ var TeamContainers = exports.TeamContainers = function TeamContainers(_ref) {
53
53
  unlinkError = _useTeamContainers.unlinkError;
54
54
  var _useTeamLinksAndConta = (0, _useTeamLinksAndContainers.useTeamLinksAndContainers)(teamId, true),
55
55
  teamLinks = _useTeamLinksAndConta.teamLinks,
56
- removeTeamLink = _useTeamLinksAndConta.removeTeamLink;
56
+ removeTeamLink = _useTeamLinksAndConta.removeTeamLink,
57
+ iconsLoading = _useTeamLinksAndConta.iconsLoading,
58
+ iconHasLoaded = _useTeamLinksAndConta.iconHasLoaded;
57
59
  var _useTeamContainersHoo = (0, _useTeamContainers2.useTeamContainersHook)(),
58
60
  _useTeamContainersHoo2 = (0, _slicedToArray2.default)(_useTeamContainersHoo, 2),
59
61
  _ = _useTeamContainersHoo2[0],
@@ -241,6 +243,8 @@ var TeamContainers = exports.TeamContainers = function TeamContainers(_ref) {
241
243
  containerIcon: container.icon || undefined,
242
244
  link: container.link || undefined,
243
245
  containerId: container.id,
246
+ iconsLoading: iconsLoading,
247
+ iconHasLoaded: iconHasLoaded,
244
248
  onDisconnectButtonClick: function onDisconnectButtonClick() {
245
249
  return handleOpenDisconnectDialog({
246
250
  containerId: container.id,
@@ -298,6 +302,8 @@ var TeamContainers = exports.TeamContainers = function TeamContainers(_ref) {
298
302
  containerId: container.id,
299
303
  containerIcon: container.icon || undefined,
300
304
  link: container.link || undefined,
305
+ iconsLoading: iconsLoading,
306
+ iconHasLoaded: iconHasLoaded,
301
307
  onDisconnectButtonClick: function onDisconnectButtonClick() {
302
308
  return handleOpenDisconnectDialog({
303
309
  containerId: container.id,
@@ -44,7 +44,9 @@ var TeamLinkCard = exports.TeamLinkCard = function TeamLinkCard(_ref) {
44
44
  containerId = _ref.containerId,
45
45
  containerTypeProperties = _ref.containerTypeProperties,
46
46
  onDisconnectButtonClick = _ref.onDisconnectButtonClick,
47
- onEditLinkClick = _ref.onEditLinkClick;
47
+ onEditLinkClick = _ref.onEditLinkClick,
48
+ iconsLoading = _ref.iconsLoading,
49
+ iconHasLoaded = _ref.iconHasLoaded;
48
50
  var _useAnalyticsEvents = (0, _analyticsNext.useAnalyticsEvents)(),
49
51
  createAnalyticsEvent = _useAnalyticsEvents.createAnalyticsEvent;
50
52
  var _getContainerProperti = (0, _getContainerProperties.getContainerProperties)({
@@ -113,7 +115,9 @@ var TeamLinkCard = exports.TeamLinkCard = function TeamLinkCard(_ref) {
113
115
  containerType: containerType,
114
116
  title: title,
115
117
  containerIcon: containerIcon,
116
- size: "medium"
118
+ size: "medium",
119
+ iconsLoading: iconsLoading,
120
+ iconHasLoaded: iconHasLoaded
117
121
  }), /*#__PURE__*/_react.default.createElement(_compiled.Box, {
118
122
  xcss: styles.linkableContent,
119
123
  testId: "team-link-card-linkable-content"
@@ -1,6 +1,6 @@
1
1
 
2
- ._2rko1hkb{border-radius:var(--ds-border-radius-050,4px)}
3
- ._2rkoop52{border-radius:var(--ds-border-radius-100,8px)}._12jimuej{outline-color:var(--ds-border,#091e4224)}
2
+ ._2rkogqwt{border-radius:var(--ds-border-radius-050,2px)}
3
+ ._2rkopd34{border-radius:var(--ds-border-radius-200,8px)}._12jimuej{outline-color:var(--ds-border,#091e4224)}
4
4
  ._18u0v77o{margin-left:var(--ds-space-025,2px)}
5
5
  ._19pkv77o{margin-top:var(--ds-space-025,2px)}
6
6
  ._1bah1h6o{justify-content:center}
@@ -12,5 +12,6 @@
12
12
  ._4cvr1h6o{align-items:center}
13
13
  ._4t3i1tcg{height:24px}
14
14
  ._4t3i1u1b{height:34px}
15
+ ._bfhkn82g{background-color:var(--ds-skeleton,#091e420f)}
15
16
  ._bfhkqbzx{background-color:var(--ds-surface-sunken,#f7f8f9)}
16
17
  ._otyrv77o{margin-bottom:var(--ds-space-025,2px)}
@@ -7,28 +7,49 @@ import LinkIcon from '@atlaskit/icon/core/link';
7
7
  import { Box } from '@atlaskit/primitives/compiled';
8
8
  import { LoomSpaceAvatar } from '../loom-avatar';
9
9
  const styles = {
10
- linkIconWrapperMedium: "_2rkoop52 _1bsb1u1b _4t3i1u1b _1e0c1txw _4cvr1h6o _1bah1h6o _12jimuej _1qu2nqa1 _bfhkqbzx",
11
- linkIconWrapperSmall: "_2rko1hkb _1bsb1tcg _4t3i1tcg _1e0c1txw _4cvr1h6o _1bah1h6o _19pkv77o _2hwxv77o _otyrv77o _18u0v77o _12jimuej _1qu2nqa1 _bfhkqbzx"
10
+ linkIconWrapperMedium: "_2rkopd34 _1bsb1u1b _4t3i1u1b _1e0c1txw _4cvr1h6o _1bah1h6o _12jimuej _1qu2nqa1 _bfhkqbzx",
11
+ linkIconWrapperSmall: "_2rkogqwt _1bsb1tcg _4t3i1tcg _1e0c1txw _4cvr1h6o _1bah1h6o _19pkv77o _2hwxv77o _otyrv77o _18u0v77o _12jimuej _1qu2nqa1 _bfhkqbzx",
12
+ skeletonMedium: "_2rkopd34 _bfhkn82g _1bsb1u1b _4t3i1u1b",
13
+ skeletonSmall: "_2rkogqwt _bfhkn82g _1bsb1tcg _4t3i1tcg"
14
+ };
15
+ const IconSkeleton = ({
16
+ size,
17
+ testId
18
+ }) => {
19
+ return /*#__PURE__*/React.createElement(Box, {
20
+ xcss: size === 'medium' ? styles.skeletonMedium : styles.skeletonSmall,
21
+ testId: "container-icon-skeleton"
22
+ });
12
23
  };
13
24
  export const ContainerIcon = ({
14
25
  containerType,
15
26
  title,
16
27
  containerIcon,
17
- size = 'medium'
28
+ size = 'medium',
29
+ iconsLoading = false,
30
+ iconHasLoaded = true
18
31
  }) => {
32
+ const isMedium = size === 'medium';
19
33
  if (containerType === 'LoomSpace') {
20
34
  return /*#__PURE__*/React.createElement(LoomSpaceAvatar, {
21
35
  spaceName: title,
22
- size: size === 'medium' ? 'large' : size
36
+ size: isMedium ? 'large' : size
23
37
  });
24
38
  }
25
- if (containerType === 'WebLink' && !containerIcon) {
26
- return /*#__PURE__*/React.createElement(Box, {
27
- xcss: size === 'medium' ? styles.linkIconWrapperMedium : styles.linkIconWrapperSmall
28
- }, /*#__PURE__*/React.createElement(LinkIcon, {
29
- label: "",
30
- testId: "linked-container-WebLink-icon"
31
- }));
39
+ if (containerType === 'WebLink') {
40
+ if (iconsLoading || !iconHasLoaded) {
41
+ return /*#__PURE__*/React.createElement(IconSkeleton, {
42
+ size: size
43
+ });
44
+ }
45
+ if (!containerIcon) {
46
+ return /*#__PURE__*/React.createElement(Box, {
47
+ xcss: isMedium ? styles.linkIconWrapperMedium : styles.linkIconWrapperSmall
48
+ }, /*#__PURE__*/React.createElement(LinkIcon, {
49
+ label: "",
50
+ testId: "linked-container-WebLink-icon"
51
+ }));
52
+ }
32
53
  }
33
54
  return /*#__PURE__*/React.createElement(Avatar, {
34
55
  appearance: "square",
@@ -17,7 +17,9 @@ export const useTeamLinksAndContainers = (teamId, enableContainers = true) => {
17
17
  linkIcons,
18
18
  isLoading: webLinksLoading,
19
19
  hasError: webLinksError,
20
- hasLoaded: webLinksHasLoaded
20
+ hasLoaded: webLinksHasLoaded,
21
+ iconsLoading,
22
+ iconHasLoaded
21
23
  }, {
22
24
  getTeamWebLinks,
23
25
  createTeamWebLink,
@@ -74,6 +76,8 @@ export const useTeamLinksAndContainers = (teamId, enableContainers = true) => {
74
76
  hasLoaded: containersHasLoaded && webLinksHasLoaded,
75
77
  teamLinks: allContainers,
76
78
  canAddMoreLink,
79
+ iconsLoading,
80
+ iconHasLoaded,
77
81
  addTeamLink,
78
82
  updateTeamLinkById,
79
83
  removeTeamLink
@@ -10,7 +10,8 @@ const initialState = {
10
10
  links: [],
11
11
  linkIcons: [],
12
12
  iconsLoading: false,
13
- iconsError: false
13
+ iconsError: false,
14
+ iconHasLoaded: false
14
15
  };
15
16
  export const actions = {
16
17
  getTeamWebLinks: teamId => async ({
@@ -86,21 +87,24 @@ export const actions = {
86
87
  setState({
87
88
  linkIcons: [...currentIcons, ...(newIconData || [])],
88
89
  iconsLoading: false,
89
- iconsError: false
90
+ iconsError: false,
91
+ iconHasLoaded: true
90
92
  });
91
93
  }
92
94
  } catch (iconError) {
93
95
  if (getState().teamId === teamId) {
94
96
  setState({
95
97
  iconsLoading: false,
96
- iconsError: true
98
+ iconsError: true,
99
+ iconHasLoaded: true
97
100
  });
98
101
  }
99
102
  }
100
103
  } else {
101
104
  setState({
102
105
  iconsLoading: false,
103
- iconsError: false
106
+ iconsError: false,
107
+ iconHasLoaded: true
104
108
  });
105
109
  }
106
110
  },
@@ -60,7 +60,7 @@ export const AddContainerCard = ({
60
60
  e.stopPropagation();
61
61
  }
62
62
  })), /*#__PURE__*/React.createElement(Stack, fg('enable_medium_size_icons_for_team_link_cards') ? {
63
- space: "space.025"
63
+ space: 'space.025'
64
64
  } : {}, /*#__PURE__*/React.createElement(Text, {
65
65
  maxLines: 1,
66
66
  weight: "medium",
@@ -128,7 +128,7 @@ export const LinkedContainerCard = ({
128
128
  space: "space.100",
129
129
  xcss: styles.card
130
130
  }, getContainerIcon(containerType, title, containerIcon), /*#__PURE__*/React.createElement(Stack, fg('enable_medium_size_icons_for_team_link_cards') ? {
131
- space: "space.025"
131
+ space: 'space.025'
132
132
  } : {}, /*#__PURE__*/React.createElement(Text, {
133
133
  maxLines: 1,
134
134
  weight: "medium",
@@ -43,7 +43,9 @@ export const TeamContainers = ({
43
43
  } = useTeamContainers(teamId);
44
44
  const {
45
45
  teamLinks,
46
- removeTeamLink
46
+ removeTeamLink,
47
+ iconsLoading,
48
+ iconHasLoaded
47
49
  } = useTeamLinksAndContainers(teamId, true);
48
50
  const [_, actions] = useTeamContainersHook();
49
51
  const [showMore, setShowMore] = useState(false);
@@ -175,6 +177,8 @@ export const TeamContainers = ({
175
177
  containerIcon: container.icon || undefined,
176
178
  link: container.link || undefined,
177
179
  containerId: container.id,
180
+ iconsLoading: iconsLoading,
181
+ iconHasLoaded: iconHasLoaded,
178
182
  onDisconnectButtonClick: () => handleOpenDisconnectDialog({
179
183
  containerId: container.id,
180
184
  containerType: container.type,
@@ -218,6 +222,8 @@ export const TeamContainers = ({
218
222
  containerId: container.id,
219
223
  containerIcon: container.icon || undefined,
220
224
  link: container.link || undefined,
225
+ iconsLoading: iconsLoading,
226
+ iconHasLoaded: iconHasLoaded,
221
227
  onDisconnectButtonClick: () => handleOpenDisconnectDialog({
222
228
  containerId: container.id,
223
229
  containerType: container.type,
@@ -32,7 +32,9 @@ export const TeamLinkCard = ({
32
32
  containerId,
33
33
  containerTypeProperties,
34
34
  onDisconnectButtonClick,
35
- onEditLinkClick
35
+ onEditLinkClick,
36
+ iconsLoading,
37
+ iconHasLoaded
36
38
  }) => {
37
39
  const {
38
40
  createAnalyticsEvent
@@ -97,7 +99,9 @@ export const TeamLinkCard = ({
97
99
  containerType: containerType,
98
100
  title: title,
99
101
  containerIcon: containerIcon,
100
- size: "medium"
102
+ size: "medium",
103
+ iconsLoading: iconsLoading,
104
+ iconHasLoaded: iconHasLoaded
101
105
  }), /*#__PURE__*/React.createElement(Box, {
102
106
  xcss: styles.linkableContent,
103
107
  testId: "team-link-card-linkable-content"
@@ -1,6 +1,6 @@
1
1
 
2
- ._2rko1hkb{border-radius:var(--ds-border-radius-050,4px)}
3
- ._2rkoop52{border-radius:var(--ds-border-radius-100,8px)}._12jimuej{outline-color:var(--ds-border,#091e4224)}
2
+ ._2rkogqwt{border-radius:var(--ds-border-radius-050,2px)}
3
+ ._2rkopd34{border-radius:var(--ds-border-radius-200,8px)}._12jimuej{outline-color:var(--ds-border,#091e4224)}
4
4
  ._18u0v77o{margin-left:var(--ds-space-025,2px)}
5
5
  ._19pkv77o{margin-top:var(--ds-space-025,2px)}
6
6
  ._1bah1h6o{justify-content:center}
@@ -12,5 +12,6 @@
12
12
  ._4cvr1h6o{align-items:center}
13
13
  ._4t3i1tcg{height:24px}
14
14
  ._4t3i1u1b{height:34px}
15
+ ._bfhkn82g{background-color:var(--ds-skeleton,#091e420f)}
15
16
  ._bfhkqbzx{background-color:var(--ds-surface-sunken,#f7f8f9)}
16
17
  ._otyrv77o{margin-bottom:var(--ds-space-025,2px)}
@@ -7,28 +7,50 @@ import LinkIcon from '@atlaskit/icon/core/link';
7
7
  import { Box } from '@atlaskit/primitives/compiled';
8
8
  import { LoomSpaceAvatar } from '../loom-avatar';
9
9
  var styles = {
10
- linkIconWrapperMedium: "_2rkoop52 _1bsb1u1b _4t3i1u1b _1e0c1txw _4cvr1h6o _1bah1h6o _12jimuej _1qu2nqa1 _bfhkqbzx",
11
- linkIconWrapperSmall: "_2rko1hkb _1bsb1tcg _4t3i1tcg _1e0c1txw _4cvr1h6o _1bah1h6o _19pkv77o _2hwxv77o _otyrv77o _18u0v77o _12jimuej _1qu2nqa1 _bfhkqbzx"
10
+ linkIconWrapperMedium: "_2rkopd34 _1bsb1u1b _4t3i1u1b _1e0c1txw _4cvr1h6o _1bah1h6o _12jimuej _1qu2nqa1 _bfhkqbzx",
11
+ linkIconWrapperSmall: "_2rkogqwt _1bsb1tcg _4t3i1tcg _1e0c1txw _4cvr1h6o _1bah1h6o _19pkv77o _2hwxv77o _otyrv77o _18u0v77o _12jimuej _1qu2nqa1 _bfhkqbzx",
12
+ skeletonMedium: "_2rkopd34 _bfhkn82g _1bsb1u1b _4t3i1u1b",
13
+ skeletonSmall: "_2rkogqwt _bfhkn82g _1bsb1tcg _4t3i1tcg"
12
14
  };
13
- export var ContainerIcon = function ContainerIcon(_ref) {
14
- var containerType = _ref.containerType,
15
- title = _ref.title,
16
- containerIcon = _ref.containerIcon,
17
- _ref$size = _ref.size,
18
- size = _ref$size === void 0 ? 'medium' : _ref$size;
15
+ var IconSkeleton = function IconSkeleton(_ref) {
16
+ var size = _ref.size,
17
+ testId = _ref.testId;
18
+ return /*#__PURE__*/React.createElement(Box, {
19
+ xcss: size === 'medium' ? styles.skeletonMedium : styles.skeletonSmall,
20
+ testId: "container-icon-skeleton"
21
+ });
22
+ };
23
+ export var ContainerIcon = function ContainerIcon(_ref2) {
24
+ var containerType = _ref2.containerType,
25
+ title = _ref2.title,
26
+ containerIcon = _ref2.containerIcon,
27
+ _ref2$size = _ref2.size,
28
+ size = _ref2$size === void 0 ? 'medium' : _ref2$size,
29
+ _ref2$iconsLoading = _ref2.iconsLoading,
30
+ iconsLoading = _ref2$iconsLoading === void 0 ? false : _ref2$iconsLoading,
31
+ _ref2$iconHasLoaded = _ref2.iconHasLoaded,
32
+ iconHasLoaded = _ref2$iconHasLoaded === void 0 ? true : _ref2$iconHasLoaded;
33
+ var isMedium = size === 'medium';
19
34
  if (containerType === 'LoomSpace') {
20
35
  return /*#__PURE__*/React.createElement(LoomSpaceAvatar, {
21
36
  spaceName: title,
22
- size: size === 'medium' ? 'large' : size
37
+ size: isMedium ? 'large' : size
23
38
  });
24
39
  }
25
- if (containerType === 'WebLink' && !containerIcon) {
26
- return /*#__PURE__*/React.createElement(Box, {
27
- xcss: size === 'medium' ? styles.linkIconWrapperMedium : styles.linkIconWrapperSmall
28
- }, /*#__PURE__*/React.createElement(LinkIcon, {
29
- label: "",
30
- testId: "linked-container-WebLink-icon"
31
- }));
40
+ if (containerType === 'WebLink') {
41
+ if (iconsLoading || !iconHasLoaded) {
42
+ return /*#__PURE__*/React.createElement(IconSkeleton, {
43
+ size: size
44
+ });
45
+ }
46
+ if (!containerIcon) {
47
+ return /*#__PURE__*/React.createElement(Box, {
48
+ xcss: isMedium ? styles.linkIconWrapperMedium : styles.linkIconWrapperSmall
49
+ }, /*#__PURE__*/React.createElement(LinkIcon, {
50
+ label: "",
51
+ testId: "linked-container-WebLink-icon"
52
+ }));
53
+ }
32
54
  }
33
55
  return /*#__PURE__*/React.createElement(Avatar, {
34
56
  appearance: "square",
@@ -27,6 +27,8 @@ export var useTeamLinksAndContainers = function useTeamLinksAndContainers(teamId
27
27
  webLinksLoading = _useTeamWebLinks2$.isLoading,
28
28
  webLinksError = _useTeamWebLinks2$.hasError,
29
29
  webLinksHasLoaded = _useTeamWebLinks2$.hasLoaded,
30
+ iconsLoading = _useTeamWebLinks2$.iconsLoading,
31
+ iconHasLoaded = _useTeamWebLinks2$.iconHasLoaded,
30
32
  _useTeamWebLinks2$2 = _useTeamWebLinks2[1],
31
33
  getTeamWebLinks = _useTeamWebLinks2$2.getTeamWebLinks,
32
34
  createTeamWebLink = _useTeamWebLinks2$2.createTeamWebLink,
@@ -153,6 +155,8 @@ export var useTeamLinksAndContainers = function useTeamLinksAndContainers(teamId
153
155
  hasLoaded: containersHasLoaded && webLinksHasLoaded,
154
156
  teamLinks: allContainers,
155
157
  canAddMoreLink: canAddMoreLink,
158
+ iconsLoading: iconsLoading,
159
+ iconHasLoaded: iconHasLoaded,
156
160
  addTeamLink: addTeamLink,
157
161
  updateTeamLinkById: updateTeamLinkById,
158
162
  removeTeamLink: removeTeamLink
@@ -16,7 +16,8 @@ var _initialState = {
16
16
  links: [],
17
17
  linkIcons: [],
18
18
  iconsLoading: false,
19
- iconsError: false
19
+ iconsError: false,
20
+ iconHasLoaded: false
20
21
  };
21
22
  export var actions = {
22
23
  getTeamWebLinks: function getTeamWebLinks(teamId) {
@@ -129,7 +130,8 @@ export var actions = {
129
130
  setState({
130
131
  linkIcons: [].concat(_toConsumableArray(currentIcons), _toConsumableArray(newIconData || [])),
131
132
  iconsLoading: false,
132
- iconsError: false
133
+ iconsError: false,
134
+ iconHasLoaded: true
133
135
  });
134
136
  }
135
137
  _context2.next = 18;
@@ -140,7 +142,8 @@ export var actions = {
140
142
  if (getState().teamId === teamId) {
141
143
  setState({
142
144
  iconsLoading: false,
143
- iconsError: true
145
+ iconsError: true,
146
+ iconHasLoaded: true
144
147
  });
145
148
  }
146
149
  case 18:
@@ -149,7 +152,8 @@ export var actions = {
149
152
  case 20:
150
153
  setState({
151
154
  iconsLoading: false,
152
- iconsError: false
155
+ iconsError: false,
156
+ iconHasLoaded: true
153
157
  });
154
158
  case 21:
155
159
  case "end":
@@ -67,7 +67,7 @@ export var AddContainerCard = function AddContainerCard(_ref2) {
67
67
  e.stopPropagation();
68
68
  }
69
69
  })), /*#__PURE__*/React.createElement(Stack, fg('enable_medium_size_icons_for_team_link_cards') ? {
70
- space: "space.025"
70
+ space: 'space.025'
71
71
  } : {}, /*#__PURE__*/React.createElement(Text, {
72
72
  maxLines: 1,
73
73
  weight: "medium",
@@ -131,7 +131,7 @@ export var LinkedContainerCard = function LinkedContainerCard(_ref2) {
131
131
  space: "space.100",
132
132
  xcss: styles.card
133
133
  }, getContainerIcon(containerType, title, containerIcon), /*#__PURE__*/React.createElement(Stack, fg('enable_medium_size_icons_for_team_link_cards') ? {
134
- space: "space.025"
134
+ space: 'space.025'
135
135
  } : {}, /*#__PURE__*/React.createElement(Text, {
136
136
  maxLines: 1,
137
137
  weight: "medium",
@@ -44,7 +44,9 @@ export var TeamContainers = function TeamContainers(_ref) {
44
44
  unlinkError = _useTeamContainers.unlinkError;
45
45
  var _useTeamLinksAndConta = useTeamLinksAndContainers(teamId, true),
46
46
  teamLinks = _useTeamLinksAndConta.teamLinks,
47
- removeTeamLink = _useTeamLinksAndConta.removeTeamLink;
47
+ removeTeamLink = _useTeamLinksAndConta.removeTeamLink,
48
+ iconsLoading = _useTeamLinksAndConta.iconsLoading,
49
+ iconHasLoaded = _useTeamLinksAndConta.iconHasLoaded;
48
50
  var _useTeamContainersHoo = useTeamContainersHook(),
49
51
  _useTeamContainersHoo2 = _slicedToArray(_useTeamContainersHoo, 2),
50
52
  _ = _useTeamContainersHoo2[0],
@@ -232,6 +234,8 @@ export var TeamContainers = function TeamContainers(_ref) {
232
234
  containerIcon: container.icon || undefined,
233
235
  link: container.link || undefined,
234
236
  containerId: container.id,
237
+ iconsLoading: iconsLoading,
238
+ iconHasLoaded: iconHasLoaded,
235
239
  onDisconnectButtonClick: function onDisconnectButtonClick() {
236
240
  return handleOpenDisconnectDialog({
237
241
  containerId: container.id,
@@ -289,6 +293,8 @@ export var TeamContainers = function TeamContainers(_ref) {
289
293
  containerId: container.id,
290
294
  containerIcon: container.icon || undefined,
291
295
  link: container.link || undefined,
296
+ iconsLoading: iconsLoading,
297
+ iconHasLoaded: iconHasLoaded,
292
298
  onDisconnectButtonClick: function onDisconnectButtonClick() {
293
299
  return handleOpenDisconnectDialog({
294
300
  containerId: container.id,
@@ -35,7 +35,9 @@ export var TeamLinkCard = function TeamLinkCard(_ref) {
35
35
  containerId = _ref.containerId,
36
36
  containerTypeProperties = _ref.containerTypeProperties,
37
37
  onDisconnectButtonClick = _ref.onDisconnectButtonClick,
38
- onEditLinkClick = _ref.onEditLinkClick;
38
+ onEditLinkClick = _ref.onEditLinkClick,
39
+ iconsLoading = _ref.iconsLoading,
40
+ iconHasLoaded = _ref.iconHasLoaded;
39
41
  var _useAnalyticsEvents = useAnalyticsEvents(),
40
42
  createAnalyticsEvent = _useAnalyticsEvents.createAnalyticsEvent;
41
43
  var _getContainerProperti = getContainerProperties({
@@ -104,7 +106,9 @@ export var TeamLinkCard = function TeamLinkCard(_ref) {
104
106
  containerType: containerType,
105
107
  title: title,
106
108
  containerIcon: containerIcon,
107
- size: "medium"
109
+ size: "medium",
110
+ iconsLoading: iconsLoading,
111
+ iconHasLoaded: iconHasLoaded
108
112
  }), /*#__PURE__*/React.createElement(Box, {
109
113
  xcss: styles.linkableContent,
110
114
  testId: "team-link-card-linkable-content"
@@ -6,5 +6,7 @@ export interface ContainerIconProps {
6
6
  containerIcon?: string;
7
7
  size?: 'small' | 'medium';
8
8
  testId?: string;
9
+ iconsLoading?: boolean;
10
+ iconHasLoaded?: boolean;
9
11
  }
10
- export declare const ContainerIcon: ({ containerType, title, containerIcon, size, }: ContainerIconProps) => React.JSX.Element;
12
+ export declare const ContainerIcon: ({ containerType, title, containerIcon, size, iconsLoading, iconHasLoaded, }: ContainerIconProps) => React.JSX.Element;
@@ -9,6 +9,8 @@ export type UseTeamLinksAndContainersResult = {
9
9
  hasLoaded: boolean;
10
10
  teamLinks: TeamContainer[];
11
11
  canAddMoreLink: boolean;
12
+ iconsLoading: boolean;
13
+ iconHasLoaded: boolean;
12
14
  addTeamLink: (containerOrWebLink: TeamContainer | NewTeamWebLink) => Promise<any>;
13
15
  updateTeamLinkById: (linkId: string, updatedFields: Partial<NewTeamWebLink>) => Promise<any>;
14
16
  removeTeamLink: (container: TeamContainer) => Promise<void>;
@@ -16,5 +16,6 @@ export interface TeamWebLinksState {
16
16
  linkIcons: TeamLinkIconData[];
17
17
  iconsLoading: boolean;
18
18
  iconsError: boolean;
19
+ iconHasLoaded: boolean;
19
20
  }
20
21
  export type StoreApi = StoreActionApi<TeamWebLinksState>;
@@ -12,5 +12,7 @@ export interface TeamLinkCardProps {
12
12
  subType?: ContainerSubTypes;
13
13
  name?: string;
14
14
  };
15
+ iconsLoading?: boolean;
16
+ iconHasLoaded?: boolean;
15
17
  }
16
- export declare const TeamLinkCard: ({ containerType, title, containerIcon, link, containerId, containerTypeProperties, onDisconnectButtonClick, onEditLinkClick, }: TeamLinkCardProps) => React.JSX.Element;
18
+ export declare const TeamLinkCard: ({ containerType, title, containerIcon, link, containerId, containerTypeProperties, onDisconnectButtonClick, onEditLinkClick, iconsLoading, iconHasLoaded, }: TeamLinkCardProps) => React.JSX.Element;
@@ -6,5 +6,7 @@ export interface ContainerIconProps {
6
6
  containerIcon?: string;
7
7
  size?: 'small' | 'medium';
8
8
  testId?: string;
9
+ iconsLoading?: boolean;
10
+ iconHasLoaded?: boolean;
9
11
  }
10
- export declare const ContainerIcon: ({ containerType, title, containerIcon, size, }: ContainerIconProps) => React.JSX.Element;
12
+ export declare const ContainerIcon: ({ containerType, title, containerIcon, size, iconsLoading, iconHasLoaded, }: ContainerIconProps) => React.JSX.Element;
@@ -9,6 +9,8 @@ export type UseTeamLinksAndContainersResult = {
9
9
  hasLoaded: boolean;
10
10
  teamLinks: TeamContainer[];
11
11
  canAddMoreLink: boolean;
12
+ iconsLoading: boolean;
13
+ iconHasLoaded: boolean;
12
14
  addTeamLink: (containerOrWebLink: TeamContainer | NewTeamWebLink) => Promise<any>;
13
15
  updateTeamLinkById: (linkId: string, updatedFields: Partial<NewTeamWebLink>) => Promise<any>;
14
16
  removeTeamLink: (container: TeamContainer) => Promise<void>;
@@ -16,5 +16,6 @@ export interface TeamWebLinksState {
16
16
  linkIcons: TeamLinkIconData[];
17
17
  iconsLoading: boolean;
18
18
  iconsError: boolean;
19
+ iconHasLoaded: boolean;
19
20
  }
20
21
  export type StoreApi = StoreActionApi<TeamWebLinksState>;
@@ -12,5 +12,7 @@ export interface TeamLinkCardProps {
12
12
  subType?: ContainerSubTypes;
13
13
  name?: string;
14
14
  };
15
+ iconsLoading?: boolean;
16
+ iconHasLoaded?: boolean;
15
17
  }
16
- export declare const TeamLinkCard: ({ containerType, title, containerIcon, link, containerId, containerTypeProperties, onDisconnectButtonClick, onEditLinkClick, }: TeamLinkCardProps) => React.JSX.Element;
18
+ export declare const TeamLinkCard: ({ containerType, title, containerIcon, link, containerId, containerTypeProperties, onDisconnectButtonClick, onEditLinkClick, iconsLoading, iconHasLoaded, }: TeamLinkCardProps) => React.JSX.Element;
package/package.json CHANGED
@@ -47,7 +47,7 @@
47
47
  "@atlaskit/primitives": "^14.8.0",
48
48
  "@atlaskit/teams-client": "^4.5.0",
49
49
  "@atlaskit/theme": "^18.0.0",
50
- "@atlaskit/tokens": "^5.1.0",
50
+ "@atlaskit/tokens": "^5.2.0",
51
51
  "@atlaskit/tooltip": "^20.3.0",
52
52
  "@babel/runtime": "^7.0.0",
53
53
  "@compiled/react": "^0.18.3",
@@ -113,7 +113,7 @@
113
113
  }
114
114
  },
115
115
  "name": "@atlaskit/teams-public",
116
- "version": "0.36.2",
116
+ "version": "0.37.0",
117
117
  "description": "Public components related to teams",
118
118
  "author": "Atlassian Pty Ltd",
119
119
  "license": "Apache-2.0",