From 4277b62a42e4849d3f830a1bcd27f1f0ecf3d3e4 Mon Sep 17 00:00:00 2001 From: erdemcaygor Date: Wed, 30 Apr 2025 13:54:47 +0300 Subject: [PATCH 01/55] standalone structure applied to login component --- .../packages/account/src/lib/account.module.ts | 4 +--- .../src/lib/components/login/login.component.ts | 14 ++++++++++---- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/npm/ng-packs/packages/account/src/lib/account.module.ts b/npm/ng-packs/packages/account/src/lib/account.module.ts index 58df433232..6016fd3724 100644 --- a/npm/ng-packs/packages/account/src/lib/account.module.ts +++ b/npm/ng-packs/packages/account/src/lib/account.module.ts @@ -5,7 +5,6 @@ import { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap'; import { NgxValidateCoreModule } from '@ngx-validate/core'; import { AccountRoutingModule } from './account-routing.module'; import { ChangePasswordComponent } from './components/change-password/change-password.component'; -import { LoginComponent } from './components/login/login.component'; import { ManageProfileComponent } from './components/manage-profile/manage-profile.component'; import { PersonalSettingsComponent } from './components/personal-settings/personal-settings.component'; import { RegisterComponent } from './components/register/register.component'; @@ -20,10 +19,9 @@ import { RE_LOGIN_CONFIRMATION_TOKEN } from './tokens'; import { ACCOUNT_EDIT_FORM_PROP_CONTRIBUTORS } from './tokens/extensions.token'; import { AccountExtensionsGuard } from './guards/extensions.guard'; import { PersonalSettingsHalfRowComponent } from './components/personal-settings/personal-settings-half-row.component'; -import { ExtensibleModule } from "@abp/ng.components/extensible"; +import { ExtensibleModule } from '@abp/ng.components/extensible'; const declarations = [ - LoginComponent, RegisterComponent, ChangePasswordComponent, ManageProfileComponent, 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 54bd4c8905..830d49b250 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 @@ -1,18 +1,24 @@ -import { AuthService, ConfigStateService } from '@abp/ng.core'; -import { ToasterService } from '@abp/ng.theme.shared'; +import { AuthService, ConfigStateService, CoreModule } from '@abp/ng.core'; +import { ThemeSharedModule, ToasterService } from '@abp/ng.theme.shared'; import { Component, Injector, OnInit, inject } from '@angular/core'; -import { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms'; +import { + ReactiveFormsModule, + UntypedFormBuilder, + UntypedFormGroup, + Validators, +} from '@angular/forms'; import { throwError } from 'rxjs'; import { catchError, finalize } from 'rxjs/operators'; import { eAccountComponents } from '../../enums/components'; import { getRedirectUrl } from '../../utils/auth-utils'; +import { CommonModule } from '@angular/common'; const { maxLength, required } = Validators; @Component({ - standalone: false, selector: 'abp-login', templateUrl: './login.component.html', + imports: [CommonModule, ReactiveFormsModule, CoreModule, ThemeSharedModule], }) export class LoginComponent implements OnInit { protected injector = inject(Injector); From 670d6696f64921d3f3af56a1b977172a01dd82a8 Mon Sep 17 00:00:00 2001 From: erdemcaygor Date: Wed, 30 Apr 2025 14:00:24 +0300 Subject: [PATCH 02/55] standalone structure applied to register component --- npm/ng-packs/packages/account/src/lib/account.module.ts | 2 -- .../account/src/lib/components/register/register.component.ts | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/npm/ng-packs/packages/account/src/lib/account.module.ts b/npm/ng-packs/packages/account/src/lib/account.module.ts index 6016fd3724..c7a1121997 100644 --- a/npm/ng-packs/packages/account/src/lib/account.module.ts +++ b/npm/ng-packs/packages/account/src/lib/account.module.ts @@ -7,7 +7,6 @@ import { AccountRoutingModule } from './account-routing.module'; import { ChangePasswordComponent } from './components/change-password/change-password.component'; import { ManageProfileComponent } from './components/manage-profile/manage-profile.component'; import { PersonalSettingsComponent } from './components/personal-settings/personal-settings.component'; -import { RegisterComponent } from './components/register/register.component'; import { AccountConfigOptions } from './models/config-options'; import { ACCOUNT_CONFIG_OPTIONS } from './tokens/config-options.token'; import { accountConfigOptionsFactory } from './utils/factory-utils'; @@ -22,7 +21,6 @@ import { PersonalSettingsHalfRowComponent } from './components/personal-settings import { ExtensibleModule } from '@abp/ng.components/extensible'; const declarations = [ - RegisterComponent, ChangePasswordComponent, ManageProfileComponent, PersonalSettingsComponent, 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 1027a9d108..5f8c718f3d 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,9 +11,9 @@ import { getRedirectUrl } from '../../utils/auth-utils'; const { maxLength, required, email } = Validators; @Component({ - standalone: false, selector: 'abp-register', templateUrl: './register.component.html', + imports: [CoreModule, ThemeSharedModule, CommonModule, ReactiveFormsModule], }) export class RegisterComponent implements OnInit { form!: UntypedFormGroup; From b31187bf63d621222ef0898e68943f15f718372c Mon Sep 17 00:00:00 2001 From: erdemcaygor Date: Wed, 30 Apr 2025 14:01:52 +0300 Subject: [PATCH 03/55] standalone structure applied to forgot password component --- npm/ng-packs/packages/account/src/lib/account.module.ts | 2 -- .../lib/components/forgot-password/forgot-password.component.ts | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/npm/ng-packs/packages/account/src/lib/account.module.ts b/npm/ng-packs/packages/account/src/lib/account.module.ts index c7a1121997..dfb58205fd 100644 --- a/npm/ng-packs/packages/account/src/lib/account.module.ts +++ b/npm/ng-packs/packages/account/src/lib/account.module.ts @@ -11,7 +11,6 @@ import { AccountConfigOptions } from './models/config-options'; import { ACCOUNT_CONFIG_OPTIONS } from './tokens/config-options.token'; import { accountConfigOptionsFactory } from './utils/factory-utils'; import { AuthenticationFlowGuard } from './guards/authentication-flow.guard'; -import { ForgotPasswordComponent } from './components/forgot-password/forgot-password.component'; import { ResetPasswordComponent } from './components/reset-password/reset-password.component'; import { RE_LOGIN_CONFIRMATION_TOKEN } from './tokens'; @@ -24,7 +23,6 @@ const declarations = [ ChangePasswordComponent, ManageProfileComponent, PersonalSettingsComponent, - ForgotPasswordComponent, ResetPasswordComponent, PersonalSettingsHalfRowComponent, ]; 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 c1fbd7b703..d924ac30f5 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,9 +4,9 @@ import { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms import { finalize } from 'rxjs/operators'; @Component({ - standalone: false, selector: 'abp-forgot-password', templateUrl: 'forgot-password.component.html', + imports: [CoreModule, ThemeSharedModule, CommonModule, ReactiveFormsModule], }) export class ForgotPasswordComponent { form: UntypedFormGroup; From 93cf586a7c8a09bbc6aee2c11a7ea7844daa231b Mon Sep 17 00:00:00 2001 From: erdemcaygor Date: Wed, 30 Apr 2025 14:26:38 +0300 Subject: [PATCH 04/55] standalone applied to reset password, personal settings and change password --- .../packages/account/src/lib/account.module.ts | 17 ++--------------- .../change-password.component.ts | 7 +++++-- .../manage-profile/manage-profile.component.ts | 2 +- .../personal-settings-half-row.component.ts | 7 +++++-- .../personal-settings.component.ts | 14 ++++++++++---- .../reset-password/reset-password.component.ts | 2 +- 6 files changed, 24 insertions(+), 25 deletions(-) diff --git a/npm/ng-packs/packages/account/src/lib/account.module.ts b/npm/ng-packs/packages/account/src/lib/account.module.ts index dfb58205fd..a3c05e6613 100644 --- a/npm/ng-packs/packages/account/src/lib/account.module.ts +++ b/npm/ng-packs/packages/account/src/lib/account.module.ts @@ -4,31 +4,18 @@ import { ModuleWithProviders, NgModule, NgModuleFactory } from '@angular/core'; import { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap'; import { NgxValidateCoreModule } from '@ngx-validate/core'; import { AccountRoutingModule } from './account-routing.module'; -import { ChangePasswordComponent } from './components/change-password/change-password.component'; -import { ManageProfileComponent } from './components/manage-profile/manage-profile.component'; -import { PersonalSettingsComponent } from './components/personal-settings/personal-settings.component'; import { AccountConfigOptions } from './models/config-options'; import { ACCOUNT_CONFIG_OPTIONS } from './tokens/config-options.token'; import { accountConfigOptionsFactory } from './utils/factory-utils'; import { AuthenticationFlowGuard } from './guards/authentication-flow.guard'; -import { ResetPasswordComponent } from './components/reset-password/reset-password.component'; import { RE_LOGIN_CONFIRMATION_TOKEN } from './tokens'; import { ACCOUNT_EDIT_FORM_PROP_CONTRIBUTORS } from './tokens/extensions.token'; import { AccountExtensionsGuard } from './guards/extensions.guard'; -import { PersonalSettingsHalfRowComponent } from './components/personal-settings/personal-settings-half-row.component'; import { ExtensibleModule } from '@abp/ng.components/extensible'; -const declarations = [ - ChangePasswordComponent, - ManageProfileComponent, - PersonalSettingsComponent, - ResetPasswordComponent, - PersonalSettingsHalfRowComponent, -]; - @NgModule({ - declarations: [...declarations], + declarations: [], imports: [ CoreModule, AccountRoutingModule, @@ -37,7 +24,7 @@ const declarations = [ NgxValidateCoreModule, ExtensibleModule, ], - exports: [...declarations], + exports: [], }) export class AccountModule { static forChild(options = {} as AccountConfigOptions): ModuleWithProviders { 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 8b2d29cba5..3d289b5068 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 @@ -1,7 +1,8 @@ import { ProfileService } from '@abp/ng.account.core/proxy'; -import { getPasswordValidators, ToasterService } from '@abp/ng.theme.shared'; +import { getPasswordValidators, ThemeSharedModule, ToasterService } from '@abp/ng.theme.shared'; import { Component, Injector, OnInit } from '@angular/core'; import { + ReactiveFormsModule, UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, @@ -11,16 +12,18 @@ import { comparePasswords, Validation } from '@ngx-validate/core'; import { finalize } from 'rxjs/operators'; import { Account } from '../../models/account'; import { ManageProfileStateService } from '../../services/manage-profile.state.service'; +import { CoreModule } from '@abp/ng.core'; +import { CommonModule } from '@angular/common'; const { required } = Validators; const PASSWORD_FIELDS = ['newPassword', 'repeatNewPassword']; @Component({ - standalone: false, selector: 'abp-change-password-form', templateUrl: './change-password.component.html', exportAs: 'abpChangePasswordForm', + imports: [CommonModule, ReactiveFormsModule, CoreModule, ThemeSharedModule], }) export class ChangePasswordComponent implements OnInit, Account.ChangePasswordComponentInputs, Account.ChangePasswordComponentOutputs 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 c6e976b72b..dad532f80a 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,7 +6,6 @@ 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))])], @@ -17,6 +16,7 @@ import { ManageProfileStateService } from '../../services/manage-profile.state.s } `, ], + imports: [CoreModule, ThemeSharedModule, CommonModule, ReactiveFormsModule], }) export class ManageProfileComponent implements OnInit { selectedTab = 0; 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 efb23afe67..983aad8478 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 @@ -4,10 +4,12 @@ import { FormProp, EXTENSIBLE_FORM_VIEW_PROVIDER, } from '@abp/ng.components/extensible'; -import { UntypedFormGroup } from '@angular/forms'; +import { ReactiveFormsModule, UntypedFormGroup } from '@angular/forms'; +import { CommonModule } from '@angular/common'; +import { CoreModule } from '@abp/ng.core'; +import { ThemeSharedModule } from '@abp/ng.theme.shared'; @Component({ - standalone: false, selector: 'abp-personal-settings-half-row', template: `
@@ -21,6 +23,7 @@ import { UntypedFormGroup } from '@angular/forms';
`, styles: [], viewProviders: [EXTENSIBLE_FORM_VIEW_PROVIDER], + imports: [CommonModule, ReactiveFormsModule, CoreModule, ThemeSharedModule], }) export class PersonalSettingsHalfRowComponent { public displayName: string; 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 3ff2692c4b..9e1fff3d98 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 @@ -1,11 +1,16 @@ import { ProfileDto, ProfileService } from '@abp/ng.account.core/proxy'; -import { Confirmation, ConfirmationService, ToasterService } from '@abp/ng.theme.shared'; +import { + Confirmation, + ConfirmationService, + ThemeSharedModule, + ToasterService, +} from '@abp/ng.theme.shared'; import { Component, inject, Injector, OnInit } from '@angular/core'; -import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; +import { ReactiveFormsModule, UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; import { finalize, filter } from 'rxjs/operators'; import { Account } from '../../models/account'; import { ManageProfileStateService } from '../../services/manage-profile.state.service'; -import { AuthService, ConfigStateService } from '@abp/ng.core'; +import { AuthService, ConfigStateService, CoreModule } from '@abp/ng.core'; import { RE_LOGIN_CONFIRMATION_TOKEN } from '../../tokens'; import { EXTENSIONS_IDENTIFIER, @@ -13,9 +18,9 @@ import { generateFormFromProps, } from '@abp/ng.components/extensible'; import { eAccountComponents } from '../../enums'; +import { CommonModule } from '@angular/common'; @Component({ - standalone: false, selector: 'abp-personal-settings-form', templateUrl: './personal-settings.component.html', exportAs: 'abpPersonalSettingsForm', @@ -25,6 +30,7 @@ import { eAccountComponents } from '../../enums'; useValue: eAccountComponents.PersonalSettings, }, ], + imports: [CommonModule, ReactiveFormsModule, CoreModule, ThemeSharedModule], }) export class PersonalSettingsComponent implements 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 046e761883..3c7c8611f3 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,9 +9,9 @@ import { finalize } from 'rxjs/operators'; const PASSWORD_FIELDS = ['password', 'confirmPassword']; @Component({ - standalone: false, selector: 'abp-reset-password', templateUrl: './reset-password.component.html', + imports: [CoreModule, ThemeSharedModule, ReactiveFormsModule, CommonModule], }) export class ResetPasswordComponent implements OnInit { form!: UntypedFormGroup; From 43659a6b6fd806acfebf0c4eb2ad568a2ad29103 Mon Sep 17 00:00:00 2001 From: erdemcaygor Date: Wed, 30 Apr 2025 14:33:39 +0300 Subject: [PATCH 05/55] refactoring --- .../forgot-password/forgot-password.component.ts | 12 ++++++++++-- .../manage-profile/manage-profile.component.ts | 8 ++++++-- .../personal-settings.component.ts | 3 ++- .../lib/components/register/register.component.ts | 14 ++++++++++---- .../reset-password/reset-password.component.ts | 13 ++++++++++--- 5 files changed, 38 insertions(+), 12 deletions(-) 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 d924ac30f5..ceb52f8b56 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 @@ -1,12 +1,20 @@ import { AccountService } from '@abp/ng.account.core/proxy'; import { Component } from '@angular/core'; -import { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms'; +import { + ReactiveFormsModule, + UntypedFormBuilder, + UntypedFormGroup, + Validators, +} from '@angular/forms'; import { finalize } from 'rxjs/operators'; +import { CoreModule } from '@abp/ng.core'; +import { ThemeSharedModule } from '@abp/ng.theme.shared'; +import { CommonModule } from '@angular/common'; @Component({ selector: 'abp-forgot-password', templateUrl: 'forgot-password.component.html', - imports: [CoreModule, ThemeSharedModule, CommonModule, ReactiveFormsModule], + imports: [CommonModule, ReactiveFormsModule, CoreModule, ThemeSharedModule], }) export class ForgotPasswordComponent { form: UntypedFormGroup; 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 dad532f80a..235aebc207 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 @@ -1,22 +1,26 @@ import { ProfileService } from '@abp/ng.account.core/proxy'; -import { fadeIn } from '@abp/ng.theme.shared'; +import { fadeIn, ThemeSharedModule } from '@abp/ng.theme.shared'; import { transition, trigger, useAnimation } from '@angular/animations'; import { Component, OnInit } from '@angular/core'; import { eAccountComponents } from '../../enums/components'; import { ManageProfileStateService } from '../../services/manage-profile.state.service'; +import { CommonModule } from '@angular/common'; +import { ReactiveFormsModule } from '@angular/forms'; +import { CoreModule } from '@abp/ng.core'; @Component({ selector: 'abp-manage-profile', templateUrl: './manage-profile.component.html', animations: [trigger('fadeIn', [transition(':enter', useAnimation(fadeIn))])], styles: [ + //TODO: move static styles ` .min-h-400 { min-height: 400px; } `, ], - imports: [CoreModule, ThemeSharedModule, CommonModule, ReactiveFormsModule], + imports: [CommonModule, ReactiveFormsModule, CoreModule, ThemeSharedModule], }) export class ManageProfileComponent implements OnInit { selectedTab = 0; 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 9e1fff3d98..d03cf96b33 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 @@ -13,6 +13,7 @@ import { ManageProfileStateService } from '../../services/manage-profile.state.s import { AuthService, ConfigStateService, CoreModule } from '@abp/ng.core'; import { RE_LOGIN_CONFIRMATION_TOKEN } from '../../tokens'; import { + ExtensibleModule, EXTENSIONS_IDENTIFIER, FormPropData, generateFormFromProps, @@ -30,7 +31,7 @@ import { CommonModule } from '@angular/common'; useValue: eAccountComponents.PersonalSettings, }, ], - imports: [CommonModule, ReactiveFormsModule, CoreModule, ThemeSharedModule], + imports: [CommonModule, ReactiveFormsModule, CoreModule, ThemeSharedModule, ExtensibleModule], }) export class PersonalSettingsComponent implements 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 5f8c718f3d..d5c50ff3d1 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 @@ -1,19 +1,25 @@ import { AccountService, RegisterDto } from '@abp/ng.account.core/proxy'; -import { AuthService, ConfigStateService } from '@abp/ng.core'; -import { getPasswordValidators, ToasterService } from '@abp/ng.theme.shared'; +import { AuthService, ConfigStateService, CoreModule } from '@abp/ng.core'; +import { getPasswordValidators, ThemeSharedModule, ToasterService } from '@abp/ng.theme.shared'; import { Component, Injector, OnInit } from '@angular/core'; -import { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms'; +import { + ReactiveFormsModule, + UntypedFormBuilder, + UntypedFormGroup, + Validators, +} from '@angular/forms'; import { throwError } from 'rxjs'; import { catchError, finalize, switchMap } from 'rxjs/operators'; import { eAccountComponents } from '../../enums/components'; import { getRedirectUrl } from '../../utils/auth-utils'; +import { CommonModule } from '@angular/common'; const { maxLength, required, email } = Validators; @Component({ selector: 'abp-register', templateUrl: './register.component.html', - imports: [CoreModule, ThemeSharedModule, CommonModule, ReactiveFormsModule], + imports: [CommonModule, ReactiveFormsModule, CoreModule, ThemeSharedModule], }) export class RegisterComponent implements OnInit { form!: UntypedFormGroup; 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 3c7c8611f3..853c0b4ac0 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 @@ -1,17 +1,24 @@ import { AccountService } from '@abp/ng.account.core/proxy'; -import { getPasswordValidators } from '@abp/ng.theme.shared'; +import { getPasswordValidators, ThemeSharedModule } from '@abp/ng.theme.shared'; import { Component, Injector, OnInit } from '@angular/core'; -import { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms'; +import { + ReactiveFormsModule, + UntypedFormBuilder, + UntypedFormGroup, + Validators, +} from '@angular/forms'; import { ActivatedRoute, Router } from '@angular/router'; import { comparePasswords, Validation } from '@ngx-validate/core'; import { finalize } from 'rxjs/operators'; +import { CommonModule } from '@angular/common'; +import { CoreModule } from '@abp/ng.core'; const PASSWORD_FIELDS = ['password', 'confirmPassword']; @Component({ selector: 'abp-reset-password', templateUrl: './reset-password.component.html', - imports: [CoreModule, ThemeSharedModule, ReactiveFormsModule, CommonModule], + imports: [CommonModule, ReactiveFormsModule, CoreModule, ThemeSharedModule], }) export class ResetPasswordComponent implements OnInit { form!: UntypedFormGroup; From 44975f1a6eff76ef7b71afa40c11a94044f70edb Mon Sep 17 00:00:00 2001 From: erdemcaygor Date: Wed, 30 Apr 2025 15:21:42 +0300 Subject: [PATCH 06/55] account standalone module and router created --- .../account/src/lib/account.routes.ts | 92 +++++++++++++++++++ .../packages/account/src/lib/account.ts | 32 +++++++ 2 files changed, 124 insertions(+) create mode 100644 npm/ng-packs/packages/account/src/lib/account.routes.ts create mode 100644 npm/ng-packs/packages/account/src/lib/account.ts diff --git a/npm/ng-packs/packages/account/src/lib/account.routes.ts b/npm/ng-packs/packages/account/src/lib/account.routes.ts new file mode 100644 index 0000000000..64789c969a --- /dev/null +++ b/npm/ng-packs/packages/account/src/lib/account.routes.ts @@ -0,0 +1,92 @@ +import { + authGuard, + ReplaceableComponents, + ReplaceableRouteContainerComponent, + RouterOutletComponent, +} from '@abp/ng.core'; + +import { ForgotPasswordComponent } from './components/forgot-password/forgot-password.component'; +import { LoginComponent } from './components/login/login.component'; +import { ManageProfileComponent } from './components/manage-profile/manage-profile.component'; +import { RegisterComponent } from './components/register/register.component'; +import { ResetPasswordComponent } from './components/reset-password/reset-password.component'; +import { eAccountComponents } from './enums/components'; +import { authenticationFlowGuard } from './guards'; +import { accountExtensionsResolver } from './resolvers'; +import { provideAccount } from './account'; + +const canActivate = [authenticationFlowGuard]; + +export const accountRoutes = [ + { + path: '', + component: RouterOutletComponent, + providers: [...provideAccount()], + children: [ + { path: '', pathMatch: 'full', redirectTo: 'login' }, + { + path: 'login', + component: ReplaceableRouteContainerComponent, + canActivate, + data: { + replaceableComponent: { + key: eAccountComponents.Login, + defaultComponent: LoginComponent, + } as ReplaceableComponents.RouteData, + }, + title: 'AbpAccount::Login', + }, + { + path: 'register', + component: ReplaceableRouteContainerComponent, + canActivate, + data: { + replaceableComponent: { + key: eAccountComponents.Register, + defaultComponent: RegisterComponent, + } as ReplaceableComponents.RouteData, + }, + title: 'AbpAccount::Register', + }, + { + path: 'forgot-password', + component: ReplaceableRouteContainerComponent, + canActivate, + + data: { + replaceableComponent: { + key: eAccountComponents.ForgotPassword, + defaultComponent: ForgotPasswordComponent, + } as ReplaceableComponents.RouteData, + }, + title: 'AbpAccount::ForgotPassword', + }, + { + path: 'reset-password', + component: ReplaceableRouteContainerComponent, + canActivate: [], + data: { + tenantBoxVisible: false, + replaceableComponent: { + key: eAccountComponents.ResetPassword, + defaultComponent: ResetPasswordComponent, + } as ReplaceableComponents.RouteData, + }, + title: 'AbpAccount::ResetPassword', + }, + { + path: 'manage', + component: ReplaceableRouteContainerComponent, + canActivate: [authGuard], + resolve: [accountExtensionsResolver], + data: { + replaceableComponent: { + key: eAccountComponents.ManageProfile, + defaultComponent: ManageProfileComponent, + } as ReplaceableComponents.RouteData, + }, + title: 'AbpAccount::MyAccount', + }, + ], + }, +]; diff --git a/npm/ng-packs/packages/account/src/lib/account.ts b/npm/ng-packs/packages/account/src/lib/account.ts new file mode 100644 index 0000000000..31999b7b59 --- /dev/null +++ b/npm/ng-packs/packages/account/src/lib/account.ts @@ -0,0 +1,32 @@ +import { importProvidersFrom } from '@angular/core'; +import { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap'; +import { NgxValidateCoreModule } from '@ngx-validate/core'; +import { AccountConfigOptions } from './models/config-options'; +import { ACCOUNT_CONFIG_OPTIONS } from './tokens/config-options.token'; +import { accountConfigOptionsFactory } from './utils/factory-utils'; +import { AuthenticationFlowGuard } from './guards/authentication-flow.guard'; +import { RE_LOGIN_CONFIRMATION_TOKEN } from './tokens'; +import { ACCOUNT_EDIT_FORM_PROP_CONTRIBUTORS } from './tokens/extensions.token'; +import { AccountExtensionsGuard } from './guards/extensions.guard'; + +export function provideAccount(options: AccountConfigOptions = {}) { + return [ + importProvidersFrom(NgbDropdownModule, NgxValidateCoreModule), + AuthenticationFlowGuard, + { provide: ACCOUNT_CONFIG_OPTIONS, useValue: options }, + { + provide: 'ACCOUNT_OPTIONS', + useFactory: accountConfigOptionsFactory, + deps: [ACCOUNT_CONFIG_OPTIONS], + }, + { + provide: RE_LOGIN_CONFIRMATION_TOKEN, + useValue: options.isPersonalSettingsChangedConfirmationActive ?? true, + }, + { + provide: ACCOUNT_EDIT_FORM_PROP_CONTRIBUTORS, + useValue: options.editFormPropContributors, + }, + AccountExtensionsGuard, + ]; +} From c99b5a9b4affa0b0799485a24b6d05d988e67999 Mon Sep 17 00:00:00 2001 From: erdemcaygor Date: Wed, 30 Apr 2025 16:01:43 +0300 Subject: [PATCH 07/55] refactoring --- .../dev-app/src/app/app-routing.module.ts | 2 +- .../account/src/lib/account.routes.ts | 18 +++---- .../packages/account/src/public-api.ts | 2 + .../packages/core/src/lib/components/index.ts | 1 + ...le-route-container-standalone.component.ts | 47 +++++++++++++++++++ .../lib/components/router-outlet.component.ts | 8 ++++ 6 files changed, 69 insertions(+), 9 deletions(-) create mode 100644 npm/ng-packs/packages/core/src/lib/components/replaceable-route-container-standalone.component.ts diff --git a/npm/ng-packs/apps/dev-app/src/app/app-routing.module.ts b/npm/ng-packs/apps/dev-app/src/app/app-routing.module.ts index 0d9f82ea25..6ee751f9af 100644 --- a/npm/ng-packs/apps/dev-app/src/app/app-routing.module.ts +++ b/npm/ng-packs/apps/dev-app/src/app/app-routing.module.ts @@ -9,7 +9,7 @@ const routes: Routes = [ }, { path: 'account', - loadChildren: () => import('@abp/ng.account').then(m => m.AccountModule.forLazy()), + loadChildren: () => import('@abp/ng.account').then(m => m.accountRoutes), }, { path: 'identity', diff --git a/npm/ng-packs/packages/account/src/lib/account.routes.ts b/npm/ng-packs/packages/account/src/lib/account.routes.ts index 64789c969a..2d0f72b75e 100644 --- a/npm/ng-packs/packages/account/src/lib/account.routes.ts +++ b/npm/ng-packs/packages/account/src/lib/account.routes.ts @@ -2,7 +2,8 @@ import { authGuard, ReplaceableComponents, ReplaceableRouteContainerComponent, - RouterOutletComponent, + ReplaceableRouteContainerStandaloneComponent, + RouterOutletStandaloneComponent, } from '@abp/ng.core'; import { ForgotPasswordComponent } from './components/forgot-password/forgot-password.component'; @@ -13,20 +14,21 @@ import { ResetPasswordComponent } from './components/reset-password/reset-passwo import { eAccountComponents } from './enums/components'; import { authenticationFlowGuard } from './guards'; import { accountExtensionsResolver } from './resolvers'; +import { Routes } from '@angular/router'; import { provideAccount } from './account'; const canActivate = [authenticationFlowGuard]; -export const accountRoutes = [ +export const accountRoutes: Routes = [ { path: '', - component: RouterOutletComponent, + component: RouterOutletStandaloneComponent, providers: [...provideAccount()], children: [ { path: '', pathMatch: 'full', redirectTo: 'login' }, { path: 'login', - component: ReplaceableRouteContainerComponent, + component: ReplaceableRouteContainerStandaloneComponent, canActivate, data: { replaceableComponent: { @@ -38,7 +40,7 @@ export const accountRoutes = [ }, { path: 'register', - component: ReplaceableRouteContainerComponent, + component: ReplaceableRouteContainerStandaloneComponent, canActivate, data: { replaceableComponent: { @@ -50,7 +52,7 @@ export const accountRoutes = [ }, { path: 'forgot-password', - component: ReplaceableRouteContainerComponent, + component: ReplaceableRouteContainerStandaloneComponent, canActivate, data: { @@ -63,7 +65,7 @@ export const accountRoutes = [ }, { path: 'reset-password', - component: ReplaceableRouteContainerComponent, + component: ReplaceableRouteContainerStandaloneComponent, canActivate: [], data: { tenantBoxVisible: false, @@ -76,7 +78,7 @@ export const accountRoutes = [ }, { path: 'manage', - component: ReplaceableRouteContainerComponent, + component: ReplaceableRouteContainerStandaloneComponent, canActivate: [authGuard], resolve: [accountExtensionsResolver], data: { diff --git a/npm/ng-packs/packages/account/src/public-api.ts b/npm/ng-packs/packages/account/src/public-api.ts index f9df16ebc7..26b2139696 100644 --- a/npm/ng-packs/packages/account/src/public-api.ts +++ b/npm/ng-packs/packages/account/src/public-api.ts @@ -7,3 +7,5 @@ export * from './lib/services'; export * from './lib/tokens'; export * from './lib/utils'; export * from './lib/resolvers'; +export * from './lib/account.routes'; +export * from './lib/account'; diff --git a/npm/ng-packs/packages/core/src/lib/components/index.ts b/npm/ng-packs/packages/core/src/lib/components/index.ts index da3c72a69f..11aed8ffae 100644 --- a/npm/ng-packs/packages/core/src/lib/components/index.ts +++ b/npm/ng-packs/packages/core/src/lib/components/index.ts @@ -1,3 +1,4 @@ export * from './dynamic-layout.component'; export * from './replaceable-route-container.component'; export * from './router-outlet.component'; +export * from './replaceable-route-container-standalone.component'; diff --git a/npm/ng-packs/packages/core/src/lib/components/replaceable-route-container-standalone.component.ts b/npm/ng-packs/packages/core/src/lib/components/replaceable-route-container-standalone.component.ts new file mode 100644 index 0000000000..c0502ff542 --- /dev/null +++ b/npm/ng-packs/packages/core/src/lib/components/replaceable-route-container-standalone.component.ts @@ -0,0 +1,47 @@ +import { Component, OnInit, Type } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; +import { distinctUntilChanged } from 'rxjs/operators'; +import { ReplaceableComponents } from '../models/replaceable-components'; +import { ReplaceableComponentsService } from '../services/replaceable-components.service'; +import { SubscriptionService } from '../services/subscription.service'; +import { CommonModule } from '@angular/common'; + +@Component({ + selector: 'abp-replaceable-route-container', + template: ` + + `, + imports: [CommonModule], + providers: [SubscriptionService], +}) +export class ReplaceableRouteContainerStandaloneComponent implements OnInit { + defaultComponent!: Type; + + componentKey!: string; + + externalComponent?: Type; + + constructor( + private route: ActivatedRoute, + private replaceableComponents: ReplaceableComponentsService, + private subscription: SubscriptionService, + ) {} + + ngOnInit() { + this.defaultComponent = this.route.snapshot.data.replaceableComponent.defaultComponent; + this.componentKey = ( + this.route.snapshot.data.replaceableComponent as ReplaceableComponents.RouteData + ).key; + + const component$ = this.replaceableComponents + .get$(this.componentKey) + .pipe(distinctUntilChanged()); + + this.subscription.addOne( + component$, + (res = {} as ReplaceableComponents.ReplaceableComponent) => { + this.externalComponent = res.component; + }, + ); + } +} 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 4dd1e586ee..9438622b6c 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,4 +1,5 @@ import { Component } from '@angular/core'; +import { RouterModule } from '@angular/router'; @Component({ standalone: false, @@ -6,3 +7,10 @@ import { Component } from '@angular/core'; template: ` `, }) export class RouterOutletComponent {} + +@Component({ + selector: 'abp-router-outlet', + template: ` `, + imports: [RouterModule], +}) +export class RouterOutletStandaloneComponent {} From f378ac87d743f9e2dbad7dac10ff8994d5926ea6 Mon Sep 17 00:00:00 2001 From: erdemcaygor Date: Fri, 2 May 2025 11:12:51 +0300 Subject: [PATCH 08/55] identity module standalone migration --- .../lib/components/roles/roles.component.ts | 19 +++++-- .../lib/components/users/users.component.ts | 25 ++++++++-- .../identity/src/lib/identity.module.ts | 27 ++-------- .../identity/src/lib/identity.routes.ts | 49 +++++++++++++++++++ .../packages/identity/src/lib/identity.ts | 35 +++++++++++++ 5 files changed, 126 insertions(+), 29 deletions(-) create mode 100644 npm/ng-packs/packages/identity/src/lib/identity.routes.ts create mode 100644 npm/ng-packs/packages/identity/src/lib/identity.ts 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 89c24fd6a8..664c992478 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 @@ -1,8 +1,19 @@ -import { ListService, PagedAndSortedResultRequestDto, PagedResultDto } from '@abp/ng.core'; +import { + CoreModule, + ListService, + PagedAndSortedResultRequestDto, + PagedResultDto, +} from '@abp/ng.core'; import { IdentityRoleDto, IdentityRoleService } from '@abp/ng.identity/proxy'; import { ePermissionManagementComponents } from '@abp/ng.permission-management'; -import { Confirmation, ConfirmationService, ToasterService } from '@abp/ng.theme.shared'; import { + Confirmation, + ConfirmationService, + ThemeSharedModule, + ToasterService, +} from '@abp/ng.theme.shared'; +import { + ExtensibleModule, EXTENSIONS_IDENTIFIER, FormPropData, generateFormFromProps, @@ -11,9 +22,10 @@ import { Component, inject, Injector, OnInit } from '@angular/core'; import { UntypedFormGroup } from '@angular/forms'; import { finalize } from 'rxjs/operators'; import { eIdentityComponents } from '../../enums/components'; +import { CommonModule } from '@angular/common'; +import { PageModule } from '@abp/ng.components/page'; @Component({ - standalone: false, selector: 'abp-roles', templateUrl: './roles.component.html', providers: [ @@ -23,6 +35,7 @@ import { eIdentityComponents } from '../../enums/components'; useValue: eIdentityComponents.Roles, }, ], + imports: [CommonModule, CoreModule, ThemeSharedModule, ExtensibleModule, PageModule], }) export class RolesComponent implements OnInit { protected readonly list = inject(ListService); 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 ccca6aa1a9..d3eda88ae9 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 @@ -1,18 +1,23 @@ -import { ListService, PagedResultDto } from '@abp/ng.core'; +import { CoreModule, ListService, PagedResultDto } from '@abp/ng.core'; import { GetIdentityUsersInput, IdentityRoleDto, IdentityUserDto, IdentityUserService, } from '@abp/ng.identity/proxy'; -import { ePermissionManagementComponents } from '@abp/ng.permission-management'; +import { + ePermissionManagementComponents, + PermissionManagementModule, +} from '@abp/ng.permission-management'; import { Confirmation, ConfirmationService, eFormComponets, + ThemeSharedModule, ToasterService, } from '@abp/ng.theme.shared'; import { + ExtensibleModule, EXTENSIONS_IDENTIFIER, FormPropData, generateFormFromProps, @@ -34,9 +39,12 @@ import { } from '@angular/forms'; import { finalize, switchMap, tap } from 'rxjs/operators'; import { eIdentityComponents } from '../../enums/components'; +import { CommonModule } from '@angular/common'; +import { PageModule } from '@abp/ng.components/page'; +import { NgbDropdownModule, NgbNavModule } from '@ng-bootstrap/ng-bootstrap'; +import { NgxValidateCoreModule } from '@ngx-validate/core'; @Component({ - standalone: false, selector: 'abp-users', templateUrl: './users.component.html', providers: [ @@ -46,6 +54,17 @@ import { eIdentityComponents } from '../../enums/components'; useValue: eIdentityComponents.Users, }, ], + imports: [ + CommonModule, + PageModule, + CoreModule, + ThemeSharedModule, + ExtensibleModule, + PermissionManagementModule, + NgbNavModule, + NgbDropdownModule, + NgxValidateCoreModule, + ], }) export class UsersComponent implements OnInit { protected readonly list = inject(ListService); diff --git a/npm/ng-packs/packages/identity/src/lib/identity.module.ts b/npm/ng-packs/packages/identity/src/lib/identity.module.ts index ea07602f7c..f834456e85 100644 --- a/npm/ng-packs/packages/identity/src/lib/identity.module.ts +++ b/npm/ng-packs/packages/identity/src/lib/identity.module.ts @@ -1,14 +1,6 @@ -import { CoreModule, LazyModuleFactory } from '@abp/ng.core'; -import { PermissionManagementModule } from '@abp/ng.permission-management'; -import { ThemeSharedModule } from '@abp/ng.theme.shared'; -import { ExtensibleModule } from '@abp/ng.components/extensible'; +import { LazyModuleFactory } from '@abp/ng.core'; import { ModuleWithProviders, NgModule, NgModuleFactory } from '@angular/core'; -import { NgbDropdownModule, NgbNavModule } from '@ng-bootstrap/ng-bootstrap'; -import { NgxValidateCoreModule } from '@ngx-validate/core'; -import { RolesComponent } from './components/roles/roles.component'; -import { UsersComponent } from './components/users/users.component'; import { IdentityExtensionsGuard } from './guards/extensions.guard'; -import { IdentityRoutingModule } from './identity-routing.module'; import { IdentityConfigOptions } from './models/config-options'; import { IDENTITY_CREATE_FORM_PROP_CONTRIBUTORS, @@ -17,22 +9,11 @@ import { IDENTITY_ENTITY_PROP_CONTRIBUTORS, IDENTITY_TOOLBAR_ACTION_CONTRIBUTORS, } from './tokens/extensions.token'; -import { PageModule } from '@abp/ng.components/page'; @NgModule({ - declarations: [RolesComponent, UsersComponent], - exports: [RolesComponent, UsersComponent], - imports: [ - CoreModule, - IdentityRoutingModule, - NgbNavModule, - ThemeSharedModule, - ExtensibleModule, - NgbDropdownModule, - PermissionManagementModule, - NgxValidateCoreModule, - PageModule, - ], + declarations: [], + exports: [], + imports: [], }) export class IdentityModule { static forChild(options: IdentityConfigOptions = {}): ModuleWithProviders { diff --git a/npm/ng-packs/packages/identity/src/lib/identity.routes.ts b/npm/ng-packs/packages/identity/src/lib/identity.routes.ts new file mode 100644 index 0000000000..2b3fea8057 --- /dev/null +++ b/npm/ng-packs/packages/identity/src/lib/identity.routes.ts @@ -0,0 +1,49 @@ +import { Routes } from '@angular/router'; +import { + authGuard, + permissionGuard, + ReplaceableComponents, + ReplaceableRouteContainerComponent, + RouterOutletComponent, +} from '@abp/ng.core'; +import { RolesComponent, UsersComponent } from './components'; +import { identityExtensionsResolver } from './resolvers'; +import { provideIdentity } from './identity'; +import { eIdentityComponents } from './enums'; + +export const identityRoutes: Routes = [ + { + path: '', + component: RouterOutletComponent, + canActivate: [authGuard, permissionGuard], + resolve: [identityExtensionsResolver], + providers: [...provideIdentity()], + children: [ + { path: '', redirectTo: 'roles', pathMatch: 'full' }, + { + path: 'roles', + component: ReplaceableRouteContainerComponent, + data: { + requiredPolicy: 'AbpIdentity.Roles', + replaceableComponent: { + key: eIdentityComponents.Roles, + defaultComponent: RolesComponent, + } as ReplaceableComponents.RouteData, + }, + title: 'AbpIdentity::Roles', + }, + { + path: 'users', + component: ReplaceableRouteContainerComponent, + data: { + requiredPolicy: 'AbpIdentity.Users', + replaceableComponent: { + key: eIdentityComponents.Users, + defaultComponent: UsersComponent, + } as ReplaceableComponents.RouteData, + }, + title: 'AbpIdentity::Users', + }, + ], + }, +]; diff --git a/npm/ng-packs/packages/identity/src/lib/identity.ts b/npm/ng-packs/packages/identity/src/lib/identity.ts new file mode 100644 index 0000000000..c6bec50f41 --- /dev/null +++ b/npm/ng-packs/packages/identity/src/lib/identity.ts @@ -0,0 +1,35 @@ +import { + IDENTITY_CREATE_FORM_PROP_CONTRIBUTORS, + IDENTITY_EDIT_FORM_PROP_CONTRIBUTORS, + IDENTITY_ENTITY_ACTION_CONTRIBUTORS, + IDENTITY_ENTITY_PROP_CONTRIBUTORS, + IDENTITY_TOOLBAR_ACTION_CONTRIBUTORS, +} from './tokens'; +import { IdentityExtensionsGuard } from './guards'; +import { IdentityConfigOptions } from './models'; + +export function provideIdentity(options: IdentityConfigOptions = {}) { + return [ + { + provide: IDENTITY_ENTITY_ACTION_CONTRIBUTORS, + useValue: options.entityActionContributors, + }, + { + provide: IDENTITY_TOOLBAR_ACTION_CONTRIBUTORS, + useValue: options.toolbarActionContributors, + }, + { + provide: IDENTITY_ENTITY_PROP_CONTRIBUTORS, + useValue: options.entityPropContributors, + }, + { + provide: IDENTITY_CREATE_FORM_PROP_CONTRIBUTORS, + useValue: options.createFormPropContributors, + }, + { + provide: IDENTITY_EDIT_FORM_PROP_CONTRIBUTORS, + useValue: options.editFormPropContributors, + }, + IdentityExtensionsGuard, + ]; +} From d1e3534acfeed898b391c77bc895226fbea029ec Mon Sep 17 00:00:00 2001 From: erdemcaygor Date: Fri, 2 May 2025 11:30:38 +0300 Subject: [PATCH 09/55] identity module standalone migration --- .../apps/dev-app/src/app/app-routing.module.ts | 2 +- .../src/lib/components/roles/roles.component.ts | 14 ++++++++++++-- .../packages/identity/src/lib/identity.routes.ts | 8 +++++--- npm/ng-packs/packages/identity/src/public-api.ts | 1 + 4 files changed, 19 insertions(+), 6 deletions(-) diff --git a/npm/ng-packs/apps/dev-app/src/app/app-routing.module.ts b/npm/ng-packs/apps/dev-app/src/app/app-routing.module.ts index 6ee751f9af..deb22273f8 100644 --- a/npm/ng-packs/apps/dev-app/src/app/app-routing.module.ts +++ b/npm/ng-packs/apps/dev-app/src/app/app-routing.module.ts @@ -13,7 +13,7 @@ const routes: Routes = [ }, { path: 'identity', - loadChildren: () => import('@abp/ng.identity').then(m => m.IdentityModule.forLazy()), + loadChildren: () => import('@abp/ng.identity').then(m => m.identityRoutes), }, { path: 'tenant-management', 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 664c992478..d5a8da5962 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 @@ -5,7 +5,10 @@ import { PagedResultDto, } from '@abp/ng.core'; import { IdentityRoleDto, IdentityRoleService } from '@abp/ng.identity/proxy'; -import { ePermissionManagementComponents } from '@abp/ng.permission-management'; +import { + ePermissionManagementComponents, + PermissionManagementModule, +} from '@abp/ng.permission-management'; import { Confirmation, ConfirmationService, @@ -35,7 +38,14 @@ import { PageModule } from '@abp/ng.components/page'; useValue: eIdentityComponents.Roles, }, ], - imports: [CommonModule, CoreModule, ThemeSharedModule, ExtensibleModule, PageModule], + imports: [ + CommonModule, + CoreModule, + ThemeSharedModule, + ExtensibleModule, + PageModule, + PermissionManagementModule, + ], }) export class RolesComponent implements OnInit { protected readonly list = inject(ListService); diff --git a/npm/ng-packs/packages/identity/src/lib/identity.routes.ts b/npm/ng-packs/packages/identity/src/lib/identity.routes.ts index 2b3fea8057..9c66ec66e0 100644 --- a/npm/ng-packs/packages/identity/src/lib/identity.routes.ts +++ b/npm/ng-packs/packages/identity/src/lib/identity.routes.ts @@ -4,7 +4,9 @@ import { permissionGuard, ReplaceableComponents, ReplaceableRouteContainerComponent, + ReplaceableRouteContainerStandaloneComponent, RouterOutletComponent, + RouterOutletStandaloneComponent, } from '@abp/ng.core'; import { RolesComponent, UsersComponent } from './components'; import { identityExtensionsResolver } from './resolvers'; @@ -14,7 +16,7 @@ import { eIdentityComponents } from './enums'; export const identityRoutes: Routes = [ { path: '', - component: RouterOutletComponent, + component: RouterOutletStandaloneComponent, canActivate: [authGuard, permissionGuard], resolve: [identityExtensionsResolver], providers: [...provideIdentity()], @@ -22,7 +24,7 @@ export const identityRoutes: Routes = [ { path: '', redirectTo: 'roles', pathMatch: 'full' }, { path: 'roles', - component: ReplaceableRouteContainerComponent, + component: ReplaceableRouteContainerStandaloneComponent, data: { requiredPolicy: 'AbpIdentity.Roles', replaceableComponent: { @@ -34,7 +36,7 @@ export const identityRoutes: Routes = [ }, { path: 'users', - component: ReplaceableRouteContainerComponent, + component: ReplaceableRouteContainerStandaloneComponent, data: { requiredPolicy: 'AbpIdentity.Users', replaceableComponent: { diff --git a/npm/ng-packs/packages/identity/src/public-api.ts b/npm/ng-packs/packages/identity/src/public-api.ts index 4c4913f7eb..74cd5cce35 100644 --- a/npm/ng-packs/packages/identity/src/public-api.ts +++ b/npm/ng-packs/packages/identity/src/public-api.ts @@ -5,3 +5,4 @@ export * from './lib/identity.module'; export * from './lib/models'; export * from './lib/tokens'; export * from './lib/resolvers'; +export * from './lib/identity.routes'; From 54f24250bd3fe938162411b64a6a31142b56f8df Mon Sep 17 00:00:00 2001 From: erdemcaygor Date: Fri, 2 May 2025 13:50:50 +0300 Subject: [PATCH 10/55] tenant management module standalone migration --- .../dev-app/src/app/app-routing.module.ts | 3 +- .../components/tenants/tenants.component.ts | 28 +++++++++++-- .../src/lib/tenant-management.module.ts | 25 ++--------- .../src/lib/tenant-management.routes.ts | 41 +++++++++++++++++++ .../src/lib/tenant-management.ts | 35 ++++++++++++++++ .../tenant-management/src/public-api.ts | 1 + 6 files changed, 106 insertions(+), 27 deletions(-) create mode 100644 npm/ng-packs/packages/tenant-management/src/lib/tenant-management.routes.ts create mode 100644 npm/ng-packs/packages/tenant-management/src/lib/tenant-management.ts diff --git a/npm/ng-packs/apps/dev-app/src/app/app-routing.module.ts b/npm/ng-packs/apps/dev-app/src/app/app-routing.module.ts index deb22273f8..f1605c4cdd 100644 --- a/npm/ng-packs/apps/dev-app/src/app/app-routing.module.ts +++ b/npm/ng-packs/apps/dev-app/src/app/app-routing.module.ts @@ -17,8 +17,7 @@ const routes: Routes = [ }, { path: 'tenant-management', - loadChildren: () => - import('@abp/ng.tenant-management').then(m => m.TenantManagementModule.forLazy()), + loadChildren: () => import('@abp/ng.tenant-management').then(m => m.tenantManagementRoutes), }, { path: 'setting-management', 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 3722a8e5aa..f1c1e5d48d 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 @@ -1,8 +1,19 @@ -import { ListService, PagedResultDto } from '@abp/ng.core'; -import { eFeatureManagementComponents } from '@abp/ng.feature-management'; +import { CoreModule, ListService, PagedResultDto } from '@abp/ng.core'; +import { + eFeatureManagementComponents, + FeatureManagementComponent, + FeatureManagementModule, + provideFeatureManagementConfig, +} from '@abp/ng.feature-management'; import { GetTenantsInput, TenantDto, TenantService } from '@abp/ng.tenant-management/proxy'; -import { Confirmation, ConfirmationService, ToasterService } from '@abp/ng.theme.shared'; import { + Confirmation, + ConfirmationService, + ThemeSharedModule, + ToasterService, +} from '@abp/ng.theme.shared'; +import { + ExtensibleModule, EXTENSIONS_IDENTIFIER, FormPropData, generateFormFromProps, @@ -11,9 +22,10 @@ import { Component, inject, Injector, OnInit } from '@angular/core'; import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; import { finalize } from 'rxjs/operators'; import { eTenantManagementComponents } from '../../enums/components'; +import { CommonModule } from '@angular/common'; +import { PageModule } from '@abp/ng.components/page'; @Component({ - standalone: false, selector: 'abp-tenants', templateUrl: './tenants.component.html', providers: [ @@ -23,6 +35,14 @@ import { eTenantManagementComponents } from '../../enums/components'; useValue: eTenantManagementComponents.Tenants, }, ], + imports: [ + CommonModule, + CoreModule, + ThemeSharedModule, + PageModule, + ExtensibleModule, + FeatureManagementComponent, + ], }) export class TenantsComponent implements OnInit { protected readonly list = inject(ListService); diff --git a/npm/ng-packs/packages/tenant-management/src/lib/tenant-management.module.ts b/npm/ng-packs/packages/tenant-management/src/lib/tenant-management.module.ts index 76c917c51b..3d6fabc8dd 100644 --- a/npm/ng-packs/packages/tenant-management/src/lib/tenant-management.module.ts +++ b/npm/ng-packs/packages/tenant-management/src/lib/tenant-management.module.ts @@ -1,13 +1,7 @@ -import { CoreModule, LazyModuleFactory } from '@abp/ng.core'; -import { ThemeSharedModule } from '@abp/ng.theme.shared'; -import { ExtensibleModule } from '@abp/ng.components/extensible'; +import { LazyModuleFactory } from '@abp/ng.core'; import { ModuleWithProviders, NgModule, NgModuleFactory } from '@angular/core'; -import { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap'; -import { NgxValidateCoreModule } from '@ngx-validate/core'; -import { TenantsComponent } from './components/tenants/tenants.component'; import { TenantManagementExtensionsGuard } from './guards/extensions.guard'; import { TenantManagementConfigOptions } from './models/config-options'; -import { TenantManagementRoutingModule } from './tenant-management-routing.module'; import { TENANT_MANAGEMENT_CREATE_FORM_PROP_CONTRIBUTORS, TENANT_MANAGEMENT_EDIT_FORM_PROP_CONTRIBUTORS, @@ -15,22 +9,11 @@ import { TENANT_MANAGEMENT_ENTITY_PROP_CONTRIBUTORS, TENANT_MANAGEMENT_TOOLBAR_ACTION_CONTRIBUTORS, } from './tokens/extensions.token'; -import { PageModule } from '@abp/ng.components/page'; -import { FeatureManagementComponent } from '@abp/ng.feature-management'; @NgModule({ - declarations: [TenantsComponent], - exports: [TenantsComponent], - imports: [ - TenantManagementRoutingModule, - NgxValidateCoreModule, - CoreModule, - ThemeSharedModule, - NgbDropdownModule, - ExtensibleModule, - PageModule, - FeatureManagementComponent, - ], + declarations: [], + exports: [], + imports: [], }) export class TenantManagementModule { static forChild( diff --git a/npm/ng-packs/packages/tenant-management/src/lib/tenant-management.routes.ts b/npm/ng-packs/packages/tenant-management/src/lib/tenant-management.routes.ts new file mode 100644 index 0000000000..7c44b962d3 --- /dev/null +++ b/npm/ng-packs/packages/tenant-management/src/lib/tenant-management.routes.ts @@ -0,0 +1,41 @@ +import { Routes } from '@angular/router'; + +import { + authGuard, + permissionGuard, + ReplaceableComponents, + ReplaceableRouteContainerComponent, + ReplaceableRouteContainerStandaloneComponent, + RouterOutletComponent, + RouterOutletStandaloneComponent, +} from '@abp/ng.core'; + +import { TenantsComponent } from './components/tenants/tenants.component'; +import { eTenantManagementComponents } from './enums/components'; +import { tenantManagementExtensionsResolver } from './resolvers'; +import { provideTenantManagement } from './tenant-management'; + +export const tenantManagementRoutes: Routes = [ + { + path: '', + component: RouterOutletStandaloneComponent, + canActivate: [authGuard, permissionGuard], + resolve: [tenantManagementExtensionsResolver], + providers: [...provideTenantManagement()], + children: [ + { path: '', redirectTo: 'tenants', pathMatch: 'full' }, + { + path: 'tenants', + component: ReplaceableRouteContainerStandaloneComponent, + data: { + requiredPolicy: 'AbpTenantManagement.Tenants', + replaceableComponent: { + key: eTenantManagementComponents.Tenants, + defaultComponent: TenantsComponent, + } as ReplaceableComponents.RouteData, + }, + title: 'AbpTenantManagement::Tenants', + }, + ], + }, +]; diff --git a/npm/ng-packs/packages/tenant-management/src/lib/tenant-management.ts b/npm/ng-packs/packages/tenant-management/src/lib/tenant-management.ts new file mode 100644 index 0000000000..7ac344683d --- /dev/null +++ b/npm/ng-packs/packages/tenant-management/src/lib/tenant-management.ts @@ -0,0 +1,35 @@ +import { TenantManagementExtensionsGuard } from './guards/extensions.guard'; +import { TenantManagementConfigOptions } from './models/config-options'; +import { + TENANT_MANAGEMENT_CREATE_FORM_PROP_CONTRIBUTORS, + TENANT_MANAGEMENT_EDIT_FORM_PROP_CONTRIBUTORS, + TENANT_MANAGEMENT_ENTITY_ACTION_CONTRIBUTORS, + TENANT_MANAGEMENT_ENTITY_PROP_CONTRIBUTORS, + TENANT_MANAGEMENT_TOOLBAR_ACTION_CONTRIBUTORS, +} from './tokens/extensions.token'; + +export function provideTenantManagement(options: TenantManagementConfigOptions = {}) { + return [ + { + provide: TENANT_MANAGEMENT_ENTITY_ACTION_CONTRIBUTORS, + useValue: options.entityActionContributors, + }, + { + provide: TENANT_MANAGEMENT_TOOLBAR_ACTION_CONTRIBUTORS, + useValue: options.toolbarActionContributors, + }, + { + provide: TENANT_MANAGEMENT_ENTITY_PROP_CONTRIBUTORS, + useValue: options.entityPropContributors, + }, + { + provide: TENANT_MANAGEMENT_CREATE_FORM_PROP_CONTRIBUTORS, + useValue: options.createFormPropContributors, + }, + { + provide: TENANT_MANAGEMENT_EDIT_FORM_PROP_CONTRIBUTORS, + useValue: options.editFormPropContributors, + }, + TenantManagementExtensionsGuard, + ]; +} diff --git a/npm/ng-packs/packages/tenant-management/src/public-api.ts b/npm/ng-packs/packages/tenant-management/src/public-api.ts index f39c438435..0ab49e4f64 100644 --- a/npm/ng-packs/packages/tenant-management/src/public-api.ts +++ b/npm/ng-packs/packages/tenant-management/src/public-api.ts @@ -5,3 +5,4 @@ export * from './lib/models'; export * from './lib/tenant-management.module'; export * from './lib/tokens'; export * from './lib/resolvers'; +export * from './lib/tenant-management.routes'; From 3eee2330a9cd7fea46d218e1c3f8053b3a9491a7 Mon Sep 17 00:00:00 2001 From: erdemcaygor Date: Fri, 2 May 2025 16:27:53 +0300 Subject: [PATCH 11/55] setting management module standalone migration --- .../dev-app/src/app/app-routing.module.ts | 3 +- .../setting-management.component.ts | 7 ++-- .../src/lib/setting-management.module.ts | 11 +++---- .../src/lib/setting-management.routes.ts | 33 +++++++++++++++++++ .../src/lib/setting-management.ts | 3 ++ .../setting-management/src/public-api.ts | 1 + 6 files changed, 47 insertions(+), 11 deletions(-) create mode 100644 npm/ng-packs/packages/setting-management/src/lib/setting-management.routes.ts create mode 100644 npm/ng-packs/packages/setting-management/src/lib/setting-management.ts diff --git a/npm/ng-packs/apps/dev-app/src/app/app-routing.module.ts b/npm/ng-packs/apps/dev-app/src/app/app-routing.module.ts index f1605c4cdd..1f4d66fe5d 100644 --- a/npm/ng-packs/apps/dev-app/src/app/app-routing.module.ts +++ b/npm/ng-packs/apps/dev-app/src/app/app-routing.module.ts @@ -21,8 +21,7 @@ const routes: Routes = [ }, { path: 'setting-management', - loadChildren: () => - import('@abp/ng.setting-management').then(m => m.SettingManagementModule.forLazy()), + loadChildren: () => import('@abp/ng.setting-management').then(m => m.settingManagementRoutes), }, ]; 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 e5f3380dba..dcc9185397 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 @@ -1,12 +1,15 @@ -import { ABP } from '@abp/ng.core'; +import { ABP, CoreModule } from '@abp/ng.core'; import { SettingTabsService } from '@abp/ng.setting-management/config'; import { Component, OnDestroy, OnInit, TrackByFunction } from '@angular/core'; import { Subscription } from 'rxjs'; +import { CommonModule } from '@angular/common'; +import { ThemeSharedModule } from '@abp/ng.theme.shared'; +import { PageModule } from '@abp/ng.components/page'; @Component({ - standalone: false, selector: 'abp-setting-management', templateUrl: './setting-management.component.html', + imports: [CommonModule, CoreModule, ThemeSharedModule, PageModule], }) export class SettingManagementComponent implements OnDestroy, OnInit { private subscription = new Subscription(); diff --git a/npm/ng-packs/packages/setting-management/src/lib/setting-management.module.ts b/npm/ng-packs/packages/setting-management/src/lib/setting-management.module.ts index 5e88b588cf..a16e719bfa 100644 --- a/npm/ng-packs/packages/setting-management/src/lib/setting-management.module.ts +++ b/npm/ng-packs/packages/setting-management/src/lib/setting-management.module.ts @@ -1,14 +1,11 @@ -import { PageModule } from '@abp/ng.components/page'; -import { CoreModule, LazyModuleFactory } from '@abp/ng.core'; -import { ThemeSharedModule } from '@abp/ng.theme.shared'; +import { LazyModuleFactory } from '@abp/ng.core'; import { ModuleWithProviders, NgModule, NgModuleFactory } from '@angular/core'; -import { SettingManagementComponent } from './components/setting-management.component'; import { SettingManagementRoutingModule } from './setting-management-routing.module'; @NgModule({ - declarations: [SettingManagementComponent], - exports: [SettingManagementComponent], - imports: [SettingManagementRoutingModule, CoreModule, ThemeSharedModule, PageModule], + declarations: [], + exports: [], + imports: [SettingManagementRoutingModule], }) export class SettingManagementModule { static forChild(): ModuleWithProviders { diff --git a/npm/ng-packs/packages/setting-management/src/lib/setting-management.routes.ts b/npm/ng-packs/packages/setting-management/src/lib/setting-management.routes.ts new file mode 100644 index 0000000000..37ef197fa9 --- /dev/null +++ b/npm/ng-packs/packages/setting-management/src/lib/setting-management.routes.ts @@ -0,0 +1,33 @@ +import { Routes } from '@angular/router'; +import { + authGuard, + ReplaceableComponents, + ReplaceableRouteContainerStandaloneComponent, + RouterOutletStandaloneComponent, +} from '@abp/ng.core'; +import { SettingManagementComponent } from './components/setting-management.component'; +import { eSettingManagementComponents } from './enums/components'; +import { provideSettingManagement } from './setting-management'; + +export const settingManagementRoutes: Routes = [ + { + path: '', + component: RouterOutletStandaloneComponent, + canActivate: [authGuard], + providers: [...provideSettingManagement()], + children: [ + { + path: '', + component: ReplaceableRouteContainerStandaloneComponent, + data: { + requiredPolicy: 'AbpAccount.SettingManagement', + replaceableComponent: { + key: eSettingManagementComponents.SettingManagement, + defaultComponent: SettingManagementComponent, + } as ReplaceableComponents.RouteData, + }, + }, + ], + title: 'AbpSettingManagement::Settings', + }, +]; diff --git a/npm/ng-packs/packages/setting-management/src/lib/setting-management.ts b/npm/ng-packs/packages/setting-management/src/lib/setting-management.ts new file mode 100644 index 0000000000..bd90296fb6 --- /dev/null +++ b/npm/ng-packs/packages/setting-management/src/lib/setting-management.ts @@ -0,0 +1,3 @@ +export function provideSettingManagement() { + return []; +} diff --git a/npm/ng-packs/packages/setting-management/src/public-api.ts b/npm/ng-packs/packages/setting-management/src/public-api.ts index 24e62d4da1..673b3f281a 100644 --- a/npm/ng-packs/packages/setting-management/src/public-api.ts +++ b/npm/ng-packs/packages/setting-management/src/public-api.ts @@ -1,3 +1,4 @@ export * from './lib/setting-management.module'; export * from './lib/components/setting-management.component'; export * from './lib/enums'; +export * from './lib/setting-management.routes'; From c37043560bffd395e3806fdc052446fb0455d253 Mon Sep 17 00:00:00 2001 From: erdemcaygor Date: Fri, 2 May 2025 16:57:31 +0300 Subject: [PATCH 12/55] refactoring --- npm/ng-packs/packages/account/src/lib/account.ts | 4 ---- npm/ng-packs/packages/identity/src/lib/identity.ts | 2 -- .../tenant-management/src/lib/tenant-management.routes.ts | 2 -- .../packages/tenant-management/src/lib/tenant-management.ts | 2 -- 4 files changed, 10 deletions(-) diff --git a/npm/ng-packs/packages/account/src/lib/account.ts b/npm/ng-packs/packages/account/src/lib/account.ts index 31999b7b59..062fcb144d 100644 --- a/npm/ng-packs/packages/account/src/lib/account.ts +++ b/npm/ng-packs/packages/account/src/lib/account.ts @@ -4,15 +4,12 @@ import { NgxValidateCoreModule } from '@ngx-validate/core'; import { AccountConfigOptions } from './models/config-options'; import { ACCOUNT_CONFIG_OPTIONS } from './tokens/config-options.token'; import { accountConfigOptionsFactory } from './utils/factory-utils'; -import { AuthenticationFlowGuard } from './guards/authentication-flow.guard'; import { RE_LOGIN_CONFIRMATION_TOKEN } from './tokens'; import { ACCOUNT_EDIT_FORM_PROP_CONTRIBUTORS } from './tokens/extensions.token'; -import { AccountExtensionsGuard } from './guards/extensions.guard'; export function provideAccount(options: AccountConfigOptions = {}) { return [ importProvidersFrom(NgbDropdownModule, NgxValidateCoreModule), - AuthenticationFlowGuard, { provide: ACCOUNT_CONFIG_OPTIONS, useValue: options }, { provide: 'ACCOUNT_OPTIONS', @@ -27,6 +24,5 @@ export function provideAccount(options: AccountConfigOptions = {}) { provide: ACCOUNT_EDIT_FORM_PROP_CONTRIBUTORS, useValue: options.editFormPropContributors, }, - AccountExtensionsGuard, ]; } diff --git a/npm/ng-packs/packages/identity/src/lib/identity.ts b/npm/ng-packs/packages/identity/src/lib/identity.ts index c6bec50f41..e16d9c9316 100644 --- a/npm/ng-packs/packages/identity/src/lib/identity.ts +++ b/npm/ng-packs/packages/identity/src/lib/identity.ts @@ -5,7 +5,6 @@ import { IDENTITY_ENTITY_PROP_CONTRIBUTORS, IDENTITY_TOOLBAR_ACTION_CONTRIBUTORS, } from './tokens'; -import { IdentityExtensionsGuard } from './guards'; import { IdentityConfigOptions } from './models'; export function provideIdentity(options: IdentityConfigOptions = {}) { @@ -30,6 +29,5 @@ export function provideIdentity(options: IdentityConfigOptions = {}) { provide: IDENTITY_EDIT_FORM_PROP_CONTRIBUTORS, useValue: options.editFormPropContributors, }, - IdentityExtensionsGuard, ]; } diff --git a/npm/ng-packs/packages/tenant-management/src/lib/tenant-management.routes.ts b/npm/ng-packs/packages/tenant-management/src/lib/tenant-management.routes.ts index 7c44b962d3..88b5f4cc4a 100644 --- a/npm/ng-packs/packages/tenant-management/src/lib/tenant-management.routes.ts +++ b/npm/ng-packs/packages/tenant-management/src/lib/tenant-management.routes.ts @@ -4,9 +4,7 @@ import { authGuard, permissionGuard, ReplaceableComponents, - ReplaceableRouteContainerComponent, ReplaceableRouteContainerStandaloneComponent, - RouterOutletComponent, RouterOutletStandaloneComponent, } from '@abp/ng.core'; diff --git a/npm/ng-packs/packages/tenant-management/src/lib/tenant-management.ts b/npm/ng-packs/packages/tenant-management/src/lib/tenant-management.ts index 7ac344683d..7238357869 100644 --- a/npm/ng-packs/packages/tenant-management/src/lib/tenant-management.ts +++ b/npm/ng-packs/packages/tenant-management/src/lib/tenant-management.ts @@ -1,4 +1,3 @@ -import { TenantManagementExtensionsGuard } from './guards/extensions.guard'; import { TenantManagementConfigOptions } from './models/config-options'; import { TENANT_MANAGEMENT_CREATE_FORM_PROP_CONTRIBUTORS, @@ -30,6 +29,5 @@ export function provideTenantManagement(options: TenantManagementConfigOptions = provide: TENANT_MANAGEMENT_EDIT_FORM_PROP_CONTRIBUTORS, useValue: options.editFormPropContributors, }, - TenantManagementExtensionsGuard, ]; } From b00fe6c6183895143a86c86aacaf7dc12deb344b Mon Sep 17 00:00:00 2001 From: erdemcaygor Date: Fri, 2 May 2025 18:44:10 +0300 Subject: [PATCH 13/55] refactoring --- npm/ng-packs/packages/identity/src/lib/identity.module.ts | 4 +++- npm/ng-packs/packages/identity/src/lib/identity.routes.ts | 6 ++---- npm/ng-packs/packages/identity/src/lib/identity.ts | 3 ++- npm/ng-packs/packages/identity/src/public-api.ts | 1 + .../src/lib/components/permission-management.component.ts | 8 +++++--- .../src/lib/permission-management.module.ts | 6 +++--- 6 files changed, 16 insertions(+), 12 deletions(-) diff --git a/npm/ng-packs/packages/identity/src/lib/identity.module.ts b/npm/ng-packs/packages/identity/src/lib/identity.module.ts index f834456e85..b8b6221404 100644 --- a/npm/ng-packs/packages/identity/src/lib/identity.module.ts +++ b/npm/ng-packs/packages/identity/src/lib/identity.module.ts @@ -9,11 +9,13 @@ import { IDENTITY_ENTITY_PROP_CONTRIBUTORS, IDENTITY_TOOLBAR_ACTION_CONTRIBUTORS, } from './tokens/extensions.token'; +import { IdentityRoutingModule } from './identity-routing.module'; +import { RolesComponent, UsersComponent } from './components'; @NgModule({ declarations: [], exports: [], - imports: [], + imports: [IdentityRoutingModule, RolesComponent, UsersComponent], }) export class IdentityModule { static forChild(options: IdentityConfigOptions = {}): ModuleWithProviders { diff --git a/npm/ng-packs/packages/identity/src/lib/identity.routes.ts b/npm/ng-packs/packages/identity/src/lib/identity.routes.ts index 9c66ec66e0..2505a10b8c 100644 --- a/npm/ng-packs/packages/identity/src/lib/identity.routes.ts +++ b/npm/ng-packs/packages/identity/src/lib/identity.routes.ts @@ -3,15 +3,13 @@ import { authGuard, permissionGuard, ReplaceableComponents, - ReplaceableRouteContainerComponent, ReplaceableRouteContainerStandaloneComponent, - RouterOutletComponent, RouterOutletStandaloneComponent, } from '@abp/ng.core'; import { RolesComponent, UsersComponent } from './components'; import { identityExtensionsResolver } from './resolvers'; -import { provideIdentity } from './identity'; import { eIdentityComponents } from './enums'; +import { provideIdentity } from './identity'; export const identityRoutes: Routes = [ { @@ -19,7 +17,7 @@ export const identityRoutes: Routes = [ component: RouterOutletStandaloneComponent, canActivate: [authGuard, permissionGuard], resolve: [identityExtensionsResolver], - providers: [...provideIdentity()], + providers: provideIdentity({}), children: [ { path: '', redirectTo: 'roles', pathMatch: 'full' }, { diff --git a/npm/ng-packs/packages/identity/src/lib/identity.ts b/npm/ng-packs/packages/identity/src/lib/identity.ts index e16d9c9316..ebee1c063a 100644 --- a/npm/ng-packs/packages/identity/src/lib/identity.ts +++ b/npm/ng-packs/packages/identity/src/lib/identity.ts @@ -6,8 +6,9 @@ import { IDENTITY_TOOLBAR_ACTION_CONTRIBUTORS, } from './tokens'; import { IdentityConfigOptions } from './models'; +import { Provider } from '@angular/core'; -export function provideIdentity(options: IdentityConfigOptions = {}) { +export function provideIdentity(options: IdentityConfigOptions = {}): Provider[] { return [ { provide: IDENTITY_ENTITY_ACTION_CONTRIBUTORS, diff --git a/npm/ng-packs/packages/identity/src/public-api.ts b/npm/ng-packs/packages/identity/src/public-api.ts index 74cd5cce35..511f1bac6b 100644 --- a/npm/ng-packs/packages/identity/src/public-api.ts +++ b/npm/ng-packs/packages/identity/src/public-api.ts @@ -6,3 +6,4 @@ export * from './lib/models'; export * from './lib/tokens'; export * from './lib/resolvers'; export * from './lib/identity.routes'; +export * from './lib/identity'; 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 c68c9afc85..4c6efbdfbf 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 @@ -1,5 +1,5 @@ -import { ConfigStateService, CurrentUserDto } from '@abp/ng.core'; -import { LocaleDirection, ToasterService } from '@abp/ng.theme.shared'; +import { ConfigStateService, CoreModule, CurrentUserDto } from '@abp/ng.core'; +import { LocaleDirection, ThemeSharedModule, ToasterService } from '@abp/ng.theme.shared'; import { GetPermissionListResultDto, PermissionGrantInfoDto, @@ -24,6 +24,8 @@ import { import { concat, of } from 'rxjs'; import { finalize, switchMap, take, tap } from 'rxjs/operators'; import { PermissionManagement } from '../models/permission-management'; +import { CommonModule } from '@angular/common'; +import { PageModule } from '@abp/ng.components/page'; type PermissionWithStyle = PermissionGrantInfoDto & { style: string; @@ -34,7 +36,6 @@ type PermissionWithGroupName = PermissionGrantInfoDto & { }; @Component({ - standalone: false, selector: 'abp-permission-management', templateUrl: './permission-management.component.html', exportAs: 'abpPermissionManagement', @@ -85,6 +86,7 @@ type PermissionWithGroupName = PermissionGrantInfoDto & { } `, ], + imports: [CommonModule, CoreModule, ThemeSharedModule], }) export class PermissionManagementComponent implements diff --git a/npm/ng-packs/packages/permission-management/src/lib/permission-management.module.ts b/npm/ng-packs/packages/permission-management/src/lib/permission-management.module.ts index b187994cf0..500d7770f3 100644 --- a/npm/ng-packs/packages/permission-management/src/lib/permission-management.module.ts +++ b/npm/ng-packs/packages/permission-management/src/lib/permission-management.module.ts @@ -1,11 +1,11 @@ import { CoreModule } from '@abp/ng.core'; import { ThemeSharedModule } from '@abp/ng.theme.shared'; import { NgModule } from '@angular/core'; -import { PermissionManagementComponent } from './components/permission-management.component'; +import { PermissionManagementComponent } from './components'; @NgModule({ - declarations: [PermissionManagementComponent], - imports: [CoreModule, ThemeSharedModule], + declarations: [], + imports: [CoreModule, ThemeSharedModule, PermissionManagementComponent], exports: [PermissionManagementComponent], }) export class PermissionManagementModule {} From 9ba48d6acb8c1d4cbfcfd220491886de19bb5ff2 Mon Sep 17 00:00:00 2001 From: erdemcaygor Date: Mon, 5 May 2025 02:06:35 +0300 Subject: [PATCH 14/55] packages ng-modules refactored --- .../account/src/lib/account.module.ts | 25 ++++++++++--------- .../src/lib/permission-management.module.ts | 4 +-- .../src/lib/setting-management.module.ts | 3 ++- .../src/lib/tenant-management.module.ts | 4 ++- 4 files changed, 19 insertions(+), 17 deletions(-) diff --git a/npm/ng-packs/packages/account/src/lib/account.module.ts b/npm/ng-packs/packages/account/src/lib/account.module.ts index a3c05e6613..49448f6e72 100644 --- a/npm/ng-packs/packages/account/src/lib/account.module.ts +++ b/npm/ng-packs/packages/account/src/lib/account.module.ts @@ -1,9 +1,5 @@ -import { CoreModule, LazyModuleFactory } from '@abp/ng.core'; -import { ThemeSharedModule } from '@abp/ng.theme.shared'; +import { LazyModuleFactory } from '@abp/ng.core'; import { ModuleWithProviders, NgModule, NgModuleFactory } from '@angular/core'; -import { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap'; -import { NgxValidateCoreModule } from '@ngx-validate/core'; -import { AccountRoutingModule } from './account-routing.module'; import { AccountConfigOptions } from './models/config-options'; import { ACCOUNT_CONFIG_OPTIONS } from './tokens/config-options.token'; import { accountConfigOptionsFactory } from './utils/factory-utils'; @@ -12,17 +8,22 @@ import { RE_LOGIN_CONFIRMATION_TOKEN } from './tokens'; import { ACCOUNT_EDIT_FORM_PROP_CONTRIBUTORS } from './tokens/extensions.token'; import { AccountExtensionsGuard } from './guards/extensions.guard'; -import { ExtensibleModule } from '@abp/ng.components/extensible'; +import { + ForgotPasswordComponent, + LoginComponent, + ManageProfileComponent, + RegisterComponent, + ResetPasswordComponent, +} from './components'; @NgModule({ declarations: [], imports: [ - CoreModule, - AccountRoutingModule, - ThemeSharedModule, - NgbDropdownModule, - NgxValidateCoreModule, - ExtensibleModule, + LoginComponent, + RegisterComponent, + ForgotPasswordComponent, + ResetPasswordComponent, + ManageProfileComponent, ], exports: [], }) diff --git a/npm/ng-packs/packages/permission-management/src/lib/permission-management.module.ts b/npm/ng-packs/packages/permission-management/src/lib/permission-management.module.ts index 500d7770f3..2d115004b6 100644 --- a/npm/ng-packs/packages/permission-management/src/lib/permission-management.module.ts +++ b/npm/ng-packs/packages/permission-management/src/lib/permission-management.module.ts @@ -1,11 +1,9 @@ -import { CoreModule } from '@abp/ng.core'; -import { ThemeSharedModule } from '@abp/ng.theme.shared'; import { NgModule } from '@angular/core'; import { PermissionManagementComponent } from './components'; @NgModule({ declarations: [], - imports: [CoreModule, ThemeSharedModule, PermissionManagementComponent], + imports: [PermissionManagementComponent], exports: [PermissionManagementComponent], }) export class PermissionManagementModule {} diff --git a/npm/ng-packs/packages/setting-management/src/lib/setting-management.module.ts b/npm/ng-packs/packages/setting-management/src/lib/setting-management.module.ts index a16e719bfa..7842ac7de2 100644 --- a/npm/ng-packs/packages/setting-management/src/lib/setting-management.module.ts +++ b/npm/ng-packs/packages/setting-management/src/lib/setting-management.module.ts @@ -1,11 +1,12 @@ import { LazyModuleFactory } from '@abp/ng.core'; import { ModuleWithProviders, NgModule, NgModuleFactory } from '@angular/core'; import { SettingManagementRoutingModule } from './setting-management-routing.module'; +import { SettingManagementComponent } from './components/setting-management.component'; @NgModule({ declarations: [], exports: [], - imports: [SettingManagementRoutingModule], + imports: [SettingManagementRoutingModule, SettingManagementComponent], }) export class SettingManagementModule { static forChild(): ModuleWithProviders { diff --git a/npm/ng-packs/packages/tenant-management/src/lib/tenant-management.module.ts b/npm/ng-packs/packages/tenant-management/src/lib/tenant-management.module.ts index 3d6fabc8dd..d7074033ab 100644 --- a/npm/ng-packs/packages/tenant-management/src/lib/tenant-management.module.ts +++ b/npm/ng-packs/packages/tenant-management/src/lib/tenant-management.module.ts @@ -9,11 +9,13 @@ import { TENANT_MANAGEMENT_ENTITY_PROP_CONTRIBUTORS, TENANT_MANAGEMENT_TOOLBAR_ACTION_CONTRIBUTORS, } from './tokens/extensions.token'; +import { TenantsComponent } from './components'; +import { TenantManagementRoutingModule } from './tenant-management-routing.module'; @NgModule({ declarations: [], exports: [], - imports: [], + imports: [TenantManagementRoutingModule, TenantsComponent], }) export class TenantManagementModule { static forChild( From c052022d25fa4f4418336ae67b081b39deaf24b1 Mon Sep 17 00:00:00 2001 From: erdemcaygor Date: Mon, 5 May 2025 09:57:33 +0300 Subject: [PATCH 15/55] theme basic module standalone migration --- .../src/lib/components/logo/logo.component.ts | 3 ++- .../lib/components/nav-items/current-user.component.ts | 5 ++++- .../lib/components/nav-items/languages.component.ts | 6 ++++-- .../lib/components/nav-items/nav-items.component.ts | 4 +++- .../validation-error/validation-error.component.ts | 4 +++- .../packages/theme-basic/src/lib/theme-basic.module.ts | 10 +++++----- 6 files changed, 21 insertions(+), 11 deletions(-) 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 6936dd5cfa..fcaeacdf1a 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 @@ -1,8 +1,8 @@ import { ApplicationInfo, EnvironmentService } from '@abp/ng.core'; import { Component } from '@angular/core'; +import { CommonModule } from '@angular/common'; @Component({ - standalone: false, selector: 'abp-logo', template: ` @@ -13,6 +13,7 @@ import { Component } from '@angular/core'; } `, + imports: [CommonModule], }) export class LogoComponent { get appInfo(): ApplicationInfo { 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 087feafe20..e283279db5 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 @@ -1,6 +1,7 @@ import { AuthService, ConfigStateService, + CoreModule, CurrentUserDto, NAVIGATE_TO_MANAGE_PROFILE, SessionStateService, @@ -8,11 +9,13 @@ import { import { UserMenu, UserMenuService } from '@abp/ng.theme.shared'; import { Component, Inject, TrackByFunction } from '@angular/core'; import { Observable } from 'rxjs'; +import { CommonModule } from '@angular/common'; +import { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap'; @Component({ - standalone: false, selector: 'abp-current-user', templateUrl: './current-user.component.html', + imports: [CommonModule, CoreModule, NgbDropdownModule], }) export class CurrentUserComponent { currentUser$: Observable = this.configState.getOne$('currentUser'); 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 cacf899eff..53f2710114 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 @@ -1,10 +1,11 @@ -import { ConfigStateService, LanguageInfo, SessionStateService } from '@abp/ng.core'; +import { ConfigStateService, CoreModule, LanguageInfo, SessionStateService } from '@abp/ng.core'; import { Component } from '@angular/core'; import { Observable } from 'rxjs'; import { map } from 'rxjs/operators'; +import { CommonModule } from '@angular/common'; +import { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap'; @Component({ - standalone: false, selector: 'abp-languages', template: ` @if (((dropdownLanguages$ | async)?.length || 0) > 0) { @@ -38,6 +39,7 @@ import { map } from 'rxjs/operators'; } `, + imports: [CommonModule, CoreModule, NgbDropdownModule], }) export class LanguagesComponent { get smallScreen(): boolean { 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 08ee145cc8..f9ae0625f7 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,10 +1,12 @@ import { NavItem, NavItemsService } from '@abp/ng.theme.shared'; import { Component, TrackByFunction } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { CoreModule } from '@abp/ng.core'; @Component({ - standalone: false, selector: 'abp-nav-items', templateUrl: 'nav-items.component.html', + imports: [CommonModule, CoreModule], }) export class NavItemsComponent { trackByFn: TrackByFunction = (_, element) => element.id; 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 c3c36ae2b3..24a74d4449 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 @@ -1,8 +1,9 @@ import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core'; import { Validation, ValidationErrorComponent as ErrorComponent } from '@ngx-validate/core'; +import { CommonModule } from '@angular/common'; +import { CoreModule } from '@abp/ng.core'; @Component({ - standalone: false, selector: 'abp-validation-error', template: ` @for (error of abpErrors; track $index) { @@ -13,6 +14,7 @@ import { Validation, ValidationErrorComponent as ErrorComponent } from '@ngx-val `, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, + imports: [CommonModule, CoreModule], }) export class ValidationErrorComponent extends ErrorComponent { get abpErrors(): (Validation.Error & { interpoliteParams?: string[] })[] { diff --git a/npm/ng-packs/packages/theme-basic/src/lib/theme-basic.module.ts b/npm/ng-packs/packages/theme-basic/src/lib/theme-basic.module.ts index d68d112ac5..91c7b56f74 100644 --- a/npm/ng-packs/packages/theme-basic/src/lib/theme-basic.module.ts +++ b/npm/ng-packs/packages/theme-basic/src/lib/theme-basic.module.ts @@ -23,12 +23,7 @@ export const LAYOUTS = [ApplicationLayoutComponent, AccountLayoutComponent, Empt @NgModule({ declarations: [ ...LAYOUTS, - ValidationErrorComponent, - LogoComponent, - NavItemsComponent, RoutesComponent, - CurrentUserComponent, - LanguagesComponent, PageAlertContainerComponent, TenantBoxComponent, AuthWrapperComponent, @@ -50,6 +45,11 @@ export const LAYOUTS = [ApplicationLayoutComponent, AccountLayoutComponent, Empt NgbDropdownModule, NgxValidateCoreModule, LazyTranslatePipe, + ValidationErrorComponent, + LogoComponent, + NavItemsComponent, + CurrentUserComponent, + LanguagesComponent, ], }) export class BaseThemeBasicModule {} From 6f1413331881efbc77e04740b25f5b131db608e5 Mon Sep 17 00:00:00 2001 From: erdemcaygor Date: Mon, 5 May 2025 11:21:21 +0300 Subject: [PATCH 16/55] theme basic module standalone migration --- .../account-layout.component.ts | 16 +++++++++++++-- .../auth-wrapper/auth-wrapper.component.ts | 5 ++++- .../tenant-box/tenant-box.component.ts | 4 +++- .../application-layout.component.ts | 16 +++++++++++++-- .../empty-layout/empty-layout.component.ts | 3 ++- .../page-alert-container.component.ts | 4 +++- .../lib/components/routes/routes.component.ts | 8 ++++++-- .../theme-basic/src/lib/theme-basic.module.ts | 20 ++++++------------- 8 files changed, 52 insertions(+), 24 deletions(-) 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 91bc91aea0..d9a42d07d0 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 @@ -1,12 +1,24 @@ import { AfterViewInit, Component } from '@angular/core'; -import { eLayoutType, SubscriptionService } from '@abp/ng.core'; +import { CoreModule, eLayoutType, SubscriptionService } from '@abp/ng.core'; import { LayoutService } from '../../services/layout.service'; +import { CommonModule } from '@angular/common'; +import { LogoComponent } from '../logo/logo.component'; +import { RoutesComponent } from '../routes/routes.component'; +import { NavItemsComponent } from '../nav-items/nav-items.component'; +import { AuthWrapperComponent } from './auth-wrapper/auth-wrapper.component'; @Component({ - standalone: false, selector: 'abp-layout-account', templateUrl: './account-layout.component.html', providers: [LayoutService, SubscriptionService], + imports: [ + CommonModule, + CoreModule, + LogoComponent, + RoutesComponent, + NavItemsComponent, + AuthWrapperComponent, + ], }) export class AccountLayoutComponent implements AfterViewInit { // required for dynamic component 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 8533c0177d..eed1a99a19 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 @@ -1,11 +1,14 @@ import { AuthWrapperService } from '@abp/ng.account.core'; import { Component } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { CoreModule } from '@abp/ng.core'; +import { TenantBoxComponent } from '../tenant-box/tenant-box.component'; @Component({ - standalone: false, selector: 'abp-auth-wrapper', templateUrl: './auth-wrapper.component.html', providers: [AuthWrapperService], + imports: [CommonModule, CoreModule, TenantBoxComponent], }) export class AuthWrapperComponent { constructor(public service: 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 ccf13df4aa..9428911b55 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 @@ -1,11 +1,13 @@ import { TenantBoxService } from '@abp/ng.account.core'; import { Component } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { CoreModule } from '@abp/ng.core'; @Component({ - standalone: false, selector: 'abp-tenant-box', templateUrl: './tenant-box.component.html', providers: [TenantBoxService], + imports: [CommonModule, CoreModule], }) export class TenantBoxComponent { constructor(public service: 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 7ecd8157f4..cd9d583e71 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 @@ -1,14 +1,26 @@ -import { eLayoutType, SubscriptionService } from '@abp/ng.core'; +import { CoreModule, eLayoutType, SubscriptionService } from '@abp/ng.core'; import { collapseWithMargin, slideFromBottom } from '@abp/ng.theme.shared'; import { AfterViewInit, Component, inject } from '@angular/core'; import { LayoutService } from '../../services/layout.service'; +import { CommonModule } from '@angular/common'; +import { LogoComponent } from '../logo/logo.component'; +import { PageAlertContainerComponent } from '../page-alert-container/page-alert-container.component'; +import { RoutesComponent } from '../routes/routes.component'; +import { NavItemsComponent } from '../nav-items/nav-items.component'; @Component({ - standalone: false, selector: 'abp-layout-application', templateUrl: './application-layout.component.html', animations: [slideFromBottom, collapseWithMargin], providers: [LayoutService, SubscriptionService], + imports: [ + CommonModule, + CoreModule, + LogoComponent, + PageAlertContainerComponent, + RoutesComponent, + NavItemsComponent, + ], }) export class ApplicationLayoutComponent implements AfterViewInit { public readonly service = inject(LayoutService); 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 93e66676d3..16cd0951e5 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 @@ -1,10 +1,11 @@ import { Component } from '@angular/core'; import { eLayoutType } from '@abp/ng.core'; +import { RouterModule } from '@angular/router'; @Component({ - standalone: false, selector: 'abp-layout-empty', template: ` `, + imports: [RouterModule], }) export class EmptyLayoutComponent { static type = eLayoutType.empty; 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 ac794a1504..9d3a8336c5 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 @@ -1,11 +1,13 @@ import { Component, ViewEncapsulation } from '@angular/core'; import { PageAlertService } from '@abp/ng.theme.shared'; +import { CommonModule } from '@angular/common'; +import { CoreModule } from '@abp/ng.core'; @Component({ - standalone: false, selector: 'abp-page-alert-container', templateUrl: './page-alert-container.component.html', encapsulation: ViewEncapsulation.None, + imports: [CommonModule, CoreModule], }) export class PageAlertContainerComponent { constructor(public service: PageAlertService) {} 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 dc6b797446..895bdea1a6 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 @@ -1,4 +1,4 @@ -import { ABP, RoutesService, TreeNode } from '@abp/ng.core'; +import { ABP, CoreModule, RoutesService, TreeNode } from '@abp/ng.core'; import { Component, ElementRef, @@ -9,11 +9,15 @@ import { TrackByFunction, ViewChildren, } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap'; +import { LazyTranslatePipe } from '../../pipes'; +import { RouterModule } from '@angular/router'; @Component({ - standalone: false, selector: 'abp-routes', templateUrl: 'routes.component.html', + imports: [CommonModule, RouterModule, CoreModule, NgbDropdownModule, LazyTranslatePipe], }) export class RoutesComponent { public readonly routesService = inject(RoutesService); diff --git a/npm/ng-packs/packages/theme-basic/src/lib/theme-basic.module.ts b/npm/ng-packs/packages/theme-basic/src/lib/theme-basic.module.ts index 91c7b56f74..0deaa5372f 100644 --- a/npm/ng-packs/packages/theme-basic/src/lib/theme-basic.module.ts +++ b/npm/ng-packs/packages/theme-basic/src/lib/theme-basic.module.ts @@ -1,7 +1,5 @@ -import { CoreModule } from '@abp/ng.core'; import { ThemeSharedModule } from '@abp/ng.theme.shared'; import { ModuleWithProviders, NgModule } from '@angular/core'; -import { NgbCollapseModule, NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap'; import { NgxValidateCoreModule } from '@ngx-validate/core'; import { AccountLayoutComponent } from './components/account-layout/account-layout.component'; import { AuthWrapperComponent } from './components/account-layout/auth-wrapper/auth-wrapper.component'; @@ -16,18 +14,11 @@ import { PageAlertContainerComponent } from './components/page-alert-container/p import { RoutesComponent } from './components/routes/routes.component'; import { ValidationErrorComponent } from './components/validation-error/validation-error.component'; import { provideThemeBasicConfig } from './providers'; -import { LazyTranslatePipe } from './pipes'; export const LAYOUTS = [ApplicationLayoutComponent, AccountLayoutComponent, EmptyLayoutComponent]; @NgModule({ - declarations: [ - ...LAYOUTS, - RoutesComponent, - PageAlertContainerComponent, - TenantBoxComponent, - AuthWrapperComponent, - ], + declarations: [], exports: [ ...LAYOUTS, ValidationErrorComponent, @@ -39,17 +30,18 @@ export const LAYOUTS = [ApplicationLayoutComponent, AccountLayoutComponent, Empt PageAlertContainerComponent, ], imports: [ - CoreModule, + ...LAYOUTS, ThemeSharedModule, - NgbCollapseModule, - NgbDropdownModule, NgxValidateCoreModule, - LazyTranslatePipe, ValidationErrorComponent, LogoComponent, NavItemsComponent, CurrentUserComponent, LanguagesComponent, + PageAlertContainerComponent, + TenantBoxComponent, + AuthWrapperComponent, + RoutesComponent, ], }) export class BaseThemeBasicModule {} From bfa194ea0894d4cbbb7bfc0ce63c36cffa4cc574 Mon Sep 17 00:00:00 2001 From: erdemcaygor Date: Mon, 5 May 2025 11:32:16 +0300 Subject: [PATCH 17/55] removed unused modules --- .../packages/theme-basic/src/lib/theme-basic.module.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/npm/ng-packs/packages/theme-basic/src/lib/theme-basic.module.ts b/npm/ng-packs/packages/theme-basic/src/lib/theme-basic.module.ts index 0deaa5372f..6842c068a3 100644 --- a/npm/ng-packs/packages/theme-basic/src/lib/theme-basic.module.ts +++ b/npm/ng-packs/packages/theme-basic/src/lib/theme-basic.module.ts @@ -1,6 +1,4 @@ -import { ThemeSharedModule } from '@abp/ng.theme.shared'; import { ModuleWithProviders, NgModule } from '@angular/core'; -import { NgxValidateCoreModule } from '@ngx-validate/core'; import { AccountLayoutComponent } from './components/account-layout/account-layout.component'; import { AuthWrapperComponent } from './components/account-layout/auth-wrapper/auth-wrapper.component'; import { TenantBoxComponent } from './components/account-layout/tenant-box/tenant-box.component'; @@ -31,8 +29,6 @@ export const LAYOUTS = [ApplicationLayoutComponent, AccountLayoutComponent, Empt ], imports: [ ...LAYOUTS, - ThemeSharedModule, - NgxValidateCoreModule, ValidationErrorComponent, LogoComponent, NavItemsComponent, From 1c179fbca5bde412177924948ee533da30f7a19a Mon Sep 17 00:00:00 2001 From: erdemcaygor Date: Mon, 5 May 2025 11:39:37 +0300 Subject: [PATCH 18/55] refactoring --- .../theme-basic/src/lib/theme-basic.module.ts | 35 +++++++------------ 1 file changed, 13 insertions(+), 22 deletions(-) diff --git a/npm/ng-packs/packages/theme-basic/src/lib/theme-basic.module.ts b/npm/ng-packs/packages/theme-basic/src/lib/theme-basic.module.ts index 6842c068a3..63e610e5f6 100644 --- a/npm/ng-packs/packages/theme-basic/src/lib/theme-basic.module.ts +++ b/npm/ng-packs/packages/theme-basic/src/lib/theme-basic.module.ts @@ -15,30 +15,21 @@ import { provideThemeBasicConfig } from './providers'; export const LAYOUTS = [ApplicationLayoutComponent, AccountLayoutComponent, EmptyLayoutComponent]; +export const THEME_BASIC_COMPONENTS = [ + ...LAYOUTS, + ValidationErrorComponent, + LogoComponent, + NavItemsComponent, + RoutesComponent, + CurrentUserComponent, + LanguagesComponent, + PageAlertContainerComponent, +]; + @NgModule({ declarations: [], - exports: [ - ...LAYOUTS, - ValidationErrorComponent, - LogoComponent, - NavItemsComponent, - RoutesComponent, - CurrentUserComponent, - LanguagesComponent, - PageAlertContainerComponent, - ], - imports: [ - ...LAYOUTS, - ValidationErrorComponent, - LogoComponent, - NavItemsComponent, - CurrentUserComponent, - LanguagesComponent, - PageAlertContainerComponent, - TenantBoxComponent, - AuthWrapperComponent, - RoutesComponent, - ], + exports: [...THEME_BASIC_COMPONENTS], + imports: [...THEME_BASIC_COMPONENTS], }) export class BaseThemeBasicModule {} From 0f4fd042a541a89540f14281f2eb459700f8c6e2 Mon Sep 17 00:00:00 2001 From: erdemcaygor Date: Mon, 5 May 2025 13:40:47 +0300 Subject: [PATCH 19/55] teheme shared module standalone migration --- .../breadcrumb-items/breadcrumb-items.component.ts | 6 ++++-- .../src/lib/components/breadcrumb/breadcrumb.component.ts | 4 +++- .../src/lib/components/button/button.component.ts | 3 ++- .../src/lib/components/checkbox/checkbox.component.ts | 5 +++-- .../lib/components/confirmation/confirmation.component.ts | 4 +++- .../src/lib/components/form-input/form-input.component.ts | 5 +++-- .../http-error-wrapper/http-error-wrapper.component.ts | 6 +++--- .../src/lib/components/loader-bar/loader-bar.component.ts | 3 ++- .../src/lib/components/loading/loading.component.ts | 3 ++- .../src/lib/components/modal/modal-close.directive.ts | 1 - .../src/lib/components/modal/modal.component.ts | 3 ++- .../toast-container/toast-container.component.ts | 4 +++- .../src/lib/components/toast/toast.component.ts | 4 +++- .../theme-shared/src/lib/directives/loading.directive.ts | 1 - .../packages/theme-shared/src/lib/theme-shared.module.ts | 8 +++++--- 15 files changed, 38 insertions(+), 22 deletions(-) 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 d7188f561a..8698f2ddc5 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 @@ -1,10 +1,12 @@ -import { ABP } from '@abp/ng.core'; +import { ABP, CoreModule } from '@abp/ng.core'; import { Component, Input } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { RouterModule } from '@angular/router'; @Component({ - standalone: false, selector: 'abp-breadcrumb-items', templateUrl: './breadcrumb-items.component.html', + imports: [CommonModule, RouterModule, CoreModule], }) export class BreadcrumbItemsComponent { @Input() items: Partial[] = []; 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 bdc38612b3..5f69da8dce 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 @@ -10,13 +10,15 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit } from '@ import { Router } from '@angular/router'; import { map, startWith } from 'rxjs/operators'; import { eThemeSharedRouteNames } from '../../enums/route-names'; +import { CommonModule } from '@angular/common'; +import { BreadcrumbItemsComponent } from '../breadcrumb-items/breadcrumb-items.component'; @Component({ - standalone: false, selector: 'abp-breadcrumb', templateUrl: './breadcrumb.component.html', changeDetection: ChangeDetectionStrategy.OnPush, providers: [SubscriptionService], + imports: [CommonModule, BreadcrumbItemsComponent], }) export class BreadcrumbComponent implements OnInit { segments: Partial[] = []; 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 a0005cd5e7..6635dbe9c3 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 @@ -10,9 +10,9 @@ import { Renderer2, ViewChild, } from '@angular/core'; +import { CommonModule } from '@angular/common'; @Component({ - standalone: false, selector: 'abp-button', template: ` `, + imports: [CommonModule], }) export class ButtonComponent implements OnInit { @Input() diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/checkbox/checkbox.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/checkbox/checkbox.component.ts index 64c3d766e4..494119ed6f 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/checkbox/checkbox.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/checkbox/checkbox.component.ts @@ -1,9 +1,9 @@ -import { AbstractNgModelComponent } from '@abp/ng.core'; +import { AbstractNgModelComponent, CoreModule } from '@abp/ng.core'; import { Component, EventEmitter, forwardRef, Input, Output } from '@angular/core'; import { NG_VALUE_ACCESSOR } from '@angular/forms'; +import { CommonModule } from '@angular/common'; @Component({ - standalone: false, selector: 'abp-checkbox', template: `
@@ -31,6 +31,7 @@ import { NG_VALUE_ACCESSOR } from '@angular/forms'; multi: true, }, ], + imports: [CommonModule, CoreModule], }) export class FormCheckboxComponent extends AbstractNgModelComponent { @Input() label?: string; diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.ts index 493ca44b6b..19ae1203f0 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.ts @@ -2,12 +2,14 @@ import { Component, Inject } from '@angular/core'; import { ReplaySubject } from 'rxjs'; import { Confirmation } from '../../models/confirmation'; import { CONFIRMATION_ICONS, ConfirmationIcons } from '../../tokens/confirmation-icons.token'; +import { CommonModule } from '@angular/common'; +import { CoreModule } from '@abp/ng.core'; @Component({ - standalone: false, selector: 'abp-confirmation', templateUrl: './confirmation.component.html', styleUrls: ['./confirmation.component.scss'], + imports: [CommonModule, CoreModule], }) export class ConfirmationComponent { constructor(@Inject(CONFIRMATION_ICONS) private icons: ConfirmationIcons) {} diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/form-input/form-input.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/form-input/form-input.component.ts index 2d7b358b7a..76b9fc6475 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/form-input/form-input.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/form-input/form-input.component.ts @@ -1,9 +1,9 @@ -import { AbstractNgModelComponent } from '@abp/ng.core'; +import { AbstractNgModelComponent, CoreModule } from '@abp/ng.core'; import { Component, EventEmitter, forwardRef, Input, Output } from '@angular/core'; import { NG_VALUE_ACCESSOR } from '@angular/forms'; +import { CommonModule } from '@angular/common'; @Component({ - standalone: false, selector: 'abp-form-input', template: `
@@ -32,6 +32,7 @@ import { NG_VALUE_ACCESSOR } from '@angular/forms'; multi: true, }, ], + imports: [CommonModule, CoreModule], }) export class FormInputComponent extends AbstractNgModelComponent { @Input() inputId!: string; diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/http-error-wrapper/http-error-wrapper.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/http-error-wrapper/http-error-wrapper.component.ts index f45be25d1e..c9f00a8f26 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/http-error-wrapper/http-error-wrapper.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/http-error-wrapper/http-error-wrapper.component.ts @@ -14,18 +14,18 @@ import { DestroyRef, } from '@angular/core'; import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; -import { DOCUMENT } from '@angular/common'; +import { CommonModule, DOCUMENT } from '@angular/common'; import { Router } from '@angular/router'; import { fromEvent, Subject } from 'rxjs'; import { debounceTime, filter } from 'rxjs/operators'; -import { LocalizationParam } from '@abp/ng.core'; +import { CoreModule, LocalizationParam } from '@abp/ng.core'; import { ErrorScreenErrorCodes } from '../../models'; @Component({ - standalone: false, selector: 'abp-http-error-wrapper', templateUrl: './http-error-wrapper.component.html', styleUrls: ['http-error-wrapper.component.scss'], + imports: [CommonModule, CoreModule], }) export class HttpErrorWrapperComponent implements OnInit, AfterViewInit, OnDestroy { protected readonly destroyRef = inject(DestroyRef); diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/loader-bar/loader-bar.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/loader-bar/loader-bar.component.ts index 51aebfdee6..4add50bf21 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/loader-bar/loader-bar.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/loader-bar/loader-bar.component.ts @@ -2,9 +2,9 @@ import { HttpWaitService, RouterWaitService, SubscriptionService } from '@abp/ng import { ChangeDetectorRef, Component, Input, OnDestroy, OnInit } from '@angular/core'; import { Router } from '@angular/router'; import { combineLatest, Subscription, timer } from 'rxjs'; +import { CommonModule } from '@angular/common'; @Component({ - standalone: false, selector: 'abp-loader-bar', template: `
@@ -21,6 +21,7 @@ import { combineLatest, Subscription, timer } from 'rxjs'; `, styleUrls: ['./loader-bar.component.scss'], providers: [SubscriptionService], + imports: [CommonModule], }) export class LoaderBarComponent implements OnDestroy, OnInit { protected _isLoading!: boolean; diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/loading/loading.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/loading/loading.component.ts index 56990be1bc..a1c6ef8d16 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/loading/loading.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/loading/loading.component.ts @@ -1,7 +1,7 @@ import { Component, ViewEncapsulation } from '@angular/core'; +import { CommonModule } from '@angular/common'; @Component({ - standalone: false, selector: 'abp-loading', template: `
@@ -33,5 +33,6 @@ import { Component, ViewEncapsulation } from '@angular/core'; } `, ], + imports: [CommonModule], }) export class LoadingComponent {} diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal-close.directive.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal-close.directive.ts index 8b50174fd9..96455d1151 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal-close.directive.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal-close.directive.ts @@ -2,7 +2,6 @@ import { Directive, HostListener, Optional } from '@angular/core'; import { ModalComponent } from './modal.component'; @Directive({ - standalone: false, selector: '[abpClose]', }) export class ModalCloseDirective { diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.ts index 30c802e387..ea2564c6f9 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.ts @@ -22,15 +22,16 @@ import { ConfirmationService } from '../../services/confirmation.service'; import { SUPPRESS_UNSAVED_CHANGES_WARNING } from '../../tokens/suppress-unsaved-changes-warning.token'; import { ButtonComponent } from '../button/button.component'; import { DismissableModal, ModalDismissMode, ModalRefService } from './modal-ref.service'; +import { CommonModule } from '@angular/common'; export type ModalSize = 'sm' | 'md' | 'lg' | 'xl'; @Component({ - standalone: false, selector: 'abp-modal', templateUrl: './modal.component.html', styleUrls: ['./modal.component.scss'], providers: [SubscriptionService], + imports: [CommonModule], }) export class ModalComponent implements OnInit, OnDestroy, DismissableModal { protected readonly confirmationService = inject(ConfirmationService); diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/toast-container/toast-container.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/toast-container/toast-container.component.ts index 4703a41c17..1be4f3491d 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/toast-container/toast-container.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/toast-container/toast-container.component.ts @@ -2,13 +2,15 @@ import { Component, HostListener, Input, OnInit } from '@angular/core'; import { ReplaySubject } from 'rxjs'; import { toastInOut } from '../../animations/toast.animations'; import { Toaster } from '../../models/toaster'; +import { CommonModule } from '@angular/common'; +import { ToastComponent } from '../toast/toast.component'; @Component({ - standalone: false, selector: 'abp-toast-container', templateUrl: './toast-container.component.html', styleUrls: ['./toast-container.component.scss'], animations: [toastInOut], + imports: [CommonModule, ToastComponent], }) export class ToastContainerComponent implements OnInit { toasts$!: ReplaySubject; diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.ts index d76790bf54..f1245befc4 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.ts @@ -1,10 +1,12 @@ import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; import { Toaster } from '../../models/toaster'; +import { CommonModule } from '@angular/common'; +import { CoreModule } from '@abp/ng.core'; @Component({ - standalone: false, selector: 'abp-toast', templateUrl: './toast.component.html', styleUrls: ['./toast.component.scss'], + imports: [CommonModule, CoreModule], }) export class ToastComponent implements OnInit { @Input() diff --git a/npm/ng-packs/packages/theme-shared/src/lib/directives/loading.directive.ts b/npm/ng-packs/packages/theme-shared/src/lib/directives/loading.directive.ts index e20ef4fa02..f33c8dc6a8 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/directives/loading.directive.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/directives/loading.directive.ts @@ -17,7 +17,6 @@ import { take } from 'rxjs/operators'; import { LoadingComponent } from '../components/loading/loading.component'; @Directive({ - standalone: false, selector: '[abpLoading]', }) export class LoadingDirective implements OnInit, OnDestroy { diff --git a/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts b/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts index 50d179c3a9..69bd529bd3 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts @@ -34,7 +34,7 @@ import { AbpVisibleDirective, DisabledDirective } from './directives'; import { FormInputComponent } from './components/form-input/form-input.component'; import { FormCheckboxComponent } from './components/checkbox/checkbox.component'; -const declarationsWithExports = [ +export const THEME_SHARED_COMPONENTS = [ BreadcrumbComponent, BreadcrumbItemsComponent, ButtonComponent, @@ -48,6 +48,7 @@ const declarationsWithExports = [ ModalCloseDirective, FormInputComponent, FormCheckboxComponent, + HttpErrorWrapperComponent, ]; @NgModule({ @@ -63,8 +64,9 @@ const declarationsWithExports = [ NgxDatatableListDirective, DisabledDirective, AbpVisibleDirective, + ...THEME_SHARED_COMPONENTS, ], - declarations: [...declarationsWithExports, HttpErrorWrapperComponent], + declarations: [], exports: [ NgxDatatableModule, NgxValidateCoreModule, @@ -74,7 +76,7 @@ const declarationsWithExports = [ NgxDatatableListDirective, NgxDatatableDefaultDirective, PasswordComponent, - ...declarationsWithExports, + ...THEME_SHARED_COMPONENTS, ], providers: [DatePipe], }) From 68878d5ad610419c0574b7d06fc790f5d4711da7 Mon Sep 17 00:00:00 2001 From: erdemcaygor Date: Mon, 5 May 2025 13:53:00 +0300 Subject: [PATCH 20/55] theme shared module standalone migration --- .../components/card/card-body.component.ts | 3 ++- .../components/card/card-footer.component.ts | 3 ++- .../components/card/card-header.component.ts | 3 ++- .../components/card/card-header.directive.ts | 1 - .../components/card/card-img-top.directive.ts | 1 - .../card/card-subtitle.directive.ts | 1 - .../components/card/card-title.directive.ts | 1 - .../src/lib/components/card/card.component.ts | 3 ++- .../src/lib/components/card/card.module.ts | 20 ++++++++++--------- .../src/lib/directives/disabled.directive.ts | 1 - .../src/lib/directives/ellipsis.directive.ts | 6 ++++-- .../ngx-datatable-default.directive.ts | 3 +-- .../ngx-datatable-list.directive.ts | 1 - .../src/lib/directives/visible.directive.ts | 1 - .../src/lib/theme-shared.module.ts | 1 - 15 files changed, 24 insertions(+), 25 deletions(-) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/card/card-body.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/card/card-body.component.ts index 30eb2478a0..2376cef02e 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/card/card-body.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/card/card-body.component.ts @@ -1,11 +1,12 @@ import { Component, HostBinding, Input } from '@angular/core'; +import { CommonModule } from '@angular/common'; @Component({ - standalone: false, selector: 'abp-card-body', template: `
`, + imports: [CommonModule], }) export class CardBodyComponent { @HostBinding('class') componentClass = 'card-body'; diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/card/card-footer.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/card/card-footer.component.ts index 31939469d1..0e09e1fda6 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/card/card-footer.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/card/card-footer.component.ts @@ -1,7 +1,7 @@ import { Component, HostBinding, Input } from '@angular/core'; +import { CommonModule } from '@angular/common'; @Component({ - standalone: false, selector: 'abp-card-footer', template: `
@@ -9,6 +9,7 @@ import { Component, HostBinding, Input } from '@angular/core';
`, styles: [], + imports: [CommonModule], }) export class CardFooterComponent { @HostBinding('class') componentClass = 'card-footer'; diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/card/card-header.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/card/card-header.component.ts index 4a1051fee4..03e1fa8af4 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/card/card-header.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/card/card-header.component.ts @@ -1,7 +1,7 @@ import { Component, HostBinding, Input } from '@angular/core'; +import { CommonModule } from '@angular/common'; @Component({ - standalone: false, selector: 'abp-card-header', template: `
@@ -9,6 +9,7 @@ import { Component, HostBinding, Input } from '@angular/core';
`, styles: [], + imports: [CommonModule], }) export class CardHeaderComponent { @HostBinding('class') componentClass = 'card-header'; diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/card/card-header.directive.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/card/card-header.directive.ts index bebd384ca5..44b8ff0eb5 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/card/card-header.directive.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/card/card-header.directive.ts @@ -1,7 +1,6 @@ import { Directive, HostBinding } from '@angular/core'; @Directive({ - standalone: false, selector: `abp-card-header, [abp-card-header], [abpCardHeader]`, }) export class CardHeaderDirective { diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/card/card-img-top.directive.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/card/card-img-top.directive.ts index 13ca5bb07d..405ea1bb24 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/card/card-img-top.directive.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/card/card-img-top.directive.ts @@ -1,7 +1,6 @@ import { Directive, HostBinding } from '@angular/core'; @Directive({ - standalone: false, selector: `abp-card-img-top, [abp-card-img-top], [abpCardImgTop]`, }) export class CardImgTopDirective { diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/card/card-subtitle.directive.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/card/card-subtitle.directive.ts index bf561eda78..57ba722500 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/card/card-subtitle.directive.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/card/card-subtitle.directive.ts @@ -1,7 +1,6 @@ import { Directive, HostBinding } from '@angular/core'; @Directive({ - standalone: false, selector: `abp-card-subtitle, [abp-card-subtitle], [abpCardSubtitle]`, }) export class CardSubtitleDirective { diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/card/card-title.directive.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/card/card-title.directive.ts index f884e2904d..0bb92d9263 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/card/card-title.directive.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/card/card-title.directive.ts @@ -1,7 +1,6 @@ import { Directive, HostBinding } from '@angular/core'; @Directive({ - standalone: false, selector: `abp-card-title, [abp-card-title], [abpCardTitle]`, }) export class CardTitleDirective { diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/card/card.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/card/card.component.ts index c3a24426a7..5c2269b8aa 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/card/card.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/card/card.component.ts @@ -1,11 +1,12 @@ import { Component, Input } from '@angular/core'; +import { CommonModule } from '@angular/common'; @Component({ - standalone: false, selector: 'abp-card', template: `
`, + imports: [CommonModule], }) export class CardComponent { @Input() cardClass: string; diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/card/card.module.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/card/card.module.ts index ac7e28e568..418dddd809 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/card/card.module.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/card/card.module.ts @@ -1,4 +1,3 @@ -import { CommonModule } from '@angular/common'; import { NgModule } from '@angular/core'; import { CardBodyComponent } from './card-body.component'; import { CardComponent } from './card.component'; @@ -9,20 +8,23 @@ import { CardSubtitleDirective } from './card-subtitle.directive'; import { CardImgTopDirective } from './card-img-top.directive'; import { CardHeaderDirective } from './card-header.directive'; -const declarationsWithExports = [ - CardComponent, - CardBodyComponent, - CardHeaderComponent, - CardFooterComponent, +export const CARD_DIRECTIVES = [ CardTitleDirective, CardSubtitleDirective, CardImgTopDirective, CardHeaderDirective, ]; +export const CARD_COMPONENTS = [ + CardComponent, + CardBodyComponent, + CardHeaderComponent, + CardFooterComponent, +]; + @NgModule({ - declarations: [...declarationsWithExports], - imports: [CommonModule], - exports: [...declarationsWithExports], + declarations: [], + imports: [...CARD_COMPONENTS, ...CARD_DIRECTIVES], + exports: [...CARD_COMPONENTS, ...CARD_DIRECTIVES], }) export class CardModule {} diff --git a/npm/ng-packs/packages/theme-shared/src/lib/directives/disabled.directive.ts b/npm/ng-packs/packages/theme-shared/src/lib/directives/disabled.directive.ts index 8832280dee..c0a1a74995 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/directives/disabled.directive.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/directives/disabled.directive.ts @@ -3,7 +3,6 @@ import { NgControl } from '@angular/forms'; @Directive({ selector: '[abpDisabled]', - standalone:true, }) export class DisabledDirective implements OnChanges { @Input() diff --git a/npm/ng-packs/packages/theme-shared/src/lib/directives/ellipsis.directive.ts b/npm/ng-packs/packages/theme-shared/src/lib/directives/ellipsis.directive.ts index 2cad957942..94d963ce2e 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/directives/ellipsis.directive.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/directives/ellipsis.directive.ts @@ -10,7 +10,6 @@ import { @Directive({ selector: '[abpEllipsis]', - standalone:true }) export class EllipsisDirective implements AfterViewInit { @Input('abpEllipsis') @@ -38,7 +37,10 @@ export class EllipsisDirective implements AfterViewInit { return this.enabled && this.width ? this.width || '170px' : undefined; } - constructor(private cdRef: ChangeDetectorRef, private elRef: ElementRef) {} + constructor( + private cdRef: ChangeDetectorRef, + private elRef: ElementRef, + ) {} ngAfterViewInit() { this.title = this.title || (this.elRef.nativeElement as HTMLElement).innerText; diff --git a/npm/ng-packs/packages/theme-shared/src/lib/directives/ngx-datatable-default.directive.ts b/npm/ng-packs/packages/theme-shared/src/lib/directives/ngx-datatable-default.directive.ts index 359ca72b59..c7dc96f3c9 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/directives/ngx-datatable-default.directive.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/directives/ngx-datatable-default.directive.ts @@ -7,10 +7,9 @@ import { debounceTime } from 'rxjs/operators'; @Directive({ // eslint-disable-next-line @angular-eslint/directive-selector selector: 'ngx-datatable[default]', - standalone: true, exportAs: 'ngxDatatableDefault', }) -export class NgxDatatableDefaultDirective implements AfterViewInit, OnDestroy { +export class NgxDatatableDefaultDirective implements AfterViewInit, OnDestroy { private subscription = new Subscription(); private resizeDiff = 0; diff --git a/npm/ng-packs/packages/theme-shared/src/lib/directives/ngx-datatable-list.directive.ts b/npm/ng-packs/packages/theme-shared/src/lib/directives/ngx-datatable-list.directive.ts index d50038b1b7..5715a4f40b 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/directives/ngx-datatable-list.directive.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/directives/ngx-datatable-list.directive.ts @@ -24,7 +24,6 @@ import { SpinnerComponent } from '../components'; @Directive({ // eslint-disable-next-line @angular-eslint/directive-selector selector: 'ngx-datatable[list]', - standalone: true, exportAs: 'ngxDatatableList', }) export class NgxDatatableListDirective implements OnChanges, OnInit, DoCheck { diff --git a/npm/ng-packs/packages/theme-shared/src/lib/directives/visible.directive.ts b/npm/ng-packs/packages/theme-shared/src/lib/directives/visible.directive.ts index bcdd94a5d4..9613779472 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/directives/visible.directive.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/directives/visible.directive.ts @@ -2,7 +2,6 @@ import { OnInit, Directive, OnDestroy, Input, ViewContainerRef, TemplateRef } fr import { EMPTY, from, Observable, of, Subscription } from 'rxjs'; @Directive({ - standalone: true, selector: '[abpVisible]', }) export class AbpVisibleDirective implements OnDestroy, OnInit { diff --git a/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts b/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts index 69bd529bd3..591c6883fb 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts @@ -1,4 +1,3 @@ -import { CoreModule } from '@abp/ng.core'; import { DatePipe } from '@angular/common'; import { ModuleWithProviders, NgModule } from '@angular/core'; import { NgbPaginationModule } from '@ng-bootstrap/ng-bootstrap'; From 5064f2382adf1521fe60fd3f793bc3c177d083f4 Mon Sep 17 00:00:00 2001 From: erdemcaygor Date: Mon, 5 May 2025 14:05:48 +0300 Subject: [PATCH 21/55] theme shared module standalone migration --- .../src/lib/theme-shared.module.ts | 40 +++++-------------- 1 file changed, 11 insertions(+), 29 deletions(-) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts b/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts index 591c6883fb..a0e312e65b 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts @@ -1,6 +1,5 @@ import { DatePipe } from '@angular/common'; import { ModuleWithProviders, NgModule } from '@angular/core'; -import { NgbPaginationModule } from '@ng-bootstrap/ng-bootstrap'; import { NgxValidateCoreModule } from '@ngx-validate/core'; import { NgxDatatableModule } from '@swimlane/ngx-datatable'; import { BreadcrumbItemsComponent } from './components/breadcrumb-items/breadcrumb-items.component'; @@ -14,7 +13,6 @@ import { ModalCloseDirective } from './components/modal/modal-close.directive'; import { ModalComponent } from './components/modal/modal.component'; import { ToastContainerComponent } from './components/toast-container/toast-container.component'; import { ToastComponent } from './components/toast/toast.component'; -import { EllipsisDirective } from './directives/ellipsis.directive'; import { LoadingDirective } from './directives/loading.directive'; import { NgxDatatableDefaultDirective } from './directives/ngx-datatable-default.directive'; import { NgxDatatableListDirective } from './directives/ngx-datatable-list.directive'; @@ -33,7 +31,7 @@ import { AbpVisibleDirective, DisabledDirective } from './directives'; import { FormInputComponent } from './components/form-input/form-input.component'; import { FormCheckboxComponent } from './components/checkbox/checkbox.component'; -export const THEME_SHARED_COMPONENTS = [ +export const THEME_SHARED_EXPORTS = [ BreadcrumbComponent, BreadcrumbItemsComponent, ButtonComponent, @@ -48,36 +46,20 @@ export const THEME_SHARED_COMPONENTS = [ FormInputComponent, FormCheckboxComponent, HttpErrorWrapperComponent, + NgxDatatableModule, + NgxValidateCoreModule, + CardModule, + DisabledDirective, + AbpVisibleDirective, + NgxDatatableListDirective, + NgxDatatableDefaultDirective, + PasswordComponent, ]; @NgModule({ - imports: [ - CoreModule, - NgxDatatableModule, - NgxValidateCoreModule, - NgbPaginationModule, - EllipsisDirective, - CardModule, - PasswordComponent, - NgxDatatableDefaultDirective, - NgxDatatableListDirective, - DisabledDirective, - AbpVisibleDirective, - ...THEME_SHARED_COMPONENTS, - ], + imports: [...THEME_SHARED_EXPORTS], declarations: [], - exports: [ - NgxDatatableModule, - NgxValidateCoreModule, - CardModule, - DisabledDirective, - AbpVisibleDirective, - NgxDatatableListDirective, - NgxDatatableDefaultDirective, - PasswordComponent, - ...THEME_SHARED_COMPONENTS, - ], - providers: [DatePipe], + exports: [...THEME_SHARED_EXPORTS], }) export class BaseThemeSharedModule {} From d487efc6cc93806e721881b572e65a2cf4743de0 Mon Sep 17 00:00:00 2001 From: erdemcaygor Date: Mon, 5 May 2025 14:48:58 +0300 Subject: [PATCH 22/55] core module standalone migration --- .../src/lib/abstracts/ng-model.component.ts | 1 - .../components/dynamic-layout.component.ts | 3 +- .../replaceable-route-container.component.ts | 3 +- .../lib/components/router-outlet.component.ts | 2 +- .../packages/core/src/lib/core.module.ts | 13 ++++---- .../core/src/lib/pipes/safe-html.pipe.ts | 1 - .../src/lib/pipes/short-date-time.pipe.ts | 33 ++++++++++--------- .../core/src/lib/pipes/short-date.pipe.ts | 33 ++++++++++--------- .../core/src/lib/pipes/short-time.pipe.ts | 33 ++++++++++--------- .../packages/core/src/lib/pipes/sort.pipe.ts | 1 - .../core/src/lib/pipes/to-injector.pipe.ts | 1 - 11 files changed, 62 insertions(+), 62 deletions(-) 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 1d6d7e545d..8e8ed6e66e 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 @@ -3,7 +3,6 @@ import { ControlValueAccessor } from '@angular/forms'; // Not an abstract class on purpose. Do not change! @Component({ - standalone: false, template: '', }) export class AbstractNgModelComponent implements ControlValueAccessor { 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 9034ad0c24..549702a1ad 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 @@ -12,9 +12,9 @@ import { findRoute, getRoutePath } from '../utils/route-utils'; import { TreeNode } from '../utils/tree-utils'; import { DYNAMIC_LAYOUTS_TOKEN } from '../tokens/dynamic-layout.token'; import { EnvironmentService } from '../services'; +import { CommonModule } from '@angular/common'; @Component({ - standalone: false, selector: 'abp-dynamic-layout', template: ` @if (isLayoutVisible) { @@ -22,6 +22,7 @@ import { EnvironmentService } from '../services'; } `, providers: [SubscriptionService], + imports: [CommonModule], }) export class DynamicLayoutComponent implements OnInit { layout?: Type; 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 6b8373f658..680c7919a8 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 @@ -4,14 +4,15 @@ import { distinctUntilChanged } from 'rxjs/operators'; import { ReplaceableComponents } from '../models/replaceable-components'; import { ReplaceableComponentsService } from '../services/replaceable-components.service'; import { SubscriptionService } from '../services/subscription.service'; +import { CommonModule } from '@angular/common'; @Component({ - standalone: false, selector: 'abp-replaceable-route-container', template: ` `, providers: [SubscriptionService], + imports: [CommonModule], }) export class ReplaceableRouteContainerComponent implements OnInit { defaultComponent!: Type; 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 9438622b6c..4cb785852c 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 @@ -2,9 +2,9 @@ import { Component } from '@angular/core'; import { RouterModule } from '@angular/router'; @Component({ - standalone: false, selector: 'abp-router-outlet', template: ` `, + imports: [RouterModule], }) export class RouterOutletComponent {} diff --git a/npm/ng-packs/packages/core/src/lib/core.module.ts b/npm/ng-packs/packages/core/src/lib/core.module.ts index 83881a5246..a14ae02d43 100644 --- a/npm/ng-packs/packages/core/src/lib/core.module.ts +++ b/npm/ng-packs/packages/core/src/lib/core.module.ts @@ -73,19 +73,18 @@ const standaloneDirectives = [ RouterModule, LocalizationModule, ...standaloneDirectives, - ], - declarations: [ - AbstractNgModelComponent, DynamicLayoutComponent, ReplaceableRouteContainerComponent, - RouterOutletComponent, - SortPipe, - SafeHtmlPipe, - ToInjectorPipe, ShortDateTimePipe, ShortTimePipe, ShortDatePipe, + SafeHtmlPipe, + SortPipe, + ToInjectorPipe, + RouterOutletComponent, + AbstractNgModelComponent, ], + declarations: [], providers: [LocalizationPipe, provideHttpClient(withInterceptorsFromDi())], }) export class BaseCoreModule {} 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 bf76c9ba59..812eb01e02 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 @@ -3,7 +3,6 @@ import { DomSanitizer } from '@angular/platform-browser'; @Injectable() @Pipe({ - standalone: false, name: 'abpSafeHtml', }) export class SafeHtmlPipe implements PipeTransform { 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 c9c29f7e31..b72ca45dde 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,30 +4,31 @@ import { ConfigStateService } from '../services'; import { getShortDateShortTimeFormat } from '../utils/date-utils'; @Pipe({ - standalone: false, name: 'shortDateTime', pure: true, }) export class ShortDateTimePipe extends DatePipe implements PipeTransform { - - constructor(private configStateService: ConfigStateService, + constructor( + private configStateService: ConfigStateService, @Inject(LOCALE_ID) locale: string, - @Inject(DATE_PIPE_DEFAULT_TIMEZONE) @Optional() defaultTimezone?: string|null - ) { - super(locale, defaultTimezone) + @Inject(DATE_PIPE_DEFAULT_TIMEZONE) @Optional() defaultTimezone?: string | null, + ) { + super(locale, defaultTimezone); } - transform(value: Date | string | number, format?: string, timezone?: string, locale?: string): string | null; + transform( + value: Date | string | number, + format?: string, + timezone?: string, + locale?: string, + ): string | null; transform(value: null | undefined, format?: string, timezone?: string, locale?: string): null; transform( - value: string|number|Date|null|undefined, timezone?: string, - locale?: string): string|null { - - const format = getShortDateShortTimeFormat(this.configStateService); - return super.transform(value,format,timezone,locale) + value: string | number | Date | null | undefined, + timezone?: string, + locale?: string, + ): string | null { + const format = getShortDateShortTimeFormat(this.configStateService); + return super.transform(value, format, timezone, locale); } - - } - - 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 919a97685f..26a7e1552f 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,30 +4,31 @@ import { ConfigStateService } from '../services'; import { getShortDateFormat } from '../utils/date-utils'; @Pipe({ - standalone: false, name: 'shortDate', pure: true, }) export class ShortDatePipe extends DatePipe implements PipeTransform { - - constructor(private configStateService: ConfigStateService, + constructor( + private configStateService: ConfigStateService, @Inject(LOCALE_ID) locale: string, - @Inject(DATE_PIPE_DEFAULT_TIMEZONE) @Optional() defaultTimezone?: string|null - ) { - super(locale, defaultTimezone) + @Inject(DATE_PIPE_DEFAULT_TIMEZONE) @Optional() defaultTimezone?: string | null, + ) { + super(locale, defaultTimezone); } - transform(value: Date | string | number, format?: string, timezone?: string, locale?: string): string | null; + transform( + value: Date | string | number, + format?: string, + timezone?: string, + locale?: string, + ): string | null; transform(value: null | undefined, format?: string, timezone?: string, locale?: string): null; transform( - value: string|number|Date|null|undefined, timezone?: string, - locale?: string): string|null { - - const format = getShortDateFormat(this.configStateService); - return super.transform(value,format,timezone,locale) + value: string | number | Date | null | undefined, + timezone?: string, + locale?: string, + ): string | null { + const format = getShortDateFormat(this.configStateService); + return super.transform(value, format, timezone, locale); } - - } - - 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 ff70e68f4e..54e70802f8 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,30 +4,31 @@ import { ConfigStateService } from '../services'; import { getShortTimeFormat } from '../utils/date-utils'; @Pipe({ - standalone: false, name: 'shortTime', pure: true, }) export class ShortTimePipe extends DatePipe implements PipeTransform { - - constructor(private configStateService: ConfigStateService, + constructor( + private configStateService: ConfigStateService, @Inject(LOCALE_ID) locale: string, - @Inject(DATE_PIPE_DEFAULT_TIMEZONE) @Optional() defaultTimezone?: string|null - ) { - super(locale, defaultTimezone) + @Inject(DATE_PIPE_DEFAULT_TIMEZONE) @Optional() defaultTimezone?: string | null, + ) { + super(locale, defaultTimezone); } - transform(value: Date | string | number, format?: string, timezone?: string, locale?: string): string | null; + transform( + value: Date | string | number, + format?: string, + timezone?: string, + locale?: string, + ): string | null; transform(value: null | undefined, format?: string, timezone?: string, locale?: string): null; transform( - value: string|number|Date|null|undefined, timezone?: string, - locale?: string): string|null { - - const format = getShortTimeFormat(this.configStateService); - return super.transform(value,format,timezone,locale) + value: string | number | Date | null | undefined, + timezone?: string, + locale?: string, + ): string | null { + const format = getShortTimeFormat(this.configStateService); + return super.transform(value, format, timezone, locale); } - - } - - 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 b4a49ce85a..8b6c8b432e 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 @@ -3,7 +3,6 @@ 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 02c71b2e65..5a1ac4df29 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,7 +5,6 @@ export const INJECTOR_PIPE_DATA_TOKEN = new InjectionToken( ); @Pipe({ - standalone: false, name: 'toInjector', }) export class ToInjectorPipe implements PipeTransform { From ec682bd3a6cc0c4ad08533bc27466b2db89a3dc5 Mon Sep 17 00:00:00 2001 From: erdemcaygor Date: Mon, 5 May 2025 15:13:29 +0300 Subject: [PATCH 23/55] core module standalone migration --- .../packages/core/src/lib/directives/autofocus.directive.ts | 1 - .../packages/core/src/lib/directives/caps-lock.directive.ts | 1 - .../packages/core/src/lib/directives/debounce.directive.ts | 6 ++++-- .../core/src/lib/directives/form-submit.directive.ts | 1 - .../packages/core/src/lib/directives/init.directive.ts | 1 - .../core/src/lib/directives/permission.directive.ts | 1 - .../src/lib/directives/replaceable-template.directive.ts | 1 - .../core/src/lib/directives/show-password.directive.ts | 1 - .../core/src/lib/directives/stop-propagation.directive.ts | 6 ++++-- npm/ng-packs/packages/core/src/lib/localization.module.ts | 2 +- .../packages/core/src/lib/pipes/localization.pipe.ts | 1 - 11 files changed, 9 insertions(+), 13 deletions(-) diff --git a/npm/ng-packs/packages/core/src/lib/directives/autofocus.directive.ts b/npm/ng-packs/packages/core/src/lib/directives/autofocus.directive.ts index c092ee8a3a..f34d187939 100644 --- a/npm/ng-packs/packages/core/src/lib/directives/autofocus.directive.ts +++ b/npm/ng-packs/packages/core/src/lib/directives/autofocus.directive.ts @@ -1,7 +1,6 @@ import { AfterViewInit, Directive, ElementRef, Input } from '@angular/core'; @Directive({ - standalone: true, selector: '[autofocus]', }) export class AutofocusDirective implements AfterViewInit { diff --git a/npm/ng-packs/packages/core/src/lib/directives/caps-lock.directive.ts b/npm/ng-packs/packages/core/src/lib/directives/caps-lock.directive.ts index 4d66a77b50..99bfcebb92 100644 --- a/npm/ng-packs/packages/core/src/lib/directives/caps-lock.directive.ts +++ b/npm/ng-packs/packages/core/src/lib/directives/caps-lock.directive.ts @@ -1,7 +1,6 @@ import { Directive, EventEmitter, HostListener, Output } from '@angular/core'; @Directive({ - standalone: true, selector: '[abpCapsLock]', }) export class TrackCapsLockDirective { diff --git a/npm/ng-packs/packages/core/src/lib/directives/debounce.directive.ts b/npm/ng-packs/packages/core/src/lib/directives/debounce.directive.ts index 36df11ee88..204db6b418 100644 --- a/npm/ng-packs/packages/core/src/lib/directives/debounce.directive.ts +++ b/npm/ng-packs/packages/core/src/lib/directives/debounce.directive.ts @@ -4,7 +4,6 @@ import { debounceTime } from 'rxjs/operators'; import { SubscriptionService } from '../services/subscription.service'; @Directive({ - standalone: true, selector: '[input.debounce]', providers: [SubscriptionService], }) @@ -13,7 +12,10 @@ export class InputEventDebounceDirective implements OnInit { @Output('input.debounce') readonly debounceEvent = new EventEmitter(); - constructor(private el: ElementRef, private subscription: SubscriptionService) {} + constructor( + private el: ElementRef, + private subscription: SubscriptionService, + ) {} ngOnInit(): void { const input$ = fromEvent(this.el.nativeElement, 'input').pipe( diff --git a/npm/ng-packs/packages/core/src/lib/directives/form-submit.directive.ts b/npm/ng-packs/packages/core/src/lib/directives/form-submit.directive.ts index 2eb4fc11f4..25972ccb71 100644 --- a/npm/ng-packs/packages/core/src/lib/directives/form-submit.directive.ts +++ b/npm/ng-packs/packages/core/src/lib/directives/form-submit.directive.ts @@ -18,7 +18,6 @@ type Controls = { [key: string]: UntypedFormControl } | UntypedFormGroup[]; * @deprecated FormSubmitDirective will be removed in V7.0.0. Use `ngSubmit` instead. */ @Directive({ - standalone: true, selector: 'form[ngSubmit][formGroup]', providers: [SubscriptionService], }) diff --git a/npm/ng-packs/packages/core/src/lib/directives/init.directive.ts b/npm/ng-packs/packages/core/src/lib/directives/init.directive.ts index b885cb88cf..293384e4e1 100644 --- a/npm/ng-packs/packages/core/src/lib/directives/init.directive.ts +++ b/npm/ng-packs/packages/core/src/lib/directives/init.directive.ts @@ -1,7 +1,6 @@ import { Directive, Output, EventEmitter, ElementRef, AfterViewInit } from '@angular/core'; @Directive({ - standalone: true, selector: '[abpInit]', }) export class InitDirective implements AfterViewInit { diff --git a/npm/ng-packs/packages/core/src/lib/directives/permission.directive.ts b/npm/ng-packs/packages/core/src/lib/directives/permission.directive.ts index 420c5ff737..f277bf50ee 100644 --- a/npm/ng-packs/packages/core/src/lib/directives/permission.directive.ts +++ b/npm/ng-packs/packages/core/src/lib/directives/permission.directive.ts @@ -17,7 +17,6 @@ import { QUEUE_MANAGER } from '../tokens/queue.token'; import { QueueManager } from '../utils/queue'; @Directive({ - standalone: true, selector: '[abpPermission]', }) export class PermissionDirective implements OnDestroy, OnChanges, AfterViewInit { diff --git a/npm/ng-packs/packages/core/src/lib/directives/replaceable-template.directive.ts b/npm/ng-packs/packages/core/src/lib/directives/replaceable-template.directive.ts index b7b70e5b82..9a1bedcd71 100644 --- a/npm/ng-packs/packages/core/src/lib/directives/replaceable-template.directive.ts +++ b/npm/ng-packs/packages/core/src/lib/directives/replaceable-template.directive.ts @@ -18,7 +18,6 @@ import { ReplaceableComponentsService } from '../services/replaceable-components import { SubscriptionService } from '../services/subscription.service'; @Directive({ - standalone: true, selector: '[abpReplaceableTemplate]', providers: [SubscriptionService], }) diff --git a/npm/ng-packs/packages/core/src/lib/directives/show-password.directive.ts b/npm/ng-packs/packages/core/src/lib/directives/show-password.directive.ts index 03dc44f6a5..a8d8addd6c 100644 --- a/npm/ng-packs/packages/core/src/lib/directives/show-password.directive.ts +++ b/npm/ng-packs/packages/core/src/lib/directives/show-password.directive.ts @@ -1,7 +1,6 @@ import { Directive, ElementRef, Input, inject } from '@angular/core'; @Directive({ - standalone: true, selector: '[abpShowPassword]', }) export class ShowPasswordDirective { diff --git a/npm/ng-packs/packages/core/src/lib/directives/stop-propagation.directive.ts b/npm/ng-packs/packages/core/src/lib/directives/stop-propagation.directive.ts index eab0210c7f..ddc92cb56b 100644 --- a/npm/ng-packs/packages/core/src/lib/directives/stop-propagation.directive.ts +++ b/npm/ng-packs/packages/core/src/lib/directives/stop-propagation.directive.ts @@ -3,14 +3,16 @@ import { fromEvent } from 'rxjs'; import { SubscriptionService } from '../services/subscription.service'; @Directive({ - standalone: true, selector: '[click.stop]', providers: [SubscriptionService], }) export class StopPropagationDirective implements OnInit { @Output('click.stop') readonly stopPropEvent = new EventEmitter(); - constructor(private el: ElementRef, private subscription: SubscriptionService) {} + constructor( + private el: ElementRef, + private subscription: SubscriptionService, + ) {} ngOnInit(): void { this.subscription.addOne(fromEvent(this.el.nativeElement, 'click'), event => { diff --git a/npm/ng-packs/packages/core/src/lib/localization.module.ts b/npm/ng-packs/packages/core/src/lib/localization.module.ts index 315f27b1ff..ccc527ff32 100644 --- a/npm/ng-packs/packages/core/src/lib/localization.module.ts +++ b/npm/ng-packs/packages/core/src/lib/localization.module.ts @@ -3,6 +3,6 @@ import { LocalizationPipe } from './pipes/localization.pipe'; @NgModule({ exports: [LocalizationPipe], - declarations: [LocalizationPipe], + imports: [LocalizationPipe], }) export class LocalizationModule {} 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 102998bd48..2dbac68eb7 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,7 +4,6 @@ import { LocalizationService } from '../services/localization.service'; @Injectable() @Pipe({ - standalone: false, name: 'abpLocalization', }) export class LocalizationPipe implements PipeTransform { From 884c77769688ffbbebab23d4b9e8a289d87daefd Mon Sep 17 00:00:00 2001 From: erdemcaygor Date: Mon, 5 May 2025 15:37:18 +0300 Subject: [PATCH 24/55] refactoring --- .../packages/core/src/lib/core.module.ts | 47 ++++++++++--------- .../core/src/lib/localization.module.ts | 5 ++ 2 files changed, 29 insertions(+), 23 deletions(-) diff --git a/npm/ng-packs/packages/core/src/lib/core.module.ts b/npm/ng-packs/packages/core/src/lib/core.module.ts index a14ae02d43..45d1a64ba4 100644 --- a/npm/ng-packs/packages/core/src/lib/core.module.ts +++ b/npm/ng-packs/packages/core/src/lib/core.module.ts @@ -31,7 +31,7 @@ import { ShortDatePipe } from './pipes/short-date.pipe'; import { SafeHtmlPipe } from './pipes/safe-html.pipe'; import { provideAbpCoreChild, provideAbpCore, withOptions } from './providers'; -const standaloneDirectives = [ +const CORE_DIRECTIVES = [ AutofocusDirective, InputEventDebounceDirective, ForDirective, @@ -41,6 +41,23 @@ const standaloneDirectives = [ ReplaceableTemplateDirective, StopPropagationDirective, ]; + +const CORE_PIPES = [ + LocalizationPipe, + SortPipe, + SafeHtmlPipe, + ShortDateTimePipe, + ShortTimePipe, + ShortDatePipe, + ToInjectorPipe, +]; + +const CORE_COMPONENTS = [ + DynamicLayoutComponent, + ReplaceableRouteContainerComponent, + RouterOutletComponent, + AbstractNgModelComponent, +]; /** * BaseCoreModule is the module that holds * all imports, declarations, exports, and entryComponents @@ -54,17 +71,9 @@ const standaloneDirectives = [ ReactiveFormsModule, RouterModule, LocalizationModule, - AbstractNgModelComponent, - DynamicLayoutComponent, - ReplaceableRouteContainerComponent, - RouterOutletComponent, - SortPipe, - SafeHtmlPipe, - ToInjectorPipe, - ShortDateTimePipe, - ShortTimePipe, - ShortDatePipe, - ...standaloneDirectives, + ...CORE_DIRECTIVES, + ...CORE_PIPES, + ...CORE_COMPONENTS, ], imports: [ CommonModule, @@ -72,17 +81,9 @@ const standaloneDirectives = [ ReactiveFormsModule, RouterModule, LocalizationModule, - ...standaloneDirectives, - DynamicLayoutComponent, - ReplaceableRouteContainerComponent, - ShortDateTimePipe, - ShortTimePipe, - ShortDatePipe, - SafeHtmlPipe, - SortPipe, - ToInjectorPipe, - RouterOutletComponent, - AbstractNgModelComponent, + ...CORE_DIRECTIVES, + ...CORE_PIPES, + ...CORE_COMPONENTS, ], declarations: [], providers: [LocalizationPipe, provideHttpClient(withInterceptorsFromDi())], diff --git a/npm/ng-packs/packages/core/src/lib/localization.module.ts b/npm/ng-packs/packages/core/src/lib/localization.module.ts index ccc527ff32..a82cbbb10b 100644 --- a/npm/ng-packs/packages/core/src/lib/localization.module.ts +++ b/npm/ng-packs/packages/core/src/lib/localization.module.ts @@ -1,6 +1,11 @@ import { NgModule } from '@angular/core'; import { LocalizationPipe } from './pipes/localization.pipe'; +/** + * @deprecated Use `LocalizationPipe` directly as a standalone pipe. + * This module is no longer necessary for using the `LocalizationPipe`. + */ + @NgModule({ exports: [LocalizationPipe], imports: [LocalizationPipe], From abcc573ce4ec09aeddff9d2da05d7a9a7b23781d Mon Sep 17 00:00:00 2001 From: erdemcaygor Date: Mon, 5 May 2025 16:00:51 +0300 Subject: [PATCH 25/55] feature management module standalone migration --- .../feature-management-tab.component.ts | 4 ++-- .../feature-management/feature-management.component.ts | 10 ++++++---- .../src/lib/directives/free-text-input.directive.ts | 1 - .../src/lib/feature-management.module.ts | 9 +++------ .../src/lib/feature-management.routes.ts | 0 5 files changed, 11 insertions(+), 13 deletions(-) create mode 100644 npm/ng-packs/packages/feature-management/src/lib/feature-management.routes.ts 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 c8eee6b043..9d0cb9f968 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 @@ -1,11 +1,11 @@ -import { LocalizationModule, ReplaceableTemplateDirective } from '@abp/ng.core'; +import { LocalizationPipe, ReplaceableTemplateDirective } from '@abp/ng.core'; import { Component } from '@angular/core'; import { FeatureManagementComponent } from '../feature-management/feature-management.component'; @Component({ selector: 'abp-feature-management-tab', templateUrl: './feature-management-tab.component.html', - imports: [ReplaceableTemplateDirective, LocalizationModule, FeatureManagementComponent], + imports: [ReplaceableTemplateDirective, LocalizationPipe, FeatureManagementComponent], }) export class FeatureManagementTabComponent { visibleFeatures = false; 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 fc71ad4a12..de53fc2e2e 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 @@ -1,4 +1,4 @@ -import { ConfigStateService, LocalizationModule, TrackByService } from '@abp/ng.core'; +import { ConfigStateService, LocalizationPipe, TrackByService } from '@abp/ng.core'; import { FeatureDto, FeatureGroupDto, @@ -6,10 +6,11 @@ import { UpdateFeatureDto, } from '@abp/ng.feature-management/proxy'; import { + ButtonComponent, Confirmation, ConfirmationService, LocaleDirection, - ThemeSharedModule, + ModalComponent, ToasterService, } from '@abp/ng.theme.shared'; import { Component, EventEmitter, Input, Output, inject } from '@angular/core'; @@ -32,8 +33,9 @@ enum ValueTypes { exportAs: 'abpFeatureManagement', imports: [ CommonModule, - ThemeSharedModule, - LocalizationModule, + ButtonComponent, + ModalComponent, + LocalizationPipe, FormsModule, NgbNavModule, FreeTextInputDirective, diff --git a/npm/ng-packs/packages/feature-management/src/lib/directives/free-text-input.directive.ts b/npm/ng-packs/packages/feature-management/src/lib/directives/free-text-input.directive.ts index 750af65268..6b6556dcfa 100644 --- a/npm/ng-packs/packages/feature-management/src/lib/directives/free-text-input.directive.ts +++ b/npm/ng-packs/packages/feature-management/src/lib/directives/free-text-input.directive.ts @@ -15,7 +15,6 @@ export const INPUT_TYPES = { }; @Directive({ - standalone: true, selector: 'input[abpFeatureManagementFreeText]', exportAs: 'inputAbpFeatureManagementFreeText', }) diff --git a/npm/ng-packs/packages/feature-management/src/lib/feature-management.module.ts b/npm/ng-packs/packages/feature-management/src/lib/feature-management.module.ts index fd3ab95386..9e9cb8e7c0 100644 --- a/npm/ng-packs/packages/feature-management/src/lib/feature-management.module.ts +++ b/npm/ng-packs/packages/feature-management/src/lib/feature-management.module.ts @@ -1,13 +1,10 @@ -import { CoreModule } from '@abp/ng.core'; -import { ThemeSharedModule } from '@abp/ng.theme.shared'; import { ModuleWithProviders, NgModule } from '@angular/core'; -import { NgbNavModule } from '@ng-bootstrap/ng-bootstrap'; import { FeatureManagementComponent } from './components/feature-management/feature-management.component'; import { FreeTextInputDirective } from './directives/free-text-input.directive'; import { provideFeatureManagementConfig } from './providers'; import { FeatureManagementTabComponent } from './components'; -const exported = [ +export const FEATURE_MANAGEMENT_EXPORTS = [ FeatureManagementComponent, FreeTextInputDirective, FeatureManagementTabComponent, @@ -19,8 +16,8 @@ const exported = [ * You can import directives and pipes directly whichs were belongs to FeatureManagementModule are switched to standalone. */ @NgModule({ - imports: [CoreModule, ThemeSharedModule, NgbNavModule, ...exported], - exports: [...exported], + imports: [...FEATURE_MANAGEMENT_EXPORTS], + exports: [...FEATURE_MANAGEMENT_EXPORTS], }) export class FeatureManagementModule { static forRoot(): ModuleWithProviders { diff --git a/npm/ng-packs/packages/feature-management/src/lib/feature-management.routes.ts b/npm/ng-packs/packages/feature-management/src/lib/feature-management.routes.ts new file mode 100644 index 0000000000..e69de29bb2 From 9f617b2cd20f71e181762eaba5bed98f6da7472c Mon Sep 17 00:00:00 2001 From: erdemcaygor Date: Mon, 5 May 2025 16:13:03 +0300 Subject: [PATCH 26/55] refactoring --- .../account/src/lib/account.routes.ts | 15 +++--- .../packages/core/src/lib/components/index.ts | 1 - ...le-route-container-standalone.component.ts | 47 ------------------- .../lib/components/router-outlet.component.ts | 7 --- .../src/lib/feature-management.routes.ts | 0 .../identity/src/lib/identity.routes.ts | 10 ++-- .../src/lib/setting-management.routes.ts | 8 ++-- .../src/lib/tenant-management.routes.ts | 8 ++-- 8 files changed, 20 insertions(+), 76 deletions(-) delete mode 100644 npm/ng-packs/packages/core/src/lib/components/replaceable-route-container-standalone.component.ts delete mode 100644 npm/ng-packs/packages/feature-management/src/lib/feature-management.routes.ts diff --git a/npm/ng-packs/packages/account/src/lib/account.routes.ts b/npm/ng-packs/packages/account/src/lib/account.routes.ts index 2d0f72b75e..7b44aee2e5 100644 --- a/npm/ng-packs/packages/account/src/lib/account.routes.ts +++ b/npm/ng-packs/packages/account/src/lib/account.routes.ts @@ -2,8 +2,7 @@ import { authGuard, ReplaceableComponents, ReplaceableRouteContainerComponent, - ReplaceableRouteContainerStandaloneComponent, - RouterOutletStandaloneComponent, + RouterOutletComponent, } from '@abp/ng.core'; import { ForgotPasswordComponent } from './components/forgot-password/forgot-password.component'; @@ -22,13 +21,13 @@ const canActivate = [authenticationFlowGuard]; export const accountRoutes: Routes = [ { path: '', - component: RouterOutletStandaloneComponent, + component: RouterOutletComponent, providers: [...provideAccount()], children: [ { path: '', pathMatch: 'full', redirectTo: 'login' }, { path: 'login', - component: ReplaceableRouteContainerStandaloneComponent, + component: ReplaceableRouteContainerComponent, canActivate, data: { replaceableComponent: { @@ -40,7 +39,7 @@ export const accountRoutes: Routes = [ }, { path: 'register', - component: ReplaceableRouteContainerStandaloneComponent, + component: ReplaceableRouteContainerComponent, canActivate, data: { replaceableComponent: { @@ -52,7 +51,7 @@ export const accountRoutes: Routes = [ }, { path: 'forgot-password', - component: ReplaceableRouteContainerStandaloneComponent, + component: ReplaceableRouteContainerComponent, canActivate, data: { @@ -65,7 +64,7 @@ export const accountRoutes: Routes = [ }, { path: 'reset-password', - component: ReplaceableRouteContainerStandaloneComponent, + component: ReplaceableRouteContainerComponent, canActivate: [], data: { tenantBoxVisible: false, @@ -78,7 +77,7 @@ export const accountRoutes: Routes = [ }, { path: 'manage', - component: ReplaceableRouteContainerStandaloneComponent, + component: ReplaceableRouteContainerComponent, canActivate: [authGuard], resolve: [accountExtensionsResolver], data: { diff --git a/npm/ng-packs/packages/core/src/lib/components/index.ts b/npm/ng-packs/packages/core/src/lib/components/index.ts index 11aed8ffae..da3c72a69f 100644 --- a/npm/ng-packs/packages/core/src/lib/components/index.ts +++ b/npm/ng-packs/packages/core/src/lib/components/index.ts @@ -1,4 +1,3 @@ export * from './dynamic-layout.component'; export * from './replaceable-route-container.component'; export * from './router-outlet.component'; -export * from './replaceable-route-container-standalone.component'; diff --git a/npm/ng-packs/packages/core/src/lib/components/replaceable-route-container-standalone.component.ts b/npm/ng-packs/packages/core/src/lib/components/replaceable-route-container-standalone.component.ts deleted file mode 100644 index c0502ff542..0000000000 --- a/npm/ng-packs/packages/core/src/lib/components/replaceable-route-container-standalone.component.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { Component, OnInit, Type } from '@angular/core'; -import { ActivatedRoute } from '@angular/router'; -import { distinctUntilChanged } from 'rxjs/operators'; -import { ReplaceableComponents } from '../models/replaceable-components'; -import { ReplaceableComponentsService } from '../services/replaceable-components.service'; -import { SubscriptionService } from '../services/subscription.service'; -import { CommonModule } from '@angular/common'; - -@Component({ - selector: 'abp-replaceable-route-container', - template: ` - - `, - imports: [CommonModule], - providers: [SubscriptionService], -}) -export class ReplaceableRouteContainerStandaloneComponent implements OnInit { - defaultComponent!: Type; - - componentKey!: string; - - externalComponent?: Type; - - constructor( - private route: ActivatedRoute, - private replaceableComponents: ReplaceableComponentsService, - private subscription: SubscriptionService, - ) {} - - ngOnInit() { - this.defaultComponent = this.route.snapshot.data.replaceableComponent.defaultComponent; - this.componentKey = ( - this.route.snapshot.data.replaceableComponent as ReplaceableComponents.RouteData - ).key; - - const component$ = this.replaceableComponents - .get$(this.componentKey) - .pipe(distinctUntilChanged()); - - this.subscription.addOne( - component$, - (res = {} as ReplaceableComponents.ReplaceableComponent) => { - this.externalComponent = res.component; - }, - ); - } -} 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 4cb785852c..73af8037c2 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 @@ -7,10 +7,3 @@ import { RouterModule } from '@angular/router'; imports: [RouterModule], }) export class RouterOutletComponent {} - -@Component({ - selector: 'abp-router-outlet', - template: ` `, - imports: [RouterModule], -}) -export class RouterOutletStandaloneComponent {} diff --git a/npm/ng-packs/packages/feature-management/src/lib/feature-management.routes.ts b/npm/ng-packs/packages/feature-management/src/lib/feature-management.routes.ts deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/npm/ng-packs/packages/identity/src/lib/identity.routes.ts b/npm/ng-packs/packages/identity/src/lib/identity.routes.ts index 2505a10b8c..b14b9bf09f 100644 --- a/npm/ng-packs/packages/identity/src/lib/identity.routes.ts +++ b/npm/ng-packs/packages/identity/src/lib/identity.routes.ts @@ -3,8 +3,8 @@ import { authGuard, permissionGuard, ReplaceableComponents, - ReplaceableRouteContainerStandaloneComponent, - RouterOutletStandaloneComponent, + ReplaceableRouteContainerComponent, + RouterOutletComponent, } from '@abp/ng.core'; import { RolesComponent, UsersComponent } from './components'; import { identityExtensionsResolver } from './resolvers'; @@ -14,7 +14,7 @@ import { provideIdentity } from './identity'; export const identityRoutes: Routes = [ { path: '', - component: RouterOutletStandaloneComponent, + component: RouterOutletComponent, canActivate: [authGuard, permissionGuard], resolve: [identityExtensionsResolver], providers: provideIdentity({}), @@ -22,7 +22,7 @@ export const identityRoutes: Routes = [ { path: '', redirectTo: 'roles', pathMatch: 'full' }, { path: 'roles', - component: ReplaceableRouteContainerStandaloneComponent, + component: ReplaceableRouteContainerComponent, data: { requiredPolicy: 'AbpIdentity.Roles', replaceableComponent: { @@ -34,7 +34,7 @@ export const identityRoutes: Routes = [ }, { path: 'users', - component: ReplaceableRouteContainerStandaloneComponent, + component: ReplaceableRouteContainerComponent, data: { requiredPolicy: 'AbpIdentity.Users', replaceableComponent: { diff --git a/npm/ng-packs/packages/setting-management/src/lib/setting-management.routes.ts b/npm/ng-packs/packages/setting-management/src/lib/setting-management.routes.ts index 37ef197fa9..944d360030 100644 --- a/npm/ng-packs/packages/setting-management/src/lib/setting-management.routes.ts +++ b/npm/ng-packs/packages/setting-management/src/lib/setting-management.routes.ts @@ -2,8 +2,8 @@ import { Routes } from '@angular/router'; import { authGuard, ReplaceableComponents, - ReplaceableRouteContainerStandaloneComponent, - RouterOutletStandaloneComponent, + ReplaceableRouteContainerComponent, + RouterOutletComponent, } from '@abp/ng.core'; import { SettingManagementComponent } from './components/setting-management.component'; import { eSettingManagementComponents } from './enums/components'; @@ -12,13 +12,13 @@ import { provideSettingManagement } from './setting-management'; export const settingManagementRoutes: Routes = [ { path: '', - component: RouterOutletStandaloneComponent, + component: RouterOutletComponent, canActivate: [authGuard], providers: [...provideSettingManagement()], children: [ { path: '', - component: ReplaceableRouteContainerStandaloneComponent, + component: ReplaceableRouteContainerComponent, data: { requiredPolicy: 'AbpAccount.SettingManagement', replaceableComponent: { diff --git a/npm/ng-packs/packages/tenant-management/src/lib/tenant-management.routes.ts b/npm/ng-packs/packages/tenant-management/src/lib/tenant-management.routes.ts index 88b5f4cc4a..906b8b31c2 100644 --- a/npm/ng-packs/packages/tenant-management/src/lib/tenant-management.routes.ts +++ b/npm/ng-packs/packages/tenant-management/src/lib/tenant-management.routes.ts @@ -4,8 +4,8 @@ import { authGuard, permissionGuard, ReplaceableComponents, - ReplaceableRouteContainerStandaloneComponent, - RouterOutletStandaloneComponent, + ReplaceableRouteContainerComponent, + RouterOutletComponent, } from '@abp/ng.core'; import { TenantsComponent } from './components/tenants/tenants.component'; @@ -16,7 +16,7 @@ import { provideTenantManagement } from './tenant-management'; export const tenantManagementRoutes: Routes = [ { path: '', - component: RouterOutletStandaloneComponent, + component: RouterOutletComponent, canActivate: [authGuard, permissionGuard], resolve: [tenantManagementExtensionsResolver], providers: [...provideTenantManagement()], @@ -24,7 +24,7 @@ export const tenantManagementRoutes: Routes = [ { path: '', redirectTo: 'tenants', pathMatch: 'full' }, { path: 'tenants', - component: ReplaceableRouteContainerStandaloneComponent, + component: ReplaceableRouteContainerComponent, data: { requiredPolicy: 'AbpTenantManagement.Tenants', replaceableComponent: { From 5e7e0111bb3437673cdefab33add0de559af40b9 Mon Sep 17 00:00:00 2001 From: erdemcaygor Date: Mon, 5 May 2025 16:37:57 +0300 Subject: [PATCH 27/55] fix --- .../lib/components/account-layout/account-layout.component.ts | 2 ++ npm/ng-packs/packages/theme-basic/src/lib/theme-basic.module.ts | 2 ++ 2 files changed, 4 insertions(+) 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 d9a42d07d0..e61ac2b18e 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 @@ -6,6 +6,7 @@ import { LogoComponent } from '../logo/logo.component'; import { RoutesComponent } from '../routes/routes.component'; import { NavItemsComponent } from '../nav-items/nav-items.component'; import { AuthWrapperComponent } from './auth-wrapper/auth-wrapper.component'; +import { PageAlertContainerComponent } from '../page-alert-container/page-alert-container.component'; @Component({ selector: 'abp-layout-account', @@ -18,6 +19,7 @@ import { AuthWrapperComponent } from './auth-wrapper/auth-wrapper.component'; RoutesComponent, NavItemsComponent, AuthWrapperComponent, + PageAlertContainerComponent, ], }) export class AccountLayoutComponent implements AfterViewInit { diff --git a/npm/ng-packs/packages/theme-basic/src/lib/theme-basic.module.ts b/npm/ng-packs/packages/theme-basic/src/lib/theme-basic.module.ts index 63e610e5f6..c3edf14578 100644 --- a/npm/ng-packs/packages/theme-basic/src/lib/theme-basic.module.ts +++ b/npm/ng-packs/packages/theme-basic/src/lib/theme-basic.module.ts @@ -24,6 +24,8 @@ export const THEME_BASIC_COMPONENTS = [ CurrentUserComponent, LanguagesComponent, PageAlertContainerComponent, + AuthWrapperComponent, + TenantBoxComponent, ]; @NgModule({ From 02a79e0e63e188baa961d273350df3eba0df2ae2 Mon Sep 17 00:00:00 2001 From: erdemcaygor Date: Tue, 6 May 2025 10:41:51 +0300 Subject: [PATCH 28/55] type fix --- .../components/change-password/change-password.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/npm/ng-packs/packages/account/src/lib/components/change-password/change-password.component.html b/npm/ng-packs/packages/account/src/lib/components/change-password/change-password.component.html index 074b6d53ac..a10e190664 100644 --- a/npm/ng-packs/packages/account/src/lib/components/change-password/change-password.component.html +++ b/npm/ng-packs/packages/account/src/lib/components/change-password/change-password.component.html @@ -1,4 +1,4 @@ -
+ @if (!hideCurrentPassword) {