From 1314a62008d59b5f0e7711025acb08ce089202b5 Mon Sep 17 00:00:00 2001
From: prha <philrha@gmail.com>
Date: Tue, 7 Jan 2025 21:39:53 -0800
Subject: [PATCH] runs ui

---
 .../dagster-ui/packages/ui-core/client.json   |  4 +--
 .../ui-core/src/runs/RunFragments.tsx         |  1 +
 .../ui-core/src/runs/RunHeaderActions.tsx     | 14 ++++++++++
 .../ui-core/src/runs/RunPoolsDialog.tsx       | 28 +++++++++++++++++++
 .../types/RunActionButtonsTestQuery.types.ts  |  3 +-
 .../src/runs/types/RunFragments.types.ts      |  2 ++
 .../ui-core/src/runs/types/RunRoot.types.ts   |  3 +-
 7 files changed, 51 insertions(+), 4 deletions(-)
 create mode 100644 js_modules/dagster-ui/packages/ui-core/src/runs/RunPoolsDialog.tsx

diff --git a/js_modules/dagster-ui/packages/ui-core/client.json b/js_modules/dagster-ui/packages/ui-core/client.json
index fb84f82141e07..eea7ebe34cf4b 100644
--- a/js_modules/dagster-ui/packages/ui-core/client.json
+++ b/js_modules/dagster-ui/packages/ui-core/client.json
@@ -127,7 +127,7 @@
   "RunAssetsQuery": "53c1e7814d451dfd58fb2427dcb326a1e9628c8bbc91b3b9c76f8d6c7b75e278",
   "RunTabsCountQuery": "5fe1760a3bf0494fb98e3c09f31add5138f9f31d59507a8b25186e2103bebbb4",
   "RunStepStatsQuery": "77d73353a4aea095bfa241903122abf14eb38341c5869a9688b70c0d53f5a167",
-  "RunRootQuery": "4f2633b31ddc71c08d3a985be30dc1bf21fbc462287554f165060c51a3554beb",
+  "RunRootQuery": "1da9ea08b905f4749f7941abf4a51cbcba78cd150d77f02345c8467abb497257",
   "RunStatsQuery": "75e80f740a79607de9e1152f9b7074d319197fbc219784c767c1abd5553e9a49",
   "LaunchPipelineExecution": "292088c4a697aca6be1d3bbc0cfc45d8a13cdb2e75cfedc64b68c6245ea34f89",
   "LaunchMultipleRuns": "a56d9efdb35e71e0fd1744dd768129248943bc5b23e717458b82c46829661763",
@@ -139,7 +139,7 @@
   "RunTagValuesQuery": "0c0a9998c215bb801eb0adcd5449c0ac4cf1e8efbc6d0fcc5fb6d76fcc95cb92",
   "ScheduledRunsListQuery": "2650d8ebdfc444fe76fcf8acd9ff54f9ecacdb680b1d83e3f487cb71dd0c7eae",
   "TerminateRunIdsQuery": "d38573af47f3ab2f2b11d90cb85ce8426307e2384e67a5b20e2bf67d5c1054bb",
-  "RunActionButtonsTestQuery": "5d358c3360e683549b885108c3dbb7c1d21d8afd790a5ee963e6e9640ccdbfe8",
+  "RunActionButtonsTestQuery": "dc4d3b53b887955782addbab7ce79b551014d44bc7646e4932a022280cc0c185",
   "RunsRootQuery": "091646e47ecea81ba4765a3f2cead18880b09ee400d1d7e9dcb6e194ee364e51",
   "RunsFeedRootQuery": "5aac6e9b29b52642fec8a45ca86d183a0d7b2d4e092c27a107f37bf5ec4fdfc4",
   "OngoingRunTimelineQuery": "055420e85ba799b294bab52c01d3f4a4470580606a40483031c35777d88d527f",
diff --git a/js_modules/dagster-ui/packages/ui-core/src/runs/RunFragments.tsx b/js_modules/dagster-ui/packages/ui-core/src/runs/RunFragments.tsx
index b34d76e07dab3..812b9352a8dd4 100644
--- a/js_modules/dagster-ui/packages/ui-core/src/runs/RunFragments.tsx
+++ b/js_modules/dagster-ui/packages/ui-core/src/runs/RunFragments.tsx
@@ -14,6 +14,7 @@ export const RUN_FRAGMENT = gql`
       repositoryName
       repositoryLocationName
     }
+    allConcurrencyKeys
     hasReExecutePermission
     hasTerminatePermission
     hasDeletePermission
diff --git a/js_modules/dagster-ui/packages/ui-core/src/runs/RunHeaderActions.tsx b/js_modules/dagster-ui/packages/ui-core/src/runs/RunHeaderActions.tsx
index 8af6b4945edad..a4bae7ca82f44 100644
--- a/js_modules/dagster-ui/packages/ui-core/src/runs/RunHeaderActions.tsx
+++ b/js_modules/dagster-ui/packages/ui-core/src/runs/RunHeaderActions.tsx
@@ -6,6 +6,7 @@ import {RunMetricsDialog} from 'shared/runs/RunMetricsDialog.oss';
 import {DeletionDialog} from './DeletionDialog';
 import {QueuedRunCriteriaDialog} from './QueuedRunCriteriaDialog';
 import {RunConfigDialog} from './RunConfigDialog';
+import {RunPoolsDialog} from './RunPoolsDialog';
 import {doneStatuses} from './RunStatuses';
 import {RunsQueryRefetchContext} from './RunUtils';
 import {TerminationDialog} from './TerminationDialog';
@@ -30,6 +31,7 @@ type VisibleDialog =
   | 'queue-criteria'
   | 'free_slots'
   | 'metrics'
+  | 'pools'
   | null;
 
 export const RunHeaderActions = ({run, isJob}: {run: RunFragment; isJob: boolean}) => {
@@ -93,6 +95,11 @@ export const RunHeaderActions = ({run, isJob}: {run: RunFragment; isJob: boolean
         <Button icon={<Icon name="tag" />} onClick={() => setVisibleDialog('config')}>
           View tags and config
         </Button>
+        {run.allConcurrencyKeys && run.allConcurrencyKeys.length ? (
+          <Tooltip content="View pools" position="top" targetTagName="div">
+            <Button icon={<Icon name="concurrency" />} onClick={() => setVisibleDialog('pools')} />
+          </Tooltip>
+        ) : null}
         <Popover
           position="bottom-right"
           content={
@@ -204,6 +211,13 @@ export const RunHeaderActions = ({run, isJob}: {run: RunFragment; isJob: boolean
           selectedRuns={{[run.id]: run.canTerminate}}
         />
       ) : null}
+      {run.allConcurrencyKeys && run.allConcurrencyKeys.length ? (
+        <RunPoolsDialog
+          isOpen={visibleDialog === 'pools'}
+          pools={run.allConcurrencyKeys}
+          onClose={() => setVisibleDialog(null)}
+        />
+      ) : null}
     </div>
   );
 };
diff --git a/js_modules/dagster-ui/packages/ui-core/src/runs/RunPoolsDialog.tsx b/js_modules/dagster-ui/packages/ui-core/src/runs/RunPoolsDialog.tsx
new file mode 100644
index 0000000000000..eaa3be537ea11
--- /dev/null
+++ b/js_modules/dagster-ui/packages/ui-core/src/runs/RunPoolsDialog.tsx
@@ -0,0 +1,28 @@
+import {Box, Button, Dialog, DialogFooter} from '@dagster-io/ui-components';
+
+import {PoolTag} from '../instance/PoolTag';
+
+export const RunPoolsDialog = ({
+  isOpen,
+  onClose,
+  pools,
+}: {
+  isOpen: boolean;
+  onClose: () => void;
+  pools: string[];
+}) => {
+  return (
+    <Dialog isOpen={isOpen} onClose={onClose} canOutsideClickClose canEscapeKeyClose title="Pools">
+      <Box margin={{horizontal: 24, vertical: 12}} flex={{gap: 12}}>
+        {pools.map((pool) => (
+          <PoolTag key={pool} pool={pool} />
+        ))}
+      </Box>
+      <DialogFooter topBorder>
+        <Button onClick={onClose} intent="primary">
+          Close
+        </Button>
+      </DialogFooter>
+    </Dialog>
+  );
+};
diff --git a/js_modules/dagster-ui/packages/ui-core/src/runs/__tests__/types/RunActionButtonsTestQuery.types.ts b/js_modules/dagster-ui/packages/ui-core/src/runs/__tests__/types/RunActionButtonsTestQuery.types.ts
index cc5a89e67c1fb..ff9885c7181d3 100644
--- a/js_modules/dagster-ui/packages/ui-core/src/runs/__tests__/types/RunActionButtonsTestQuery.types.ts
+++ b/js_modules/dagster-ui/packages/ui-core/src/runs/__tests__/types/RunActionButtonsTestQuery.types.ts
@@ -14,6 +14,7 @@ export type RunActionButtonsTestQuery = {
         parentPipelineSnapshotId: string | null;
         runConfigYaml: string;
         canTerminate: boolean;
+        allConcurrencyKeys: Array<string> | null;
         hasReExecutePermission: boolean;
         hasTerminatePermission: boolean;
         hasDeletePermission: boolean;
@@ -60,4 +61,4 @@ export type RunActionButtonsTestQuery = {
     | {__typename: 'RunNotFoundError'};
 };
 
-export const RunActionButtonsTestQueryVersion = '5d358c3360e683549b885108c3dbb7c1d21d8afd790a5ee963e6e9640ccdbfe8';
+export const RunActionButtonsTestQueryVersion = 'dc4d3b53b887955782addbab7ce79b551014d44bc7646e4932a022280cc0c185';
diff --git a/js_modules/dagster-ui/packages/ui-core/src/runs/types/RunFragments.types.ts b/js_modules/dagster-ui/packages/ui-core/src/runs/types/RunFragments.types.ts
index e75aab9ccde18..2988f8313cd20 100644
--- a/js_modules/dagster-ui/packages/ui-core/src/runs/types/RunFragments.types.ts
+++ b/js_modules/dagster-ui/packages/ui-core/src/runs/types/RunFragments.types.ts
@@ -7,6 +7,7 @@ export type RunFragment = {
   id: string;
   runConfigYaml: string;
   canTerminate: boolean;
+  allConcurrencyKeys: Array<string> | null;
   hasReExecutePermission: boolean;
   hasTerminatePermission: boolean;
   hasDeletePermission: boolean;
@@ -3135,6 +3136,7 @@ export type RunPageFragment = {
   parentPipelineSnapshotId: string | null;
   runConfigYaml: string;
   canTerminate: boolean;
+  allConcurrencyKeys: Array<string> | null;
   hasReExecutePermission: boolean;
   hasTerminatePermission: boolean;
   hasDeletePermission: boolean;
diff --git a/js_modules/dagster-ui/packages/ui-core/src/runs/types/RunRoot.types.ts b/js_modules/dagster-ui/packages/ui-core/src/runs/types/RunRoot.types.ts
index 8c196998cc90a..f52c37846a81b 100644
--- a/js_modules/dagster-ui/packages/ui-core/src/runs/types/RunRoot.types.ts
+++ b/js_modules/dagster-ui/packages/ui-core/src/runs/types/RunRoot.types.ts
@@ -16,6 +16,7 @@ export type RunRootQuery = {
         parentPipelineSnapshotId: string | null;
         runConfigYaml: string;
         canTerminate: boolean;
+        allConcurrencyKeys: Array<string> | null;
         hasReExecutePermission: boolean;
         hasTerminatePermission: boolean;
         hasDeletePermission: boolean;
@@ -62,4 +63,4 @@ export type RunRootQuery = {
     | {__typename: 'RunNotFoundError'};
 };
 
-export const RunRootQueryVersion = '4f2633b31ddc71c08d3a985be30dc1bf21fbc462287554f165060c51a3554beb';
+export const RunRootQueryVersion = '1da9ea08b905f4749f7941abf4a51cbcba78cd150d77f02345c8467abb497257';