diff --git a/npm/ng-packs/apps/dev-app/src/app/app.component.ts b/npm/ng-packs/apps/dev-app/src/app/app.component.ts index 44a504b978..1b0993cd2f 100644 --- a/npm/ng-packs/apps/dev-app/src/app/app.component.ts +++ b/npm/ng-packs/apps/dev-app/src/app/app.component.ts @@ -1,6 +1,7 @@ import { Component } from '@angular/core'; @Component({ + standalone: false, selector: 'app-root', template: ` diff --git a/npm/ng-packs/apps/dev-app/src/app/home/home.component.ts b/npm/ng-packs/apps/dev-app/src/app/home/home.component.ts index 97f1d14b32..ad791cabec 100644 --- a/npm/ng-packs/apps/dev-app/src/app/home/home.component.ts +++ b/npm/ng-packs/apps/dev-app/src/app/home/home.component.ts @@ -2,6 +2,7 @@ import { AuthService } from '@abp/ng.core'; import { Component, inject } from '@angular/core'; @Component({ + standalone: false, selector: 'app-home', templateUrl: './home.component.html', }) diff --git a/npm/ng-packs/apps/dev-app/src/app/route.provider.ts b/npm/ng-packs/apps/dev-app/src/app/route.provider.ts index a03945ada0..baf7f3c6d3 100644 --- a/npm/ng-packs/apps/dev-app/src/app/route.provider.ts +++ b/npm/ng-packs/apps/dev-app/src/app/route.provider.ts @@ -1,20 +1,21 @@ import { eLayoutType, RoutesService } from '@abp/ng.core'; -import { APP_INITIALIZER } from '@angular/core'; +import { inject, provideAppInitializer } from '@angular/core'; export const APP_ROUTE_PROVIDER = [ - { provide: APP_INITIALIZER, useFactory: configureRoutes, deps: [RoutesService], multi: true }, + provideAppInitializer(() => { + configureRoutes(); + }), ]; -function configureRoutes(routesService: RoutesService) { - return () => { - routesService.add([ - { - path: '/', - name: '::Menu:Home', - iconClass: 'fas fa-home', - order: 1, - layout: eLayoutType.application, - }, - ]); - }; +function configureRoutes() { + const routesService = inject(RoutesService); + routesService.add([ + { + path: '/', + name: '::Menu:Home', + iconClass: 'fas fa-home', + order: 1, + layout: eLayoutType.application, + }, + ]); } diff --git a/npm/ng-packs/jest.config.ts b/npm/ng-packs/jest.config.ts index d0dbd1b889..6b3f2d6e24 100644 --- a/npm/ng-packs/jest.config.ts +++ b/npm/ng-packs/jest.config.ts @@ -1,5 +1,5 @@ -import { getJestProjects } from '@nx/jest'; +import { getJestProjectsAsync } from '@nx/jest'; -export default { - projects: getJestProjects(), -}; +export default async () => ({ + projects: await getJestProjectsAsync(), +}); diff --git a/npm/ng-packs/migrations.json b/npm/ng-packs/migrations.json index c7f89c3394..6fb305ede9 100644 --- a/npm/ng-packs/migrations.json +++ b/npm/ng-packs/migrations.json @@ -1,84 +1,159 @@ { "migrations": [ { - "cli": "nx", - "version": "19.2.0-beta.2", - "description": "Updates the default workspace data directory to .nx/workspace-data", - "implementation": "./src/migrations/update-19-2-0/move-workspace-data-directory", + "version": "20.0.0-beta.7", + "description": "Migration for v20.0.0-beta.7", + "implementation": "./src/migrations/update-20-0-0/move-use-daemon-process", "package": "nx", - "name": "19-2-0-move-graph-cache-directory" + "name": "move-use-daemon-process" }, { - "cli": "nx", - "version": "19.2.2-beta.0", - "description": "Updates the nx wrapper.", - "implementation": "./src/migrations/update-17-3-0/update-nxw", + "version": "20.0.1", + "description": "Set `useLegacyCache` to true for migrating workspaces", + "implementation": "./src/migrations/update-20-0-1/use-legacy-cache", + "x-repair-skip": true, "package": "nx", - "name": "19-2-2-update-nx-wrapper" + "name": "use-legacy-cache" }, { - "version": "19.2.4-beta.0", - "description": "Set project name in nx.json explicitly", - "implementation": "./src/migrations/update-19-2-4/set-project-name", - "x-repair-skip": true, - "package": "nx", - "name": "19-2-4-set-project-name" + "version": "20.2.0-beta.5", + "description": "Update TypeScript ESLint packages to v8.13.0 if they are already on v8", + "implementation": "./src/migrations/update-20-2-0/update-typescript-eslint-v8-13-0", + "package": "@nx/eslint", + "name": "update-typescript-eslint-v8.13.0" + }, + { + "cli": "nx", + "version": "19.6.0-beta.4", + "description": "Update ciWebServerCommand to use static serve for the application.", + "implementation": "./src/migrations/update-19-6-0/update-ci-webserver-for-static-serve", + "package": "@nx/cypress", + "name": "update-19-6-0-update-ci-webserver-for-vite" + }, + { + "cli": "nx", + "version": "20.0.0-beta.5", + "description": "replace getJestProjects with getJestProjectsAsync", + "implementation": "./src/migrations/update-20-0-0/replace-getJestProjects-with-getJestProjectsAsync", + "package": "@nx/jest", + "name": "replace-getJestProjects-with-getJestProjectsAsync" + }, + { + "cli": "nx", + "version": "19.6.0-beta.4", + "description": "Ensure Module Federation DTS is turned off by default.", + "factory": "./src/migrations/update-19-6-0/turn-off-dts-by-default", + "package": "@nx/angular", + "name": "update-19-6-0" + }, + { + "cli": "nx", + "version": "19.6.0-beta.7", + "requires": { "@angular/core": ">=18.2.0" }, + "description": "Update the @angular/cli package version to ~18.2.0.", + "factory": "./src/migrations/update-19-6-0/update-angular-cli", + "package": "@nx/angular", + "name": "update-angular-cli-version-18-2-0" + }, + { + "cli": "nx", + "version": "19.6.1-beta.0", + "description": "Ensure Target Defaults are set correctly for Module Federation.", + "factory": "./src/migrations/update-19-6-1/ensure-depends-on-for-mf", + "package": "@nx/angular", + "name": "update-19-6-1-ensure-module-federation-target-defaults" + }, + { + "cli": "nx", + "version": "20.2.0-beta.2", + "description": "Update the ModuleFederationConfig import use @nx/module-federation.", + "factory": "./src/migrations/update-20-2-0/migrate-mf-imports-to-new-package", + "package": "@nx/angular", + "name": "update-20-2-0-update-module-federation-config-import" + }, + { + "cli": "nx", + "version": "20.2.0-beta.2", + "description": "Update the withModuleFederation import use @nx/module-federation/angular.", + "factory": "./src/migrations/update-20-2-0/migrate-with-mf-import-to-new-package", + "package": "@nx/angular", + "name": "update-20-2-0-update-with-module-federation-import" + }, + { + "cli": "nx", + "version": "20.2.0-beta.5", + "requires": { "@angular/core": ">=19.0.0" }, + "description": "Update the @angular/cli package version to ~19.0.0.", + "factory": "./src/migrations/update-20-2-0/update-angular-cli", + "package": "@nx/angular", + "name": "update-angular-cli-version-19-0-0" }, { "cli": "nx", - "version": "19.1.0-beta.6", - "description": "Migrate no-extra-semi rules into user config, out of nx extendable configs", - "implementation": "./src/migrations/update-19-1-0-migrate-no-extra-semi/migrate-no-extra-semi", - "package": "@nx/eslint-plugin", - "name": "update-19-1-0-rename-no-extra-semi" + "version": "20.2.0-beta.5", + "requires": { "@angular/core": ">=19.0.0" }, + "description": "Add the '@angular/localize/init' polyfill to the 'polyfills' option of targets using esbuild-based executors.", + "factory": "./src/migrations/update-20-2-0/add-localize-polyfill-to-targets", + "package": "@nx/angular", + "name": "add-localize-polyfill-to-targets" + }, + { + "cli": "nx", + "version": "20.2.0-beta.5", + "requires": { "@angular/core": ">=19.0.0" }, + "description": "Update '@angular/ssr' import paths to use the new '/node' entry point when 'CommonEngine' is detected.", + "factory": "./src/migrations/update-20-2-0/update-angular-ssr-imports-to-use-node-entry-point", + "package": "@nx/angular", + "name": "update-angular-ssr-imports-to-use-node-entry-point" }, { "cli": "nx", - "version": "19.1.0-beta.2", - "requires": { "@angular/core": ">=18.0.0" }, - "description": "Update the @angular/cli package version to ~18.0.0.", - "factory": "./src/migrations/update-19-1-0/update-angular-cli", + "version": "20.2.0-beta.6", + "requires": { "@angular/core": ">=19.0.0" }, + "description": "Disable the Angular ESLint prefer-standalone rule if not set.", + "factory": "./src/migrations/update-20-2-0/disable-angular-eslint-prefer-standalone", "package": "@nx/angular", - "name": "update-angular-cli-version-18-0-0" + "name": "disable-angular-eslint-prefer-standalone" }, { "cli": "nx", - "version": "19.2.1-beta.0", - "requires": { "@angular-eslint/eslint-plugin": ">=18.0.0" }, - "description": "Installs the '@typescript-eslint/utils' package when having installed '@angular-eslint/eslint-plugin' or '@angular-eslint/eslint-plugin-template' with version >=18.0.0.", - "factory": "./src/migrations/update-19-2-1/add-typescript-eslint-utils", + "version": "20.2.0-beta.8", + "requires": { "@angular/core": ">=19.0.0" }, + "description": "Remove Angular ESLint rules that were removed in v19.0.0.", + "factory": "./src/migrations/update-20-2-0/remove-angular-eslint-rules", "package": "@nx/angular", - "name": "add-typescript-eslint-utils" + "name": "remove-angular-eslint-rules" }, { "cli": "nx", - "version": "19.5.0-beta.1", - "requires": { "@angular/core": ">=18.1.0" }, - "description": "Update the @angular/cli package version to ~18.1.0.", - "factory": "./src/migrations/update-19-5-0/update-angular-cli", + "version": "20.2.0-beta.8", + "requires": { "@angular/core": ">=19.0.0" }, + "description": "Remove the deprecated 'tailwindConfig' option from ng-packagr executors. Tailwind CSS configurations located at the project or workspace root will be picked up automatically.", + "factory": "./src/migrations/update-20-2-0/remove-tailwind-config-from-ng-packagr-executors", "package": "@nx/angular", - "name": "update-angular-cli-version-18-1-0" + "name": "remove-tailwind-config-from-ng-packagr-executors" }, { - "version": "18.0.0", - "description": "Updates two-way bindings that have an invalid expression to use the longform expression instead.", - "factory": "./migrations/invalid-two-way-bindings/bundle", + "version": "19.0.0", + "description": "Updates non-standalone Directives, Component and Pipes to 'standalone:false' and removes 'standalone:true' from those who are standalone", + "factory": "./bundles/explicit-standalone-flag#migrate", "package": "@angular/core", - "name": "invalid-two-way-bindings" + "name": "explicit-standalone-flag" }, { - "version": "18.0.0", - "description": "Replace deprecated HTTP related modules with provider functions", - "factory": "./migrations/http-providers/bundle", + "version": "19.0.0", + "description": "Updates ExperimentalPendingTasks to PendingTasks", + "factory": "./bundles/pending-tasks#migrate", "package": "@angular/core", - "name": "migration-http-providers" + "name": "pending-tasks" }, { - "version": "18.1.0", - "description": "Updates calls to afterRender with an explicit phase to the new API", - "factory": "./migrations/after-render-phase/bundle", + "version": "19.0.0", + "description": "Replaces `APP_INITIALIZER`, `ENVIRONMENT_INITIALIZER` & `PLATFORM_INITIALIZER` respectively with `provideAppInitializer`, `provideEnvironmentInitializer` & `providePlatformInitializer`.", + "factory": "./bundles/provide-initializer#migrate", + "optional": true, "package": "@angular/core", - "name": "migration-after-render-phase" + "name": "provide-initializer" } ] } diff --git a/npm/ng-packs/package.json b/npm/ng-packs/package.json index 82972f3d70..276d18a7c2 100644 --- a/npm/ng-packs/package.json +++ b/npm/ng-packs/package.json @@ -46,51 +46,51 @@ "devDependencies": { "@abp/ng.theme.lepton-x": "~4.0.3", "@abp/utils": "~9.0.2", - "@angular-devkit/build-angular": "~18.1.0", - "@angular-devkit/core": "~18.1.0", - "@angular-devkit/schematics": "~18.1.0", - "@angular-devkit/schematics-cli": "~18.1.0", - "@angular-eslint/eslint-plugin": "~18.1.0", - "@angular-eslint/eslint-plugin-template": "~18.1.0", - "@angular-eslint/template-parser": "~18.1.0", - "@angular/animations": "~18.1.0", - "@angular/cli": "~18.1.0", - "@angular/common": "~18.1.0", - "@angular/compiler": "~18.1.0", - "@angular/compiler-cli": "~18.1.0", - "@angular/core": "~18.1.0", - "@angular/forms": "~18.1.0", - "@angular/language-service": "~18.1.0", - "@angular/localize": "~18.1.0", - "@angular/platform-browser": "~18.1.0", - "@angular/platform-browser-dynamic": "~18.1.0", - "@angular/router": "~18.1.0", + "@angular-devkit/build-angular": "~19.0.0", + "@angular-devkit/core": "~19.0.0", + "@angular-devkit/schematics": "~19.0.0", + "@angular-devkit/schematics-cli": "~19.0.0", + "@angular-eslint/eslint-plugin": "~19.0.0", + "@angular-eslint/eslint-plugin-template": "~19.0.0", + "@angular-eslint/template-parser": "~19.0.0", + "@angular/animations": "~19.0.0", + "@angular/cli": "~19.0.0", + "@angular/common": "~19.0.0", + "@angular/compiler": "~19.0.0", + "@angular/compiler-cli": "~19.0.0", + "@angular/core": "~19.0.0", + "@angular/forms": "~19.0.0", + "@angular/language-service": "~19.0.0", + "@angular/localize": "~19.0.0", + "@angular/platform-browser": "~19.0.0", + "@angular/platform-browser-dynamic": "~19.0.0", + "@angular/router": "~19.0.0", "@fortawesome/fontawesome-free": "^6.0.0", - "@ng-bootstrap/ng-bootstrap": "~17.0.0", - "@ngneat/spectator": "^16.0.0", + "@ng-bootstrap/ng-bootstrap": "~18.0.0-rc.0", + "@ngneat/spectator": "~19.1.0", "@ngx-validate/core": "^0.2.0", - "@nx/angular": "~19.5.0", - "@nx/cypress": "~19.5.0", - "@nx/devkit": "~19.5.0", - "@nx/eslint": "~19.5.0", - "@nx/eslint-plugin": "~19.5.0", - "@nx/jest": "~19.5.0", - "@nx/js": "~19.5.0", - "@nx/plugin": "~19.5.0", - "@nx/workspace": "~19.5.0", + "@nx/angular": "~20.2.0", + "@nx/cypress": "~20.2.0", + "@nx/devkit": "~20.2.0", + "@nx/eslint": "~20.2.0", + "@nx/eslint-plugin": "~20.2.0", + "@nx/jest": "~20.2.0", + "@nx/js": "~20.2.0", + "@nx/plugin": "~20.2.0", + "@nx/workspace": "~20.2.0", "@popperjs/core": "~2.11.0", - "@schematics/angular": "~18.1.0", + "@schematics/angular": "~19.0.0", "@swc-node/register": "1.9.2", "@swc/cli": "0.3.12", "@swc/core": "~1.5.0", "@swc/helpers": "~0.5.0", "@swimlane/ngx-datatable": "^20.0.0", - "@types/jest": "29.4.4", + "@types/jest": "29.5.14", "@types/node": "^20.0.0", "@typescript-eslint/eslint-plugin": "7.16.0", "@typescript-eslint/parser": "7.16.0", "@typescript-eslint/utils": "^7.16.0", - "angular-oauth2-oidc": "^17.0.0", + "angular-oauth2-oidc": "^19.0.0", "autoprefixer": "^10.0.0", "bootstrap": "^5.0.0", "bootstrap-icons": "^1.0.0", @@ -104,17 +104,16 @@ "jest": "^29.0.0", "jest-canvas-mock": "^2.0.0", "jest-environment-jsdom": "^29.0.0", - "jest-preset-angular": "14.1.1", + "jest-preset-angular": "14.4.2", "jsonc-eslint-parser": "^2.0.0", "jsonc-parser": "^2.0.0", "just-clone": "^6.0.0", "just-compare": "^2.0.0", "lerna": "^4.0.0", "lint-staged": "^13.0.0", - "ng-packagr": "~18.1.0", - "ng-zorro-antd": "^17.0.0", - "nx": "~19.5.0", - "perfect-scrollbar": "^1.0.0", + "ng-packagr": "~19.0.0", + "ng-zorro-antd": "^19.0.0-beta.0", + "nx": "~20.2.0", "postcss": "^8.0.0", "postcss-import": "14.1.0", "postcss-preset-env": "7.5.0", @@ -128,8 +127,8 @@ "ts-toolbelt": "^9.0.0", "tslib": "^2.0.0", "tslint": "~6.1.0", - "typescript": "~5.5.0", - "zone.js": "~0.14.0" + "typescript": "~5.6.0", + "zone.js": "~0.15.0" }, "lint-staged": { "**/*.{js,jsx,ts,tsx,html,css,scss}": [ diff --git a/npm/ng-packs/packages/account/config/src/providers/route.provider.ts b/npm/ng-packs/packages/account/config/src/providers/route.provider.ts index 2708d1d2f7..b152237503 100644 --- a/npm/ng-packs/packages/account/config/src/providers/route.provider.ts +++ b/npm/ng-packs/packages/account/config/src/providers/route.provider.ts @@ -1,56 +1,57 @@ import { eLayoutType, RoutesService } from '@abp/ng.core'; -import { APP_INITIALIZER } from '@angular/core'; +import { inject, provideAppInitializer } from '@angular/core'; import { eAccountRouteNames } from '../enums/route-names'; export const ACCOUNT_ROUTE_PROVIDERS = [ - { provide: APP_INITIALIZER, useFactory: configureRoutes, deps: [RoutesService], multi: true }, + provideAppInitializer(() => { + configureRoutes(); + }), ]; -export function configureRoutes(routes: RoutesService) { - return () => { - routes.add([ - { - path: undefined, - name: eAccountRouteNames.Account, - invisible: true, - layout: eLayoutType.account, - breadcrumbText: eAccountRouteNames.Account, - iconClass: 'bi bi-person-fill-gear', - order: 1, - }, - { - path: '/account/login', - name: eAccountRouteNames.Login, - parentName: eAccountRouteNames.Account, - order: 1, - }, - { - path: '/account/register', - name: eAccountRouteNames.Register, - parentName: eAccountRouteNames.Account, - order: 2, - }, - { - path: '/account/manage', - name: eAccountRouteNames.ManageProfile, - parentName: eAccountRouteNames.Account, - layout: eLayoutType.application, - breadcrumbText: 'AbpAccount::Manage', - iconClass: 'bi bi-kanban-fill', - order: 3, - }, - { - path: '/account/forgot-password', - parentName: eAccountRouteNames.Account, - name: eAccountRouteNames.ForgotPassword, - invisible: true, - }, - { - path: '/account/reset-password', - parentName: eAccountRouteNames.Account, - name: eAccountRouteNames.ResetPassword, - invisible: true, - }, - ]); - }; +export function configureRoutes() { + const routes = inject(RoutesService); + routes.add([ + { + path: undefined, + name: eAccountRouteNames.Account, + invisible: true, + layout: eLayoutType.account, + breadcrumbText: eAccountRouteNames.Account, + iconClass: 'bi bi-person-fill-gear', + order: 1, + }, + { + path: '/account/login', + name: eAccountRouteNames.Login, + parentName: eAccountRouteNames.Account, + order: 1, + }, + { + path: '/account/register', + name: eAccountRouteNames.Register, + parentName: eAccountRouteNames.Account, + order: 2, + }, + { + path: '/account/manage', + name: eAccountRouteNames.ManageProfile, + parentName: eAccountRouteNames.Account, + layout: eLayoutType.application, + breadcrumbText: 'AbpAccount::Manage', + iconClass: 'bi bi-kanban-fill', + order: 3, + }, + { + path: '/account/forgot-password', + parentName: eAccountRouteNames.Account, + name: eAccountRouteNames.ForgotPassword, + invisible: true, + }, + { + path: '/account/reset-password', + parentName: eAccountRouteNames.Account, + name: eAccountRouteNames.ResetPassword, + invisible: true, + }, + ]); } diff --git a/npm/ng-packs/packages/account/src/lib/components/change-password/change-password.component.ts b/npm/ng-packs/packages/account/src/lib/components/change-password/change-password.component.ts index 1656694781..8b2d29cba5 100644 --- a/npm/ng-packs/packages/account/src/lib/components/change-password/change-password.component.ts +++ b/npm/ng-packs/packages/account/src/lib/components/change-password/change-password.component.ts @@ -17,6 +17,7 @@ const { required } = Validators; const PASSWORD_FIELDS = ['newPassword', 'repeatNewPassword']; @Component({ + standalone: false, selector: 'abp-change-password-form', templateUrl: './change-password.component.html', exportAs: 'abpChangePasswordForm', diff --git a/npm/ng-packs/packages/account/src/lib/components/forgot-password/forgot-password.component.ts b/npm/ng-packs/packages/account/src/lib/components/forgot-password/forgot-password.component.ts index e1f460df5a..c1fbd7b703 100644 --- a/npm/ng-packs/packages/account/src/lib/components/forgot-password/forgot-password.component.ts +++ b/npm/ng-packs/packages/account/src/lib/components/forgot-password/forgot-password.component.ts @@ -4,6 +4,7 @@ import { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms import { finalize } from 'rxjs/operators'; @Component({ + standalone: false, selector: 'abp-forgot-password', templateUrl: 'forgot-password.component.html', }) @@ -14,7 +15,10 @@ export class ForgotPasswordComponent { isEmailSent = false; - constructor(private fb: UntypedFormBuilder, private accountService: AccountService) { + constructor( + private fb: UntypedFormBuilder, + private accountService: AccountService, + ) { this.form = this.fb.group({ email: ['', [Validators.required, Validators.email]], }); diff --git a/npm/ng-packs/packages/account/src/lib/components/login/login.component.ts b/npm/ng-packs/packages/account/src/lib/components/login/login.component.ts index 81636eef03..54bd4c8905 100644 --- a/npm/ng-packs/packages/account/src/lib/components/login/login.component.ts +++ b/npm/ng-packs/packages/account/src/lib/components/login/login.component.ts @@ -10,6 +10,7 @@ import { getRedirectUrl } from '../../utils/auth-utils'; const { maxLength, required } = Validators; @Component({ + standalone: false, selector: 'abp-login', templateUrl: './login.component.html', }) diff --git a/npm/ng-packs/packages/account/src/lib/components/manage-profile/manage-profile.component.ts b/npm/ng-packs/packages/account/src/lib/components/manage-profile/manage-profile.component.ts index 2e31176245..c6e976b72b 100644 --- a/npm/ng-packs/packages/account/src/lib/components/manage-profile/manage-profile.component.ts +++ b/npm/ng-packs/packages/account/src/lib/components/manage-profile/manage-profile.component.ts @@ -6,6 +6,7 @@ import { eAccountComponents } from '../../enums/components'; import { ManageProfileStateService } from '../../services/manage-profile.state.service'; @Component({ + standalone: false, selector: 'abp-manage-profile', templateUrl: './manage-profile.component.html', animations: [trigger('fadeIn', [transition(':enter', useAnimation(fadeIn))])], diff --git a/npm/ng-packs/packages/account/src/lib/components/personal-settings/personal-settings-half-row.component.ts b/npm/ng-packs/packages/account/src/lib/components/personal-settings/personal-settings-half-row.component.ts index 2515983e48..efb23afe67 100644 --- a/npm/ng-packs/packages/account/src/lib/components/personal-settings/personal-settings-half-row.component.ts +++ b/npm/ng-packs/packages/account/src/lib/components/personal-settings/personal-settings-half-row.component.ts @@ -7,6 +7,7 @@ import { import { UntypedFormGroup } from '@angular/forms'; @Component({ + standalone: false, selector: 'abp-personal-settings-half-row', template: `
diff --git a/npm/ng-packs/packages/account/src/lib/components/personal-settings/personal-settings.component.ts b/npm/ng-packs/packages/account/src/lib/components/personal-settings/personal-settings.component.ts index 8a3a63d376..3ff2692c4b 100644 --- a/npm/ng-packs/packages/account/src/lib/components/personal-settings/personal-settings.component.ts +++ b/npm/ng-packs/packages/account/src/lib/components/personal-settings/personal-settings.component.ts @@ -15,6 +15,7 @@ import { import { eAccountComponents } from '../../enums'; @Component({ + standalone: false, selector: 'abp-personal-settings-form', templateUrl: './personal-settings.component.html', exportAs: 'abpPersonalSettingsForm', diff --git a/npm/ng-packs/packages/account/src/lib/components/register/register.component.ts b/npm/ng-packs/packages/account/src/lib/components/register/register.component.ts index b535f51fcb..1027a9d108 100644 --- a/npm/ng-packs/packages/account/src/lib/components/register/register.component.ts +++ b/npm/ng-packs/packages/account/src/lib/components/register/register.component.ts @@ -11,6 +11,7 @@ import { getRedirectUrl } from '../../utils/auth-utils'; const { maxLength, required, email } = Validators; @Component({ + standalone: false, selector: 'abp-register', templateUrl: './register.component.html', }) diff --git a/npm/ng-packs/packages/account/src/lib/components/reset-password/reset-password.component.ts b/npm/ng-packs/packages/account/src/lib/components/reset-password/reset-password.component.ts index 8e93b75c06..046e761883 100644 --- a/npm/ng-packs/packages/account/src/lib/components/reset-password/reset-password.component.ts +++ b/npm/ng-packs/packages/account/src/lib/components/reset-password/reset-password.component.ts @@ -9,6 +9,7 @@ import { finalize } from 'rxjs/operators'; const PASSWORD_FIELDS = ['password', 'confirmPassword']; @Component({ + standalone: false, selector: 'abp-reset-password', templateUrl: './reset-password.component.html', }) diff --git a/npm/ng-packs/packages/components/chart.js/src/chart.component.ts b/npm/ng-packs/packages/components/chart.js/src/chart.component.ts index fe6015ba2b..d40b274443 100644 --- a/npm/ng-packs/packages/components/chart.js/src/chart.component.ts +++ b/npm/ng-packs/packages/components/chart.js/src/chart.component.ts @@ -16,6 +16,7 @@ import { let Chart: any; @Component({ + standalone: false, selector: 'abp-chart', template: `
{ @@ -101,7 +105,7 @@ export class ChartComponent implements AfterViewInit, OnDestroy, OnChanges { type: this.type as any, data: this.data, options: this.options, - plugins: this.plugins + plugins: this.plugins, }); }; diff --git a/npm/ng-packs/packages/components/extensible/ng-package.json b/npm/ng-packs/packages/components/extensible/ng-package.json index fbafcc4448..e09fb3fd03 100644 --- a/npm/ng-packs/packages/components/extensible/ng-package.json +++ b/npm/ng-packs/packages/components/extensible/ng-package.json @@ -1,4 +1,5 @@ { + "$schema": "../../../node_modules/ng-packagr/ng-entrypoint.schema.json", "lib": { "entryFile": "src/public-api.ts" } diff --git a/npm/ng-packs/packages/components/extensible/src/lib/components/date-time-picker/extensible-date-time-picker.component.ts b/npm/ng-packs/packages/components/extensible/src/lib/components/date-time-picker/extensible-date-time-picker.component.ts index 0976820506..a9902c8bae 100644 --- a/npm/ng-packs/packages/components/extensible/src/lib/components/date-time-picker/extensible-date-time-picker.component.ts +++ b/npm/ng-packs/packages/components/extensible/src/lib/components/date-time-picker/extensible-date-time-picker.component.ts @@ -25,7 +25,6 @@ import { selfFactory } from '../../utils/factory.util'; @Component({ exportAs: 'abpExtensibleDateTimePicker', - standalone: true, imports: [ CommonModule, ReactiveFormsModule, diff --git a/npm/ng-packs/packages/components/extensible/src/lib/components/extensible-form/extensible-form-prop.component.ts b/npm/ng-packs/packages/components/extensible/src/lib/components/extensible-form/extensible-form-prop.component.ts index 8a20afc9e8..d6e9dba268 100644 --- a/npm/ng-packs/packages/components/extensible/src/lib/components/extensible-form/extensible-form-prop.component.ts +++ b/npm/ng-packs/packages/components/extensible/src/lib/components/extensible-form/extensible-form-prop.component.ts @@ -47,14 +47,12 @@ import { eExtensibleComponents } from '../../enums/components'; import { ExtensibleDateTimePickerComponent } from '../date-time-picker/extensible-date-time-picker.component'; import { NgxValidateCoreModule } from '@ngx-validate/core'; import { ExtensibleFormPropService } from '../../services/extensible-form-prop.service'; -import { CreateInjectorPipe } from '../../pipes/create-injector.pipe'; import { CommonModule } from '@angular/common'; import { NgbTooltip } from '@ng-bootstrap/ng-bootstrap'; @Component({ selector: 'abp-extensible-form-prop', templateUrl: './extensible-form-prop.component.html', - standalone: true, imports: [ ExtensibleDateTimePickerComponent, NgbDatepickerModule, @@ -64,7 +62,6 @@ import { NgbTooltip } from '@ng-bootstrap/ng-bootstrap'; NgxValidateCoreModule, NgbTooltip, NgbTypeaheadModule, - CreateInjectorPipe, ShowPasswordDirective, PermissionDirective, LocalizationModule, diff --git a/npm/ng-packs/packages/components/extensible/src/lib/components/extensible-form/extensible-form.component.ts b/npm/ng-packs/packages/components/extensible/src/lib/components/extensible-form/extensible-form.component.ts index 455f8cdd99..33f6988811 100644 --- a/npm/ng-packs/packages/components/extensible/src/lib/components/extensible-form/extensible-form.component.ts +++ b/npm/ng-packs/packages/components/extensible/src/lib/components/extensible-form/extensible-form.component.ts @@ -21,7 +21,6 @@ import { CommonModule } from '@angular/common'; import { PropDataDirective } from '../../directives/prop-data.directive'; @Component({ - standalone: true, exportAs: 'abpExtensibleForm', selector: 'abp-extensible-form', templateUrl: './extensible-form.component.html', diff --git a/npm/ng-packs/packages/components/extensible/src/lib/components/extensible-table/extensible-table.component.ts b/npm/ng-packs/packages/components/extensible/src/lib/components/extensible-table/extensible-table.component.ts index 9d4a7be83f..86de7f0ff2 100644 --- a/npm/ng-packs/packages/components/extensible/src/lib/components/extensible-table/extensible-table.component.ts +++ b/npm/ng-packs/packages/components/extensible/src/lib/components/extensible-table/extensible-table.component.ts @@ -55,7 +55,6 @@ const DEFAULT_ACTIONS_COLUMN_WIDTH = 150; @Component({ exportAs: 'abpExtensibleTable', selector: 'abp-extensible-table', - standalone: true, imports: [ AbpVisibleDirective, NgxDatatableModule, diff --git a/npm/ng-packs/packages/components/extensible/src/lib/components/grid-actions/grid-actions.component.ts b/npm/ng-packs/packages/components/extensible/src/lib/components/grid-actions/grid-actions.component.ts index 7a537c6eb8..5307a4a671 100644 --- a/npm/ng-packs/packages/components/extensible/src/lib/components/grid-actions/grid-actions.component.ts +++ b/npm/ng-packs/packages/components/extensible/src/lib/components/grid-actions/grid-actions.component.ts @@ -15,7 +15,6 @@ import { NgClass, NgTemplateOutlet } from '@angular/common'; @Component({ exportAs: 'abpGridActions', - standalone: true, imports: [ NgbDropdownModule, EllipsisDirective, diff --git a/npm/ng-packs/packages/components/extensible/src/lib/components/page-toolbar/page-toolbar.component.ts b/npm/ng-packs/packages/components/extensible/src/lib/components/page-toolbar/page-toolbar.component.ts index 507064a54c..7492b6f94e 100644 --- a/npm/ng-packs/packages/components/extensible/src/lib/components/page-toolbar/page-toolbar.component.ts +++ b/npm/ng-packs/packages/components/extensible/src/lib/components/page-toolbar/page-toolbar.component.ts @@ -15,7 +15,6 @@ import { NgClass, NgComponentOutlet } from '@angular/common'; @Component({ exportAs: 'abpPageToolbar', selector: 'abp-page-toolbar', - standalone: true, imports: [ CreateInjectorPipe, PermissionDirective, diff --git a/npm/ng-packs/packages/components/page/src/page-part.directive.ts b/npm/ng-packs/packages/components/page/src/page-part.directive.ts index e212cac63c..9bb5efdf09 100644 --- a/npm/ng-packs/packages/components/page/src/page-part.directive.ts +++ b/npm/ng-packs/packages/components/page/src/page-part.directive.ts @@ -24,7 +24,10 @@ export interface PageRenderStrategy { export const PAGE_RENDER_STRATEGY = new InjectionToken('PAGE_RENDER_STRATEGY'); -@Directive({ selector: '[abpPagePart]' }) +@Directive({ + standalone: false, + selector: '[abpPagePart]', +}) export class PagePartDirective implements OnInit, OnDestroy, OnChanges { hasRendered = false; type!: string; diff --git a/npm/ng-packs/packages/components/page/src/page-parts.component.ts b/npm/ng-packs/packages/components/page/src/page-parts.component.ts index 720a14c4a9..ba8fada017 100644 --- a/npm/ng-packs/packages/components/page/src/page-parts.component.ts +++ b/npm/ng-packs/packages/components/page/src/page-parts.component.ts @@ -7,6 +7,7 @@ export enum PageParts { } @Component({ + standalone: false, selector: 'abp-page-title-container', template: ` `, encapsulation: ViewEncapsulation.None, @@ -14,6 +15,7 @@ export enum PageParts { export class PageTitleContainerComponent {} @Component({ + standalone: false, selector: 'abp-page-breadcrumb-container', template: ` `, encapsulation: ViewEncapsulation.None, @@ -21,6 +23,7 @@ export class PageTitleContainerComponent {} export class PageBreadcrumbContainerComponent {} @Component({ + standalone: false, selector: 'abp-page-toolbar-container', template: ` `, encapsulation: ViewEncapsulation.None, diff --git a/npm/ng-packs/packages/components/page/src/page.component.ts b/npm/ng-packs/packages/components/page/src/page.component.ts index 06a8e3af6d..d1b0b3236b 100644 --- a/npm/ng-packs/packages/components/page/src/page.component.ts +++ b/npm/ng-packs/packages/components/page/src/page.component.ts @@ -7,6 +7,7 @@ import { } from './page-parts.component'; @Component({ + standalone: false, selector: 'abp-page', templateUrl: './page.component.html', encapsulation: ViewEncapsulation.None, diff --git a/npm/ng-packs/packages/components/tree/src/lib/components/tree.component.ts b/npm/ng-packs/packages/components/tree/src/lib/components/tree.component.ts index ccc44cde0b..51e4eb9eae 100644 --- a/npm/ng-packs/packages/components/tree/src/lib/components/tree.component.ts +++ b/npm/ng-packs/packages/components/tree/src/lib/components/tree.component.ts @@ -23,6 +23,7 @@ import { DISABLE_TREE_STYLE_LOADING_TOKEN } from '../disable-tree-style-loading. export type DropEvent = NzFormatEmitEvent & { pos: number }; @Component({ + standalone: false, selector: 'abp-tree', templateUrl: 'tree.component.html', styleUrls: ['tree.component.scss'], diff --git a/npm/ng-packs/packages/components/tree/src/lib/templates/expanded-icon-template.directive.ts b/npm/ng-packs/packages/components/tree/src/lib/templates/expanded-icon-template.directive.ts index 35706bd25f..03bb2c8fed 100644 --- a/npm/ng-packs/packages/components/tree/src/lib/templates/expanded-icon-template.directive.ts +++ b/npm/ng-packs/packages/components/tree/src/lib/templates/expanded-icon-template.directive.ts @@ -1,6 +1,7 @@ import { Directive, TemplateRef } from '@angular/core'; @Directive({ + standalone: false, selector: '[abpTreeExpandedIconTemplate],[abp-tree-expanded-icon-template]', }) export class ExpandedIconTemplateDirective { diff --git a/npm/ng-packs/packages/components/tree/src/lib/templates/tree-node-template.directive.ts b/npm/ng-packs/packages/components/tree/src/lib/templates/tree-node-template.directive.ts index 56c66af04b..5fd75b2025 100644 --- a/npm/ng-packs/packages/components/tree/src/lib/templates/tree-node-template.directive.ts +++ b/npm/ng-packs/packages/components/tree/src/lib/templates/tree-node-template.directive.ts @@ -1,6 +1,7 @@ import { Directive, TemplateRef } from '@angular/core'; @Directive({ + standalone: false, selector: '[abpTreeNodeTemplate],[abp-tree-node-template]', }) export class TreeNodeTemplateDirective { diff --git a/npm/ng-packs/packages/core/src/lib/abstracts/ng-model.component.ts b/npm/ng-packs/packages/core/src/lib/abstracts/ng-model.component.ts index 6653880b45..1d6d7e545d 100644 --- a/npm/ng-packs/packages/core/src/lib/abstracts/ng-model.component.ts +++ b/npm/ng-packs/packages/core/src/lib/abstracts/ng-model.component.ts @@ -2,7 +2,10 @@ import { ChangeDetectorRef, Component, inject, Input } from '@angular/core'; import { ControlValueAccessor } from '@angular/forms'; // Not an abstract class on purpose. Do not change! -@Component({ template: '' }) +@Component({ + standalone: false, + template: '', +}) export class AbstractNgModelComponent implements ControlValueAccessor { protected _value!: T; protected cdRef = inject(ChangeDetectorRef); diff --git a/npm/ng-packs/packages/core/src/lib/components/dynamic-layout.component.ts b/npm/ng-packs/packages/core/src/lib/components/dynamic-layout.component.ts index 1910386a51..9034ad0c24 100644 --- a/npm/ng-packs/packages/core/src/lib/components/dynamic-layout.component.ts +++ b/npm/ng-packs/packages/core/src/lib/components/dynamic-layout.component.ts @@ -14,6 +14,7 @@ import { DYNAMIC_LAYOUTS_TOKEN } from '../tokens/dynamic-layout.token'; import { EnvironmentService } from '../services'; @Component({ + standalone: false, selector: 'abp-dynamic-layout', template: ` @if (isLayoutVisible) { @@ -28,7 +29,6 @@ export class DynamicLayoutComponent implements OnInit { readonly layouts = inject(DYNAMIC_LAYOUTS_TOKEN); isLayoutVisible = true; - protected readonly router = inject(Router); protected readonly route = inject(ActivatedRoute); protected readonly routes = inject(RoutesService); @@ -46,7 +46,7 @@ export class DynamicLayoutComponent implements OnInit { this.checkLayoutOnNavigationEnd(); this.listenToLanguageChange(); } - + ngOnInit(): void { if (this.layout) { return; diff --git a/npm/ng-packs/packages/core/src/lib/components/replaceable-route-container.component.ts b/npm/ng-packs/packages/core/src/lib/components/replaceable-route-container.component.ts index 92d30fdff9..6b8373f658 100644 --- a/npm/ng-packs/packages/core/src/lib/components/replaceable-route-container.component.ts +++ b/npm/ng-packs/packages/core/src/lib/components/replaceable-route-container.component.ts @@ -6,6 +6,7 @@ import { ReplaceableComponentsService } from '../services/replaceable-components import { SubscriptionService } from '../services/subscription.service'; @Component({ + standalone: false, selector: 'abp-replaceable-route-container', template: ` diff --git a/npm/ng-packs/packages/core/src/lib/components/router-outlet.component.ts b/npm/ng-packs/packages/core/src/lib/components/router-outlet.component.ts index fee29d9dd8..4dd1e586ee 100644 --- a/npm/ng-packs/packages/core/src/lib/components/router-outlet.component.ts +++ b/npm/ng-packs/packages/core/src/lib/components/router-outlet.component.ts @@ -1,6 +1,7 @@ import { Component } from '@angular/core'; @Component({ + standalone: false, selector: 'abp-router-outlet', template: ` `, }) diff --git a/npm/ng-packs/packages/core/src/lib/handlers/routes.handler.ts b/npm/ng-packs/packages/core/src/lib/handlers/routes.handler.ts index a46f6d9d77..76dc66b3ae 100644 --- a/npm/ng-packs/packages/core/src/lib/handlers/routes.handler.ts +++ b/npm/ng-packs/packages/core/src/lib/handlers/routes.handler.ts @@ -7,7 +7,10 @@ import { RoutesService } from '../services/routes.service'; providedIn: 'root', }) export class RoutesHandler { - constructor(private routes: RoutesService, @Optional() private router: Router) { + constructor( + private routes: RoutesService, + @Optional() private router: Router, + ) { this.addRoutes(); } diff --git a/npm/ng-packs/packages/core/src/lib/pipes/localization.pipe.ts b/npm/ng-packs/packages/core/src/lib/pipes/localization.pipe.ts index 2dbac68eb7..102998bd48 100644 --- a/npm/ng-packs/packages/core/src/lib/pipes/localization.pipe.ts +++ b/npm/ng-packs/packages/core/src/lib/pipes/localization.pipe.ts @@ -4,6 +4,7 @@ import { LocalizationService } from '../services/localization.service'; @Injectable() @Pipe({ + standalone: false, name: 'abpLocalization', }) export class LocalizationPipe implements PipeTransform { diff --git a/npm/ng-packs/packages/core/src/lib/pipes/safe-html.pipe.ts b/npm/ng-packs/packages/core/src/lib/pipes/safe-html.pipe.ts index c8445e8390..bf76c9ba59 100644 --- a/npm/ng-packs/packages/core/src/lib/pipes/safe-html.pipe.ts +++ b/npm/ng-packs/packages/core/src/lib/pipes/safe-html.pipe.ts @@ -2,7 +2,10 @@ import { inject, Injectable, Pipe, PipeTransform, SecurityContext } from '@angul import { DomSanitizer } from '@angular/platform-browser'; @Injectable() -@Pipe({ name: 'abpSafeHtml' }) +@Pipe({ + standalone: false, + name: 'abpSafeHtml', +}) export class SafeHtmlPipe implements PipeTransform { private readonly sanitizer = inject(DomSanitizer); diff --git a/npm/ng-packs/packages/core/src/lib/pipes/short-date-time.pipe.ts b/npm/ng-packs/packages/core/src/lib/pipes/short-date-time.pipe.ts index ef12be47d8..c9c29f7e31 100644 --- a/npm/ng-packs/packages/core/src/lib/pipes/short-date-time.pipe.ts +++ b/npm/ng-packs/packages/core/src/lib/pipes/short-date-time.pipe.ts @@ -4,6 +4,7 @@ import { ConfigStateService } from '../services'; import { getShortDateShortTimeFormat } from '../utils/date-utils'; @Pipe({ + standalone: false, name: 'shortDateTime', pure: true, }) diff --git a/npm/ng-packs/packages/core/src/lib/pipes/short-date.pipe.ts b/npm/ng-packs/packages/core/src/lib/pipes/short-date.pipe.ts index 30c9bd9323..919a97685f 100644 --- a/npm/ng-packs/packages/core/src/lib/pipes/short-date.pipe.ts +++ b/npm/ng-packs/packages/core/src/lib/pipes/short-date.pipe.ts @@ -4,6 +4,7 @@ import { ConfigStateService } from '../services'; import { getShortDateFormat } from '../utils/date-utils'; @Pipe({ + standalone: false, name: 'shortDate', pure: true, }) diff --git a/npm/ng-packs/packages/core/src/lib/pipes/short-time.pipe.ts b/npm/ng-packs/packages/core/src/lib/pipes/short-time.pipe.ts index cf0450673d..ff70e68f4e 100644 --- a/npm/ng-packs/packages/core/src/lib/pipes/short-time.pipe.ts +++ b/npm/ng-packs/packages/core/src/lib/pipes/short-time.pipe.ts @@ -4,6 +4,7 @@ import { ConfigStateService } from '../services'; import { getShortTimeFormat } from '../utils/date-utils'; @Pipe({ + standalone: false, name: 'shortTime', pure: true, }) diff --git a/npm/ng-packs/packages/core/src/lib/pipes/sort.pipe.ts b/npm/ng-packs/packages/core/src/lib/pipes/sort.pipe.ts index c44ca6f075..b4a49ce85a 100644 --- a/npm/ng-packs/packages/core/src/lib/pipes/sort.pipe.ts +++ b/npm/ng-packs/packages/core/src/lib/pipes/sort.pipe.ts @@ -1,7 +1,9 @@ import { Injectable, Pipe, PipeTransform } from '@angular/core'; export type SortOrder = 'asc' | 'desc'; + @Injectable() @Pipe({ + standalone: false, name: 'abpSort', }) export class SortPipe implements PipeTransform { diff --git a/npm/ng-packs/packages/core/src/lib/pipes/to-injector.pipe.ts b/npm/ng-packs/packages/core/src/lib/pipes/to-injector.pipe.ts index 5a1ac4df29..02c71b2e65 100644 --- a/npm/ng-packs/packages/core/src/lib/pipes/to-injector.pipe.ts +++ b/npm/ng-packs/packages/core/src/lib/pipes/to-injector.pipe.ts @@ -5,6 +5,7 @@ export const INJECTOR_PIPE_DATA_TOKEN = new InjectionToken( ); @Pipe({ + standalone: false, name: 'toInjector', }) export class ToInjectorPipe implements PipeTransform { diff --git a/npm/ng-packs/packages/core/src/lib/providers/cookie-language.provider.ts b/npm/ng-packs/packages/core/src/lib/providers/cookie-language.provider.ts index 03f99a7db8..b6a8a30cb0 100644 --- a/npm/ng-packs/packages/core/src/lib/providers/cookie-language.provider.ts +++ b/npm/ng-packs/packages/core/src/lib/providers/cookie-language.provider.ts @@ -1,23 +1,19 @@ -import { APP_INITIALIZER, Injector, Provider } from '@angular/core'; +import { Injector, inject, provideAppInitializer } from '@angular/core'; import { DOCUMENT } from '@angular/common'; import { SessionStateService } from '../services/session-state.service'; import { COOKIE_LANGUAGE_KEY } from '../tokens/cookie-language-key.token'; -export function setLanguageToCookie(injector: Injector) { - return () => { - const sessionState = injector.get(SessionStateService); - const document = injector.get(DOCUMENT); - const cookieLanguageKey = injector.get(COOKIE_LANGUAGE_KEY); - sessionState.getLanguage$().subscribe(language => { - const cookieValue = encodeURIComponent(`c=${language}|uic=${language}`); - document.cookie = `${cookieLanguageKey}=${cookieValue}`; - }); - }; +export function setLanguageToCookie() { + const injector = inject(Injector); + const sessionState = injector.get(SessionStateService); + const document = injector.get(DOCUMENT); + const cookieLanguageKey = injector.get(COOKIE_LANGUAGE_KEY); + sessionState.getLanguage$().subscribe(language => { + const cookieValue = encodeURIComponent(`c=${language}|uic=${language}`); + document.cookie = `${cookieLanguageKey}=${cookieValue}`; + }); } -export const CookieLanguageProvider: Provider = { - provide: APP_INITIALIZER, - useFactory: setLanguageToCookie, - deps: [Injector], - multi: true, -}; +export const CookieLanguageProvider = provideAppInitializer(() => { + setLanguageToCookie(); +}); diff --git a/npm/ng-packs/packages/core/src/lib/providers/core-module-config.provider.ts b/npm/ng-packs/packages/core/src/lib/providers/core-module-config.provider.ts index 823f70957c..2b44117acb 100644 --- a/npm/ng-packs/packages/core/src/lib/providers/core-module-config.provider.ts +++ b/npm/ng-packs/packages/core/src/lib/providers/core-module-config.provider.ts @@ -1,4 +1,4 @@ -import { makeEnvironmentProviders, APP_INITIALIZER, Injector, Provider } from '@angular/core'; +import { makeEnvironmentProviders, Provider, inject, provideAppInitializer } from '@angular/core'; import { TitleStrategy } from '@angular/router'; import { provideHttpClient, @@ -22,7 +22,7 @@ import { ABP, SortableItem } from '../models'; import { AuthErrorFilterService } from '../abstracts'; import { DEFAULT_DYNAMIC_LAYOUTS } from '../constants'; import { LocalizationService, LocalStorageListenerService, AbpTitleStrategy } from '../services'; -import { DefaultQueueManager, getInitialData, localeInitializer, noop } from '../utils'; +import { DefaultQueueManager, getInitialData, localeInitializer } from '../utils'; import { CookieLanguageProvider, IncludeLocalizationResourcesProvider, LocaleProvider } from './'; export enum CoreFeatureKind { @@ -104,38 +104,16 @@ export function provideAbpCore(...features: CoreFeature[]) { headerName: 'RequestVerificationToken', }), ), + provideAppInitializer(() => { + getInitialData(); + localeInitializer(); + inject(LocalizationService); + inject(LocalStorageListenerService); + inject(RoutesHandler); + }), + LocaleProvider, CookieLanguageProvider, - { - provide: APP_INITIALIZER, - multi: true, - deps: [Injector], - useFactory: getInitialData, - }, - { - provide: APP_INITIALIZER, - multi: true, - deps: [Injector], - useFactory: localeInitializer, - }, - { - provide: APP_INITIALIZER, - multi: true, - deps: [LocalizationService], - useFactory: noop, - }, - { - provide: APP_INITIALIZER, - multi: true, - deps: [LocalStorageListenerService], - useFactory: noop, - }, - { - provide: APP_INITIALIZER, - multi: true, - deps: [RoutesHandler], - useFactory: noop, - }, { provide: SORT_COMPARE_FUNC, useFactory: compareFuncFactory, diff --git a/npm/ng-packs/packages/core/src/lib/utils/initial-utils.ts b/npm/ng-packs/packages/core/src/lib/utils/initial-utils.ts index 4173bd96c6..3bc9b6f2b5 100644 --- a/npm/ng-packs/packages/core/src/lib/utils/initial-utils.ts +++ b/npm/ng-packs/packages/core/src/lib/utils/initial-utils.ts @@ -1,5 +1,5 @@ import { registerLocaleData } from '@angular/common'; -import { InjectFlags, Injector } from '@angular/core'; +import { inject, Injector } from '@angular/core'; import { tap, catchError } from 'rxjs/operators'; import { lastValueFrom, throwError } from 'rxjs'; import { ABP } from '../models/common'; @@ -16,60 +16,54 @@ import { AuthService } from '../abstracts'; import { CHECK_AUTHENTICATION_STATE_FN_KEY } from '../tokens/check-authentication-state'; import { noop } from './common-utils'; -export function getInitialData(injector: Injector) { - const fn = async () => { - const environmentService = injector.get(EnvironmentService); - const configState = injector.get(ConfigStateService); - const options = injector.get(CORE_OPTIONS) as ABP.Root; +export async function getInitialData() { + const injector = inject(Injector); + const environmentService = injector.get(EnvironmentService); + const configState = injector.get(ConfigStateService); + const options = injector.get(CORE_OPTIONS) as ABP.Root; - environmentService.setState(options.environment as Environment); - await getRemoteEnv(injector, options.environment); - await parseTenantFromUrl(injector); - const authService = injector.get(AuthService, undefined, { optional: true }); - const checkAuthenticationState = injector.get(CHECK_AUTHENTICATION_STATE_FN_KEY, noop, { - optional: true, - }); - if (!options.skipInitAuthService && authService) { - await authService.init(); - } - if (options.skipGetAppConfiguration) return; + environmentService.setState(options.environment as Environment); + await getRemoteEnv(injector, options.environment); + await parseTenantFromUrl(injector); + const authService = injector.get(AuthService, undefined, { optional: true }); + const checkAuthenticationState = injector.get(CHECK_AUTHENTICATION_STATE_FN_KEY, noop, { + optional: true, + }); + if (!options.skipInitAuthService && authService) { + await authService.init(); + } + if (options.skipGetAppConfiguration) return; - const result$ = configState.refreshAppState().pipe( - tap(() => checkAuthenticationState(injector)), - tap(() => { - const currentTenant = configState.getOne('currentTenant') as CurrentTenantDto; - injector.get(SessionStateService).setTenant(currentTenant); - }), - catchError(error => { - const appInitErrorHandlers = injector.get(APP_INIT_ERROR_HANDLERS, null); - if (appInitErrorHandlers && appInitErrorHandlers.length) { - appInitErrorHandlers.forEach(func => func(error)); - } + const result$ = configState.refreshAppState().pipe( + tap(() => checkAuthenticationState(injector)), + tap(() => { + const currentTenant = configState.getOne('currentTenant') as CurrentTenantDto; + injector.get(SessionStateService).setTenant(currentTenant); + }), + catchError(error => { + const appInitErrorHandlers = injector.get(APP_INIT_ERROR_HANDLERS, null); + if (appInitErrorHandlers && appInitErrorHandlers.length) { + appInitErrorHandlers.forEach(func => func(error)); + } - return throwError(error); - }), - ); - await lastValueFrom(result$); - }; - - return fn; + return throwError(() => error); + }), + ); + await lastValueFrom(result$); } -export function localeInitializer(injector: Injector) { - const fn = () => { - const sessionState = injector.get(SessionStateService); - const { registerLocaleFn }: ABP.Root = injector.get(CORE_OPTIONS); - - const lang = sessionState.getLanguage() || 'en'; +export function localeInitializer() { + const injector = inject(Injector); + const sessionState = injector.get(SessionStateService); + const { registerLocaleFn }: ABP.Root = injector.get(CORE_OPTIONS); - return new Promise((resolve, reject) => { - registerLocaleFn(lang).then(module => { - if (module?.default) registerLocaleData(module.default); + const lang = sessionState.getLanguage() || 'en'; - return resolve('resolved'); - }, reject); - }); - }; + return new Promise((resolve, reject) => { + registerLocaleFn(lang).then(module => { + if (module?.default) registerLocaleData(module.default); - return fn; + return resolve('resolved'); + }, reject); + }); } diff --git a/npm/ng-packs/packages/feature-management/src/lib/components/feature-management-tab/feature-management-tab.component.ts b/npm/ng-packs/packages/feature-management/src/lib/components/feature-management-tab/feature-management-tab.component.ts index 4b367da436..c8eee6b043 100644 --- a/npm/ng-packs/packages/feature-management/src/lib/components/feature-management-tab/feature-management-tab.component.ts +++ b/npm/ng-packs/packages/feature-management/src/lib/components/feature-management-tab/feature-management-tab.component.ts @@ -3,14 +3,9 @@ import { Component } from '@angular/core'; import { FeatureManagementComponent } from '../feature-management/feature-management.component'; @Component({ - standalone: true, selector: 'abp-feature-management-tab', templateUrl: './feature-management-tab.component.html', - imports: [ - ReplaceableTemplateDirective, - LocalizationModule, - FeatureManagementComponent, - ], + imports: [ReplaceableTemplateDirective, LocalizationModule, FeatureManagementComponent], }) export class FeatureManagementTabComponent { visibleFeatures = false; diff --git a/npm/ng-packs/packages/feature-management/src/lib/components/feature-management/feature-management.component.html b/npm/ng-packs/packages/feature-management/src/lib/components/feature-management/feature-management.component.html index 9f071e44a0..b5dc440c76 100644 --- a/npm/ng-packs/packages/feature-management/src/lib/components/feature-management/feature-management.component.html +++ b/npm/ng-packs/packages/feature-management/src/lib/components/feature-management/feature-management.component.html @@ -27,7 +27,7 @@

{{ selectedGroupDisplayName }}


- @for (feature of features[group.name]; track feature.id; let i = $index) { + @for (feature of features[group.name]; track feature.id || i; let i = $index) {
@switch (feature.valueType?.name) { @case (valueTypes.ToggleStringValueType) { diff --git a/npm/ng-packs/packages/feature-management/src/lib/components/feature-management/feature-management.component.ts b/npm/ng-packs/packages/feature-management/src/lib/components/feature-management/feature-management.component.ts index cd14176fc5..e26609bb25 100644 --- a/npm/ng-packs/packages/feature-management/src/lib/components/feature-management/feature-management.component.ts +++ b/npm/ng-packs/packages/feature-management/src/lib/components/feature-management/feature-management.component.ts @@ -27,7 +27,6 @@ enum ValueTypes { } @Component({ - standalone: true, selector: 'abp-feature-management', templateUrl: './feature-management.component.html', exportAs: 'abpFeatureManagement', diff --git a/npm/ng-packs/packages/feature-management/src/lib/providers/feature-management-settings.provider.ts b/npm/ng-packs/packages/feature-management/src/lib/providers/feature-management-settings.provider.ts index 64bbfb9932..e49c74e49f 100644 --- a/npm/ng-packs/packages/feature-management/src/lib/providers/feature-management-settings.provider.ts +++ b/npm/ng-packs/packages/feature-management/src/lib/providers/feature-management-settings.provider.ts @@ -1,26 +1,22 @@ import { SettingTabsService } from '@abp/ng.setting-management/config'; -import { APP_INITIALIZER } from '@angular/core'; +import { inject, provideAppInitializer } from '@angular/core'; import { eFeatureManagementTabNames } from '../enums/feature-management-tab-names'; import { FeatureManagementTabComponent } from '../components'; export const FEATURE_MANAGEMENT_SETTINGS_PROVIDERS = [ - { - provide: APP_INITIALIZER, - useFactory: configureSettingTabs, - deps: [SettingTabsService], - multi: true, - }, + provideAppInitializer(() => { + configureSettingTabs(); + }), ]; -export function configureSettingTabs(settingtabs: SettingTabsService) { - return () => { - settingtabs.add([ - { - name: eFeatureManagementTabNames.FeatureManagement, - order: 100, - requiredPolicy: 'FeatureManagement.ManageHostFeatures', - component: FeatureManagementTabComponent, - }, - ]); - }; +export function configureSettingTabs() { + const settingtabs = inject(SettingTabsService); + settingtabs.add([ + { + name: eFeatureManagementTabNames.FeatureManagement, + order: 100, + requiredPolicy: 'FeatureManagement.ManageHostFeatures', + component: FeatureManagementTabComponent, + }, + ]); } diff --git a/npm/ng-packs/packages/generators/src/generators/generate-proxy/generator.ts b/npm/ng-packs/packages/generators/src/generators/generate-proxy/generator.ts index a12a59a82a..808d2bfad9 100644 --- a/npm/ng-packs/packages/generators/src/generators/generate-proxy/generator.ts +++ b/npm/ng-packs/packages/generators/src/generators/generate-proxy/generator.ts @@ -1,5 +1,5 @@ import { GenerateProxyGeneratorSchema } from './schema'; -import { Tree } from '@nrwl/devkit'; +import { Tree } from '@nx/devkit'; import { wrapAngularDevkitSchematic } from '@nx/devkit/ngcli-adapter'; export default async function (host: Tree, schema: GenerateProxyGeneratorSchema) { diff --git a/npm/ng-packs/packages/identity/config/src/providers/route.provider.ts b/npm/ng-packs/packages/identity/config/src/providers/route.provider.ts index 26326138e6..06d52009d5 100644 --- a/npm/ng-packs/packages/identity/config/src/providers/route.provider.ts +++ b/npm/ng-packs/packages/identity/config/src/providers/route.provider.ts @@ -1,39 +1,40 @@ import { eLayoutType, RoutesService } from '@abp/ng.core'; import { eThemeSharedRouteNames } from '@abp/ng.theme.shared'; -import { APP_INITIALIZER } from '@angular/core'; +import { inject, provideAppInitializer } from '@angular/core'; import { eIdentityPolicyNames } from '../enums/policy-names'; import { eIdentityRouteNames } from '../enums/route-names'; export const IDENTITY_ROUTE_PROVIDERS = [ - { provide: APP_INITIALIZER, useFactory: configureRoutes, deps: [RoutesService], multi: true }, + provideAppInitializer(() => { + configureRoutes(); + }), ]; -export function configureRoutes(routesService: RoutesService) { - return () => { - routesService.add([ - { - path: undefined, - name: eIdentityRouteNames.IdentityManagement, - parentName: eThemeSharedRouteNames.Administration, - requiredPolicy: eIdentityPolicyNames.IdentityManagement, - iconClass: 'fa fa-id-card-o', - layout: eLayoutType.application, - order: 1, - }, - { - path: '/identity/roles', - name: eIdentityRouteNames.Roles, - parentName: eIdentityRouteNames.IdentityManagement, - requiredPolicy: eIdentityPolicyNames.Roles, - order: 1, - }, - { - path: '/identity/users', - name: eIdentityRouteNames.Users, - parentName: eIdentityRouteNames.IdentityManagement, - requiredPolicy: eIdentityPolicyNames.Users, - order: 2, - }, - ]); - }; +export function configureRoutes() { + const routesService = inject(RoutesService); + routesService.add([ + { + path: undefined, + name: eIdentityRouteNames.IdentityManagement, + parentName: eThemeSharedRouteNames.Administration, + requiredPolicy: eIdentityPolicyNames.IdentityManagement, + iconClass: 'fa fa-id-card-o', + layout: eLayoutType.application, + order: 1, + }, + { + path: '/identity/roles', + name: eIdentityRouteNames.Roles, + parentName: eIdentityRouteNames.IdentityManagement, + requiredPolicy: eIdentityPolicyNames.Roles, + order: 1, + }, + { + path: '/identity/users', + name: eIdentityRouteNames.Users, + parentName: eIdentityRouteNames.IdentityManagement, + requiredPolicy: eIdentityPolicyNames.Users, + order: 2, + }, + ]); } diff --git a/npm/ng-packs/packages/identity/src/lib/components/roles/roles.component.ts b/npm/ng-packs/packages/identity/src/lib/components/roles/roles.component.ts index 794b545fcd..89c24fd6a8 100644 --- a/npm/ng-packs/packages/identity/src/lib/components/roles/roles.component.ts +++ b/npm/ng-packs/packages/identity/src/lib/components/roles/roles.component.ts @@ -13,6 +13,7 @@ import { finalize } from 'rxjs/operators'; import { eIdentityComponents } from '../../enums/components'; @Component({ + standalone: false, selector: 'abp-roles', templateUrl: './roles.component.html', providers: [ diff --git a/npm/ng-packs/packages/identity/src/lib/components/users/users.component.ts b/npm/ng-packs/packages/identity/src/lib/components/users/users.component.ts index a0f0e08e4b..ccca6aa1a9 100644 --- a/npm/ng-packs/packages/identity/src/lib/components/users/users.component.ts +++ b/npm/ng-packs/packages/identity/src/lib/components/users/users.component.ts @@ -36,6 +36,7 @@ import { finalize, switchMap, tap } from 'rxjs/operators'; import { eIdentityComponents } from '../../enums/components'; @Component({ + standalone: false, selector: 'abp-users', templateUrl: './users.component.html', providers: [ diff --git a/npm/ng-packs/packages/oauth/src/lib/providers/oauth-module-config.provider.ts b/npm/ng-packs/packages/oauth/src/lib/providers/oauth-module-config.provider.ts index 021ad59a05..92ecc86012 100644 --- a/npm/ng-packs/packages/oauth/src/lib/providers/oauth-module-config.provider.ts +++ b/npm/ng-packs/packages/oauth/src/lib/providers/oauth-module-config.provider.ts @@ -7,9 +7,8 @@ import { CHECK_AUTHENTICATION_STATE_FN_KEY, AbpLocalStorageService, AuthErrorFilterService, - noop, } from '@abp/ng.core'; -import { APP_INITIALIZER, Provider, makeEnvironmentProviders } from '@angular/core'; +import { Provider, makeEnvironmentProviders, inject, provideAppInitializer } from '@angular/core'; import { HTTP_INTERCEPTORS } from '@angular/common/http'; import { OAuthModule, OAuthStorage } from 'angular-oauth2-oidc'; import { AbpOAuthGuard, abpOAuthGuard } from '../guards'; @@ -51,12 +50,9 @@ export function provideAbpOAuth() { multi: true, }, NavigateToManageProfileProvider, - { - provide: APP_INITIALIZER, - multi: true, - deps: [OAuthConfigurationHandler], - useFactory: noop, - }, + provideAppInitializer(() => { + inject(OAuthConfigurationHandler); + }), OAuthModule.forRoot().providers as Provider[], { provide: OAuthStorage, useClass: AbpLocalStorageService }, { provide: AuthErrorFilterService, useExisting: OAuthErrorFilterService }, diff --git a/npm/ng-packs/packages/permission-management/src/lib/components/permission-management.component.ts b/npm/ng-packs/packages/permission-management/src/lib/components/permission-management.component.ts index 966a39fd0b..17c99f8f93 100644 --- a/npm/ng-packs/packages/permission-management/src/lib/components/permission-management.component.ts +++ b/npm/ng-packs/packages/permission-management/src/lib/components/permission-management.component.ts @@ -34,6 +34,7 @@ type PermissionWithGroupName = PermissionGrantInfoDto & { }; @Component({ + standalone: false, selector: 'abp-permission-management', templateUrl: './permission-management.component.html', exportAs: 'abpPermissionManagement', diff --git a/npm/ng-packs/packages/schematics/package.json b/npm/ng-packs/packages/schematics/package.json index ef198413e6..c30ac4d1cc 100644 --- a/npm/ng-packs/packages/schematics/package.json +++ b/npm/ng-packs/packages/schematics/package.json @@ -4,16 +4,16 @@ "author": "", "schematics": "./collection.json", "dependencies": { - "@angular-devkit/core": "~18.1.0", - "@angular-devkit/schematics": "~18.1.0", - "@angular/cli": "~18.1.0", + "@angular-devkit/core": "~19.0.0", + "@angular-devkit/schematics": "~19.0.0", + "@angular/cli": "~19.0.0", "got": "^11.5.2", "jsonc-parser": "^2.3.0", "should-quote": "^1.0.0", - "typescript": "5.0.4" + "typescript": "~5.6.0" }, "devDependencies": { - "@schematics/angular": "~18.1.0", + "@schematics/angular": "~19.0.0", "@types/jest": "29.4.4", "@types/node": "20.2.5", "jest": "29.4.3", diff --git a/npm/ng-packs/packages/schematics/src/commands/create-lib/index.ts b/npm/ng-packs/packages/schematics/src/commands/create-lib/index.ts index 4b5408311b..f353845880 100644 --- a/npm/ng-packs/packages/schematics/src/commands/create-lib/index.ts +++ b/npm/ng-packs/packages/schematics/src/commands/create-lib/index.ts @@ -88,7 +88,11 @@ async function resolvePackagesDirFromAngularJson(host: Tree) { function readFirstLibInAngularJson(workspace: WorkspaceDefinition): ProjectDefinition | undefined { // eslint-disable-next-line @typescript-eslint/no-unused-vars - return Array.from(workspace.projects.values()).find(value => isLibrary(value)); + const library = ( + Array.from(workspace.projects.values()).find((value: ProjectDefinition) => isLibrary(value)) + ); + + return library; } async function createLibFromModuleTemplate(tree: Tree, options: GenerateLibSchema) { diff --git a/npm/ng-packs/packages/setting-management/config/src/lib/components/email-setting-group/email-setting-group.component.ts b/npm/ng-packs/packages/setting-management/config/src/lib/components/email-setting-group/email-setting-group.component.ts index 71756b7289..282072e170 100644 --- a/npm/ng-packs/packages/setting-management/config/src/lib/components/email-setting-group/email-setting-group.component.ts +++ b/npm/ng-packs/packages/setting-management/config/src/lib/components/email-setting-group/email-setting-group.component.ts @@ -12,6 +12,7 @@ import { ConfigStateService, LocalizationService } from '@abp/ng.core'; const { required, email } = Validators; @Component({ + standalone: false, selector: 'abp-email-setting-group', templateUrl: 'email-setting-group.component.html', animations: [collapse], diff --git a/npm/ng-packs/packages/setting-management/config/src/lib/providers/features.token.ts b/npm/ng-packs/packages/setting-management/config/src/lib/providers/features.token.ts index b9700d8a0a..ab818eb99d 100644 --- a/npm/ng-packs/packages/setting-management/config/src/lib/providers/features.token.ts +++ b/npm/ng-packs/packages/setting-management/config/src/lib/providers/features.token.ts @@ -1,5 +1,5 @@ -import { ConfigStateService, featuresFactory, noop } from '@abp/ng.core'; -import { APP_INITIALIZER, inject, InjectionToken } from '@angular/core'; +import { ConfigStateService, featuresFactory } from '@abp/ng.core'; +import { inject, InjectionToken, provideAppInitializer } from '@angular/core'; import { Observable } from 'rxjs'; import { map } from 'rxjs/operators'; @@ -30,10 +30,7 @@ export const SETTING_MANAGEMENT_ROUTE_VISIBILITY = new InjectionToken { + inject(SETTING_MANAGEMENT_ROUTE_VISIBILITY); + }), ]; diff --git a/npm/ng-packs/packages/setting-management/config/src/lib/providers/route.provider.ts b/npm/ng-packs/packages/setting-management/config/src/lib/providers/route.provider.ts index 585b290482..e4d83c2047 100644 --- a/npm/ng-packs/packages/setting-management/config/src/lib/providers/route.provider.ts +++ b/npm/ng-packs/packages/setting-management/config/src/lib/providers/route.provider.ts @@ -1,24 +1,23 @@ -import { eLayoutType, noop, RoutesService } from '@abp/ng.core'; +import { eLayoutType, RoutesService } from '@abp/ng.core'; import { eThemeSharedRouteNames } from '@abp/ng.theme.shared'; -import { APP_INITIALIZER, inject, InjectionToken } from '@angular/core'; +import { inject, InjectionToken, provideAppInitializer } from '@angular/core'; import { debounceTime, map } from 'rxjs/operators'; import { eSettingManagementRouteNames } from '../enums/route-names'; import { SettingTabsService } from '../services/settings-tabs.service'; import { Observable } from 'rxjs'; -export function configureRoutes(routesService: RoutesService) { - return () => { - routesService.add([ - { - name: eSettingManagementRouteNames.Settings, - path: '/setting-management', - parentName: eThemeSharedRouteNames.Administration, - layout: eLayoutType.application, - order: 100, - iconClass: 'fa fa-cog', - }, - ]); - }; +export function configureRoutes() { + const routesService = inject(RoutesService); + routesService.add([ + { + name: eSettingManagementRouteNames.Settings, + path: '/setting-management', + parentName: eThemeSharedRouteNames.Administration, + layout: eLayoutType.application, + order: 100, + iconClass: 'fa fa-cog', + }, + ]); } export const SETTING_MANAGEMENT_HAS_SETTING = new InjectionToken>( @@ -35,11 +34,8 @@ export const SETTING_MANAGEMENT_HAS_SETTING = new InjectionToken { + configureRoutes(); + inject(SETTING_MANAGEMENT_HAS_SETTING); + }), ]; diff --git a/npm/ng-packs/packages/setting-management/config/src/lib/providers/setting-tab.provider.ts b/npm/ng-packs/packages/setting-management/config/src/lib/providers/setting-tab.provider.ts index f05104c177..2cb5107a1f 100644 --- a/npm/ng-packs/packages/setting-management/config/src/lib/providers/setting-tab.provider.ts +++ b/npm/ng-packs/packages/setting-management/config/src/lib/providers/setting-tab.provider.ts @@ -1,26 +1,22 @@ -import { APP_INITIALIZER } from '@angular/core'; +import { inject, provideAppInitializer } from '@angular/core'; import { EmailSettingGroupComponent } from '../components/email-setting-group/email-setting-group.component'; import { eSettingManamagementSettingTabNames } from '../enums/setting-tab-names'; import { SettingTabsService } from '../services/settings-tabs.service'; export const SETTING_MANAGEMENT_SETTING_TAB_PROVIDERS = [ - { - provide: APP_INITIALIZER, - useFactory: configureSettingTabs, - deps: [SettingTabsService], - multi: true, - }, + provideAppInitializer(() => { + configureSettingTabs(); + }), ]; -export function configureSettingTabs(settingTabs: SettingTabsService) { - return () => { - settingTabs.add([ - { - name: eSettingManamagementSettingTabNames.EmailSettingGroup, - order: 100, - requiredPolicy: 'SettingManagement.Emailing', - component: EmailSettingGroupComponent, - }, - ]); - }; +export function configureSettingTabs() { + const settingTabs = inject(SettingTabsService); + settingTabs.add([ + { + name: eSettingManamagementSettingTabNames.EmailSettingGroup, + order: 100, + requiredPolicy: 'SettingManagement.Emailing', + component: EmailSettingGroupComponent, + }, + ]); } diff --git a/npm/ng-packs/packages/setting-management/config/src/lib/providers/visible.provider.ts b/npm/ng-packs/packages/setting-management/config/src/lib/providers/visible.provider.ts index e70e037da6..96b10df30e 100644 --- a/npm/ng-packs/packages/setting-management/config/src/lib/providers/visible.provider.ts +++ b/npm/ng-packs/packages/setting-management/config/src/lib/providers/visible.provider.ts @@ -1,4 +1,4 @@ -import { APP_INITIALIZER, Injector } from '@angular/core'; +import { Injector, inject, provideAppInitializer } from '@angular/core'; import { combineLatest } from 'rxjs'; import { RoutesService } from '@abp/ng.core'; import { SETTING_MANAGEMENT_HAS_SETTING } from './route.provider'; @@ -6,25 +6,21 @@ import { SETTING_MANAGEMENT_ROUTE_VISIBILITY } from './features.token'; import { eSettingManagementRouteNames } from '../enums'; export const SETTING_MANAGEMENT_VISIBLE_PROVIDERS = [ - { - provide: APP_INITIALIZER, - useFactory: setSettingManagementVisibility, - deps: [Injector], - multi: true, - }, + provideAppInitializer(() => { + setSettingManagementVisibility(); + }), ]; -export function setSettingManagementVisibility(injector: Injector) { - return () => { - const settingManagementHasSetting$ = injector.get(SETTING_MANAGEMENT_HAS_SETTING); - const isSettingManagementFeatureEnable$ = injector.get(SETTING_MANAGEMENT_ROUTE_VISIBILITY); - const routes = injector.get(RoutesService); - combineLatest([settingManagementHasSetting$, isSettingManagementFeatureEnable$]).subscribe( - ([settingManagementHasSetting, isSettingManagementFeatureEnable]) => { - routes.patch(eSettingManagementRouteNames.Settings, { - invisible: !(settingManagementHasSetting && isSettingManagementFeatureEnable), - }); - }, - ); - }; +export function setSettingManagementVisibility() { + const injector = inject(Injector); + const settingManagementHasSetting$ = injector.get(SETTING_MANAGEMENT_HAS_SETTING); + const isSettingManagementFeatureEnable$ = injector.get(SETTING_MANAGEMENT_ROUTE_VISIBILITY); + const routes = injector.get(RoutesService); + combineLatest([settingManagementHasSetting$, isSettingManagementFeatureEnable$]).subscribe( + ([settingManagementHasSetting, isSettingManagementFeatureEnable]) => { + routes.patch(eSettingManagementRouteNames.Settings, { + invisible: !(settingManagementHasSetting && isSettingManagementFeatureEnable), + }); + }, + ); } diff --git a/npm/ng-packs/packages/setting-management/src/lib/components/setting-management.component.ts b/npm/ng-packs/packages/setting-management/src/lib/components/setting-management.component.ts index db38d5b95f..e5f3380dba 100644 --- a/npm/ng-packs/packages/setting-management/src/lib/components/setting-management.component.ts +++ b/npm/ng-packs/packages/setting-management/src/lib/components/setting-management.component.ts @@ -4,6 +4,7 @@ import { Component, OnDestroy, OnInit, TrackByFunction } from '@angular/core'; import { Subscription } from 'rxjs'; @Component({ + standalone: false, selector: 'abp-setting-management', templateUrl: './setting-management.component.html', }) diff --git a/npm/ng-packs/packages/tenant-management/config/src/providers/route.provider.ts b/npm/ng-packs/packages/tenant-management/config/src/providers/route.provider.ts index 5b3d9c88fd..b65ad6ca80 100644 --- a/npm/ng-packs/packages/tenant-management/config/src/providers/route.provider.ts +++ b/npm/ng-packs/packages/tenant-management/config/src/providers/route.provider.ts @@ -1,32 +1,33 @@ import { eLayoutType, RoutesService } from '@abp/ng.core'; import { eThemeSharedRouteNames } from '@abp/ng.theme.shared'; -import { APP_INITIALIZER } from '@angular/core'; +import { inject, provideAppInitializer } from '@angular/core'; import { eTenantManagementPolicyNames } from '../enums/policy-names'; import { eTenantManagementRouteNames } from '../enums/route-names'; export const TENANT_MANAGEMENT_ROUTE_PROVIDERS = [ - { provide: APP_INITIALIZER, useFactory: configureRoutes, deps: [RoutesService], multi: true }, + provideAppInitializer(() => { + configureRoutes(); + }), ]; -export function configureRoutes(routes: RoutesService) { - return () => { - routes.add([ - { - path: undefined, - name: eTenantManagementRouteNames.TenantManagement, - parentName: eThemeSharedRouteNames.Administration, - requiredPolicy: eTenantManagementPolicyNames.TenantManagement, - layout: eLayoutType.application, - iconClass: 'fa fa-users', - order: 2, - }, - { - path: '/tenant-management/tenants', - name: eTenantManagementRouteNames.Tenants, - parentName: eTenantManagementRouteNames.TenantManagement, - requiredPolicy: eTenantManagementPolicyNames.Tenants, - order: 1, - }, - ]); - }; +export function configureRoutes() { + const routes = inject(RoutesService); + routes.add([ + { + path: undefined, + name: eTenantManagementRouteNames.TenantManagement, + parentName: eThemeSharedRouteNames.Administration, + requiredPolicy: eTenantManagementPolicyNames.TenantManagement, + layout: eLayoutType.application, + iconClass: 'fa fa-users', + order: 2, + }, + { + path: '/tenant-management/tenants', + name: eTenantManagementRouteNames.Tenants, + parentName: eTenantManagementRouteNames.TenantManagement, + requiredPolicy: eTenantManagementPolicyNames.Tenants, + order: 1, + }, + ]); } diff --git a/npm/ng-packs/packages/tenant-management/src/lib/components/tenants/tenants.component.ts b/npm/ng-packs/packages/tenant-management/src/lib/components/tenants/tenants.component.ts index 99169b1cbe..3722a8e5aa 100644 --- a/npm/ng-packs/packages/tenant-management/src/lib/components/tenants/tenants.component.ts +++ b/npm/ng-packs/packages/tenant-management/src/lib/components/tenants/tenants.component.ts @@ -13,6 +13,7 @@ import { finalize } from 'rxjs/operators'; import { eTenantManagementComponents } from '../../enums/components'; @Component({ + standalone: false, selector: 'abp-tenants', templateUrl: './tenants.component.html', providers: [ diff --git a/npm/ng-packs/packages/theme-basic/ng-package.json b/npm/ng-packs/packages/theme-basic/ng-package.json index 580fc5b73f..a5d3991891 100644 --- a/npm/ng-packs/packages/theme-basic/ng-package.json +++ b/npm/ng-packs/packages/theme-basic/ng-package.json @@ -4,8 +4,5 @@ "lib": { "entryFile": "src/public-api.ts" }, - "allowedNonPeerDependencies": [ - "@abp/ng.theme.shared", - "@abp/ng.account.core" - ] + "allowedNonPeerDependencies": ["@abp/ng.theme.shared", "@abp/ng.account.core"] } diff --git a/npm/ng-packs/packages/theme-basic/src/lib/components/account-layout/account-layout.component.ts b/npm/ng-packs/packages/theme-basic/src/lib/components/account-layout/account-layout.component.ts index 510e2a8f72..91bc91aea0 100644 --- a/npm/ng-packs/packages/theme-basic/src/lib/components/account-layout/account-layout.component.ts +++ b/npm/ng-packs/packages/theme-basic/src/lib/components/account-layout/account-layout.component.ts @@ -3,6 +3,7 @@ import { eLayoutType, SubscriptionService } from '@abp/ng.core'; import { LayoutService } from '../../services/layout.service'; @Component({ + standalone: false, selector: 'abp-layout-account', templateUrl: './account-layout.component.html', providers: [LayoutService, SubscriptionService], diff --git a/npm/ng-packs/packages/theme-basic/src/lib/components/account-layout/auth-wrapper/auth-wrapper.component.ts b/npm/ng-packs/packages/theme-basic/src/lib/components/account-layout/auth-wrapper/auth-wrapper.component.ts index d864afb4af..8533c0177d 100644 --- a/npm/ng-packs/packages/theme-basic/src/lib/components/account-layout/auth-wrapper/auth-wrapper.component.ts +++ b/npm/ng-packs/packages/theme-basic/src/lib/components/account-layout/auth-wrapper/auth-wrapper.component.ts @@ -2,6 +2,7 @@ import { AuthWrapperService } from '@abp/ng.account.core'; import { Component } from '@angular/core'; @Component({ + standalone: false, selector: 'abp-auth-wrapper', templateUrl: './auth-wrapper.component.html', providers: [AuthWrapperService], diff --git a/npm/ng-packs/packages/theme-basic/src/lib/components/account-layout/tenant-box/tenant-box.component.ts b/npm/ng-packs/packages/theme-basic/src/lib/components/account-layout/tenant-box/tenant-box.component.ts index 9ed450f9fb..ccf13df4aa 100644 --- a/npm/ng-packs/packages/theme-basic/src/lib/components/account-layout/tenant-box/tenant-box.component.ts +++ b/npm/ng-packs/packages/theme-basic/src/lib/components/account-layout/tenant-box/tenant-box.component.ts @@ -2,6 +2,7 @@ import { TenantBoxService } from '@abp/ng.account.core'; import { Component } from '@angular/core'; @Component({ + standalone: false, selector: 'abp-tenant-box', templateUrl: './tenant-box.component.html', providers: [TenantBoxService], diff --git a/npm/ng-packs/packages/theme-basic/src/lib/components/application-layout/application-layout.component.ts b/npm/ng-packs/packages/theme-basic/src/lib/components/application-layout/application-layout.component.ts index a8084a3513..7ecd8157f4 100644 --- a/npm/ng-packs/packages/theme-basic/src/lib/components/application-layout/application-layout.component.ts +++ b/npm/ng-packs/packages/theme-basic/src/lib/components/application-layout/application-layout.component.ts @@ -4,6 +4,7 @@ import { AfterViewInit, Component, inject } from '@angular/core'; import { LayoutService } from '../../services/layout.service'; @Component({ + standalone: false, selector: 'abp-layout-application', templateUrl: './application-layout.component.html', animations: [slideFromBottom, collapseWithMargin], diff --git a/npm/ng-packs/packages/theme-basic/src/lib/components/empty-layout/empty-layout.component.ts b/npm/ng-packs/packages/theme-basic/src/lib/components/empty-layout/empty-layout.component.ts index b9a78ba06d..93e66676d3 100644 --- a/npm/ng-packs/packages/theme-basic/src/lib/components/empty-layout/empty-layout.component.ts +++ b/npm/ng-packs/packages/theme-basic/src/lib/components/empty-layout/empty-layout.component.ts @@ -2,10 +2,9 @@ import { Component } from '@angular/core'; import { eLayoutType } from '@abp/ng.core'; @Component({ + standalone: false, selector: 'abp-layout-empty', - template: ` - - `, + template: ` `, }) export class EmptyLayoutComponent { static type = eLayoutType.empty; diff --git a/npm/ng-packs/packages/theme-basic/src/lib/components/logo/logo.component.ts b/npm/ng-packs/packages/theme-basic/src/lib/components/logo/logo.component.ts index 9930102edf..6936dd5cfa 100644 --- a/npm/ng-packs/packages/theme-basic/src/lib/components/logo/logo.component.ts +++ b/npm/ng-packs/packages/theme-basic/src/lib/components/logo/logo.component.ts @@ -2,16 +2,12 @@ import { ApplicationInfo, EnvironmentService } from '@abp/ng.core'; import { Component } from '@angular/core'; @Component({ + standalone: false, selector: 'abp-logo', template: ` @if (appInfo.logoUrl) { - + } @else { {{ appInfo.name }} } diff --git a/npm/ng-packs/packages/theme-basic/src/lib/components/nav-items/current-user.component.ts b/npm/ng-packs/packages/theme-basic/src/lib/components/nav-items/current-user.component.ts index 9619845837..087feafe20 100644 --- a/npm/ng-packs/packages/theme-basic/src/lib/components/nav-items/current-user.component.ts +++ b/npm/ng-packs/packages/theme-basic/src/lib/components/nav-items/current-user.component.ts @@ -10,6 +10,7 @@ import { Component, Inject, TrackByFunction } from '@angular/core'; import { Observable } from 'rxjs'; @Component({ + standalone: false, selector: 'abp-current-user', templateUrl: './current-user.component.html', }) diff --git a/npm/ng-packs/packages/theme-basic/src/lib/components/nav-items/languages.component.ts b/npm/ng-packs/packages/theme-basic/src/lib/components/nav-items/languages.component.ts index bc98729274..cacf899eff 100644 --- a/npm/ng-packs/packages/theme-basic/src/lib/components/nav-items/languages.component.ts +++ b/npm/ng-packs/packages/theme-basic/src/lib/components/nav-items/languages.component.ts @@ -4,6 +4,7 @@ import { Observable } from 'rxjs'; import { map } from 'rxjs/operators'; @Component({ + standalone: false, selector: 'abp-languages', template: ` @if (((dropdownLanguages$ | async)?.length || 0) > 0) { diff --git a/npm/ng-packs/packages/theme-basic/src/lib/components/nav-items/nav-items.component.ts b/npm/ng-packs/packages/theme-basic/src/lib/components/nav-items/nav-items.component.ts index 7a5ee9b37a..08ee145cc8 100644 --- a/npm/ng-packs/packages/theme-basic/src/lib/components/nav-items/nav-items.component.ts +++ b/npm/ng-packs/packages/theme-basic/src/lib/components/nav-items/nav-items.component.ts @@ -1,7 +1,8 @@ import { NavItem, NavItemsService } from '@abp/ng.theme.shared'; -import { Component, Input, TrackByFunction } from '@angular/core'; +import { Component, TrackByFunction } from '@angular/core'; @Component({ + standalone: false, selector: 'abp-nav-items', templateUrl: 'nav-items.component.html', }) diff --git a/npm/ng-packs/packages/theme-basic/src/lib/components/page-alert-container/page-alert-container.component.ts b/npm/ng-packs/packages/theme-basic/src/lib/components/page-alert-container/page-alert-container.component.ts index 9dc1966337..ac794a1504 100644 --- a/npm/ng-packs/packages/theme-basic/src/lib/components/page-alert-container/page-alert-container.component.ts +++ b/npm/ng-packs/packages/theme-basic/src/lib/components/page-alert-container/page-alert-container.component.ts @@ -2,6 +2,7 @@ import { Component, ViewEncapsulation } from '@angular/core'; import { PageAlertService } from '@abp/ng.theme.shared'; @Component({ + standalone: false, selector: 'abp-page-alert-container', templateUrl: './page-alert-container.component.html', encapsulation: ViewEncapsulation.None, diff --git a/npm/ng-packs/packages/theme-basic/src/lib/components/routes/routes.component.ts b/npm/ng-packs/packages/theme-basic/src/lib/components/routes/routes.component.ts index 98a8b083a6..dfdca734a6 100644 --- a/npm/ng-packs/packages/theme-basic/src/lib/components/routes/routes.component.ts +++ b/npm/ng-packs/packages/theme-basic/src/lib/components/routes/routes.component.ts @@ -10,6 +10,7 @@ import { } from '@angular/core'; @Component({ + standalone: false, selector: 'abp-routes', templateUrl: 'routes.component.html', }) @@ -22,7 +23,10 @@ export class RoutesComponent { trackByFn: TrackByFunction> = (_, item) => item.name; - constructor(public readonly routesService: RoutesService, protected renderer: Renderer2) {} + constructor( + public readonly routesService: RoutesService, + protected renderer: Renderer2, + ) {} isDropdown(node: TreeNode) { return !node?.isLeaf || this.routesService.hasChildren(node.name); diff --git a/npm/ng-packs/packages/theme-basic/src/lib/components/validation-error/validation-error.component.ts b/npm/ng-packs/packages/theme-basic/src/lib/components/validation-error/validation-error.component.ts index f9a5b8de6d..c3c36ae2b3 100644 --- a/npm/ng-packs/packages/theme-basic/src/lib/components/validation-error/validation-error.component.ts +++ b/npm/ng-packs/packages/theme-basic/src/lib/components/validation-error/validation-error.component.ts @@ -2,10 +2,11 @@ import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/ import { Validation, ValidationErrorComponent as ErrorComponent } from '@ngx-validate/core'; @Component({ + standalone: false, selector: 'abp-validation-error', template: ` @for (error of abpErrors; track $index) { -
+
{{ error.message | abpLocalization: error.interpoliteParams }}
} diff --git a/npm/ng-packs/packages/theme-basic/src/lib/providers/nav-item.provider.ts b/npm/ng-packs/packages/theme-basic/src/lib/providers/nav-item.provider.ts index 7ade066f47..63230c24ef 100644 --- a/npm/ng-packs/packages/theme-basic/src/lib/providers/nav-item.provider.ts +++ b/npm/ng-packs/packages/theme-basic/src/lib/providers/nav-item.provider.ts @@ -1,31 +1,27 @@ import { NavItemsService } from '@abp/ng.theme.shared'; -import { APP_INITIALIZER } from '@angular/core'; +import { inject, provideAppInitializer } from '@angular/core'; import { CurrentUserComponent } from '../components/nav-items/current-user.component'; import { LanguagesComponent } from '../components/nav-items/languages.component'; import { eThemeBasicComponents } from '../enums/components'; export const BASIC_THEME_NAV_ITEM_PROVIDERS = [ - { - provide: APP_INITIALIZER, - useFactory: configureNavItems, - deps: [NavItemsService], - multi: true, - }, + provideAppInitializer(() => { + configureNavItems(); + }), ]; -export function configureNavItems(navItems: NavItemsService) { - return () => { - navItems.addItems([ - { - id: eThemeBasicComponents.Languages, - order: 100, - component: LanguagesComponent, - }, - { - id: eThemeBasicComponents.CurrentUser, - order: 100, - component: CurrentUserComponent, - }, - ]); - }; +export function configureNavItems() { + const navItems = inject(NavItemsService); + navItems.addItems([ + { + id: eThemeBasicComponents.Languages, + order: 100, + component: LanguagesComponent, + }, + { + id: eThemeBasicComponents.CurrentUser, + order: 100, + component: CurrentUserComponent, + }, + ]); } diff --git a/npm/ng-packs/packages/theme-basic/src/lib/providers/styles.provider.ts b/npm/ng-packs/packages/theme-basic/src/lib/providers/styles.provider.ts index 75a06591e6..0bb2df9b7a 100644 --- a/npm/ng-packs/packages/theme-basic/src/lib/providers/styles.provider.ts +++ b/npm/ng-packs/packages/theme-basic/src/lib/providers/styles.provider.ts @@ -1,5 +1,5 @@ import { CONTENT_STRATEGY, DomInsertionService, ReplaceableComponentsService } from '@abp/ng.core'; -import { APP_INITIALIZER } from '@angular/core'; +import { inject, provideAppInitializer } from '@angular/core'; import { AccountLayoutComponent } from '../components/account-layout/account-layout.component'; import { ApplicationLayoutComponent } from '../components/application-layout/application-layout.component'; import { EmptyLayoutComponent } from '../components/empty-layout/empty-layout.component'; @@ -7,12 +7,13 @@ import styles from '../constants/styles'; import { eThemeBasicComponents } from '../enums/components'; export const BASIC_THEME_STYLES_PROVIDERS = [ - { - provide: APP_INITIALIZER, - useFactory: configureStyles, - deps: [DomInsertionService, ReplaceableComponentsService], - multi: true, - }, + provideAppInitializer(() => { + const initializerFn = configureStyles( + inject(DomInsertionService), + inject(ReplaceableComponentsService), + ); + return initializerFn(); + }), ]; export function configureStyles( diff --git a/npm/ng-packs/packages/theme-basic/src/lib/providers/theme-basic-config.provider.ts b/npm/ng-packs/packages/theme-basic/src/lib/providers/theme-basic-config.provider.ts index c75b5b0b6d..fd7e60b346 100644 --- a/npm/ng-packs/packages/theme-basic/src/lib/providers/theme-basic-config.provider.ts +++ b/npm/ng-packs/packages/theme-basic/src/lib/providers/theme-basic-config.provider.ts @@ -1,4 +1,4 @@ -import { APP_INITIALIZER, makeEnvironmentProviders } from '@angular/core'; +import { makeEnvironmentProviders, inject, provideAppInitializer } from '@angular/core'; import { noop } from '@abp/ng.core'; import { VALIDATION_ERROR_TEMPLATE, @@ -29,11 +29,8 @@ export function provideThemeBasicConfig() { useValue: 'is-invalid', }, LazyStyleHandler, - { - provide: APP_INITIALIZER, - useFactory: noop, - multi: true, - deps: [LazyStyleHandler], - }, + provideAppInitializer(() => { + inject(LazyStyleHandler); + }), ]); } diff --git a/npm/ng-packs/packages/theme-basic/src/lib/providers/user-menu.provider.ts b/npm/ng-packs/packages/theme-basic/src/lib/providers/user-menu.provider.ts index dbf5815d55..6626b01e7c 100644 --- a/npm/ng-packs/packages/theme-basic/src/lib/providers/user-menu.provider.ts +++ b/npm/ng-packs/packages/theme-basic/src/lib/providers/user-menu.provider.ts @@ -1,15 +1,13 @@ import { AuthService, NAVIGATE_TO_MANAGE_PROFILE } from '@abp/ng.core'; import { UserMenuService } from '@abp/ng.theme.shared'; -import { APP_INITIALIZER, Injector } from '@angular/core'; +import { Injector, inject, provideAppInitializer } from '@angular/core'; import { eUserMenuItems } from '../enums/user-menu-items'; export const BASIC_THEME_USER_MENU_PROVIDERS = [ - { - provide: APP_INITIALIZER, - useFactory: configureUserMenu, - deps: [Injector], - multi: true, - }, + provideAppInitializer(() => { + const initializerFn = configureUserMenu(inject(Injector)); + return initializerFn(); + }), ]; export function configureUserMenu(injector: Injector) { diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/breadcrumb-items/breadcrumb-items.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/breadcrumb-items/breadcrumb-items.component.ts index 7f10ebb76f..d7188f561a 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/breadcrumb-items/breadcrumb-items.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/breadcrumb-items/breadcrumb-items.component.ts @@ -2,6 +2,7 @@ import { ABP } from '@abp/ng.core'; import { Component, Input } from '@angular/core'; @Component({ + standalone: false, selector: 'abp-breadcrumb-items', templateUrl: './breadcrumb-items.component.html', }) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/breadcrumb/breadcrumb.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/breadcrumb/breadcrumb.component.ts index 00c01f630e..bdc38612b3 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/breadcrumb/breadcrumb.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/breadcrumb/breadcrumb.component.ts @@ -12,6 +12,7 @@ import { map, startWith } from 'rxjs/operators'; import { eThemeSharedRouteNames } from '../../enums/route-names'; @Component({ + standalone: false, selector: 'abp-breadcrumb', templateUrl: './breadcrumb.component.html', changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/button/button.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/button/button.component.ts index 48fe2d5c28..a0005cd5e7 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/button/button.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/button/button.component.ts @@ -12,6 +12,7 @@ import { } from '@angular/core'; @Component({ + standalone: false, selector: 'abp-button', template: `