@activecollab/components 2.0.417 → 2.0.419
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/dist/cjs/components/Icons/collection/Portfolio.js +61 -0
- package/dist/cjs/components/Icons/collection/Portfolio.js.map +1 -0
- package/dist/cjs/components/Icons/collection/PortfolioPlus.js +62 -0
- package/dist/cjs/components/Icons/collection/PortfolioPlus.js.map +1 -0
- package/dist/cjs/components/Icons/collection/Target.js +65 -0
- package/dist/cjs/components/Icons/collection/Target.js.map +1 -0
- package/dist/cjs/components/Icons/collection/index.js +21 -0
- package/dist/cjs/components/Icons/collection/index.js.map +1 -1
- package/dist/cjs/presentation/shared/MessageDialog.js +62 -107
- package/dist/cjs/presentation/shared/MessageDialog.js.map +1 -1
- package/dist/cjs/presentation/shared/MessageFeedback.js +284 -0
- package/dist/cjs/presentation/shared/MessageFeedback.js.map +1 -0
- package/dist/cjs/presentation/shared/PortfolioOptionsMenu.js +64 -0
- package/dist/cjs/presentation/shared/PortfolioOptionsMenu.js.map +1 -0
- package/dist/cjs/presentation/shared/ProjectOptionsMenu.js +367 -0
- package/dist/cjs/presentation/shared/ProjectOptionsMenu.js.map +1 -0
- package/dist/cjs/presentation/shared/dashboardWidgets.js +726 -0
- package/dist/cjs/presentation/shared/dashboardWidgets.js.map +1 -0
- package/dist/cjs/presentation/shared/headers.js +25 -360
- package/dist/cjs/presentation/shared/headers.js.map +1 -1
- package/dist/cjs/presentation/shared/index.js +130 -0
- package/dist/cjs/presentation/shared/index.js.map +1 -1
- package/dist/esm/components/Icons/collection/Portfolio.d.ts +32 -0
- package/dist/esm/components/Icons/collection/Portfolio.d.ts.map +1 -0
- package/dist/esm/components/Icons/collection/Portfolio.js +54 -0
- package/dist/esm/components/Icons/collection/Portfolio.js.map +1 -0
- package/dist/esm/components/Icons/collection/PortfolioPlus.d.ts +32 -0
- package/dist/esm/components/Icons/collection/PortfolioPlus.d.ts.map +1 -0
- package/dist/esm/components/Icons/collection/PortfolioPlus.js +55 -0
- package/dist/esm/components/Icons/collection/PortfolioPlus.js.map +1 -0
- package/dist/esm/components/Icons/collection/Target.d.ts +32 -0
- package/dist/esm/components/Icons/collection/Target.d.ts.map +1 -0
- package/dist/esm/components/Icons/collection/Target.js +58 -0
- package/dist/esm/components/Icons/collection/Target.js.map +1 -0
- package/dist/esm/components/Icons/collection/index.d.ts +3 -0
- package/dist/esm/components/Icons/collection/index.d.ts.map +1 -1
- package/dist/esm/components/Icons/collection/index.js +3 -0
- package/dist/esm/components/Icons/collection/index.js.map +1 -1
- package/dist/esm/presentation/shared/MessageDialog.d.ts +8 -3
- package/dist/esm/presentation/shared/MessageDialog.d.ts.map +1 -1
- package/dist/esm/presentation/shared/MessageDialog.js +64 -98
- package/dist/esm/presentation/shared/MessageDialog.js.map +1 -1
- package/dist/esm/presentation/shared/MessageFeedback.d.ts +54 -0
- package/dist/esm/presentation/shared/MessageFeedback.d.ts.map +1 -0
- package/dist/esm/presentation/shared/MessageFeedback.js +252 -0
- package/dist/esm/presentation/shared/MessageFeedback.js.map +1 -0
- package/dist/esm/presentation/shared/PortfolioOptionsMenu.d.ts +12 -0
- package/dist/esm/presentation/shared/PortfolioOptionsMenu.d.ts.map +1 -0
- package/dist/esm/presentation/shared/PortfolioOptionsMenu.js +46 -0
- package/dist/esm/presentation/shared/PortfolioOptionsMenu.js.map +1 -0
- package/dist/esm/presentation/shared/ProjectOptionsMenu.d.ts +31 -0
- package/dist/esm/presentation/shared/ProjectOptionsMenu.d.ts.map +1 -0
- package/dist/esm/presentation/shared/ProjectOptionsMenu.js +311 -0
- package/dist/esm/presentation/shared/ProjectOptionsMenu.js.map +1 -0
- package/dist/esm/presentation/shared/dashboardWidgets.d.ts +203 -0
- package/dist/esm/presentation/shared/dashboardWidgets.d.ts.map +1 -0
- package/dist/esm/presentation/shared/dashboardWidgets.js +665 -0
- package/dist/esm/presentation/shared/dashboardWidgets.js.map +1 -0
- package/dist/esm/presentation/shared/headers.d.ts +0 -11
- package/dist/esm/presentation/shared/headers.d.ts.map +1 -1
- package/dist/esm/presentation/shared/headers.js +23 -315
- package/dist/esm/presentation/shared/headers.js.map +1 -1
- package/dist/esm/presentation/shared/index.d.ts +8 -0
- package/dist/esm/presentation/shared/index.d.ts.map +1 -1
- package/dist/esm/presentation/shared/index.js +4 -0
- package/dist/esm/presentation/shared/index.js.map +1 -1
- package/dist/index.js +666 -508
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +1 -1
- package/dist/index.min.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,367 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.ProjectOptionsMenu = void 0;
|
|
7
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
8
|
+
var _styledComponents = _interopRequireWildcard(require("styled-components"));
|
|
9
|
+
var _ConnectRepositoryDialog = require("./ConnectRepositoryDialog");
|
|
10
|
+
var _WebhookLogsDialog = require("./WebhookLogsDialog");
|
|
11
|
+
var _Badge = require("../../components/Badge");
|
|
12
|
+
var _Button = require("../../components/Button");
|
|
13
|
+
var _CompleteCheckbox = require("../../components/CompleteCheckbox");
|
|
14
|
+
var _Dialog = require("../../components/Dialog");
|
|
15
|
+
var _IconButton = require("../../components/IconButton");
|
|
16
|
+
var _Icons = require("../../components/Icons");
|
|
17
|
+
var _List = require("../../components/List");
|
|
18
|
+
var _Menu = require("../../components/Menu");
|
|
19
|
+
var _ToastMessage = require("../../components/ToastMessage");
|
|
20
|
+
var _Transitions = require("../../components/Transitions");
|
|
21
|
+
var _Typography = require("../../components/Typography");
|
|
22
|
+
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); }
|
|
23
|
+
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
24
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
25
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
26
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
27
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
28
|
+
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
29
|
+
/* Project "..." options menu (Menu + List with leading-icon items). Two items
|
|
30
|
+
(Favorite, Subscribe) have a checkbox on the right. Clicks are no-ops. When
|
|
31
|
+
the `source` module is loaded a Repositories item drills in to a submenu.
|
|
32
|
+
|
|
33
|
+
Shared by the project page header (Project Repos presentation) and the
|
|
34
|
+
Projects listing (Projects List presentation), so the "..." menu behaves the
|
|
35
|
+
same wherever a project is shown. */
|
|
36
|
+
var StyledProjectMenu = _styledComponents.default.div.withConfig({
|
|
37
|
+
displayName: "ProjectOptionsMenu__StyledProjectMenu",
|
|
38
|
+
componentId: "sc-1k8fz6q-0"
|
|
39
|
+
})([".toggle-item{justify-content:space-between;}.toggle-item .opt-left{display:flex;align-items:center;min-width:0;}.toggle-item .opt-left svg{margin-right:8px;flex-shrink:0;}.toggle-item .c-complete-checkbox{width:16px;height:16px;border-radius:3px;align-self:center;flex-shrink:0;}.submenu-item{justify-content:space-between;}.submenu-item .repo-right{display:flex;align-items:center;gap:8px;flex-shrink:0;}.submenu-item .repo-right .c-badge{background-color:var(--color-theme-300);color:var(--color-theme-700);}.submenu-item .repo-caret{flex-shrink:0;fill:var(--color-theme-600);}.repo-row{min-width:0;}.repo-row > svg{flex-shrink:0;}.repo-name{min-width:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;}"]);
|
|
40
|
+
|
|
41
|
+
/* The project "..." menu shares the Webhook Logs dialog's repository /
|
|
42
|
+
* connection universe, so a repository connected here is one that dialog can
|
|
43
|
+
* pre-filter by. `WebhookConnection` and `Connection` share a shape, and a
|
|
44
|
+
* `WebhookRepository`'s `path` maps onto a `Repository`'s `name`. */
|
|
45
|
+
var PROJECT_MENU_CONNECTIONS = _WebhookLogsDialog.WEBHOOK_CONNECTIONS;
|
|
46
|
+
var PROJECT_MENU_REPOSITORIES = _WebhookLogsDialog.WEBHOOK_REPOSITORIES.map(function (repo) {
|
|
47
|
+
return {
|
|
48
|
+
id: repo.id,
|
|
49
|
+
name: repo.path,
|
|
50
|
+
connectionId: repo.connectionId
|
|
51
|
+
};
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
/** Submenu row label for a connected repository: "path (Connection)". The
|
|
55
|
+
* service type is omitted because the leading provider icon already conveys
|
|
56
|
+
* it. */
|
|
57
|
+
var repositoryMenuLabel = function repositoryMenuLabel(repo) {
|
|
58
|
+
var connection = PROJECT_MENU_CONNECTIONS.find(function (c) {
|
|
59
|
+
return c.id === repo.connectionId;
|
|
60
|
+
});
|
|
61
|
+
return connection ? "".concat(repo.name, " (").concat(connection.name, ")") : repo.name;
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
/** Provider glyph for a connected repository: GitHub / GitLab for those
|
|
65
|
+
* services, and the generic Git mark for anything else (e.g. an upcoming
|
|
66
|
+
* Bitbucket connection). */
|
|
67
|
+
var repositoryIcon = function repositoryIcon(repo) {
|
|
68
|
+
var connection = PROJECT_MENU_CONNECTIONS.find(function (c) {
|
|
69
|
+
return c.id === repo.connectionId;
|
|
70
|
+
});
|
|
71
|
+
switch (connection === null || connection === void 0 ? void 0 : connection.service) {
|
|
72
|
+
case "github":
|
|
73
|
+
return _Icons.GitHubIcon;
|
|
74
|
+
case "gitlab":
|
|
75
|
+
return _Icons.GitLabIcon;
|
|
76
|
+
default:
|
|
77
|
+
return _Icons.GitIcon;
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
/** Width of the project "..." menu (matches the DS "normal" menu mode). */
|
|
82
|
+
var PROJECT_MENU_WIDTH = 260;
|
|
83
|
+
|
|
84
|
+
/* The menu drills in place (index → Repositories), so the paper must clip the
|
|
85
|
+
sliding panels and give them a positioning context. */
|
|
86
|
+
var ProjectMenuSliderStyle = (0, _styledComponents.createGlobalStyle)([".c-simple-menu__paper.project-options-menu{overflow:hidden;position:relative;}"]);
|
|
87
|
+
|
|
88
|
+
/* Toast anchor — fixed, upper-right corner (the toast slides down from the
|
|
89
|
+
top). The wrapper ignores pointer events so it never blocks the page; only
|
|
90
|
+
the toast itself is interactive. */
|
|
91
|
+
var StyledToastAnchor = _styledComponents.default.div.withConfig({
|
|
92
|
+
displayName: "ProjectOptionsMenu__StyledToastAnchor",
|
|
93
|
+
componentId: "sc-1k8fz6q-1"
|
|
94
|
+
})(["position:fixed;top:16px;right:16px;z-index:10000;pointer-events:none;.c-toast-message{pointer-events:auto;}"]);
|
|
95
|
+
/**
|
|
96
|
+
* The project "..." options menu. When the `source` module is loaded it gains
|
|
97
|
+
* a **Repositories** item that, instead of flying out to the side, **drills in
|
|
98
|
+
* within the same menu** (the pattern used across the app — see `Filter`): the
|
|
99
|
+
* index slides out to the left and the Repositories view (a back-arrow header,
|
|
100
|
+
* the connected repositories sorted by name, and a **Connect Repository**
|
|
101
|
+
* action) slides in. Connecting adds a repository to the list; clicking one
|
|
102
|
+
* would, in production, open it in a new tab (surfaced here via a dialog).
|
|
103
|
+
*/
|
|
104
|
+
var ProjectOptionsMenu = exports.ProjectOptionsMenu = function ProjectOptionsMenu(_ref) {
|
|
105
|
+
var _ref$sourceModuleLoad = _ref.sourceModuleLoaded,
|
|
106
|
+
sourceModuleLoaded = _ref$sourceModuleLoad === void 0 ? false : _ref$sourceModuleLoad,
|
|
107
|
+
_ref$initialConnected = _ref.initialConnectedRepositories,
|
|
108
|
+
initialConnectedRepositories = _ref$initialConnected === void 0 ? [] : _ref$initialConnected,
|
|
109
|
+
_ref$canManageProject = _ref.canManageProjectRepositories,
|
|
110
|
+
canManageProjectRepositories = _ref$canManageProject === void 0 ? true : _ref$canManageProject,
|
|
111
|
+
className = _ref.className,
|
|
112
|
+
size = _ref.size;
|
|
113
|
+
var _useState = (0, _react.useState)(false),
|
|
114
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
115
|
+
open = _useState2[0],
|
|
116
|
+
setOpen = _useState2[1];
|
|
117
|
+
var _useState3 = (0, _react.useState)("index"),
|
|
118
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
119
|
+
view = _useState4[0],
|
|
120
|
+
setView = _useState4[1];
|
|
121
|
+
var _useState5 = (0, _react.useState)(false),
|
|
122
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
123
|
+
webhookLogsOpen = _useState6[0],
|
|
124
|
+
setWebhookLogsOpen = _useState6[1];
|
|
125
|
+
var _useState7 = (0, _react.useState)(true),
|
|
126
|
+
_useState8 = _slicedToArray(_useState7, 2),
|
|
127
|
+
isLeft = _useState8[0],
|
|
128
|
+
setIsLeft = _useState8[1];
|
|
129
|
+
var _useState9 = (0, _react.useState)(0),
|
|
130
|
+
_useState0 = _slicedToArray(_useState9, 2),
|
|
131
|
+
height = _useState0[0],
|
|
132
|
+
setHeight = _useState0[1];
|
|
133
|
+
// Connected repositories drive the count badge on the Repositories item. In
|
|
134
|
+
// production this count comes from the project's `count_repositories` counter,
|
|
135
|
+
// kept current via pusher/websocket events, so the badge reflects repositories
|
|
136
|
+
// connected or disconnected by anyone — not just the current user's actions.
|
|
137
|
+
var _useState1 = (0, _react.useState)(initialConnectedRepositories),
|
|
138
|
+
_useState10 = _slicedToArray(_useState1, 2),
|
|
139
|
+
connectedRepos = _useState10[0],
|
|
140
|
+
setConnectedRepos = _useState10[1];
|
|
141
|
+
var _useState11 = (0, _react.useState)(false),
|
|
142
|
+
_useState12 = _slicedToArray(_useState11, 2),
|
|
143
|
+
connectOpen = _useState12[0],
|
|
144
|
+
setConnectOpen = _useState12[1];
|
|
145
|
+
var _useState13 = (0, _react.useState)(false),
|
|
146
|
+
_useState14 = _slicedToArray(_useState13, 2),
|
|
147
|
+
infoOpen = _useState14[0],
|
|
148
|
+
setInfoOpen = _useState14[1];
|
|
149
|
+
var _useState15 = (0, _react.useState)(false),
|
|
150
|
+
_useState16 = _slicedToArray(_useState15, 2),
|
|
151
|
+
toastOpen = _useState16[0],
|
|
152
|
+
setToastOpen = _useState16[1];
|
|
153
|
+
// Bumped on each connect so the toast remounts and its auto-hide timer
|
|
154
|
+
// restarts from the moment it is shown.
|
|
155
|
+
var _useState17 = (0, _react.useState)(0),
|
|
156
|
+
_useState18 = _slicedToArray(_useState17, 2),
|
|
157
|
+
toastKey = _useState18[0],
|
|
158
|
+
setToastKey = _useState18[1];
|
|
159
|
+
|
|
160
|
+
// Repositories still available to connect (not already on the project).
|
|
161
|
+
var connectableRepos = PROJECT_MENU_REPOSITORIES.filter(function (r) {
|
|
162
|
+
return !connectedRepos.some(function (c) {
|
|
163
|
+
return c.id === r.id;
|
|
164
|
+
});
|
|
165
|
+
});
|
|
166
|
+
|
|
167
|
+
// Connected repositories are listed in the submenu sorted by name.
|
|
168
|
+
var sortedRepos = [...connectedRepos].sort(function (a, b) {
|
|
169
|
+
return a.name.localeCompare(b.name);
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
// Each view measures itself as it mounts so the paper can animate its height.
|
|
173
|
+
var measure = (0, _react.useCallback)(function (node) {
|
|
174
|
+
if (node) {
|
|
175
|
+
setHeight(node.offsetHeight);
|
|
176
|
+
}
|
|
177
|
+
}, []);
|
|
178
|
+
var goToRepositories = function goToRepositories() {
|
|
179
|
+
setView("repositories");
|
|
180
|
+
setIsLeft(true);
|
|
181
|
+
};
|
|
182
|
+
var backToIndex = function backToIndex() {
|
|
183
|
+
setView("index");
|
|
184
|
+
setIsLeft(false);
|
|
185
|
+
};
|
|
186
|
+
var handleClose = function handleClose() {
|
|
187
|
+
setOpen(false);
|
|
188
|
+
// Reset to the index so the next open starts at the top level.
|
|
189
|
+
setView("index");
|
|
190
|
+
setIsLeft(true);
|
|
191
|
+
};
|
|
192
|
+
var handleConnected = function handleConnected(repo) {
|
|
193
|
+
setConnectedRepos(function (prev) {
|
|
194
|
+
return prev.some(function (r) {
|
|
195
|
+
return r.id === repo.id;
|
|
196
|
+
}) ? prev : [...prev, repo];
|
|
197
|
+
});
|
|
198
|
+
setToastOpen(true);
|
|
199
|
+
setToastKey(function (k) {
|
|
200
|
+
return k + 1;
|
|
201
|
+
});
|
|
202
|
+
};
|
|
203
|
+
var handleConnect = function handleConnect() {
|
|
204
|
+
handleClose();
|
|
205
|
+
setConnectOpen(true);
|
|
206
|
+
};
|
|
207
|
+
|
|
208
|
+
// In production this closes the menu and opens the repository in a new tab;
|
|
209
|
+
// in the mock we surface that behaviour in a small dialog instead.
|
|
210
|
+
var handleOpenRepository = function handleOpenRepository() {
|
|
211
|
+
handleClose();
|
|
212
|
+
setInfoOpen(true);
|
|
213
|
+
};
|
|
214
|
+
var handleOpenWebhookLogs = function handleOpenWebhookLogs() {
|
|
215
|
+
handleClose();
|
|
216
|
+
setWebhookLogsOpen(true);
|
|
217
|
+
};
|
|
218
|
+
var indexView = /*#__PURE__*/_react.default.createElement(StyledProjectMenu, null, /*#__PURE__*/_react.default.createElement(_List.List, {
|
|
219
|
+
style: {
|
|
220
|
+
padding: "8px 0"
|
|
221
|
+
},
|
|
222
|
+
tabIndex: -1
|
|
223
|
+
}, /*#__PURE__*/_react.default.createElement(_List.ListItem, null, /*#__PURE__*/_react.default.createElement(_Icons.EditIcon, null), "Edit"), /*#__PURE__*/_react.default.createElement(_List.ListItem, {
|
|
224
|
+
className: "toggle-item"
|
|
225
|
+
}, /*#__PURE__*/_react.default.createElement("span", {
|
|
226
|
+
className: "opt-left"
|
|
227
|
+
}, /*#__PURE__*/_react.default.createElement(_Icons.StarIcon, null), "Mark as Favorite"), /*#__PURE__*/_react.default.createElement(_CompleteCheckbox.CompleteCheckbox, {
|
|
228
|
+
primary: true,
|
|
229
|
+
completed: true
|
|
230
|
+
})), /*#__PURE__*/_react.default.createElement(_List.ListItem, {
|
|
231
|
+
className: "toggle-item"
|
|
232
|
+
}, /*#__PURE__*/_react.default.createElement("span", {
|
|
233
|
+
className: "opt-left"
|
|
234
|
+
}, /*#__PURE__*/_react.default.createElement(_Icons.NotificationBellIcon, null), "Subscribe to Everything"), /*#__PURE__*/_react.default.createElement(_CompleteCheckbox.CompleteCheckbox, {
|
|
235
|
+
primary: true,
|
|
236
|
+
completed: false
|
|
237
|
+
})), /*#__PURE__*/_react.default.createElement(_List.ListItem, null, /*#__PURE__*/_react.default.createElement(_Icons.LabelsIcon, null), "Manage Task Labels"), /*#__PURE__*/_react.default.createElement(_List.ListItem, null, /*#__PURE__*/_react.default.createElement(_Icons.InsertLinkIcon, null), "Copy Link"), /*#__PURE__*/_react.default.createElement(_List.ListSeparator, null), /*#__PURE__*/_react.default.createElement(_List.ListItem, null, /*#__PURE__*/_react.default.createElement(_Icons.CheckboxBlankTogglerIcon, null), "Complete"), /*#__PURE__*/_react.default.createElement(_List.ListItem, null, /*#__PURE__*/_react.default.createElement(_Icons.DownloadIcon, null), "Export"), sourceModuleLoaded ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_List.ListSeparator, null), /*#__PURE__*/_react.default.createElement(_List.ListItem, {
|
|
238
|
+
className: "toggle-item submenu-item",
|
|
239
|
+
onClick: goToRepositories
|
|
240
|
+
}, /*#__PURE__*/_react.default.createElement("span", {
|
|
241
|
+
className: "opt-left"
|
|
242
|
+
}, /*#__PURE__*/_react.default.createElement(_Icons.GitRepositoryIcon, null), "Repositories"), /*#__PURE__*/_react.default.createElement("span", {
|
|
243
|
+
className: "repo-right"
|
|
244
|
+
}, connectedRepos.length > 0 ? /*#__PURE__*/_react.default.createElement(_Badge.Badge, {
|
|
245
|
+
isStandalone: true,
|
|
246
|
+
dimension: 16,
|
|
247
|
+
value: connectedRepos.length
|
|
248
|
+
}) : null, /*#__PURE__*/_react.default.createElement(_Icons.CaretRightIcon, {
|
|
249
|
+
className: "repo-caret",
|
|
250
|
+
width: 16,
|
|
251
|
+
height: 16
|
|
252
|
+
})))) : null, /*#__PURE__*/_react.default.createElement(_List.ListSeparator, null), /*#__PURE__*/_react.default.createElement(_List.ListItem, null, /*#__PURE__*/_react.default.createElement(_Icons.DuplicateIcon, null), "Duplicate"), /*#__PURE__*/_react.default.createElement(_List.ListItem, null, /*#__PURE__*/_react.default.createElement(_Icons.ProjectTemplateIcon, null), "Apply Template"), /*#__PURE__*/_react.default.createElement(_List.ListItem, null, /*#__PURE__*/_react.default.createElement(_Icons.ProjectTemplateConvertIcon, null), "Convert to Template"), /*#__PURE__*/_react.default.createElement(_List.ListSeparator, null), /*#__PURE__*/_react.default.createElement(_List.ListItem, null, /*#__PURE__*/_react.default.createElement(_Icons.TrashIcon, null), "Delete")));
|
|
253
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(ProjectMenuSliderStyle, null), /*#__PURE__*/_react.default.createElement(_Menu.Menu, {
|
|
254
|
+
open: open,
|
|
255
|
+
onOpen: function onOpen() {
|
|
256
|
+
return setOpen(true);
|
|
257
|
+
},
|
|
258
|
+
onClose: handleClose,
|
|
259
|
+
position: "bottom-end",
|
|
260
|
+
menuClassName: sourceModuleLoaded ? "project-options-menu" : undefined,
|
|
261
|
+
target: /*#__PURE__*/_react.default.createElement(_IconButton.IconButton, {
|
|
262
|
+
type: "button",
|
|
263
|
+
variant: "text gray",
|
|
264
|
+
size: size,
|
|
265
|
+
className: className,
|
|
266
|
+
active: open
|
|
267
|
+
}, /*#__PURE__*/_react.default.createElement(_Icons.TreeDotsIcon, null))
|
|
268
|
+
}, sourceModuleLoaded ? /*#__PURE__*/_react.default.createElement(_Transitions.ResizeTransition, {
|
|
269
|
+
in: true,
|
|
270
|
+
style: {
|
|
271
|
+
height,
|
|
272
|
+
width: PROJECT_MENU_WIDTH
|
|
273
|
+
}
|
|
274
|
+
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
275
|
+
style: {
|
|
276
|
+
position: "relative",
|
|
277
|
+
overflow: "hidden"
|
|
278
|
+
}
|
|
279
|
+
}, /*#__PURE__*/_react.default.createElement(_Transitions.SlideLeftRightTransition, {
|
|
280
|
+
in: view === "index",
|
|
281
|
+
direction: isLeft ? "left" : "right"
|
|
282
|
+
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
283
|
+
ref: measure,
|
|
284
|
+
style: {
|
|
285
|
+
width: PROJECT_MENU_WIDTH
|
|
286
|
+
}
|
|
287
|
+
}, indexView)), /*#__PURE__*/_react.default.createElement(_Transitions.SlideLeftRightTransition, {
|
|
288
|
+
in: view === "repositories",
|
|
289
|
+
direction: isLeft ? "left" : "right"
|
|
290
|
+
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
291
|
+
ref: measure,
|
|
292
|
+
style: {
|
|
293
|
+
width: PROJECT_MENU_WIDTH
|
|
294
|
+
}
|
|
295
|
+
}, /*#__PURE__*/_react.default.createElement(_Menu.MenuHeader, {
|
|
296
|
+
title: "Repositories",
|
|
297
|
+
leftElement: /*#__PURE__*/_react.default.createElement(_IconButton.IconButton, {
|
|
298
|
+
type: "button",
|
|
299
|
+
variant: "text gray",
|
|
300
|
+
size: "small",
|
|
301
|
+
onClick: backToIndex,
|
|
302
|
+
"aria-label": "Back"
|
|
303
|
+
}, /*#__PURE__*/_react.default.createElement(_Icons.ArrowLeftIcon, null))
|
|
304
|
+
}), /*#__PURE__*/_react.default.createElement(StyledProjectMenu, null, /*#__PURE__*/_react.default.createElement(_List.List, {
|
|
305
|
+
style: {
|
|
306
|
+
padding: "8px 0"
|
|
307
|
+
},
|
|
308
|
+
tabIndex: -1
|
|
309
|
+
}, sortedRepos.map(function (repo) {
|
|
310
|
+
var RepoIcon = repositoryIcon(repo);
|
|
311
|
+
return /*#__PURE__*/_react.default.createElement(_List.ListItem, {
|
|
312
|
+
key: repo.id,
|
|
313
|
+
className: "repo-row",
|
|
314
|
+
onClick: function onClick() {
|
|
315
|
+
return handleOpenRepository();
|
|
316
|
+
}
|
|
317
|
+
}, /*#__PURE__*/_react.default.createElement(RepoIcon, null), /*#__PURE__*/_react.default.createElement("span", {
|
|
318
|
+
className: "repo-name"
|
|
319
|
+
}, repositoryMenuLabel(repo)));
|
|
320
|
+
}), sortedRepos.length > 0 ? /*#__PURE__*/_react.default.createElement(_List.ListSeparator, null) : null, sortedRepos.length > 0 && canManageProjectRepositories ? /*#__PURE__*/_react.default.createElement(_List.ListItem, {
|
|
321
|
+
onClick: handleOpenWebhookLogs
|
|
322
|
+
}, /*#__PURE__*/_react.default.createElement(_Icons.AccessLogIcon, null), "Webhook Logs") : null, /*#__PURE__*/_react.default.createElement(_List.ListItem, {
|
|
323
|
+
onClick: handleConnect
|
|
324
|
+
}, /*#__PURE__*/_react.default.createElement(_Icons.GitRepositoryConnectIcon, null), "Connect Repository"))))))) : indexView), /*#__PURE__*/_react.default.createElement(_ConnectRepositoryDialog.ConnectRepositoryDialog, {
|
|
325
|
+
open: connectOpen,
|
|
326
|
+
onClose: function onClose() {
|
|
327
|
+
return setConnectOpen(false);
|
|
328
|
+
},
|
|
329
|
+
onConnect: handleConnected,
|
|
330
|
+
repositories: connectableRepos,
|
|
331
|
+
connections: PROJECT_MENU_CONNECTIONS
|
|
332
|
+
}), /*#__PURE__*/_react.default.createElement(_WebhookLogsDialog.WebhookLogsDialog, {
|
|
333
|
+
open: webhookLogsOpen,
|
|
334
|
+
onClose: function onClose() {
|
|
335
|
+
return setWebhookLogsOpen(false);
|
|
336
|
+
},
|
|
337
|
+
repositoryIds: sortedRepos.map(function (repo) {
|
|
338
|
+
return repo.id;
|
|
339
|
+
})
|
|
340
|
+
}), /*#__PURE__*/_react.default.createElement(_Dialog.Dialog, {
|
|
341
|
+
open: infoOpen,
|
|
342
|
+
onClose: function onClose() {
|
|
343
|
+
return setInfoOpen(false);
|
|
344
|
+
},
|
|
345
|
+
enableBackgroundClick: true
|
|
346
|
+
}, /*#__PURE__*/_react.default.createElement(_Dialog.Dialog.Title, null, "Open Repository"), /*#__PURE__*/_react.default.createElement(_Dialog.Dialog.ContentDivider, null), /*#__PURE__*/_react.default.createElement(_Dialog.Dialog.Content, null, /*#__PURE__*/_react.default.createElement(_Typography.Body2, null, "In production, this click would close the menu and open the repository in a new browser tab.")), /*#__PURE__*/_react.default.createElement(_Dialog.Dialog.ContentDivider, null), /*#__PURE__*/_react.default.createElement(_Dialog.Dialog.Actions, null, /*#__PURE__*/_react.default.createElement(_Button.Button, {
|
|
347
|
+
variant: "primary",
|
|
348
|
+
onClick: function onClick() {
|
|
349
|
+
return setInfoOpen(false);
|
|
350
|
+
}
|
|
351
|
+
}, "Got it"))), /*#__PURE__*/_react.default.createElement(StyledToastAnchor, null, /*#__PURE__*/_react.default.createElement(_Transitions.SlideFromTop, {
|
|
352
|
+
in: toastOpen
|
|
353
|
+
}, /*#__PURE__*/_react.default.createElement(_ToastMessage.ToastMessage, {
|
|
354
|
+
key: toastKey,
|
|
355
|
+
className: "c-toast-message",
|
|
356
|
+
type: "success",
|
|
357
|
+
text: "Repository connected.",
|
|
358
|
+
dismissible: true,
|
|
359
|
+
dropShadow: true,
|
|
360
|
+
timeout: 3000,
|
|
361
|
+
onClose: function onClose() {
|
|
362
|
+
return setToastOpen(false);
|
|
363
|
+
}
|
|
364
|
+
}))));
|
|
365
|
+
};
|
|
366
|
+
ProjectOptionsMenu.displayName = "ProjectOptionsMenu";
|
|
367
|
+
//# sourceMappingURL=ProjectOptionsMenu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProjectOptionsMenu.js","names":["_react","_interopRequireWildcard","require","_styledComponents","_ConnectRepositoryDialog","_WebhookLogsDialog","_Badge","_Button","_CompleteCheckbox","_Dialog","_IconButton","_Icons","_List","_Menu","_ToastMessage","_Transitions","_Typography","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","_t","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","TypeError","a","_arrayLikeToArray","toString","slice","constructor","name","Array","from","test","length","l","Symbol","iterator","u","next","done","push","value","return","isArray","StyledProjectMenu","styled","div","withConfig","displayName","componentId","PROJECT_MENU_CONNECTIONS","WEBHOOK_CONNECTIONS","PROJECT_MENU_REPOSITORIES","WEBHOOK_REPOSITORIES","map","repo","id","path","connectionId","repositoryMenuLabel","connection","find","c","concat","repositoryIcon","service","GitHubIcon","GitLabIcon","GitIcon","PROJECT_MENU_WIDTH","ProjectMenuSliderStyle","createGlobalStyle","StyledToastAnchor","ProjectOptionsMenu","exports","_ref","_ref$sourceModuleLoad","sourceModuleLoaded","_ref$initialConnected","initialConnectedRepositories","_ref$canManageProject","canManageProjectRepositories","className","size","_useState","useState","_useState2","open","setOpen","_useState3","_useState4","view","setView","_useState5","_useState6","webhookLogsOpen","setWebhookLogsOpen","_useState7","_useState8","isLeft","setIsLeft","_useState9","_useState0","height","setHeight","_useState1","_useState10","connectedRepos","setConnectedRepos","_useState11","_useState12","connectOpen","setConnectOpen","_useState13","_useState14","infoOpen","setInfoOpen","_useState15","_useState16","toastOpen","setToastOpen","_useState17","_useState18","toastKey","setToastKey","connectableRepos","filter","some","sortedRepos","sort","b","localeCompare","measure","useCallback","node","offsetHeight","goToRepositories","backToIndex","handleClose","handleConnected","prev","k","handleConnect","handleOpenRepository","handleOpenWebhookLogs","indexView","createElement","List","style","padding","tabIndex","ListItem","EditIcon","StarIcon","CompleteCheckbox","primary","completed","NotificationBellIcon","LabelsIcon","InsertLinkIcon","ListSeparator","CheckboxBlankTogglerIcon","DownloadIcon","Fragment","onClick","GitRepositoryIcon","Badge","isStandalone","dimension","CaretRightIcon","width","DuplicateIcon","ProjectTemplateIcon","ProjectTemplateConvertIcon","TrashIcon","Menu","onOpen","onClose","position","menuClassName","undefined","target","IconButton","type","variant","active","TreeDotsIcon","ResizeTransition","in","overflow","SlideLeftRightTransition","direction","ref","MenuHeader","title","leftElement","ArrowLeftIcon","RepoIcon","key","AccessLogIcon","GitRepositoryConnectIcon","ConnectRepositoryDialog","onConnect","repositories","connections","WebhookLogsDialog","repositoryIds","Dialog","enableBackgroundClick","Title","ContentDivider","Content","Body2","Actions","Button","SlideFromTop","ToastMessage","text","dismissible","dropShadow","timeout"],"sources":["../../../../src/presentation/shared/ProjectOptionsMenu.tsx"],"sourcesContent":["import React, { ElementType, ReactElement, useCallback, useState } from \"react\";\n\nimport styled, { createGlobalStyle } from \"styled-components\";\n\nimport {\n Connection,\n ConnectRepositoryDialog,\n Repository,\n} from \"./ConnectRepositoryDialog\";\nimport {\n WEBHOOK_CONNECTIONS,\n WEBHOOK_REPOSITORIES,\n WebhookLogsDialog,\n} from \"./WebhookLogsDialog\";\nimport { Badge } from \"../../components/Badge\";\nimport { Button } from \"../../components/Button\";\nimport { CompleteCheckbox } from \"../../components/CompleteCheckbox\";\nimport { Dialog } from \"../../components/Dialog\";\nimport { IconButton } from \"../../components/IconButton\";\nimport {\n AccessLogIcon,\n ArrowLeftIcon,\n CaretRightIcon,\n CheckboxBlankTogglerIcon,\n DownloadIcon,\n DuplicateIcon,\n EditIcon,\n GitHubIcon,\n GitIcon,\n GitLabIcon,\n GitRepositoryConnectIcon,\n GitRepositoryIcon,\n InsertLinkIcon,\n LabelsIcon,\n NotificationBellIcon,\n ProjectTemplateConvertIcon,\n ProjectTemplateIcon,\n StarIcon,\n TrashIcon,\n TreeDotsIcon,\n} from \"../../components/Icons\";\nimport { List, ListItem, ListSeparator } from \"../../components/List\";\nimport { Menu, MenuHeader } from \"../../components/Menu\";\nimport { ToastMessage } from \"../../components/ToastMessage\";\nimport {\n ResizeTransition,\n SlideFromTop,\n SlideLeftRightTransition,\n} from \"../../components/Transitions\";\nimport { Body2 } from \"../../components/Typography\";\n\n/* Project \"...\" options menu (Menu + List with leading-icon items). Two items\n (Favorite, Subscribe) have a checkbox on the right. Clicks are no-ops. When\n the `source` module is loaded a Repositories item drills in to a submenu.\n\n Shared by the project page header (Project Repos presentation) and the\n Projects listing (Projects List presentation), so the \"...\" menu behaves the\n same wherever a project is shown. */\nconst StyledProjectMenu = styled.div`\n .toggle-item {\n justify-content: space-between;\n }\n\n .toggle-item .opt-left {\n display: flex;\n align-items: center;\n min-width: 0;\n }\n\n .toggle-item .opt-left svg {\n margin-right: 8px;\n flex-shrink: 0;\n }\n\n /* the app renders the toggle as a small rounded (not circular) CompleteCheckbox */\n .toggle-item .c-complete-checkbox {\n width: 16px;\n height: 16px;\n border-radius: 3px;\n align-self: center;\n flex-shrink: 0;\n }\n\n /* \"Repositories\" item: caret pushed to the right edge */\n .submenu-item {\n justify-content: space-between;\n }\n\n /* right side of the \"Repositories\" item: connected-count badge + caret */\n .submenu-item .repo-right {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-shrink: 0;\n }\n\n /* muted count badge — a quiet neutral pill rather than the bold primary\n default, so it informs without pulling focus */\n .submenu-item .repo-right .c-badge {\n background-color: var(--color-theme-300);\n color: var(--color-theme-700);\n }\n\n .submenu-item .repo-caret {\n flex-shrink: 0;\n fill: var(--color-theme-600);\n }\n\n /* a connected-repository row inside the submenu — long \"path (Connection,\n Type)\" labels truncate with an ellipsis rather than wrapping */\n .repo-row {\n min-width: 0;\n }\n\n .repo-row > svg {\n flex-shrink: 0;\n }\n\n .repo-name {\n min-width: 0;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n`;\n\n/* The project \"...\" menu shares the Webhook Logs dialog's repository /\n * connection universe, so a repository connected here is one that dialog can\n * pre-filter by. `WebhookConnection` and `Connection` share a shape, and a\n * `WebhookRepository`'s `path` maps onto a `Repository`'s `name`. */\nconst PROJECT_MENU_CONNECTIONS: Connection[] = WEBHOOK_CONNECTIONS;\nconst PROJECT_MENU_REPOSITORIES: Repository[] = WEBHOOK_REPOSITORIES.map(\n (repo) => ({ id: repo.id, name: repo.path, connectionId: repo.connectionId })\n);\n\n/** Submenu row label for a connected repository: \"path (Connection)\". The\n * service type is omitted because the leading provider icon already conveys\n * it. */\nconst repositoryMenuLabel = (repo: Repository): string => {\n const connection = PROJECT_MENU_CONNECTIONS.find(\n (c) => c.id === repo.connectionId\n );\n return connection ? `${repo.name} (${connection.name})` : repo.name;\n};\n\n/** Provider glyph for a connected repository: GitHub / GitLab for those\n * services, and the generic Git mark for anything else (e.g. an upcoming\n * Bitbucket connection). */\nconst repositoryIcon = (repo: Repository): ElementType => {\n const connection = PROJECT_MENU_CONNECTIONS.find(\n (c) => c.id === repo.connectionId\n );\n switch (connection?.service) {\n case \"github\":\n return GitHubIcon;\n case \"gitlab\":\n return GitLabIcon;\n default:\n return GitIcon;\n }\n};\n\n/** Width of the project \"...\" menu (matches the DS \"normal\" menu mode). */\nconst PROJECT_MENU_WIDTH = 260;\n\n/* The menu drills in place (index → Repositories), so the paper must clip the\n sliding panels and give them a positioning context. */\nconst ProjectMenuSliderStyle = createGlobalStyle`\n .c-simple-menu__paper.project-options-menu {\n overflow: hidden;\n position: relative;\n }\n`;\n\n/* Toast anchor — fixed, upper-right corner (the toast slides down from the\n top). The wrapper ignores pointer events so it never blocks the page; only\n the toast itself is interactive. */\nconst StyledToastAnchor = styled.div`\n position: fixed;\n top: 16px;\n right: 16px;\n z-index: 10000;\n pointer-events: none;\n\n .c-toast-message {\n pointer-events: auto;\n }\n`;\n\nexport interface ProjectOptionsMenuProps {\n /** When the `source` module is loaded, show the Repositories section. */\n sourceModuleLoaded?: boolean;\n /** Repositories already connected to the project when the menu first mounts. */\n initialConnectedRepositories?: Repository[];\n /**\n * Whether the current user can manage the project's repositories. Gates the\n * Webhook Logs entry (a manage-only action) — see note 09, Permissions.\n */\n canManageProjectRepositories?: boolean;\n /** Extra class on the TreeDots trigger (e.g. for hover-reveal in a listing). */\n className?: string;\n /** IconButton size of the trigger (omit for the default/regular size). */\n size?: \"small\" | \"big\";\n}\n\n/**\n * The project \"...\" options menu. When the `source` module is loaded it gains\n * a **Repositories** item that, instead of flying out to the side, **drills in\n * within the same menu** (the pattern used across the app — see `Filter`): the\n * index slides out to the left and the Repositories view (a back-arrow header,\n * the connected repositories sorted by name, and a **Connect Repository**\n * action) slides in. Connecting adds a repository to the list; clicking one\n * would, in production, open it in a new tab (surfaced here via a dialog).\n */\nexport const ProjectOptionsMenu = ({\n sourceModuleLoaded = false,\n initialConnectedRepositories = [],\n canManageProjectRepositories = true,\n className,\n size,\n}: ProjectOptionsMenuProps): ReactElement => {\n const [open, setOpen] = useState(false);\n const [view, setView] = useState<\"index\" | \"repositories\">(\"index\");\n const [webhookLogsOpen, setWebhookLogsOpen] = useState(false);\n const [isLeft, setIsLeft] = useState(true);\n const [height, setHeight] = useState(0);\n // Connected repositories drive the count badge on the Repositories item. In\n // production this count comes from the project's `count_repositories` counter,\n // kept current via pusher/websocket events, so the badge reflects repositories\n // connected or disconnected by anyone — not just the current user's actions.\n const [connectedRepos, setConnectedRepos] = useState<Repository[]>(\n initialConnectedRepositories\n );\n const [connectOpen, setConnectOpen] = useState(false);\n const [infoOpen, setInfoOpen] = useState(false);\n const [toastOpen, setToastOpen] = useState(false);\n // Bumped on each connect so the toast remounts and its auto-hide timer\n // restarts from the moment it is shown.\n const [toastKey, setToastKey] = useState(0);\n\n // Repositories still available to connect (not already on the project).\n const connectableRepos = PROJECT_MENU_REPOSITORIES.filter(\n (r) => !connectedRepos.some((c) => c.id === r.id)\n );\n\n // Connected repositories are listed in the submenu sorted by name.\n const sortedRepos = [...connectedRepos].sort((a, b) =>\n a.name.localeCompare(b.name)\n );\n\n // Each view measures itself as it mounts so the paper can animate its height.\n const measure = useCallback((node: HTMLDivElement | null) => {\n if (node) {\n setHeight(node.offsetHeight);\n }\n }, []);\n\n const goToRepositories = (): void => {\n setView(\"repositories\");\n setIsLeft(true);\n };\n\n const backToIndex = (): void => {\n setView(\"index\");\n setIsLeft(false);\n };\n\n const handleClose = (): void => {\n setOpen(false);\n // Reset to the index so the next open starts at the top level.\n setView(\"index\");\n setIsLeft(true);\n };\n\n const handleConnected = (repo: Repository): void => {\n setConnectedRepos((prev) =>\n prev.some((r) => r.id === repo.id) ? prev : [...prev, repo]\n );\n setToastOpen(true);\n setToastKey((k) => k + 1);\n };\n\n const handleConnect = (): void => {\n handleClose();\n setConnectOpen(true);\n };\n\n // In production this closes the menu and opens the repository in a new tab;\n // in the mock we surface that behaviour in a small dialog instead.\n const handleOpenRepository = (): void => {\n handleClose();\n setInfoOpen(true);\n };\n\n const handleOpenWebhookLogs = (): void => {\n handleClose();\n setWebhookLogsOpen(true);\n };\n\n const indexView = (\n <StyledProjectMenu>\n <List style={{ padding: \"8px 0\" }} tabIndex={-1}>\n <ListItem>\n <EditIcon />\n Edit\n </ListItem>\n <ListItem className=\"toggle-item\">\n <span className=\"opt-left\">\n <StarIcon />\n Mark as Favorite\n </span>\n <CompleteCheckbox primary completed />\n </ListItem>\n <ListItem className=\"toggle-item\">\n <span className=\"opt-left\">\n <NotificationBellIcon />\n Subscribe to Everything\n </span>\n <CompleteCheckbox primary completed={false} />\n </ListItem>\n <ListItem>\n <LabelsIcon />\n Manage Task Labels\n </ListItem>\n <ListItem>\n <InsertLinkIcon />\n Copy Link\n </ListItem>\n <ListSeparator />\n <ListItem>\n <CheckboxBlankTogglerIcon />\n Complete\n </ListItem>\n <ListItem>\n <DownloadIcon />\n Export\n </ListItem>\n {sourceModuleLoaded ? (\n <>\n <ListSeparator />\n <ListItem\n className=\"toggle-item submenu-item\"\n onClick={goToRepositories}\n >\n <span className=\"opt-left\">\n <GitRepositoryIcon />\n Repositories\n </span>\n <span className=\"repo-right\">\n {connectedRepos.length > 0 ? (\n <Badge\n isStandalone\n dimension={16}\n value={connectedRepos.length}\n />\n ) : null}\n <CaretRightIcon className=\"repo-caret\" width={16} height={16} />\n </span>\n </ListItem>\n </>\n ) : null}\n <ListSeparator />\n <ListItem>\n <DuplicateIcon />\n Duplicate\n </ListItem>\n <ListItem>\n <ProjectTemplateIcon />\n Apply Template\n </ListItem>\n <ListItem>\n <ProjectTemplateConvertIcon />\n Convert to Template\n </ListItem>\n <ListSeparator />\n <ListItem>\n <TrashIcon />\n Delete\n </ListItem>\n </List>\n </StyledProjectMenu>\n );\n\n return (\n <>\n <ProjectMenuSliderStyle />\n <Menu\n open={open}\n onOpen={() => setOpen(true)}\n onClose={handleClose}\n position=\"bottom-end\"\n menuClassName={sourceModuleLoaded ? \"project-options-menu\" : undefined}\n target={\n <IconButton\n type=\"button\"\n variant=\"text gray\"\n size={size}\n className={className}\n active={open}\n >\n <TreeDotsIcon />\n </IconButton>\n }\n >\n {sourceModuleLoaded ? (\n <ResizeTransition in style={{ height, width: PROJECT_MENU_WIDTH }}>\n <div style={{ position: \"relative\", overflow: \"hidden\" }}>\n <SlideLeftRightTransition\n in={view === \"index\"}\n direction={isLeft ? \"left\" : \"right\"}\n >\n <div ref={measure} style={{ width: PROJECT_MENU_WIDTH }}>\n {indexView}\n </div>\n </SlideLeftRightTransition>\n <SlideLeftRightTransition\n in={view === \"repositories\"}\n direction={isLeft ? \"left\" : \"right\"}\n >\n <div ref={measure} style={{ width: PROJECT_MENU_WIDTH }}>\n <MenuHeader\n title=\"Repositories\"\n leftElement={\n <IconButton\n type=\"button\"\n variant=\"text gray\"\n size=\"small\"\n onClick={backToIndex}\n aria-label=\"Back\"\n >\n <ArrowLeftIcon />\n </IconButton>\n }\n />\n <StyledProjectMenu>\n <List style={{ padding: \"8px 0\" }} tabIndex={-1}>\n {sortedRepos.map((repo) => {\n const RepoIcon = repositoryIcon(repo);\n return (\n <ListItem\n key={repo.id}\n className=\"repo-row\"\n onClick={() => handleOpenRepository()}\n >\n <RepoIcon />\n <span className=\"repo-name\">\n {repositoryMenuLabel(repo)}\n </span>\n </ListItem>\n );\n })}\n {sortedRepos.length > 0 ? <ListSeparator /> : null}\n {sortedRepos.length > 0 &&\n canManageProjectRepositories ? (\n <ListItem onClick={handleOpenWebhookLogs}>\n <AccessLogIcon />\n Webhook Logs\n </ListItem>\n ) : null}\n <ListItem onClick={handleConnect}>\n <GitRepositoryConnectIcon />\n Connect Repository\n </ListItem>\n </List>\n </StyledProjectMenu>\n </div>\n </SlideLeftRightTransition>\n </div>\n </ResizeTransition>\n ) : (\n indexView\n )}\n </Menu>\n\n <ConnectRepositoryDialog\n open={connectOpen}\n onClose={() => setConnectOpen(false)}\n onConnect={handleConnected}\n repositories={connectableRepos}\n connections={PROJECT_MENU_CONNECTIONS}\n />\n\n <WebhookLogsDialog\n open={webhookLogsOpen}\n onClose={() => setWebhookLogsOpen(false)}\n repositoryIds={sortedRepos.map((repo) => repo.id)}\n />\n\n <Dialog\n open={infoOpen}\n onClose={() => setInfoOpen(false)}\n enableBackgroundClick\n >\n <Dialog.Title>Open Repository</Dialog.Title>\n <Dialog.ContentDivider />\n <Dialog.Content>\n <Body2>\n In production, this click would close the menu and open the\n repository in a new browser tab.\n </Body2>\n </Dialog.Content>\n <Dialog.ContentDivider />\n <Dialog.Actions>\n <Button variant=\"primary\" onClick={() => setInfoOpen(false)}>\n Got it\n </Button>\n </Dialog.Actions>\n </Dialog>\n\n <StyledToastAnchor>\n <SlideFromTop in={toastOpen}>\n <ToastMessage\n key={toastKey}\n className=\"c-toast-message\"\n type=\"success\"\n text=\"Repository connected.\"\n dismissible\n dropShadow\n timeout={3000}\n onClose={() => setToastOpen(false)}\n />\n </SlideFromTop>\n </StyledToastAnchor>\n </>\n );\n};\n\nProjectOptionsMenu.displayName = \"ProjectOptionsMenu\";\n"],"mappings":"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","ignoreList":[]}
|