diff --git a/packages/frontend/src/components/ui/icon.tsx b/packages/frontend/src/components/ui/icon.tsx
index 304ea47..f659017 100644
--- a/packages/frontend/src/components/ui/icon.tsx
+++ b/packages/frontend/src/components/ui/icon.tsx
@@ -11,6 +11,7 @@ import {
Clock as PixelClock,
Close as PixelClose,
MessagePlus as PixelCommentSend,
+ Copy as PixelCopy,
CreditCard as PixelCreditCard,
CreditCardDelete as PixelCreditCardDelete,
Dashboard as PixelDashboard,
@@ -53,6 +54,7 @@ import {
CaretUpIcon as PhosphorChevronUp,
CircleIcon as PhosphorCircle,
ChatTextIcon as PhosphorComment,
+ CopyIcon as PhosphorCopy,
CreditCardIcon as PhosphorCreditCard,
CubeIcon as PhosphorCube,
DotsSixVerticalIcon as PhosphorDotsSixVertical,
@@ -102,6 +104,7 @@ import {
CircleCheckIcon,
CircleIcon,
CircleQuestionMark,
+ Copy,
CreditCard,
Edit,
EllipsisVertical,
@@ -161,6 +164,7 @@ const icons = {
circleIcon: { lucide: CircleIcon, pixel: PixelCircle, phosphor: PhosphorCircle },
circleQuestionMark: { lucide: CircleQuestionMark, pixel: PixelNoteDelete, phosphor: PhosphorQuestion },
comment: { lucide: MessageSquarePlus, pixel: PixelCommentSend, phosphor: PhosphorComment },
+ copy: { lucide: Copy, pixel: PixelCopy, phosphor: PhosphorCopy },
creditCard: { lucide: CreditCard, pixel: PixelCreditCard, phosphor: PhosphorCreditCard },
creditCardDelete: { lucide: CreditCard, pixel: PixelCreditCardDelete, phosphor: PhosphorCreditCard },
edit: { lucide: Edit, pixel: PixelEdit, phosphor: PhosphorEdit },
diff --git a/packages/frontend/src/pages/Issues.tsx b/packages/frontend/src/pages/Issues.tsx
index 6ea61f0..5d8c8c8 100644
--- a/packages/frontend/src/pages/Issues.tsx
+++ b/packages/frontend/src/pages/Issues.tsx
@@ -555,6 +555,64 @@ export default function Issues() {
>
+ {
+ const params = new URLSearchParams(window.location.search);
+
+ if (issueFilters.query) {
+ params.set("q", issueFilters.query);
+ } else {
+ params.delete("q");
+ }
+
+ if (issueFilters.statuses.length > 0) {
+ params.set("status", issueFilters.statuses.join(","));
+ } else {
+ params.delete("status");
+ }
+
+ if (issueFilters.types.length > 0) {
+ params.set("type", issueFilters.types.join(","));
+ } else {
+ params.delete("type");
+ }
+
+ if (issueFilters.assignees.length > 0) {
+ params.set("assignee", issueFilters.assignees.join(","));
+ } else {
+ params.delete("assignee");
+ }
+
+ if (issueFilters.sprintId !== defaultIssuesTableFilters.sprintId) {
+ params.set("sprint", String(issueFilters.sprintId));
+ } else {
+ params.delete("sprint");
+ }
+
+ if (issueFilters.sort !== defaultIssuesTableFilters.sort) {
+ params.set("sort", issueFilters.sort);
+ } else {
+ params.delete("sort");
+ }
+
+ const url = `${window.location.origin}${window.location.pathname}?${params.toString()}`;
+ navigator.clipboard.writeText(url);
+ }}
+ >
+
+
)}