diff --git a/console2/src/api/org/project/index.ts b/console2/src/api/org/project/index.ts index 416f118f7a..fa087dce6e 100644 --- a/console2/src/api/org/project/index.ts +++ b/console2/src/api/org/project/index.ts @@ -36,6 +36,7 @@ export enum ProjectVisibility { export interface ProjectEntryMetaUI { processList?: ColumnDefinition[]; + childrenProcessList?: ColumnDefinition[]; } export interface ProjectEntryMeta { diff --git a/console2/src/components/organisms/ProcessActivity/index.tsx b/console2/src/components/organisms/ProcessActivity/index.tsx index 008e97f44b..914d7af1c9 100644 --- a/console2/src/components/organisms/ProcessActivity/index.tsx +++ b/console2/src/components/organisms/ProcessActivity/index.tsx @@ -291,6 +291,8 @@ const ProcessActivity = (props: ExternalProps) => { void; processStatus?: ProcessStatus; + processOrgName?: ConcordKey; + processProjectName?: ConcordKey; forceRefresh: boolean; dataFetchInterval: number; } @@ -64,8 +69,12 @@ const ProcessChildrenActivity = ({ loadingHandler, processStatus, forceRefresh, - dataFetchInterval + dataFetchInterval, + processOrgName, + processProjectName }: ExternalProps) => { + const dispatch = React.useContext(LoadingDispatch); + const isInitialMount = useRef(true); const location = useLocation(); const history = useHistory(); @@ -74,6 +83,20 @@ const ProcessChildrenActivity = ({ parseSearchFilter(location.search) ); + const fetchProjectData = useCallback(() => { + if (!processOrgName || !processProjectName) { + return Promise.resolve(undefined); + } + + return apiGetProject(processOrgName, processProjectName); + }, [processOrgName, processProjectName]); + + const { data : project, error : projectError} = useApi(fetchProjectData, { + fetchOnMount: true, + forceRequest: forceRefresh, + dispatch: dispatch + }); + useEffect(() => { if (isInitialMount.current) { isInitialMount.current = false; @@ -117,15 +140,18 @@ const ProcessChildrenActivity = ({ [history] ); + const columns = addBuiltInColumns(project?.meta?.ui?.childrenProcessList) ?? COLUMNS; + return ( <> {error && } + {projectError && } { }; }; -const addBuiltInColumns = (columns?: ColumnDefinition[]): ColumnDefinition[] | undefined => { +export const addBuiltInColumns = (columns?: ColumnDefinition[]): ColumnDefinition[] | undefined => { if (!columns) { return; } diff --git a/server/impl/src/main/java/com/walmartlabs/concord/server/process/ProcessResourceV2.java b/server/impl/src/main/java/com/walmartlabs/concord/server/process/ProcessResourceV2.java index b86b19db9a..aa38e1359e 100644 --- a/server/impl/src/main/java/com/walmartlabs/concord/server/process/ProcessResourceV2.java +++ b/server/impl/src/main/java/com/walmartlabs/concord/server/process/ProcessResourceV2.java @@ -290,8 +290,8 @@ private ProcessFilter createProcessFilter(UUID orgId, List metaFilters = MetadataUtils.parseMetadataFilters(uriInfo); // can't allow seq scans, we don't index PROCESS_QUEUE.META (yet?) - if (!metaFilters.isEmpty() && effectiveProjectId == null) { - throw new ValidationErrorsException("Process metadata filters require a project name or an ID to be included in the query."); + if (!metaFilters.isEmpty() && (effectiveProjectId == null && parentId == null)) { + throw new ValidationErrorsException("Process metadata filters require a project name or project ID or a parent process ID to be included in the query."); } return ProcessFilter.builder()