@activecollab/components 2.0.341 → 2.0.343
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/presentation/shared/ConnectRepositoryDialog.js +272 -0
- package/dist/cjs/presentation/shared/ConnectRepositoryDialog.js.map +1 -0
- package/dist/cjs/presentation/shared/LinkBranchOrPullRequestDialog.js +690 -0
- package/dist/cjs/presentation/shared/LinkBranchOrPullRequestDialog.js.map +1 -0
- package/dist/cjs/presentation/shared/index.js +51 -0
- package/dist/cjs/presentation/shared/index.js.map +1 -1
- package/dist/esm/presentation/shared/ConnectRepositoryDialog.d.ts +51 -0
- package/dist/esm/presentation/shared/ConnectRepositoryDialog.d.ts.map +1 -0
- package/dist/esm/presentation/shared/ConnectRepositoryDialog.js +225 -0
- package/dist/esm/presentation/shared/ConnectRepositoryDialog.js.map +1 -0
- package/dist/esm/presentation/shared/LinkBranchOrPullRequestDialog.d.ts +7 -0
- package/dist/esm/presentation/shared/LinkBranchOrPullRequestDialog.d.ts.map +1 -0
- package/dist/esm/presentation/shared/LinkBranchOrPullRequestDialog.js +579 -0
- package/dist/esm/presentation/shared/LinkBranchOrPullRequestDialog.js.map +1 -0
- package/dist/esm/presentation/shared/index.d.ts +4 -0
- package/dist/esm/presentation/shared/index.d.ts.map +1 -1
- package/dist/esm/presentation/shared/index.js +2 -0
- package/dist/esm/presentation/shared/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.serviceLabel = exports.buildRepoOptions = exports.RepositorySelect = exports.PROJECT_REPOSITORIES = exports.ConnectRepositoryDialog = exports.CONNECTIONS = exports.CONNECTABLE_REPOSITORIES = void 0;
|
|
7
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
8
|
+
var _styledComponents = _interopRequireWildcard(require("styled-components"));
|
|
9
|
+
var _Button = require("../../components/Button");
|
|
10
|
+
var _Checkbox = require("../../components/Checkbox");
|
|
11
|
+
var _Dialog = require("../../components/Dialog");
|
|
12
|
+
var _Label = require("../../components/Label");
|
|
13
|
+
var _Select = require("../../components/Select");
|
|
14
|
+
var _SelectTrigger = require("../../components/SelectTrigger");
|
|
15
|
+
var _Typography = require("../../components/Typography");
|
|
16
|
+
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); }
|
|
17
|
+
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
18
|
+
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."); }
|
|
19
|
+
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; } }
|
|
20
|
+
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; }
|
|
21
|
+
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; } }
|
|
22
|
+
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
23
|
+
/**
|
|
24
|
+
* "Connect Repository" — the project-side counterpart to the "Connect Project"
|
|
25
|
+
* dialog on the Repositories page (Apps & Integrations). Same operation from
|
|
26
|
+
* the other end: pick a repository, choose which features to enable, and make
|
|
27
|
+
* the connection. Built as a shared component because more than one story links
|
|
28
|
+
* a repository this way.
|
|
29
|
+
*
|
|
30
|
+
* Also exports `RepositorySelect`, the grouped repository picker (repositories
|
|
31
|
+
* grouped under their connection name, everything sorted by name, filterable
|
|
32
|
+
* via the built-in search) reused wherever a repository is chosen.
|
|
33
|
+
*/
|
|
34
|
+
|
|
35
|
+
var SANS = '-apple-system, BlinkMacSystemFont, "Roboto", "Helvetica Neue", Arial, sans-serif';
|
|
36
|
+
|
|
37
|
+
/* ---- Data model + mock data ----------------------------------------- */
|
|
38
|
+
|
|
39
|
+
/** Human-readable provider label used in the group header "name (type)". */
|
|
40
|
+
var serviceLabel = exports.serviceLabel = function serviceLabel(service) {
|
|
41
|
+
return service === "github" ? "GitHub" : "GitLab";
|
|
42
|
+
};
|
|
43
|
+
var CONNECTIONS = exports.CONNECTIONS = [{
|
|
44
|
+
id: "gh-ac",
|
|
45
|
+
name: "ActiveCollab",
|
|
46
|
+
service: "github"
|
|
47
|
+
}, {
|
|
48
|
+
id: "gl-ops",
|
|
49
|
+
name: "a51-ops",
|
|
50
|
+
service: "gitlab"
|
|
51
|
+
}];
|
|
52
|
+
|
|
53
|
+
/** Repositories already connected to the project (shown in link pickers). */
|
|
54
|
+
var PROJECT_REPOSITORIES = exports.PROJECT_REPOSITORIES = [{
|
|
55
|
+
id: "backend",
|
|
56
|
+
name: "activecollab/backend",
|
|
57
|
+
connectionId: "gh-ac"
|
|
58
|
+
}, {
|
|
59
|
+
id: "frontend",
|
|
60
|
+
name: "activecollab/frontend",
|
|
61
|
+
connectionId: "gh-ac"
|
|
62
|
+
}, {
|
|
63
|
+
id: "infra",
|
|
64
|
+
name: "activecollab/infrastructure",
|
|
65
|
+
connectionId: "gl-ops"
|
|
66
|
+
}];
|
|
67
|
+
|
|
68
|
+
/** Repositories available to connect (not yet linked to the project). */
|
|
69
|
+
var CONNECTABLE_REPOSITORIES = exports.CONNECTABLE_REPOSITORIES = [{
|
|
70
|
+
id: "mobile",
|
|
71
|
+
name: "activecollab/mobile",
|
|
72
|
+
connectionId: "gh-ac"
|
|
73
|
+
}, {
|
|
74
|
+
id: "design-system",
|
|
75
|
+
name: "activecollab/design-system",
|
|
76
|
+
connectionId: "gh-ac"
|
|
77
|
+
}, {
|
|
78
|
+
id: "deploy-scripts",
|
|
79
|
+
name: "a51-ops/deploy-scripts",
|
|
80
|
+
connectionId: "gl-ops"
|
|
81
|
+
}, {
|
|
82
|
+
id: "runners",
|
|
83
|
+
name: "a51-ops/ci-runners",
|
|
84
|
+
connectionId: "gl-ops"
|
|
85
|
+
}];
|
|
86
|
+
|
|
87
|
+
/** Build grouped Select options — groups and options both sorted by name. */
|
|
88
|
+
var buildRepoOptions = exports.buildRepoOptions = function buildRepoOptions(repositories, connections) {
|
|
89
|
+
return [...connections].map(function (c) {
|
|
90
|
+
return {
|
|
91
|
+
id: c.id,
|
|
92
|
+
name: "".concat(c.name, " (").concat(serviceLabel(c.service), ")"),
|
|
93
|
+
options: repositories.filter(function (r) {
|
|
94
|
+
return r.connectionId === c.id;
|
|
95
|
+
}).sort(function (a, b) {
|
|
96
|
+
return a.name.localeCompare(b.name);
|
|
97
|
+
}).map(function (r) {
|
|
98
|
+
return {
|
|
99
|
+
id: r.id,
|
|
100
|
+
name: r.name
|
|
101
|
+
};
|
|
102
|
+
})
|
|
103
|
+
};
|
|
104
|
+
}).filter(function (group) {
|
|
105
|
+
return group.options.length > 0;
|
|
106
|
+
}).sort(function (a, b) {
|
|
107
|
+
return a.name.localeCompare(b.name);
|
|
108
|
+
});
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
/* ---- RepositorySelect ------------------------------------------------ */
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* The grouped repository menu renders through a portal, so the "match the
|
|
115
|
+
* trigger width" override has to be global, scoped to this instance's class.
|
|
116
|
+
*/
|
|
117
|
+
var RepoMenuGlobalStyle = (0, _styledComponents.createGlobalStyle)([".c-select.", "{", "}"], function (p) {
|
|
118
|
+
return p.$cls;
|
|
119
|
+
}, function (p) {
|
|
120
|
+
return p.$w ? "width: ".concat(p.$w, "px !important; max-width: none !important;") : "";
|
|
121
|
+
});
|
|
122
|
+
var RepoSelectWrap = _styledComponents.default.div.withConfig({
|
|
123
|
+
displayName: "ConnectRepositoryDialog__RepoSelectWrap",
|
|
124
|
+
componentId: "sc-7az7te-0"
|
|
125
|
+
})(["font-family:", ";.repo-trigger{width:100%;max-width:none;}"], SANS);
|
|
126
|
+
var RepositorySelect = exports.RepositorySelect = function RepositorySelect(_ref) {
|
|
127
|
+
var _repositories$find$na, _repositories$find;
|
|
128
|
+
var repositories = _ref.repositories,
|
|
129
|
+
connections = _ref.connections,
|
|
130
|
+
selected = _ref.selected,
|
|
131
|
+
_onChange = _ref.onChange,
|
|
132
|
+
invalid = _ref.invalid,
|
|
133
|
+
_ref$placeholder = _ref.placeholder,
|
|
134
|
+
placeholder = _ref$placeholder === void 0 ? "Choose repository" : _ref$placeholder,
|
|
135
|
+
className = _ref.className;
|
|
136
|
+
var wrapRef = (0, _react.useRef)(null);
|
|
137
|
+
var _useState = (0, _react.useState)(),
|
|
138
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
139
|
+
menuWidth = _useState2[0],
|
|
140
|
+
setMenuWidth = _useState2[1];
|
|
141
|
+
var _useState3 = (0, _react.useState)(function () {
|
|
142
|
+
return "repo-select-menu-".concat(Math.random().toString(36).slice(2));
|
|
143
|
+
}),
|
|
144
|
+
_useState4 = _slicedToArray(_useState3, 1),
|
|
145
|
+
menuCls = _useState4[0];
|
|
146
|
+
var measure = (0, _react.useCallback)(function () {
|
|
147
|
+
if (wrapRef.current) {
|
|
148
|
+
setMenuWidth(wrapRef.current.offsetWidth);
|
|
149
|
+
}
|
|
150
|
+
}, []);
|
|
151
|
+
(0, _react.useEffect)(function () {
|
|
152
|
+
measure();
|
|
153
|
+
}, [measure]);
|
|
154
|
+
var options = buildRepoOptions(repositories, connections);
|
|
155
|
+
var selectedName = (_repositories$find$na = (_repositories$find = repositories.find(function (r) {
|
|
156
|
+
return r.id === selected;
|
|
157
|
+
})) === null || _repositories$find === void 0 ? void 0 : _repositories$find.name) !== null && _repositories$find$na !== void 0 ? _repositories$find$na : placeholder;
|
|
158
|
+
return /*#__PURE__*/_react.default.createElement(RepoSelectWrap, {
|
|
159
|
+
ref: wrapRef,
|
|
160
|
+
className: className
|
|
161
|
+
}, /*#__PURE__*/_react.default.createElement(RepoMenuGlobalStyle, {
|
|
162
|
+
$cls: menuCls,
|
|
163
|
+
$w: menuWidth
|
|
164
|
+
}), /*#__PURE__*/_react.default.createElement(_Select.Select, {
|
|
165
|
+
options: options,
|
|
166
|
+
selected: selected === null ? undefined : selected,
|
|
167
|
+
onChange: function onChange(v) {
|
|
168
|
+
return _onChange(String(v));
|
|
169
|
+
},
|
|
170
|
+
placeholder: "Search repositories",
|
|
171
|
+
selectClassName: menuCls,
|
|
172
|
+
onSelectOpen: measure,
|
|
173
|
+
forceCloseMenu: true,
|
|
174
|
+
target: /*#__PURE__*/_react.default.createElement(_SelectTrigger.SelectTrigger, {
|
|
175
|
+
className: "repo-trigger",
|
|
176
|
+
invalid: invalid,
|
|
177
|
+
typographyProps: selected === null ? {
|
|
178
|
+
color: "tertiary"
|
|
179
|
+
} : undefined
|
|
180
|
+
}, selectedName)
|
|
181
|
+
}));
|
|
182
|
+
};
|
|
183
|
+
|
|
184
|
+
/* ---- ConnectRepositoryDialog ---------------------------------------- */
|
|
185
|
+
|
|
186
|
+
var StyledConnectBody = _styledComponents.default.div.withConfig({
|
|
187
|
+
displayName: "ConnectRepositoryDialog__StyledConnectBody",
|
|
188
|
+
componentId: "sc-7az7te-1"
|
|
189
|
+
})(["font-family:", ";.cr-field{margin-bottom:16px;}.cr-label{display:block;margin-bottom:6px;}.cr-check{display:flex;align-items:center;gap:8px;}.cr-check-hint{margin-top:6px;}"], SANS);
|
|
190
|
+
var ConnectRepositoryDialog = exports.ConnectRepositoryDialog = function ConnectRepositoryDialog(_ref2) {
|
|
191
|
+
var open = _ref2.open,
|
|
192
|
+
onClose = _ref2.onClose,
|
|
193
|
+
onConnect = _ref2.onConnect,
|
|
194
|
+
_ref2$repositories = _ref2.repositories,
|
|
195
|
+
repositories = _ref2$repositories === void 0 ? CONNECTABLE_REPOSITORIES : _ref2$repositories,
|
|
196
|
+
_ref2$connections = _ref2.connections,
|
|
197
|
+
connections = _ref2$connections === void 0 ? CONNECTIONS : _ref2$connections;
|
|
198
|
+
var _useState5 = (0, _react.useState)(null),
|
|
199
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
200
|
+
selected = _useState6[0],
|
|
201
|
+
setSelected = _useState6[1];
|
|
202
|
+
var _useState7 = (0, _react.useState)(false),
|
|
203
|
+
_useState8 = _slicedToArray(_useState7, 2),
|
|
204
|
+
issueSync = _useState8[0],
|
|
205
|
+
setIssueSync = _useState8[1];
|
|
206
|
+
var _useState9 = (0, _react.useState)(false),
|
|
207
|
+
_useState0 = _slicedToArray(_useState9, 2),
|
|
208
|
+
attempted = _useState0[0],
|
|
209
|
+
setAttempted = _useState0[1];
|
|
210
|
+
|
|
211
|
+
// Reset the form each time the dialog opens.
|
|
212
|
+
(0, _react.useEffect)(function () {
|
|
213
|
+
if (open) {
|
|
214
|
+
setSelected(null);
|
|
215
|
+
setIssueSync(false);
|
|
216
|
+
setAttempted(false);
|
|
217
|
+
}
|
|
218
|
+
}, [open]);
|
|
219
|
+
var invalid = attempted && selected === null;
|
|
220
|
+
var handleConnect = function handleConnect() {
|
|
221
|
+
var repo = repositories.find(function (r) {
|
|
222
|
+
return r.id === selected;
|
|
223
|
+
});
|
|
224
|
+
if (!repo) {
|
|
225
|
+
setAttempted(true);
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
onConnect(repo);
|
|
229
|
+
onClose();
|
|
230
|
+
};
|
|
231
|
+
return /*#__PURE__*/_react.default.createElement(_Dialog.Dialog, {
|
|
232
|
+
open: open,
|
|
233
|
+
onClose: onClose,
|
|
234
|
+
disableCloseOnEsc: true
|
|
235
|
+
}, /*#__PURE__*/_react.default.createElement(_Dialog.Dialog.Title, null, "Connect Repository"), /*#__PURE__*/_react.default.createElement(_Dialog.Dialog.ContentDivider, null), /*#__PURE__*/_react.default.createElement(_Dialog.Dialog.Content, null, /*#__PURE__*/_react.default.createElement(StyledConnectBody, null, /*#__PURE__*/_react.default.createElement("div", {
|
|
236
|
+
className: "cr-field"
|
|
237
|
+
}, /*#__PURE__*/_react.default.createElement(_Label.Label, {
|
|
238
|
+
size: "small",
|
|
239
|
+
className: "cr-label",
|
|
240
|
+
invalid: invalid
|
|
241
|
+
}, "Repository"), /*#__PURE__*/_react.default.createElement(RepositorySelect, {
|
|
242
|
+
repositories: repositories,
|
|
243
|
+
connections: connections,
|
|
244
|
+
selected: selected,
|
|
245
|
+
onChange: setSelected,
|
|
246
|
+
invalid: invalid
|
|
247
|
+
})), /*#__PURE__*/_react.default.createElement("div", {
|
|
248
|
+
className: "cr-check"
|
|
249
|
+
}, /*#__PURE__*/_react.default.createElement(_Checkbox.Checkbox, {
|
|
250
|
+
id: "cr-issue-sync",
|
|
251
|
+
checked: issueSync,
|
|
252
|
+
onChange: function onChange(e) {
|
|
253
|
+
return setIssueSync(e.target.checked);
|
|
254
|
+
}
|
|
255
|
+
}), /*#__PURE__*/_react.default.createElement(_Label.Label, {
|
|
256
|
+
htmlFor: "cr-issue-sync",
|
|
257
|
+
weight: "regular"
|
|
258
|
+
}, "Enable issue sync")), /*#__PURE__*/_react.default.createElement(_Typography.Body2, {
|
|
259
|
+
className: "cr-check-hint",
|
|
260
|
+
color: "tertiary"
|
|
261
|
+
}, "Issues from this repository will create and update tasks in this project."))), /*#__PURE__*/_react.default.createElement(_Dialog.Dialog.ContentDivider, null), /*#__PURE__*/_react.default.createElement(_Dialog.Dialog.Actions, null, /*#__PURE__*/_react.default.createElement(_Button.Button, {
|
|
262
|
+
variant: "primary",
|
|
263
|
+
style: {
|
|
264
|
+
marginRight: 12
|
|
265
|
+
},
|
|
266
|
+
onClick: handleConnect
|
|
267
|
+
}, "Connect"), /*#__PURE__*/_react.default.createElement(_Button.Button, {
|
|
268
|
+
variant: "secondary",
|
|
269
|
+
onClick: onClose
|
|
270
|
+
}, "Cancel")));
|
|
271
|
+
};
|
|
272
|
+
//# sourceMappingURL=ConnectRepositoryDialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConnectRepositoryDialog.js","names":["_react","_interopRequireWildcard","require","_styledComponents","_Button","_Checkbox","_Dialog","_Label","_Select","_SelectTrigger","_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","SANS","serviceLabel","exports","service","CONNECTIONS","id","PROJECT_REPOSITORIES","connectionId","CONNECTABLE_REPOSITORIES","buildRepoOptions","repositories","connections","map","c","concat","options","filter","sort","b","localeCompare","group","RepoMenuGlobalStyle","createGlobalStyle","p","$cls","$w","RepoSelectWrap","styled","div","withConfig","displayName","componentId","RepositorySelect","_ref","_repositories$find$na","_repositories$find","selected","onChange","invalid","_ref$placeholder","placeholder","className","wrapRef","useRef","_useState","useState","_useState2","menuWidth","setMenuWidth","_useState3","Math","random","_useState4","menuCls","measure","useCallback","current","offsetWidth","useEffect","selectedName","find","createElement","ref","Select","undefined","v","String","selectClassName","onSelectOpen","forceCloseMenu","target","SelectTrigger","typographyProps","color","StyledConnectBody","ConnectRepositoryDialog","_ref2","open","onClose","onConnect","_ref2$repositories","_ref2$connections","_useState5","_useState6","setSelected","_useState7","_useState8","issueSync","setIssueSync","_useState9","_useState0","attempted","setAttempted","handleConnect","repo","Dialog","disableCloseOnEsc","Title","ContentDivider","Content","Label","size","Checkbox","checked","htmlFor","weight","Body2","Actions","Button","variant","style","marginRight","onClick"],"sources":["../../../../src/presentation/shared/ConnectRepositoryDialog.tsx"],"sourcesContent":["import React, {\n ReactElement,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from \"react\";\n\nimport styled, { createGlobalStyle } from \"styled-components\";\n\nimport { Button } from \"../../components/Button\";\nimport { Checkbox } from \"../../components/Checkbox\";\nimport { Dialog } from \"../../components/Dialog\";\nimport { Label } from \"../../components/Label\";\nimport { Select } from \"../../components/Select\";\nimport { SelectTrigger } from \"../../components/SelectTrigger\";\nimport { Body2 } from \"../../components/Typography\";\n\n/**\n * \"Connect Repository\" — the project-side counterpart to the \"Connect Project\"\n * dialog on the Repositories page (Apps & Integrations). Same operation from\n * the other end: pick a repository, choose which features to enable, and make\n * the connection. Built as a shared component because more than one story links\n * a repository this way.\n *\n * Also exports `RepositorySelect`, the grouped repository picker (repositories\n * grouped under their connection name, everything sorted by name, filterable\n * via the built-in search) reused wherever a repository is chosen.\n */\n\nconst SANS =\n '-apple-system, BlinkMacSystemFont, \"Roboto\", \"Helvetica Neue\", Arial, sans-serif';\n\n/* ---- Data model + mock data ----------------------------------------- */\n\nexport type ConnectionService = \"github\" | \"gitlab\";\n\nexport interface Connection {\n id: string;\n /** Org / group name, e.g. \"ActiveCollab\" or \"a51-ops\". */\n name: string;\n service: ConnectionService;\n}\n\n/** Human-readable provider label used in the group header \"name (type)\". */\nexport const serviceLabel = (service: ConnectionService): string =>\n service === \"github\" ? \"GitHub\" : \"GitLab\";\n\nexport interface Repository {\n id: string;\n /** Full repository path, e.g. activecollab/backend. */\n name: string;\n connectionId: string;\n}\n\nexport const CONNECTIONS: Connection[] = [\n { id: \"gh-ac\", name: \"ActiveCollab\", service: \"github\" },\n { id: \"gl-ops\", name: \"a51-ops\", service: \"gitlab\" },\n];\n\n/** Repositories already connected to the project (shown in link pickers). */\nexport const PROJECT_REPOSITORIES: Repository[] = [\n { id: \"backend\", name: \"activecollab/backend\", connectionId: \"gh-ac\" },\n { id: \"frontend\", name: \"activecollab/frontend\", connectionId: \"gh-ac\" },\n {\n id: \"infra\",\n name: \"activecollab/infrastructure\",\n connectionId: \"gl-ops\",\n },\n];\n\n/** Repositories available to connect (not yet linked to the project). */\nexport const CONNECTABLE_REPOSITORIES: Repository[] = [\n { id: \"mobile\", name: \"activecollab/mobile\", connectionId: \"gh-ac\" },\n {\n id: \"design-system\",\n name: \"activecollab/design-system\",\n connectionId: \"gh-ac\",\n },\n {\n id: \"deploy-scripts\",\n name: \"a51-ops/deploy-scripts\",\n connectionId: \"gl-ops\",\n },\n { id: \"runners\", name: \"a51-ops/ci-runners\", connectionId: \"gl-ops\" },\n];\n\n/** Build grouped Select options — groups and options both sorted by name. */\nexport const buildRepoOptions = (\n repositories: Repository[],\n connections: Connection[]\n) =>\n [...connections]\n .map((c) => ({\n id: c.id,\n name: `${c.name} (${serviceLabel(c.service)})`,\n options: repositories\n .filter((r) => r.connectionId === c.id)\n .sort((a, b) => a.name.localeCompare(b.name))\n .map((r) => ({ id: r.id, name: r.name })),\n }))\n .filter((group) => group.options.length > 0)\n .sort((a, b) => a.name.localeCompare(b.name));\n\n/* ---- RepositorySelect ------------------------------------------------ */\n\n/**\n * The grouped repository menu renders through a portal, so the \"match the\n * trigger width\" override has to be global, scoped to this instance's class.\n */\nconst RepoMenuGlobalStyle = createGlobalStyle<{ $cls: string; $w?: number }>`\n .c-select.${(p) => p.$cls} {\n ${(p) =>\n p.$w ? `width: ${p.$w}px !important; max-width: none !important;` : \"\"}\n }\n`;\n\nconst RepoSelectWrap = styled.div`\n font-family: ${SANS};\n\n .repo-trigger {\n width: 100%;\n max-width: none;\n }\n`;\n\nexport interface RepositorySelectProps {\n repositories: Repository[];\n connections: Connection[];\n selected: string | null;\n onChange: (id: string) => void;\n invalid?: boolean;\n placeholder?: string;\n className?: string;\n}\n\nexport const RepositorySelect = ({\n repositories,\n connections,\n selected,\n onChange,\n invalid,\n placeholder = \"Choose repository\",\n className,\n}: RepositorySelectProps): ReactElement => {\n const wrapRef = useRef<HTMLDivElement>(null);\n const [menuWidth, setMenuWidth] = useState<number | undefined>();\n const [menuCls] = useState(\n () => `repo-select-menu-${Math.random().toString(36).slice(2)}`\n );\n\n const measure = useCallback(() => {\n if (wrapRef.current) {\n setMenuWidth(wrapRef.current.offsetWidth);\n }\n }, []);\n\n useEffect(() => {\n measure();\n }, [measure]);\n\n const options = buildRepoOptions(repositories, connections);\n const selectedName =\n repositories.find((r) => r.id === selected)?.name ?? placeholder;\n\n return (\n <RepoSelectWrap ref={wrapRef} className={className}>\n <RepoMenuGlobalStyle $cls={menuCls} $w={menuWidth} />\n <Select\n options={options}\n selected={selected === null ? undefined : selected}\n onChange={(v) => onChange(String(v))}\n placeholder=\"Search repositories\"\n selectClassName={menuCls}\n onSelectOpen={measure}\n forceCloseMenu\n target={\n <SelectTrigger\n className=\"repo-trigger\"\n invalid={invalid}\n typographyProps={\n selected === null ? { color: \"tertiary\" } : undefined\n }\n >\n {selectedName}\n </SelectTrigger>\n }\n />\n </RepoSelectWrap>\n );\n};\n\n/* ---- ConnectRepositoryDialog ---------------------------------------- */\n\nconst StyledConnectBody = styled.div`\n font-family: ${SANS};\n\n .cr-field {\n margin-bottom: 16px;\n }\n .cr-label {\n display: block;\n margin-bottom: 6px;\n }\n .cr-check {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n .cr-check-hint {\n margin-top: 6px;\n }\n`;\n\nexport interface ConnectRepositoryDialogProps {\n open: boolean;\n onClose: () => void;\n /** Called with the connected repository when the user confirms. */\n onConnect: (repository: Repository) => void;\n /** Repositories that can be connected (defaults to the mock connectable set). */\n repositories?: Repository[];\n connections?: Connection[];\n}\n\nexport const ConnectRepositoryDialog = ({\n open,\n onClose,\n onConnect,\n repositories = CONNECTABLE_REPOSITORIES,\n connections = CONNECTIONS,\n}: ConnectRepositoryDialogProps): ReactElement => {\n const [selected, setSelected] = useState<string | null>(null);\n const [issueSync, setIssueSync] = useState(false);\n const [attempted, setAttempted] = useState(false);\n\n // Reset the form each time the dialog opens.\n useEffect(() => {\n if (open) {\n setSelected(null);\n setIssueSync(false);\n setAttempted(false);\n }\n }, [open]);\n\n const invalid = attempted && selected === null;\n\n const handleConnect = () => {\n const repo = repositories.find((r) => r.id === selected);\n if (!repo) {\n setAttempted(true);\n return;\n }\n onConnect(repo);\n onClose();\n };\n\n return (\n <Dialog open={open} onClose={onClose} disableCloseOnEsc>\n <Dialog.Title>Connect Repository</Dialog.Title>\n <Dialog.ContentDivider />\n <Dialog.Content>\n <StyledConnectBody>\n <div className=\"cr-field\">\n <Label size=\"small\" className=\"cr-label\" invalid={invalid}>\n Repository\n </Label>\n <RepositorySelect\n repositories={repositories}\n connections={connections}\n selected={selected}\n onChange={setSelected}\n invalid={invalid}\n />\n </div>\n\n <div className=\"cr-check\">\n <Checkbox\n id=\"cr-issue-sync\"\n checked={issueSync}\n onChange={(e) => setIssueSync(e.target.checked)}\n />\n <Label htmlFor=\"cr-issue-sync\" weight=\"regular\">\n Enable issue sync\n </Label>\n </div>\n <Body2 className=\"cr-check-hint\" color=\"tertiary\">\n Issues from this repository will create and update tasks in this\n project.\n </Body2>\n </StyledConnectBody>\n </Dialog.Content>\n <Dialog.ContentDivider />\n <Dialog.Actions>\n <Button\n variant=\"primary\"\n style={{ marginRight: 12 }}\n onClick={handleConnect}\n >\n Connect\n </Button>\n <Button variant=\"secondary\" onClick={onClose}>\n Cancel\n </Button>\n </Dialog.Actions>\n </Dialog>\n );\n};\n"],"mappings":"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","ignoreList":[]}
|