@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.
- package/CHANGELOG.md +14 -0
- package/dist/cjs/common/utils/error/index.js +120 -0
- package/dist/cjs/common/utils/get-container-properties.js +2 -12
- package/dist/cjs/common/utils/http.js +119 -0
- package/dist/cjs/common/utils/status-code-handlers-provider.js +30 -0
- package/dist/cjs/common/utils/team-id-to-ari.js +10 -0
- package/dist/cjs/controllers/hooks/use-team-containers/index.js +79 -0
- package/dist/cjs/controllers/index.js +12 -0
- package/dist/cjs/services/agg-client/index.js +79 -0
- package/dist/cjs/services/agg-client/mocks/index.js +52 -0
- package/dist/cjs/services/agg-client/utils/queries/team-containers-query.js +12 -0
- package/dist/cjs/services/base-client/index.js +92 -0
- package/dist/cjs/services/constants.js +9 -0
- package/dist/cjs/services/graphql-client/index.js +12 -0
- package/dist/cjs/services/graphql-client/main.js +69 -0
- package/dist/cjs/services/graphql-client/types.js +5 -0
- package/dist/cjs/services/graphql-client/utils/index.js +157 -0
- package/dist/cjs/services/index.js +18 -0
- package/dist/cjs/services/main.js +72 -0
- package/dist/cjs/services/types.js +5 -0
- package/dist/cjs/ui/team-containers/add-container-card/index.compiled.css +0 -2
- package/dist/cjs/ui/team-containers/add-container-card/index.js +30 -12
- package/dist/cjs/ui/team-containers/linked-container-card/index.compiled.css +1 -2
- package/dist/cjs/ui/team-containers/linked-container-card/index.js +45 -15
- package/dist/cjs/ui/team-containers/main.js +94 -16
- package/dist/cjs/ui/team-containers/team-containers-skeleton/index.compiled.css +4 -0
- package/dist/cjs/ui/team-containers/team-containers-skeleton/index.js +36 -0
- package/dist/cjs/ui/team-containers/team-containers-skeleton/linked-container-card-skeleton/index.compiled.css +14 -0
- package/dist/cjs/ui/team-containers/team-containers-skeleton/linked-container-card-skeleton/index.js +38 -0
- package/dist/es2019/common/utils/error/index.js +87 -0
- package/dist/es2019/common/utils/get-container-properties.js +3 -13
- package/dist/es2019/common/utils/http.js +82 -0
- package/dist/es2019/common/utils/status-code-handlers-provider.js +25 -0
- package/dist/es2019/common/utils/team-id-to-ari.js +2 -0
- package/dist/es2019/controllers/hooks/use-team-containers/index.js +45 -0
- package/dist/es2019/controllers/index.js +1 -0
- package/dist/es2019/services/agg-client/index.js +36 -0
- package/dist/es2019/services/agg-client/mocks/index.js +46 -0
- package/dist/es2019/services/agg-client/utils/queries/team-containers-query.js +46 -0
- package/dist/es2019/services/base-client/index.js +64 -0
- package/dist/es2019/services/constants.js +3 -0
- package/dist/es2019/services/graphql-client/index.js +1 -0
- package/dist/es2019/services/graphql-client/main.js +23 -0
- package/dist/es2019/services/graphql-client/types.js +1 -0
- package/dist/es2019/services/graphql-client/utils/index.js +76 -0
- package/dist/es2019/services/index.js +1 -0
- package/dist/es2019/services/main.js +39 -0
- package/dist/es2019/services/types.js +1 -0
- package/dist/es2019/ui/team-containers/add-container-card/index.compiled.css +0 -2
- package/dist/es2019/ui/team-containers/add-container-card/index.js +15 -7
- package/dist/es2019/ui/team-containers/linked-container-card/index.compiled.css +1 -2
- package/dist/es2019/ui/team-containers/linked-container-card/index.js +28 -9
- package/dist/es2019/ui/team-containers/main.js +79 -16
- package/dist/es2019/ui/team-containers/team-containers-skeleton/index.compiled.css +4 -0
- package/dist/es2019/ui/team-containers/team-containers-skeleton/index.js +27 -0
- package/dist/es2019/ui/team-containers/team-containers-skeleton/linked-container-card-skeleton/index.compiled.css +14 -0
- package/dist/es2019/ui/team-containers/team-containers-skeleton/linked-container-card-skeleton/index.js +31 -0
- package/dist/esm/common/utils/error/index.js +117 -0
- package/dist/esm/common/utils/get-container-properties.js +3 -13
- package/dist/esm/common/utils/http.js +109 -0
- package/dist/esm/common/utils/status-code-handlers-provider.js +23 -0
- package/dist/esm/common/utils/team-id-to-ari.js +4 -0
- package/dist/esm/controllers/hooks/use-team-containers/index.js +72 -0
- package/dist/esm/controllers/index.js +1 -0
- package/dist/esm/services/agg-client/index.js +72 -0
- package/dist/esm/services/agg-client/mocks/index.js +46 -0
- package/dist/esm/services/agg-client/utils/queries/team-containers-query.js +5 -0
- package/dist/esm/services/base-client/index.js +85 -0
- package/dist/esm/services/constants.js +3 -0
- package/dist/esm/services/graphql-client/index.js +1 -0
- package/dist/esm/services/graphql-client/main.js +62 -0
- package/dist/esm/services/graphql-client/types.js +1 -0
- package/dist/esm/services/graphql-client/utils/index.js +149 -0
- package/dist/esm/services/index.js +1 -0
- package/dist/esm/services/main.js +65 -0
- package/dist/esm/services/types.js +1 -0
- package/dist/esm/ui/team-containers/add-container-card/index.compiled.css +0 -2
- package/dist/esm/ui/team-containers/add-container-card/index.js +25 -7
- package/dist/esm/ui/team-containers/linked-container-card/index.compiled.css +1 -2
- package/dist/esm/ui/team-containers/linked-container-card/index.js +39 -9
- package/dist/esm/ui/team-containers/main.js +91 -16
- package/dist/esm/ui/team-containers/team-containers-skeleton/index.compiled.css +4 -0
- package/dist/esm/ui/team-containers/team-containers-skeleton/index.js +29 -0
- package/dist/esm/ui/team-containers/team-containers-skeleton/linked-container-card-skeleton/index.compiled.css +14 -0
- package/dist/esm/ui/team-containers/team-containers-skeleton/linked-container-card-skeleton/index.js +31 -0
- package/dist/types/common/types.d.ts +1 -1
- package/dist/types/common/utils/error/index.d.ts +59 -0
- package/dist/types/common/utils/http.d.ts +31 -0
- package/dist/types/common/utils/status-code-handlers-provider.d.ts +17 -0
- package/dist/types/common/utils/team-id-to-ari.d.ts +2 -0
- package/dist/types/controllers/hooks/use-team-containers/index.d.ts +12 -0
- package/dist/types/controllers/index.d.ts +1 -0
- package/dist/types/services/agg-client/index.d.ts +15 -0
- package/dist/types/services/agg-client/mocks/index.d.ts +55 -0
- package/dist/types/services/agg-client/utils/queries/team-containers-query.d.ts +44 -0
- package/dist/types/services/base-client/index.d.ts +37 -0
- package/dist/types/services/constants.d.ts +4 -0
- package/dist/types/services/graphql-client/index.d.ts +1 -0
- package/dist/types/services/graphql-client/main.d.ts +8 -0
- package/dist/types/services/graphql-client/types.d.ts +19 -0
- package/dist/types/services/graphql-client/utils/index.d.ts +3 -0
- package/dist/types/services/index.d.ts +1 -0
- package/dist/types/services/main.d.ts +25 -0
- package/dist/types/services/types.d.ts +19 -0
- package/dist/types/ui/team-containers/add-container-card/index.d.ts +3 -2
- package/dist/types/ui/team-containers/linked-container-card/index.d.ts +3 -6
- package/dist/types/ui/team-containers/main.d.ts +3 -1
- package/dist/types/ui/team-containers/team-containers-skeleton/index.d.ts +6 -0
- package/dist/types/ui/team-containers/team-containers-skeleton/linked-container-card-skeleton/index.d.ts +2 -0
- package/dist/types/ui/team-containers/types.d.ts +5 -0
- package/dist/types-ts4.5/common/types.d.ts +1 -1
- package/dist/types-ts4.5/common/utils/error/index.d.ts +59 -0
- package/dist/types-ts4.5/common/utils/http.d.ts +31 -0
- package/dist/types-ts4.5/common/utils/status-code-handlers-provider.d.ts +17 -0
- package/dist/types-ts4.5/common/utils/team-id-to-ari.d.ts +2 -0
- package/dist/types-ts4.5/controllers/hooks/use-team-containers/index.d.ts +12 -0
- package/dist/types-ts4.5/controllers/index.d.ts +1 -0
- package/dist/types-ts4.5/services/agg-client/index.d.ts +15 -0
- package/dist/types-ts4.5/services/agg-client/mocks/index.d.ts +55 -0
- package/dist/types-ts4.5/services/agg-client/utils/queries/team-containers-query.d.ts +44 -0
- package/dist/types-ts4.5/services/base-client/index.d.ts +37 -0
- package/dist/types-ts4.5/services/constants.d.ts +4 -0
- package/dist/types-ts4.5/services/graphql-client/index.d.ts +1 -0
- package/dist/types-ts4.5/services/graphql-client/main.d.ts +8 -0
- package/dist/types-ts4.5/services/graphql-client/types.d.ts +19 -0
- package/dist/types-ts4.5/services/graphql-client/utils/index.d.ts +3 -0
- package/dist/types-ts4.5/services/index.d.ts +1 -0
- package/dist/types-ts4.5/services/main.d.ts +25 -0
- package/dist/types-ts4.5/services/types.d.ts +19 -0
- package/dist/types-ts4.5/ui/team-containers/add-container-card/index.d.ts +3 -2
- package/dist/types-ts4.5/ui/team-containers/linked-container-card/index.d.ts +3 -6
- package/dist/types-ts4.5/ui/team-containers/main.d.ts +3 -1
- package/dist/types-ts4.5/ui/team-containers/team-containers-skeleton/index.d.ts +6 -0
- package/dist/types-ts4.5/ui/team-containers/team-containers-skeleton/linked-container-card-skeleton/index.d.ts +2 -0
- package/dist/types-ts4.5/ui/team-containers/types.d.ts +5 -0
- package/package.json +9 -5
- package/dist/cjs/ui/team-containers/constants.js +0 -7
- package/dist/es2019/ui/team-containers/constants.js +0 -1
- package/dist/esm/ui/team-containers/constants.js +0 -1
- package/dist/types/ui/team-containers/constants.d.ts +0 -1
- 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
|
|
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
|
|
16
|
-
|
|
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
|
-
},
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
}), /*#__PURE__*/_react.default.createElement(_addContainerCard.AddContainerCard, {
|
|
29
|
-
|
|
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,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)}
|
package/dist/cjs/ui/team-containers/team-containers-skeleton/linked-container-card-skeleton/index.js
ADDED
|
@@ -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
|
|
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 '
|
|
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 '
|
|
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,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
|
+
`);
|