@atlaskit/teams-public 0.2.0 → 0.3.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 (141) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/cjs/common/utils/error/index.js +120 -0
  3. package/dist/cjs/common/utils/get-container-properties.js +2 -12
  4. package/dist/cjs/common/utils/http.js +119 -0
  5. package/dist/cjs/common/utils/status-code-handlers-provider.js +30 -0
  6. package/dist/cjs/common/utils/team-id-to-ari.js +10 -0
  7. package/dist/cjs/controllers/hooks/use-team-containers/index.js +79 -0
  8. package/dist/cjs/controllers/index.js +12 -0
  9. package/dist/cjs/services/agg-client/index.js +79 -0
  10. package/dist/cjs/services/agg-client/mocks/index.js +52 -0
  11. package/dist/cjs/services/agg-client/utils/queries/team-containers-query.js +12 -0
  12. package/dist/cjs/services/base-client/index.js +92 -0
  13. package/dist/cjs/services/constants.js +9 -0
  14. package/dist/cjs/services/graphql-client/index.js +12 -0
  15. package/dist/cjs/services/graphql-client/main.js +69 -0
  16. package/dist/cjs/services/graphql-client/types.js +5 -0
  17. package/dist/cjs/services/graphql-client/utils/index.js +157 -0
  18. package/dist/cjs/services/index.js +18 -0
  19. package/dist/cjs/services/main.js +72 -0
  20. package/dist/cjs/services/types.js +5 -0
  21. package/dist/cjs/ui/team-containers/add-container-card/index.compiled.css +0 -2
  22. package/dist/cjs/ui/team-containers/add-container-card/index.js +30 -12
  23. package/dist/cjs/ui/team-containers/linked-container-card/index.compiled.css +1 -2
  24. package/dist/cjs/ui/team-containers/linked-container-card/index.js +45 -15
  25. package/dist/cjs/ui/team-containers/main.js +94 -16
  26. package/dist/cjs/ui/team-containers/team-containers-skeleton/index.compiled.css +4 -0
  27. package/dist/cjs/ui/team-containers/team-containers-skeleton/index.js +36 -0
  28. package/dist/cjs/ui/team-containers/team-containers-skeleton/linked-container-card-skeleton/index.compiled.css +14 -0
  29. package/dist/cjs/ui/team-containers/team-containers-skeleton/linked-container-card-skeleton/index.js +38 -0
  30. package/dist/es2019/common/utils/error/index.js +87 -0
  31. package/dist/es2019/common/utils/get-container-properties.js +3 -13
  32. package/dist/es2019/common/utils/http.js +82 -0
  33. package/dist/es2019/common/utils/status-code-handlers-provider.js +25 -0
  34. package/dist/es2019/common/utils/team-id-to-ari.js +2 -0
  35. package/dist/es2019/controllers/hooks/use-team-containers/index.js +45 -0
  36. package/dist/es2019/controllers/index.js +1 -0
  37. package/dist/es2019/services/agg-client/index.js +36 -0
  38. package/dist/es2019/services/agg-client/mocks/index.js +46 -0
  39. package/dist/es2019/services/agg-client/utils/queries/team-containers-query.js +46 -0
  40. package/dist/es2019/services/base-client/index.js +64 -0
  41. package/dist/es2019/services/constants.js +3 -0
  42. package/dist/es2019/services/graphql-client/index.js +1 -0
  43. package/dist/es2019/services/graphql-client/main.js +23 -0
  44. package/dist/es2019/services/graphql-client/types.js +1 -0
  45. package/dist/es2019/services/graphql-client/utils/index.js +76 -0
  46. package/dist/es2019/services/index.js +1 -0
  47. package/dist/es2019/services/main.js +39 -0
  48. package/dist/es2019/services/types.js +1 -0
  49. package/dist/es2019/ui/team-containers/add-container-card/index.compiled.css +0 -2
  50. package/dist/es2019/ui/team-containers/add-container-card/index.js +15 -7
  51. package/dist/es2019/ui/team-containers/linked-container-card/index.compiled.css +1 -2
  52. package/dist/es2019/ui/team-containers/linked-container-card/index.js +28 -9
  53. package/dist/es2019/ui/team-containers/main.js +79 -16
  54. package/dist/es2019/ui/team-containers/team-containers-skeleton/index.compiled.css +4 -0
  55. package/dist/es2019/ui/team-containers/team-containers-skeleton/index.js +27 -0
  56. package/dist/es2019/ui/team-containers/team-containers-skeleton/linked-container-card-skeleton/index.compiled.css +14 -0
  57. package/dist/es2019/ui/team-containers/team-containers-skeleton/linked-container-card-skeleton/index.js +31 -0
  58. package/dist/esm/common/utils/error/index.js +117 -0
  59. package/dist/esm/common/utils/get-container-properties.js +3 -13
  60. package/dist/esm/common/utils/http.js +109 -0
  61. package/dist/esm/common/utils/status-code-handlers-provider.js +23 -0
  62. package/dist/esm/common/utils/team-id-to-ari.js +4 -0
  63. package/dist/esm/controllers/hooks/use-team-containers/index.js +72 -0
  64. package/dist/esm/controllers/index.js +1 -0
  65. package/dist/esm/services/agg-client/index.js +72 -0
  66. package/dist/esm/services/agg-client/mocks/index.js +46 -0
  67. package/dist/esm/services/agg-client/utils/queries/team-containers-query.js +5 -0
  68. package/dist/esm/services/base-client/index.js +85 -0
  69. package/dist/esm/services/constants.js +3 -0
  70. package/dist/esm/services/graphql-client/index.js +1 -0
  71. package/dist/esm/services/graphql-client/main.js +62 -0
  72. package/dist/esm/services/graphql-client/types.js +1 -0
  73. package/dist/esm/services/graphql-client/utils/index.js +149 -0
  74. package/dist/esm/services/index.js +1 -0
  75. package/dist/esm/services/main.js +65 -0
  76. package/dist/esm/services/types.js +1 -0
  77. package/dist/esm/ui/team-containers/add-container-card/index.compiled.css +0 -2
  78. package/dist/esm/ui/team-containers/add-container-card/index.js +25 -7
  79. package/dist/esm/ui/team-containers/linked-container-card/index.compiled.css +1 -2
  80. package/dist/esm/ui/team-containers/linked-container-card/index.js +39 -9
  81. package/dist/esm/ui/team-containers/main.js +91 -16
  82. package/dist/esm/ui/team-containers/team-containers-skeleton/index.compiled.css +4 -0
  83. package/dist/esm/ui/team-containers/team-containers-skeleton/index.js +29 -0
  84. package/dist/esm/ui/team-containers/team-containers-skeleton/linked-container-card-skeleton/index.compiled.css +14 -0
  85. package/dist/esm/ui/team-containers/team-containers-skeleton/linked-container-card-skeleton/index.js +31 -0
  86. package/dist/types/common/types.d.ts +1 -1
  87. package/dist/types/common/utils/error/index.d.ts +59 -0
  88. package/dist/types/common/utils/http.d.ts +31 -0
  89. package/dist/types/common/utils/status-code-handlers-provider.d.ts +17 -0
  90. package/dist/types/common/utils/team-id-to-ari.d.ts +2 -0
  91. package/dist/types/controllers/hooks/use-team-containers/index.d.ts +12 -0
  92. package/dist/types/controllers/index.d.ts +1 -0
  93. package/dist/types/services/agg-client/index.d.ts +15 -0
  94. package/dist/types/services/agg-client/mocks/index.d.ts +55 -0
  95. package/dist/types/services/agg-client/utils/queries/team-containers-query.d.ts +44 -0
  96. package/dist/types/services/base-client/index.d.ts +37 -0
  97. package/dist/types/services/constants.d.ts +4 -0
  98. package/dist/types/services/graphql-client/index.d.ts +1 -0
  99. package/dist/types/services/graphql-client/main.d.ts +8 -0
  100. package/dist/types/services/graphql-client/types.d.ts +19 -0
  101. package/dist/types/services/graphql-client/utils/index.d.ts +3 -0
  102. package/dist/types/services/index.d.ts +1 -0
  103. package/dist/types/services/main.d.ts +25 -0
  104. package/dist/types/services/types.d.ts +19 -0
  105. package/dist/types/ui/team-containers/add-container-card/index.d.ts +3 -2
  106. package/dist/types/ui/team-containers/linked-container-card/index.d.ts +3 -6
  107. package/dist/types/ui/team-containers/main.d.ts +3 -1
  108. package/dist/types/ui/team-containers/team-containers-skeleton/index.d.ts +6 -0
  109. package/dist/types/ui/team-containers/team-containers-skeleton/linked-container-card-skeleton/index.d.ts +2 -0
  110. package/dist/types/ui/team-containers/types.d.ts +5 -0
  111. package/dist/types-ts4.5/common/types.d.ts +1 -1
  112. package/dist/types-ts4.5/common/utils/error/index.d.ts +59 -0
  113. package/dist/types-ts4.5/common/utils/http.d.ts +31 -0
  114. package/dist/types-ts4.5/common/utils/status-code-handlers-provider.d.ts +17 -0
  115. package/dist/types-ts4.5/common/utils/team-id-to-ari.d.ts +2 -0
  116. package/dist/types-ts4.5/controllers/hooks/use-team-containers/index.d.ts +12 -0
  117. package/dist/types-ts4.5/controllers/index.d.ts +1 -0
  118. package/dist/types-ts4.5/services/agg-client/index.d.ts +15 -0
  119. package/dist/types-ts4.5/services/agg-client/mocks/index.d.ts +55 -0
  120. package/dist/types-ts4.5/services/agg-client/utils/queries/team-containers-query.d.ts +44 -0
  121. package/dist/types-ts4.5/services/base-client/index.d.ts +37 -0
  122. package/dist/types-ts4.5/services/constants.d.ts +4 -0
  123. package/dist/types-ts4.5/services/graphql-client/index.d.ts +1 -0
  124. package/dist/types-ts4.5/services/graphql-client/main.d.ts +8 -0
  125. package/dist/types-ts4.5/services/graphql-client/types.d.ts +19 -0
  126. package/dist/types-ts4.5/services/graphql-client/utils/index.d.ts +3 -0
  127. package/dist/types-ts4.5/services/index.d.ts +1 -0
  128. package/dist/types-ts4.5/services/main.d.ts +25 -0
  129. package/dist/types-ts4.5/services/types.d.ts +19 -0
  130. package/dist/types-ts4.5/ui/team-containers/add-container-card/index.d.ts +3 -2
  131. package/dist/types-ts4.5/ui/team-containers/linked-container-card/index.d.ts +3 -6
  132. package/dist/types-ts4.5/ui/team-containers/main.d.ts +3 -1
  133. package/dist/types-ts4.5/ui/team-containers/team-containers-skeleton/index.d.ts +6 -0
  134. package/dist/types-ts4.5/ui/team-containers/team-containers-skeleton/linked-container-card-skeleton/index.d.ts +2 -0
  135. package/dist/types-ts4.5/ui/team-containers/types.d.ts +5 -0
  136. package/package.json +9 -5
  137. package/dist/cjs/ui/team-containers/constants.js +0 -7
  138. package/dist/es2019/ui/team-containers/constants.js +0 -1
  139. package/dist/esm/ui/team-containers/constants.js +0 -1
  140. package/dist/types/ui/team-containers/constants.d.ts +0 -1
  141. package/dist/types-ts4.5/ui/team-containers/constants.d.ts +0 -1
@@ -1,31 +1,109 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
4
5
  Object.defineProperty(exports, "__esModule", {
5
6
  value: true
6
7
  });
7
- exports.TeamContainers = exports.ICON_COLOR = exports.ICON_BACKGROUND = void 0;
8
- var _react = _interopRequireDefault(require("react"));
8
+ exports.TeamContainers = exports.MAX_NUMBER_OF_CONTAINERS_TO_SHOW = exports.ICON_COLOR = exports.ICON_BACKGROUND = void 0;
9
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
+ var _react = _interopRequireWildcard(require("react"));
11
+ var _reactIntlNext = require("react-intl-next");
12
+ var _new = _interopRequireDefault(require("@atlaskit/button/new"));
9
13
  var _primitives = require("@atlaskit/primitives");
10
14
  var _colors = require("@atlaskit/theme/colors");
15
+ var _useTeamContainers2 = require("../../controllers/hooks/use-team-containers");
11
16
  var _addContainerCard = require("./add-container-card");
12
17
  var _linkedContainerCard = require("./linked-container-card");
18
+ var _teamContainersSkeleton = require("./team-containers-skeleton");
19
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
20
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
13
21
  var ICON_BACKGROUND = exports.ICON_BACKGROUND = "var(--ds-icon-inverse, ".concat(_colors.N0, ")");
14
22
  var ICON_COLOR = exports.ICON_COLOR = "var(--ds-icon-subtle, ".concat(_colors.N90, ")");
15
- var TeamContainers = exports.TeamContainers = function TeamContainers() {
16
- return /*#__PURE__*/_react.default.createElement(_primitives.Grid, {
23
+ var MAX_NUMBER_OF_CONTAINERS_TO_SHOW = exports.MAX_NUMBER_OF_CONTAINERS_TO_SHOW = 4;
24
+ var TeamContainers = exports.TeamContainers = function TeamContainers(_ref) {
25
+ var teamId = _ref.teamId,
26
+ onAddAContainerClick = _ref.onAddAContainerClick;
27
+ var _useTeamContainers = (0, _useTeamContainers2.useTeamContainers)(teamId),
28
+ teamContainers = _useTeamContainers.teamContainers,
29
+ loading = _useTeamContainers.loading;
30
+ var _useState = (0, _react.useState)(false),
31
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
32
+ showAddJiraContainer = _useState2[0],
33
+ setShowAddJiraContainer = _useState2[1];
34
+ var _useState3 = (0, _react.useState)(false),
35
+ _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
36
+ showAddConfluenceContainer = _useState4[0],
37
+ setShowAddConfluenceContainer = _useState4[1];
38
+ var _useState5 = (0, _react.useState)(false),
39
+ _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
40
+ showMore = _useState6[0],
41
+ setShowMore = _useState6[1];
42
+ (0, _react.useEffect)(function () {
43
+ if (teamContainers.length > MAX_NUMBER_OF_CONTAINERS_TO_SHOW) {
44
+ setShowAddJiraContainer(false);
45
+ setShowAddConfluenceContainer(false);
46
+ } else {
47
+ var hasJiraProject = teamContainers.some(function (container) {
48
+ return container.type === 'JiraProject';
49
+ });
50
+ var hasConfluenceSpace = teamContainers.some(function (container) {
51
+ return container.type === 'ConfluenceSpace';
52
+ });
53
+ setShowAddJiraContainer(!hasJiraProject);
54
+ setShowAddConfluenceContainer(!hasConfluenceSpace);
55
+ }
56
+ }, [teamContainers]);
57
+ var handleShowMore = function handleShowMore() {
58
+ setShowMore(!showMore);
59
+ };
60
+ if (loading) {
61
+ return /*#__PURE__*/_react.default.createElement(_teamContainersSkeleton.TeamContainersSkeleton, {
62
+ numberOfContainers: MAX_NUMBER_OF_CONTAINERS_TO_SHOW
63
+ });
64
+ }
65
+ return /*#__PURE__*/_react.default.createElement(_primitives.Stack, {
66
+ space: "space.200"
67
+ }, /*#__PURE__*/_react.default.createElement(_primitives.Grid, {
17
68
  templateColumns: "1fr 1fr",
18
69
  gap: "space.100",
19
70
  autoFlow: "row"
20
- }, /*#__PURE__*/_react.default.createElement(_linkedContainerCard.LinkedContainerCard, {
21
- containerType: "jira",
22
- title: "A Project",
23
- containerIcon: "https://avatar-management--avatars.us-west-2.staging.public.atl-paas.net/712020:2981defd-17f1-440e-a377-8c7657b72a6f/4b5b0d55-614b-4e75-858f-9da3d0c7e3f8/128"
24
- }), /*#__PURE__*/_react.default.createElement(_addContainerCard.AddContainerCard, {
25
- containerType: "jira"
26
- }), /*#__PURE__*/_react.default.createElement(_addContainerCard.AddContainerCard, {
27
- containerType: "confluence"
28
- }), /*#__PURE__*/_react.default.createElement(_addContainerCard.AddContainerCard, {
29
- containerType: "loom"
30
- }));
31
- };
71
+ }, teamContainers.slice(0, MAX_NUMBER_OF_CONTAINERS_TO_SHOW).map(function (container) {
72
+ return /*#__PURE__*/_react.default.createElement(_linkedContainerCard.LinkedContainerCard, {
73
+ key: container.id,
74
+ containerType: container.type,
75
+ title: container.name,
76
+ containerIcon: container.icon,
77
+ link: container.link
78
+ });
79
+ }), showAddJiraContainer && /*#__PURE__*/_react.default.createElement(_addContainerCard.AddContainerCard, {
80
+ onAddAContainerClick: onAddAContainerClick,
81
+ containerType: "JiraProject"
82
+ }), showAddConfluenceContainer && /*#__PURE__*/_react.default.createElement(_addContainerCard.AddContainerCard, {
83
+ onAddAContainerClick: onAddAContainerClick,
84
+ containerType: "ConfluenceSpace"
85
+ }), showMore && teamContainers.slice(MAX_NUMBER_OF_CONTAINERS_TO_SHOW).map(function (container) {
86
+ return /*#__PURE__*/_react.default.createElement(_linkedContainerCard.LinkedContainerCard, {
87
+ key: container.id,
88
+ containerType: container.type,
89
+ title: container.name,
90
+ containerIcon: container.icon,
91
+ link: container.link
92
+ });
93
+ })), teamContainers.length > MAX_NUMBER_OF_CONTAINERS_TO_SHOW && /*#__PURE__*/_react.default.createElement(_primitives.Inline, null, /*#__PURE__*/_react.default.createElement(_new.default, {
94
+ appearance: "subtle",
95
+ onClick: handleShowMore
96
+ }, showMore ? /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, messages.showLess) : /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, messages.showMore))));
97
+ };
98
+ var messages = (0, _reactIntlNext.defineMessages)({
99
+ showMore: {
100
+ id: 'ptc-directory.team-profile-page.team-containers.show-more.non-final',
101
+ defaultMessage: 'Show more',
102
+ description: 'Button to show more containers'
103
+ },
104
+ showLess: {
105
+ id: 'ptc-directory.team-profile-page.team-containers.show-less.non-final',
106
+ defaultMessage: 'Show less',
107
+ description: 'Button to show less containers'
108
+ }
109
+ });
@@ -0,0 +1,4 @@
1
+
2
+ ._2rko1q77{border-radius:var(--ds-border-radius-400,1pc)}
3
+ ._1rjc1b66{padding-block:var(--ds-space-050,4px)}._1bsbvbgk{width:4pc}
4
+ ._yv0ewxkt{grid-template-columns:1fr 1fr}
@@ -0,0 +1,36 @@
1
+ /* index.tsx generated by @compiled/babel-plugin v0.36.1 */
2
+ "use strict";
3
+
4
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.TeamContainersSkeleton = void 0;
9
+ require("./index.compiled.css");
10
+ var _runtime = require("@compiled/react/runtime");
11
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
12
+ var _react = _interopRequireDefault(require("react"));
13
+ var _compiled = require("@atlaskit/primitives/compiled");
14
+ var _linkedContainerCardSkeleton = require("./linked-container-card-skeleton");
15
+ var styles = {
16
+ containers: "_yv0ewxkt",
17
+ showMoreButtonSkeleton: "_2rko1q77 _1rjc1b66 _1bsbvbgk"
18
+ };
19
+ var TeamContainersSkeleton = exports.TeamContainersSkeleton = function TeamContainersSkeleton(_ref) {
20
+ var numberOfContainers = _ref.numberOfContainers;
21
+ return /*#__PURE__*/_react.default.createElement(_compiled.Stack, {
22
+ space: "space.200",
23
+ testId: "team-containers-skeleton"
24
+ }, /*#__PURE__*/_react.default.createElement(_compiled.Grid, {
25
+ xcss: styles.containers,
26
+ gap: "space.100",
27
+ autoFlow: "row"
28
+ }, (0, _toConsumableArray2.default)(Array(numberOfContainers)).map(function (_, index) {
29
+ return /*#__PURE__*/_react.default.createElement(_linkedContainerCardSkeleton.LinkedContainerCardSkeleton, {
30
+ key: index
31
+ });
32
+ })), /*#__PURE__*/_react.default.createElement(_compiled.Box, {
33
+ backgroundColor: "color.background.neutral",
34
+ xcss: styles.showMoreButtonSkeleton
35
+ }));
36
+ };
@@ -0,0 +1,14 @@
1
+
2
+ ._2rko1q77{border-radius:var(--ds-border-radius-400,1pc)}
3
+ ._2rkoglpi{border-radius:var(--ds-border-radius,4px)}
4
+ ._2rkoiti9{border-radius:var(--ds-border-radius-100,4px)}
5
+ ._1h6dz9xs{border-color:var(--ds-border-accent-gray,#758195)}
6
+ ._1rjc1b66{padding-block:var(--ds-space-050,4px)}._12jimuej{outline-color:var(--ds-border,#091e4224)}
7
+ ._12y3e4h9{outline-width:var(--ds-border-width,1px)}
8
+ ._19bvpxbi{padding-left:var(--ds-space-200,1pc)}
9
+ ._1bsbqkoa{width:9pc}
10
+ ._1qu2nqa1{outline-style:solid}
11
+ ._ca0qpxbi{padding-top:var(--ds-space-200,1pc)}
12
+ ._n3tdpxbi{padding-bottom:var(--ds-space-200,1pc)}
13
+ ._syaz1fxt{color:var(--ds-text,#172b4d)}
14
+ ._u5f3pxbi{padding-right:var(--ds-space-200,1pc)}
@@ -0,0 +1,38 @@
1
+ /* index.tsx generated by @compiled/babel-plugin v0.36.1 */
2
+ "use strict";
3
+
4
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.LinkedContainerCardSkeleton = void 0;
9
+ require("./index.compiled.css");
10
+ var _runtime = require("@compiled/react/runtime");
11
+ var _react = _interopRequireDefault(require("react"));
12
+ var _compiled = require("@atlaskit/primitives/compiled");
13
+ var styles = {
14
+ container: "_2rkoiti9 _1h6dz9xs _12y3e4h9 _12jimuej _1qu2nqa1 _syaz1fxt _ca0qpxbi _u5f3pxbi _n3tdpxbi _19bvpxbi",
15
+ avatarSkeleton: "_2rkoglpi _ca0qpxbi _u5f3pxbi _n3tdpxbi _19bvpxbi",
16
+ firstLineSkeleton: "_2rko1q77 _1rjc1b66",
17
+ secondLineSkeleton: "_2rko1q77 _1rjc1b66 _1bsbqkoa"
18
+ };
19
+ var LinkedContainerCardSkeleton = exports.LinkedContainerCardSkeleton = function LinkedContainerCardSkeleton() {
20
+ return /*#__PURE__*/_react.default.createElement(_compiled.Box, {
21
+ xcss: styles.container
22
+ }, /*#__PURE__*/_react.default.createElement(_compiled.Inline, {
23
+ space: "space.100",
24
+ alignBlock: "center"
25
+ }, /*#__PURE__*/_react.default.createElement(_compiled.Box, {
26
+ backgroundColor: "color.background.neutral",
27
+ xcss: styles.avatarSkeleton
28
+ }), /*#__PURE__*/_react.default.createElement(_compiled.Stack, {
29
+ space: "space.100",
30
+ grow: "fill"
31
+ }, /*#__PURE__*/_react.default.createElement(_compiled.Box, {
32
+ backgroundColor: "color.background.neutral",
33
+ xcss: styles.firstLineSkeleton
34
+ }), /*#__PURE__*/_react.default.createElement(_compiled.Box, {
35
+ backgroundColor: "color.background.neutral",
36
+ xcss: styles.secondLineSkeleton
37
+ }))));
38
+ };
@@ -0,0 +1,87 @@
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ var _GraphQLError;
3
+ export let StatusCode = /*#__PURE__*/function (StatusCode) {
4
+ StatusCode[StatusCode["UNAUTHORIZED"] = 401] = "UNAUTHORIZED";
5
+ StatusCode[StatusCode["FORBIDDEN"] = 403] = "FORBIDDEN";
6
+ StatusCode[StatusCode["TIMEOUT"] = 408] = "TIMEOUT";
7
+ StatusCode[StatusCode["GONE"] = 410] = "GONE";
8
+ StatusCode[StatusCode["PAYLOAD_TOO_LARGE"] = 413] = "PAYLOAD_TOO_LARGE";
9
+ return StatusCode;
10
+ }({});
11
+ class CommonError extends Error {
12
+ constructor(message) {
13
+ super(message);
14
+ this.name = this.constructor.name;
15
+ this.message = message || 'UnknownError';
16
+ this.stack = new Error(message).stack || '';
17
+ }
18
+ }
19
+ export class DefaultError extends CommonError {
20
+ constructor({
21
+ message
22
+ }) {
23
+ super(message || 'UnknownError');
24
+ Object.setPrototypeOf(this, DefaultError.prototype);
25
+ }
26
+ }
27
+
28
+ /**
29
+ * These errors will not fail UFO experiences
30
+ */
31
+ export class SLOIgnoreError extends CommonError {
32
+ constructor({
33
+ message
34
+ }) {
35
+ super(`SentryIgnore: ${message || 'UnknownError'}`);
36
+ Object.setPrototypeOf(this, SLOIgnoreError.prototype);
37
+ }
38
+ }
39
+ // Http Errors
40
+ export class HttpError extends CommonError {
41
+ constructor({
42
+ message,
43
+ status,
44
+ traceId,
45
+ path
46
+ }) {
47
+ super(message);
48
+ Object.setPrototypeOf(this, HttpError.prototype);
49
+ this.status = status;
50
+ this.traceId = traceId;
51
+ this.path = path;
52
+ }
53
+ }
54
+
55
+ // Graphql Errors
56
+
57
+ export class GraphQLError extends CommonError {
58
+ // tslint:disable-line no-any
59
+
60
+ constructor({
61
+ message,
62
+ category = 'default',
63
+ fields
64
+ }) {
65
+ super(message);
66
+ Object.setPrototypeOf(this, GraphQLError.prototype);
67
+ this.category = category;
68
+ if (fields) {
69
+ this.fields = fields;
70
+ }
71
+ }
72
+ }
73
+ _GraphQLError = GraphQLError;
74
+ _defineProperty(GraphQLError, "from", rawErrors => {
75
+ const firstError = rawErrors[0];
76
+ const errorData = {
77
+ category: firstError.category,
78
+ message: firstError.message
79
+ };
80
+ if (firstError.fields) {
81
+ errorData.fields = firstError.fields.reduce((obj, item) => {
82
+ obj[item.field] = item.message;
83
+ return obj;
84
+ }, {});
85
+ }
86
+ return new _GraphQLError(errorData);
87
+ });
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { defineMessages, FormattedMessage } from 'react-intl-next';
3
- import { ConfluenceIcon, JiraIcon, LoomIcon } from '@atlaskit/logo';
3
+ import { ConfluenceIcon, JiraIcon } from '@atlaskit/logo';
4
4
  export const messages = defineMessages({
5
5
  addConfluenceContainerTitle: {
6
6
  id: 'ptc-directory.team-profile-page.team-containers.add-confluence-space-title.non-final',
@@ -35,7 +35,7 @@ export const messages = defineMessages({
35
35
  });
36
36
  export const getContainerProperties = containerType => {
37
37
  switch (containerType) {
38
- case 'confluence':
38
+ case 'ConfluenceSpace':
39
39
  return {
40
40
  description: /*#__PURE__*/React.createElement(FormattedMessage, messages.confluenceContainerDescription),
41
41
  icon: /*#__PURE__*/React.createElement(ConfluenceIcon, {
@@ -45,7 +45,7 @@ export const getContainerProperties = containerType => {
45
45
  }),
46
46
  title: /*#__PURE__*/React.createElement(FormattedMessage, messages.addConfluenceContainerTitle)
47
47
  };
48
- case 'jira':
48
+ case 'JiraProject':
49
49
  return {
50
50
  description: /*#__PURE__*/React.createElement(FormattedMessage, messages.jiraProjectDescription),
51
51
  icon: /*#__PURE__*/React.createElement(JiraIcon, {
@@ -55,16 +55,6 @@ export const getContainerProperties = containerType => {
55
55
  }),
56
56
  title: /*#__PURE__*/React.createElement(FormattedMessage, messages.addJiraProjectTitle)
57
57
  };
58
- case 'loom':
59
- return {
60
- description: /*#__PURE__*/React.createElement(FormattedMessage, messages.loomSpaceDescription),
61
- icon: /*#__PURE__*/React.createElement(LoomIcon, {
62
- appearance: "brand",
63
- label: "",
64
- size: "xsmall"
65
- }),
66
- title: /*#__PURE__*/React.createElement(FormattedMessage, messages.addLoomSpaceTitle)
67
- };
68
58
  default:
69
59
  return {
70
60
  description: null,
@@ -0,0 +1,82 @@
1
+ export const EXPONENTIAL_BACKOFF_RETRY_POLICY = {
2
+ INITIAL_DELAY: 200,
3
+ MAX_RETRIES: 5,
4
+ JITTER: true
5
+ };
6
+
7
+ /**
8
+ * Checks whether a status code is a 5xx HTTP code.
9
+ * @param {number} status HTTP status code
10
+ */
11
+ export function is5xx(status) {
12
+ return 500 <= status && status <= 599;
13
+ }
14
+ export function isFetchResponse(data) {
15
+ if (!data || !data.hasOwnProperty('response')) {
16
+ return false;
17
+ }
18
+ return data.response instanceof Response;
19
+ }
20
+
21
+ // tslint:disable-next-line no-any
22
+
23
+ // tslint:disable-next-line no-any
24
+ const defaultRetryIfCallback = a => !a;
25
+ const defaultOptions = {
26
+ initial: 200,
27
+ jitter: false,
28
+ max: 5,
29
+ retryIf: defaultRetryIfCallback
30
+ };
31
+ /**
32
+ * Transparently wrap a function so that it is retried until it succeeds or reaches a max retry limit.
33
+ * The returned function has the same signature as the wrapped function.
34
+ *
35
+ * Modified from https://jsfiddle.net/pajtai/pLka0ow9/
36
+ */
37
+ export function withExponentialBackoff(toTry, hofOptions = defaultOptions) {
38
+ const {
39
+ initial,
40
+ jitter,
41
+ max,
42
+ retryIf
43
+ } = hofOptions;
44
+
45
+ // Initialize max retry decrementing counter (range of max...0)
46
+ let attemptsRemaining = max;
47
+
48
+ // Initialize delay. This will exponentially increase each retry (delay = intial * 2^n)
49
+ let delay = initial;
50
+
51
+ /**
52
+ * This function calls itself recursively until `retryIf` evaluates false or the retry limit is reached.
53
+ * The functioned-to-be-retried is called on each recursion.
54
+ */
55
+ return async function tryWithExponentialBackoff(...args) {
56
+ // "An attempt was made"
57
+ const result = await toTry(...args);
58
+ --attemptsRemaining;
59
+
60
+ // If tried function was unsuccessful and there are still retries remaining, retry!
61
+ if (retryIf && retryIf(result) && attemptsRemaining > 0) {
62
+ // Wait for delay
63
+ await new Promise(resolve => setTimeout(resolve, jitter ? Math.random() * delay : delay));
64
+
65
+ // Exponentially increase delay
66
+ delay *= 2;
67
+
68
+ // Initiate retry
69
+ return tryWithExponentialBackoff(...args);
70
+ }
71
+
72
+ // Return result of tried function if it is successful or if the retry limit
73
+ // was reached regardless of success.
74
+ return result;
75
+ };
76
+ }
77
+ export const fetchWithExponentialBackoff = withExponentialBackoff((url, init) => fetch(url, init), {
78
+ initial: EXPONENTIAL_BACKOFF_RETRY_POLICY.INITIAL_DELAY,
79
+ jitter: EXPONENTIAL_BACKOFF_RETRY_POLICY.JITTER,
80
+ max: EXPONENTIAL_BACKOFF_RETRY_POLICY.MAX_RETRIES,
81
+ retryIf: response => is5xx(response.status)
82
+ });
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Our REST clients are initialised when their module loads which makes it tricky for them to consume the `statusCodeHandlers` prop passed to App from the host application.
3
+ * This is a temporary measure to enable the clients to consume `statusCodeHandlers`.
4
+ * The long term solution is to replace our REST clients with Apollo client custom resolvers
5
+ * This will unify all remote data handling under the apollo-client module which is able to easily receive `statusCodeHandlers` as it is initialised within the React portion of our app.
6
+ */
7
+
8
+ export const statusCodeHandlersProvider = {
9
+ handlers: {},
10
+ get() {
11
+ return statusCodeHandlersProvider.handlers;
12
+ },
13
+ setHandlers(handlers) {
14
+ statusCodeHandlersProvider.handlers = handlers;
15
+ }
16
+ };
17
+ export function handleResponse(response) {
18
+ const {
19
+ status
20
+ } = response;
21
+ const handler = statusCodeHandlersProvider.get()[status];
22
+ if (typeof handler === 'function') {
23
+ handler(response);
24
+ }
25
+ }
@@ -0,0 +1,2 @@
1
+ export const ARI_PREFIX = 'ari:cloud:identity::team/';
2
+ export const teamIdToAri = teamIdOrTeamAri => teamIdOrTeamAri.startsWith(ARI_PREFIX) ? teamIdOrTeamAri : `${ARI_PREFIX}${teamIdOrTeamAri}`;
@@ -0,0 +1,45 @@
1
+ import { useEffect } from 'react';
2
+ import { createHook, createStore } from 'react-sweet-state';
3
+ import { teamsClient } from '../../../services';
4
+ const initialState = {
5
+ teamContainers: [],
6
+ loading: true,
7
+ error: null
8
+ };
9
+ const actions = {
10
+ fetchTeamContainers: teamId => async ({
11
+ setState
12
+ }) => {
13
+ setState({
14
+ loading: true,
15
+ error: null
16
+ });
17
+ try {
18
+ const containers = await teamsClient.getTeamContainers(teamId);
19
+ setState({
20
+ teamContainers: containers,
21
+ loading: false,
22
+ error: null
23
+ });
24
+ } catch (err) {
25
+ setState({
26
+ teamContainers: [],
27
+ error: err,
28
+ loading: false
29
+ });
30
+ }
31
+ }
32
+ };
33
+ const Store = createStore({
34
+ initialState,
35
+ actions,
36
+ name: 'teamContainersStore'
37
+ });
38
+ export const useTeamContainersHook = createHook(Store);
39
+ export const useTeamContainers = teamId => {
40
+ const [state, actions] = useTeamContainersHook();
41
+ useEffect(() => {
42
+ actions.fetchTeamContainers(teamId);
43
+ }, [teamId, actions]);
44
+ return state;
45
+ };
@@ -0,0 +1 @@
1
+ export { useTeamContainers } from './hooks/use-team-containers';
@@ -0,0 +1,36 @@
1
+ import { teamIdToAri } from '../../common/utils/team-id-to-ari';
2
+ import { DEFAULT_CONFIG } from '../constants';
3
+ import { BaseGraphQlClient } from '../graphql-client';
4
+ import { TeamContainersQuery } from './utils/queries/team-containers-query';
5
+ export class AGGClient extends BaseGraphQlClient {
6
+ constructor(baseUrl, config) {
7
+ super(`${baseUrl}/graphql`, config);
8
+ }
9
+ setBaseUrl(baseUrl) {
10
+ this.setServiceUrl(`${baseUrl}/graphql`);
11
+ }
12
+ async getTeamContainers(teamId) {
13
+ const teamAri = teamIdToAri(teamId);
14
+ const cypherQuery = `MATCH (team:IdentityTeam {id: '${teamAri}'})-[:team_connected_to_container]->(container) RETURN container`;
15
+ const response = await this.makeGraphQLRequest({
16
+ query: TeamContainersQuery,
17
+ variables: {
18
+ cypherQuery
19
+ }
20
+ }, {
21
+ operationName: 'TeamContainersQuery'
22
+ });
23
+ const containersResult = response.graphStore.cypherQuery.edges.map(edge => ({
24
+ id: edge.node.to.id,
25
+ type: edge.node.to.data.__typename,
26
+ name: edge.node.to.data.__typename === 'ConfluenceSpace' ? edge.node.to.data.confluenceSpaceName || '' : edge.node.to.data.jiraProjectName,
27
+ icon: edge.node.to.data.__typename === 'ConfluenceSpace' ? `${edge.node.to.data.links.base}${edge.node.to.data.icon.path}` : edge.node.to.data.avatar.medium,
28
+ createdDate: edge.node.to.data.__typename === 'ConfluenceSpace' ? new Date(edge.node.to.data.createdDate) : new Date(edge.node.to.data.created),
29
+ link: edge.node.to.data.__typename === 'ConfluenceSpace' ? `${edge.node.to.data.links.base}${edge.node.to.data.links.webUi}` : edge.node.to.data.webUrl
30
+ }));
31
+ return containersResult;
32
+ }
33
+ }
34
+ export const aggClient = new AGGClient(DEFAULT_CONFIG.stargateRoot, {
35
+ logException: () => {}
36
+ });
@@ -0,0 +1,46 @@
1
+ export const MOCK_TEAM_CONTAINERS = {
2
+ graphStore: {
3
+ cypherQuery: {
4
+ edges: [{
5
+ node: {
6
+ from: {
7
+ id: '1'
8
+ },
9
+ to: {
10
+ id: '2',
11
+ data: {
12
+ __typename: 'ConfluenceSpace',
13
+ confluenceSpaceName: 'Confluence Space',
14
+ type: 'confluence',
15
+ createdDate: '2021-01-01',
16
+ links: {
17
+ webUi: 'web-link'
18
+ },
19
+ icon: {
20
+ path: 'https://avatar-management--avatars.us-west-2.staging.public.atl-paas.net/712020:2981defd-17f1-440e-a377-8c7657b72a6f/4b5b0d55-614b-4e75-858f-9da3d0c7e3f8/128'
21
+ }
22
+ }
23
+ }
24
+ }
25
+ }, {
26
+ node: {
27
+ from: {
28
+ id: '1'
29
+ },
30
+ to: {
31
+ id: '3',
32
+ data: {
33
+ __typename: 'JiraProject',
34
+ jiraProjectName: 'Jira Project',
35
+ webUrl: 'web-link',
36
+ created: '2021-01-01',
37
+ avatar: {
38
+ medium: 'https://avatar-management--avatars.us-west-2.staging.public.atl-paas.net/712020:2981defd-17f1-440e-a377-8c7657b72a6f/4b5b0d55-614b-4e75-858f-9da3d0c7e3f8/128'
39
+ }
40
+ }
41
+ }
42
+ }
43
+ }]
44
+ }
45
+ }
46
+ };
@@ -0,0 +1,46 @@
1
+ import { print } from 'graphql';
2
+ import gql from 'graphql-tag';
3
+ export const TeamContainersQuery = print(gql`
4
+ query TeamContainersQuery($cypherQuery: String!) {
5
+ graphStore @optIn(to: ["GraphStore"]) {
6
+ cypherQuery(query: $cypherQuery) @optIn(to: ["GraphStoreCypherQuery"]) {
7
+ edges {
8
+ __typename
9
+ node {
10
+ from {
11
+ id
12
+ }
13
+ to {
14
+ id
15
+ data {
16
+ __typename
17
+ ... on ConfluenceSpace {
18
+ id
19
+ confluenceSpaceName: name
20
+ type
21
+ createdDate
22
+ links {
23
+ base
24
+ webUi
25
+ }
26
+ icon {
27
+ path
28
+ }
29
+ }
30
+ ... on JiraProject {
31
+ id
32
+ jiraProjectName: name
33
+ webUrl
34
+ created
35
+ avatar {
36
+ medium
37
+ }
38
+ }
39
+ }
40
+ }
41
+ }
42
+ }
43
+ }
44
+ }
45
+ }
46
+ `);