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/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
- { value: "", label: t("panel.allOrgs") },
1373
- ...orgs.map((org) => ({ value: org.login, label: org.name === void 0 ? org.login : `${org.login} \xB7 ${org.name}` }))
1374
- ];
1375
- const projectOptions = [
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.projectId === void 0 ? "" : ` \xB7 ${t("panel.project")}`}${prefs.repo === void 0 ? "" : ` \xB7 ${prefs.repo}`}`;
1397
- return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("section", { className: "ghp-page", style: PAGE_ROOT_STYLE, "data-github-panel": true, "aria-label": t("panel"), children: [
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", style: PAGE_CONTENT_STYLE, children: [
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
- onChange: (value) => actions.setOrg(value === "" ? void 0 : value)
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.project"), children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
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.project"),
1431
- value: prefs.org === void 0 ? "" : prefs.projectId ?? "",
1432
- options: projectOptions,
1433
- disabled: prefs.org === void 0 || snapshot.projectsBlocked,
1434
- onChange: (value) => actions.setProject(value === "" ? void 0 : value)
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.repoFilter"), children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
1438
- ScopeCombo,
1413
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Field, { label: t("panel.milestoneFilter"), children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
1414
+ Select,
1439
1415
  {
1440
- label: t("panel.repoFilter"),
1441
- value: prefs.repo,
1442
- placeholder: prefs.org === void 0 ? t("panel.allRepos") : `${t("panel.allRepos")}\uFF08${String(repoOptions.length)}\uFF09`,
1443
- options: repoOptions,
1444
- onChange: (repo) => actions.setRepo(repo)
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 ?? emptyTitle(prefs, snapshot.list?.totalCount, t)
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: sanePrefs,
2562
+ prefs: { ...prefs, projectId: void 0 },
2624
2563
  projectsBlocked: status.missingProjectScope,
2625
2564
  loading: false
2626
2565
  });
2627
- if (sanePrefs !== prefs) void this.savePrefs({ projectId: null });
2628
- void this.loadCatalog();
2566
+ if (prefs.projectId !== void 0) void this.savePrefs({ projectId: null });
2629
2567
  void this.loadLinks();
2630
- if (prefs.org !== void 0) void this.loadOrgScope(prefs.org);
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 [projects, repos] = await Promise.all([
2737
- remote.orgProjects(org).then((result) => unwrap(result)),
2738
- remote.orgRepos(org).then((result) => unwrap(result))
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: status.missingProjectScope,
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
- const org = this.snapshot.prefs.org;
2817
- if (org !== void 0) void this.loadOrgScope(org);
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
- void this.savePrefs({ org: org ?? null, projectId: null, repo: null }, async (saved) => {
2846
- this.update({ orgProjects: void 0, orgRepos: void 0 });
2847
- if (saved.org !== void 0) await this.loadOrgScope(saved.org);
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
- void this.savePrefs({ repo: repo ?? null });
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", "projectId", "repo", "assignee", "state"].some((key) => key in patch);
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));
@@ -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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"}