Skip to content

Commit

Permalink
respect process group id in params w/ burnettk
Browse files Browse the repository at this point in the history
  • Loading branch information
jasquat committed Feb 10, 2025
1 parent f97bdd8 commit 12bcf2d
Show file tree
Hide file tree
Showing 4 changed files with 77 additions and 7 deletions.
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { Paper, Stack, Typography } from '@mui/material';
import { useNavigate } from 'react-router';
import { Subject } from 'rxjs';

/**
Expand All @@ -11,10 +12,13 @@ import { Subject } from 'rxjs';
export default function ProcessGroupCard({
group,
stream,
navigateToPage = false,
}: {
group: Record<string, any>;
stream?: Subject<Record<string, any>>;
navigateToPage?: boolean;
}) {
const navigate = useNavigate();
const captionColor = 'text.secondary';

return (
Expand All @@ -30,7 +34,14 @@ export default function ProcessGroupCard({
backgroundColor: 'background.bluegreylight',
},
}}
onClick={() => stream && stream.next(group)}
onClick={() => {
if (stream) {
stream.next(group);
}
if (navigateToPage) {
navigate(`/newui/processes/${group.id.replaceAll('/', ':')}`);
}
}}
>
<Stack>
<Typography variant="body1" sx={{ fontWeight: 700 }}>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import { Subject, Subscription } from 'rxjs';
import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
import StarRateIcon from '@mui/icons-material/StarRate';
import { useDebouncedCallback } from 'use-debounce';
import { useParams } from 'react-router';
import useProcessGroups from '../../hooks/useProcessGroups';
import TreePanel, { TreeRef, SHOW_FAVORITES } from './TreePanel';
import SearchBar from './SearchBar';
Expand All @@ -28,10 +29,12 @@ import {
ProcessGroupLite,
ProcessModelAction,
} from '../../interfaces';
import { unModifyProcessIdentifierForPathParam } from '../../helpers';

type OwnProps = {
setNavElementCallback?: Function;
processModelAction: ProcessModelAction;
navigateToPage?: boolean;
};
/**
* Top level layout and control container for this view,
Expand All @@ -40,7 +43,9 @@ type OwnProps = {
export default function ProcessModelTreePage({
setNavElementCallback,
processModelAction,
navigateToPage = false,
}: OwnProps) {
const params = useParams();
const { processGroups } = useProcessGroups({
processInfo: {},
getRunnableProcessModels:
Expand Down Expand Up @@ -70,7 +75,10 @@ export default function ProcessModelTreePage({
gridGap: 20,
};

const processCrumbs = (item: Record<string, any>): Crumb[] => {
const processCrumbs = (
item: Record<string, any>,
flattened: Record<string, any>,
): Crumb[] => {
/**
* Create the paths for the crumbs.
* This logic is repeated from TreePanel.
Expand All @@ -84,13 +92,13 @@ export default function ProcessModelTreePage({

// Look up the display names in the flattened items and return.
return pathIds.map((id) => {
const found = flatItems.find((flatItem: any) => flatItem.id === id);
const found = flattened.find((flatItem: any) => flatItem.id === id);
return { id, displayName: found?.display_name || id };
});
};

const handleClickStream = (item: Record<string, any>) => {
setCrumbs(processCrumbs(item));
setCrumbs(processCrumbs(item, flatItems));
setLastSelected(item);
let itemToUse: any = { ...item };
// Duck type to find out if this is a model ore a group.
Expand Down Expand Up @@ -234,6 +242,35 @@ export default function ProcessModelTreePage({
return flat;
};

function findProcessGroupByPath(
groupsToProcess: ProcessGroup[] | ProcessGroupLite[],
path: string,
): ProcessGroupLite | undefined {
const levels = path.split('/');
let currentGroup: ProcessGroupLite | undefined;

let assembledGroups = '';
levels.forEach((level: string) => {
if (assembledGroups === '') {
assembledGroups = level;
} else {
assembledGroups = `${assembledGroups}/${level}`;
}
currentGroup = (
(currentGroup ? currentGroup.process_groups : groupsToProcess) || []
).find(
(processGroup: ProcessGroup | ProcessGroupLite) =>
processGroup.id === assembledGroups,
);
if (!currentGroup) {
return undefined;
}
return currentGroup;
});

return currentGroup;
}

useEffect(() => {
// If no favorites, proceed with the normal process groups.
if (processGroups) {
Expand All @@ -255,9 +292,21 @@ export default function ProcessModelTreePage({
setCrumbs([favoriteCrumb]);
return;
}
setGroups(processGroups);
const unModifiedProcessGroupId = unModifyProcessIdentifierForPathParam(
`${params.process_group_id}`,
);
const foundProcessGroup = findProcessGroupByPath(
processGroups || [],
unModifiedProcessGroupId,
);
if (foundProcessGroup) {
setGroups(foundProcessGroup.process_groups || null);
setCrumbs(processCrumbs(foundProcessGroup, flattened));
} else {
setGroups(processGroups);
setCrumbs([]);
}
setGroupsExpanded(!!processGroups.length);
setCrumbs([]);
if (setNavElementCallback) {
setNavElementCallback(
<TreePanel
Expand Down Expand Up @@ -405,6 +454,7 @@ export default function ProcessModelTreePage({
key={group.id}
group={group}
stream={clickStream}
navigateToPage={navigateToPage}
/>
))}
</Box>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,10 @@ import ProcessModelTreePage from './ProcessModelTreePage';
import { ProcessModelAction } from '../../interfaces';

export default function Processes() {
return <ProcessModelTreePage processModelAction={ProcessModelAction.Open} />;
return (
<ProcessModelTreePage
processModelAction={ProcessModelAction.Open}
navigateToPage
/>
);
}
4 changes: 4 additions & 0 deletions spiffworkflow-frontend/src/routes/SpiffUIV3.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -231,6 +231,10 @@ export default function SpiffUIV3() {
}
/>
<Route path="/processes" element={<Processes />} />
<Route
path="/processes/:process_group_id"
element={<Processes />}
/>
<Route
path="/process-models/:process_model_id"
element={<ProcessModelShow />}
Expand Down

0 comments on commit 12bcf2d

Please sign in to comment.