diff --git a/js_modules/dagster-ui/packages/ui-core/src/asset-graph/ComputeGraphData.ts b/js_modules/dagster-ui/packages/ui-core/src/asset-graph/ComputeGraphData.ts index 2de03720cdfbf..57bd5e0e944ea 100644 --- a/js_modules/dagster-ui/packages/ui-core/src/asset-graph/ComputeGraphData.ts +++ b/js_modules/dagster-ui/packages/ui-core/src/asset-graph/ComputeGraphData.ts @@ -4,7 +4,7 @@ import {ComputeGraphDataMessageType} from './ComputeGraphData.types'; import {GraphData, buildGraphData, toGraphId} from './Utils'; import {AssetNodeForGraphQueryFragment} from './types/useAssetGraphData.types'; import {GraphDataState} from './useAssetGraphData'; -import {filterAssetSelectionByQuery} from '../asset-selection/AntlrAssetSelection'; +import {filterAssetSelectionByQuery} from '../asset-selection/filterAssetSelectionByQuery'; import {doesFilterArrayMatchValueArray} from '../ui/Filters/doesFilterArrayMatchValueArray'; export function computeGraphData({ @@ -13,6 +13,7 @@ export function computeGraphData({ opsQuery, kinds: _kinds, hideEdgesToNodesOutsideQuery, + supplementaryData, }: Omit): GraphDataState { if (repoFilteredNodes === undefined || graphQueryItems === undefined) { return { @@ -26,7 +27,11 @@ export function computeGraphData({ // In the future it might be ideal to move this server-side, but we currently // get to leverage the useQuery cache almost 100% of the time above, making this // super fast after the first load vs a network fetch on every page view. - const {all: allFilteredByOpQuery} = filterAssetSelectionByQuery(graphQueryItems, opsQuery); + const {all: allFilteredByOpQuery} = filterAssetSelectionByQuery( + graphQueryItems, + opsQuery, + supplementaryData, + ); const kinds = _kinds?.map((c) => c.toLowerCase()); const all = kinds?.length ? allFilteredByOpQuery.filter( diff --git a/js_modules/dagster-ui/packages/ui-core/src/asset-graph/ComputeGraphData.types.ts b/js_modules/dagster-ui/packages/ui-core/src/asset-graph/ComputeGraphData.types.ts index b6355727ac6d1..e47c18a0946ca 100644 --- a/js_modules/dagster-ui/packages/ui-core/src/asset-graph/ComputeGraphData.types.ts +++ b/js_modules/dagster-ui/packages/ui-core/src/asset-graph/ComputeGraphData.types.ts @@ -1,3 +1,4 @@ +import {AssetKey} from '../assets/types'; import {AssetNodeForGraphQueryFragment} from './types/useAssetGraphData.types'; import {AssetGraphFetchScope, AssetGraphQueryItem} from './useAssetGraphData'; @@ -13,6 +14,7 @@ export type ComputeGraphDataMessageType = BaseType & { opsQuery: string; kinds: AssetGraphFetchScope['kinds']; hideEdgesToNodesOutsideQuery?: boolean; + supplementaryData?: Record | null; }; export type BuildGraphDataMessageType = BaseType & { diff --git a/js_modules/dagster-ui/packages/ui-core/src/asset-graph/useAssetGraphData.tsx b/js_modules/dagster-ui/packages/ui-core/src/asset-graph/useAssetGraphData.tsx index 9f04afd587172..bbe101e3ff9d9 100644 --- a/js_modules/dagster-ui/packages/ui-core/src/asset-graph/useAssetGraphData.tsx +++ b/js_modules/dagster-ui/packages/ui-core/src/asset-graph/useAssetGraphData.tsx @@ -3,6 +3,7 @@ import memoize from 'lodash/memoize'; import reject from 'lodash/reject'; import {useEffect, useMemo, useRef, useState} from 'react'; import {FeatureFlag} from 'shared/app/FeatureFlags.oss'; +import {useAssetGraphSupplementaryData} from 'shared/asset-graph/useAssetGraphSupplementaryData.oss'; import {ASSET_NODE_FRAGMENT} from './AssetNode'; import {GraphData, buildGraphData as buildGraphDataImpl, tokenForAssetKey} from './Utils'; @@ -160,8 +161,11 @@ export function useAssetGraphData(opsQuery: string, options: AssetGraphFetchScop const lastProcessedRequestRef = useRef(0); const currentRequestRef = useRef(0); + const {loading: supplementaryDataLoading, data: supplementaryData} = + useAssetGraphSupplementaryData(opsQuery); + useEffect(() => { - if (options.loading) { + if (options.loading || supplementaryDataLoading) { return; } const requestId = ++currentRequestRef.current; @@ -173,6 +177,7 @@ export function useAssetGraphData(opsQuery: string, options: AssetGraphFetchScop kinds, hideEdgesToNodesOutsideQuery, flagSelectionSyntax: featureEnabled(FeatureFlag.flagSelectionSyntax), + supplementaryData, }) ?.then((data) => { if (lastProcessedRequestRef.current < requestId) { @@ -197,6 +202,8 @@ export function useAssetGraphData(opsQuery: string, options: AssetGraphFetchScop kinds, hideEdgesToNodesOutsideQuery, options.loading, + supplementaryData, + supplementaryDataLoading, ]); const loading = fetchResult.loading || graphDataLoading; diff --git a/js_modules/dagster-ui/packages/ui-core/src/asset-graph/useAssetGraphSupplementaryData.oss.tsx b/js_modules/dagster-ui/packages/ui-core/src/asset-graph/useAssetGraphSupplementaryData.oss.tsx new file mode 100644 index 0000000000000..e735f01e11840 --- /dev/null +++ b/js_modules/dagster-ui/packages/ui-core/src/asset-graph/useAssetGraphSupplementaryData.oss.tsx @@ -0,0 +1,13 @@ +import {AssetKey} from '../assets/types'; + +export type SupplementaryInformation = Record | null | undefined; + +// Stub for cloud to supply extended selection syntax filtering capabilities +export const useAssetGraphSupplementaryData = ( + _: string, +): {loading: boolean; data: SupplementaryInformation | null} => { + return { + loading: false, + data: null, + }; +}; diff --git a/js_modules/dagster-ui/packages/ui-core/src/asset-selection/AntlrAssetSelectionVisitor.ts b/js_modules/dagster-ui/packages/ui-core/src/asset-selection/AntlrAssetSelectionVisitor.oss.ts similarity index 85% rename from js_modules/dagster-ui/packages/ui-core/src/asset-selection/AntlrAssetSelectionVisitor.ts rename to js_modules/dagster-ui/packages/ui-core/src/asset-selection/AntlrAssetSelectionVisitor.oss.ts index 042ec47fe500a..59e0409582c51 100644 --- a/js_modules/dagster-ui/packages/ui-core/src/asset-selection/AntlrAssetSelectionVisitor.ts +++ b/js_modules/dagster-ui/packages/ui-core/src/asset-selection/AntlrAssetSelectionVisitor.oss.ts @@ -1,14 +1,13 @@ import {AbstractParseTreeVisitor} from 'antlr4ts/tree/AbstractParseTreeVisitor'; - +import {SupplementaryInformation} from 'shared/asset-graph/useAssetGraphSupplementaryData.oss'; import { AllExpressionContext, AndExpressionContext, + AssetSelectionVisitor, AttributeExpressionContext, CodeLocationAttributeExprContext, - DownTraversalContext, DownTraversalExpressionContext, FunctionCallExpressionContext, - FunctionNameContext, GroupAttributeExprContext, KeyExprContext, KeySubstringExprContext, @@ -21,43 +20,14 @@ import { TagAttributeExprContext, TraversalAllowedExpressionContext, UpAndDownTraversalExpressionContext, - UpTraversalContext, UpTraversalExpressionContext, - ValueContext, -} from './generated/AssetSelectionParser'; -import {AssetSelectionVisitor} from './generated/AssetSelectionVisitor'; +} from 'shared/asset-selection/AssetSelectionAntlr.oss'; + +import {getFunctionName, getTraversalDepth, getValue} from './util'; import {GraphTraverser} from '../app/GraphQueryImpl'; import {AssetGraphQueryItem} from '../asset-graph/useAssetGraphData'; import {buildRepoPathForHuman} from '../workspace/buildRepoAddress'; -export function getTraversalDepth(ctx: UpTraversalContext | DownTraversalContext): number { - const digits = ctx.DIGITS(); - if (digits) { - return parseInt(ctx.text); - } - return Number.MAX_SAFE_INTEGER; -} - -export function getFunctionName(ctx: FunctionNameContext): string { - if (ctx.SINKS()) { - return 'sinks'; - } - if (ctx.ROOTS()) { - return 'roots'; - } - throw new Error('Invalid function name'); -} - -export function getValue(ctx: ValueContext): string { - if (ctx.QUOTED_STRING()) { - return ctx.text.slice(1, -1); - } - if (ctx.UNQUOTED_STRING()) { - return ctx.text; - } - throw new Error('Invalid value'); -} - export class AntlrAssetSelectionVisitor extends AbstractParseTreeVisitor> implements AssetSelectionVisitor> @@ -70,7 +40,8 @@ export class AntlrAssetSelectionVisitor return new Set(); } - constructor(all_assets: AssetGraphQueryItem[]) { + // Supplementary data is not used in oss + constructor(all_assets: AssetGraphQueryItem[], _supplementaryData?: SupplementaryInformation) { super(); this.all_assets = new Set(all_assets); this.focus_assets = new Set(); @@ -192,15 +163,15 @@ export class AntlrAssetSelectionVisitor visitTagAttributeExpr(ctx: TagAttributeExprContext) { const key: string = getValue(ctx.value(0)); + let value: string | undefined = undefined; if (ctx.EQUAL()) { - const value: string = getValue(ctx.value(1)); - return new Set( - [...this.all_assets].filter((i) => - i.node.tags.some((t) => t.key === key && t.value === value), - ), - ); + value = getValue(ctx.value(1)); } - return new Set([...this.all_assets].filter((i) => i.node.tags.some((t) => t.key === key))); + return new Set( + [...this.all_assets].filter((i) => + i.node.tags.some((t) => t.key === key && (!value || t.value === value)), + ), + ); } visitOwnerAttributeExpr(ctx: OwnerAttributeExprContext) { diff --git a/js_modules/dagster-ui/packages/ui-core/src/asset-selection/AssetSelectionAntlr.oss.ts b/js_modules/dagster-ui/packages/ui-core/src/asset-selection/AssetSelectionAntlr.oss.ts new file mode 100644 index 0000000000000..f3de1b7f878c9 --- /dev/null +++ b/js_modules/dagster-ui/packages/ui-core/src/asset-selection/AssetSelectionAntlr.oss.ts @@ -0,0 +1,4 @@ +export * from './generated/AssetSelectionLexer'; +export * from './generated/AssetSelectionParser'; +export * from './generated/AssetSelectionVisitor'; +export * from './generated/AssetSelectionListener'; diff --git a/js_modules/dagster-ui/packages/ui-core/src/asset-selection/__tests__/AntlrAssetSelection.test.ts b/js_modules/dagster-ui/packages/ui-core/src/asset-selection/__tests__/AntlrAssetSelection.test.ts index bf95679748bd8..b641607ffed44 100644 --- a/js_modules/dagster-ui/packages/ui-core/src/asset-selection/__tests__/AntlrAssetSelection.test.ts +++ b/js_modules/dagster-ui/packages/ui-core/src/asset-selection/__tests__/AntlrAssetSelection.test.ts @@ -7,7 +7,7 @@ import { buildRepositoryLocation, buildUserAssetOwner, } from '../../graphql/types'; -import {parseAssetSelectionQuery} from '../AntlrAssetSelection'; +import {parseAssetSelectionQuery} from '../filterAssetSelectionByQuery'; const TEST_GRAPH: AssetGraphQueryItem[] = [ // Top Layer @@ -53,7 +53,6 @@ const TEST_GRAPH: AssetGraphQueryItem[] = [ function assertQueryResult(query: string, expectedNames: string[]) { const result = parseAssetSelectionQuery(TEST_GRAPH, query); - expect(result).not.toBeInstanceOf(Error); if (result instanceof Error) { throw result; } diff --git a/js_modules/dagster-ui/packages/ui-core/src/asset-selection/AntlrAssetSelection.ts b/js_modules/dagster-ui/packages/ui-core/src/asset-selection/filterAssetSelectionByQuery.ts similarity index 76% rename from js_modules/dagster-ui/packages/ui-core/src/asset-selection/AntlrAssetSelection.ts rename to js_modules/dagster-ui/packages/ui-core/src/asset-selection/filterAssetSelectionByQuery.ts index 18cf3ba18b104..81d176749fc28 100644 --- a/js_modules/dagster-ui/packages/ui-core/src/asset-selection/AntlrAssetSelection.ts +++ b/js_modules/dagster-ui/packages/ui-core/src/asset-selection/filterAssetSelectionByQuery.ts @@ -6,14 +6,17 @@ import { Recognizer, } from 'antlr4ts'; import {FeatureFlag} from 'shared/app/FeatureFlags.oss'; +import {SupplementaryInformation} from 'shared/asset-graph/useAssetGraphSupplementaryData.oss'; +import {AntlrAssetSelectionVisitor} from 'shared/asset-selection/AntlrAssetSelectionVisitor.oss'; +import { + AssetSelectionLexer, + AssetSelectionParser, +} from 'shared/asset-selection/AssetSelectionAntlr.oss'; -import {AntlrAssetSelectionVisitor} from './AntlrAssetSelectionVisitor'; -import {AssetGraphQueryItem} from '../asset-graph/useAssetGraphData'; -import {weakMapMemoize} from '../util/weakMapMemoize'; -import {AssetSelectionLexer} from './generated/AssetSelectionLexer'; -import {AssetSelectionParser} from './generated/AssetSelectionParser'; import {featureEnabled} from '../app/Flags'; import {filterByQuery} from '../app/GraphQueryImpl'; +import {AssetGraphQueryItem} from '../asset-graph/useAssetGraphData'; +import {weakMapMemoize} from '../util/weakMapMemoize'; export class AntlrInputErrorListener implements ANTLRErrorListener { syntaxError( @@ -39,6 +42,7 @@ type AssetSelectionQueryResult = { export const parseAssetSelectionQuery = ( all_assets: AssetGraphQueryItem[], query: string, + supplementaryData?: SupplementaryInformation, ): AssetSelectionQueryResult | Error => { try { const lexer = new AssetSelectionLexer(CharStreams.fromString(query)); @@ -53,7 +57,8 @@ export const parseAssetSelectionQuery = ( const tree = parser.start(); - const visitor = new AntlrAssetSelectionVisitor(all_assets); + const visitor = new AntlrAssetSelectionVisitor(all_assets, supplementaryData); + const all_selection = visitor.visit(tree); const focus_selection = visitor.focus_assets; @@ -67,9 +72,13 @@ export const parseAssetSelectionQuery = ( }; export const filterAssetSelectionByQuery = weakMapMemoize( - (all_assets: AssetGraphQueryItem[], query: string): AssetSelectionQueryResult => { + ( + all_assets: AssetGraphQueryItem[], + query: string, + supplementaryData: SupplementaryInformation, + ): AssetSelectionQueryResult => { if (featureEnabled(FeatureFlag.flagSelectionSyntax)) { - const result = parseAssetSelectionQuery(all_assets, query); + const result = parseAssetSelectionQuery(all_assets, query, supplementaryData); if (result instanceof Error) { // fall back to old behavior return filterByQuery(all_assets, query); diff --git a/js_modules/dagster-ui/packages/ui-core/src/asset-selection/input/AssetSelectionInput.oss.tsx b/js_modules/dagster-ui/packages/ui-core/src/asset-selection/input/AssetSelectionInput.oss.tsx index b218a252f6b7a..b6d97be0253df 100644 --- a/js_modules/dagster-ui/packages/ui-core/src/asset-selection/input/AssetSelectionInput.oss.tsx +++ b/js_modules/dagster-ui/packages/ui-core/src/asset-selection/input/AssetSelectionInput.oss.tsx @@ -1,5 +1,9 @@ import {Icons} from '@dagster-io/ui-components'; import {useMemo} from 'react'; +import { + AssetSelectionLexer, + AssetSelectionParser, +} from 'shared/asset-selection/AssetSelectionAntlr.oss'; import styled from 'styled-components'; import {assertUnreachable} from '../../app/Util'; @@ -8,8 +12,6 @@ import {SelectionAutoCompleteInput, iconStyle} from '../../selection/SelectionAu import {createSelectionLinter} from '../../selection/createSelectionLinter'; import {placeholderTextForItems} from '../../ui/GraphQueryInput'; import {buildRepoPathForHuman} from '../../workspace/buildRepoAddress'; -import {AssetSelectionLexer} from '../generated/AssetSelectionLexer'; -import {AssetSelectionParser} from '../generated/AssetSelectionParser'; import 'codemirror/addon/edit/closebrackets'; import 'codemirror/lib/codemirror.css'; @@ -30,66 +32,7 @@ const FUNCTIONS = ['sinks', 'roots']; const linter = createSelectionLinter({Lexer: AssetSelectionLexer, Parser: AssetSelectionParser}); export const AssetSelectionInput = ({value, onChange, assets}: AssetSelectionInputProps) => { - const attributesMap = useMemo(() => { - const assetNamesSet: Set = new Set(); - const tagNamesSet: Set = new Set(); - const ownersSet: Set = new Set(); - const groupsSet: Set = new Set(); - const kindsSet: Set = new Set(); - const codeLocationSet: Set = new Set(); - - assets.forEach((asset) => { - assetNamesSet.add(asset.name); - asset.node.tags.forEach((tag) => { - if (tag.key && tag.value) { - // We add quotes around the equal sign here because the auto-complete suggestion already wraps the entire value in quotes. - // So wer end up with tag:"key"="value" as the final suggestion - tagNamesSet.add(`${tag.key}"="${tag.value}`); - } else { - tagNamesSet.add(tag.key); - } - }); - asset.node.owners.forEach((owner) => { - switch (owner.__typename) { - case 'TeamAssetOwner': - ownersSet.add(owner.team); - break; - case 'UserAssetOwner': - ownersSet.add(owner.email); - break; - default: - assertUnreachable(owner); - } - }); - if (asset.node.groupName) { - groupsSet.add(asset.node.groupName); - } - asset.node.kinds.forEach((kind) => { - kindsSet.add(kind); - }); - const location = buildRepoPathForHuman( - asset.node.repository.name, - asset.node.repository.location.name, - ); - codeLocationSet.add(location); - }); - - const assetNames = Array.from(assetNamesSet); - const tagNames = Array.from(tagNamesSet); - const owners = Array.from(ownersSet); - const groups = Array.from(groupsSet); - const kinds = Array.from(kindsSet); - const codeLocations = Array.from(codeLocationSet); - - return { - key: assetNames, - tag: tagNames, - owner: owners, - group: groups, - kind: kinds, - code_location: codeLocations, - }; - }, [assets]); + const attributesMap = useMemo(() => getAttributesMap(assets), [assets]); return ( @@ -107,7 +50,68 @@ export const AssetSelectionInput = ({value, onChange, assets}: AssetSelectionInp ); }; -const WrapperDiv = styled.div` +export const getAttributesMap = (assets: AssetGraphQueryItem[]) => { + const assetNamesSet: Set = new Set(); + const tagNamesSet: Set = new Set(); + const ownersSet: Set = new Set(); + const groupsSet: Set = new Set(); + const kindsSet: Set = new Set(); + const codeLocationSet: Set = new Set(); + + assets.forEach((asset) => { + assetNamesSet.add(asset.name); + asset.node.tags.forEach((tag) => { + if (tag.key && tag.value) { + // We add quotes around the equal sign here because the auto-complete suggestion already wraps the entire value in quotes. + // So wer end up with tag:"key"="value" as the final suggestion + tagNamesSet.add(`${tag.key}"="${tag.value}`); + } else { + tagNamesSet.add(tag.key); + } + }); + asset.node.owners.forEach((owner) => { + switch (owner.__typename) { + case 'TeamAssetOwner': + ownersSet.add(owner.team); + break; + case 'UserAssetOwner': + ownersSet.add(owner.email); + break; + default: + assertUnreachable(owner); + } + }); + if (asset.node.groupName) { + groupsSet.add(asset.node.groupName); + } + asset.node.kinds.forEach((kind) => { + kindsSet.add(kind); + }); + const location = buildRepoPathForHuman( + asset.node.repository.name, + asset.node.repository.location.name, + ); + codeLocationSet.add(location); + }); + + const assetNames = Array.from(assetNamesSet); + const tagNames = Array.from(tagNamesSet); + const owners = Array.from(ownersSet); + const groups = Array.from(groupsSet); + const kinds = Array.from(kindsSet); + const codeLocations = Array.from(codeLocationSet); + + return { + key: assetNames, + tag: tagNames, + owner: owners, + group: groups, + kind: kinds, + code_location: codeLocations, + }; +}; + +export const WrapperDiv = styled.div` .attribute-owner { ${iconStyle(Icons.owner.src)}; } diff --git a/js_modules/dagster-ui/packages/ui-core/src/asset-selection/util.ts b/js_modules/dagster-ui/packages/ui-core/src/asset-selection/util.ts new file mode 100644 index 0000000000000..7888cb59972e1 --- /dev/null +++ b/js_modules/dagster-ui/packages/ui-core/src/asset-selection/util.ts @@ -0,0 +1,34 @@ +import { + DownTraversalContext, + FunctionNameContext, + UpTraversalContext, + ValueContext, +} from 'shared/asset-selection/AssetSelectionAntlr.oss'; + +export function getTraversalDepth(ctx: UpTraversalContext | DownTraversalContext): number { + const digits = ctx.DIGITS(); + if (digits) { + return parseInt(ctx.text); + } + return Number.MAX_SAFE_INTEGER; +} + +export function getFunctionName(ctx: FunctionNameContext): string { + if (ctx.SINKS()) { + return 'sinks'; + } + if (ctx.ROOTS()) { + return 'roots'; + } + throw new Error('Invalid function name'); +} + +export function getValue(ctx: ValueContext): string { + if (ctx.QUOTED_STRING()) { + return ctx.text.slice(1, -1); + } + if (ctx.UNQUOTED_STRING()) { + return ctx.text; + } + throw new Error('Invalid value'); +} diff --git a/js_modules/dagster-ui/packages/ui-core/src/op-selection/AntlrOpSelection.ts b/js_modules/dagster-ui/packages/ui-core/src/op-selection/AntlrOpSelection.ts index 66ded3812952b..b400a495fe00a 100644 --- a/js_modules/dagster-ui/packages/ui-core/src/op-selection/AntlrOpSelection.ts +++ b/js_modules/dagster-ui/packages/ui-core/src/op-selection/AntlrOpSelection.ts @@ -3,7 +3,7 @@ import {FeatureFlag} from 'shared/app/FeatureFlags.oss'; import {AntlrOpSelectionVisitor} from './AntlrOpSelectionVisitor'; import {GraphQueryItem, filterByQuery} from '../app/GraphQueryImpl'; -import {AntlrInputErrorListener} from '../asset-selection/AntlrAssetSelection'; +import {AntlrInputErrorListener} from '../asset-selection/filterAssetSelectionByQuery'; import {OpSelectionLexer} from './generated/OpSelectionLexer'; import {OpSelectionParser} from './generated/OpSelectionParser'; import {featureEnabled} from '../app/Flags'; diff --git a/js_modules/dagster-ui/packages/ui-core/src/op-selection/AntlrOpSelectionVisitor.ts b/js_modules/dagster-ui/packages/ui-core/src/op-selection/AntlrOpSelectionVisitor.ts index 84f838951c1bd..d3e9a0e2fc6c2 100644 --- a/js_modules/dagster-ui/packages/ui-core/src/op-selection/AntlrOpSelectionVisitor.ts +++ b/js_modules/dagster-ui/packages/ui-core/src/op-selection/AntlrOpSelectionVisitor.ts @@ -18,11 +18,7 @@ import { UpTraversalExpressionContext, } from './generated/OpSelectionParser'; import {OpSelectionVisitor} from './generated/OpSelectionVisitor'; -import { - getFunctionName, - getTraversalDepth, - getValue, -} from '../asset-selection/AntlrAssetSelectionVisitor'; +import {getFunctionName, getTraversalDepth, getValue} from '../asset-selection/util'; export class AntlrOpSelectionVisitor extends AbstractParseTreeVisitor> diff --git a/js_modules/dagster-ui/packages/ui-core/src/run-selection/AntlrRunSelection.ts b/js_modules/dagster-ui/packages/ui-core/src/run-selection/AntlrRunSelection.ts index 24c986e69c848..ed15c8a1153ab 100644 --- a/js_modules/dagster-ui/packages/ui-core/src/run-selection/AntlrRunSelection.ts +++ b/js_modules/dagster-ui/packages/ui-core/src/run-selection/AntlrRunSelection.ts @@ -2,7 +2,7 @@ import {CharStreams, CommonTokenStream} from 'antlr4ts'; import {FeatureFlag} from 'shared/app/FeatureFlags.oss'; import {AntlrRunSelectionVisitor} from './AntlrRunSelectionVisitor'; -import {AntlrInputErrorListener} from '../asset-selection/AntlrAssetSelection'; +import {AntlrInputErrorListener} from '../asset-selection/filterAssetSelectionByQuery'; import {RunGraphQueryItem} from '../gantt/toGraphQueryItems'; import {RunSelectionLexer} from './generated/RunSelectionLexer'; import {RunSelectionParser} from './generated/RunSelectionParser'; diff --git a/js_modules/dagster-ui/packages/ui-core/src/run-selection/AntlrRunSelectionVisitor.ts b/js_modules/dagster-ui/packages/ui-core/src/run-selection/AntlrRunSelectionVisitor.ts index 5fdcca878a8ea..791ce1271e910 100644 --- a/js_modules/dagster-ui/packages/ui-core/src/run-selection/AntlrRunSelectionVisitor.ts +++ b/js_modules/dagster-ui/packages/ui-core/src/run-selection/AntlrRunSelectionVisitor.ts @@ -20,11 +20,7 @@ import { UpTraversalExpressionContext, } from './generated/RunSelectionParser'; import {RunSelectionVisitor} from './generated/RunSelectionVisitor'; -import { - getFunctionName, - getTraversalDepth, - getValue, -} from '../asset-selection/AntlrAssetSelectionVisitor'; +import {getFunctionName, getTraversalDepth, getValue} from '../asset-selection/util'; export class AntlrRunSelectionVisitor extends AbstractParseTreeVisitor> diff --git a/js_modules/dagster-ui/packages/ui-core/src/selection/SelectionAutoCompleteInput.tsx b/js_modules/dagster-ui/packages/ui-core/src/selection/SelectionAutoCompleteInput.tsx index 5e8ff88cdff18..5c32c3da9d7fc 100644 --- a/js_modules/dagster-ui/packages/ui-core/src/selection/SelectionAutoCompleteInput.tsx +++ b/js_modules/dagster-ui/packages/ui-core/src/selection/SelectionAutoCompleteInput.tsx @@ -298,7 +298,7 @@ export const SelectionAutoCompleteInput = , N <> +