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 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 | 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 6x 6x 18x 6x 6x 6x 6x 6x 6x 3x 3x 1x 1x 4x 1x 2x 1x 2x 2x 1x 1x 1x 2x | import { Component } from "@angular/core" import { Store } from "@ngrx/store" import { map } from "rxjs" import { CCFile, CcState, CodeMapNode } from "../../../codeCharta.model" import { FileSelectionState } from "../../../model/files/files" import { referenceFileSelector } from "../../../state/selectors/referenceFile/referenceFile.selector" import { setDeltaComparison, setDeltaReference, switchReferenceAndComparison } from "../../../state/store/files/files.actions" import { filesSelector } from "../../../state/store/files/files.selector" import { pictogramBackgroundSelector } from "./pictogramBackground.selector" import { MatDialog } from "@angular/material/dialog" import { ALERT_ON_INCOMPATIBLE_MAPS, IncompatibleMapsDialogComponent } from "./incompatibleMapsDialog/incompatibleMapsDialog.component" import { MatSelect } from "@angular/material/select" import { MatOption } from "@angular/material/core" import { AsyncPipe } from "@angular/common" import { RemoveExtensionPipe } from "../../../util/pipes/removeExtension.pipe" @Component({ selector: "cc-file-panel-delta-selector", templateUrl: "./filePanelDeltaSelector.component.html", styleUrls: ["./filePanelDeltaSelector.component.scss"], standalone: true, imports: [MatSelect, MatOption, AsyncPipe, RemoveExtensionPipe] }) export class FilePanelDeltaSelectorComponent { files$ = this.store.select(filesSelector) referenceFile$ = this.store.select(referenceFileSelector) comparisonFile$ = this.files$.pipe(map(files => files.find(file => file.selectedAs === FileSelectionState.Comparison)?.file)) possibleComparisonFiles$ = this.files$.pipe(map(files => files.filter(file => file.selectedAs !== FileSelectionState.Reference))) pictogramBackground$ = this.store.select(pictogramBackgroundSelector) referenceFile: CCFile comparisonFile: CCFile constructor( private store: Store<CcState>, private dialog: MatDialog ) { this.referenceFile$.subscribe(file => (this.referenceFile = file)) this.comparisonFile$.subscribe(file => (this.comparisonFile = file)) } handleDeltaReferenceFileChange(file: CCFile) { this.store.dispatch(setDeltaReference({ file })) this.showAlertWhenFilesAreIncompatible() } handleDeltaComparisonFileChange(file: CCFile) { this.store.dispatch(setDeltaComparison({ file })) this.showAlertWhenFilesAreIncompatible() } showAlertWhenFilesAreIncompatible() { if (this.alertOnIncompatibleMaps() && this.areMapsIncompatible()) { this.openIncompatibleMapsDialog() } } alertOnIncompatibleMaps() { return localStorage.getItem(ALERT_ON_INCOMPATIBLE_MAPS) ? JSON.parse(localStorage.getItem(ALERT_ON_INCOMPATIBLE_MAPS)) === true : true } openIncompatibleMapsDialog() { this.dialog.open(IncompatibleMapsDialogComponent, { panelClass: "cc-incompatible-maps-dialog", data: { referenceFileName: this.getFileName(this.referenceFile), comparisonFileName: this.getFileName(this.comparisonFile), fileWithMccMetric: this.getFileWithMccMetric(this.referenceFile, this.comparisonFile) } }) } private getFileName(file: CCFile) { return file?.fileMeta.fileName } private hasMccMetric(file: CCFile) { return file?.map.children.some(node => this.containsMCCAttribute(node)) } private containsMCCAttribute(node: CodeMapNode): boolean { Iif (node.attributes["mcc"]) { return true } Iif (node.children) { for (const child of node.children) { Iif (this.containsMCCAttribute(child)) { return true } } } return false } private getFileWithMccMetric(referenceFile: CCFile, comparisonFile: CCFile) { Iif (this.hasMccMetric(referenceFile)) { return this.getFileName(referenceFile) } Iif (this.hasMccMetric(comparisonFile)) { return this.getFileName(comparisonFile) } } switchReferenceAndComparison() { this.store.dispatch(switchReferenceAndComparison()) } areMapsIncompatible() { Iif (this.referenceFile && this.comparisonFile) { return this.hasMccMetric(this.referenceFile) !== this.hasMccMetric(this.comparisonFile) } } } |