dsh-plugin-github-issues 0.4.7 → 0.6.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/README.md +14 -13
- package/assets/panel.png +0 -0
- package/docs/README.zh.md +11 -12
- package/lib/client.js +177 -171
- package/lib/controller.js +7 -0
- package/lib/controller.js.map +1 -1
- package/lib/github/client.js +60 -9
- package/lib/github/client.js.map +1 -1
- package/lib/github/queries.js +43 -2
- package/lib/github/queries.js.map +1 -1
- package/lib/github/state.js +4 -0
- package/lib/github/state.js.map +1 -1
- package/lib/github/types.js.map +1 -1
- package/lib/remote-methods.js +1 -0
- package/lib/remote-methods.js.map +1 -1
- package/lib/types/controller.d.ts +5 -1
- package/lib/types/controller.d.ts.map +1 -1
- package/lib/types/github/client.d.ts.map +1 -1
- package/lib/types/github/queries.d.ts +12 -1
- package/lib/types/github/queries.d.ts.map +1 -1
- package/lib/types/github/state.d.ts.map +1 -1
- package/lib/types/github/types.d.ts +5 -1
- package/lib/types/github/types.d.ts.map +1 -1
- package/lib/types/remote-methods.d.ts.map +1 -1
- package/lib/types/vm.d.ts +12 -0
- package/lib/types/vm.d.ts.map +1 -1
- package/lib/vm.js +1 -0
- package/lib/vm.js.map +1 -1
- package/package.json +5 -3
package/lib/client.js
CHANGED
|
@@ -47,6 +47,7 @@ var DEFAULT_PREFS = {
|
|
|
47
47
|
org: void 0,
|
|
48
48
|
projectId: void 0,
|
|
49
49
|
repo: void 0,
|
|
50
|
+
milestone: void 0,
|
|
50
51
|
assignee: "@me",
|
|
51
52
|
state: "open",
|
|
52
53
|
handoffMode: "draft",
|
|
@@ -357,7 +358,6 @@ var TONE = {
|
|
|
357
358
|
dot: "var(--dsw-alias-state-business-primary, var(--dsw-alias-link))"
|
|
358
359
|
}
|
|
359
360
|
};
|
|
360
|
-
var PROJECT_SCOPE_COMMAND = "gh auth refresh -h github.com -s read:project";
|
|
361
361
|
function Button({ children, onClick, variant = "outline", size = "md", disabled, title, ariaLabel }) {
|
|
362
362
|
return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
|
|
363
363
|
"button",
|
|
@@ -512,15 +512,6 @@ function Toast({ text, onDismiss, dismissLabel }) {
|
|
|
512
512
|
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("button", { type: "button", className: "gh-toast-close", "aria-label": dismissLabel, title: dismissLabel, onClick: onDismiss, children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(CloseGlyph, { size: 12 }) })
|
|
513
513
|
] });
|
|
514
514
|
}
|
|
515
|
-
function CommandBlock({ command, copyLabel, onCopy }) {
|
|
516
|
-
return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { className: "gh-command", children: [
|
|
517
|
-
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("code", { className: "gh-command-text", children: command }),
|
|
518
|
-
/* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(Button, { size: "sm", variant: "ghost", onClick: onCopy, children: [
|
|
519
|
-
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(CopyGlyph, { size: 12 }),
|
|
520
|
-
copyLabel
|
|
521
|
-
] })
|
|
522
|
-
] });
|
|
523
|
-
}
|
|
524
515
|
function StyleSheet({ chunks }) {
|
|
525
516
|
return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("style", { children: chunks.join("\n") });
|
|
526
517
|
}
|
|
@@ -1267,6 +1258,25 @@ var PAGE_SUBTITLE_STYLE = {
|
|
|
1267
1258
|
var PAGE_CSS = `
|
|
1268
1259
|
.ghp-page{box-sizing:border-box;height:100%;overflow:auto;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-base);font-size:var(--dsh-content-font-size,14px)}
|
|
1269
1260
|
.ghp-content{box-sizing:border-box;width:100%;max-width:960px;margin:0 auto;padding:0 clamp(24px,4vw,48px) 48px}
|
|
1261
|
+
/* The panel keeps its header, cascade and search fixed; only the list and the
|
|
1262
|
+
detail pane scroll. The settings page keeps the scrolling page shell above. */
|
|
1263
|
+
.ghp-panel{display:flex;flex-direction:column;height:100%;overflow:hidden}
|
|
1264
|
+
.ghp-panel .ghp-content{display:flex;flex-direction:column;flex:1;min-height:0;height:auto;padding-bottom:0}
|
|
1265
|
+
.ghp-panel .ghp-head,.ghp-panel .ghp-scope,.ghp-panel .ghp-notice,.ghp-panel .ghp-filters{flex:none}
|
|
1266
|
+
.ghp-panel .ghp-body{display:flex;flex:1;min-height:0;margin-top:0}
|
|
1267
|
+
.ghp-panel .ghp-split{flex:1;min-height:0;width:100%;align-items:stretch}
|
|
1268
|
+
.ghp-panel .ghp-list-pane{flex:1;min-width:0;overflow:auto;overscroll-behavior:contain;padding-bottom:32px}
|
|
1269
|
+
.ghp-panel .ghx-pane{flex:0 0 380px;box-sizing:border-box;width:380px;max-height:100%;min-height:0;overflow:auto;overscroll-behavior:contain;padding-bottom:32px}
|
|
1270
|
+
.ghp-panel .ghp-scope{grid-template-columns:minmax(0,1.05fr) minmax(0,1.55fr) minmax(0,1.55fr) minmax(0,1fr) minmax(0,.8fr);gap:10px;margin-top:14px}
|
|
1271
|
+
@media (max-width:860px){.ghp-panel .ghp-scope{grid-template-columns:repeat(auto-fit,minmax(124px,1fr))}}
|
|
1272
|
+
.ghp-panel .ghp-filters{margin:12px 0 6px}
|
|
1273
|
+
@media (max-width:760px){
|
|
1274
|
+
.ghp-panel{overflow:auto}
|
|
1275
|
+
.ghp-panel .ghp-content{display:block;height:auto;min-height:100%}
|
|
1276
|
+
.ghp-panel .ghp-body{display:block}
|
|
1277
|
+
.ghp-panel .ghp-list-pane{overflow:visible}
|
|
1278
|
+
.ghp-panel .ghx-pane{width:100%;max-height:none;overflow:visible}
|
|
1279
|
+
}
|
|
1270
1280
|
.ghp-head{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;flex-wrap:wrap}
|
|
1271
1281
|
.ghp-title-block{min-width:0}
|
|
1272
1282
|
.ghp-h1{margin:0;font-size:20px;line-height:28px;font-weight:500;color:var(--dsw-alias-label-primary)}
|
|
@@ -1309,44 +1319,6 @@ function Field(props) {
|
|
|
1309
1319
|
props.children
|
|
1310
1320
|
] });
|
|
1311
1321
|
}
|
|
1312
|
-
function ScopeCombo(props) {
|
|
1313
|
-
const { label, value, placeholder, options, disabled, onChange } = props;
|
|
1314
|
-
const listId = (0, import_react2.useId)();
|
|
1315
|
-
const selected = options.find((option) => option.value === value);
|
|
1316
|
-
const [text, setText] = (0, import_react2.useState)(selected?.label ?? "");
|
|
1317
|
-
(0, import_react2.useEffect)(() => {
|
|
1318
|
-
const current = options.find((option) => option.value === value);
|
|
1319
|
-
setText(current?.label ?? "");
|
|
1320
|
-
}, [value, options]);
|
|
1321
|
-
return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(import_jsx_runtime8.Fragment, { children: [
|
|
1322
|
-
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
|
|
1323
|
-
"input",
|
|
1324
|
-
{
|
|
1325
|
-
className: "gh-input",
|
|
1326
|
-
list: listId,
|
|
1327
|
-
value: text,
|
|
1328
|
-
disabled: disabled === true,
|
|
1329
|
-
placeholder,
|
|
1330
|
-
"aria-label": label,
|
|
1331
|
-
onChange: (event) => {
|
|
1332
|
-
const next = event.target.value;
|
|
1333
|
-
setText(next);
|
|
1334
|
-
if (next === "") {
|
|
1335
|
-
onChange(void 0);
|
|
1336
|
-
return;
|
|
1337
|
-
}
|
|
1338
|
-
const match = options.find((option) => option.label === next || option.value === next);
|
|
1339
|
-
if (match !== void 0) onChange(match.value);
|
|
1340
|
-
},
|
|
1341
|
-
onBlur: () => {
|
|
1342
|
-
const current = options.find((option) => option.value === value);
|
|
1343
|
-
setText(current?.label ?? "");
|
|
1344
|
-
}
|
|
1345
|
-
}
|
|
1346
|
-
),
|
|
1347
|
-
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)("datalist", { id: listId, children: options.map((option) => /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("option", { value: option.label }, option.value)) })
|
|
1348
|
-
] });
|
|
1349
|
-
}
|
|
1350
1322
|
function GitHubPage({ snapshot, actions, t, resolveSession }) {
|
|
1351
1323
|
const [filter, setFilter] = (0, import_react2.useState)("");
|
|
1352
1324
|
const prefs = snapshot.prefs;
|
|
@@ -1368,16 +1340,11 @@ function GitHubPage({ snapshot, actions, t, resolveSession }) {
|
|
|
1368
1340
|
label: t(STATE_LABEL[state])
|
|
1369
1341
|
}));
|
|
1370
1342
|
const orgs = snapshot.catalog?.orgs ?? [];
|
|
1371
|
-
const orgOptions =
|
|
1372
|
-
|
|
1373
|
-
|
|
1374
|
-
|
|
1375
|
-
const
|
|
1376
|
-
{ value: "", label: t("panel.allProjects") },
|
|
1377
|
-
...(snapshot.orgProjects ?? []).map((project) => ({ value: project.id, label: project.title }))
|
|
1378
|
-
];
|
|
1379
|
-
const repoSource = prefs.org === void 0 ? snapshot.catalog?.repos ?? [] : snapshot.orgRepos?.items ?? [];
|
|
1380
|
-
const repoOptions = repoSource.map((repo) => ({
|
|
1343
|
+
const orgOptions = orgs.map((org) => ({
|
|
1344
|
+
value: org.login,
|
|
1345
|
+
label: org.name === void 0 ? org.login : `${org.login} \xB7 ${org.name}`
|
|
1346
|
+
}));
|
|
1347
|
+
const repoOptions = (snapshot.orgRepos?.items ?? []).map((repo) => ({
|
|
1381
1348
|
value: repo.nameWithOwner,
|
|
1382
1349
|
label: `${repo.nameWithOwner}${repo.isPrivate ? ` \xB7 ${t("panel.private")}` : ""}${repo.isFork === true ? ` \xB7 ${t("panel.fork")}` : ""}`
|
|
1383
1350
|
}));
|
|
@@ -1385,6 +1352,14 @@ function GitHubPage({ snapshot, actions, t, resolveSession }) {
|
|
|
1385
1352
|
{ value: "@me", label: t("panel.assignee.me") },
|
|
1386
1353
|
{ value: "all", label: t("panel.assignee.all") }
|
|
1387
1354
|
];
|
|
1355
|
+
const milestoneTitles = [
|
|
1356
|
+
...prefs.milestone === void 0 ? [] : [prefs.milestone],
|
|
1357
|
+
...(snapshot.milestoneOptions ?? []).map((item) => item.title)
|
|
1358
|
+
].filter((title, index, all) => title !== "" && all.indexOf(title) === index);
|
|
1359
|
+
const milestoneOptions = [
|
|
1360
|
+
{ value: "", label: t("panel.allMilestones") },
|
|
1361
|
+
...milestoneTitles.map((title) => ({ value: title, label: title }))
|
|
1362
|
+
];
|
|
1388
1363
|
const totalCount = snapshot.list?.totalCount;
|
|
1389
1364
|
const waitingForDetail = snapshot.selected !== void 0 && snapshot.detail === void 0;
|
|
1390
1365
|
const listError = snapshot.error !== void 0 && !waitingForDetail ? snapshot.error : void 0;
|
|
@@ -1393,10 +1368,10 @@ function GitHubPage({ snapshot, actions, t, resolveSession }) {
|
|
|
1393
1368
|
const noAuth = snapshot.status?.signedIn === false;
|
|
1394
1369
|
const subtitle = snapshot.status?.signedIn === true && snapshot.status.login !== void 0 ? t("settings.signedIn", { login: snapshot.status.login }) : snapshot.loading ? t("panel.loading") : "";
|
|
1395
1370
|
const split = snapshot.selected !== void 0;
|
|
1396
|
-
const scopeHint = prefs.org === void 0 ? t("panel.scopeGlobal") : `${prefs.org}${prefs.
|
|
1397
|
-
return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("section", { className: "ghp-page",
|
|
1371
|
+
const scopeHint = prefs.org === void 0 ? t("panel.scopeGlobal") : `${prefs.org}${prefs.repo === void 0 ? "" : ` \xB7 ${prefs.repo}`}${prefs.milestone === void 0 ? "" : ` \xB7 ${prefs.milestone}`}`;
|
|
1372
|
+
return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("section", { className: "ghp-page ghp-panel", "data-github-panel": true, "aria-label": t("panel"), children: [
|
|
1398
1373
|
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(StyleSheet, { chunks: [CONTROLS_CSS, PAGE_CSS, ISSUE_ROW_CSS, ISSUE_DETAIL_CSS] }),
|
|
1399
|
-
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: "ghp-content",
|
|
1374
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: "ghp-content", children: [
|
|
1400
1375
|
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("header", { className: "ghp-head", style: PAGE_HEAD_STYLE, "data-window-drag": true, children: [
|
|
1401
1376
|
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: "ghp-title-block", children: [
|
|
1402
1377
|
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)("h1", { className: "ghp-h1", style: PAGE_H1_STYLE, children: t("panel") }),
|
|
@@ -1421,27 +1396,28 @@ function GitHubPage({ snapshot, actions, t, resolveSession }) {
|
|
|
1421
1396
|
ariaLabel: t("panel.org"),
|
|
1422
1397
|
value: prefs.org ?? "",
|
|
1423
1398
|
options: orgOptions,
|
|
1424
|
-
|
|
1399
|
+
disabled: orgOptions.length === 0,
|
|
1400
|
+
onChange: (value) => actions.setOrg(value)
|
|
1425
1401
|
}
|
|
1426
1402
|
) }),
|
|
1427
|
-
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Field, { label: t("panel.
|
|
1403
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Field, { label: t("panel.repoFilter"), children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
|
|
1428
1404
|
Select,
|
|
1429
1405
|
{
|
|
1430
|
-
ariaLabel: t("panel.
|
|
1431
|
-
value: prefs.
|
|
1432
|
-
options:
|
|
1433
|
-
disabled:
|
|
1434
|
-
onChange: (value) => actions.
|
|
1406
|
+
ariaLabel: t("panel.repoFilter"),
|
|
1407
|
+
value: prefs.repo ?? "",
|
|
1408
|
+
options: repoOptions,
|
|
1409
|
+
disabled: repoOptions.length === 0,
|
|
1410
|
+
onChange: (value) => actions.setRepo(value)
|
|
1435
1411
|
}
|
|
1436
1412
|
) }),
|
|
1437
|
-
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Field, { label: t("panel.
|
|
1438
|
-
|
|
1413
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Field, { label: t("panel.milestoneFilter"), children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
|
|
1414
|
+
Select,
|
|
1439
1415
|
{
|
|
1440
|
-
|
|
1441
|
-
value: prefs.
|
|
1442
|
-
|
|
1443
|
-
|
|
1444
|
-
onChange: (
|
|
1416
|
+
ariaLabel: t("panel.milestoneFilter"),
|
|
1417
|
+
value: prefs.milestone ?? "",
|
|
1418
|
+
options: milestoneOptions,
|
|
1419
|
+
disabled: prefs.repo === void 0 || snapshot.scopeLoading,
|
|
1420
|
+
onChange: (value) => actions.setMilestone(value === "" ? void 0 : value)
|
|
1445
1421
|
}
|
|
1446
1422
|
) }),
|
|
1447
1423
|
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Field, { label: t("panel.assignee"), children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
|
|
@@ -1463,18 +1439,6 @@ function GitHubPage({ snapshot, actions, t, resolveSession }) {
|
|
|
1463
1439
|
}
|
|
1464
1440
|
) })
|
|
1465
1441
|
] }),
|
|
1466
|
-
prefs.org === void 0 && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { className: "ghp-notice", role: "note", children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { children: t("panel.pickOrgHint") }) }),
|
|
1467
|
-
snapshot.projectsBlocked && prefs.org !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: "ghp-notice", role: "note", children: [
|
|
1468
|
-
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { children: t("panel.projectsBlocked") }),
|
|
1469
|
-
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
|
|
1470
|
-
CommandBlock,
|
|
1471
|
-
{
|
|
1472
|
-
command: PROJECT_SCOPE_COMMAND,
|
|
1473
|
-
copyLabel: t("panel.copyCommand"),
|
|
1474
|
-
onCopy: () => actions.copyText(PROJECT_SCOPE_COMMAND)
|
|
1475
|
-
}
|
|
1476
|
-
)
|
|
1477
|
-
] }),
|
|
1478
1442
|
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: "ghp-filters", children: [
|
|
1479
1443
|
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: "ghp-search", children: [
|
|
1480
1444
|
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: "ghp-search-icon", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(SearchGlyph, { size: 13 }) }),
|
|
@@ -1499,15 +1463,7 @@ function GitHubPage({ snapshot, actions, t, resolveSession }) {
|
|
|
1499
1463
|
{
|
|
1500
1464
|
message: t("panel.error", { message: listError.message }),
|
|
1501
1465
|
retryLabel: t("panel.refresh"),
|
|
1502
|
-
onRetry: () => actions.refresh()
|
|
1503
|
-
children: listError.code === "missing_scope" && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
|
|
1504
|
-
CommandBlock,
|
|
1505
|
-
{
|
|
1506
|
-
command: PROJECT_SCOPE_COMMAND,
|
|
1507
|
-
copyLabel: t("panel.copyCommand"),
|
|
1508
|
-
onCopy: () => actions.copyText(PROJECT_SCOPE_COMMAND)
|
|
1509
|
-
}
|
|
1510
|
-
)
|
|
1466
|
+
onRetry: () => actions.refresh()
|
|
1511
1467
|
}
|
|
1512
1468
|
),
|
|
1513
1469
|
showSkeleton && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { className: "ghp-list", "aria-hidden": "true", children: [0, 1, 2, 3, 4].map((index) => /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: "ghp-skeleton-row", children: [
|
|
@@ -1518,7 +1474,7 @@ function GitHubPage({ snapshot, actions, t, resolveSession }) {
|
|
|
1518
1474
|
EmptyState,
|
|
1519
1475
|
{
|
|
1520
1476
|
icon: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(GitHubIcon, { size: 28 }),
|
|
1521
|
-
title: noAuth ? t("panel.emptyAuth") : snapshot.list?.notice ??
|
|
1477
|
+
title: noAuth ? t("panel.emptyAuth") : snapshot.list?.notice ?? t("panel.empty")
|
|
1522
1478
|
}
|
|
1523
1479
|
),
|
|
1524
1480
|
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { className: "ghp-list", children: filtered.map((card) => /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
|
|
@@ -1544,16 +1500,6 @@ function GitHubPage({ snapshot, actions, t, resolveSession }) {
|
|
|
1544
1500
|
snapshot.toast !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Toast, { text: t(snapshot.toast), onDismiss: () => actions.clearToast(), dismissLabel: t("panel.close") })
|
|
1545
1501
|
] });
|
|
1546
1502
|
}
|
|
1547
|
-
function emptyTitle(prefs, total, t) {
|
|
1548
|
-
const projectId = prefs.org === void 0 ? void 0 : prefs.projectId;
|
|
1549
|
-
if (projectId !== void 0 && prefs.assignee === "@me") {
|
|
1550
|
-
return t("panel.emptyProjectMe", { count: total ?? 0 });
|
|
1551
|
-
}
|
|
1552
|
-
if (projectId !== void 0 && prefs.state === "open") {
|
|
1553
|
-
return t("panel.emptyProjectOpen");
|
|
1554
|
-
}
|
|
1555
|
-
return t("panel.empty");
|
|
1556
|
-
}
|
|
1557
1503
|
|
|
1558
1504
|
// src/client/views/Settings.tsx
|
|
1559
1505
|
var import_react3 = require("react");
|
|
@@ -1645,18 +1591,6 @@ function GitHubSettings({ snapshot, actions, t }) {
|
|
|
1645
1591
|
/* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "ghs-scopes", children: [
|
|
1646
1592
|
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: "gh-field-label", children: t("settings.scopes") }),
|
|
1647
1593
|
status.scopes.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: "ghp-muted", children: "\u2014" }) : status.scopes.map((scope) => /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Badge, { tone: "neutral", children: scope }, scope))
|
|
1648
|
-
] }),
|
|
1649
|
-
status.missingProjectScope && /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "ghs-warn", role: "note", children: [
|
|
1650
|
-
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { children: t("settings.missingProject") }),
|
|
1651
|
-
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: "ghp-muted", children: t("settings.command") }),
|
|
1652
|
-
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
1653
|
-
CommandBlock,
|
|
1654
|
-
{
|
|
1655
|
-
command: PROJECT_SCOPE_COMMAND,
|
|
1656
|
-
copyLabel: t("settings.copy"),
|
|
1657
|
-
onCopy: () => actions.copyText(PROJECT_SCOPE_COMMAND)
|
|
1658
|
-
}
|
|
1659
|
-
)
|
|
1660
1594
|
] })
|
|
1661
1595
|
] })
|
|
1662
1596
|
] }),
|
|
@@ -2147,6 +2081,8 @@ var en = {
|
|
|
2147
2081
|
"panel.org": "Organization",
|
|
2148
2082
|
"panel.allProjects": "All projects",
|
|
2149
2083
|
"panel.repoFilter": "Repository",
|
|
2084
|
+
"panel.milestoneFilter": "Milestone",
|
|
2085
|
+
"panel.allMilestones": "All milestones",
|
|
2150
2086
|
"panel.comboHint": "{count} in list",
|
|
2151
2087
|
"panel.fork": "fork",
|
|
2152
2088
|
"panel.assignee": "Assignee",
|
|
@@ -2310,6 +2246,8 @@ var zh = {
|
|
|
2310
2246
|
"panel.org": "\u7EC4\u7EC7",
|
|
2311
2247
|
"panel.allProjects": "\u5168\u90E8\u9879\u76EE",
|
|
2312
2248
|
"panel.repoFilter": "\u4ED3\u5E93",
|
|
2249
|
+
"panel.milestoneFilter": "\u91CC\u7A0B\u7891",
|
|
2250
|
+
"panel.allMilestones": "\u5168\u90E8\u91CC\u7A0B\u7891",
|
|
2313
2251
|
"panel.comboHint": "\u5171 {count} \u4E2A",
|
|
2314
2252
|
"panel.fork": "fork",
|
|
2315
2253
|
"panel.assignee": "\u6307\u6D3E",
|
|
@@ -2433,6 +2371,7 @@ var REMOTE_METHODS = [
|
|
|
2433
2371
|
{ method: "orgProjects", parameters: [{ wire: "org" }] },
|
|
2434
2372
|
{ method: "orgRepos", parameters: [{ wire: "org" }] },
|
|
2435
2373
|
{ method: "listIssues", parameters: [{ wire: "request" }] },
|
|
2374
|
+
{ method: "repoMilestones", parameters: [{ wire: "repo" }] },
|
|
2436
2375
|
{ method: "issueDetail", parameters: [{ wire: "repo" }, { wire: "number" }] },
|
|
2437
2376
|
{ method: "issueMentionedPRs", parameters: [{ wire: "repo" }, { wire: "number" }] },
|
|
2438
2377
|
{ method: "loadPrefs", parameters: [] },
|
|
@@ -2575,6 +2514,7 @@ var GitHubStore = class {
|
|
|
2575
2514
|
detailLoading: false,
|
|
2576
2515
|
prefs: DEFAULT_PREFS,
|
|
2577
2516
|
projectsBlocked: false,
|
|
2517
|
+
milestoneOptions: [],
|
|
2578
2518
|
links: [],
|
|
2579
2519
|
linkCards: {}
|
|
2580
2520
|
};
|
|
@@ -2617,17 +2557,16 @@ var GitHubStore = class {
|
|
|
2617
2557
|
remote.status().then((result) => unwrap(result)),
|
|
2618
2558
|
remote.loadPrefs().then((result) => unwrap(result))
|
|
2619
2559
|
]);
|
|
2620
|
-
const sanePrefs = prefs.projectId !== void 0 && prefs.org === void 0 ? { ...prefs, projectId: void 0, repo: prefs.repo } : prefs;
|
|
2621
2560
|
this.update({
|
|
2622
2561
|
status,
|
|
2623
|
-
prefs:
|
|
2562
|
+
prefs: { ...prefs, projectId: void 0 },
|
|
2624
2563
|
projectsBlocked: status.missingProjectScope,
|
|
2625
2564
|
loading: false
|
|
2626
2565
|
});
|
|
2627
|
-
if (
|
|
2628
|
-
void this.loadCatalog();
|
|
2566
|
+
if (prefs.projectId !== void 0) void this.savePrefs({ projectId: null });
|
|
2629
2567
|
void this.loadLinks();
|
|
2630
|
-
|
|
2568
|
+
await this.loadCatalog();
|
|
2569
|
+
await this.ensureScopeSelection();
|
|
2631
2570
|
await this.reloadList();
|
|
2632
2571
|
this.schedulePolling(status.config.pollSeconds);
|
|
2633
2572
|
void this.hydratePinned();
|
|
@@ -2676,13 +2615,21 @@ var GitHubStore = class {
|
|
|
2676
2615
|
after
|
|
2677
2616
|
};
|
|
2678
2617
|
if (prefs.org !== void 0) request.org = prefs.org;
|
|
2679
|
-
if (prefs.org !== void 0 && prefs.projectId !== void 0) request.projectId = prefs.projectId;
|
|
2680
2618
|
if (prefs.repo !== void 0) request.repos = [prefs.repo];
|
|
2619
|
+
if (prefs.milestone !== void 0) {
|
|
2620
|
+
request.milestone = prefs.milestone;
|
|
2621
|
+
const option = this.snapshot.milestoneOptions.find((item) => item.title === prefs.milestone);
|
|
2622
|
+
if (option !== void 0) request.milestoneNumber = option.number;
|
|
2623
|
+
}
|
|
2681
2624
|
return request;
|
|
2682
2625
|
}
|
|
2683
2626
|
/** Fetch the first page of the current cascade. */
|
|
2684
2627
|
async reloadList(quiet = false) {
|
|
2685
2628
|
const seq = ++this.listSeq;
|
|
2629
|
+
if (this.snapshot.prefs.repo === void 0) {
|
|
2630
|
+
this.update({ list: void 0, loading: false, loadingMore: false });
|
|
2631
|
+
return;
|
|
2632
|
+
}
|
|
2686
2633
|
if (!quiet) this.update({ loading: true, error: void 0 });
|
|
2687
2634
|
try {
|
|
2688
2635
|
const remote = await this.api();
|
|
@@ -2706,55 +2653,73 @@ var GitHubStore = class {
|
|
|
2706
2653
|
try {
|
|
2707
2654
|
const remote = await this.api();
|
|
2708
2655
|
const catalog = await remote.catalog().then((result) => unwrap(result));
|
|
2709
|
-
this.update({
|
|
2710
|
-
catalog,
|
|
2711
|
-
projectsBlocked: this.snapshot.status?.missingProjectScope === true || catalog.projectsBlocked
|
|
2712
|
-
});
|
|
2656
|
+
this.update({ catalog });
|
|
2713
2657
|
} catch (error) {
|
|
2714
2658
|
this.update({ error: asPanelError(error) });
|
|
2715
2659
|
}
|
|
2716
2660
|
}
|
|
2717
|
-
/**
|
|
2718
|
-
* Load the projects and repositories of one organization, once per session.
|
|
2719
|
-
* A Projects v2 permission failure degrades to `projectsBlocked` while the
|
|
2720
|
-
* repository list still works.
|
|
2721
|
-
*/
|
|
2661
|
+
/** Load one organization's repositories, once per session. */
|
|
2722
2662
|
async loadOrgScope(org) {
|
|
2723
2663
|
const cached = this.orgScopes.get(org);
|
|
2724
2664
|
if (cached !== void 0) {
|
|
2725
|
-
this.update({
|
|
2726
|
-
orgProjects: cached.projects,
|
|
2727
|
-
orgRepos: cached.repos,
|
|
2728
|
-
projectsBlocked: cached.blocked || this.snapshot.status?.missingProjectScope === true,
|
|
2729
|
-
...cached.error === void 0 ? { projectsError: void 0 } : { projectsError: cached.error }
|
|
2730
|
-
});
|
|
2665
|
+
this.update({ orgRepos: cached.repos, scopeLoading: false });
|
|
2731
2666
|
return;
|
|
2732
2667
|
}
|
|
2733
2668
|
this.update({ scopeLoading: true });
|
|
2734
2669
|
try {
|
|
2735
2670
|
const remote = await this.api();
|
|
2736
|
-
const
|
|
2737
|
-
|
|
2738
|
-
|
|
2739
|
-
]);
|
|
2740
|
-
const scope = {
|
|
2741
|
-
projects: projects.projects,
|
|
2742
|
-
repos,
|
|
2743
|
-
blocked: projects.blocked || this.snapshot.status?.missingProjectScope === true,
|
|
2744
|
-
...projects.error === void 0 ? {} : { error: projects.error }
|
|
2745
|
-
};
|
|
2746
|
-
this.orgScopes.set(org, scope);
|
|
2747
|
-
this.update({
|
|
2748
|
-
orgProjects: scope.projects,
|
|
2749
|
-
orgRepos: scope.repos,
|
|
2750
|
-
projectsBlocked: scope.blocked,
|
|
2751
|
-
...scope.error === void 0 ? { projectsError: void 0 } : { projectsError: scope.error },
|
|
2752
|
-
scopeLoading: false
|
|
2753
|
-
});
|
|
2671
|
+
const repos = await remote.orgRepos(org).then((result) => unwrap(result));
|
|
2672
|
+
this.orgScopes.set(org, { repos });
|
|
2673
|
+
this.update({ orgRepos: repos, scopeLoading: false });
|
|
2754
2674
|
} catch (error) {
|
|
2755
2675
|
this.update({ scopeLoading: false, error: asPanelError(error) });
|
|
2756
2676
|
}
|
|
2757
2677
|
}
|
|
2678
|
+
/**
|
|
2679
|
+
* Choose an organization when none is restored (or the saved one vanished).
|
|
2680
|
+
* @returns completion once its repository page is loaded.
|
|
2681
|
+
*/
|
|
2682
|
+
async ensureOrgSelection() {
|
|
2683
|
+
const orgs = this.snapshot.catalog?.orgs ?? [];
|
|
2684
|
+
if (orgs.length === 0) return;
|
|
2685
|
+
const current = this.snapshot.prefs.org;
|
|
2686
|
+
const chosen = current !== void 0 && orgs.some((org) => org.login === current) ? current : orgs[0]?.login;
|
|
2687
|
+
if (chosen === void 0) return;
|
|
2688
|
+
if (chosen !== current) {
|
|
2689
|
+
this.resetMilestoneOptions();
|
|
2690
|
+
this.update({
|
|
2691
|
+
prefs: { ...this.snapshot.prefs, org: chosen, repo: void 0, milestone: void 0, projectId: void 0 },
|
|
2692
|
+
orgRepos: void 0
|
|
2693
|
+
});
|
|
2694
|
+
await this.savePrefs({ org: chosen, projectId: null, repo: null, milestone: null });
|
|
2695
|
+
}
|
|
2696
|
+
await this.loadOrgScope(chosen);
|
|
2697
|
+
await this.ensureRepoSelection();
|
|
2698
|
+
}
|
|
2699
|
+
/**
|
|
2700
|
+
* Choose a repository when none is restored (or it does not belong to the
|
|
2701
|
+
* organization). The repository picker has no "all repositories" state.
|
|
2702
|
+
* @returns completion once the milestone list is loaded.
|
|
2703
|
+
*/
|
|
2704
|
+
async ensureRepoSelection() {
|
|
2705
|
+
const repos = this.snapshot.orgRepos?.items ?? [];
|
|
2706
|
+
if (repos.length === 0) return;
|
|
2707
|
+
const current = this.snapshot.prefs.repo;
|
|
2708
|
+
const valid = current !== void 0 && repos.some((repo) => repo.nameWithOwner === current);
|
|
2709
|
+
const chosen = valid ? current : repos[0]?.nameWithOwner;
|
|
2710
|
+
if (chosen === void 0) return;
|
|
2711
|
+
if (chosen !== current) {
|
|
2712
|
+
this.resetMilestoneOptions();
|
|
2713
|
+
this.update({ prefs: { ...this.snapshot.prefs, repo: chosen, milestone: void 0 } });
|
|
2714
|
+
await this.savePrefs({ repo: chosen, milestone: null });
|
|
2715
|
+
}
|
|
2716
|
+
await this.loadRepoMilestones(chosen);
|
|
2717
|
+
await this.pruneMilestone(chosen);
|
|
2718
|
+
}
|
|
2719
|
+
/** The default scope selection used by bootstrap. */
|
|
2720
|
+
async ensureScopeSelection() {
|
|
2721
|
+
await this.ensureOrgSelection();
|
|
2722
|
+
}
|
|
2758
2723
|
/** Keep the dock's copy of the pinned issue in sync with the loaded list. */
|
|
2759
2724
|
refreshPinnedCard() {
|
|
2760
2725
|
const pinned = this.snapshot.prefs.pinned;
|
|
@@ -2801,22 +2766,21 @@ var GitHubStore = class {
|
|
|
2801
2766
|
await remote.refresh();
|
|
2802
2767
|
const status = await remote.status().then((result) => unwrap(result));
|
|
2803
2768
|
this.orgScopes.clear();
|
|
2769
|
+
this.resetMilestoneOptions();
|
|
2804
2770
|
this.update({
|
|
2805
2771
|
status,
|
|
2806
2772
|
catalog: void 0,
|
|
2807
|
-
orgProjects: void 0,
|
|
2808
2773
|
orgRepos: void 0,
|
|
2809
|
-
projectsBlocked:
|
|
2774
|
+
projectsBlocked: false,
|
|
2810
2775
|
projectsError: void 0
|
|
2811
2776
|
});
|
|
2812
2777
|
} catch (error) {
|
|
2813
2778
|
this.update({ error: asPanelError(error) });
|
|
2814
2779
|
return;
|
|
2815
2780
|
}
|
|
2816
|
-
|
|
2817
|
-
|
|
2781
|
+
await this.loadCatalog();
|
|
2782
|
+
await this.ensureScopeSelection();
|
|
2818
2783
|
await this.reloadList();
|
|
2819
|
-
void this.loadCatalog();
|
|
2820
2784
|
})();
|
|
2821
2785
|
}
|
|
2822
2786
|
loadMore() {
|
|
@@ -2842,16 +2806,58 @@ var GitHubStore = class {
|
|
|
2842
2806
|
})();
|
|
2843
2807
|
}
|
|
2844
2808
|
setOrg(org) {
|
|
2845
|
-
|
|
2846
|
-
|
|
2847
|
-
|
|
2809
|
+
if (org === this.snapshot.prefs.org) return;
|
|
2810
|
+
this.resetMilestoneOptions();
|
|
2811
|
+
void this.savePrefs({ org, projectId: null, repo: null, milestone: null }, async (saved) => {
|
|
2812
|
+
this.update({ orgRepos: void 0 });
|
|
2813
|
+
if (saved.org !== void 0) {
|
|
2814
|
+
await this.loadOrgScope(saved.org);
|
|
2815
|
+
await this.ensureRepoSelection();
|
|
2816
|
+
}
|
|
2848
2817
|
});
|
|
2849
2818
|
}
|
|
2850
|
-
setProject(projectId) {
|
|
2851
|
-
void this.savePrefs({ projectId: projectId ?? null });
|
|
2852
|
-
}
|
|
2853
2819
|
setRepo(repo) {
|
|
2854
|
-
|
|
2820
|
+
if (repo === this.snapshot.prefs.repo) return;
|
|
2821
|
+
this.resetMilestoneOptions();
|
|
2822
|
+
void this.savePrefs({ repo, milestone: null }, async (saved) => {
|
|
2823
|
+
if (saved.repo !== void 0) {
|
|
2824
|
+
await this.loadRepoMilestones(saved.repo);
|
|
2825
|
+
await this.pruneMilestone(saved.repo);
|
|
2826
|
+
}
|
|
2827
|
+
});
|
|
2828
|
+
}
|
|
2829
|
+
setMilestone(milestone) {
|
|
2830
|
+
void this.savePrefs({ milestone: milestone ?? null });
|
|
2831
|
+
}
|
|
2832
|
+
/** Clear the milestone picker's options for a new scope. */
|
|
2833
|
+
resetMilestoneOptions() {
|
|
2834
|
+
if (this.snapshot.milestoneOptions.length !== 0) this.update({ milestoneOptions: [] });
|
|
2835
|
+
}
|
|
2836
|
+
/** Drop a milestone that the selected repository no longer lists. */
|
|
2837
|
+
async pruneMilestone(repo) {
|
|
2838
|
+
const selected = this.snapshot.prefs.milestone;
|
|
2839
|
+
if (selected === void 0 || this.snapshot.prefs.repo !== repo) return;
|
|
2840
|
+
const options = this.snapshot.milestoneOptions;
|
|
2841
|
+
if (options.length === 0) return;
|
|
2842
|
+
if (options.some((option) => option.title === selected)) return;
|
|
2843
|
+
await this.savePrefs({ milestone: null });
|
|
2844
|
+
}
|
|
2845
|
+
/** Seed the picker from the selected repository's full milestone list. */
|
|
2846
|
+
async loadRepoMilestones(repo) {
|
|
2847
|
+
try {
|
|
2848
|
+
const remote = await this.api();
|
|
2849
|
+
const result = await remote.repoMilestones(repo).then((response) => unwrap(response));
|
|
2850
|
+
if (this.snapshot.prefs.repo !== repo) return;
|
|
2851
|
+
const options = [...this.snapshot.milestoneOptions];
|
|
2852
|
+
const seen = new Set(options.map((option) => option.title));
|
|
2853
|
+
for (const option of result.milestones) {
|
|
2854
|
+
if (option.title === "" || seen.has(option.title)) continue;
|
|
2855
|
+
seen.add(option.title);
|
|
2856
|
+
options.push(option);
|
|
2857
|
+
}
|
|
2858
|
+
this.update({ milestoneOptions: options });
|
|
2859
|
+
} catch {
|
|
2860
|
+
}
|
|
2855
2861
|
}
|
|
2856
2862
|
setAssignee(assignee) {
|
|
2857
2863
|
void this.savePrefs({ assignee });
|
|
@@ -2890,7 +2896,7 @@ var GitHubStore = class {
|
|
|
2890
2896
|
try {
|
|
2891
2897
|
const remote = await this.api();
|
|
2892
2898
|
const saved = await remote.savePrefs(patch).then((result) => unwrap(result));
|
|
2893
|
-
const affectsList = ["org", "
|
|
2899
|
+
const affectsList = ["org", "repo", "assignee", "state", "milestone"].some((key) => key in patch);
|
|
2894
2900
|
this.update({ prefs: saved });
|
|
2895
2901
|
if (affectsList) {
|
|
2896
2902
|
await this.reloadList();
|
package/lib/controller.js
CHANGED
|
@@ -95,6 +95,7 @@ let GitHubIssuesController = (() => {
|
|
|
95
95
|
let _orgProjects_decorators;
|
|
96
96
|
let _orgRepos_decorators;
|
|
97
97
|
let _issueDetail_decorators;
|
|
98
|
+
let _repoMilestones_decorators;
|
|
98
99
|
let _issueMentionedPRs_decorators;
|
|
99
100
|
let _links_decorators;
|
|
100
101
|
let _linkIssue_decorators;
|
|
@@ -111,6 +112,7 @@ let GitHubIssuesController = (() => {
|
|
|
111
112
|
_orgProjects_decorators = [Remote];
|
|
112
113
|
_orgRepos_decorators = [Remote];
|
|
113
114
|
_issueDetail_decorators = [Remote];
|
|
115
|
+
_repoMilestones_decorators = [Remote];
|
|
114
116
|
_issueMentionedPRs_decorators = [Remote];
|
|
115
117
|
_links_decorators = [Remote];
|
|
116
118
|
_linkIssue_decorators = [Remote];
|
|
@@ -124,6 +126,7 @@ let GitHubIssuesController = (() => {
|
|
|
124
126
|
__esDecorate(this, null, _orgProjects_decorators, { kind: "method", name: "orgProjects", static: false, private: false, access: { has: obj => "orgProjects" in obj, get: obj => obj.orgProjects }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
125
127
|
__esDecorate(this, null, _orgRepos_decorators, { kind: "method", name: "orgRepos", static: false, private: false, access: { has: obj => "orgRepos" in obj, get: obj => obj.orgRepos }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
126
128
|
__esDecorate(this, null, _issueDetail_decorators, { kind: "method", name: "issueDetail", static: false, private: false, access: { has: obj => "issueDetail" in obj, get: obj => obj.issueDetail }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
129
|
+
__esDecorate(this, null, _repoMilestones_decorators, { kind: "method", name: "repoMilestones", static: false, private: false, access: { has: obj => "repoMilestones" in obj, get: obj => obj.repoMilestones }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
127
130
|
__esDecorate(this, null, _issueMentionedPRs_decorators, { kind: "method", name: "issueMentionedPRs", static: false, private: false, access: { has: obj => "issueMentionedPRs" in obj, get: obj => obj.issueMentionedPRs }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
128
131
|
__esDecorate(this, null, _links_decorators, { kind: "method", name: "links", static: false, private: false, access: { has: obj => "links" in obj, get: obj => obj.links }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
129
132
|
__esDecorate(this, null, _linkIssue_decorators, { kind: "method", name: "linkIssue", static: false, private: false, access: { has: obj => "linkIssue" in obj, get: obj => obj.linkIssue }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
@@ -246,6 +249,10 @@ let GitHubIssuesController = (() => {
|
|
|
246
249
|
async issueDetail(repo, number) {
|
|
247
250
|
return this.withApi(api => api.issueDetail(repo, number));
|
|
248
251
|
}
|
|
252
|
+
/** One repository's milestones, for the picker and its list filter. */
|
|
253
|
+
async repoMilestones(repo) {
|
|
254
|
+
return this.withApi(api => api.repoMilestones(repo));
|
|
255
|
+
}
|
|
249
256
|
/** The issue's cross-referenced pull requests; fetched after the detail shows. */
|
|
250
257
|
async issueMentionedPRs(repo, number) {
|
|
251
258
|
return this.withApi(api => api.issueMentionedPRs(repo, number));
|
package/lib/controller.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controller.js","sourceRoot":"","sources":["../src/controller.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"controller.js","sourceRoot":"","sources":["../src/controller.ts"],"names":[],"mappings":"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"}
|