diff --git a/apps/webapp/app/components/queues/QueueControls.tsx b/apps/webapp/app/components/queues/QueueControls.tsx index 9c4302d06..0ee2fde92 100644 --- a/apps/webapp/app/components/queues/QueueControls.tsx +++ b/apps/webapp/app/components/queues/QueueControls.tsx @@ -32,6 +32,7 @@ export function QueuePauseResumeButton({ fullWidth = false, showTooltip = true, iconOnly = false, + withQueueName = false, }: { /** The "id" here is a friendlyId */ queue: { id: string; name: string; paused: boolean }; @@ -41,6 +42,8 @@ export function QueuePauseResumeButton({ /** Icon-only trigger (label moves to the tooltip). For compact placements like the detail-page * live blocks. */ iconOnly?: boolean; + /** Render the full "Pause/Resume {name} queue" label instead of the short "Pause"/"Resume". */ + withQueueName?: boolean; }) { const [isOpen, setIsOpen] = useState(false); @@ -64,7 +67,13 @@ export function QueuePauseResumeButton({ textAlignLeft={fullWidth} aria-label={label} > - {iconOnly ? undefined : queue.paused ? "Resume" : "Pause"} + {iconOnly + ? undefined + : withQueueName + ? `${queue.paused ? "Resume" : "Pause"} ${queue.name} queue` + : queue.paused + ? "Resume" + : "Pause"} @@ -209,24 +218,38 @@ export function QueueOverrideConcurrencyButton({ + ) : trigger === "button" ? ( + + + +
+ + + +
+
+ + Set a custom concurrency limit for this queue, overriding the environment default — as + an absolute number or a percentage of the environment limit. + +
+
) : ( - {trigger === "button" ? ( - - ) : ( - - )} + )} diff --git a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.queues_.$queueParam/route.tsx b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.queues_.$queueParam/route.tsx index a2792b4f4..361228b09 100644 --- a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.queues_.$queueParam/route.tsx +++ b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.queues_.$queueParam/route.tsx @@ -245,7 +245,25 @@ export default function Page() { everything, like the Queues list. The time filter scopes the tab charts; search filters the keys table. The bar is pinned by the layout while the page scrolls. */} -
+
+ + replace({ view: undefined, key: undefined })} + > + Overview + + replace({ view: "keys" })} + > + Concurrency keys + + +
+
{view === "keys" && hasKeys ? ( ) : null} @@ -257,6 +275,16 @@ export default function Page() { valueClassName="text-text-bright" shortcut={{ key: "d" }} /> + +
@@ -275,23 +303,6 @@ export default function Page() { {/* Tabs + charts share the padded (inset) column. Both tabs always render; the keys tab shows an empty state when the queue has no concurrency keys. */} - - replace({ view: undefined, key: undefined })} - > - Overview - - replace({ view: "keys" })} - > - Concurrency keys - - - {view === "keys" ? ( hasKeys ? ( - - - -
- } - /> +