@atlaskit/teams-public 0.54.3 → 0.55.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 +13 -0
- package/dist/cjs/controllers/hooks/use-create-containers/index.js +1 -3
- package/dist/cjs/controllers/hooks/use-refresh-containers-on-container-created/index.js +143 -0
- package/dist/cjs/ui/team-containers/main.js +113 -108
- package/dist/cjs/ui/team-containers/team-link-card/index.js +3 -2
- package/dist/es2019/controllers/hooks/use-create-containers/index.js +1 -3
- package/dist/es2019/controllers/hooks/use-refresh-containers-on-container-created/index.js +135 -0
- package/dist/es2019/ui/team-containers/main.js +75 -66
- package/dist/es2019/ui/team-containers/team-link-card/index.js +3 -2
- package/dist/esm/controllers/hooks/use-create-containers/index.js +1 -3
- package/dist/esm/controllers/hooks/use-refresh-containers-on-container-created/index.js +136 -0
- package/dist/esm/ui/team-containers/main.js +107 -104
- package/dist/esm/ui/team-containers/team-link-card/index.js +3 -2
- package/dist/types/controllers/hooks/use-refresh-containers-on-container-created/index.d.ts +4 -0
- package/dist/types/ui/team-containers/main.d.ts +1 -1
- package/dist/types/ui/team-containers/team-link-card/index.d.ts +2 -1
- package/dist/types/ui/team-containers/types.d.ts +12 -0
- package/dist/types-ts4.5/controllers/hooks/use-refresh-containers-on-container-created/index.d.ts +4 -0
- package/dist/types-ts4.5/ui/team-containers/main.d.ts +1 -1
- package/dist/types-ts4.5/ui/team-containers/team-link-card/index.d.ts +2 -1
- package/dist/types-ts4.5/ui/team-containers/types.d.ts +12 -0
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
# @atlaskit/teams-public
|
|
2
2
|
|
|
3
|
+
## 0.55.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [`aac362891a691`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/aac362891a691) -
|
|
8
|
+
Team containers made reusable
|
|
9
|
+
- [`2aa702d47e9d3`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/2aa702d47e9d3) -
|
|
10
|
+
Update useRefreshOnContainerCreated to poll for container until its ready
|
|
11
|
+
|
|
12
|
+
### Patch Changes
|
|
13
|
+
|
|
14
|
+
- Updated dependencies
|
|
15
|
+
|
|
3
16
|
## 0.54.3
|
|
4
17
|
|
|
5
18
|
### Patch Changes
|
|
@@ -33,10 +33,8 @@ var actions = {
|
|
|
33
33
|
if (current.isCreated === isCreated) {
|
|
34
34
|
return;
|
|
35
35
|
}
|
|
36
|
-
var isLoading = isCreated ? false : current.isLoading;
|
|
37
36
|
setState(_objectSpread(_objectSpread({}, containers), {}, (0, _defineProperty2.default)({}, product, _objectSpread(_objectSpread({}, current), {}, {
|
|
38
|
-
isCreated: isCreated
|
|
39
|
-
isLoading: isLoading
|
|
37
|
+
isCreated: isCreated
|
|
40
38
|
}))));
|
|
41
39
|
};
|
|
42
40
|
}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.TIMEOUT_DURATION = exports.INTERVAL_TIME = void 0;
|
|
8
|
+
exports.useRefreshOnContainerCreated = useRefreshOnContainerCreated;
|
|
9
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
10
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
11
|
+
var _react = require("react");
|
|
12
|
+
var _useCreateContainers3 = require("../use-create-containers");
|
|
13
|
+
var _useTeamContainers2 = require("../use-team-containers");
|
|
14
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
15
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
16
|
+
var PRODUCT_TO_CONTAINER_TYPE = {
|
|
17
|
+
Jira: 'JiraProject',
|
|
18
|
+
Confluence: 'ConfluenceSpace',
|
|
19
|
+
Loom: 'LoomSpace'
|
|
20
|
+
};
|
|
21
|
+
var INTERVAL_TIME = exports.INTERVAL_TIME = 2000;
|
|
22
|
+
var TIMEOUT_DURATION = exports.TIMEOUT_DURATION = 30000;
|
|
23
|
+
function useRefreshOnContainerCreated(teamId) {
|
|
24
|
+
var _useCreateContainers = (0, _useCreateContainers3.useCreateContainers)(),
|
|
25
|
+
_useCreateContainers2 = (0, _slicedToArray2.default)(_useCreateContainers, 2),
|
|
26
|
+
containers = _useCreateContainers2[0],
|
|
27
|
+
updateContainerLoading = _useCreateContainers2[1].updateContainerLoading;
|
|
28
|
+
var _useTeamContainers = (0, _useTeamContainers2.useTeamContainers)(teamId),
|
|
29
|
+
refetchTeamContainers = _useTeamContainers.refetchTeamContainers,
|
|
30
|
+
teamContainers = _useTeamContainers.teamContainers;
|
|
31
|
+
var _useState = (0, _react.useState)({}),
|
|
32
|
+
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
33
|
+
createdContainers = _useState2[0],
|
|
34
|
+
setCreatedContainers = _useState2[1];
|
|
35
|
+
var intervalRef = (0, _react.useRef)(null);
|
|
36
|
+
(0, _react.useEffect)(function () {
|
|
37
|
+
setCreatedContainers({});
|
|
38
|
+
if (intervalRef.current) {
|
|
39
|
+
clearInterval(intervalRef.current);
|
|
40
|
+
intervalRef.current = null;
|
|
41
|
+
}
|
|
42
|
+
}, [teamId]);
|
|
43
|
+
(0, _react.useEffect)(function () {
|
|
44
|
+
var products = Object.keys(containers);
|
|
45
|
+
products.forEach(function (product) {
|
|
46
|
+
var isCreated = containers[product].isCreated;
|
|
47
|
+
if (!isCreated) {
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
var existing = createdContainers[product];
|
|
51
|
+
if (existing && existing.found === false) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
if (existing && existing.found) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
var containerType = PRODUCT_TO_CONTAINER_TYPE[product];
|
|
58
|
+
if (!containerType) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
var currentCount = teamContainers.filter(function (c) {
|
|
62
|
+
return c.type === containerType;
|
|
63
|
+
}).length;
|
|
64
|
+
if (currentCount > 0) {
|
|
65
|
+
setCreatedContainers(function (prev) {
|
|
66
|
+
return _objectSpread(_objectSpread({}, prev), {}, (0, _defineProperty2.default)({}, product, {
|
|
67
|
+
startedAt: Date.now(),
|
|
68
|
+
found: true
|
|
69
|
+
}));
|
|
70
|
+
});
|
|
71
|
+
updateContainerLoading(product, false);
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
setCreatedContainers(function (prev) {
|
|
75
|
+
return _objectSpread(_objectSpread({}, prev), {}, (0, _defineProperty2.default)({}, product, {
|
|
76
|
+
startedAt: Date.now(),
|
|
77
|
+
found: false
|
|
78
|
+
}));
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
}, [containers, createdContainers, teamContainers, updateContainerLoading]);
|
|
82
|
+
(0, _react.useEffect)(function () {
|
|
83
|
+
if (Object.keys(createdContainers).length === 0) {
|
|
84
|
+
if (intervalRef.current) {
|
|
85
|
+
clearInterval(intervalRef.current);
|
|
86
|
+
intervalRef.current = null;
|
|
87
|
+
}
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
if (intervalRef.current) {
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
intervalRef.current = setInterval(function () {
|
|
94
|
+
setCreatedContainers(function (prev) {
|
|
95
|
+
var anyPending = false;
|
|
96
|
+
var next = _objectSpread({}, prev);
|
|
97
|
+
Object.keys(prev).forEach(function (product) {
|
|
98
|
+
var target = prev[product];
|
|
99
|
+
if (!target || target.found) {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
var startedAt = target.startedAt;
|
|
103
|
+
var containerType = PRODUCT_TO_CONTAINER_TYPE[product];
|
|
104
|
+
if (!containerType) {
|
|
105
|
+
next[product] = _objectSpread(_objectSpread({}, target), {}, {
|
|
106
|
+
found: true
|
|
107
|
+
});
|
|
108
|
+
updateContainerLoading(product, false);
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
var currentCount = teamContainers.filter(function (container) {
|
|
112
|
+
return container.type === containerType;
|
|
113
|
+
}).length;
|
|
114
|
+
var elapsed = Date.now() - startedAt;
|
|
115
|
+
if (currentCount > 0 || elapsed >= TIMEOUT_DURATION) {
|
|
116
|
+
next[product] = _objectSpread(_objectSpread({}, target), {}, {
|
|
117
|
+
found: true
|
|
118
|
+
});
|
|
119
|
+
updateContainerLoading(product, false);
|
|
120
|
+
} else {
|
|
121
|
+
anyPending = true;
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
if (!anyPending) {
|
|
125
|
+
if (intervalRef.current) {
|
|
126
|
+
clearInterval(intervalRef.current);
|
|
127
|
+
intervalRef.current = null;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
if (anyPending) {
|
|
131
|
+
refetchTeamContainers();
|
|
132
|
+
}
|
|
133
|
+
return next;
|
|
134
|
+
});
|
|
135
|
+
}, INTERVAL_TIME);
|
|
136
|
+
return function () {
|
|
137
|
+
if (intervalRef.current) {
|
|
138
|
+
clearInterval(intervalRef.current);
|
|
139
|
+
intervalRef.current = null;
|
|
140
|
+
}
|
|
141
|
+
};
|
|
142
|
+
}, [createdContainers, teamContainers, refetchTeamContainers, updateContainerLoading]);
|
|
143
|
+
}
|
|
@@ -8,7 +8,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
8
8
|
exports.TeamContainers = exports.MAX_NUMBER_OF_CONTAINERS_TO_SHOW = exports.ICON_COLOR = exports.ICON_BACKGROUND = void 0;
|
|
9
9
|
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
10
10
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
11
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
12
11
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
13
12
|
var _react = _interopRequireWildcard(require("react"));
|
|
14
13
|
var _reactIntlNext = require("react-intl-next");
|
|
@@ -23,44 +22,22 @@ var _colors = require("@atlaskit/theme/colors");
|
|
|
23
22
|
var _teamContainersSkeleton = require("../../common/ui/team-containers-skeleton");
|
|
24
23
|
var _analytics = require("../../common/utils/analytics");
|
|
25
24
|
var _controllers = require("../../controllers");
|
|
26
|
-
var
|
|
25
|
+
var _useCreateContainers3 = require("../../controllers/hooks/use-create-containers");
|
|
27
26
|
var _useProductPermission3 = require("../../controllers/hooks/use-product-permission");
|
|
27
|
+
var _useRefreshContainersOnContainerCreated = require("../../controllers/hooks/use-refresh-containers-on-container-created");
|
|
28
28
|
var _useRequestedContainer = require("../../controllers/hooks/use-requested-container");
|
|
29
|
-
var
|
|
29
|
+
var _useTeamContainers2 = require("../../controllers/hooks/use-team-containers");
|
|
30
30
|
var _useTeamLinksAndContainers = require("../../controllers/hooks/use-team-links-and-containers");
|
|
31
31
|
var _addContainerCard = require("./add-container-card");
|
|
32
32
|
var _async = require("./disconnect-dialog/async");
|
|
33
33
|
var _noProductAccessEmptyState = require("./no-product-access-empty-state");
|
|
34
34
|
var _teamLinkCard = require("./team-link-card");
|
|
35
35
|
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
36
|
-
|
|
37
|
-
|
|
36
|
+
// eslint-disable-next-line @atlaskit/design-system/no-emotion-primitives -- to be migrated to @atlaskit/primitives/compiled – go/akcss
|
|
37
|
+
|
|
38
38
|
var ICON_BACKGROUND = exports.ICON_BACKGROUND = "var(--ds-icon-inverse, ".concat(_colors.N0, ")");
|
|
39
39
|
var ICON_COLOR = exports.ICON_COLOR = "var(--ds-icon-subtle, ".concat(_colors.N90, ")");
|
|
40
40
|
var MAX_NUMBER_OF_CONTAINERS_TO_SHOW = exports.MAX_NUMBER_OF_CONTAINERS_TO_SHOW = 4;
|
|
41
|
-
function useRefreshOnContainerCreated(teamId) {
|
|
42
|
-
var _useCreateContainers = (0, _useCreateContainers5.useCreateContainers)(),
|
|
43
|
-
_useCreateContainers2 = (0, _slicedToArray2.default)(_useCreateContainers, 1),
|
|
44
|
-
containers = _useCreateContainers2[0];
|
|
45
|
-
var _useTeamContainers = (0, _useTeamContainers3.useTeamContainers)(teamId),
|
|
46
|
-
refetchTeamContainers = _useTeamContainers.refetchTeamContainers;
|
|
47
|
-
var _useState = (0, _react.useState)({}),
|
|
48
|
-
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
49
|
-
refreshedProducts = _useState2[0],
|
|
50
|
-
setRefreshedProducts = _useState2[1];
|
|
51
|
-
(0, _react.useEffect)(function () {
|
|
52
|
-
var products = Object.keys(containers);
|
|
53
|
-
products.forEach(function (product) {
|
|
54
|
-
var isCreated = containers[product].isCreated;
|
|
55
|
-
if (isCreated && !refreshedProducts[product]) {
|
|
56
|
-
setRefreshedProducts(function (prev) {
|
|
57
|
-
return _objectSpread(_objectSpread({}, prev), {}, (0, _defineProperty2.default)({}, product, true));
|
|
58
|
-
});
|
|
59
|
-
refetchTeamContainers();
|
|
60
|
-
}
|
|
61
|
-
});
|
|
62
|
-
}, [containers, refetchTeamContainers, refreshedProducts]);
|
|
63
|
-
}
|
|
64
41
|
var TeamContainers = exports.TeamContainers = function TeamContainers(_ref) {
|
|
65
42
|
var teamId = _ref.teamId,
|
|
66
43
|
onAddAContainerClick = _ref.onAddAContainerClick,
|
|
@@ -72,17 +49,21 @@ var TeamContainers = exports.TeamContainers = function TeamContainers(_ref) {
|
|
|
72
49
|
cloudId = _ref.cloudId,
|
|
73
50
|
filterContainerId = _ref.filterContainerId,
|
|
74
51
|
isDisplayedOnProfileCard = _ref.isDisplayedOnProfileCard,
|
|
52
|
+
isReadOnly = _ref.isReadOnly,
|
|
53
|
+
onError = _ref.onError,
|
|
75
54
|
_ref$maxNumberOfConta = _ref.maxNumberOfContainersToShow,
|
|
76
|
-
maxNumberOfContainersToShow = _ref$maxNumberOfConta === void 0 ? MAX_NUMBER_OF_CONTAINERS_TO_SHOW : _ref$maxNumberOfConta
|
|
55
|
+
maxNumberOfContainersToShow = _ref$maxNumberOfConta === void 0 ? MAX_NUMBER_OF_CONTAINERS_TO_SHOW : _ref$maxNumberOfConta,
|
|
56
|
+
elemBeforeCards = _ref.elemBeforeCards;
|
|
77
57
|
var _useAnalyticsEvents = (0, _analyticsNext.useAnalyticsEvents)(),
|
|
78
58
|
createAnalyticsEvent = _useAnalyticsEvents.createAnalyticsEvent;
|
|
79
|
-
var
|
|
80
|
-
unlinkError =
|
|
59
|
+
var _useTeamContainers = (0, _useTeamContainers2.useTeamContainers)(teamId),
|
|
60
|
+
unlinkError = _useTeamContainers.unlinkError;
|
|
81
61
|
var _useTeamLinksAndConta = (0, _useTeamLinksAndContainers.useTeamLinksAndContainers)(teamId, true),
|
|
82
62
|
teamLinks = _useTeamLinksAndConta.teamLinks,
|
|
83
63
|
removeTeamLink = _useTeamLinksAndConta.removeTeamLink,
|
|
84
64
|
iconsLoading = _useTeamLinksAndConta.iconsLoading,
|
|
85
65
|
iconHasLoaded = _useTeamLinksAndConta.iconHasLoaded,
|
|
66
|
+
hasError = _useTeamLinksAndConta.hasError,
|
|
86
67
|
linksLoading = _useTeamLinksAndConta.isLoading;
|
|
87
68
|
var _useRequestedContaine = (0, _useRequestedContainer.useRequestedContainers)({
|
|
88
69
|
teamId: teamId,
|
|
@@ -90,38 +71,38 @@ var TeamContainers = exports.TeamContainers = function TeamContainers(_ref) {
|
|
|
90
71
|
onRequestedContainerTimeout: onRequestedContainerTimeout
|
|
91
72
|
}),
|
|
92
73
|
requestedContainers = _useRequestedContaine.requestedContainers;
|
|
93
|
-
var _useTeamContainersHoo = (0,
|
|
74
|
+
var _useTeamContainersHoo = (0, _useTeamContainers2.useTeamContainersHook)(),
|
|
94
75
|
_useTeamContainersHoo2 = (0, _slicedToArray2.default)(_useTeamContainersHoo, 2),
|
|
95
76
|
_ = _useTeamContainersHoo2[0],
|
|
96
77
|
actions = _useTeamContainersHoo2[1];
|
|
78
|
+
var _useState = (0, _react.useState)(false),
|
|
79
|
+
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
80
|
+
showMore = _useState2[0],
|
|
81
|
+
setShowMore = _useState2[1];
|
|
97
82
|
var _useState3 = (0, _react.useState)(false),
|
|
98
83
|
_useState4 = (0, _slicedToArray2.default)(_useState3, 2),
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
var _useState5 = (0, _react.useState)(
|
|
84
|
+
isDisconnectDialogOpen = _useState4[0],
|
|
85
|
+
setIsDisconnectDialogOpen = _useState4[1];
|
|
86
|
+
var _useState5 = (0, _react.useState)(),
|
|
102
87
|
_useState6 = (0, _slicedToArray2.default)(_useState5, 2),
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
var _useState7 = (0, _react.useState)(),
|
|
88
|
+
selectedContainerDetails = _useState6[0],
|
|
89
|
+
setSelectedContainerDetails = _useState6[1];
|
|
90
|
+
var _useState7 = (0, _react.useState)(teamLinks),
|
|
106
91
|
_useState8 = (0, _slicedToArray2.default)(_useState7, 2),
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
var _useState9 = (0, _react.useState)(
|
|
110
|
-
_useState0 = (0, _slicedToArray2.default)(_useState9, 2),
|
|
111
|
-
filteredTeamLinks = _useState0[0],
|
|
112
|
-
setFilteredTeamLinks = _useState0[1];
|
|
113
|
-
var _useState1 = (0, _react.useState)({
|
|
92
|
+
filteredTeamLinks = _useState8[0],
|
|
93
|
+
setFilteredTeamLinks = _useState8[1];
|
|
94
|
+
var _useState9 = (0, _react.useState)({
|
|
114
95
|
Jira: false,
|
|
115
96
|
Confluence: false,
|
|
116
97
|
Loom: false,
|
|
117
98
|
WebLink: false
|
|
118
99
|
}),
|
|
119
|
-
|
|
120
|
-
canAddContainer =
|
|
121
|
-
setCanAddContainer =
|
|
122
|
-
var
|
|
123
|
-
|
|
124
|
-
containers =
|
|
100
|
+
_useState0 = (0, _slicedToArray2.default)(_useState9, 2),
|
|
101
|
+
canAddContainer = _useState0[0],
|
|
102
|
+
setCanAddContainer = _useState0[1];
|
|
103
|
+
var _useCreateContainers = (0, _useCreateContainers3.useCreateContainers)(),
|
|
104
|
+
_useCreateContainers2 = (0, _slicedToArray2.default)(_useCreateContainers, 1),
|
|
105
|
+
containers = _useCreateContainers2[0];
|
|
125
106
|
var _usePeopleAndTeamAnal = (0, _analytics.usePeopleAndTeamAnalytics)(),
|
|
126
107
|
fireTrackEvent = _usePeopleAndTeamAnal.fireTrackEvent;
|
|
127
108
|
var _useProductPermission = (0, _teamsAppInternalProductPermissions.useProductPermissions)({
|
|
@@ -146,7 +127,7 @@ var TeamContainers = exports.TeamContainers = function TeamContainers(_ref) {
|
|
|
146
127
|
}),
|
|
147
128
|
productPermissionsOld = _useProductPermission2.data,
|
|
148
129
|
productPermissionIsLoadingOld = _useProductPermission2.loading;
|
|
149
|
-
useRefreshOnContainerCreated(teamId);
|
|
130
|
+
(0, _useRefreshContainersOnContainerCreated.useRefreshOnContainerCreated)(teamId);
|
|
150
131
|
var hasPermissionToCreateContainer = (0, _react.useMemo)(function () {
|
|
151
132
|
if (!productPermissions) {
|
|
152
133
|
return {};
|
|
@@ -168,7 +149,7 @@ var TeamContainers = exports.TeamContainers = function TeamContainers(_ref) {
|
|
|
168
149
|
}, [teamLinks, isDisplayedOnProfileCard, filterContainerId, requestedContainers]);
|
|
169
150
|
(0, _react.useEffect)(function () {
|
|
170
151
|
var containersToCheck = filteredTeamLinks;
|
|
171
|
-
if (containersToCheck.length > maxNumberOfContainersToShow || isDisplayedOnProfileCard) {
|
|
152
|
+
if (containersToCheck.length > maxNumberOfContainersToShow || isDisplayedOnProfileCard || isReadOnly) {
|
|
172
153
|
setCanAddContainer({
|
|
173
154
|
Jira: false,
|
|
174
155
|
Confluence: false,
|
|
@@ -200,7 +181,16 @@ var TeamContainers = exports.TeamContainers = function TeamContainers(_ref) {
|
|
|
200
181
|
WebLink: !containerExists('WebLink')
|
|
201
182
|
});
|
|
202
183
|
}
|
|
203
|
-
}, [isDisplayedOnProfileCard, productPermissions, productPermissionsOld, filteredTeamLinks, maxNumberOfContainersToShow, requestedContainers]);
|
|
184
|
+
}, [isDisplayedOnProfileCard, productPermissions, productPermissionsOld, filteredTeamLinks, maxNumberOfContainersToShow, requestedContainers, isReadOnly]);
|
|
185
|
+
(0, _react.useEffect)(function () {
|
|
186
|
+
if (onError) {
|
|
187
|
+
if (hasError) {
|
|
188
|
+
onError(hasError);
|
|
189
|
+
} else if (unlinkError) {
|
|
190
|
+
onError(unlinkError);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}, [hasError, unlinkError, onError]);
|
|
204
194
|
var handleShowMore = function handleShowMore() {
|
|
205
195
|
setShowMore(!showMore);
|
|
206
196
|
};
|
|
@@ -311,63 +301,78 @@ var TeamContainers = exports.TeamContainers = function TeamContainers(_ref) {
|
|
|
311
301
|
numberOfContainers: maxNumberOfContainersToShow
|
|
312
302
|
});
|
|
313
303
|
}
|
|
314
|
-
if (hasNoContainers
|
|
315
|
-
|
|
304
|
+
if (hasNoContainers) {
|
|
305
|
+
if (components !== null && components !== void 0 && components.TeamContainersEmptyState) {
|
|
306
|
+
var EmptyStateComponent = components.TeamContainersEmptyState;
|
|
307
|
+
return /*#__PURE__*/_react.default.createElement(EmptyStateComponent, {
|
|
308
|
+
hasNoPermissions: !!hasNoPermissions
|
|
309
|
+
});
|
|
310
|
+
} else if (!isDisplayedOnProfileCard && hasNoPermissions) {
|
|
311
|
+
return /*#__PURE__*/_react.default.createElement(_noProductAccessEmptyState.NoProductAccessState, null);
|
|
312
|
+
}
|
|
316
313
|
}
|
|
317
314
|
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_primitives.Stack, {
|
|
318
315
|
space: "space.200"
|
|
319
|
-
},
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
316
|
+
}, function () {
|
|
317
|
+
var GridComponent = (components === null || components === void 0 ? void 0 : components.Grid) || _primitives.Grid;
|
|
318
|
+
return /*#__PURE__*/_react.default.createElement(GridComponent, {
|
|
319
|
+
templateColumns: "repeat(auto-fill, minmax(300px, 1fr))",
|
|
320
|
+
gap: isDisplayedOnProfileCard ? 'space.0' : 'space.100'
|
|
321
|
+
}, elemBeforeCards && function () {
|
|
322
|
+
var ElemBeforeCards = elemBeforeCards;
|
|
323
|
+
return /*#__PURE__*/_react.default.createElement(ElemBeforeCards, null);
|
|
324
|
+
}(), filteredTeamLinks.slice(0, maxNumberOfContainersToShow).map(function (container) {
|
|
325
|
+
return /*#__PURE__*/_react.default.createElement(LinkedContainerCardComponent, {
|
|
326
|
+
key: container.id,
|
|
327
|
+
containerType: container.type,
|
|
328
|
+
containerTypeProperties: container.containerTypeProperties,
|
|
329
|
+
title: container.name,
|
|
330
|
+
containerIcon: container.icon || undefined,
|
|
331
|
+
link: container.link || undefined,
|
|
332
|
+
containerId: container.id,
|
|
333
|
+
iconsLoading: iconsLoading,
|
|
334
|
+
iconHasLoaded: iconHasLoaded,
|
|
335
|
+
isReadOnly: isReadOnly,
|
|
336
|
+
onDisconnectButtonClick: function onDisconnectButtonClick() {
|
|
337
|
+
return handleOpenDisconnectDialog({
|
|
338
|
+
containerId: container.id,
|
|
339
|
+
containerType: container.type,
|
|
340
|
+
containerName: container.name
|
|
341
|
+
});
|
|
342
|
+
},
|
|
343
|
+
onEditLinkClick: function onEditLinkClick() {
|
|
344
|
+
return handleEditContainerClick(container);
|
|
345
|
+
}
|
|
346
|
+
});
|
|
347
|
+
}), (0, _addContainerCard.getAddContainerCards)({
|
|
348
|
+
containers: availableContainers,
|
|
349
|
+
onAddAContainerClick: onAddAContainerClick,
|
|
350
|
+
showNewDesign: createContainerExperimentEnabled
|
|
351
|
+
}), showMore && filteredTeamLinks.slice(maxNumberOfContainersToShow).map(function (container) {
|
|
352
|
+
return /*#__PURE__*/_react.default.createElement(LinkedContainerCardComponent, {
|
|
353
|
+
key: container.id,
|
|
354
|
+
containerType: container.type,
|
|
355
|
+
containerTypeProperties: container.containerTypeProperties,
|
|
356
|
+
title: container.name,
|
|
357
|
+
containerId: container.id,
|
|
358
|
+
containerIcon: container.icon || undefined,
|
|
359
|
+
link: container.link || undefined,
|
|
360
|
+
iconsLoading: iconsLoading,
|
|
361
|
+
iconHasLoaded: iconHasLoaded,
|
|
362
|
+
isReadOnly: isReadOnly,
|
|
363
|
+
onDisconnectButtonClick: function onDisconnectButtonClick() {
|
|
364
|
+
return handleOpenDisconnectDialog({
|
|
365
|
+
containerId: container.id,
|
|
366
|
+
containerType: container.type,
|
|
367
|
+
containerName: container.name
|
|
368
|
+
});
|
|
369
|
+
},
|
|
370
|
+
onEditLinkClick: function onEditLinkClick() {
|
|
371
|
+
return handleEditContainerClick(container);
|
|
372
|
+
}
|
|
373
|
+
});
|
|
374
|
+
}));
|
|
375
|
+
}(), filteredTeamLinks.length > maxNumberOfContainersToShow && /*#__PURE__*/_react.default.createElement(_primitives.Inline, null, /*#__PURE__*/_react.default.createElement(_new.default, {
|
|
371
376
|
appearance: "subtle",
|
|
372
377
|
onClick: handleShowMore
|
|
373
378
|
}, showMore ? /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, messages.showLess) : /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, messages.showMore)))), /*#__PURE__*/_react.default.createElement(_modalTransition.default, null, isDisconnectDialogOpen && selectedContainerDetails && /*#__PURE__*/_react.default.createElement(_async.DisconnectDialogLazy, {
|
|
@@ -53,7 +53,8 @@ var TeamLinkCard = exports.TeamLinkCard = function TeamLinkCard(_ref) {
|
|
|
53
53
|
_onEditLinkClick = _ref.onEditLinkClick,
|
|
54
54
|
iconsLoading = _ref.iconsLoading,
|
|
55
55
|
iconHasLoaded = _ref.iconHasLoaded,
|
|
56
|
-
openInNewTab = _ref.openInNewTab
|
|
56
|
+
openInNewTab = _ref.openInNewTab,
|
|
57
|
+
isReadOnly = _ref.isReadOnly;
|
|
57
58
|
var _useAnalyticsEvents = (0, _analyticsNext.useAnalyticsEvents)(),
|
|
58
59
|
createAnalyticsEvent = _useAnalyticsEvents.createAnalyticsEvent;
|
|
59
60
|
var _getContainerProperti = (0, _getContainerProperties.getContainerProperties)({
|
|
@@ -186,7 +187,7 @@ var TeamLinkCard = exports.TeamLinkCard = function TeamLinkCard(_ref) {
|
|
|
186
187
|
}, description), /*#__PURE__*/_react.default.createElement(_compiled.Text, {
|
|
187
188
|
size: "small",
|
|
188
189
|
color: "color.text.subtle"
|
|
189
|
-
}, containerTypeText))))), /*#__PURE__*/_react.default.createElement(_teamLinkCardActions.TeamLinkCardActions, {
|
|
190
|
+
}, containerTypeText))))), !isReadOnly && /*#__PURE__*/_react.default.createElement(_teamLinkCardActions.TeamLinkCardActions, {
|
|
190
191
|
containerType: containerType,
|
|
191
192
|
title: title,
|
|
192
193
|
containerId: containerId,
|
|
@@ -26,13 +26,11 @@ const actions = {
|
|
|
26
26
|
if (current.isCreated === isCreated) {
|
|
27
27
|
return;
|
|
28
28
|
}
|
|
29
|
-
const isLoading = isCreated ? false : current.isLoading;
|
|
30
29
|
setState({
|
|
31
30
|
...containers,
|
|
32
31
|
[product]: {
|
|
33
32
|
...current,
|
|
34
|
-
isCreated
|
|
35
|
-
isLoading
|
|
33
|
+
isCreated
|
|
36
34
|
}
|
|
37
35
|
});
|
|
38
36
|
}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { useEffect, useRef, useState } from 'react';
|
|
2
|
+
import { useCreateContainers } from '../use-create-containers';
|
|
3
|
+
import { useTeamContainers } from '../use-team-containers';
|
|
4
|
+
const PRODUCT_TO_CONTAINER_TYPE = {
|
|
5
|
+
Jira: 'JiraProject',
|
|
6
|
+
Confluence: 'ConfluenceSpace',
|
|
7
|
+
Loom: 'LoomSpace'
|
|
8
|
+
};
|
|
9
|
+
const INTERVAL_TIME = 2000;
|
|
10
|
+
const TIMEOUT_DURATION = 30000;
|
|
11
|
+
function useRefreshOnContainerCreated(teamId) {
|
|
12
|
+
const [containers, {
|
|
13
|
+
updateContainerLoading
|
|
14
|
+
}] = useCreateContainers();
|
|
15
|
+
const {
|
|
16
|
+
refetchTeamContainers,
|
|
17
|
+
teamContainers
|
|
18
|
+
} = useTeamContainers(teamId);
|
|
19
|
+
const [createdContainers, setCreatedContainers] = useState({});
|
|
20
|
+
const intervalRef = useRef(null);
|
|
21
|
+
useEffect(() => {
|
|
22
|
+
setCreatedContainers({});
|
|
23
|
+
if (intervalRef.current) {
|
|
24
|
+
clearInterval(intervalRef.current);
|
|
25
|
+
intervalRef.current = null;
|
|
26
|
+
}
|
|
27
|
+
}, [teamId]);
|
|
28
|
+
useEffect(() => {
|
|
29
|
+
const products = Object.keys(containers);
|
|
30
|
+
products.forEach(product => {
|
|
31
|
+
const {
|
|
32
|
+
isCreated
|
|
33
|
+
} = containers[product];
|
|
34
|
+
if (!isCreated) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
const existing = createdContainers[product];
|
|
38
|
+
if (existing && existing.found === false) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
if (existing && existing.found) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
const containerType = PRODUCT_TO_CONTAINER_TYPE[product];
|
|
45
|
+
if (!containerType) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
const currentCount = teamContainers.filter(c => c.type === containerType).length;
|
|
49
|
+
if (currentCount > 0) {
|
|
50
|
+
setCreatedContainers(prev => ({
|
|
51
|
+
...prev,
|
|
52
|
+
[product]: {
|
|
53
|
+
startedAt: Date.now(),
|
|
54
|
+
found: true
|
|
55
|
+
}
|
|
56
|
+
}));
|
|
57
|
+
updateContainerLoading(product, false);
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
setCreatedContainers(prev => ({
|
|
61
|
+
...prev,
|
|
62
|
+
[product]: {
|
|
63
|
+
startedAt: Date.now(),
|
|
64
|
+
found: false
|
|
65
|
+
}
|
|
66
|
+
}));
|
|
67
|
+
});
|
|
68
|
+
}, [containers, createdContainers, teamContainers, updateContainerLoading]);
|
|
69
|
+
useEffect(() => {
|
|
70
|
+
if (Object.keys(createdContainers).length === 0) {
|
|
71
|
+
if (intervalRef.current) {
|
|
72
|
+
clearInterval(intervalRef.current);
|
|
73
|
+
intervalRef.current = null;
|
|
74
|
+
}
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
if (intervalRef.current) {
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
intervalRef.current = setInterval(() => {
|
|
81
|
+
setCreatedContainers(prev => {
|
|
82
|
+
let anyPending = false;
|
|
83
|
+
const next = {
|
|
84
|
+
...prev
|
|
85
|
+
};
|
|
86
|
+
Object.keys(prev).forEach(product => {
|
|
87
|
+
const target = prev[product];
|
|
88
|
+
if (!target || target.found) {
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
const {
|
|
92
|
+
startedAt
|
|
93
|
+
} = target;
|
|
94
|
+
const containerType = PRODUCT_TO_CONTAINER_TYPE[product];
|
|
95
|
+
if (!containerType) {
|
|
96
|
+
next[product] = {
|
|
97
|
+
...target,
|
|
98
|
+
found: true
|
|
99
|
+
};
|
|
100
|
+
updateContainerLoading(product, false);
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
const currentCount = teamContainers.filter(container => container.type === containerType).length;
|
|
104
|
+
const elapsed = Date.now() - startedAt;
|
|
105
|
+
if (currentCount > 0 || elapsed >= TIMEOUT_DURATION) {
|
|
106
|
+
next[product] = {
|
|
107
|
+
...target,
|
|
108
|
+
found: true
|
|
109
|
+
};
|
|
110
|
+
updateContainerLoading(product, false);
|
|
111
|
+
} else {
|
|
112
|
+
anyPending = true;
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
if (!anyPending) {
|
|
116
|
+
if (intervalRef.current) {
|
|
117
|
+
clearInterval(intervalRef.current);
|
|
118
|
+
intervalRef.current = null;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
if (anyPending) {
|
|
122
|
+
refetchTeamContainers();
|
|
123
|
+
}
|
|
124
|
+
return next;
|
|
125
|
+
});
|
|
126
|
+
}, INTERVAL_TIME);
|
|
127
|
+
return () => {
|
|
128
|
+
if (intervalRef.current) {
|
|
129
|
+
clearInterval(intervalRef.current);
|
|
130
|
+
intervalRef.current = null;
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
}, [createdContainers, teamContainers, refetchTeamContainers, updateContainerLoading]);
|
|
134
|
+
}
|
|
135
|
+
export { useRefreshOnContainerCreated, INTERVAL_TIME, TIMEOUT_DURATION };
|