chore(remission, navigation): update routing and remove unused helpers

This commit is contained in:
Nino
2025-07-29 12:18:07 +02:00
parent 0da9800ca0
commit 4732656a0f
27 changed files with 47 additions and 219 deletions

View File

@@ -201,17 +201,12 @@ const routes: Routes = [
).then((m) => m.routes),
},
{
path: 'list',
path: '',
loadChildren: () =>
import('@isa/remission/feature/remission-list').then(
(m) => m.routes,
),
},
{
path: '',
redirectTo: 'list',
pathMatch: 'full',
},
],
},
],

View File

@@ -321,7 +321,6 @@
'/',
processService.activatedTab()?.id || processService.nextId(),
'remission',
'list',
]"
(isActiveChange)="focusSearchBox()"
routerLinkActive="active"

View File

@@ -1,6 +1,18 @@
import { inject } from '@angular/core';
import { TabService } from './tab.service';
export function injectActivatedTabId() {
/**
* Injects the current activated tab as a signal.
* @returns A signal that emits the current activated tab or null if no tab is activated.
*/
export function injectTab() {
return inject(TabService).activatedTab;
}
/**
* Injects the current tab ID as a signal.
* @returns A signal that emits the current tab ID or null if no tab is activated.
*/
export function injectTabId() {
return inject(TabService).activatedTabId;
}

View File

@@ -12,7 +12,7 @@ import { z } from 'zod';
import { NgIconComponent, provideIcons } from '@ng-icons/core';
import { isaActionChevronLeft } from '@isa/icons';
import { ButtonComponent } from '@isa/ui/buttons';
import { injectActivatedTabId } from '@isa/core/tabs';
import { injectTabId } from '@isa/core/tabs';
import { Location } from '@angular/common';
import { ExpandableDirectives } from '@isa/ui/expandable';
import { ProgressBarComponent } from '@isa/ui/progress-bar';
@@ -52,7 +52,7 @@ export class ReturnDetailsComponent {
#returnDetailsService = inject(ReturnDetailsService);
#returnProcessStore = inject(ReturnProcessStore);
private processId = injectActivatedTabId();
private processId = injectTabId();
private _router = inject(Router);

View File

@@ -21,7 +21,7 @@ import { ReturnProcessComponent } from './return-process.component';
const mockActivatedProcessIdSignal = signal<number | null>(123);
jest.mock('@isa/core/tabs', () => ({
injectActivatedTabId: jest.fn(() => mockActivatedProcessIdSignal),
injectTabId: jest.fn(() => mockActivatedProcessIdSignal),
}));
jest.mock('scandit-web-datacapture-core', () => ({}));

View File

@@ -18,7 +18,7 @@ import {
ReturnProcessService,
ReturnProcessStore,
} from '@isa/oms/data-access';
import { injectActivatedTabId } from '@isa/core/tabs';
import { injectTabId } from '@isa/core/tabs';
import { ReturnProcessItemComponent } from './return-process-item/return-process-item.component';
import { Location } from '@angular/common';
import { RouterLink } from '@angular/router';
@@ -58,7 +58,7 @@ export class ReturnProcessComponent {
#logger = logger();
/** Signal emitting the numeric ID of the currently active return process, derived from the route parameters. Null if no ID is present. */
processId = injectActivatedTabId();
processId = injectTabId();
#returnCanReturnService = inject(ReturnCanReturnService);

View File

@@ -1,7 +1,7 @@
import { computed, inject, Injectable } from '@angular/core';
import { CanDeactivate } from '@angular/router';
import { firstValueFrom } from 'rxjs';
import { injectActivatedTabId } from '@isa/core/tabs';
import { injectTabId } from '@isa/core/tabs';
import { ReturnTaskListStore } from '@isa/oms/data-access';
import { ReturnReviewComponent } from '../return-review.component';
import { ConfirmationDialogComponent, injectDialog } from '@isa/ui/dialog';
@@ -15,7 +15,7 @@ export class UncompletedTasksGuard
title: 'Aufgaben erledigen',
});
processId = injectActivatedTabId();
processId = injectTabId();
uncompletedTaskListItems = computed(() => {
const processId = this.processId();

View File

@@ -1,6 +1,6 @@
import { ChangeDetectionStrategy, Component, inject } from '@angular/core';
import { PrintReceiptsService, ReturnProcessStore } from '@isa/oms/data-access';
import { injectActivatedTabId } from '@isa/core/tabs';
import { injectTabId } from '@isa/core/tabs';
import { ReturnTaskListComponent } from '@isa/oms/shared/task-list';
import { ReturnReviewHeaderComponent } from './return-review-header/return-review-header.component';
@@ -15,7 +15,7 @@ import { ReturnReviewHeaderComponent } from './return-review-header/return-revie
export class ReturnReviewComponent {
#printReceiptsService = inject(PrintReceiptsService);
#returnProcessStore = inject(ReturnProcessStore);
processId = injectActivatedTabId();
processId = injectTabId();
async printReceipt() {
const processId = this.processId();

View File

@@ -6,7 +6,7 @@ import {
} from '@angular/core';
import { ActivatedRoute, Router } from '@angular/router';
import { CallbackResult, ListResponseArgs } from '@isa/common/data-access';
import { injectActivatedTabId } from '@isa/core/tabs';
import { injectTabId } from '@isa/core/tabs';
import {
ReceiptListItem,
ReturnSearchStatus,
@@ -38,7 +38,7 @@ export class ReturnSearchMainComponent {
#route = inject(ActivatedRoute);
#router = inject(Router);
private _processId = injectActivatedTabId();
private _processId = injectTabId();
private _filterService = inject(FilterService);
private _returnSearchStore = inject(ReturnSearchStore);

View File

@@ -6,7 +6,7 @@ import {
inject,
linkedSignal,
} from '@angular/core';
import { injectActivatedTabId } from '@isa/core/tabs';
import { injectTabId } from '@isa/core/tabs';
import { ActivatedRoute, Router, RouterLink } from '@angular/router';
import {
@@ -72,7 +72,7 @@ export class ReturnSearchResultComponent implements AfterViewInit {
restoreScrollPosition = injectRestoreScrollPosition();
/** Current process ID from the activated route */
processId = injectActivatedTabId();
processId = injectTabId();
/** Store for managing return search data and operations */
returnSearchStore = inject(ReturnSearchStore);

View File

@@ -10,7 +10,7 @@ import { ReturnSummaryItemComponent } from './return-summary-item/return-summary
import { ActivatedRoute, Router } from '@angular/router';
jest.mock('@isa/core/tabs', () => ({
injectActivatedTabId: () => jest.fn(() => 1),
injectTabId: () => jest.fn(() => 1),
}));
const MOCK_RETURN_PROCESSES: ReturnProcess[] = [

View File

@@ -6,7 +6,7 @@ import {
signal,
} from '@angular/core';
import { ReturnSummaryItemComponent } from './return-summary-item/return-summary-item.component';
import { injectActivatedTabId } from '@isa/core/tabs';
import { injectTabId } from '@isa/core/tabs';
import {
ReturnProcess,
ReturnProcessService,
@@ -55,7 +55,7 @@ export class ReturnSummaryComponent {
location = inject(Location);
/** The active process ID from the current route */
processId = injectActivatedTabId();
processId = injectTabId();
/** Filtered list of return processes for the current process ID */
returnProcesses = computed<ReturnProcess[]>(() => {
@@ -118,9 +118,13 @@ export class ReturnSummaryComponent {
relativeTo: this.#activatedRoute,
});
} catch (error) {
this.#logger.error('Error completing return process', error as Error, () => ({
function: 'returnItemsAndPrintRecipt',
}));
this.#logger.error(
'Error completing return process',
error as Error,
() => ({
function: 'returnItemsAndPrintRecipt',
}),
);
this.returnItemsAndPrintReciptStatus.set('error');
}
}

View File

@@ -20,7 +20,7 @@ import {
} from '@isa/oms/data-access';
import { IconButtonComponent } from '@isa/ui/buttons';
import { firstValueFrom } from 'rxjs';
import { injectActivatedTabId } from '@isa/core/tabs';
import { injectTabId } from '@isa/core/tabs';
import { logger, provideLoggerContext } from '@isa/core/logging';
// TODO: Komponente und logik benötigt review
@@ -45,7 +45,7 @@ export class ReturnTaskListComponent {
#returnTaskListStore = inject(ReturnTaskListStore);
#logger = logger();
processId = injectActivatedTabId();
processId = injectTabId();
appearanceClass = computed(
() => `oms-shared-return-task-list__${this.appearance()}`,

View File

@@ -1,6 +1,6 @@
import { RemissionListType } from '@isa/remission/data-access';
export const remissionListTypeRouteMapping = {
[RemissionListType.Pflicht]: '..',
[RemissionListType.Abteilung]: 'department',
[RemissionListType.Pflicht]: '../mandatory',
[RemissionListType.Abteilung]: '../department',
} as const;

View File

@@ -160,9 +160,6 @@ export class RemissionListComponent {
};
});
// TODO (Info): Bei Add Item und
// Bei remittieren eines Stapels die StockInformation für alle anderen Stapel mit der selben EAN
// Muss InStock nochmal aufgerufen werden um die StockInformationen zu aktualisieren
/**
* Resource signal for fetching stock information for the current remission items.
* Updates when the list of items changes.

View File

@@ -6,7 +6,7 @@ import { RemissionListType } from '@isa/remission/data-access';
export const routes: Routes = [
{
path: '',
path: 'mandatory',
component: RemissionListComponent,
resolve: { querySettings: querySettingsResolverFn },
data: {
@@ -23,4 +23,9 @@ export const routes: Routes = [
remiType: RemissionListType.Abteilung,
},
},
{
path: '',
redirectTo: 'mandatory',
pathMatch: 'full',
},
];

View File

@@ -1,7 +0,0 @@
# remission-helpers
This library was generated with [Nx](https://nx.dev).
## Running unit tests
Run `nx test remission-helpers` to execute the unit tests.

View File

@@ -1,54 +0,0 @@
const nx = require('@nx/eslint-plugin');
const baseConfig = require('../../../eslint.config.js');
module.exports = [
...baseConfig,
{
files: ['**/*.json'],
rules: {
'@nx/dependency-checks': [
'error',
{
ignoredFiles: ['{projectRoot}/eslint.config.{js,cjs,mjs}'],
},
],
},
languageOptions: {
parser: require('jsonc-eslint-parser'),
},
},
...nx.configs['flat/angular'],
...nx.configs['flat/angular-template'],
{
files: ['**/*.ts'],
rules: {
'@angular-eslint/directive-selector': [
'error',
{
type: 'attribute',
prefix: 'remi',
style: 'camelCase',
},
],
'@angular-eslint/component-selector': [
'error',
{
type: 'element',
prefix: 'remi',
style: 'kebab-case',
},
],
},
},
{
files: ['**/*.html'],
// Override or add rules here
rules: {},
},
{
files: ['**/*.ts'],
rules: {
'@angular-eslint/prefer-standalone': 'off',
},
},
];

View File

@@ -1,21 +0,0 @@
export default {
displayName: 'remission-helpers',
preset: '../../../jest.preset.js',
setupFilesAfterEnv: ['<rootDir>/src/test-setup.ts'],
coverageDirectory: '../../../coverage/libs/remission/helpers',
transform: {
'^.+\\.(ts|mjs|js|html)$': [
'jest-preset-angular',
{
tsconfig: '<rootDir>/tsconfig.spec.json',
stringifyContentPathRegex: '\\.(html|svg)$',
},
],
},
transformIgnorePatterns: ['node_modules/(?!.*\\.mjs$)'],
snapshotSerializers: [
'jest-preset-angular/build/serializers/no-ng-attributes',
'jest-preset-angular/build/serializers/ng-snapshot',
'jest-preset-angular/build/serializers/html-comment',
],
};

View File

@@ -1,9 +0,0 @@
{
"name": "@isa/remission/helpers",
"version": "0.0.1",
"peerDependencies": {
"@angular/common": "^20.0.0",
"@angular/core": "^20.0.0"
},
"sideEffects": false
}

View File

@@ -1,20 +0,0 @@
{
"name": "remission-helpers",
"$schema": "../../../node_modules/nx/schemas/project-schema.json",
"sourceRoot": "libs/remission/helpers/src",
"prefix": "remi",
"projectType": "library",
"tags": [],
"targets": {
"test": {
"executor": "@nx/jest:jest",
"outputs": ["{workspaceRoot}/coverage/{projectRoot}"],
"options": {
"jestConfig": "libs/remission/helpers/jest.config.ts"
}
},
"lint": {
"executor": "@nx/eslint:lint"
}
}
}

View File

View File

@@ -1,10 +0,0 @@
// @ts-expect-error https://thymikee.github.io/jest-preset-angular/docs/getting-started/test-environment
globalThis.ngJest = {
testEnvironmentOptions: {
errorOnUnknownElements: true,
errorOnUnknownProperties: true,
},
};
import { setupZoneTestEnv } from 'jest-preset-angular/setup-env/zone';
setupZoneTestEnv();

View File

@@ -1,28 +0,0 @@
{
"compilerOptions": {
"target": "es2022",
"forceConsistentCasingInFileNames": true,
"strict": true,
"noImplicitOverride": true,
"noPropertyAccessFromIndexSignature": true,
"noImplicitReturns": true,
"noFallthroughCasesInSwitch": true
},
"files": [],
"include": [],
"references": [
{
"path": "./tsconfig.lib.json"
},
{
"path": "./tsconfig.spec.json"
}
],
"extends": "../../../tsconfig.base.json",
"angularCompilerOptions": {
"enableI18nLegacyMessageIdFormat": false,
"strictInjectionParameters": true,
"strictInputAccessModifiers": true,
"strictTemplates": true
}
}

View File

@@ -1,18 +0,0 @@
{
"extends": "./tsconfig.json",
"compilerOptions": {
"outDir": "../../../dist/out-tsc",
"declaration": true,
"declarationMap": true,
"inlineSources": true,
"types": [],
"moduleResolution": "bundler"
},
"exclude": [
"src/**/*.spec.ts",
"src/test-setup.ts",
"jest.config.ts",
"src/**/*.test.ts"
],
"include": ["src/**/*.ts"]
}

View File

@@ -1,16 +0,0 @@
{
"extends": "./tsconfig.json",
"compilerOptions": {
"outDir": "../../../dist/out-tsc",
"module": "commonjs",
"target": "es2016",
"types": ["jest", "node"]
},
"files": ["src/test-setup.ts"],
"include": [
"jest.config.ts",
"src/**/*.test.ts",
"src/**/*.spec.ts",
"src/**/*.d.ts"
]
}

View File

@@ -80,7 +80,6 @@
"@isa/remission/feature/remission-return-receipt-list": [
"libs/remission/feature/remission-return-receipt-list/src/index.ts"
],
"@isa/remission/helpers": ["libs/remission/helpers/src/index.ts"],
"@isa/remission/shared/product": [
"libs/remission/shared/product/src/index.ts"
],