@parallelworks/tandem-web 0.142.0 → 0.143.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/_virtual/_virtual_i18n/en/common.js +105 -6
- package/_virtual/_virtual_i18n/es/common.js +105 -6
- package/_virtual/_virtual_i18n/ja/common.js +105 -6
- package/_virtual/_virtual_i18n/ko/common.js +105 -6
- package/_virtual/_virtual_i18n/zh/common.js +105 -6
- package/components/AccessGrants.js +6 -6
- package/components/ActivityTimeline.js +2 -0
- package/components/CodeHostSettings.js +25 -25
- package/components/CustomFields.js +349 -0
- package/components/DocProperties.js +8 -2
- package/components/GitHub.js +22 -22
- package/components/IssueBoard.js +48 -43
- package/components/IssueEvent.js +2 -0
- package/components/IssueFilters.js +210 -122
- package/components/IssueImport.js +1 -1
- package/components/IssueRow.js +96 -79
- package/components/IssueTemplates.js +216 -156
- package/components/IssueTypes.js +318 -0
- package/components/NewIssueDialog.js +254 -216
- package/components/SettingsNav.js +40 -35
- package/components/TeamForm.js +49 -35
- package/components/TeamRepositories.js +51 -51
- package/components/TeamWorkflow.js +8 -8
- package/components/Updates.js +8 -8
- package/lib/boardMove.js +69 -47
- package/lib/customFields.js +113 -0
- package/lib/issueDisplay.js +27 -12
- package/lib/issueList.js +166 -62
- package/lib/issueTypes.js +50 -0
- package/lib/teamTree.js +24 -0
- package/lib/views.js +13 -11
- package/package.json +1 -1
- package/pages/issues.js +331 -291
- package/routeTree.gen.js +151 -145
- package/routes/_workspace/agents/index2.js +9 -9
- package/routes/_workspace/issues/_identifier2.js +433 -370
- package/routes/_workspace/projects/_projectId3.js +213 -201
- package/routes/_workspace/settings/audit-log3.js +2 -0
- package/routes/_workspace/settings/fields.js +6 -0
- package/routes/_workspace/settings/fields2.js +30 -0
- package/routes/_workspace/settings/fields3.js +5 -0
- package/routes/_workspace/settings/groups2.js +74 -74
- package/routes/_workspace/settings/labels2.js +33 -33
- package/routes/_workspace/settings/members2.js +35 -35
- package/routes/_workspace/settings/roles2.js +24 -24
- package/routes/_workspace/settings/runners2.js +18 -18
- package/routes/_workspace/settings/sessions2.js +9 -9
- package/routes/_workspace/settings/slack2.js +8 -8
- package/routes/_workspace/settings/sso2.js +50 -50
- package/routes/_workspace/settings/tokens2.js +15 -15
- package/routes/_workspace/settings/webhooks2.js +42 -42
- package/routes/_workspace/teams/_key/settings2.js +138 -76
- package/routes/_workspace2.js +320 -318
package/pages/issues.js
CHANGED
|
@@ -2,174 +2,187 @@ import { basePath as e } from "../lib/base.js";
|
|
|
2
2
|
import { ErrorMessage as t } from "../components/status.js";
|
|
3
3
|
import { usePageTitle as n } from "../lib/pageTitle.js";
|
|
4
4
|
import { useNavigate as r } from "../lib/router.js";
|
|
5
|
-
import { cyclesQuery as i, issuesQuery as
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
22
|
-
import {
|
|
23
|
-
import {
|
|
24
|
-
import {
|
|
25
|
-
import {
|
|
26
|
-
import {
|
|
27
|
-
import {
|
|
28
|
-
import {
|
|
29
|
-
import {
|
|
30
|
-
import {
|
|
31
|
-
import {
|
|
32
|
-
import {
|
|
33
|
-
import {
|
|
34
|
-
import {
|
|
35
|
-
import {
|
|
36
|
-
import {
|
|
37
|
-
import {
|
|
5
|
+
import { cyclesQuery as i, issuesQuery as ee, labelsQuery as te, meQuery as ne, projectsQuery as re, statusesQuery as ie, teamsQuery as ae } from "../api/queries.js";
|
|
6
|
+
import { customFieldsQuery as oe, fieldRef as se, fieldsForTeams as ce, groupableKinds as le, sortableKinds as ue } from "../lib/customFields.js";
|
|
7
|
+
import { issueTypesQuery as de } from "../lib/issueTypes.js";
|
|
8
|
+
import { BoardIcon as fe, ChartIcon as pe, CloseIcon as me, DownloadIcon as he, ListViewIcon as ge, SidePanelIcon as _e, UploadIcon as ve, usePriorityNames as ye } from "../components/icons.js";
|
|
9
|
+
import { isViewAt as be, viewRef as xe } from "../lib/refs.js";
|
|
10
|
+
import { groupIssues as Se, groupings as Ce, isGrouping as we, isOrder as Te, issueFilterOf as Ee, orders as De, sortIssues as Oe, views as ke } from "../lib/issueList.js";
|
|
11
|
+
import { issuesHref as Ae } from "../lib/teamPaths.js";
|
|
12
|
+
import { usePeople as je } from "../lib/people.js";
|
|
13
|
+
import { useIssueMenu as Me } from "../lib/issueMenu.js";
|
|
14
|
+
import { useNewIssue as Ne } from "../lib/newIssue.js";
|
|
15
|
+
import { usePaletteSelection as Pe } from "../lib/palette.js";
|
|
16
|
+
import { useCan as Fe } from "../lib/roles.js";
|
|
17
|
+
import { ViewDialog as Ie } from "../components/ViewDialog.js";
|
|
18
|
+
import { filtersOf as Le, sameFilters as Re, useSavedViews as ze, viewSearch as Be } from "../lib/views.js";
|
|
19
|
+
import { projectRef as Ve } from "../lib/projects.js";
|
|
20
|
+
import { useBoardMove as He } from "../lib/boardMove.js";
|
|
21
|
+
import { IssueBoard as Ue } from "../components/IssueBoard.js";
|
|
22
|
+
import { useIssueFilters as We, withIssueFilters as Ge } from "../components/IssueFilters.js";
|
|
23
|
+
import { IssueRow as Ke } from "../components/IssueRow.js";
|
|
24
|
+
import { useLive as qe } from "../lib/live.js";
|
|
25
|
+
import { useShortcuts as Je } from "../lib/shortcuts.js";
|
|
26
|
+
import { FavoriteStar as Ye } from "../components/FavoriteStar.js";
|
|
27
|
+
import { DisplayMenu as Xe } from "../components/DisplayMenu.js";
|
|
28
|
+
import { IssueBreakdown as Ze, breakdownKeys as Qe } from "../components/IssueBreakdown.js";
|
|
29
|
+
import { IssueImport as $e, pickCsv as et } from "../components/IssueImport.js";
|
|
30
|
+
import { IssueInsights as tt } from "../components/IssueInsights.js";
|
|
31
|
+
import { IssueSection as nt } from "../components/IssueSection.js";
|
|
32
|
+
import { insightsKey as rt, listTabs as it, panelKey as at, shownFields as ot, storeDisplay as a, storeShownFields as st, storedDisplay as ct, withParam as o } from "../lib/issueDisplay.js";
|
|
33
|
+
import { ActionMenu as lt, Button as s, Field as ut, IconButton as c, SearchInput as dt, Select as ft, Tabs as pt, useOpenMenu as mt } from "@parallelworks/ui";
|
|
34
|
+
import { useParams as ht, useSearch as gt } from "@tanstack/react-router";
|
|
35
|
+
import { useEffect as l, useMemo as u, useRef as d, useState as f } from "react";
|
|
36
|
+
import { useTranslations as p } from "use-intl";
|
|
37
|
+
import { Fragment as _t, jsx as m, jsxs as h } from "react/jsx-runtime";
|
|
38
|
+
import { keepPreviousData as vt, useQuery as g, useSuspenseQuery as yt } from "@tanstack/react-query";
|
|
39
|
+
import { ListFilterBar as bt, ListFilterMenu as xt, ListSkeleton as St } from "@parallelworks/ui/list";
|
|
38
40
|
// src/pages/issues.tsx
|
|
39
|
-
function
|
|
41
|
+
function Ct(e) {
|
|
40
42
|
let { assignee: t, creator: n, ...r } = e;
|
|
41
43
|
return n ? {
|
|
42
44
|
...r,
|
|
43
45
|
creator: n
|
|
44
46
|
} : r;
|
|
45
47
|
}
|
|
46
|
-
function
|
|
47
|
-
let
|
|
48
|
-
...
|
|
49
|
-
team:
|
|
50
|
-
} : e ?
|
|
51
|
-
...
|
|
48
|
+
function _({ person: e } = {}) {
|
|
49
|
+
let _ = p("issues"), Et = p("planning"), { workspace: v, key: y } = ht({ strict: !1 }), b = gt({ strict: !1 }), x = y ? {
|
|
50
|
+
...b,
|
|
51
|
+
team: y
|
|
52
|
+
} : e ? b.creator ? {
|
|
53
|
+
...Ct(b),
|
|
52
54
|
creator: e
|
|
53
55
|
} : {
|
|
54
|
-
...
|
|
56
|
+
...b,
|
|
55
57
|
assignee: e
|
|
56
|
-
} :
|
|
58
|
+
} : b, Dt = r(), Ot = (t) => e ? Ae(v, { ...Ct(t) }).replace(`/${v}/issues`, `/${v}/people/${encodeURIComponent(e)}`) : Ae(v, { ...t }), S = (t, n) => {
|
|
57
59
|
let { team: r, ...i } = t;
|
|
58
|
-
return
|
|
60
|
+
return Dt(e ? {
|
|
59
61
|
to: "/$workspace/people/$username",
|
|
60
62
|
params: {
|
|
61
|
-
workspace:
|
|
63
|
+
workspace: v,
|
|
62
64
|
username: e
|
|
63
65
|
},
|
|
64
|
-
search:
|
|
66
|
+
search: Ct(i),
|
|
65
67
|
...n && { replace: n }
|
|
66
68
|
} : r ? {
|
|
67
69
|
to: "/$workspace/teams/$key/issues",
|
|
68
70
|
params: {
|
|
69
|
-
workspace:
|
|
71
|
+
workspace: v,
|
|
70
72
|
key: r
|
|
71
73
|
},
|
|
72
74
|
search: i,
|
|
73
75
|
...n && { replace: n }
|
|
74
76
|
} : {
|
|
75
77
|
to: "/$workspace/issues",
|
|
76
|
-
params: { workspace:
|
|
78
|
+
params: { workspace: v },
|
|
77
79
|
search: i,
|
|
78
80
|
...n && { replace: n }
|
|
79
81
|
});
|
|
80
|
-
},
|
|
81
|
-
|
|
82
|
-
let
|
|
83
|
-
|
|
84
|
-
let { data:
|
|
85
|
-
|
|
82
|
+
}, kt = d((e) => S(e, !0));
|
|
83
|
+
kt.current = (e) => S(e, !0);
|
|
84
|
+
let At = d((e) => S(o(x, "q", e), !0));
|
|
85
|
+
At.current = (e) => S(o(x, "q", e), !0);
|
|
86
|
+
let { data: C } = yt(ne), { data: w } = yt(ae(v)), jt = Ne(), T = x.view ?? "active", [E, Mt] = f(x.q ?? ""), D = d(null);
|
|
87
|
+
l(() => {
|
|
86
88
|
let e = setTimeout(() => {
|
|
87
|
-
(
|
|
89
|
+
(x.q ?? "") !== E && At.current(E);
|
|
88
90
|
}, 250);
|
|
89
91
|
return () => clearTimeout(e);
|
|
90
|
-
}, [
|
|
91
|
-
let { data:
|
|
92
|
-
...
|
|
93
|
-
enabled: !!
|
|
94
|
-
}),
|
|
95
|
-
...
|
|
96
|
-
placeholderData:
|
|
97
|
-
enabled: !
|
|
98
|
-
}),
|
|
92
|
+
}, [E, x.q]);
|
|
93
|
+
let { data: Nt } = g({
|
|
94
|
+
...ie(v, x.team ?? ""),
|
|
95
|
+
enabled: !!x.status && !!x.team
|
|
96
|
+
}), Pt = Ee(x, Nt), { data: O, error: Ft, isFetching: It } = g({
|
|
97
|
+
...ee(v, Pt),
|
|
98
|
+
placeholderData: vt,
|
|
99
|
+
enabled: !x.status || !x.team || !!Nt
|
|
100
|
+
}), k = O?.issues ?? [], Lt = ye(), { nameOf: Rt, avatarOf: zt } = je(v), A = x.saved ? {} : ct(), { data: Bt } = g(oe(v)), j = w.find((e) => e.key === x.team), M = u(() => ce(Bt, j ? [j.id] : w.map((e) => e.id)), [
|
|
101
|
+
Bt,
|
|
102
|
+
j,
|
|
103
|
+
w
|
|
104
|
+
]), N = p("customFields"), Vt = p("issueTypes"), { data: Ht } = g(de(v)), Ut = u(() => (Ht ?? []).filter((e) => !e.archivedAt && (!j || e.teamIds.length === 0 || e.teamIds.includes(j.id))), [Ht, j]), P = Te(x.order, M) ? x.order : Te(A.order, M) ? A.order : "updated", F = we(x.group, M) ? x.group : we(A.group, M) ? A.group : "status", Wt = M.find((e) => e.id === se(F)), [Gt, Kt] = f(() => ot(v)), qt = M.filter((e) => Gt.includes(e.id)), I = x.layout === "board" || !x.layout && A.layout === "board", [Jt, Yt] = f(() => {
|
|
99
105
|
try {
|
|
100
|
-
return localStorage.getItem(
|
|
106
|
+
return localStorage.getItem(at) !== "hidden";
|
|
101
107
|
} catch {
|
|
102
108
|
return !0;
|
|
103
109
|
}
|
|
104
|
-
}),
|
|
110
|
+
}), Xt = () => Yt((e) => {
|
|
105
111
|
try {
|
|
106
|
-
localStorage.setItem(
|
|
112
|
+
localStorage.setItem(at, e ? "hidden" : "shown");
|
|
107
113
|
} catch {}
|
|
108
114
|
return !e;
|
|
109
|
-
}), [
|
|
115
|
+
}), [Zt, Qt] = f(() => {
|
|
110
116
|
try {
|
|
111
|
-
return localStorage.getItem(
|
|
117
|
+
return localStorage.getItem(rt) === "shown";
|
|
112
118
|
} catch {
|
|
113
119
|
return !1;
|
|
114
120
|
}
|
|
115
|
-
}),
|
|
121
|
+
}), $t = () => Qt((e) => {
|
|
116
122
|
try {
|
|
117
|
-
localStorage.setItem(
|
|
123
|
+
localStorage.setItem(rt, e ? "hidden" : "shown");
|
|
118
124
|
} catch {}
|
|
119
125
|
return !e;
|
|
120
|
-
}), [
|
|
121
|
-
status: (e) =>
|
|
122
|
-
priority: (e) =>
|
|
123
|
-
person:
|
|
124
|
-
avatar:
|
|
126
|
+
}), [en, tn] = f("assignees"), [L, nn] = f(null), R = L ? k.filter((e) => Qe(e, L.tab).includes(L.key)) : k, z = u(() => Se(Oe(R, P, M), F, {
|
|
127
|
+
status: (e) => _(`groups.${e}`),
|
|
128
|
+
priority: (e) => Lt[e] ?? "",
|
|
129
|
+
person: Rt,
|
|
130
|
+
avatar: zt,
|
|
125
131
|
none: {
|
|
126
|
-
assignee:
|
|
127
|
-
project:
|
|
128
|
-
label:
|
|
129
|
-
all:
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
+
assignee: _("noAssignee"),
|
|
133
|
+
project: _("noProject"),
|
|
134
|
+
label: _("noLabel"),
|
|
135
|
+
all: _("all")
|
|
136
|
+
},
|
|
137
|
+
noField: (e) => N("noField", { name: e }),
|
|
138
|
+
yes: N("yes"),
|
|
139
|
+
noType: Vt("noType")
|
|
140
|
+
}, I, M, Ut), [
|
|
132
141
|
R,
|
|
133
142
|
P,
|
|
134
143
|
F,
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
144
|
+
_,
|
|
145
|
+
N,
|
|
146
|
+
Vt,
|
|
147
|
+
Lt,
|
|
148
|
+
Rt,
|
|
149
|
+
zt,
|
|
150
|
+
I,
|
|
151
|
+
M,
|
|
152
|
+
Ut
|
|
153
|
+
]), B = u(() => z.flatMap((e) => e.issues), [z]), [rn, an] = f(0), V = B[Math.min(rn, B.length - 1)], [H, U] = f(/* @__PURE__ */ new Set()), W = d(null), on = Me(v), sn = He(v, w), { people: cn } = qe(), ln = u(() => {
|
|
141
154
|
let e = /* @__PURE__ */ new Map();
|
|
142
|
-
for (let t of
|
|
143
|
-
if (!t.identifier || t.username ===
|
|
155
|
+
for (let t of cn) {
|
|
156
|
+
if (!t.identifier || t.username === C?.user.username) continue;
|
|
144
157
|
let n = e.get(t.identifier) ?? /* @__PURE__ */ new Set();
|
|
145
158
|
n.add(t.username), e.set(t.identifier, n);
|
|
146
159
|
}
|
|
147
160
|
return e;
|
|
148
|
-
}, [
|
|
149
|
-
|
|
150
|
-
let
|
|
161
|
+
}, [cn, C?.user.username]), un = mt(), dn = u(() => B.filter((e) => H.has(e.id)), [B, H]);
|
|
162
|
+
Pe(dn);
|
|
163
|
+
let fn = (e) => U((t) => {
|
|
151
164
|
let n = new Set(t);
|
|
152
165
|
return n.has(e) ? n.delete(e) : n.add(e), n;
|
|
153
|
-
}),
|
|
154
|
-
(W.current === null || H.size === 0) && (W.current = Math.max(
|
|
166
|
+
}), pn = (e) => {
|
|
167
|
+
(W.current === null || H.size === 0) && (W.current = Math.max(rn, 0));
|
|
155
168
|
let t = W.current, [n, r] = t < e ? [t, e] : [e, t];
|
|
156
169
|
U(new Set(B.slice(n, r + 1).map((e) => e.id)));
|
|
157
|
-
},
|
|
170
|
+
}, mn = (e, t) => {
|
|
158
171
|
let n = B[e];
|
|
159
172
|
if (n) {
|
|
160
|
-
if (t) return
|
|
161
|
-
|
|
173
|
+
if (t) return pn(e);
|
|
174
|
+
fn(n.id), W.current = e;
|
|
162
175
|
}
|
|
163
|
-
},
|
|
164
|
-
(e.metaKey || e.ctrlKey || e.shiftKey) && (e.preventDefault(),
|
|
176
|
+
}, hn = (e, t) => {
|
|
177
|
+
(e.metaKey || e.ctrlKey || e.shiftKey) && (e.preventDefault(), mn(t, e.shiftKey));
|
|
165
178
|
}, G = (e, t) => {
|
|
166
|
-
let n = Math.min(Math.max(
|
|
167
|
-
t &&
|
|
168
|
-
},
|
|
179
|
+
let n = Math.min(Math.max(rn + e, 0), B.length - 1);
|
|
180
|
+
t && pn(n), an(n);
|
|
181
|
+
}, gn = (e, t) => {
|
|
169
182
|
let n = H.has(t.id) ? B.filter((e) => H.has(e.id)) : [t];
|
|
170
|
-
H.has(t.id) || U(/* @__PURE__ */ new Set()),
|
|
183
|
+
H.has(t.id) || U(/* @__PURE__ */ new Set()), un(e, on(n));
|
|
171
184
|
};
|
|
172
|
-
|
|
185
|
+
Je({
|
|
173
186
|
...!I && {
|
|
174
187
|
j: () => G(1, !1),
|
|
175
188
|
k: () => G(-1, !1),
|
|
@@ -177,200 +190,226 @@ function b({ person: e } = {}) {
|
|
|
177
190
|
K: () => G(-1, !0),
|
|
178
191
|
ArrowDown: (e) => G(1, e.shiftKey),
|
|
179
192
|
ArrowUp: (e) => G(-1, e.shiftKey),
|
|
180
|
-
x: () => V &&
|
|
181
|
-
Enter: () => V &&
|
|
193
|
+
x: () => V && mn(B.indexOf(V), !1),
|
|
194
|
+
Enter: () => V && Dt({
|
|
182
195
|
to: "/$workspace/issues/$identifier",
|
|
183
196
|
params: {
|
|
184
|
-
workspace:
|
|
197
|
+
workspace: v,
|
|
185
198
|
identifier: V.identifier
|
|
186
199
|
}
|
|
187
200
|
})
|
|
188
201
|
},
|
|
189
202
|
Escape: () => U(/* @__PURE__ */ new Set()),
|
|
190
|
-
"/": () =>
|
|
191
|
-
}),
|
|
203
|
+
"/": () => D.current?.focus()
|
|
204
|
+
}), l(() => {
|
|
192
205
|
let e = (e) => {
|
|
193
|
-
(e.metaKey || e.ctrlKey) && !e.altKey && !e.shiftKey && e.key.toLowerCase() === "f" && (e.preventDefault(),
|
|
206
|
+
(e.metaKey || e.ctrlKey) && !e.altKey && !e.shiftKey && e.key.toLowerCase() === "f" && (e.preventDefault(), D.current?.focus(), D.current?.select());
|
|
194
207
|
};
|
|
195
208
|
return window.addEventListener("keydown", e), () => window.removeEventListener("keydown", e);
|
|
196
|
-
}, []),
|
|
209
|
+
}, []), l(() => {
|
|
197
210
|
document.getElementById(`row-${V?.id}`)?.scrollIntoView({ block: "nearest" });
|
|
198
211
|
}, [V]);
|
|
199
|
-
let K =
|
|
200
|
-
...i(
|
|
212
|
+
let K = w.find((e) => e.key === x.team), q = We(v, x, (e) => S(Ge(x, e), !0), !!y && !x.assignee && !x.creator && !x.saved), _n = Ae(v, { ...o(x, "q", void 0) }), { views: vn, create: yn, update: bn } = ze(v), J = vn.find((e) => be(e, x.saved)), { data: xn } = g(te(v)), { data: Sn } = g(re(v)), { data: Cn } = g({
|
|
213
|
+
...i(v, K?.key ?? ""),
|
|
201
214
|
enabled: !!K
|
|
202
215
|
});
|
|
203
|
-
|
|
204
|
-
let e = /^[0-9a-f]{8}-[0-9a-f]{4}-/i, t = { ...
|
|
205
|
-
|
|
206
|
-
let r =
|
|
207
|
-
|
|
208
|
-
let i =
|
|
209
|
-
|
|
216
|
+
l(() => {
|
|
217
|
+
let e = /^[0-9a-f]{8}-[0-9a-f]{4}-/i, t = { ...x }, n = xn?.find((e) => e.id === x.label);
|
|
218
|
+
x.label && e.test(x.label) && n && (t.label = n.name);
|
|
219
|
+
let r = Sn?.find((e) => e.id === x.project);
|
|
220
|
+
x.project && e.test(x.project) && r && (t.project = Ve(r));
|
|
221
|
+
let i = Cn?.find((e) => e.id === x.cycle);
|
|
222
|
+
x.cycle && e.test(x.cycle) && i && (t.cycle = String(i.number)), x.saved && e.test(x.saved) && J && (t.saved = xe(J)), JSON.stringify(t) !== JSON.stringify(x) && kt.current(t);
|
|
210
223
|
}, [
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
224
|
+
x,
|
|
225
|
+
xn,
|
|
226
|
+
Sn,
|
|
227
|
+
Cn,
|
|
215
228
|
J
|
|
216
229
|
]);
|
|
217
|
-
let Y =
|
|
218
|
-
...
|
|
230
|
+
let Y = Le({
|
|
231
|
+
...x,
|
|
219
232
|
...P !== "updated" && { order: P },
|
|
220
233
|
...F !== "status" && { group: F },
|
|
221
234
|
...I && { layout: "board" }
|
|
222
|
-
}),
|
|
223
|
-
n(...K && !J ? [
|
|
224
|
-
let
|
|
235
|
+
}), wn = J ? !Re(J.filters, Y) : Object.keys(Y).length > 0, Tn = Fe(v, "create_issues", x.team ? { team: x.team } : void 0), En = Fe(v, "save_views"), [Dn, On] = f(!1), [kn, An] = f(null), X = p("savedViews"), Z = C?.user.username, jn = !J && !K && (!x.assigneeKind && x.assignee === Z && !x.creator || x.creator === Z && !x.assignee), Q = e ?? (jn ? Z : void 0), $ = J?.name ?? K?.name ?? (e && e !== Z ? _("personIssues", { name: Rt("user", e) }) : !x.assigneeKind && x.assignee === Z || x.creator === Z ? _("mine") : _("all")), Mn = p("workspace");
|
|
236
|
+
n(...K && !J ? [Mn("issues"), K.name] : [$]);
|
|
237
|
+
let Nn = wn && /* @__PURE__ */ h(_t, { children: [J?.canEdit && /* @__PURE__ */ m(s, {
|
|
225
238
|
type: "button",
|
|
226
239
|
size: "sm",
|
|
227
|
-
loading:
|
|
228
|
-
onClick: () =>
|
|
240
|
+
loading: bn.isPending,
|
|
241
|
+
onClick: () => bn.mutate({
|
|
229
242
|
id: J.id,
|
|
230
243
|
filters: Y
|
|
231
244
|
}),
|
|
232
245
|
children: X("update")
|
|
233
|
-
}), /* @__PURE__ */
|
|
246
|
+
}), /* @__PURE__ */ m(s, {
|
|
234
247
|
type: "button",
|
|
235
248
|
size: "sm",
|
|
236
|
-
onClick: () =>
|
|
249
|
+
onClick: () => On(!0),
|
|
237
250
|
children: X(J ? "saveAsNew" : "save")
|
|
238
251
|
})] });
|
|
239
|
-
return /* @__PURE__ */
|
|
252
|
+
return /* @__PURE__ */ h("div", {
|
|
240
253
|
className: "flex h-full flex-col",
|
|
241
254
|
children: [
|
|
242
|
-
/* @__PURE__ */
|
|
255
|
+
/* @__PURE__ */ h("header", {
|
|
243
256
|
className: "flex min-h-12 shrink-0 flex-wrap items-center gap-x-3 gap-y-2 border-b border-border px-4 py-2 md:px-5",
|
|
244
257
|
children: [
|
|
245
|
-
/* @__PURE__ */
|
|
258
|
+
/* @__PURE__ */ m("h1", {
|
|
246
259
|
className: "text-sm font-semibold whitespace-nowrap",
|
|
247
260
|
children: $
|
|
248
261
|
}),
|
|
249
|
-
/* @__PURE__ */
|
|
250
|
-
workspace:
|
|
262
|
+
/* @__PURE__ */ m(Ye, {
|
|
263
|
+
workspace: v,
|
|
251
264
|
kind: "view",
|
|
252
|
-
target:
|
|
253
|
-
label:
|
|
265
|
+
target: _n,
|
|
266
|
+
label: T === "active" ? $ : _("favoriteLabel", {
|
|
254
267
|
title: $,
|
|
255
|
-
view:
|
|
268
|
+
view: _(`views.${T}`)
|
|
256
269
|
})
|
|
257
270
|
}),
|
|
258
|
-
Q && /* @__PURE__ */
|
|
271
|
+
Q && /* @__PURE__ */ m(pt, {
|
|
259
272
|
variant: "segmented",
|
|
260
273
|
size: "sm",
|
|
261
|
-
label:
|
|
274
|
+
label: _("mineScope"),
|
|
262
275
|
items: ["assigned", "created"].map((e) => ({
|
|
263
276
|
value: e,
|
|
264
|
-
label:
|
|
265
|
-
href:
|
|
266
|
-
...
|
|
277
|
+
label: _(`mineScopes.${e}`),
|
|
278
|
+
href: Ot({
|
|
279
|
+
...x.view && { view: x.view },
|
|
267
280
|
...e === "assigned" ? { assignee: Q } : { creator: Q }
|
|
268
281
|
})
|
|
269
282
|
})),
|
|
270
|
-
value:
|
|
283
|
+
value: x.creator ? "created" : "assigned"
|
|
271
284
|
}),
|
|
272
|
-
/* @__PURE__ */
|
|
285
|
+
/* @__PURE__ */ m(pt, {
|
|
273
286
|
variant: "segmented",
|
|
274
287
|
size: "sm",
|
|
275
|
-
label:
|
|
276
|
-
items: Object.keys(
|
|
288
|
+
label: _("view"),
|
|
289
|
+
items: Object.keys(ke).map((e) => ({
|
|
277
290
|
value: e,
|
|
278
|
-
label:
|
|
279
|
-
href:
|
|
291
|
+
label: _(`views.${e}`),
|
|
292
|
+
href: Ot(o(x, "view", e === "active" ? void 0 : e))
|
|
280
293
|
})),
|
|
281
|
-
value:
|
|
294
|
+
value: T
|
|
282
295
|
}),
|
|
283
|
-
/* @__PURE__ */
|
|
296
|
+
/* @__PURE__ */ h("div", {
|
|
284
297
|
className: "flex w-full min-w-0 flex-wrap items-center gap-2 md:ml-auto md:w-auto md:flex-nowrap",
|
|
285
298
|
children: [
|
|
286
|
-
q.count === 0 &&
|
|
287
|
-
/* @__PURE__ */
|
|
288
|
-
ref:
|
|
289
|
-
value:
|
|
290
|
-
onValueChange:
|
|
291
|
-
onKeyDown: (e) => e.key === "Escape" && !
|
|
292
|
-
placeholder:
|
|
293
|
-
label:
|
|
299
|
+
q.count === 0 && Nn,
|
|
300
|
+
/* @__PURE__ */ m(dt, {
|
|
301
|
+
ref: D,
|
|
302
|
+
value: E,
|
|
303
|
+
onValueChange: Mt,
|
|
304
|
+
onKeyDown: (e) => e.key === "Escape" && !E && e.currentTarget.blur(),
|
|
305
|
+
placeholder: _("search"),
|
|
306
|
+
label: _("search"),
|
|
294
307
|
"aria-keyshortcuts": "/ Meta+F Control+F",
|
|
295
308
|
size: "sm",
|
|
296
309
|
className: "min-w-0 flex-1 max-md:order-first max-md:basis-full md:w-56 md:flex-initial"
|
|
297
310
|
}),
|
|
298
|
-
/* @__PURE__ */
|
|
299
|
-
/* @__PURE__ */
|
|
311
|
+
/* @__PURE__ */ m(xt, { filters: q }),
|
|
312
|
+
/* @__PURE__ */ h(Xe, {
|
|
300
313
|
layouts: [{
|
|
301
314
|
value: "list",
|
|
302
|
-
label:
|
|
303
|
-
icon: /* @__PURE__ */
|
|
315
|
+
label: _("layouts.list"),
|
|
316
|
+
icon: /* @__PURE__ */ m(ge, {})
|
|
304
317
|
}, {
|
|
305
318
|
value: "board",
|
|
306
|
-
label:
|
|
307
|
-
icon: /* @__PURE__ */
|
|
319
|
+
label: _("layouts.board"),
|
|
320
|
+
icon: /* @__PURE__ */ m(fe, {})
|
|
308
321
|
}],
|
|
309
322
|
layout: I ? "board" : "list",
|
|
310
323
|
onLayoutChange: (e) => {
|
|
311
|
-
|
|
324
|
+
a({ layout: e }), S(o(x, "layout", e === "board" ? "board" : void 0));
|
|
312
325
|
},
|
|
313
326
|
changed: P !== "updated" || F !== "status" || I,
|
|
314
|
-
children: [
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
+
children: [
|
|
328
|
+
/* @__PURE__ */ m(ut, {
|
|
329
|
+
label: _("orderBy"),
|
|
330
|
+
children: /* @__PURE__ */ m(ft, {
|
|
331
|
+
value: P,
|
|
332
|
+
items: [...De.map((e) => ({
|
|
333
|
+
value: e,
|
|
334
|
+
label: _(`order.${e}`)
|
|
335
|
+
})), ...M.filter((e) => ue.includes(e.kind)).map((e) => ({
|
|
336
|
+
value: `field:${e.id}`,
|
|
337
|
+
label: e.name
|
|
338
|
+
}))],
|
|
339
|
+
onValueChange: (e) => {
|
|
340
|
+
a({ order: e }), S(o(x, "order", e === "updated" ? void 0 : e));
|
|
341
|
+
},
|
|
342
|
+
"aria-label": _("orderBy"),
|
|
343
|
+
size: "sm"
|
|
344
|
+
})
|
|
345
|
+
}),
|
|
346
|
+
/* @__PURE__ */ m(ut, {
|
|
347
|
+
label: _("groupBy"),
|
|
348
|
+
children: /* @__PURE__ */ m(ft, {
|
|
349
|
+
value: F,
|
|
350
|
+
items: [...Ce.map((e) => ({
|
|
351
|
+
value: e,
|
|
352
|
+
label: _(`grouping.${e}`)
|
|
353
|
+
})), ...M.filter((e) => le.includes(e.kind)).map((e) => ({
|
|
354
|
+
value: `field:${e.id}`,
|
|
355
|
+
label: e.name
|
|
356
|
+
}))],
|
|
357
|
+
onValueChange: (e) => {
|
|
358
|
+
a({ group: e }), S(o(x, "group", e === "status" ? void 0 : e));
|
|
359
|
+
},
|
|
360
|
+
"aria-label": _("groupBy"),
|
|
361
|
+
size: "sm"
|
|
362
|
+
})
|
|
363
|
+
}),
|
|
364
|
+
M.length > 0 && /* @__PURE__ */ m(ut, {
|
|
365
|
+
label: N("onRows"),
|
|
366
|
+
children: /* @__PURE__ */ m(ft, {
|
|
367
|
+
multiple: !0,
|
|
368
|
+
value: Gt.filter((e) => M.some((t) => t.id === e)),
|
|
369
|
+
items: M.map((e) => ({
|
|
370
|
+
value: e.id,
|
|
371
|
+
label: e.name
|
|
372
|
+
})),
|
|
373
|
+
onValueChange: (e) => {
|
|
374
|
+
st(v, e), Kt(e);
|
|
375
|
+
},
|
|
376
|
+
placeholder: N("noneOnRows"),
|
|
377
|
+
"aria-label": N("onRows"),
|
|
378
|
+
size: "sm"
|
|
379
|
+
})
|
|
327
380
|
})
|
|
328
|
-
|
|
329
|
-
label: b("groupBy"),
|
|
330
|
-
children: /* @__PURE__ */ g(et, {
|
|
331
|
-
value: F,
|
|
332
|
-
items: ge.map((e) => ({
|
|
333
|
-
value: e,
|
|
334
|
-
label: b(`grouping.${e}`)
|
|
335
|
-
})),
|
|
336
|
-
onValueChange: (e) => {
|
|
337
|
-
s({ group: e }), E(c(T, "group", e === "status" ? void 0 : e));
|
|
338
|
-
},
|
|
339
|
-
"aria-label": b("groupBy"),
|
|
340
|
-
size: "sm"
|
|
341
|
-
})
|
|
342
|
-
})]
|
|
381
|
+
]
|
|
343
382
|
}),
|
|
344
|
-
/* @__PURE__ */
|
|
383
|
+
/* @__PURE__ */ m(c, {
|
|
345
384
|
variant: "secondary",
|
|
346
385
|
size: "sm",
|
|
347
|
-
icon: /* @__PURE__ */
|
|
348
|
-
label:
|
|
349
|
-
"aria-pressed":
|
|
350
|
-
onClick:
|
|
386
|
+
icon: /* @__PURE__ */ m(_e, { className: "size-3.5" }),
|
|
387
|
+
label: _(Jt ? "hidePanel" : "showPanel"),
|
|
388
|
+
"aria-pressed": Jt,
|
|
389
|
+
onClick: Xt,
|
|
351
390
|
className: "max-xl:hidden"
|
|
352
391
|
}),
|
|
353
|
-
/* @__PURE__ */
|
|
392
|
+
/* @__PURE__ */ m(c, {
|
|
354
393
|
variant: "secondary",
|
|
355
394
|
size: "sm",
|
|
356
|
-
icon: /* @__PURE__ */
|
|
357
|
-
label:
|
|
358
|
-
"aria-pressed":
|
|
359
|
-
onClick:
|
|
395
|
+
icon: /* @__PURE__ */ m(pe, { className: "size-3.5" }),
|
|
396
|
+
label: _(Zt ? "hideInsights" : "showInsights"),
|
|
397
|
+
"aria-pressed": Zt,
|
|
398
|
+
onClick: $t
|
|
360
399
|
}),
|
|
361
|
-
/* @__PURE__ */
|
|
400
|
+
/* @__PURE__ */ m(c, {
|
|
362
401
|
variant: "secondary",
|
|
363
402
|
size: "sm",
|
|
364
|
-
icon: /* @__PURE__ */
|
|
365
|
-
label:
|
|
366
|
-
onClick: () =>
|
|
403
|
+
icon: /* @__PURE__ */ m(he, { className: "size-3.5" }),
|
|
404
|
+
label: _("exportCsv"),
|
|
405
|
+
onClick: () => Tt(v, Pt)
|
|
367
406
|
}),
|
|
368
|
-
|
|
407
|
+
x.team && Tn && /* @__PURE__ */ m(c, {
|
|
369
408
|
variant: "secondary",
|
|
370
409
|
size: "sm",
|
|
371
|
-
icon: /* @__PURE__ */
|
|
372
|
-
label:
|
|
373
|
-
onClick: () =>
|
|
410
|
+
icon: /* @__PURE__ */ m(ve, { className: "size-3.5" }),
|
|
411
|
+
label: _("importCsv"),
|
|
412
|
+
onClick: () => et((e, t) => An({
|
|
374
413
|
name: e,
|
|
375
414
|
text: t
|
|
376
415
|
}))
|
|
@@ -379,129 +418,130 @@ function b({ person: e } = {}) {
|
|
|
379
418
|
})
|
|
380
419
|
]
|
|
381
420
|
}),
|
|
382
|
-
/* @__PURE__ */
|
|
421
|
+
/* @__PURE__ */ m(bt, {
|
|
383
422
|
filters: q,
|
|
384
|
-
trailing:
|
|
423
|
+
trailing: Nn,
|
|
385
424
|
className: "shrink-0 border-b border-border px-4 py-2 md:px-5"
|
|
386
425
|
}),
|
|
387
|
-
|
|
388
|
-
workspace:
|
|
426
|
+
Zt && /* @__PURE__ */ m(tt, {
|
|
427
|
+
workspace: v,
|
|
389
428
|
issues: R
|
|
390
429
|
}),
|
|
391
|
-
|
|
392
|
-
workspace:
|
|
393
|
-
team:
|
|
394
|
-
file:
|
|
395
|
-
onClose: () =>
|
|
430
|
+
kn && x.team && /* @__PURE__ */ m($e, {
|
|
431
|
+
workspace: v,
|
|
432
|
+
team: x.team,
|
|
433
|
+
file: kn,
|
|
434
|
+
onClose: () => An(null)
|
|
396
435
|
}),
|
|
397
|
-
|
|
436
|
+
Dn && /* @__PURE__ */ m(Ie, {
|
|
398
437
|
title: X("saveTitle"),
|
|
399
438
|
submitLabel: X("save"),
|
|
400
|
-
share: { allowed:
|
|
401
|
-
onClose: () =>
|
|
439
|
+
share: { allowed: En },
|
|
440
|
+
onClose: () => On(!1),
|
|
402
441
|
onSubmit: async ({ name: e, shared: t }) => {
|
|
403
|
-
let n = await
|
|
442
|
+
let n = await yn.mutateAsync({
|
|
404
443
|
name: e,
|
|
405
444
|
shared: t,
|
|
406
445
|
filters: Y
|
|
407
446
|
});
|
|
408
|
-
|
|
447
|
+
S(Be(n), !0);
|
|
409
448
|
}
|
|
410
449
|
}),
|
|
411
|
-
/* @__PURE__ */
|
|
450
|
+
/* @__PURE__ */ h("div", {
|
|
412
451
|
className: "relative flex min-h-0 flex-1",
|
|
413
452
|
children: [
|
|
414
|
-
H.size > 0 && /* @__PURE__ */
|
|
453
|
+
H.size > 0 && /* @__PURE__ */ h("div", {
|
|
415
454
|
role: "toolbar",
|
|
416
|
-
"aria-label":
|
|
455
|
+
"aria-label": _("selected", { count: H.size }),
|
|
417
456
|
className: "absolute bottom-4 left-1/2 z-10 flex max-w-[calc(100%-2rem)] -translate-x-1/2 items-center gap-1 rounded-xl border border-border bg-popover py-1 pr-1 pl-3 text-sm shadow-md",
|
|
418
457
|
children: [
|
|
419
|
-
/* @__PURE__ */
|
|
458
|
+
/* @__PURE__ */ m("span", {
|
|
420
459
|
className: "whitespace-nowrap tabular-nums",
|
|
421
|
-
children:
|
|
460
|
+
children: _("selected", { count: H.size })
|
|
422
461
|
}),
|
|
423
|
-
H.size < B.length && /* @__PURE__ */
|
|
462
|
+
H.size < B.length && /* @__PURE__ */ m(s, {
|
|
424
463
|
size: "sm",
|
|
425
464
|
variant: "ghost",
|
|
426
465
|
className: "shrink-0",
|
|
427
466
|
onClick: () => U(new Set(B.map((e) => e.id))),
|
|
428
|
-
children:
|
|
467
|
+
children: _("selectAll", { count: B.length })
|
|
429
468
|
}),
|
|
430
|
-
/* @__PURE__ */
|
|
431
|
-
label:
|
|
432
|
-
items:
|
|
469
|
+
/* @__PURE__ */ m(lt, {
|
|
470
|
+
label: _("actions"),
|
|
471
|
+
items: on(dn),
|
|
433
472
|
side: "top",
|
|
434
|
-
trigger: /* @__PURE__ */
|
|
473
|
+
trigger: /* @__PURE__ */ m(s, {
|
|
435
474
|
size: "sm",
|
|
436
475
|
variant: "outline",
|
|
437
476
|
className: "shrink-0",
|
|
438
|
-
children:
|
|
477
|
+
children: _("actions")
|
|
439
478
|
})
|
|
440
479
|
}),
|
|
441
|
-
/* @__PURE__ */
|
|
480
|
+
/* @__PURE__ */ m(c, {
|
|
442
481
|
size: "sm",
|
|
443
482
|
variant: "ghost",
|
|
444
|
-
icon: /* @__PURE__ */
|
|
445
|
-
label:
|
|
483
|
+
icon: /* @__PURE__ */ m(me, {}),
|
|
484
|
+
label: _("clear"),
|
|
446
485
|
onClick: () => U(/* @__PURE__ */ new Set())
|
|
447
486
|
})
|
|
448
487
|
]
|
|
449
488
|
}),
|
|
450
|
-
/* @__PURE__ */
|
|
451
|
-
className: `min-h-0 min-w-0 flex-1 ${I ? "overflow-hidden" : "overflow-y-auto"} ${H.size > 0 ? "pb-16" : ""} transition-opacity ${
|
|
489
|
+
/* @__PURE__ */ h("div", {
|
|
490
|
+
className: `min-h-0 min-w-0 flex-1 ${I ? "overflow-hidden" : "overflow-y-auto"} ${H.size > 0 ? "pb-16" : ""} transition-opacity ${It && !O ? "opacity-50" : ""}`,
|
|
452
491
|
children: [
|
|
453
|
-
L && /* @__PURE__ */
|
|
492
|
+
L && /* @__PURE__ */ h("div", {
|
|
454
493
|
className: "flex h-8 items-center gap-2 border-b border-border px-5 text-xs text-muted-foreground",
|
|
455
494
|
role: "status",
|
|
456
|
-
children: [
|
|
495
|
+
children: [Et("issueBreakdown.showing", { count: R.length }), /* @__PURE__ */ m("button", {
|
|
457
496
|
type: "button",
|
|
458
|
-
onClick: () =>
|
|
497
|
+
onClick: () => nn(null),
|
|
459
498
|
className: "text-primary hover:underline",
|
|
460
|
-
children:
|
|
499
|
+
children: Et("issueBreakdown.showAll")
|
|
461
500
|
})]
|
|
462
501
|
}),
|
|
463
|
-
I &&
|
|
464
|
-
workspace:
|
|
465
|
-
columns: F === "status" &&
|
|
466
|
-
onMove: F === "none" ? void 0 : (e, t, n) =>
|
|
467
|
-
onContextMenu:
|
|
502
|
+
I && O && /* @__PURE__ */ m(Ue, {
|
|
503
|
+
workspace: v,
|
|
504
|
+
columns: F === "status" && ke[T].categories.length > 0 ? z.filter((e) => e.issues.length > 0 || e.key === "completed" || ke[T].categories.includes(e.key)) : z,
|
|
505
|
+
onMove: F === "none" ? void 0 : (e, t, n) => sn(e, F, t, n, z.find((e) => e.key === n)?.issues[0], Wt),
|
|
506
|
+
onContextMenu: gn
|
|
468
507
|
}),
|
|
469
|
-
!I && z.map((e) => /* @__PURE__ */
|
|
508
|
+
!I && z.map((e) => /* @__PURE__ */ m(nt, {
|
|
470
509
|
label: e.label,
|
|
471
510
|
icon: e.icon,
|
|
472
511
|
count: e.issues.length,
|
|
473
|
-
children: e.issues.map((e) => /* @__PURE__ */
|
|
512
|
+
children: e.issues.map((e) => /* @__PURE__ */ m(Ke, {
|
|
474
513
|
issue: e,
|
|
475
|
-
team:
|
|
476
|
-
workspace:
|
|
514
|
+
team: w.find((t) => t.id === e.teamId),
|
|
515
|
+
workspace: v,
|
|
477
516
|
selected: e.id === V?.id,
|
|
478
517
|
picked: H.has(e.id),
|
|
479
|
-
onPick: (t) =>
|
|
480
|
-
viewers: [...
|
|
481
|
-
onHover: () =>
|
|
482
|
-
onClick: (t) =>
|
|
483
|
-
onContextMenu: (t) =>
|
|
518
|
+
onPick: (t) => mn(B.indexOf(e), t),
|
|
519
|
+
viewers: [...ln.get(e.identifier) ?? []],
|
|
520
|
+
onHover: () => an(B.indexOf(e)),
|
|
521
|
+
onClick: (t) => hn(t, B.indexOf(e)),
|
|
522
|
+
onContextMenu: (t) => gn(t, e),
|
|
523
|
+
fields: qt
|
|
484
524
|
}, e.id))
|
|
485
525
|
}, e.key)),
|
|
486
|
-
!
|
|
487
|
-
|
|
488
|
-
workspace:
|
|
489
|
-
filtered: !!
|
|
490
|
-
onCreate: () =>
|
|
526
|
+
!O && (Ft ? /* @__PURE__ */ m(t, { error: Ft }) : /* @__PURE__ */ m(St, { rows: 8 })),
|
|
527
|
+
O && k.length === 0 && /* @__PURE__ */ m(wt, {
|
|
528
|
+
workspace: v,
|
|
529
|
+
filtered: !!x.q || T !== "active" || q.count > +!!y,
|
|
530
|
+
onCreate: () => jt(x.team ? { team: x.team } : void 0)
|
|
491
531
|
})
|
|
492
532
|
]
|
|
493
533
|
}),
|
|
494
|
-
|
|
495
|
-
"aria-label":
|
|
534
|
+
Jt && O && /* @__PURE__ */ m("aside", {
|
|
535
|
+
"aria-label": Et("issueBreakdown.label"),
|
|
496
536
|
className: "hidden w-80 shrink-0 overflow-y-auto border-l border-border px-4 py-4 xl:block",
|
|
497
|
-
children: /* @__PURE__ */
|
|
498
|
-
workspace:
|
|
499
|
-
issues:
|
|
500
|
-
tabs:
|
|
501
|
-
tab:
|
|
502
|
-
onTabChange:
|
|
537
|
+
children: /* @__PURE__ */ m(Ze, {
|
|
538
|
+
workspace: v,
|
|
539
|
+
issues: k,
|
|
540
|
+
tabs: it,
|
|
541
|
+
tab: en,
|
|
542
|
+
onTabChange: tn,
|
|
503
543
|
focus: L,
|
|
504
|
-
onFocus:
|
|
544
|
+
onFocus: nn
|
|
505
545
|
})
|
|
506
546
|
})
|
|
507
547
|
]
|
|
@@ -509,20 +549,20 @@ function b({ person: e } = {}) {
|
|
|
509
549
|
]
|
|
510
550
|
});
|
|
511
551
|
}
|
|
512
|
-
function
|
|
513
|
-
let r =
|
|
514
|
-
return i.some((e) => !e.archivedAt) ? /* @__PURE__ */
|
|
552
|
+
function wt({ workspace: e, filtered: t, onCreate: n }) {
|
|
553
|
+
let r = p("issues.empty"), { data: i = [] } = g(ae(e)), ee = Fe(e, "manage_teams");
|
|
554
|
+
return i.some((e) => !e.archivedAt) ? /* @__PURE__ */ h("div", {
|
|
515
555
|
className: "mx-auto max-w-sm px-4 py-24 text-center",
|
|
516
556
|
children: [
|
|
517
|
-
/* @__PURE__ */
|
|
557
|
+
/* @__PURE__ */ m("p", {
|
|
518
558
|
className: "text-sm font-medium",
|
|
519
559
|
children: r(t ? "noMatch" : "nothingInProgress")
|
|
520
560
|
}),
|
|
521
|
-
/* @__PURE__ */
|
|
561
|
+
/* @__PURE__ */ m("p", {
|
|
522
562
|
className: "mt-1 text-sm text-muted-foreground",
|
|
523
563
|
children: r(t ? "tryAnother" : "pressC")
|
|
524
564
|
}),
|
|
525
|
-
!t && /* @__PURE__ */
|
|
565
|
+
!t && /* @__PURE__ */ m(s, {
|
|
526
566
|
type: "button",
|
|
527
567
|
variant: "primary",
|
|
528
568
|
onClick: n,
|
|
@@ -530,18 +570,18 @@ function dt({ workspace: e, filtered: t, onCreate: n }) {
|
|
|
530
570
|
children: r("create")
|
|
531
571
|
})
|
|
532
572
|
]
|
|
533
|
-
}) : /* @__PURE__ */
|
|
573
|
+
}) : /* @__PURE__ */ h("div", {
|
|
534
574
|
className: "mx-auto max-w-sm px-4 py-24 text-center",
|
|
535
575
|
children: [
|
|
536
|
-
/* @__PURE__ */
|
|
576
|
+
/* @__PURE__ */ m("p", {
|
|
537
577
|
className: "text-sm font-medium",
|
|
538
578
|
children: r("noTeamsTitle")
|
|
539
579
|
}),
|
|
540
|
-
/* @__PURE__ */
|
|
580
|
+
/* @__PURE__ */ m("p", {
|
|
541
581
|
className: "mt-1 text-sm text-muted-foreground",
|
|
542
|
-
children: r(
|
|
582
|
+
children: r(ee ? "noTeamsDescription" : "noTeamsAskAdmin")
|
|
543
583
|
}),
|
|
544
|
-
|
|
584
|
+
ee && /* @__PURE__ */ m(s, {
|
|
545
585
|
type: "button",
|
|
546
586
|
variant: "primary",
|
|
547
587
|
onClick: n,
|
|
@@ -551,7 +591,7 @@ function dt({ workspace: e, filtered: t, onCreate: n }) {
|
|
|
551
591
|
]
|
|
552
592
|
});
|
|
553
593
|
}
|
|
554
|
-
function
|
|
594
|
+
function Tt(t, n) {
|
|
555
595
|
let r = new URLSearchParams({
|
|
556
596
|
triage: "exclude",
|
|
557
597
|
archived: "exclude"
|
|
@@ -560,4 +600,4 @@ function ft(t, n) {
|
|
|
560
600
|
let i = document.createElement("a");
|
|
561
601
|
i.href = `${e}/api/v1/workspaces/${encodeURIComponent(t)}/exports/issues.csv?${r}`, i.download = "", i.click();
|
|
562
602
|
}
|
|
563
|
-
export {
|
|
603
|
+
export { _ as IssueList };
|