diff --git a/visualization/app/codeCharta/services/loadFile/fileParser.ts b/visualization/app/codeCharta/services/loadFile/fileParser.ts index 2f4c5bce85..fa1f1c3ee3 100644 --- a/visualization/app/codeCharta/services/loadFile/fileParser.ts +++ b/visualization/app/codeCharta/services/loadFile/fileParser.ts @@ -46,7 +46,8 @@ export function enrichFileStatesAndRecentFilesWithValidationResults( fileValidationResults: FileValidationResult[], currentFilesAreSampleFilesCallback: () => boolean, setCurrentFilesAreNotSampleFilesCallback: () => void -) { +): boolean { + let newFilesWereAdded = false for (const nameDataPair of nameDataPairs) { const fileValidationResult: FileValidationResult = { fileName: nameDataPair?.fileName, @@ -59,14 +60,23 @@ export function enrichFileStatesAndRecentFilesWithValidationResults( if (fileValidationResult.errors.length === 0) { fileValidationResult.warnings.push(...checkWarnings(nameDataPair?.content)) - - addFile(fileStates, recentFiles, nameDataPair, currentFilesAreSampleFilesCallback, setCurrentFilesAreNotSampleFilesCallback) + const addedFile = addFile( + fileStates, + recentFiles, + nameDataPair, + currentFilesAreSampleFilesCallback, + setCurrentFilesAreNotSampleFilesCallback + ) + if (addedFile) { + newFilesWereAdded = true + } } if (fileValidationResult.errors.length > 0 || fileValidationResult.warnings.length > 0) { fileValidationResults.push(fileValidationResult) } } + return newFilesWereAdded } function addFile( @@ -75,7 +85,7 @@ function addFile( file: NameDataPair, currentFilesAreSampleFilesCallback: () => boolean, setCurrentFilesAreNotSampleFilesCallback: () => void -) { +): boolean { if (currentFilesAreSampleFilesCallback()) { fileStates.length = 0 setCurrentFilesAreNotSampleFilesCallback() @@ -98,13 +108,13 @@ function addFile( } if (isDuplicate) { fileStates[storedFileChecksums.get(currentFileChecksum)].file.fileMeta.fileName = currentFileName - recentFiles[0] = currentFileName - recentFiles.push(currentFileName) - return + recentFiles.unshift(currentFileName) + return false } fileStates.push({ file: ccFile, selectedAs: FileSelectionState.None }) recentFiles.push(currentFileName) + return true } function getFileName(currentFileName: string, storedFileNames: Map, currentFileChecksum: string) { diff --git a/visualization/app/codeCharta/services/loadFile/loadFile.service.ts b/visualization/app/codeCharta/services/loadFile/loadFile.service.ts index bb7ffdbf1d..ab1b21daf2 100644 --- a/visualization/app/codeCharta/services/loadFile/loadFile.service.ts +++ b/visualization/app/codeCharta/services/loadFile/loadFile.service.ts @@ -15,6 +15,7 @@ import { Store, State } from "@ngrx/store" import { setCurrentFilesAreSampleFiles } from "../../state/store/appStatus/currentFilesAreSampleFiles/currentFilesAreSampleFiles.actions" export const NO_FILES_LOADED_ERROR_MESSAGE = "File(s) could not be loaded" +export const FILES_ALREADY_LOADED_ERROR_MESSAGE = "File(s) are already loaded" @Injectable({ providedIn: "root" }) export class LoadFileService implements OnDestroy { @@ -46,7 +47,7 @@ export class LoadFileService implements OnDestroy { const recentFiles: string[] = [] const fileValidationResults: CCFileValidationResult[] = [] - enrichFileStatesAndRecentFilesWithValidationResults( + const newFilesWereAdded = enrichFileStatesAndRecentFilesWithValidationResults( fileStates, recentFiles, nameDataPairs, @@ -71,5 +72,9 @@ export class LoadFileService implements OnDestroy { const rootName = this.state.getValue().files.find(f => f.file.fileMeta.fileName === recentFile).file.map.name this.store.dispatch(setStandardByNames({ fileNames: recentFiles })) fileRoot.updateRoot(rootName) + + if (!newFilesWereAdded) { + throw new Error(FILES_ALREADY_LOADED_ERROR_MESSAGE) + } } }