mirror of
https://dev.azure.com/hugendubel/ISA/_git/ISA-Frontend
synced 2025-12-28 22:42:11 +01:00
Compare commits
1 Commits
f10338a48b
...
feature/51
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
61a09bfacc |
@@ -8,14 +8,7 @@ import {
|
||||
signal,
|
||||
viewChild,
|
||||
} from '@angular/core';
|
||||
import {
|
||||
AbstractControl,
|
||||
FormControl,
|
||||
ReactiveFormsModule,
|
||||
ValidationErrors,
|
||||
ValidatorFn,
|
||||
Validators,
|
||||
} from '@angular/forms';
|
||||
import { FormControl, ReactiveFormsModule, Validators } from '@angular/forms';
|
||||
import {
|
||||
Product,
|
||||
ReturnProcessProductQuestion,
|
||||
@@ -39,16 +32,7 @@ import { isaActionScanner } from '@isa/icons';
|
||||
import { ScannerButtonComponent } from '@isa/shared/scanner';
|
||||
import { ProductRouterLinkDirective } from '@isa/shared/product-router-link';
|
||||
import { toSignal } from '@angular/core/rxjs-interop';
|
||||
|
||||
const eanValidator: ValidatorFn = (
|
||||
control: AbstractControl,
|
||||
): ValidationErrors | null => {
|
||||
const value = control.value;
|
||||
if (value && !/^[0-9]{13}$/.test(value)) {
|
||||
return { invalidEan: true };
|
||||
}
|
||||
return null;
|
||||
};
|
||||
import { eanValidator } from '@isa/utils/ean-validation';
|
||||
|
||||
@Component({
|
||||
selector: 'oms-feature-return-process-product-question',
|
||||
|
||||
@@ -248,8 +248,6 @@ export class RemissionSearchService {
|
||||
* const response = await service.fetchList({
|
||||
* assignedStockId: 'stock123',
|
||||
* supplierId: 'supplier456',
|
||||
* take: 250,
|
||||
* skip: 0,
|
||||
* orderBy: 'itemName'
|
||||
* });
|
||||
* console.log(`Total items: ${response.totalCount}`);
|
||||
@@ -267,8 +265,6 @@ export class RemissionSearchService {
|
||||
this.#logger.info('Fetching remission list from API', () => ({
|
||||
stockId: parsed.assignedStockId,
|
||||
supplierId: parsed.supplierId,
|
||||
take: 250,
|
||||
skip: parsed.skip,
|
||||
}));
|
||||
|
||||
let req$ = this.#remiService.RemiPflichtremissionsartikel({
|
||||
@@ -278,8 +274,6 @@ export class RemissionSearchService {
|
||||
filter: parsed.filter,
|
||||
input: parsed.input,
|
||||
orderBy: parsed.orderBy,
|
||||
take: 250,
|
||||
skip: parsed.skip,
|
||||
},
|
||||
});
|
||||
|
||||
@@ -325,8 +319,6 @@ export class RemissionSearchService {
|
||||
* const departmentResponse = await service.fetchDepartmentList({
|
||||
* assignedStockId: 'stock123',
|
||||
* supplierId: 'supplier456',
|
||||
* take: 250,
|
||||
* skip: 0
|
||||
* });
|
||||
*
|
||||
* @todo After fetching, StockInStock should be called in the old DomainRemissionService
|
||||
@@ -344,8 +336,6 @@ export class RemissionSearchService {
|
||||
this.#logger.info('Fetching department remission list from API', () => ({
|
||||
stockId: parsed.assignedStockId,
|
||||
supplierId: parsed.supplierId,
|
||||
take: 250,
|
||||
skip: parsed.skip,
|
||||
}));
|
||||
|
||||
let req$ = this.#remiService.RemiUeberlauf({
|
||||
@@ -355,8 +345,6 @@ export class RemissionSearchService {
|
||||
filter: parsed.filter,
|
||||
input: parsed.input,
|
||||
orderBy: parsed.orderBy,
|
||||
take: 250,
|
||||
skip: parsed.skip,
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -2,15 +2,15 @@ import { inject, resource } from '@angular/core';
|
||||
import { ListResponseArgs, ResponseArgsError } from '@isa/common/data-access';
|
||||
import {
|
||||
QueryTokenInput,
|
||||
RemissionItem,
|
||||
RemissionListType,
|
||||
RemissionSearchService,
|
||||
RemissionStockService,
|
||||
RemissionSupplierService,
|
||||
ReturnItem,
|
||||
ReturnSuggestion,
|
||||
} from '@isa/remission/data-access';
|
||||
import { SearchTrigger } from '@isa/shared/filter';
|
||||
import { parseISO, compareDesc } from 'date-fns';
|
||||
import { isEan } from '@isa/utils/ean-validation';
|
||||
|
||||
/**
|
||||
* Creates an Angular resource for fetching remission lists.
|
||||
@@ -36,7 +36,7 @@ import { parseISO, compareDesc } from 'date-fns';
|
||||
* },
|
||||
* searchTrigger: 'input'
|
||||
* }));
|
||||
*
|
||||
*
|
||||
* @remarks
|
||||
* The searchTrigger parameter influences query behavior:
|
||||
* - 'scan': Clears existing filters to show scan-specific results
|
||||
@@ -70,19 +70,24 @@ export const createRemissionListResource = (
|
||||
throw new Error('No Supplier available');
|
||||
}
|
||||
|
||||
let res:
|
||||
| ListResponseArgs<ReturnItem>
|
||||
| ListResponseArgs<ReturnSuggestion>
|
||||
| undefined;
|
||||
let res: ListResponseArgs<RemissionItem> | undefined = undefined;
|
||||
|
||||
const queryToken = { ...params.queryToken };
|
||||
|
||||
if (params.searchTrigger === 'scan') {
|
||||
// #5128 #5234 Bei Exact Search soll er über Alle Listen nur mit dem Input ohne aktive Filter / orderBy suchen
|
||||
const isExactSearch =
|
||||
params.searchTrigger === 'scan' || isEan(queryToken?.input?.['qs']);
|
||||
|
||||
if (isExactSearch) {
|
||||
queryToken.filter = {};
|
||||
queryToken.orderBy = [];
|
||||
}
|
||||
|
||||
if (params.remissionListType === RemissionListType.Pflicht) {
|
||||
res = await remissionSearchService.fetchList(
|
||||
if (
|
||||
isExactSearch ||
|
||||
params.remissionListType === RemissionListType.Pflicht
|
||||
) {
|
||||
const fetchListResponse = await remissionSearchService.fetchList(
|
||||
{
|
||||
assignedStockId: assignedStock.id,
|
||||
supplierId: firstSupplier.id,
|
||||
@@ -90,17 +95,34 @@ export const createRemissionListResource = (
|
||||
},
|
||||
abortSignal,
|
||||
);
|
||||
res = fetchListResponse;
|
||||
}
|
||||
|
||||
if (params.remissionListType === RemissionListType.Abteilung) {
|
||||
res = await remissionSearchService.fetchDepartmentList(
|
||||
{
|
||||
assignedStockId: assignedStock.id,
|
||||
supplierId: firstSupplier.id,
|
||||
...params.queryToken,
|
||||
},
|
||||
abortSignal,
|
||||
);
|
||||
if (
|
||||
isExactSearch ||
|
||||
params.remissionListType === RemissionListType.Abteilung
|
||||
) {
|
||||
const fetchDepartmentListResponse =
|
||||
await remissionSearchService.fetchDepartmentList(
|
||||
{
|
||||
assignedStockId: assignedStock.id,
|
||||
supplierId: firstSupplier.id,
|
||||
...queryToken,
|
||||
},
|
||||
abortSignal,
|
||||
);
|
||||
if (res) {
|
||||
// Merge results if both lists are fetched
|
||||
res.result = [
|
||||
...(res.result || []),
|
||||
...(fetchDepartmentListResponse.result || []),
|
||||
];
|
||||
res.hits += fetchDepartmentListResponse.hits;
|
||||
res.skip += fetchDepartmentListResponse.skip;
|
||||
res.take += fetchDepartmentListResponse.take;
|
||||
} else {
|
||||
res = fetchDepartmentListResponse;
|
||||
}
|
||||
}
|
||||
|
||||
if (res?.error) {
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
{{ product.name }}
|
||||
</div>
|
||||
<div class="isa-text-body-2-bold" data-what="product-price">
|
||||
{{ price.value.value | currency: price.value.currencySymbol }}
|
||||
{{ price?.value?.value | currency: price?.value?.currencySymbol }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex flex-col w-full gap-2 items-start justify-end">
|
||||
|
||||
7
libs/utils/ean-validation/README.md
Normal file
7
libs/utils/ean-validation/README.md
Normal file
@@ -0,0 +1,7 @@
|
||||
# ean-validation
|
||||
|
||||
This library was generated with [Nx](https://nx.dev).
|
||||
|
||||
## Running unit tests
|
||||
|
||||
Run `nx test ean-validation` to execute the unit tests.
|
||||
34
libs/utils/ean-validation/eslint.config.cjs
Normal file
34
libs/utils/ean-validation/eslint.config.cjs
Normal file
@@ -0,0 +1,34 @@
|
||||
const nx = require('@nx/eslint-plugin');
|
||||
const baseConfig = require('../../../eslint.config.js');
|
||||
|
||||
module.exports = [
|
||||
...baseConfig,
|
||||
...nx.configs['flat/angular'],
|
||||
...nx.configs['flat/angular-template'],
|
||||
{
|
||||
files: ['**/*.ts'],
|
||||
rules: {
|
||||
'@angular-eslint/directive-selector': [
|
||||
'error',
|
||||
{
|
||||
type: 'attribute',
|
||||
prefix: 'lib',
|
||||
style: 'camelCase',
|
||||
},
|
||||
],
|
||||
'@angular-eslint/component-selector': [
|
||||
'error',
|
||||
{
|
||||
type: 'element',
|
||||
prefix: 'lib',
|
||||
style: 'kebab-case',
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
files: ['**/*.html'],
|
||||
// Override or add rules here
|
||||
rules: {},
|
||||
},
|
||||
];
|
||||
20
libs/utils/ean-validation/project.json
Normal file
20
libs/utils/ean-validation/project.json
Normal file
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"name": "ean-validation",
|
||||
"$schema": "../../../node_modules/nx/schemas/project-schema.json",
|
||||
"sourceRoot": "libs/utils/ean-validation/src",
|
||||
"prefix": "lib",
|
||||
"projectType": "library",
|
||||
"tags": [],
|
||||
"targets": {
|
||||
"test": {
|
||||
"executor": "@nx/vite:test",
|
||||
"outputs": ["{options.reportsDirectory}"],
|
||||
"options": {
|
||||
"reportsDirectory": "../../../coverage/libs/utils/ean-validation"
|
||||
}
|
||||
},
|
||||
"lint": {
|
||||
"executor": "@nx/eslint:lint"
|
||||
}
|
||||
}
|
||||
}
|
||||
1
libs/utils/ean-validation/src/index.ts
Normal file
1
libs/utils/ean-validation/src/index.ts
Normal file
@@ -0,0 +1 @@
|
||||
export * from './lib/ean-validation/ean-validation';
|
||||
@@ -0,0 +1,5 @@
|
||||
/**
|
||||
* Constants for EAN validation.
|
||||
* EAN (European Article Number) is a 13-digit number used to identify products.
|
||||
*/
|
||||
export const EAN_REGEX = /^[0-9]{13}$/;
|
||||
@@ -0,0 +1,51 @@
|
||||
import { describe, it, expect } from 'vitest';
|
||||
import { FormControl } from '@angular/forms';
|
||||
import { eanValidator, isEan } from './ean-validation';
|
||||
|
||||
describe('eanValidator', () => {
|
||||
it('should return null for valid EAN', () => {
|
||||
// Arrange
|
||||
const control = new FormControl('1234567890123');
|
||||
|
||||
// Act
|
||||
const result = eanValidator(control);
|
||||
|
||||
// Assert
|
||||
expect(result).toBeNull();
|
||||
});
|
||||
|
||||
it('should return null for empty value', () => {
|
||||
// Arrange
|
||||
const control = new FormControl('');
|
||||
|
||||
// Act
|
||||
const result = eanValidator(control);
|
||||
|
||||
// Assert
|
||||
expect(result).toBeNull();
|
||||
});
|
||||
});
|
||||
|
||||
describe('isEan', () => {
|
||||
it('should return true for valid EAN', () => {
|
||||
// Arrange
|
||||
const validEan = '1234567890123';
|
||||
|
||||
// Act
|
||||
const result = isEan(validEan);
|
||||
|
||||
// Assert
|
||||
expect(result).toBe(true);
|
||||
});
|
||||
|
||||
it('should return false for undefined value', () => {
|
||||
// Arrange
|
||||
const undefinedValue = undefined;
|
||||
|
||||
// Act
|
||||
const result = isEan(undefinedValue);
|
||||
|
||||
// Assert
|
||||
expect(result).toBe(false);
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,33 @@
|
||||
import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';
|
||||
import { EAN_REGEX } from './constants';
|
||||
|
||||
/**
|
||||
* Validator function to check if a control's value is a valid EAN (European Article Number).
|
||||
* A valid EAN is a 13-digit number.
|
||||
*
|
||||
* @param {AbstractControl} control - The form control to validate
|
||||
* @returns {ValidationErrors | null} Returns an error object if the value is invalid, otherwise null
|
||||
*/
|
||||
export const eanValidator: ValidatorFn = (
|
||||
control: AbstractControl,
|
||||
): ValidationErrors | null => {
|
||||
const value = control.value;
|
||||
if (value && !EAN_REGEX.test(value)) {
|
||||
return { invalidEan: true };
|
||||
}
|
||||
return null;
|
||||
};
|
||||
|
||||
/**
|
||||
* Checks if a value is a valid EAN (European Article Number).
|
||||
* A valid EAN is a 13-digit number.
|
||||
*
|
||||
* @param {string | undefined} value - The value to check
|
||||
* @returns {boolean} True if the value is a valid EAN, false otherwise
|
||||
*/
|
||||
export const isEan = (value: string | undefined): boolean => {
|
||||
if (!value) {
|
||||
return false;
|
||||
}
|
||||
return EAN_REGEX.test(value);
|
||||
};
|
||||
13
libs/utils/ean-validation/src/test-setup.ts
Normal file
13
libs/utils/ean-validation/src/test-setup.ts
Normal file
@@ -0,0 +1,13 @@
|
||||
import '@angular/compiler';
|
||||
import '@analogjs/vitest-angular/setup-zone';
|
||||
|
||||
import {
|
||||
BrowserTestingModule,
|
||||
platformBrowserTesting,
|
||||
} from '@angular/platform-browser/testing';
|
||||
import { getTestBed } from '@angular/core/testing';
|
||||
|
||||
getTestBed().initTestEnvironment(
|
||||
BrowserTestingModule,
|
||||
platformBrowserTesting(),
|
||||
);
|
||||
30
libs/utils/ean-validation/tsconfig.json
Normal file
30
libs/utils/ean-validation/tsconfig.json
Normal file
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"extends": "../../../tsconfig.base.json",
|
||||
"compilerOptions": {
|
||||
"importHelpers": true,
|
||||
"moduleResolution": "bundler",
|
||||
"strict": true,
|
||||
"noImplicitOverride": true,
|
||||
"noPropertyAccessFromIndexSignature": true,
|
||||
"noImplicitReturns": true,
|
||||
"noFallthroughCasesInSwitch": true,
|
||||
"module": "preserve"
|
||||
},
|
||||
"angularCompilerOptions": {
|
||||
"enableI18nLegacyMessageIdFormat": false,
|
||||
"strictInjectionParameters": true,
|
||||
"strictInputAccessModifiers": true,
|
||||
"typeCheckHostBindings": true,
|
||||
"strictTemplates": true
|
||||
},
|
||||
"files": [],
|
||||
"include": [],
|
||||
"references": [
|
||||
{
|
||||
"path": "./tsconfig.lib.json"
|
||||
},
|
||||
{
|
||||
"path": "./tsconfig.spec.json"
|
||||
}
|
||||
]
|
||||
}
|
||||
27
libs/utils/ean-validation/tsconfig.lib.json
Normal file
27
libs/utils/ean-validation/tsconfig.lib.json
Normal file
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"extends": "./tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"outDir": "../../../dist/out-tsc",
|
||||
"declaration": true,
|
||||
"declarationMap": true,
|
||||
"inlineSources": true,
|
||||
"types": []
|
||||
},
|
||||
"exclude": [
|
||||
"src/**/*.spec.ts",
|
||||
"src/test-setup.ts",
|
||||
"jest.config.ts",
|
||||
"src/**/*.test.ts",
|
||||
"vite.config.ts",
|
||||
"vite.config.mts",
|
||||
"vitest.config.ts",
|
||||
"vitest.config.mts",
|
||||
"src/**/*.test.tsx",
|
||||
"src/**/*.spec.tsx",
|
||||
"src/**/*.test.js",
|
||||
"src/**/*.spec.js",
|
||||
"src/**/*.test.jsx",
|
||||
"src/**/*.spec.jsx"
|
||||
],
|
||||
"include": ["src/**/*.ts"]
|
||||
}
|
||||
29
libs/utils/ean-validation/tsconfig.spec.json
Normal file
29
libs/utils/ean-validation/tsconfig.spec.json
Normal file
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"extends": "./tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"outDir": "../../../dist/out-tsc",
|
||||
"types": [
|
||||
"vitest/globals",
|
||||
"vitest/importMeta",
|
||||
"vite/client",
|
||||
"node",
|
||||
"vitest"
|
||||
]
|
||||
},
|
||||
"include": [
|
||||
"vite.config.ts",
|
||||
"vite.config.mts",
|
||||
"vitest.config.ts",
|
||||
"vitest.config.mts",
|
||||
"src/**/*.test.ts",
|
||||
"src/**/*.spec.ts",
|
||||
"src/**/*.test.tsx",
|
||||
"src/**/*.spec.tsx",
|
||||
"src/**/*.test.js",
|
||||
"src/**/*.spec.js",
|
||||
"src/**/*.test.jsx",
|
||||
"src/**/*.spec.jsx",
|
||||
"src/**/*.d.ts"
|
||||
],
|
||||
"files": ["src/test-setup.ts"]
|
||||
}
|
||||
27
libs/utils/ean-validation/vite.config.mts
Normal file
27
libs/utils/ean-validation/vite.config.mts
Normal file
@@ -0,0 +1,27 @@
|
||||
/// <reference types='vitest' />
|
||||
import { defineConfig } from 'vite';
|
||||
import angular from '@analogjs/vite-plugin-angular';
|
||||
import { nxViteTsPaths } from '@nx/vite/plugins/nx-tsconfig-paths.plugin';
|
||||
import { nxCopyAssetsPlugin } from '@nx/vite/plugins/nx-copy-assets.plugin';
|
||||
|
||||
export default defineConfig(() => ({
|
||||
root: __dirname,
|
||||
cacheDir: '../../../node_modules/.vite/libs/utils/ean-validation',
|
||||
plugins: [angular(), nxViteTsPaths(), nxCopyAssetsPlugin(['*.md'])],
|
||||
// Uncomment this if you are using workers.
|
||||
// worker: {
|
||||
// plugins: [ nxViteTsPaths() ],
|
||||
// },
|
||||
test: {
|
||||
watch: false,
|
||||
globals: true,
|
||||
environment: 'jsdom',
|
||||
include: ['{src,tests}/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'],
|
||||
setupFiles: ['src/test-setup.ts'],
|
||||
reporters: ['default'],
|
||||
coverage: {
|
||||
reportsDirectory: '../../../coverage/libs/utils/ean-validation',
|
||||
provider: 'v8' as const,
|
||||
},
|
||||
},
|
||||
}));
|
||||
69047
package-lock.json
generated
69047
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
274
package.json
274
package.json
@@ -1,137 +1,137 @@
|
||||
{
|
||||
"name": "hima",
|
||||
"version": "0.0.0",
|
||||
"scripts": {
|
||||
"ng": "ng",
|
||||
"start": "nx serve isa-app --ssl",
|
||||
"pretest": "npx trash-cli testresults",
|
||||
"test": "npx nx run-many --tuiAutoExit true -t test --exclude isa-app",
|
||||
"ci": "npx nx run-many -t test --exclude isa-app -c ci --tuiAutoExit true",
|
||||
"build": "nx build isa-app --configuration=development",
|
||||
"build-prod": "nx build isa-app --configuration=production",
|
||||
"lint": "nx lint",
|
||||
"e2e": "nx e2e",
|
||||
"generate:swagger": "nx run-many -t generate -p tag:generated,swagger",
|
||||
"fix:files:swagger": "node ./tools/fix-files.js generated/swagger",
|
||||
"prettier": "prettier --write .",
|
||||
"pretty-quick": "pretty-quick --staged",
|
||||
"prepare": "husky",
|
||||
"storybook": "npx nx run isa-app:storybook"
|
||||
},
|
||||
"private": true,
|
||||
"dependencies": {
|
||||
"@angular/animations": "20.1.2",
|
||||
"@angular/cdk": "20.1.2",
|
||||
"@angular/common": "20.1.2",
|
||||
"@angular/compiler": "20.1.2",
|
||||
"@angular/core": "20.1.2",
|
||||
"@angular/forms": "20.1.2",
|
||||
"@angular/localize": "20.1.2",
|
||||
"@angular/platform-browser": "20.1.2",
|
||||
"@angular/platform-browser-dynamic": "20.1.2",
|
||||
"@angular/router": "20.1.2",
|
||||
"@angular/service-worker": "20.1.2",
|
||||
"@microsoft/signalr": "^8.0.7",
|
||||
"@ng-icons/core": "32.0.0",
|
||||
"@ng-icons/material-icons": "32.0.0",
|
||||
"@ngrx/component-store": "^20.0.0",
|
||||
"@ngrx/effects": "^20.0.0",
|
||||
"@ngrx/entity": "^20.0.0",
|
||||
"@ngrx/operators": "^20.0.0",
|
||||
"@ngrx/signals": "^20.0.0",
|
||||
"@ngrx/store": "^20.0.0",
|
||||
"@ngrx/store-devtools": "^20.0.0",
|
||||
"angular-oauth2-oidc": "20.0.0",
|
||||
"angular-oauth2-oidc-jwks": "20.0.0",
|
||||
"date-fns": "^4.1.0",
|
||||
"lodash": "^4.17.21",
|
||||
"moment": "^2.30.1",
|
||||
"ng2-pdf-viewer": "^10.4.0",
|
||||
"ngx-matomo-client": "^8.0.0",
|
||||
"parse-duration": "^2.1.3",
|
||||
"rxjs": "~7.8.2",
|
||||
"scandit-web-datacapture-barcode": "^6.28.1",
|
||||
"scandit-web-datacapture-core": "^6.28.1",
|
||||
"tslib": "^2.3.0",
|
||||
"uuid": "^8.3.2",
|
||||
"zod": "^3.24.2",
|
||||
"zone.js": "~0.15.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@analogjs/vite-plugin-angular": "1.19.1",
|
||||
"@analogjs/vitest-angular": "1.19.1",
|
||||
"@angular-devkit/build-angular": "20.1.1",
|
||||
"@angular-devkit/core": "20.1.1",
|
||||
"@angular-devkit/schematics": "20.1.1",
|
||||
"@angular/build": "20.1.1",
|
||||
"@angular/cli": "~20.1.0",
|
||||
"@angular/compiler-cli": "20.1.2",
|
||||
"@angular/language-service": "20.1.2",
|
||||
"@angular/pwa": "20.1.1",
|
||||
"@eslint/js": "^9.8.0",
|
||||
"@ngneat/spectator": "19.6.2",
|
||||
"@nx/angular": "21.3.2",
|
||||
"@nx/eslint": "21.3.2",
|
||||
"@nx/eslint-plugin": "21.3.2",
|
||||
"@nx/jest": "21.3.2",
|
||||
"@nx/js": "21.3.2",
|
||||
"@nx/storybook": "21.3.2",
|
||||
"@nx/vite": "21.3.2",
|
||||
"@nx/web": "21.3.2",
|
||||
"@nx/workspace": "21.3.2",
|
||||
"@schematics/angular": "20.1.1",
|
||||
"@storybook/addon-docs": "^9.0.11",
|
||||
"@storybook/angular": "^9.0.5",
|
||||
"@swc-node/register": "1.10.10",
|
||||
"@swc/core": "1.12.1",
|
||||
"@swc/helpers": "0.5.17",
|
||||
"@types/jest": "30.0.0",
|
||||
"@types/lodash": "^4.17.16",
|
||||
"@types/node": "18.16.9",
|
||||
"@types/uuid": "^10.0.0",
|
||||
"@typescript-eslint/utils": "^8.33.1",
|
||||
"@vitest/coverage-v8": "^3.1.1",
|
||||
"@vitest/ui": "^3.1.1",
|
||||
"angular-eslint": "20.1.1",
|
||||
"autoprefixer": "^10.4.20",
|
||||
"eslint": "^9.28.0",
|
||||
"eslint-config-prettier": "^10.1.5",
|
||||
"husky": "^9.1.7",
|
||||
"jest": "^29.7.0",
|
||||
"jest-environment-jsdom": "^29.7.0",
|
||||
"jest-environment-node": "^29.7.0",
|
||||
"jest-junit": "^16.0.0",
|
||||
"jest-preset-angular": "14.6.0",
|
||||
"jiti": "2.4.2",
|
||||
"jsdom": "~22.1.0",
|
||||
"jsonc-eslint-parser": "^2.1.0",
|
||||
"ng-mocks": "14.13.5",
|
||||
"ng-packagr": "20.1.0",
|
||||
"ng-swagger-gen": "^2.3.1",
|
||||
"nx": "21.3.2",
|
||||
"postcss": "^8.5.3",
|
||||
"postcss-url": "~10.1.3",
|
||||
"prettier": "^3.5.2",
|
||||
"pretty-quick": "~4.0.0",
|
||||
"storybook": "^9.0.5",
|
||||
"tailwindcss": "^3.4.14",
|
||||
"ts-jest": "^29.1.0",
|
||||
"ts-node": "10.9.1",
|
||||
"typescript": "5.8.3",
|
||||
"typescript-eslint": "^8.33.1",
|
||||
"vite": "6.3.5",
|
||||
"vitest": "^3.1.1"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"@esbuild/linux-x64": "^0.25.5"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=22.00.0",
|
||||
"npm": ">=10.0.0"
|
||||
},
|
||||
"overrides": {
|
||||
"jest-environment-jsdom": {
|
||||
"jsdom": "26.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
{
|
||||
"name": "hima",
|
||||
"version": "0.0.0",
|
||||
"scripts": {
|
||||
"ng": "ng",
|
||||
"start": "nx serve isa-app --ssl",
|
||||
"pretest": "npx trash-cli testresults",
|
||||
"test": "npx nx run-many --tuiAutoExit true -t test --exclude isa-app",
|
||||
"ci": "npx nx run-many -t test --exclude isa-app -c ci --tuiAutoExit true",
|
||||
"build": "nx build isa-app --configuration=development",
|
||||
"build-prod": "nx build isa-app --configuration=production",
|
||||
"lint": "nx lint",
|
||||
"e2e": "nx e2e",
|
||||
"generate:swagger": "nx run-many -t generate -p tag:generated,swagger",
|
||||
"fix:files:swagger": "node ./tools/fix-files.js generated/swagger",
|
||||
"prettier": "prettier --write .",
|
||||
"pretty-quick": "pretty-quick --staged",
|
||||
"prepare": "husky",
|
||||
"storybook": "npx nx run isa-app:storybook"
|
||||
},
|
||||
"private": true,
|
||||
"dependencies": {
|
||||
"@angular/animations": "20.1.2",
|
||||
"@angular/cdk": "20.1.2",
|
||||
"@angular/common": "20.1.2",
|
||||
"@angular/compiler": "20.1.2",
|
||||
"@angular/core": "20.1.2",
|
||||
"@angular/forms": "20.1.2",
|
||||
"@angular/localize": "20.1.2",
|
||||
"@angular/platform-browser": "20.1.2",
|
||||
"@angular/platform-browser-dynamic": "20.1.2",
|
||||
"@angular/router": "20.1.2",
|
||||
"@angular/service-worker": "20.1.2",
|
||||
"@microsoft/signalr": "^8.0.7",
|
||||
"@ng-icons/core": "32.0.0",
|
||||
"@ng-icons/material-icons": "32.0.0",
|
||||
"@ngrx/component-store": "^20.0.0",
|
||||
"@ngrx/effects": "^20.0.0",
|
||||
"@ngrx/entity": "^20.0.0",
|
||||
"@ngrx/operators": "^20.0.0",
|
||||
"@ngrx/signals": "^20.0.0",
|
||||
"@ngrx/store": "^20.0.0",
|
||||
"@ngrx/store-devtools": "^20.0.0",
|
||||
"angular-oauth2-oidc": "20.0.0",
|
||||
"angular-oauth2-oidc-jwks": "20.0.0",
|
||||
"date-fns": "^4.1.0",
|
||||
"lodash": "^4.17.21",
|
||||
"moment": "^2.30.1",
|
||||
"ng2-pdf-viewer": "^10.4.0",
|
||||
"ngx-matomo-client": "^8.0.0",
|
||||
"parse-duration": "^2.1.3",
|
||||
"rxjs": "~7.8.2",
|
||||
"scandit-web-datacapture-barcode": "^6.28.1",
|
||||
"scandit-web-datacapture-core": "^6.28.1",
|
||||
"tslib": "^2.3.0",
|
||||
"uuid": "^8.3.2",
|
||||
"zod": "^3.24.2",
|
||||
"zone.js": "~0.15.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@analogjs/vite-plugin-angular": "1.19.1",
|
||||
"@analogjs/vitest-angular": "1.19.1",
|
||||
"@angular-devkit/build-angular": "20.1.1",
|
||||
"@angular-devkit/core": "20.1.1",
|
||||
"@angular-devkit/schematics": "20.1.1",
|
||||
"@angular/build": "20.1.1",
|
||||
"@angular/cli": "~20.1.0",
|
||||
"@angular/compiler-cli": "20.1.2",
|
||||
"@angular/language-service": "20.1.2",
|
||||
"@angular/pwa": "20.1.1",
|
||||
"@eslint/js": "^9.8.0",
|
||||
"@ngneat/spectator": "19.6.2",
|
||||
"@nx/angular": "21.3.2",
|
||||
"@nx/eslint": "21.3.2",
|
||||
"@nx/eslint-plugin": "21.3.2",
|
||||
"@nx/jest": "21.3.2",
|
||||
"@nx/js": "21.3.2",
|
||||
"@nx/storybook": "21.3.2",
|
||||
"@nx/vite": "21.3.2",
|
||||
"@nx/web": "21.3.2",
|
||||
"@nx/workspace": "21.3.2",
|
||||
"@schematics/angular": "20.1.1",
|
||||
"@storybook/addon-docs": "^9.0.11",
|
||||
"@storybook/angular": "^9.0.5",
|
||||
"@swc-node/register": "1.10.10",
|
||||
"@swc/core": "1.12.1",
|
||||
"@swc/helpers": "0.5.17",
|
||||
"@types/jest": "30.0.0",
|
||||
"@types/lodash": "^4.17.16",
|
||||
"@types/node": "18.16.9",
|
||||
"@types/uuid": "^10.0.0",
|
||||
"@typescript-eslint/utils": "^8.33.1",
|
||||
"@vitest/coverage-v8": "^3.1.1",
|
||||
"@vitest/ui": "^3.1.1",
|
||||
"angular-eslint": "20.1.1",
|
||||
"autoprefixer": "^10.4.20",
|
||||
"eslint": "^9.28.0",
|
||||
"eslint-config-prettier": "^10.1.5",
|
||||
"husky": "^9.1.7",
|
||||
"jest": "^29.7.0",
|
||||
"jest-environment-jsdom": "^29.7.0",
|
||||
"jest-environment-node": "^29.7.0",
|
||||
"jest-junit": "^16.0.0",
|
||||
"jest-preset-angular": "14.6.0",
|
||||
"jiti": "2.4.2",
|
||||
"jsdom": "~22.1.0",
|
||||
"jsonc-eslint-parser": "^2.1.0",
|
||||
"ng-mocks": "14.13.5",
|
||||
"ng-packagr": "20.1.0",
|
||||
"ng-swagger-gen": "^2.3.1",
|
||||
"nx": "21.3.2",
|
||||
"postcss": "^8.5.3",
|
||||
"postcss-url": "~10.1.3",
|
||||
"prettier": "^3.5.2",
|
||||
"pretty-quick": "~4.0.0",
|
||||
"storybook": "^9.0.5",
|
||||
"tailwindcss": "^3.4.14",
|
||||
"ts-jest": "^29.1.0",
|
||||
"ts-node": "10.9.1",
|
||||
"typescript": "5.8.3",
|
||||
"typescript-eslint": "^8.33.1",
|
||||
"vite": "6.3.5",
|
||||
"vitest": "^3.1.1"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"@esbuild/linux-x64": "^0.25.5"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=22.00.0",
|
||||
"npm": ">=10.0.0"
|
||||
},
|
||||
"overrides": {
|
||||
"jest-environment-jsdom": {
|
||||
"jsdom": "26.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -111,6 +111,7 @@
|
||||
"@isa/ui/skeleton-loader": ["libs/ui/skeleton-loader/src/index.ts"],
|
||||
"@isa/ui/toolbar": ["libs/ui/toolbar/src/index.ts"],
|
||||
"@isa/ui/tooltip": ["libs/ui/tooltip/src/index.ts"],
|
||||
"@isa/utils/ean-validation": ["libs/utils/ean-validation/src/index.ts"],
|
||||
"@isa/utils/scroll-position": ["libs/utils/scroll-position/src/index.ts"],
|
||||
"@isa/utils/z-safe-parse": ["libs/utils/z-safe-parse/src/index.ts"],
|
||||
"@modal/*": ["apps/isa-app/src/modal/*/index.ts"],
|
||||
|
||||
Reference in New Issue
Block a user