diff --git a/ui/ui-frontend/.eslintrc.json b/ui/ui-frontend/.eslintrc.json index 82f8b42618e..939e847f2a1 100644 --- a/ui/ui-frontend/.eslintrc.json +++ b/ui/ui-frontend/.eslintrc.json @@ -4,6 +4,109 @@ "projects/**/*" ], "overrides": [ + { + "files": [ + "*.ts" + ], + "excludedFiles": [ + "*.spec.ts" + ], + "plugins": [ + "boundaries" + ], + "settings": { + "boundaries/elements": [ + { + "type": "service", + "pattern": "projects/*/**/*.service.ts", + "capture": [ + "project" + ], + "mode": "full" + }, + { + "type": "component", + "pattern": "projects/*/**/*.component.ts", + "capture": [ + "project" + ], + "mode": "full" + }, + { + "type": "module", + "pattern": "projects/*/**/*.module.ts", + "capture": [ + "project" + ], + "mode": "full" + } + ] + }, + "rules": { + "boundaries/element-types": [ + "error", + { + "default": "disallow", + "rules": [ + { + "from": [ + "component" + ], + "allow": [ + "service" + ] + }, + { + "from": [ + "module" + ], + "allow": [ + "component", + "service" + ] + } + ] + } + ], + "boundaries/external": [ + "error", + { + "default": "disallow", + "rules": [ + { + "from": [ + "*" + ], + "allow": [ + "@angular/**", + "rxjs", + "zone.js" + ] + }, + { + "from": [ + ["*"] + ], + "allow": [ + "@angular/**", + "@ngx-translate/**", + "fast-xml-parser", + "file-saver-es", + "lodash-es", + "ngx-quicklink", + "ngx-translate-multi-http-loader", + "projects/${project}/**", + "rxjs", + "uuid", + "zone.js", + "vitamui-library" + ] + } + ] + } + ] + } + }, { "files": [ "*.ts" diff --git a/ui/ui-frontend/package-lock.json b/ui/ui-frontend/package-lock.json index 72289362191..80ea18270e6 100644 --- a/ui/ui-frontend/package-lock.json +++ b/ui/ui-frontend/package-lock.json @@ -79,6 +79,7 @@ "concurrently": "^8.2.2", "esbuild-visualizer": "^0.6.0", "eslint": "^8.57.0", + "eslint-plugin-boundaries": "^4.2.2", "husky": "8.0.3", "jasmine-core": "~5.1.2", "jasmine-marbles": "^0.9.2", @@ -9952,6 +9953,165 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dev": true, + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz", + "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==", + "dev": true, + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-boundaries": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-boundaries/-/eslint-plugin-boundaries-4.2.2.tgz", + "integrity": "sha512-cjwpZqkCXgfz953bc74uDetOtGVxwgMgNZ7hAKi6Oxck+x4oY6Z/9DzgPqAYhtQdSNHFVg+vhft/lSL+snPMQg==", + "dev": true, + "dependencies": { + "chalk": "4.1.2", + "eslint-import-resolver-node": "0.3.9", + "eslint-module-utils": "2.8.1", + "micromatch": "4.0.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "eslint": ">=6.0.0" + } + }, + "node_modules/eslint-plugin-boundaries/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint-plugin-boundaries/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint-plugin-boundaries/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-boundaries/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/eslint-plugin-boundaries/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint-plugin-boundaries/node_modules/micromatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "dev": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/eslint-plugin-boundaries/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/eslint-plugin-boundaries/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/eslint-scope": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.2.tgz", diff --git a/ui/ui-frontend/package.json b/ui/ui-frontend/package.json index 27b2dd1ba82..a5ebee5b3e9 100644 --- a/ui/ui-frontend/package.json +++ b/ui/ui-frontend/package.json @@ -155,6 +155,7 @@ "concurrently": "^8.2.2", "esbuild-visualizer": "^0.6.0", "eslint": "^8.57.0", + "eslint-plugin-boundaries": "^4.2.2", "husky": "8.0.3", "jasmine-core": "~5.1.2", "jasmine-marbles": "^0.9.2", diff --git a/ui/ui-frontend/projects/archive-search/src/app/archive/archive-preview/archive-unit-description-tab/archive-unit-description-tab.component.ts b/ui/ui-frontend/projects/archive-search/src/app/archive/archive-preview/archive-unit-description-tab/archive-unit-description-tab.component.ts index f55dae1ae1c..ed4857cbe6c 100644 --- a/ui/ui-frontend/projects/archive-search/src/app/archive/archive-preview/archive-unit-description-tab/archive-unit-description-tab.component.ts +++ b/ui/ui-frontend/projects/archive-search/src/app/archive/archive-preview/archive-unit-description-tab/archive-unit-description-tab.component.ts @@ -41,8 +41,15 @@ import { ActivatedRoute } from '@angular/router'; import { TranslateService } from '@ngx-translate/core'; import { Observable, pipe, Subscription, UnaryFunction } from 'rxjs'; import { filter, map, switchMap, tap } from 'rxjs/operators'; -import { ArchiveUnit, ArchiveUnitEditorComponent, JsonPatch, Logger, SpinnerOverlayService, StartupService } from 'vitamui-library'; -import { EditObject } from 'vitamui-library/app/modules/object-editor/models/edit-object.model'; +import { + ArchiveUnit, + ArchiveUnitEditorComponent, + EditObject, + JsonPatch, + Logger, + SpinnerOverlayService, + StartupService, +} from 'vitamui-library'; import { VitamUISnackBarComponent } from '../../shared/vitamui-snack-bar/vitamui-snack-bar.component'; import { ArchiveUnitService } from './archive-unit.service'; diff --git a/ui/ui-frontend/projects/archive-search/src/app/archive/archive-search/additional-actions-search/management-rules/archive-unit-rules/block-category-inheritance/block-category-inheritance.component.ts b/ui/ui-frontend/projects/archive-search/src/app/archive/archive-search/additional-actions-search/management-rules/archive-unit-rules/block-category-inheritance/block-category-inheritance.component.ts index 7b31f995453..d9b88ad7f4d 100644 --- a/ui/ui-frontend/projects/archive-search/src/app/archive/archive-search/additional-actions-search/management-rules/archive-unit-rules/block-category-inheritance/block-category-inheritance.component.ts +++ b/ui/ui-frontend/projects/archive-search/src/app/archive/archive-search/additional-actions-search/management-rules/archive-unit-rules/block-category-inheritance/block-category-inheritance.component.ts @@ -36,10 +36,10 @@ */ import { Component, Input, OnDestroy, TemplateRef, ViewChild } from '@angular/core'; import { MatLegacyDialog as MatDialog } from '@angular/material/legacy-dialog'; -import { ManagementRulesSharedDataService } from 'projects/archive-search/src/app/core/management-rules-shared-data.service'; import { Subscription } from 'rxjs'; import { filter } from 'rxjs/operators'; import { ActionsRules, ManagementRules, RuleActionsEnum, RuleCategoryAction } from '../../../../../models/ruleAction.interface'; +import { ManagementRulesSharedDataService } from '../../../../../../core/management-rules-shared-data.service'; @Component({ selector: 'app-block-category-inheritance', diff --git a/ui/ui-frontend/projects/archive-search/src/app/archive/archive-search/additional-actions-search/management-rules/archive-unit-rules/block-rules-inheritance/block-rules-inheritance.component.ts b/ui/ui-frontend/projects/archive-search/src/app/archive/archive-search/additional-actions-search/management-rules/archive-unit-rules/block-rules-inheritance/block-rules-inheritance.component.ts index 075b0260f24..ba952978e5d 100644 --- a/ui/ui-frontend/projects/archive-search/src/app/archive/archive-search/additional-actions-search/management-rules/archive-unit-rules/block-rules-inheritance/block-rules-inheritance.component.ts +++ b/ui/ui-frontend/projects/archive-search/src/app/archive/archive-search/additional-actions-search/management-rules/archive-unit-rules/block-rules-inheritance/block-rules-inheritance.component.ts @@ -37,13 +37,13 @@ import { Component, EventEmitter, Input, OnDestroy, Output, TemplateRef, ViewChild } from '@angular/core'; import { FormBuilder, FormGroup, Validators } from '@angular/forms'; import { MatLegacyDialog as MatDialog } from '@angular/material/legacy-dialog'; -import { ManagementRulesSharedDataService } from 'projects/archive-search/src/app/core/management-rules-shared-data.service'; import { merge, Subscription } from 'rxjs'; import { debounceTime, filter, map } from 'rxjs/operators'; import { diff, ManagementRuleValidators, Rule, RuleService, SearchCriteriaDto } from 'vitamui-library'; import { ArchiveSearchConstsEnum } from '../../../../../models/archive-search-consts-enum'; import { ManagementRules, RuleAction, RuleActionsEnum, RuleCategoryAction } from '../../../../../models/ruleAction.interface'; import { ManagementRulesValidatorService } from '../../../../../validators/management-rules-validator.service'; +import { ManagementRulesSharedDataService } from '../../../../../../core/management-rules-shared-data.service'; @Component({ selector: 'app-block-rules-inheritance', diff --git a/ui/ui-frontend/projects/archive-search/src/app/archive/archive-search/additional-actions-search/management-rules/archive-unit-rules/delete-unit-rules/delete-unit-rules.component.ts b/ui/ui-frontend/projects/archive-search/src/app/archive/archive-search/additional-actions-search/management-rules/archive-unit-rules/delete-unit-rules/delete-unit-rules.component.ts index b49cb525dea..bc499e81a8e 100644 --- a/ui/ui-frontend/projects/archive-search/src/app/archive/archive-search/additional-actions-search/management-rules/archive-unit-rules/delete-unit-rules/delete-unit-rules.component.ts +++ b/ui/ui-frontend/projects/archive-search/src/app/archive/archive-search/additional-actions-search/management-rules/archive-unit-rules/delete-unit-rules/delete-unit-rules.component.ts @@ -39,7 +39,6 @@ import { FormBuilder, FormGroup, Validators } from '@angular/forms'; import { MatLegacyDialog as MatDialog } from '@angular/material/legacy-dialog'; import { TranslateService } from '@ngx-translate/core'; import { cloneDeep } from 'lodash-es'; -import { ManagementRulesSharedDataService } from 'projects/archive-search/src/app/core/management-rules-shared-data.service'; import { merge, Subscription } from 'rxjs'; import { debounceTime, filter, map } from 'rxjs/operators'; import { @@ -57,6 +56,7 @@ import { UpdateUnitManagementRuleService } from '../../../../../common-services/ import { ArchiveSearchConstsEnum } from '../../../../../models/archive-search-consts-enum'; import { ManagementRules, RuleAction, RuleActionsEnum, RuleCategoryAction } from '../../../../../models/ruleAction.interface'; import { ManagementRulesValidatorService } from '../../../../../validators/management-rules-validator.service'; +import { ManagementRulesSharedDataService } from '../../../../../../core/management-rules-shared-data.service'; const MANAGEMENT_RULE_IDENTIFIER = 'MANAGEMENT_RULE_IDENTIFIER'; const ORIGIN_HAS_AT_LEAST_ONE = 'ORIGIN_HAS_AT_LEAST_ONE'; diff --git a/ui/ui-frontend/projects/archive-search/src/app/archive/archive-search/additional-actions-search/management-rules/archive-unit-rules/unlock-category-inheritance/unlock-category-inheritance.component.ts b/ui/ui-frontend/projects/archive-search/src/app/archive/archive-search/additional-actions-search/management-rules/archive-unit-rules/unlock-category-inheritance/unlock-category-inheritance.component.ts index 42f566e6f79..a569155ca91 100644 --- a/ui/ui-frontend/projects/archive-search/src/app/archive/archive-search/additional-actions-search/management-rules/archive-unit-rules/unlock-category-inheritance/unlock-category-inheritance.component.ts +++ b/ui/ui-frontend/projects/archive-search/src/app/archive/archive-search/additional-actions-search/management-rules/archive-unit-rules/unlock-category-inheritance/unlock-category-inheritance.component.ts @@ -38,7 +38,6 @@ import { Component, Input, OnDestroy, TemplateRef, ViewChild } from '@angular/co import { MatLegacyDialog as MatDialog } from '@angular/material/legacy-dialog'; import { TranslateService } from '@ngx-translate/core'; import { cloneDeep } from 'lodash-es'; -import { ManagementRulesSharedDataService } from 'projects/archive-search/src/app/core/management-rules-shared-data.service'; import { Subscription } from 'rxjs'; import { filter } from 'rxjs/operators'; import { CriteriaDataType, CriteriaOperator, SearchCriteriaDto, SearchCriteriaEltDto } from 'vitamui-library'; @@ -46,6 +45,7 @@ import { ArchiveService } from '../../../../../archive.service'; import { UpdateUnitManagementRuleService } from '../../../../../common-services/update-unit-management-rule.service'; import { ArchiveSearchConstsEnum } from '../../../../../models/archive-search-consts-enum'; import { ActionsRules, ManagementRules, RuleActionsEnum, RuleCategoryAction } from '../../../../../models/ruleAction.interface'; +import { ManagementRulesSharedDataService } from '../../../../../../core/management-rules-shared-data.service'; const ORIGIN_HAS_AT_LEAST_ONE = 'ORIGIN_HAS_AT_LEAST_ONE'; const MANAGEMENT_RULE_INHERITED_CRITERIA = 'MANAGEMENT_RULE_INHERITED_CRITERIA'; diff --git a/ui/ui-frontend/projects/archive-search/src/app/archive/archive-search/additional-actions-search/management-rules/archive-unit-rules/unlock-rules-inheritance/unlock-rules-inheritance.component.ts b/ui/ui-frontend/projects/archive-search/src/app/archive/archive-search/additional-actions-search/management-rules/archive-unit-rules/unlock-rules-inheritance/unlock-rules-inheritance.component.ts index ed882b39e52..6e81a6a0e02 100644 --- a/ui/ui-frontend/projects/archive-search/src/app/archive/archive-search/additional-actions-search/management-rules/archive-unit-rules/unlock-rules-inheritance/unlock-rules-inheritance.component.ts +++ b/ui/ui-frontend/projects/archive-search/src/app/archive/archive-search/additional-actions-search/management-rules/archive-unit-rules/unlock-rules-inheritance/unlock-rules-inheritance.component.ts @@ -39,8 +39,6 @@ import { FormBuilder, FormGroup, Validators } from '@angular/forms'; import { MatLegacyDialog as MatDialog } from '@angular/material/legacy-dialog'; import { TranslateService } from '@ngx-translate/core'; import { cloneDeep } from 'lodash-es'; -import { UpdateUnitManagementRuleService } from 'projects/archive-search/src/app/archive/common-services/update-unit-management-rule.service'; -import { ManagementRulesSharedDataService } from 'projects/archive-search/src/app/core/management-rules-shared-data.service'; import { merge, Subscription } from 'rxjs'; import { debounceTime, filter, map } from 'rxjs/operators'; import { @@ -57,6 +55,8 @@ import { ArchiveService } from '../../../../../archive.service'; import { ArchiveSearchConstsEnum } from '../../../../../models/archive-search-consts-enum'; import { ManagementRules, RuleAction, RuleActionsEnum, RuleCategoryAction } from '../../../../../models/ruleAction.interface'; import { ManagementRulesValidatorService } from '../../../../../validators/management-rules-validator.service'; +import { ManagementRulesSharedDataService } from '../../../../../../core/management-rules-shared-data.service'; +import { UpdateUnitManagementRuleService } from '../../../../../common-services/update-unit-management-rule.service'; const ORIGIN_HAS_AT_LEAST_ONE = 'ORIGIN_HAS_AT_LEAST_ONE'; const APPRAISAL_PREVENT_RULE_IDENTIFIER = 'APPRAISAL_PREVENT_RULE_IDENTIFIER'; diff --git a/ui/ui-frontend/projects/archive-search/src/app/archive/archive.component.ts b/ui/ui-frontend/projects/archive-search/src/app/archive/archive.component.ts index f0d81c0e30c..30995b1bfe5 100644 --- a/ui/ui-frontend/projects/archive-search/src/app/archive/archive.component.ts +++ b/ui/ui-frontend/projects/archive-search/src/app/archive/archive.component.ts @@ -54,6 +54,7 @@ import { import { ArchiveSharedDataService } from '../core/archive-shared-data.service'; import { ManagementRulesSharedDataService } from '../core/management-rules-shared-data.service'; import { ArchiveService } from './archive.service'; +import { ArchiveCollectService } from '../../../../collect/src/app/collect/archive-search-collect/archive-collect.service'; @Component({ selector: 'app-archive', @@ -82,9 +83,11 @@ export class ArchiveComponent extends SidenavPage implements OnInit, OnDest private archiveService: ArchiveService, private schemaService: SchemaService, private accessContractService: AccessContractService, + archiveCollectService: ArchiveCollectService, ) { super(route, globalEventService); this.schemaService.getSchema(Collection.ARCHIVE_UNIT); + console.log(archiveCollectService); } ngOnInit() {