diff --git a/js_modules/dagster-ui/packages/ui-components/src/components/CursorControls.tsx b/js_modules/dagster-ui/packages/ui-components/src/components/CursorControls.tsx
index 06e85da63b8be..1ae09c970a966 100644
--- a/js_modules/dagster-ui/packages/ui-components/src/components/CursorControls.tsx
+++ b/js_modules/dagster-ui/packages/ui-components/src/components/CursorControls.tsx
@@ -4,6 +4,7 @@ import {Button} from './Button';
import {Icon} from './Icon';
export interface CursorPaginationProps {
+ cursor?: string;
hasPrevCursor: boolean;
hasNextCursor: boolean;
popCursor: () => void;
diff --git a/js_modules/dagster-ui/packages/ui-core/client.json b/js_modules/dagster-ui/packages/ui-core/client.json
index 8e9e8ae0c4b40..de992f056747a 100644
--- a/js_modules/dagster-ui/packages/ui-core/client.json
+++ b/js_modules/dagster-ui/packages/ui-core/client.json
@@ -21,7 +21,8 @@
"RunStatusOnlyQuery": "e0000c8f2600dbe29f305febb04cca005e08da6a7ce03ec20476c59d607495c0",
"AutomaterializeRunsQuery": "213e0a8e4d88de599b4740ba7d0d4bfac14defebcc8f3813eecc13696b9f17d9",
"FullPartitionsQuery": "bfe939600c7396798b3c92b0e8335e639c9d76479c1cecaabc309a83c8f7ca4d",
- "GetEvaluationsQuery": "22cc08d87eec75cfec1f054f4d222b5a2478c47fc1a6788024d5902e3b7db197",
+ "GetEvaluationsQuery": "ffbe804f3dcaaf3923223096d1cd5cdd39773945fe75045d131e0144bee5c3d9",
+ "GetSlimEvaluationsQuery": "040bf5d6f79ce3c06d75f4410e5386df795c546f10d3180e3ee7cb3ddac949e3",
"GetEvaluationsSpecificPartitionQuery": "7c47ec6fee7ebf9edf6c5d57294f5a603e6a599884841eb211a1de9422c3791c",
"PartitionSubsetListQuery": "9a560790b6c1828137f31532f5879cfb6611d9ca8c14b7f315464510b6a4bd75",
"AutoMaterializeSensorFlag": "961162c030e7e3c35be91db37c1990ad31b53cb8225d216fece2bdc2a6210bce",
diff --git a/js_modules/dagster-ui/packages/ui-core/src/assets/AssetView.tsx b/js_modules/dagster-ui/packages/ui-core/src/assets/AssetView.tsx
index 4e0e1888700b7..3e00784ac5b30 100644
--- a/js_modules/dagster-ui/packages/ui-core/src/assets/AssetView.tsx
+++ b/js_modules/dagster-ui/packages/ui-core/src/assets/AssetView.tsx
@@ -15,7 +15,7 @@ import {AssetPartitions} from './AssetPartitions';
import {AssetPlotsPage} from './AssetPlotsPage';
import {AssetTabs} from './AssetTabs';
import {useAllAssets} from './AssetsCatalogTable';
-import {AssetAutomaterializePolicyPage} from './AutoMaterializePolicyPage/AssetAutomaterializePolicyPage';
+import {AssetAutomationRoot} from './AutoMaterializePolicyPage/AssetAutomationRoot';
import {ChangedReasonsTag} from './ChangedReasons';
import {LaunchAssetExecutionButton} from './LaunchAssetExecutionButton';
import {UNDERLYING_OPS_ASSET_NODE_FRAGMENT} from './UnderlyingOpsOrGraph';
@@ -23,17 +23,17 @@ import {AssetChecks} from './asset-checks/AssetChecks';
import {assetDetailsPathForKey} from './assetDetailsPathForKey';
import {AssetNodeOverview, AssetNodeOverviewNonSDA} from './overview/AssetNodeOverview';
import {AssetKey, AssetViewParams} from './types';
+import {healthRefreshHintFromLiveData} from './usePartitionHealthData';
+import {useReportEventsModal} from './useReportEventsModal';
+import {useWipeModal} from './useWipeModal';
+import {gql, useQuery} from '../apollo-client';
+import {AssetTableDefinitionFragment} from './types/AssetTableFragment.types';
import {
AssetViewDefinitionNodeFragment,
AssetViewDefinitionQuery,
AssetViewDefinitionQueryVariables,
} from './types/AssetView.types';
import {useDeleteDynamicPartitionsDialog} from './useDeleteDynamicPartitionsDialog';
-import {healthRefreshHintFromLiveData} from './usePartitionHealthData';
-import {useReportEventsModal} from './useReportEventsModal';
-import {useWipeModal} from './useWipeModal';
-import {gql, useQuery} from '../apollo-client';
-import {AssetTableDefinitionFragment} from './types/AssetTableFragment.types';
import {currentPageAtom} from '../app/analytics';
import {Timestamp} from '../app/time/Timestamp';
import {AssetLiveDataRefreshButton, useAssetLiveData} from '../asset-data/AssetLiveDataProvider';
@@ -221,7 +221,8 @@ export const AssetView = ({assetKey, headerBreadcrumbs, writeAssetVisit, current
if (isLoading) {
return ;
}
- return ;
+
+ return ;
};
const renderChecksTab = () => {
diff --git a/js_modules/dagster-ui/packages/ui-core/src/assets/AutoMaterializePolicyPage/AssetAutomaterializePolicyPage.tsx b/js_modules/dagster-ui/packages/ui-core/src/assets/AutoMaterializePolicyPage/AssetAutomaterializePolicyPage.tsx
index 70b3570890991..dbb5f4833e14c 100644
--- a/js_modules/dagster-ui/packages/ui-core/src/assets/AutoMaterializePolicyPage/AssetAutomaterializePolicyPage.tsx
+++ b/js_modules/dagster-ui/packages/ui-core/src/assets/AutoMaterializePolicyPage/AssetAutomaterializePolicyPage.tsx
@@ -22,24 +22,10 @@ export const AssetAutomaterializePolicyPage = ({
assetKey: AssetKey;
definition?: AssetViewDefinitionNodeFragment | null;
}) => {
- const {queryResult, paginationProps} = useEvaluationsQueryResult({assetKey});
+ const {queryResult, evaluations, paginationProps} = useEvaluationsQueryResult({assetKey});
useQueryRefreshAtInterval(queryResult, FIFTEEN_SECONDS);
- const evaluations = useMemo(() => {
- if (
- queryResult.data?.assetConditionEvaluationRecordsOrError?.__typename ===
- 'AssetConditionEvaluationRecords' &&
- queryResult.data?.assetNodeOrError?.__typename === 'AssetNode'
- ) {
- return queryResult.data?.assetConditionEvaluationRecordsOrError.records;
- }
- return [];
- }, [
- queryResult.data?.assetConditionEvaluationRecordsOrError,
- queryResult.data?.assetNodeOrError,
- ]);
-
const isFirstPage = !paginationProps.hasPrevCursor;
const [selectedEvaluationId, setSelectedEvaluationId] = useQueryPersistedState<
diff --git a/js_modules/dagster-ui/packages/ui-core/src/assets/AutoMaterializePolicyPage/AssetAutomationRoot.tsx b/js_modules/dagster-ui/packages/ui-core/src/assets/AutoMaterializePolicyPage/AssetAutomationRoot.tsx
new file mode 100644
index 0000000000000..4052d069a05b8
--- /dev/null
+++ b/js_modules/dagster-ui/packages/ui-core/src/assets/AutoMaterializePolicyPage/AssetAutomationRoot.tsx
@@ -0,0 +1,72 @@
+import {
+ Box,
+ CursorHistoryControls,
+ NonIdealState,
+ SpinnerWithText,
+} from '@dagster-io/ui-components';
+import {useEffect, useRef} from 'react';
+
+import {useEvaluationsQueryResult} from './useEvaluationsQueryResult';
+import {FIFTEEN_SECONDS, useQueryRefreshAtInterval} from '../../app/QueryRefresh';
+import {AssetKey} from '../types';
+import {EvaluationList} from './EvaluationList';
+import {AssetViewDefinitionNodeFragment} from '../types/AssetView.types';
+
+interface Props {
+ assetKey: AssetKey;
+ definition: AssetViewDefinitionNodeFragment | null;
+}
+
+export const AssetAutomationRoot = ({assetKey, definition}: Props) => {
+ const {queryResult, evaluations, paginationProps} = useEvaluationsQueryResult({assetKey});
+ const {data, loading} = queryResult;
+
+ const scrollRef = useRef(null);
+
+ // When paginating, reset scroll to top.
+ useEffect(() => {
+ if (scrollRef.current) {
+ scrollRef.current.scrollTo({top: 0, behavior: 'instant'});
+ }
+ }, [paginationProps.cursor]);
+
+ useQueryRefreshAtInterval(queryResult, FIFTEEN_SECONDS);
+
+ if (loading && !data) {
+ return (
+
+
+
+ );
+ }
+
+ if (!definition) {
+ return (
+
+
+
+ );
+ }
+
+ return (
+ <>
+
+
+
+
+
+
+ >
+ );
+};
diff --git a/js_modules/dagster-ui/packages/ui-core/src/assets/AutoMaterializePolicyPage/EvaluationDetailDialog.tsx b/js_modules/dagster-ui/packages/ui-core/src/assets/AutoMaterializePolicyPage/EvaluationDetailDialog.tsx
index b5008856ce22a..a2f9651e00bb0 100644
--- a/js_modules/dagster-ui/packages/ui-core/src/assets/AutoMaterializePolicyPage/EvaluationDetailDialog.tsx
+++ b/js_modules/dagster-ui/packages/ui-core/src/assets/AutoMaterializePolicyPage/EvaluationDetailDialog.tsx
@@ -10,10 +10,13 @@ import {
} from '@dagster-io/ui-components';
import {ReactNode, useState} from 'react';
-import {GET_EVALUATIONS_QUERY} from './GetEvaluationsQuery';
+import {GET_SLIM_EVALUATIONS_QUERY} from './GetEvaluationsQuery';
import {PartitionTagSelector} from './PartitionTagSelector';
import {QueryfulEvaluationDetailTable} from './QueryfulEvaluationDetailTable';
-import {GetEvaluationsQuery, GetEvaluationsQueryVariables} from './types/GetEvaluationsQuery.types';
+import {
+ GetSlimEvaluationsQuery,
+ GetSlimEvaluationsQueryVariables,
+} from './types/GetEvaluationsQuery.types';
import {usePartitionsForAssetKey} from './usePartitionsForAssetKey';
import {useQuery} from '../../apollo-client';
import {DEFAULT_TIME_FORMAT} from '../../app/time/TimestampFormat';
@@ -21,18 +24,26 @@ import {TimestampDisplay} from '../../schedules/TimestampDisplay';
interface Props {
isOpen: boolean;
- setIsOpen: (isOpen: boolean) => void;
+ onClose: () => void;
assetKeyPath: string[];
+ assetCheckName?: string;
evaluationID: string;
}
-export const EvaluationDetailDialog = ({isOpen, setIsOpen, evaluationID, assetKeyPath}: Props) => {
+export const EvaluationDetailDialog = ({
+ isOpen,
+ onClose,
+ evaluationID,
+ assetKeyPath,
+ assetCheckName,
+}: Props) => {
return (
-