From 5afa97a7b9cd248631250da7625278066ace5c2b Mon Sep 17 00:00:00 2001 From: Edward Brunton <42774600+EdwardBrunton@users.noreply.github.com> Date: Tue, 17 Dec 2024 12:09:23 +0100 Subject: [PATCH 01/21] Update readme to document deployment --- README.md | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index d1565cf3..f4cbaf65 100644 --- a/README.md +++ b/README.md @@ -40,6 +40,17 @@ $ docker build --force-rm -t pcs:latest -f .docker/Dockerfile . $ docker run -it -p 80:80 pcs:latest ``` +# How to deploy + +## Deploy to dev +When you are ready to deploy your changes to dev/test create a PR and merge it into the development branch. This will trigger a build and deploy to the dev environment. + +## Deploy to test +When you want your changes to test merge the develop branch into the test branch and your changes will be deployed to test. + +## Deploy to prod +When you are ready to deploy to production merge the develop branch into the master branch and your changes will be deployed to production. You can **NOT** merge test to master because test has different styling than production. + # Libraries ### Microsoft Authentication Library (MSAL) @@ -92,4 +103,4 @@ https://webpack.js.org/ ### Browserslist Used to define which browsers we support, as well as integrate with polyfill loading in CSS and Babel. -https://www.npmjs.com/package/browserslist \ No newline at end of file +https://www.npmjs.com/package/browserslist From 8140734b09aceb53ddc248f9e64ac515482bc71f Mon Sep 17 00:00:00 2001 From: Karolina Slazyk <76835138+kslazykv@users.noreply.github.com> Date: Wed, 18 Dec 2024 10:01:56 +0100 Subject: [PATCH 02/21] fixed Route (#886) --- src/modules/InvitationForPunchOut/InvitationForPunchOut.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/modules/InvitationForPunchOut/InvitationForPunchOut.tsx b/src/modules/InvitationForPunchOut/InvitationForPunchOut.tsx index ca271378..1bd3fe0c 100644 --- a/src/modules/InvitationForPunchOut/InvitationForPunchOut.tsx +++ b/src/modules/InvitationForPunchOut/InvitationForPunchOut.tsx @@ -45,10 +45,13 @@ const InvitationForPunchOut = (): JSX.Element => { /> } /> + } + /> Date: Thu, 9 Jan 2025 12:16:11 +0100 Subject: [PATCH 03/21] wip --- src/modules/PlantConfig/types.d.ts | 5 - .../LibraryTreeview/LibraryTreeview.tsx | 41 +++-- .../PreservationJourney.tsx | 160 ++++++++++-------- .../types/AutoTransferMethod.ts | 5 + .../PreservationJourney/types/Journey.ts | 11 ++ .../Library/PreservationJourney/types/Mode.ts | 7 + .../types/PreservationJourneyProps.ts | 5 + .../Library/PreservationJourney/types/Step.ts | 17 ++ .../PreservationJourney/types/index.ts | 5 + .../http/PreservationApiClient.ts | 11 +- 10 files changed, 174 insertions(+), 93 deletions(-) delete mode 100644 src/modules/PlantConfig/types.d.ts create mode 100644 src/modules/PlantConfig/views/Library/PreservationJourney/types/AutoTransferMethod.ts create mode 100644 src/modules/PlantConfig/views/Library/PreservationJourney/types/Journey.ts create mode 100644 src/modules/PlantConfig/views/Library/PreservationJourney/types/Mode.ts create mode 100644 src/modules/PlantConfig/views/Library/PreservationJourney/types/PreservationJourneyProps.ts create mode 100644 src/modules/PlantConfig/views/Library/PreservationJourney/types/Step.ts create mode 100644 src/modules/PlantConfig/views/Library/PreservationJourney/types/index.ts diff --git a/src/modules/PlantConfig/types.d.ts b/src/modules/PlantConfig/types.d.ts deleted file mode 100644 index e8c226a6..00000000 --- a/src/modules/PlantConfig/types.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -export type ProjectDetails = { - id: number; - name: string; - description: string; -}; diff --git a/src/modules/PlantConfig/views/Library/LibraryTreeview/LibraryTreeview.tsx b/src/modules/PlantConfig/views/Library/LibraryTreeview/LibraryTreeview.tsx index 4decc783..886ad25c 100644 --- a/src/modules/PlantConfig/views/Library/LibraryTreeview/LibraryTreeview.tsx +++ b/src/modules/PlantConfig/views/Library/LibraryTreeview/LibraryTreeview.tsx @@ -11,6 +11,7 @@ import { unsavedChangesConfirmationMessage, useDirtyContext, } from '@procosys/core/DirtyContext'; +import { Journey } from '../PreservationJourney/types'; type LibraryTreeviewProps = { forceUpdate: React.DispatchWithoutAction; @@ -23,7 +24,8 @@ type LibraryTreeviewProps = { const LibraryTreeview = (props: LibraryTreeviewProps): JSX.Element => { const { isDirty } = useDirtyContext(); - const { libraryApiClient, preservationApiClient } = usePlantConfigContext(); + const { libraryApiClient, preservationApiClient, projects } = + usePlantConfigContext(); const handleTreeviewClick = ( libraryType: LibraryType, @@ -68,13 +70,28 @@ const LibraryTreeview = (props: LibraryTreeviewProps): JSX.Element => { const getPresJourneyTreeNodes = async (): Promise => { const children: TreeViewNode[] = []; try { - return await preservationApiClient - .getJourneys(true) - .then((response) => { - if (response) { - response.forEach((journey) => - children.push({ - id: 'journey_' + journey.id, + const journeys = await preservationApiClient.getJourneys(true); + const groupedJourneys = journeys.reduce( + (acc: { [key: string]: Journey[] }, journey) => { + const projectDescription = journey.project + ? journey.project.description + : 'Global'; + if (!acc[projectDescription]) { + acc[projectDescription] = []; + } + acc[projectDescription].push(journey); + return acc; + }, + {} as { [key: string]: Journey[] } + ); + Object.keys(groupedJourneys).forEach((projectDescription) => { + const projectNode: TreeViewNode = { + id: `project_${projectDescription}`, + name: projectDescription, + getChildren: async (): Promise => { + return groupedJourneys[projectDescription].map( + (journey) => ({ + id: `journey_${journey.id}`, name: journey.title, isVoided: journey.isVoided, onClick: (): void => @@ -84,9 +101,11 @@ const LibraryTreeview = (props: LibraryTreeviewProps): JSX.Element => { ), }) ); - } - return children; - }); + }, + }; + children.push(projectNode); + }); + return children; } catch (error) { console.error( 'Get preservation journeys failed: ', diff --git a/src/modules/PlantConfig/views/Library/PreservationJourney/PreservationJourney.tsx b/src/modules/PlantConfig/views/Library/PreservationJourney/PreservationJourney.tsx index 6e45eb5d..62888987 100644 --- a/src/modules/PlantConfig/views/Library/PreservationJourney/PreservationJourney.tsx +++ b/src/modules/PlantConfig/views/Library/PreservationJourney/PreservationJourney.tsx @@ -30,6 +30,16 @@ import { ButtonContainerLeft, ButtonContainerRight, } from '../Library.style'; +import { + AutoTransferMethod, + Journey, + Mode, + PreservationJourneyProps, + Step, +} from './types'; +import { ProjectDetails } from '@procosys/modules/Preservation/types'; +import { useProcosysContext } from '@procosys/core/ProcosysContext'; +import e from 'express'; const addIcon = ; const upIcon = ; @@ -48,51 +58,6 @@ const WAIT_INTERVAL = 300; const checkboxHeightInGridUnits = 4; -enum AutoTransferMethod { - NONE = 'None', - RFCC = 'OnRfccSign', - RFOC = 'OnRfocSign', -} - -interface Journey { - id: number; - title: string; - isVoided: boolean; - isInUse: boolean; - steps: Step[]; - rowVersion: string; -} - -interface Step { - id: number; - title: string; - autoTransferMethod: string; - isVoided: boolean; - isInUse: boolean; - mode: Mode; - responsible: { - code: string; - title: string; - rowVersion: string; - description?: string; - }; - rowVersion: string; -} - -interface Mode { - id: number; - title: string; - forSupplier: boolean; - isVoided: boolean; - rowVersion: string; -} - -type PreservationJourneyProps = { - forceUpdate: number; - journeyId: number; - setDirtyLibraryType: () => void; -}; - const PreservationJourney = (props: PreservationJourneyProps): JSX.Element => { const getInitialJourney = (): Journey => { return { @@ -108,6 +73,8 @@ const PreservationJourney = (props: PreservationJourneyProps): JSX.Element => { const [isEditMode, setIsEditMode] = useState(false); const [isLoading, setIsLoading] = useState(false); const [journey, setJourney] = useState(null); + const [selectedProject, setSelectedProject] = + useState(null); const [newJourney, setNewJourney] = useState(getInitialJourney); const [mappedModes, setMappedModes] = useState([]); const [modes, setModes] = useState([]); @@ -130,7 +97,9 @@ const PreservationJourney = (props: PreservationJourneyProps): JSX.Element => { return JSON.stringify(journey) != JSON.stringify(newJourney); }, [journey, newJourney]); - const { preservationApiClient, libraryApiClient } = usePlantConfigContext(); + const { preservationApiClient, libraryApiClient, projects } = + usePlantConfigContext(); + const { procosysApiClient } = useProcosysContext(); const cloneJourney = (journey: Journey): Journey => { return JSON.parse(JSON.stringify(journey)); @@ -140,12 +109,12 @@ const PreservationJourney = (props: PreservationJourneyProps): JSX.Element => { * Get Modes */ useEffect(() => { - let requestCancellor: Canceler | null = null; + let requestCanceler: Canceler | null = null; (async (): Promise => { try { const modes = await preservationApiClient.getModes( false, - (cancel: Canceler) => (requestCancellor = cancel) + (cancel: Canceler) => (requestCanceler = cancel) ); const mappedModes: SelectItem[] = []; modes.forEach((mode) => @@ -183,7 +152,7 @@ const PreservationJourney = (props: PreservationJourneyProps): JSX.Element => { })(); return (): void => { - requestCancellor && requestCancellor(); + requestCanceler && requestCanceler(); }; }, [journey]); @@ -261,6 +230,18 @@ const PreservationJourney = (props: PreservationJourneyProps): JSX.Element => { } }, [props.journeyId]); + useEffect(() => { + if (journey) { + setSelectedProject( + projects?.find( + (project) => project.id === newJourney.projectId + ) ?? null + ); + } else { + setSelectedProject(null); + } + }, [projects, newJourney?.projectId]); + const saveNewStep = async ( journeyId: number, step: Step @@ -312,7 +293,8 @@ const PreservationJourney = (props: PreservationJourneyProps): JSX.Element => { await preservationApiClient.updateJourney( newJourney.id, newJourney.title, - newJourney.rowVersion + newJourney.rowVersion, + newJourney.projectId ); props.setDirtyLibraryType(); return true; @@ -356,7 +338,10 @@ const PreservationJourney = (props: PreservationJourneyProps): JSX.Element => { setIsLoading(true); let saveOk = true; let noChangesToSave = true; - if (journey && journey.title != newJourney.title) { + if ( + journey?.title != newJourney.title || + journey?.projectId != newJourney.projectId + ) { saveOk = await updateJourney(); noChangesToSave = false; } @@ -415,8 +400,8 @@ const PreservationJourney = (props: PreservationJourneyProps): JSX.Element => { newJourney.steps.some((step: Step) => { if ( - step.mode.id === -1 || - step.responsible.code === '' || + step.mode.id === -1 ?? + step.responsible.code === '' ?? step.title === '' ) { errorMessage += 'Some step information is missing.'; @@ -445,7 +430,7 @@ const PreservationJourney = (props: PreservationJourneyProps): JSX.Element => { }; const confirmDiscardingChangesIfExist = (): boolean => { - return !isDirty || confirm(unsavedChangesConfirmationMessage); + return !isDirty ?? confirm(unsavedChangesConfirmationMessage); }; const cancel = (): void => { @@ -564,6 +549,11 @@ const PreservationJourney = (props: PreservationJourneyProps): JSX.Element => { setNewJourney(cloneJourney(newJourney)); }; + const setProjectIdValue = (value: number): void => { + newJourney.projectId = value; + setNewJourney(cloneJourney(newJourney)); + }; + const setResponsibleValue = ( event: React.MouseEvent, stepIndex: number, @@ -757,7 +747,7 @@ const PreservationJourney = (props: PreservationJourneyProps): JSX.Element => { /** Update canSave and isDirty when newJourney or journey changes */ useEffect(() => { - if (journey == null || !isDirty) { + if (journey == null ?? !isDirty) { setCanSave(false); unsetDirtyStateFor(moduleName); return; @@ -770,7 +760,7 @@ const PreservationJourney = (props: PreservationJourneyProps): JSX.Element => { } let breakFunction = false; newJourney.steps.forEach((step, i) => { - if (!step.title || step.mode.id == -1 || !step.responsible.code) { + if (!step.title ?? step.mode.id == -1 ?? !step.responsible.code) { setCanSave(false); breakFunction = true; return; @@ -886,7 +876,7 @@ const PreservationJourney = (props: PreservationJourneyProps): JSX.Element => { Save @@ -900,6 +890,27 @@ const PreservationJourney = (props: PreservationJourneyProps): JSX.Element => { width: '280px', }} > + + {projects?.map((projectItem, index) => { + return ( + + setProjectIdValue(projectItem.id) + } + > + {projectItem.description} + + {projectItem.name} + + + ); + })} + { ); return ( - + { data={mappedModes} label={'Mode'} disabled={ - newJourney.isVoided || + newJourney.isVoided ?? step.isVoided } > - {(modeSelectItem && - modeSelectItem.text) || + {modeSelectItem?.text ?? 'Select mode'} @@ -952,17 +962,17 @@ const PreservationJourney = (props: PreservationJourneyProps): JSX.Element => { { (respItem, filtRespIndex) => { return ( @@ -1018,7 +1028,7 @@ const PreservationJourney = (props: PreservationJourneyProps): JSX.Element => { } placeholder="Write here" disabled={ - newJourney.isVoided || + newJourney.isVoided ?? step.isVoided } /> @@ -1056,7 +1066,7 @@ const PreservationJourney = (props: PreservationJourneyProps): JSX.Element => { AutoTransferMethod.RFCC } disabled={ - newJourney.isVoided || + newJourney.isVoided ?? step.isVoided } onChange={( @@ -1091,7 +1101,7 @@ const PreservationJourney = (props: PreservationJourneyProps): JSX.Element => { AutoTransferMethod.RFOC } disabled={ - newJourney.isVoided || + newJourney.isVoided ?? step.isVoided } onChange={( @@ -1128,9 +1138,9 @@ const PreservationJourney = (props: PreservationJourneyProps): JSX.Element => { <> { { > } - {(step.id == -1 || + {(step.id == -1 ?? (step.isVoided && !step.isInUse)) && ( void; +}; diff --git a/src/modules/PlantConfig/views/Library/PreservationJourney/types/Step.ts b/src/modules/PlantConfig/views/Library/PreservationJourney/types/Step.ts new file mode 100644 index 00000000..cb95e60a --- /dev/null +++ b/src/modules/PlantConfig/views/Library/PreservationJourney/types/Step.ts @@ -0,0 +1,17 @@ +import { Mode } from './Mode'; + +export interface Step { + id: number; + title: string; + autoTransferMethod: string; + isVoided: boolean; + isInUse: boolean; + mode: Mode; + responsible: { + code: string; + title: string; + rowVersion: string; + description?: string; + }; + rowVersion: string; +} diff --git a/src/modules/PlantConfig/views/Library/PreservationJourney/types/index.ts b/src/modules/PlantConfig/views/Library/PreservationJourney/types/index.ts new file mode 100644 index 00000000..f13e05e3 --- /dev/null +++ b/src/modules/PlantConfig/views/Library/PreservationJourney/types/index.ts @@ -0,0 +1,5 @@ +export { AutoTransferMethod } from './AutoTransferMethod'; +export { Journey } from './Journey'; +export { Mode } from './Mode'; +export { Step } from './Step'; +export { PreservationJourneyProps } from './PreservationJourneyProps'; diff --git a/src/modules/Preservation/http/PreservationApiClient.ts b/src/modules/Preservation/http/PreservationApiClient.ts index 6bfad265..50811553 100644 --- a/src/modules/Preservation/http/PreservationApiClient.ts +++ b/src/modules/Preservation/http/PreservationApiClient.ts @@ -208,6 +208,11 @@ interface JourneyResponse { }, ]; rowVersion: string; + project?: { + projectId: number; + title: string; + description: string; + }; } interface RequirementTypeResponse { @@ -1376,6 +1381,7 @@ class PreservationApiClient extends ApiClient { journeyId: number, title: string, rowVersion: string, + projectId?: number, setRequestCanceller?: RequestCanceler ): Promise { const endpoint = `/Journeys/${journeyId}`; @@ -1386,8 +1392,9 @@ class PreservationApiClient extends ApiClient { await this.client.put( endpoint, { - title: title, - rowVersion: rowVersion, + title, + rowVersion, + projectId, }, settings ); From b5e104edbda0e597dc9bb5baf4bd7d013fe018b0 Mon Sep 17 00:00:00 2001 From: Edward Brunton <42774600+EdwardBrunton@users.noreply.github.com> Date: Thu, 9 Jan 2025 14:58:02 +0100 Subject: [PATCH 04/21] wip --- .../context/PlantConfigContext.tsx | 20 +++++++++- .../PreservationJourney.tsx | 38 ++++++++----------- .../PreservationJourney/types/Journey.ts | 3 +- .../http/PreservationApiClient.ts | 11 ++---- 4 files changed, 40 insertions(+), 32 deletions(-) diff --git a/src/modules/PlantConfig/context/PlantConfigContext.tsx b/src/modules/PlantConfig/context/PlantConfigContext.tsx index a307813b..8d7961f9 100644 --- a/src/modules/PlantConfig/context/PlantConfigContext.tsx +++ b/src/modules/PlantConfig/context/PlantConfigContext.tsx @@ -1,13 +1,15 @@ -import React, { useMemo } from 'react'; +import React, { useEffect, useMemo, useState } from 'react'; import LibraryApiClient from '../http/LibraryApiClient'; import propTypes from 'prop-types'; import { useCurrentPlant } from '../../../core/PlantContext'; import { useProcosysContext } from '../../../core/ProcosysContext'; import PreservationApiClient from '@procosys/modules/Preservation/http/PreservationApiClient'; +import { ProjectDetails } from '@procosys/modules/Preservation/types'; type PlantConfigContextProps = { libraryApiClient: LibraryApiClient; preservationApiClient: PreservationApiClient; + projects?: ProjectDetails[]; }; const PlantConfigContext = React.createContext( @@ -17,14 +19,27 @@ const PlantConfigContext = React.createContext( export const PlantConfigContextProvider: React.FC = ({ children, }): JSX.Element => { - const { auth } = useProcosysContext(); + const { auth, procosysApiClient } = useProcosysContext(); const { plant } = useCurrentPlant(); const libraryApiClient = useMemo(() => new LibraryApiClient(auth), [auth]); + const [projects, setProjects] = useState( + undefined + ); const preservationApiClient = useMemo( () => new PreservationApiClient(auth), [auth] ); + useMemo(() => { + const fetchProjects = async () => { + const projects = + await procosysApiClient.getAllProjectsForUserAsync(); + setProjects(projects); + }; + fetchProjects(); + console.log('fetchProjects', projects); + }, [plant]); + useMemo(() => { libraryApiClient.setCurrentPlant(plant.id); preservationApiClient.setCurrentPlant(plant.id); @@ -35,6 +50,7 @@ export const PlantConfigContextProvider: React.FC = ({ value={{ libraryApiClient: libraryApiClient, preservationApiClient: preservationApiClient, + projects: projects, }} > {children} diff --git a/src/modules/PlantConfig/views/Library/PreservationJourney/PreservationJourney.tsx b/src/modules/PlantConfig/views/Library/PreservationJourney/PreservationJourney.tsx index 62888987..4d8acd30 100644 --- a/src/modules/PlantConfig/views/Library/PreservationJourney/PreservationJourney.tsx +++ b/src/modules/PlantConfig/views/Library/PreservationJourney/PreservationJourney.tsx @@ -73,8 +73,9 @@ const PreservationJourney = (props: PreservationJourneyProps): JSX.Element => { const [isEditMode, setIsEditMode] = useState(false); const [isLoading, setIsLoading] = useState(false); const [journey, setJourney] = useState(null); - const [selectedProject, setSelectedProject] = - useState(null); + const [selectedProject, setSelectedProject] = useState< + ProjectDetails | undefined + >(); const [newJourney, setNewJourney] = useState(getInitialJourney); const [mappedModes, setMappedModes] = useState([]); const [modes, setModes] = useState([]); @@ -99,7 +100,6 @@ const PreservationJourney = (props: PreservationJourneyProps): JSX.Element => { const { preservationApiClient, libraryApiClient, projects } = usePlantConfigContext(); - const { procosysApiClient } = useProcosysContext(); const cloneJourney = (journey: Journey): Journey => { return JSON.parse(JSON.stringify(journey)); @@ -232,15 +232,11 @@ const PreservationJourney = (props: PreservationJourneyProps): JSX.Element => { useEffect(() => { if (journey) { - setSelectedProject( - projects?.find( - (project) => project.id === newJourney.projectId - ) ?? null - ); + setSelectedProject(newJourney.project); } else { - setSelectedProject(null); + setSelectedProject(undefined); } - }, [projects, newJourney?.projectId]); + }, [projects, newJourney.project?.id]); const saveNewStep = async ( journeyId: number, @@ -294,7 +290,7 @@ const PreservationJourney = (props: PreservationJourneyProps): JSX.Element => { newJourney.id, newJourney.title, newJourney.rowVersion, - newJourney.projectId + newJourney.project?.name ); props.setDirtyLibraryType(); return true; @@ -340,7 +336,7 @@ const PreservationJourney = (props: PreservationJourneyProps): JSX.Element => { let noChangesToSave = true; if ( journey?.title != newJourney.title || - journey?.projectId != newJourney.projectId + journey?.project?.id != newJourney.project?.id ) { saveOk = await updateJourney(); noChangesToSave = false; @@ -400,8 +396,8 @@ const PreservationJourney = (props: PreservationJourneyProps): JSX.Element => { newJourney.steps.some((step: Step) => { if ( - step.mode.id === -1 ?? - step.responsible.code === '' ?? + step.mode.id === -1 || + step.responsible.code === '' || step.title === '' ) { errorMessage += 'Some step information is missing.'; @@ -549,8 +545,8 @@ const PreservationJourney = (props: PreservationJourneyProps): JSX.Element => { setNewJourney(cloneJourney(newJourney)); }; - const setProjectIdValue = (value: number): void => { - newJourney.projectId = value; + const setProjectIdValue = (value: ProjectDetails): void => { + newJourney.project = value; setNewJourney(cloneJourney(newJourney)); }; @@ -747,7 +743,7 @@ const PreservationJourney = (props: PreservationJourneyProps): JSX.Element => { /** Update canSave and isDirty when newJourney or journey changes */ useEffect(() => { - if (journey == null ?? !isDirty) { + if (journey == null || !isDirty) { setCanSave(false); unsetDirtyStateFor(moduleName); return; @@ -760,7 +756,7 @@ const PreservationJourney = (props: PreservationJourneyProps): JSX.Element => { } let breakFunction = false; newJourney.steps.forEach((step, i) => { - if (!step.title ?? step.mode.id == -1 ?? !step.responsible.code) { + if (!step.title || step.mode.id == -1 || !step.responsible.code) { setCanSave(false); breakFunction = true; return; @@ -899,9 +895,7 @@ const PreservationJourney = (props: PreservationJourneyProps): JSX.Element => { return ( - setProjectIdValue(projectItem.id) - } + onClick={() => setProjectIdValue(projectItem)} > {projectItem.description} @@ -1168,7 +1162,7 @@ const PreservationJourney = (props: PreservationJourneyProps): JSX.Element => { > } - {(step.id == -1 ?? + {(step.id == -1 || (step.isVoided && !step.isInUse)) && ( { const endpoint = `/Journeys/${journeyId}`; @@ -1394,7 +1391,7 @@ class PreservationApiClient extends ApiClient { { title, rowVersion, - projectId, + projectName: name, }, settings ); From 3ebef3b85fd59dec20cfc992a9a78cd2bc76403c Mon Sep 17 00:00:00 2001 From: Edward Brunton <42774600+EdwardBrunton@users.noreply.github.com> Date: Fri, 10 Jan 2025 13:07:10 +0100 Subject: [PATCH 05/21] wip --- .../LibraryTreeview/LibraryTreeview.tsx | 5 ++- .../PreservationJourney.tsx | 43 ++++++++++++------- .../http/PreservationApiClient.ts | 5 ++- .../Preservation/views/AddScope/AddScope.tsx | 3 +- .../Dialogs/UpdateJourneyDialog.tsx | 5 ++- 5 files changed, 40 insertions(+), 21 deletions(-) diff --git a/src/modules/PlantConfig/views/Library/LibraryTreeview/LibraryTreeview.tsx b/src/modules/PlantConfig/views/Library/LibraryTreeview/LibraryTreeview.tsx index 886ad25c..9a7a079d 100644 --- a/src/modules/PlantConfig/views/Library/LibraryTreeview/LibraryTreeview.tsx +++ b/src/modules/PlantConfig/views/Library/LibraryTreeview/LibraryTreeview.tsx @@ -71,11 +71,12 @@ const LibraryTreeview = (props: LibraryTreeviewProps): JSX.Element => { const children: TreeViewNode[] = []; try { const journeys = await preservationApiClient.getJourneys(true); + console.log(journeys); const groupedJourneys = journeys.reduce( (acc: { [key: string]: Journey[] }, journey) => { const projectDescription = journey.project - ? journey.project.description - : 'Global'; + ? `${journey.project.name} ${journey.project.description}` + : 'Journey available across projects'; if (!acc[projectDescription]) { acc[projectDescription] = []; } diff --git a/src/modules/PlantConfig/views/Library/PreservationJourney/PreservationJourney.tsx b/src/modules/PlantConfig/views/Library/PreservationJourney/PreservationJourney.tsx index 4d8acd30..63ad26b0 100644 --- a/src/modules/PlantConfig/views/Library/PreservationJourney/PreservationJourney.tsx +++ b/src/modules/PlantConfig/views/Library/PreservationJourney/PreservationJourney.tsx @@ -58,6 +58,8 @@ const WAIT_INTERVAL = 300; const checkboxHeightInGridUnits = 4; +const sharedJourneyBreadcrumb = 'Journey available across projects'; + const PreservationJourney = (props: PreservationJourneyProps): JSX.Element => { const getInitialJourney = (): Journey => { return { @@ -76,6 +78,9 @@ const PreservationJourney = (props: PreservationJourneyProps): JSX.Element => { const [selectedProject, setSelectedProject] = useState< ProjectDetails | undefined >(); + const [breadcrumbs, setBreadcrumbs] = useState( + `${baseBreadcrumb} / ${sharedJourneyBreadcrumb}` + ); const [newJourney, setNewJourney] = useState(getInitialJourney); const [mappedModes, setMappedModes] = useState([]); const [modes, setModes] = useState([]); @@ -105,6 +110,14 @@ const PreservationJourney = (props: PreservationJourneyProps): JSX.Element => { return JSON.parse(JSON.stringify(journey)); }; + useEffect(() => { + setBreadcrumbs( + `${baseBreadcrumb} / ${ + selectedProject?.description ?? sharedJourneyBreadcrumb + }` + ); + }, [selectedProject]); + /** * Get Modes */ @@ -784,7 +797,7 @@ const PreservationJourney = (props: PreservationJourneyProps): JSX.Element => { if (isLoading) { return ( - {baseBreadcrumb} / + {breadcrumbs} / ); @@ -793,7 +806,7 @@ const PreservationJourney = (props: PreservationJourneyProps): JSX.Element => { if (!isEditMode) { return ( - {baseBreadcrumb} + {breadcrumbs} {addIcon} New preservation journey @@ -806,7 +819,7 @@ const PreservationJourney = (props: PreservationJourneyProps): JSX.Element => { return ( - {baseBreadcrumb} / {newJourney.title} + {breadcrumbs} / {newJourney.title} {newJourney.isVoided && ( { width: '280px', }} > + + ): void => { + setJourneyTitleValue(e.target.value); + }} + placeholder="Write here" + disabled={newJourney.isVoided} + /> { ); })} - - ): void => { - setJourneyTitleValue(e.target.value); - }} - placeholder="Write here" - disabled={newJourney.isVoided} - /> diff --git a/src/modules/Preservation/http/PreservationApiClient.ts b/src/modules/Preservation/http/PreservationApiClient.ts index 0aea67e6..574b6e05 100644 --- a/src/modules/Preservation/http/PreservationApiClient.ts +++ b/src/modules/Preservation/http/PreservationApiClient.ts @@ -1297,12 +1297,15 @@ class PreservationApiClient extends ApiClient { */ async getJourneys( includeVoided: boolean, - setRequestCanceller?: RequestCanceler + setRequestCanceller?: RequestCanceler, + projectName?: string ): Promise { + console.log('getJourneys', projectName); const endpoint = '/Journeys'; const settings: AxiosRequestConfig = { params: { includeVoided: includeVoided, + projectName: projectName, }, }; this.setupRequestCanceler(settings, setRequestCanceller); diff --git a/src/modules/Preservation/views/AddScope/AddScope.tsx b/src/modules/Preservation/views/AddScope/AddScope.tsx index 173ea823..b45b96cf 100644 --- a/src/modules/Preservation/views/AddScope/AddScope.tsx +++ b/src/modules/Preservation/views/AddScope/AddScope.tsx @@ -188,7 +188,8 @@ const AddScope = (): JSX.Element => { try { const data = await apiClient.getJourneys( false, - (cancel: Canceler) => (requestCancellor = cancel) + (cancel: Canceler) => (requestCancellor = cancel), + project.name ); setJourneys(data); } catch (error) { diff --git a/src/modules/Preservation/views/ScopeOverview/Dialogs/UpdateJourneyDialog.tsx b/src/modules/Preservation/views/ScopeOverview/Dialogs/UpdateJourneyDialog.tsx index a9e32bce..6129b9a9 100644 --- a/src/modules/Preservation/views/ScopeOverview/Dialogs/UpdateJourneyDialog.tsx +++ b/src/modules/Preservation/views/ScopeOverview/Dialogs/UpdateJourneyDialog.tsx @@ -128,7 +128,7 @@ const UpdateJourneyDialog = ({ const [tagJourneyAndStepValid, setTagJourneyAndStepValid] = useState(false); const { setDirtyStateFor, unsetDirtyStateFor } = useDirtyContext(); - const { apiClient } = usePreservationContext(); + const { apiClient, project } = usePreservationContext(); const [journeys, setJourneys] = useState([]); const [step, setStep] = useState(null); const [poTag, setPoTag] = useState(false); @@ -177,7 +177,8 @@ const UpdateJourneyDialog = ({ try { const data = await apiClient.getJourneys( true, - (cancel: Canceler) => (requestCancellor = cancel) + (cancel: Canceler) => (requestCancellor = cancel), + project.name ); setJourneys(data); } catch (error) { From 9d15e33394757d2f00f9c5c5ecde7a9e763a2443 Mon Sep 17 00:00:00 2001 From: Edward Brunton <42774600+EdwardBrunton@users.noreply.github.com> Date: Mon, 13 Jan 2025 12:24:33 +0100 Subject: [PATCH 06/21] wip --- src/components/Select/index.tsx | 4 +- .../context/PlantConfigContext.tsx | 1 - .../LibraryTreeview/LibraryTreeview.tsx | 1 - .../PreservationJourney.tsx | 59 +++++++++++-------- .../http/PreservationApiClient.ts | 1 - 5 files changed, 36 insertions(+), 30 deletions(-) diff --git a/src/components/Select/index.tsx b/src/components/Select/index.tsx index 2f94d86a..29c3dedc 100644 --- a/src/components/Select/index.tsx +++ b/src/components/Select/index.tsx @@ -32,6 +32,7 @@ export type SelectProps = { isVoided?: boolean; maxHeight?: string; title?: string; + style?: React.CSSProperties; }; const KEYCODE_ENTER = 13; @@ -48,6 +49,7 @@ const Select = ({ isVoided = false, maxHeight, title, + style, }: SelectProps): JSX.Element => { const [isOpen, setIsOpen] = useState(false); const containerRef = useRef(null); @@ -148,7 +150,7 @@ const Select = ({ }; return ( - + {label} { diff --git a/src/modules/PlantConfig/views/Library/LibraryTreeview/LibraryTreeview.tsx b/src/modules/PlantConfig/views/Library/LibraryTreeview/LibraryTreeview.tsx index 9a7a079d..691c6f30 100644 --- a/src/modules/PlantConfig/views/Library/LibraryTreeview/LibraryTreeview.tsx +++ b/src/modules/PlantConfig/views/Library/LibraryTreeview/LibraryTreeview.tsx @@ -71,7 +71,6 @@ const LibraryTreeview = (props: LibraryTreeviewProps): JSX.Element => { const children: TreeViewNode[] = []; try { const journeys = await preservationApiClient.getJourneys(true); - console.log(journeys); const groupedJourneys = journeys.reduce( (acc: { [key: string]: Journey[] }, journey) => { const projectDescription = journey.project diff --git a/src/modules/PlantConfig/views/Library/PreservationJourney/PreservationJourney.tsx b/src/modules/PlantConfig/views/Library/PreservationJourney/PreservationJourney.tsx index 63ad26b0..321b6a32 100644 --- a/src/modules/PlantConfig/views/Library/PreservationJourney/PreservationJourney.tsx +++ b/src/modules/PlantConfig/views/Library/PreservationJourney/PreservationJourney.tsx @@ -38,8 +38,7 @@ import { Step, } from './types'; import { ProjectDetails } from '@procosys/modules/Preservation/types'; -import { useProcosysContext } from '@procosys/core/ProcosysContext'; -import e from 'express'; +import { Autocomplete } from '@equinor/eds-core-react'; const addIcon = ; const upIcon = ; @@ -58,7 +57,7 @@ const WAIT_INTERVAL = 300; const checkboxHeightInGridUnits = 4; -const sharedJourneyBreadcrumb = 'Journey available across projects'; +const sharedJourneyBreadcrumb = 'All projects'; const PreservationJourney = (props: PreservationJourneyProps): JSX.Element => { const getInitialJourney = (): Journey => { @@ -244,12 +243,12 @@ const PreservationJourney = (props: PreservationJourneyProps): JSX.Element => { }, [props.journeyId]); useEffect(() => { - if (journey) { - setSelectedProject(newJourney.project); + if (journey || newJourney) { + setSelectedProject(newJourney.project ?? journey?.project); } else { setSelectedProject(undefined); } - }, [projects, newJourney.project?.id]); + }, [journey?.project?.id, newJourney.project?.id]); const saveNewStep = async ( journeyId: number, @@ -895,8 +894,13 @@ const PreservationJourney = (props: PreservationJourneyProps): JSX.Element => { { }} placeholder="Write here" disabled={newJourney.isVoided} + style={{ + minWidth: '250px', + width: 'fit-content', + }} /> - - {projects?.map((projectItem, index) => { - return ( - setProjectIdValue(projectItem)} - > - {projectItem.description} - - {projectItem.name} - - - ); - })} - + + + `${p.name} - ${p.description}` + } + onOptionsChange={(options: any): void => { + setProjectIdValue(options.selectedItems[0]); + }} + initialSelectedOptions={[selectedProject]} + key={selectedProject?.id} + label={'Project'} + placeholder={'Select project'} + style={{ + minWidth: '300px', + width: 'fit-content', + }} + > diff --git a/src/modules/Preservation/http/PreservationApiClient.ts b/src/modules/Preservation/http/PreservationApiClient.ts index 574b6e05..cf8fd400 100644 --- a/src/modules/Preservation/http/PreservationApiClient.ts +++ b/src/modules/Preservation/http/PreservationApiClient.ts @@ -1300,7 +1300,6 @@ class PreservationApiClient extends ApiClient { setRequestCanceller?: RequestCanceler, projectName?: string ): Promise { - console.log('getJourneys', projectName); const endpoint = '/Journeys'; const settings: AxiosRequestConfig = { params: { From 4ba04547b18eab30d33354f655466a29a56d6d10 Mon Sep 17 00:00:00 2001 From: Jostein Date: Fri, 17 Jan 2025 14:50:59 +0100 Subject: [PATCH 07/21] 771 Add message from backend for addscope failure (#892) --- .gitignore | 5 +++++ .vs/slnx.sqlite | Bin 167936 -> 0 bytes .../Preservation/views/AddScope/AddScope.tsx | 7 ++++++- 3 files changed, 11 insertions(+), 1 deletion(-) delete mode 100644 .vs/slnx.sqlite diff --git a/.gitignore b/.gitignore index ac9156a1..e8b1bd48 100644 --- a/.gitignore +++ b/.gitignore @@ -55,3 +55,8 @@ typings/ #VS Code folder .vscode/ .vs/slnx.sqlite +/.vs/procosys-js-frontend/CopilotIndices/17.12.53.23981 +/.vs/procosys-js-frontend/FileContentIndex +/.vs/ProjectSettings.json +/.vs/slnx.sqlite +/.vs/slnx.sqlite-journal diff --git a/.vs/slnx.sqlite b/.vs/slnx.sqlite deleted file mode 100644 index d716287f361cee6514cab8000745c97571268b18..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 167936 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