Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | 5x 5x 5x 5x 5x 5x 5x 5x 6x 6x 9x 6x 6x 6x 3x 6x 6x 4x 4x 4x 4x 4x 4x 2x 4x | import { Injectable, OnDestroy } from "@angular/core" import { Store, State } from "@ngrx/store" import { pairwise, tap, filter } from "rxjs" import { CcState } from "../../codeCharta.model" import { FileSelectionState, FileState } from "../../model/files/files" import { isDeltaState, isEqual } from "../../model/files/files.helper" import { setDelta, setFiles } from "../../state/store/files/files.actions" import { filesSelector } from "../../state/store/files/files.selector" @Injectable({ providedIn: "root" }) export class FileSelectionModeService implements OnDestroy { lastSetFilesOfPreviousMode: FileState[] = [] private subscription = this.store .select(filesSelector) .pipe( pairwise(), filter(([oldFiles, newFiles]) => isDeltaState(oldFiles) !== isDeltaState(newFiles) || newFiles.length === 0), tap(([oldFiles, newFiles]) => { this.lastSetFilesOfPreviousMode = newFiles.length === 0 ? newFiles : oldFiles }) ) .subscribe() constructor( private store: Store<CcState>, private state: State<CcState> ) {} ngOnDestroy(): void { this.subscription.unsubscribe() } /** Toggles selection mode between "Standard" and "Delta". * If available it restores the last set selected files of new mode. * When it switches to delta mode and there is no reference * file selected, it sets the first selected file as reference as there * must be a reference file for anything being rendered at all. */ toggle() { const isCurrentlyStandardMode = this.lastSetFilesOfPreviousMode.length === 0 || isDeltaState(this.lastSetFilesOfPreviousMode) if (isCurrentlyStandardMode) { const existingFiles = filesSelector(this.state.getValue()) this.lastSetFilesOfPreviousMode = this.filterNoneExisting(existingFiles, this.lastSetFilesOfPreviousMode) const referenceFile = this.lastSetFilesOfPreviousMode.find(file => file.selectedAs === FileSelectionState.Reference) ?? existingFiles.find(file => file.selectedAs === FileSelectionState.Partial) const comparisonFile = this.lastSetFilesOfPreviousMode.find(file => file.selectedAs === FileSelectionState.Comparison) this.store.dispatch(setDelta({ referenceFile: referenceFile.file, comparisonFile: comparisonFile?.file })) } else { this.store.dispatch(setFiles({ value: this.lastSetFilesOfPreviousMode })) } } private filterNoneExisting(existingFileStates: FileState[], fileStates: FileState[]) { return fileStates.filter(fileState => existingFileStates.find(existingFileState => isEqual(existingFileState.file, fileState.file))) } } |