From 00e85c3e94a058ce3a16178be5c3bd920db53c7e Mon Sep 17 00:00:00 2001 From: Emma Segal-Grossman Date: Wed, 26 Feb 2025 16:58:00 -0500 Subject: [PATCH] Add "Copy ID" to a bunch of menus (#2426) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Addresses feedback from here https://discord.com/channels/895426029194207262/910966759165657161/1344367205004873819 by @tw4l. Add "Copy ID" to a bunch of menus, including all list and detail pages, as well as all other item/crawl/page lists. | Screenshots | |--------| | Screenshot 2025-02-26 at 3 56 48 PM | | Screenshot 2025-02-26 at 4 02 06 PM | | Screenshot 2025-02-26 at 4 02 55 PM | | Screenshot 2025-02-26 at 1 57 01 PM | | Screenshot 2025-02-26 at 4 01 10 PM | | Screenshot 2025-02-26 at 4 03 19 PM | --------- Co-authored-by: Henry Wilkinson --- frontend/src/components/ui/menu-item-link.ts | 5 +- .../archived-item-detail.ts | 42 +++++++++++------ .../pages/org/archived-item-detail/ui/qa.ts | 27 +++++++++++ frontend/src/pages/org/archived-items.ts | 46 +++++++++++-------- .../src/pages/org/browser-profiles-detail.ts | 10 +++- .../src/pages/org/browser-profiles-list.ts | 11 ++++- frontend/src/pages/org/collection-detail.ts | 18 ++++++++ frontend/src/pages/org/collections-list.ts | 13 ++++-- frontend/src/pages/org/workflow-detail.ts | 38 ++++++++++----- frontend/src/pages/org/workflows-list.ts | 26 +++++++---- 10 files changed, 176 insertions(+), 60 deletions(-) diff --git a/frontend/src/components/ui/menu-item-link.ts b/frontend/src/components/ui/menu-item-link.ts index 17e1e4fd..7e40dbdd 100644 --- a/frontend/src/components/ui/menu-item-link.ts +++ b/frontend/src/components/ui/menu-item-link.ts @@ -47,7 +47,10 @@ export class MenuItemLink extends TailwindElement { download=${this.download} aria-disabled=${this.disabled} @click=${(e: MouseEvent) => { - if (this.disabled || this.loading) return; + if (this.disabled || this.loading) { + e.preventDefault(); + return; + } if (this.download) { const dropdown = this.shadowRoot!.host.closest< diff --git a/frontend/src/pages/org/archived-item-detail/archived-item-detail.ts b/frontend/src/pages/org/archived-item-detail/archived-item-detail.ts index 0c910ee6..79ee0fc8 100644 --- a/frontend/src/pages/org/archived-item-detail/archived-item-detail.ts +++ b/frontend/src/pages/org/archived-item-detail/archived-item-detail.ts @@ -630,6 +630,26 @@ export class ArchivedItemDetail extends BtrixElement { `, )} + ${when( + isSuccessfullyFinished(this.item), + () => html` + + + ${msg("Download Item")} + ${this.item?.fileSize + ? html` ${this.localize.bytes(this.item.fileSize)}` + : nothing} + + + `, + )} ${when( this.itemType === "crawl", () => html` @@ -659,19 +679,15 @@ export class ArchivedItemDetail extends BtrixElement { ${msg("Copy Tags")} - ${when( - isSuccessfullyFinished(this.item), - () => html` - - - - ${msg("Download Item")} - - `, - )} + + ClipboardController.copyToClipboard( + this.item?.id ?? this.itemId ?? "", + )} + > + + ${msg("Copy Item ID")} + ${when( this.isCrawler, () => html` diff --git a/frontend/src/pages/org/archived-item-detail/ui/qa.ts b/frontend/src/pages/org/archived-item-detail/ui/qa.ts index 0b3b0eaa..b21e5ce0 100644 --- a/frontend/src/pages/org/archived-item-detail/ui/qa.ts +++ b/frontend/src/pages/org/archived-item-detail/ui/qa.ts @@ -16,6 +16,7 @@ import queryString from "query-string"; import { BtrixElement } from "@/classes/BtrixElement"; import { type Dialog } from "@/components/ui/dialog"; import type { PageChangeEvent } from "@/components/ui/pagination"; +import { ClipboardController } from "@/controllers/clipboard"; import { iconFor as iconForPageReview } from "@/features/qa/page-list/helpers"; import * as pageApproval from "@/features/qa/page-list/helpers/approval"; import type { SelectDetail } from "@/features/qa/qa-run-dropdown"; @@ -392,6 +393,13 @@ export class ArchivedItemDetailQA extends BtrixElement { `} + ClipboardController.copyToClipboard(run.id)} + > + + ${msg("Copy Run ID")} + + { this.deleting = run.id; @@ -750,12 +758,16 @@ export class ArchivedItemDetailQA extends BtrixElement { "[clickable-start] minmax(12rem, auto)", "minmax(min-content, 12rem)", "minmax(min-content, 12rem) [clickable-end]", + "min-content", ].join(" ")}" > ${msg("Page")} ${msg("Approval")} ${msg("Comments")} + + ${msg("Row actions")} + ${this.pages?.items.map( @@ -809,6 +821,21 @@ export class ArchivedItemDetailQA extends BtrixElement { ${msg("None")} `} + +
+ + + + ClipboardController.copyToClipboard(page.id)} + > + + ${msg("Copy Page ID")} + + + +
+
`, )} diff --git a/frontend/src/pages/org/archived-items.ts b/frontend/src/pages/org/archived-items.ts index 2c436da3..9a7c6fd8 100644 --- a/frontend/src/pages/org/archived-items.ts +++ b/frontend/src/pages/org/archived-items.ts @@ -598,6 +598,26 @@ export class CrawlsList extends BtrixElement { `, )} + ${when( + isSuccessfullyFinished(item), + () => html` + + + ${msg("Download Item")} + ${item.fileSize + ? html` ${this.localize.bytes(item.fileSize)}` + : nothing} + + + `, + )} ${item.type === "crawl" ? html` ${msg("Copy Workflow ID")} - ClipboardController.copyToClipboard(item.id)} - > - - ${msg("Copy Archived Item ID")} - ` : nothing} + ClipboardController.copyToClipboard(item.tags.join(", "))} @@ -631,19 +646,12 @@ export class CrawlsList extends BtrixElement { ${msg("Copy Tags")} - ${when( - isSuccessfullyFinished(item), - () => html` - - - - ${msg("Download Item")} - - `, - )} + ClipboardController.copyToClipboard(item.id)} + > + + ${msg("Copy Item ID")} + ${when( this.isCrawler && (item.type !== "crawl" || !isActive(item)), () => html` diff --git a/frontend/src/pages/org/browser-profiles-detail.ts b/frontend/src/pages/org/browser-profiles-detail.ts index 4712da50..f207a8cb 100644 --- a/frontend/src/pages/org/browser-profiles-detail.ts +++ b/frontend/src/pages/org/browser-profiles-detail.ts @@ -10,6 +10,7 @@ import type { Profile, ProfileWorkflow } from "./types"; import { BtrixElement } from "@/classes/BtrixElement"; import type { Dialog } from "@/components/ui/dialog"; +import { ClipboardController } from "@/controllers/clipboard"; import type { BrowserConnectionChange } from "@/features/browser-profiles/profile-browser"; import { pageNav } from "@/layouts/pageHeader"; import { isApiError } from "@/utils/api"; @@ -432,12 +433,19 @@ export class BrowserProfilesDetail extends BtrixElement { ${msg("Duplicate Profile")}
+ ClipboardController.copyToClipboard(this.profileId)} + > + + ${msg("Copy Profile ID")} + + void this.deleteProfile()} > - ${msg("Delete")} + ${msg("Delete Profile")} diff --git a/frontend/src/pages/org/browser-profiles-list.ts b/frontend/src/pages/org/browser-profiles-list.ts index f42c8559..0c2f1366 100644 --- a/frontend/src/pages/org/browser-profiles-list.ts +++ b/frontend/src/pages/org/browser-profiles-list.ts @@ -15,6 +15,7 @@ import { SortDirection, type SortValues, } from "@/components/ui/table/table-header-cell"; +import { ClipboardController } from "@/controllers/clipboard"; import { pageHeader } from "@/layouts/pageHeader"; import type { APIPaginatedList, @@ -325,6 +326,14 @@ export class BrowserProfilesList extends BtrixElement { ${msg("Duplicate Profile")} + + ClipboardController.copyToClipboard(data.id)} + > + + ${msg("Copy Profile ID")} + + { @@ -332,7 +341,7 @@ export class BrowserProfilesList extends BtrixElement { }} > - ${msg("Delete")} + ${msg("Delete Profile")} diff --git a/frontend/src/pages/org/collection-detail.ts b/frontend/src/pages/org/collection-detail.ts index 5e8fa526..02d67334 100644 --- a/frontend/src/pages/org/collection-detail.ts +++ b/frontend/src/pages/org/collection-detail.ts @@ -14,6 +14,7 @@ import { BtrixElement } from "@/classes/BtrixElement"; import type { MarkdownEditor } from "@/components/ui/markdown-editor"; import type { PageChangeEvent } from "@/components/ui/pagination"; import { viewStateContext, type ViewStateContext } from "@/context/view-state"; +import { ClipboardController } from "@/controllers/clipboard"; import type { EditDialogTab } from "@/features/collections/collection-edit-dialog"; import { collectionShareLink } from "@/features/collections/helpers/share-link"; import { SelectCollectionAccess } from "@/features/collections/select-collection-access"; @@ -563,6 +564,16 @@ export class CollectionDetail extends BtrixElement { )} + + ClipboardController.copyToClipboard( + this.collection?.id ?? this.collectionId, + )} + > + + ${msg("Copy Collection ID")} + + ${msg("Remove from Collection")} + + ClipboardController.copyToClipboard(item.id)} + > + + ${msg("Copy Item ID")} + diff --git a/frontend/src/pages/org/collections-list.ts b/frontend/src/pages/org/collections-list.ts index 17383d80..13d682de 100644 --- a/frontend/src/pages/org/collections-list.ts +++ b/frontend/src/pages/org/collections-list.ts @@ -585,12 +585,10 @@ export class CollectionsList extends BtrixElement { ${msg("Edit Collection Settings")} - ${col.access === CollectionAccess.Public || col.access === CollectionAccess.Unlisted ? html` { ClipboardController.copyToClipboard(this.getShareLink(col)); this.notify.toast({ @@ -605,14 +603,14 @@ export class CollectionsList extends BtrixElement { ` : nothing} - + - ${msg("Download")} + ${msg("Download Collection")} + ClipboardController.copyToClipboard(col.id)} + > + + ${msg("Copy Collection ID")} + + void this.manageCollection(col, "delete")} diff --git a/frontend/src/pages/org/workflow-detail.ts b/frontend/src/pages/org/workflow-detail.ts index f4bedb46..f14aa242 100644 --- a/frontend/src/pages/org/workflow-detail.ts +++ b/frontend/src/pages/org/workflow-detail.ts @@ -744,6 +744,14 @@ export class WorkflowDetail extends BtrixElement { ${msg("Edit Workflow Settings")} + void this.duplicateConfig()} + > + + ${msg("Duplicate Workflow")} + + ClipboardController.copyToClipboard(workflow.tags.join(", "))} @@ -753,11 +761,10 @@ export class WorkflowDetail extends BtrixElement { ${msg("Copy Tags")} void this.duplicateConfig()} + @click=${() => ClipboardController.copyToClipboard(workflow.id)} > - - ${msg("Duplicate Workflow")} + + ${msg("Copy Workflow ID")} ${when( !workflow.crawlCount, @@ -925,10 +932,18 @@ export class WorkflowDetail extends BtrixElement { )} .crawl=${crawl} > - ${when( - this.isCrawler, - () => - html` + + + ClipboardController.copyToClipboard(crawl.id)} + > + + ${msg("Copy Crawl ID")} + + ${when( + this.isCrawler, + () => html` + this.confirmDeleteCrawl(crawl)} @@ -936,9 +951,10 @@ export class WorkflowDetail extends BtrixElement { ${msg("Delete Crawl")} - `, - )}`, + `, + )} + + `, ), )} diff --git a/frontend/src/pages/org/workflows-list.ts b/frontend/src/pages/org/workflows-list.ts index 83e6b59e..2892707b 100644 --- a/frontend/src/pages/org/workflows-list.ts +++ b/frontend/src/pages/org/workflows-list.ts @@ -613,16 +613,15 @@ export class WorkflowsList extends BtrixElement { ${when( this.appState.isCrawler, () => - html` - - this.navigate.to( - `${this.navigate.orgBasePath}/workflows/${workflow.id}?edit`, - )} - > - - ${msg("Edit Workflow Settings")} - `, + html` + this.navigate.to( + `${this.navigate.orgBasePath}/workflows/${workflow.id}?edit`, + )} + > + + ${msg("Edit Workflow Settings")} + `, )} @@ -642,6 +641,13 @@ export class WorkflowsList extends BtrixElement { ${msg("Duplicate Workflow")} + + ClipboardController.copyToClipboard(workflow.id)} + > + + ${msg("Copy Workflow ID")} + ${when( !workflow.crawlCount, () => html`