diff --git a/cypress/e2e/process_instances.cy.js b/cypress/e2e/process_instances.cy.js index b7bbf9d..de2692b 100644 --- a/cypress/e2e/process_instances.cy.js +++ b/cypress/e2e/process_instances.cy.js @@ -75,7 +75,7 @@ describe('process-instances', () => { cy.logout(); }); - it('can create a new instance and can modify', () => { + it.only('can create a new instance and can modify', () => { const originalDmnOutputForKevin = 'Very wonderful'; const newDmnOutputForKevin = 'The new wonderful'; const dmnOutputForDan = 'pretty wonderful'; diff --git a/src/components/FileInput.tsx b/src/components/FileInput.tsx index e6bc635..b86e211 100644 --- a/src/components/FileInput.tsx +++ b/src/components/FileInput.tsx @@ -28,7 +28,9 @@ export default class FileInput extends React.Component { handleSubmit(event: any) { event.preventDefault(); - const modifiedProcessModelId = modifyProcessModelPath(`${this.processGroupId}/${this.processModelId}`); + const modifiedProcessModelId = modifyProcessModelPath( + `${this.processGroupId}/${this.processModelId}` + ); const url = `/process-models/${modifiedProcessModelId}/files`; const formData = new FormData(); formData.append('file', this.fileInput.current.files[0]); diff --git a/src/components/ProcessBreadcrumb.tsx b/src/components/ProcessBreadcrumb.tsx index d5d2eda..36b42de 100644 --- a/src/components/ProcessBreadcrumb.tsx +++ b/src/components/ProcessBreadcrumb.tsx @@ -1,5 +1,6 @@ // @ts-ignore import { Breadcrumb, BreadcrumbItem } from '@carbon/react'; +import { splitProcessModelId } from '../helpers'; import { HotCrumbItem } from '../interfaces'; type OwnProps = { @@ -9,6 +10,39 @@ type OwnProps = { hotCrumbs?: HotCrumbItem[]; }; +const explodeCrumb = (crumb: HotCrumbItem) => { + const url: string = crumb[1] || ''; + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const [_unused, processModelId, link] = url.split(':'); + const processModelIdSegments = splitProcessModelId(processModelId); + const paths: string[] = []; + const lastPathItem = processModelIdSegments.pop(); + const breadcrumbItems = processModelIdSegments.map( + (processModelIdSegment: string) => { + paths.push(processModelIdSegment); + const fullUrl = `/admin/process-groups/${paths.join(':')}`; + return ( + + {processModelIdSegment} + + ); + } + ); + if (link === 'link') { + const lastUrl = `/admin/process-models/${paths.join(':')}:${lastPathItem}`; + breadcrumbItems.push( + + {lastPathItem} + + ); + } else { + breadcrumbItems.push( + {lastPathItem} + ); + } + return breadcrumbItems; +}; + export default function ProcessBreadcrumb({ processModelId, processGroupId, @@ -18,28 +52,19 @@ export default function ProcessBreadcrumb({ let processGroupBreadcrumb = null; let processModelBreadcrumb = null; if (hotCrumbs) { - const lastItem = hotCrumbs.pop(); - if (lastItem === undefined) { - return null; - } - const lastCrumb = ( - {lastItem[0]} - ); const leadingCrumbLinks = hotCrumbs.map((crumb: any) => { const valueLabel = crumb[0]; const url = crumb[1]; + if (url.startsWith('process_model:')) { + return explodeCrumb(crumb); + } return ( {valueLabel} ); }); - return ( - - {leadingCrumbLinks} - {lastCrumb} - - ); + return {leadingCrumbLinks}; } if (processModelId) { if (linkProcessModel) { diff --git a/src/helpers.tsx b/src/helpers.tsx index c53df5a..89521a3 100644 --- a/src/helpers.tsx +++ b/src/helpers.tsx @@ -126,7 +126,9 @@ export const unModifyProcessModelPath = (path: String) => { export const getGroupFromModifiedModelId = (modifiedId: String) => { const finalSplitIndex = modifiedId.lastIndexOf(':'); - const groupId = modifiedId.slice(0, finalSplitIndex); - console.log(`groupId: ${groupId}`); - return groupId; + return modifiedId.slice(0, finalSplitIndex); +}; + +export const splitProcessModelId = (processModelId: String) => { + return processModelId.split('/'); }; diff --git a/src/routes/HomePage.tsx b/src/routes/HomePage.tsx index 9256041..2092e7a 100644 --- a/src/routes/HomePage.tsx +++ b/src/routes/HomePage.tsx @@ -3,7 +3,10 @@ import { useEffect, useState } from 'react'; import { Button, Table } from '@carbon/react'; import { Link, useSearchParams } from 'react-router-dom'; import PaginationForTable from '../components/PaginationForTable'; -import {getPageInfoFromSearchParams, modifyProcessModelPath} from '../helpers'; +import { + getPageInfoFromSearchParams, + modifyProcessModelPath, +} from '../helpers'; import HttpService from '../services/HttpService'; import { PaginationObject, RecentProcessModel } from '../interfaces'; diff --git a/src/routes/ProcessInstanceList.tsx b/src/routes/ProcessInstanceList.tsx index a267a35..9a37daf 100644 --- a/src/routes/ProcessInstanceList.tsx +++ b/src/routes/ProcessInstanceList.tsx @@ -28,7 +28,6 @@ import { PROCESS_STATUSES, DATE_FORMAT, DATE_FORMAT_CARBON } from '../config'; import { convertDateStringToSeconds, convertSecondsToFormattedDate, - getGroupFromModifiedModelId, getPageInfoFromSearchParams, getProcessModelFullIdentifierFromSearchParams, modifyProcessModelPath, diff --git a/src/routes/ProcessInstanceShow.tsx b/src/routes/ProcessInstanceShow.tsx index e0a9682..bd20ac3 100644 --- a/src/routes/ProcessInstanceShow.tsx +++ b/src/routes/ProcessInstanceShow.tsx @@ -8,7 +8,6 @@ import HttpService from '../services/HttpService'; import ReactDiagramEditor from '../components/ReactDiagramEditor'; import { convertSecondsToFormattedDate, - modifyProcessModelPath, unModifyProcessModelPath, } from '../helpers'; import ButtonWithConfirmation from '../components/ButtonWithConfirmation'; @@ -29,10 +28,7 @@ export default function ProcessInstanceShow() { const unModifiedProcessModelId = unModifyProcessModelPath( `${params.process_model_id}` ); - const modifiedProcessModelId = params.process_model_id - - console.log(`params.process_model_id: ${params.process_model_id}`); - console.log(`modifiedProcessModelId: ${modifiedProcessModelId}`); + const modifiedProcessModelId = params.process_model_id; const navigateToProcessInstances = (_result: any) => { navigate( @@ -55,7 +51,7 @@ export default function ProcessInstanceShow() { path: `/process-instance/${params.process_instance_id}/tasks?all_tasks=true&spiff_step=${params.spiff_step}`, successCallback: setTasks, }); - }, [params]); + }, [params, modifiedProcessModelId]); const deleteProcessInstance = () => { HttpService.makeCallToBackend({ diff --git a/src/routes/ProcessModelEdit.tsx b/src/routes/ProcessModelEdit.tsx index 8ef70b4..c2cb881 100644 --- a/src/routes/ProcessModelEdit.tsx +++ b/src/routes/ProcessModelEdit.tsx @@ -6,7 +6,10 @@ import ProcessBreadcrumb from '../components/ProcessBreadcrumb'; import HttpService from '../services/HttpService'; import ButtonWithConfirmation from '../components/ButtonWithConfirmation'; import ErrorContext from '../contexts/ErrorContext'; -import {getGroupFromModifiedModelId, modifyProcessModelPath} from "../helpers"; +import { + getGroupFromModifiedModelId, + modifyProcessModelPath, +} from '../helpers'; export default function ProcessModelEdit() { const [displayName, setDisplayName] = useState(''); diff --git a/src/routes/ProcessModelEditDiagram.tsx b/src/routes/ProcessModelEditDiagram.tsx index 7132707..03968b4 100644 --- a/src/routes/ProcessModelEditDiagram.tsx +++ b/src/routes/ProcessModelEditDiagram.tsx @@ -17,8 +17,7 @@ import ReactDiagramEditor from '../components/ReactDiagramEditor'; import ProcessBreadcrumb from '../components/ProcessBreadcrumb'; import HttpService from '../services/HttpService'; import ErrorContext from '../contexts/ErrorContext'; -import { makeid } from '../helpers'; -import { modifyProcessModelPath } from '../helpers'; +import { makeid, modifyProcessModelPath } from '../helpers'; import { ProcessFile, ProcessModel } from '../interfaces'; export default function ProcessModelEditDiagram() { diff --git a/src/routes/ProcessModelShow.tsx b/src/routes/ProcessModelShow.tsx index 416aef8..f5a68f7 100644 --- a/src/routes/ProcessModelShow.tsx +++ b/src/routes/ProcessModelShow.tsx @@ -120,7 +120,7 @@ export default function ProcessModelShow() { path: `/process-models/${modifiedProcessModelId}`, successCallback: processResult, }); - }, [params, reloadModel]); + }, [params, reloadModel, modifiedProcessModelId]); const processModelRun = (processInstance: any) => { setErrorMessage(null); @@ -516,8 +516,13 @@ export default function ProcessModelShow() { <> {fileUploadModal()}

{processModel.display_name}

{processModel.description}

diff --git a/src/routes/ReactFormEditor.tsx b/src/routes/ReactFormEditor.tsx index 50806cf..fdd0c85 100644 --- a/src/routes/ReactFormEditor.tsx +++ b/src/routes/ReactFormEditor.tsx @@ -51,7 +51,7 @@ export default function ReactFormEditor() { successCallback: processResult, }); } - }, [params]); + }, [params, modifiedProcessModelId]); const navigateToProcessModelFile = (_result: any) => { if (!params.file_name) {