From 02f9bb62be2465b8baa2910364d159735ceb9135 Mon Sep 17 00:00:00 2001 From: Sinan997 Date: Fri, 3 May 2024 19:33:23 +0300 Subject: [PATCH 01/14] use `makeEnvironmentProviders` function instead of config modules --- .../apps/dev-app/src/app/app.module.ts | 20 ++++++++++--------- .../config/src/account-config.module.ts | 13 +++++++++++- .../feature-management-tab.component.ts | 8 ++++++++ .../feature-management.component.ts | 18 +++++++++++++++-- .../directives/free-text-input.directive.ts | 1 + .../src/lib/feature-management.module.ts | 9 ++++++--- .../config/src/identity-config.module.ts | 6 +++++- .../src/tenant-management-config.module.ts | 6 +++++- .../src/lib/tenant-management.module.ts | 4 ++-- 9 files changed, 66 insertions(+), 19 deletions(-) diff --git a/npm/ng-packs/apps/dev-app/src/app/app.module.ts b/npm/ng-packs/apps/dev-app/src/app/app.module.ts index f144639db4..9aa422623f 100644 --- a/npm/ng-packs/apps/dev-app/src/app/app.module.ts +++ b/npm/ng-packs/apps/dev-app/src/app/app.module.ts @@ -6,12 +6,12 @@ import { registerLocale } from '@abp/ng.core/locale'; import { InternetConnectionStatusComponent, ThemeSharedModule } from '@abp/ng.theme.shared'; import { ThemeLeptonXModule } from '@abp/ng.theme.lepton-x'; import { SideMenuLayoutModule } from '@abp/ng.theme.lepton-x/layouts'; -import { IdentityConfigModule } from '@abp/ng.identity/config'; import { AbpOAuthModule } from '@abp/ng.oauth'; import { SettingManagementConfigModule } from '@abp/ng.setting-management/config'; -import { TenantManagementConfigModule } from '@abp/ng.tenant-management/config'; -import { FeatureManagementModule } from '@abp/ng.feature-management'; -import { AccountConfigModule } from '@abp/ng.account/config'; +import { provideAccountConfig } from '@abp/ng.account/config'; +import { provideIdentityConfig } from '@abp/ng.identity/config'; +import { provideTenantManagementConfig } from '@abp/ng.tenant-management/config'; +import { provideFeatureManagement } from '@abp/ng.feature-management'; import { AccountLayoutModule } from '@abp/ng.theme.lepton-x/account'; import { environment } from '../environments/environment'; import { AppRoutingModule } from './app-routing.module'; @@ -31,17 +31,19 @@ import { APP_ROUTE_PROVIDER } from './route.provider'; }), AbpOAuthModule.forRoot(), ThemeSharedModule.forRoot(), - AccountConfigModule.forRoot(), - IdentityConfigModule.forRoot(), - TenantManagementConfigModule.forRoot(), - FeatureManagementModule.forRoot(), SettingManagementConfigModule.forRoot(), ThemeLeptonXModule.forRoot(), SideMenuLayoutModule.forRoot(), AccountLayoutModule.forRoot(), InternetConnectionStatusComponent, ], - providers: [APP_ROUTE_PROVIDER], + providers: [ + APP_ROUTE_PROVIDER, + provideAccountConfig(), + provideIdentityConfig(), + provideTenantManagementConfig(), + provideFeatureManagement(), + ], declarations: [AppComponent], bootstrap: [AppComponent], }) diff --git a/npm/ng-packs/packages/account/config/src/account-config.module.ts b/npm/ng-packs/packages/account/config/src/account-config.module.ts index 2c1345927b..a80d76f44d 100644 --- a/npm/ng-packs/packages/account/config/src/account-config.module.ts +++ b/npm/ng-packs/packages/account/config/src/account-config.module.ts @@ -1,4 +1,4 @@ -import { Injector, ModuleWithProviders, NgModule } from '@angular/core'; +import { Injector, ModuleWithProviders, NgModule, makeEnvironmentProviders } from '@angular/core'; import { NAVIGATE_TO_MANAGE_PROFILE } from '@abp/ng.core'; import { ACCOUNT_ROUTE_PROVIDERS } from './providers/route.provider'; import { navigateToManageProfileFactory } from './utils/factories'; @@ -19,3 +19,14 @@ export class AccountConfigModule { }; } } + +export function provideAccountConfig() { + return makeEnvironmentProviders([ + ACCOUNT_ROUTE_PROVIDERS, + { + provide: NAVIGATE_TO_MANAGE_PROFILE, + useFactory: navigateToManageProfileFactory, + deps: [Injector], + }, + ]); +} 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 d65b3a74a9..4b367da436 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,8 +1,16 @@ +import { LocalizationModule, ReplaceableTemplateDirective } from '@abp/ng.core'; import { Component } from '@angular/core'; +import { FeatureManagementComponent } from '../feature-management/feature-management.component'; @Component({ + standalone: true, selector: 'abp-feature-management-tab', templateUrl: './feature-management-tab.component.html', + imports: [ + ReplaceableTemplateDirective, + LocalizationModule, + FeatureManagementComponent, + ], }) 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 2dd2497e81..01a6eee6c4 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, TrackByService } from '@abp/ng.core'; +import { ConfigStateService, LocalizationModule, TrackByService } from '@abp/ng.core'; import { FeatureDto, FeatureGroupDto, @@ -9,10 +9,15 @@ import { Confirmation, ConfirmationService, LocaleDirection, + ThemeSharedModule, ToasterService, } from '@abp/ng.theme.shared'; import { Component, EventEmitter, Input, Output, inject } from '@angular/core'; +import { NgTemplateOutlet } from '@angular/common'; +import { FormsModule } from '@angular/forms'; +import { NgbNavModule } from '@ng-bootstrap/ng-bootstrap'; import { finalize } from 'rxjs/operators'; +import { FreeTextInputDirective } from '../../directives'; import { FeatureManagement } from '../../models/feature-management'; enum ValueTypes { @@ -22,9 +27,18 @@ enum ValueTypes { } @Component({ + standalone: true, selector: 'abp-feature-management', templateUrl: './feature-management.component.html', exportAs: 'abpFeatureManagement', + imports: [ + ThemeSharedModule, + LocalizationModule, + FormsModule, + NgbNavModule, + FreeTextInputDirective, + NgTemplateOutlet, + ], }) export class FeatureManagementComponent implements @@ -125,7 +139,7 @@ export class FeatureManagementComponent .subscribe(() => { this.visible = false; - this.toasterService.success('AbpFeatureManagement::Saved'); + this.toasterService.success('AbpFeatureManagement::SavedSuccessfully'); if (!this.providerKey) { // to refresh host's features this.configState.refreshAppState().subscribe(); 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 6b6556dcfa..750af65268 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,6 +15,7 @@ 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 2de14108f1..8f8cd04138 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,6 +1,6 @@ import { CoreModule } from '@abp/ng.core'; import { ThemeSharedModule } from '@abp/ng.theme.shared'; -import { ModuleWithProviders, NgModule } from '@angular/core'; +import { ModuleWithProviders, NgModule, makeEnvironmentProviders } 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'; @@ -14,8 +14,7 @@ const exported = [ ]; @NgModule({ - declarations: [...exported], - imports: [CoreModule, ThemeSharedModule, NgbNavModule], + imports: [CoreModule, ThemeSharedModule, NgbNavModule, ...exported], exports: [...exported], }) export class FeatureManagementModule { @@ -26,3 +25,7 @@ export class FeatureManagementModule { }; } } + +export function provideFeatureManagement() { + return makeEnvironmentProviders([FEATURE_MANAGEMENT_SETTINGS_PROVIDERS]); +} diff --git a/npm/ng-packs/packages/identity/config/src/identity-config.module.ts b/npm/ng-packs/packages/identity/config/src/identity-config.module.ts index 745578f69a..7cb914de21 100644 --- a/npm/ng-packs/packages/identity/config/src/identity-config.module.ts +++ b/npm/ng-packs/packages/identity/config/src/identity-config.module.ts @@ -1,4 +1,4 @@ -import { ModuleWithProviders, NgModule } from '@angular/core'; +import { ModuleWithProviders, NgModule, makeEnvironmentProviders } from '@angular/core'; import { IDENTITY_ROUTE_PROVIDERS } from './providers/route.provider'; @NgModule() @@ -10,3 +10,7 @@ export class IdentityConfigModule { }; } } + +export function provideIdentityConfig() { + return makeEnvironmentProviders([IDENTITY_ROUTE_PROVIDERS]); +} diff --git a/npm/ng-packs/packages/tenant-management/config/src/tenant-management-config.module.ts b/npm/ng-packs/packages/tenant-management/config/src/tenant-management-config.module.ts index 2929f766c0..6e1dcd04c0 100644 --- a/npm/ng-packs/packages/tenant-management/config/src/tenant-management-config.module.ts +++ b/npm/ng-packs/packages/tenant-management/config/src/tenant-management-config.module.ts @@ -1,4 +1,4 @@ -import { ModuleWithProviders, NgModule } from '@angular/core'; +import { ModuleWithProviders, NgModule, makeEnvironmentProviders } from '@angular/core'; import { TENANT_MANAGEMENT_ROUTE_PROVIDERS } from './providers/route.provider'; @NgModule() @@ -10,3 +10,7 @@ export class TenantManagementConfigModule { }; } } + +export function provideTenantManagementConfig() { + return makeEnvironmentProviders([TENANT_MANAGEMENT_ROUTE_PROVIDERS]); +} 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 4b44814bce..76c917c51b 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,5 +1,4 @@ import { CoreModule, LazyModuleFactory } from '@abp/ng.core'; -import { FeatureManagementModule } from '@abp/ng.feature-management'; import { ThemeSharedModule } from '@abp/ng.theme.shared'; import { ExtensibleModule } from '@abp/ng.components/extensible'; import { ModuleWithProviders, NgModule, NgModuleFactory } from '@angular/core'; @@ -17,6 +16,7 @@ import { 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], @@ -27,9 +27,9 @@ import { PageModule } from '@abp/ng.components/page'; CoreModule, ThemeSharedModule, NgbDropdownModule, - FeatureManagementModule, ExtensibleModule, PageModule, + FeatureManagementComponent, ], }) export class TenantManagementModule { From 4a9e07fc73004d507ceee50a5370b62089c846ea Mon Sep 17 00:00:00 2001 From: Sinan997 Date: Mon, 6 May 2024 16:29:51 +0300 Subject: [PATCH 02/14] add provider function for modules --- .../apps/dev-app/src/app/app.module.ts | 32 ++++--- .../packages/core/src/lib/core.module.ts | 94 +++++++++++++++++-- .../packages/oauth/src/lib/oauth.module.ts | 54 ++++++++++- .../lib/setting-management-config.module.ts | 13 ++- .../src/lib/theme-shared.module.ts | 63 ++++++++++++- 5 files changed, 232 insertions(+), 24 deletions(-) diff --git a/npm/ng-packs/apps/dev-app/src/app/app.module.ts b/npm/ng-packs/apps/dev-app/src/app/app.module.ts index 9aa422623f..ec35d06bdf 100644 --- a/npm/ng-packs/apps/dev-app/src/app/app.module.ts +++ b/npm/ng-packs/apps/dev-app/src/app/app.module.ts @@ -1,13 +1,17 @@ import { NgModule } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; -import { CoreModule } from '@abp/ng.core'; +import { CoreModule, provideCoreModule } from '@abp/ng.core'; import { registerLocale } from '@abp/ng.core/locale'; -import { InternetConnectionStatusComponent, ThemeSharedModule } from '@abp/ng.theme.shared'; +import { + InternetConnectionStatusComponent, + ThemeSharedModule, + provideThemeShared, +} from '@abp/ng.theme.shared'; import { ThemeLeptonXModule } from '@abp/ng.theme.lepton-x'; import { SideMenuLayoutModule } from '@abp/ng.theme.lepton-x/layouts'; -import { AbpOAuthModule } from '@abp/ng.oauth'; -import { SettingManagementConfigModule } from '@abp/ng.setting-management/config'; +import { provideAbpOAuth } from '@abp/ng.oauth'; +import { provideSettingManagementConfig } from '@abp/ng.setting-management/config'; import { provideAccountConfig } from '@abp/ng.account/config'; import { provideIdentityConfig } from '@abp/ng.identity/config'; import { provideTenantManagementConfig } from '@abp/ng.tenant-management/config'; @@ -23,15 +27,8 @@ import { APP_ROUTE_PROVIDER } from './route.provider'; BrowserModule, BrowserAnimationsModule, AppRoutingModule, - CoreModule.forRoot({ - environment, - registerLocaleFn: registerLocale(), - sendNullsAsQueryParam: false, - skipGetAppConfiguration: false, - }), - AbpOAuthModule.forRoot(), - ThemeSharedModule.forRoot(), - SettingManagementConfigModule.forRoot(), + CoreModule, + ThemeSharedModule, ThemeLeptonXModule.forRoot(), SideMenuLayoutModule.forRoot(), AccountLayoutModule.forRoot(), @@ -39,6 +36,15 @@ import { APP_ROUTE_PROVIDER } from './route.provider'; ], providers: [ APP_ROUTE_PROVIDER, + provideCoreModule({ + environment, + registerLocaleFn: registerLocale(), + sendNullsAsQueryParam: false, + skipGetAppConfiguration: false, + }), + provideAbpOAuth(), + provideThemeShared(), + provideSettingManagementConfig(), provideAccountConfig(), provideIdentityConfig(), provideTenantManagementConfig(), 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 eb475074ce..4c3de0f955 100644 --- a/npm/ng-packs/packages/core/src/lib/core.module.ts +++ b/npm/ng-packs/packages/core/src/lib/core.module.ts @@ -1,6 +1,12 @@ import { CommonModule } from '@angular/common'; import { HttpClientModule, HttpClientXsrfModule } from '@angular/common/http'; -import { APP_INITIALIZER, Injector, ModuleWithProviders, NgModule } from '@angular/core'; +import { + APP_INITIALIZER, + Injector, + ModuleWithProviders, + NgModule, + makeEnvironmentProviders, +} from '@angular/core'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { RouterModule, TitleStrategy } from '@angular/router'; import { AbstractNgModelComponent } from './abstracts/ng-model.component'; @@ -40,12 +46,11 @@ import { DefaultQueueManager } from './utils/queue'; import { IncludeLocalizationResourcesProvider } from './providers/include-localization-resources.provider'; import { SORT_COMPARE_FUNC, compareFuncFactory } from './tokens/compare-func.token'; import { AuthErrorFilterService } from './abstracts'; -import { DYNAMIC_LAYOUTS_TOKEN } from "./tokens/dynamic-layout.token"; -import { DEFAULT_DYNAMIC_LAYOUTS } from "./constants"; +import { DYNAMIC_LAYOUTS_TOKEN } from './tokens/dynamic-layout.token'; +import { DEFAULT_DYNAMIC_LAYOUTS } from './constants'; import { AbpTitleStrategy } from './services/title-strategy.service'; import { LocalStorageListenerService } from './services/local-storage-listener.service'; - const standaloneDirectives = [ AutofocusDirective, InputEventDebounceDirective, @@ -201,12 +206,12 @@ export class CoreModule { IncludeLocalizationResourcesProvider, { provide: DYNAMIC_LAYOUTS_TOKEN, - useValue: options.dynamicLayouts || DEFAULT_DYNAMIC_LAYOUTS + useValue: options.dynamicLayouts || DEFAULT_DYNAMIC_LAYOUTS, }, { provide: TitleStrategy, - useExisting: AbpTitleStrategy - } + useExisting: AbpTitleStrategy, + }, ], }; } @@ -225,3 +230,78 @@ export class CoreModule { }; } } + +export function provideCoreModule(options = {} as ABP.Root) { + return makeEnvironmentProviders([ + LocaleProvider, + CookieLanguageProvider, + { + provide: 'CORE_OPTIONS', + useValue: options, + }, + { + provide: CORE_OPTIONS, + useFactory: coreOptionsFactory, + deps: ['CORE_OPTIONS'], + }, + { + provide: APP_INITIALIZER, + multi: true, + deps: [Injector], + useFactory: getInitialData, + }, + { + provide: APP_INITIALIZER, + multi: true, + deps: [Injector], + useFactory: localeInitializer, + }, + { + provide: APP_INITIALIZER, + multi: true, + deps: [LocalizationService], + useFactory: noop, + }, + { + provide: APP_INITIALIZER, + multi: true, + deps: [LocalStorageListenerService], + useFactory: noop, + }, + { + provide: APP_INITIALIZER, + multi: true, + deps: [RoutesHandler], + useFactory: noop, + }, + { provide: TENANT_KEY, useValue: options.tenantKey || '__tenant' }, + { + provide: LOCALIZATIONS, + multi: true, + useValue: localizationContributor(options.localizations), + deps: [LocalizationService], + }, + { + provide: SORT_COMPARE_FUNC, + useFactory: compareFuncFactory, + }, + { + provide: QUEUE_MANAGER, + useClass: DefaultQueueManager, + }, + { + provide: OTHERS_GROUP, + useValue: options.othersGroup || 'AbpUi::OthersGroup', + }, + AuthErrorFilterService, + IncludeLocalizationResourcesProvider, + { + provide: DYNAMIC_LAYOUTS_TOKEN, + useValue: options.dynamicLayouts || DEFAULT_DYNAMIC_LAYOUTS, + }, + { + provide: TitleStrategy, + useExisting: AbpTitleStrategy, + }, + ]); +} diff --git a/npm/ng-packs/packages/oauth/src/lib/oauth.module.ts b/npm/ng-packs/packages/oauth/src/lib/oauth.module.ts index 2adac2a23a..ccf968e0dd 100644 --- a/npm/ng-packs/packages/oauth/src/lib/oauth.module.ts +++ b/npm/ng-packs/packages/oauth/src/lib/oauth.module.ts @@ -1,4 +1,10 @@ -import { APP_INITIALIZER, ModuleWithProviders, NgModule, Provider } from '@angular/core'; +import { + APP_INITIALIZER, + ModuleWithProviders, + NgModule, + Provider, + makeEnvironmentProviders, +} from '@angular/core'; import { CommonModule } from '@angular/common'; import { HTTP_INTERCEPTORS } from '@angular/common/http'; import { OAuthModule, OAuthStorage } from 'angular-oauth2-oidc'; @@ -71,3 +77,49 @@ export class AbpOAuthModule { }; } } + +export function provideAbpOAuth() { + const providers = [ + { + provide: AuthService, + useClass: AbpOAuthService, + }, + { + provide: AuthGuard, + useClass: AbpOAuthGuard, + }, + { + provide: authGuard, + useValue: abpOAuthGuard, + }, + { + provide: ApiInterceptor, + useClass: OAuthApiInterceptor, + }, + { + provide: PIPE_TO_LOGIN_FN_KEY, + useValue: pipeToLogin, + }, + { + provide: CHECK_AUTHENTICATION_STATE_FN_KEY, + useValue: checkAccessToken, + }, + { + provide: HTTP_INTERCEPTORS, + useExisting: ApiInterceptor, + multi: true, + }, + NavigateToManageProfileProvider, + { + provide: APP_INITIALIZER, + multi: true, + deps: [OAuthConfigurationHandler], + useFactory: noop, + }, + OAuthModule.forRoot().providers as Provider[], + { provide: OAuthStorage, useClass: AbpLocalStorageService }, + { provide: AuthErrorFilterService, useExisting: OAuthErrorFilterService }, + ]; + + return makeEnvironmentProviders(providers); +} diff --git a/npm/ng-packs/packages/setting-management/config/src/lib/setting-management-config.module.ts b/npm/ng-packs/packages/setting-management/config/src/lib/setting-management-config.module.ts index 60f567c31a..4463f11d06 100644 --- a/npm/ng-packs/packages/setting-management/config/src/lib/setting-management-config.module.ts +++ b/npm/ng-packs/packages/setting-management/config/src/lib/setting-management-config.module.ts @@ -1,5 +1,5 @@ import { ThemeSharedModule } from '@abp/ng.theme.shared'; -import { ModuleWithProviders, NgModule } from '@angular/core'; +import { ModuleWithProviders, NgModule, makeEnvironmentProviders } from '@angular/core'; import { CoreModule } from '@abp/ng.core'; import { NgxValidateCoreModule } from '@ngx-validate/core'; import { SETTING_MANAGEMENT_FEATURES_PROVIDERS } from './providers/features.token'; @@ -9,7 +9,7 @@ import { SETTING_MANAGEMENT_SETTING_TAB_PROVIDERS } from './providers/setting-ta import { EmailSettingGroupComponent } from './components/email-setting-group/email-setting-group.component'; @NgModule({ - imports: [CoreModule,ThemeSharedModule,NgxValidateCoreModule], + imports: [CoreModule, ThemeSharedModule, NgxValidateCoreModule], declarations: [EmailSettingGroupComponent], exports: [EmailSettingGroupComponent], }) @@ -26,3 +26,12 @@ export class SettingManagementConfigModule { }; } } + +export function provideSettingManagementConfig() { + return makeEnvironmentProviders([ + SETTING_MANAGEMENT_ROUTE_PROVIDERS, + SETTING_MANAGEMENT_SETTING_TAB_PROVIDERS, + SETTING_MANAGEMENT_FEATURES_PROVIDERS, + SETTING_MANAGEMENT_VISIBLE_PROVIDERS, + ]); +} 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 4b092642c1..5f870be562 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,11 @@ import { CoreModule, noop } from '@abp/ng.core'; import { DatePipe } from '@angular/common'; -import { APP_INITIALIZER, ModuleWithProviders, NgModule } from '@angular/core'; +import { + APP_INITIALIZER, + ModuleWithProviders, + NgModule, + makeEnvironmentProviders, +} from '@angular/core'; import { NgbDateParserFormatter, NgbPaginationModule } from '@ng-bootstrap/ng-bootstrap'; import { defaultMapErrorsFn, @@ -150,3 +155,59 @@ export class ThemeSharedModule { }; } } + +export function provideThemeShared( + { httpErrorConfig, validation = {}, confirmationIcons = {} } = {} as RootParams, +) { + const providers = [ + { + provide: APP_INITIALIZER, + multi: true, + deps: [ErrorHandler], + useFactory: noop, + }, + THEME_SHARED_ROUTE_PROVIDERS, + { + provide: APP_INITIALIZER, + multi: true, + deps: [THEME_SHARED_APPEND_CONTENT], + useFactory: noop, + }, + { provide: HTTP_ERROR_CONFIG, useValue: httpErrorConfig }, + { provide: NgbDateParserFormatter, useClass: DateParserFormatter }, + NG_BOOTSTRAP_CONFIG_PROVIDERS, + { + provide: VALIDATION_BLUEPRINTS, + useValue: { + ...DEFAULT_VALIDATION_BLUEPRINTS, + ...(validation.blueprints || {}), + }, + }, + { + provide: VALIDATION_MAP_ERRORS_FN, + useValue: validation.mapErrorsFn || defaultMapErrorsFn, + }, + { + provide: VALIDATION_VALIDATE_ON_SUBMIT, + useValue: validation.validateOnSubmit, + }, + DocumentDirHandlerService, + { + provide: APP_INITIALIZER, + useFactory: noop, + multi: true, + deps: [DocumentDirHandlerService], + }, + { + provide: CONFIRMATION_ICONS, + useValue: { + ...DEFAULT_CONFIRMATION_ICONS, + ...(confirmationIcons || {}), + }, + }, + tenantNotFoundProvider, + DEFAULT_HANDLERS_PROVIDERS, + ]; + + return makeEnvironmentProviders(providers); +} From e7c9debfc18b8d6b6a5742328eeef1d0c85f6a32 Mon Sep 17 00:00:00 2001 From: Sinan997 Date: Mon, 6 May 2024 16:52:21 +0300 Subject: [PATCH 03/14] add `config` postfix to provider functions --- npm/ng-packs/apps/dev-app/src/app/app.module.ts | 16 ++++++++-------- .../packages/core/src/lib/core.module.ts | 2 +- .../src/lib/feature-management.module.ts | 2 +- .../packages/oauth/src/lib/oauth.module.ts | 2 +- .../theme-shared/src/lib/theme-shared.module.ts | 2 +- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/npm/ng-packs/apps/dev-app/src/app/app.module.ts b/npm/ng-packs/apps/dev-app/src/app/app.module.ts index ec35d06bdf..fb53417c02 100644 --- a/npm/ng-packs/apps/dev-app/src/app/app.module.ts +++ b/npm/ng-packs/apps/dev-app/src/app/app.module.ts @@ -1,21 +1,21 @@ import { NgModule } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; -import { CoreModule, provideCoreModule } from '@abp/ng.core'; +import { CoreModule, provideCoreModuleConfig } from '@abp/ng.core'; import { registerLocale } from '@abp/ng.core/locale'; import { InternetConnectionStatusComponent, ThemeSharedModule, - provideThemeShared, + provideThemeSharedConfig, } from '@abp/ng.theme.shared'; import { ThemeLeptonXModule } from '@abp/ng.theme.lepton-x'; import { SideMenuLayoutModule } from '@abp/ng.theme.lepton-x/layouts'; -import { provideAbpOAuth } from '@abp/ng.oauth'; +import { provideAbpOAuthConfig } from '@abp/ng.oauth'; import { provideSettingManagementConfig } from '@abp/ng.setting-management/config'; import { provideAccountConfig } from '@abp/ng.account/config'; import { provideIdentityConfig } from '@abp/ng.identity/config'; import { provideTenantManagementConfig } from '@abp/ng.tenant-management/config'; -import { provideFeatureManagement } from '@abp/ng.feature-management'; +import { provideFeatureManagementConfig } from '@abp/ng.feature-management'; import { AccountLayoutModule } from '@abp/ng.theme.lepton-x/account'; import { environment } from '../environments/environment'; import { AppRoutingModule } from './app-routing.module'; @@ -36,19 +36,19 @@ import { APP_ROUTE_PROVIDER } from './route.provider'; ], providers: [ APP_ROUTE_PROVIDER, - provideCoreModule({ + provideCoreModuleConfig({ environment, registerLocaleFn: registerLocale(), sendNullsAsQueryParam: false, skipGetAppConfiguration: false, }), - provideAbpOAuth(), - provideThemeShared(), + provideAbpOAuthConfig(), + provideThemeSharedConfig(), provideSettingManagementConfig(), provideAccountConfig(), provideIdentityConfig(), provideTenantManagementConfig(), - provideFeatureManagement(), + provideFeatureManagementConfig(), ], declarations: [AppComponent], bootstrap: [AppComponent], 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 4c3de0f955..d7f68bb38a 100644 --- a/npm/ng-packs/packages/core/src/lib/core.module.ts +++ b/npm/ng-packs/packages/core/src/lib/core.module.ts @@ -231,7 +231,7 @@ export class CoreModule { } } -export function provideCoreModule(options = {} as ABP.Root) { +export function provideCoreModuleConfig(options = {} as ABP.Root) { return makeEnvironmentProviders([ LocaleProvider, CookieLanguageProvider, 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 8f8cd04138..afd452e3f3 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 @@ -26,6 +26,6 @@ export class FeatureManagementModule { } } -export function provideFeatureManagement() { +export function provideFeatureManagementConfig() { return makeEnvironmentProviders([FEATURE_MANAGEMENT_SETTINGS_PROVIDERS]); } diff --git a/npm/ng-packs/packages/oauth/src/lib/oauth.module.ts b/npm/ng-packs/packages/oauth/src/lib/oauth.module.ts index ccf968e0dd..5b34b4a748 100644 --- a/npm/ng-packs/packages/oauth/src/lib/oauth.module.ts +++ b/npm/ng-packs/packages/oauth/src/lib/oauth.module.ts @@ -78,7 +78,7 @@ export class AbpOAuthModule { } } -export function provideAbpOAuth() { +export function provideAbpOAuthConfig() { const providers = [ { provide: AuthService, 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 5f870be562..482b9f4b6b 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 @@ -156,7 +156,7 @@ export class ThemeSharedModule { } } -export function provideThemeShared( +export function provideThemeSharedConfig( { httpErrorConfig, validation = {}, confirmationIcons = {} } = {} as RootParams, ) { const providers = [ From 5c146a031a64a7f8e78a2f261d99a30d08f4d260 Mon Sep 17 00:00:00 2001 From: Sinan997 Date: Fri, 10 May 2024 15:36:54 +0300 Subject: [PATCH 04/14] move providers, deprecate modules --- .../apps/dev-app/src/app/app.module.ts | 23 ++- .../config/src/account-config.module.ts | 29 +-- .../src/providers/account-config.provider.ts | 15 ++ .../account/config/src/providers/index.ts | 1 + .../packages/core/src/lib/core.module.ts | 192 +----------------- .../providers/core-module-config.provider.ts | 166 +++++++++++++++ .../packages/core/src/lib/providers/index.ts | 1 + npm/ng-packs/packages/core/src/public-api.ts | 1 + .../src/lib/feature-management.module.ts | 14 +- .../feature-management-config.provider.ts | 6 + .../src/lib/providers/index.ts | 1 + .../config/src/identity-config.module.ts | 13 +- .../src/providers/identity-config.provider.ts | 6 + .../identity/config/src/providers/index.ts | 1 + .../packages/oauth/src/lib/oauth.module.ts | 124 +---------- .../packages/oauth/src/lib/providers/index.ts | 1 + .../providers/oauth-module-config.provider.ts | 67 ++++++ .../config/src/lib/providers/index.ts | 1 + .../setting-management-config.provider.ts | 14 ++ .../lib/setting-management-config.module.ts | 26 +-- .../config/src/providers/index.ts | 1 + .../tenant-management-config.provider.ts | 6 + .../src/tenant-management-config.module.ts | 13 +- .../theme-shared/src/lib/providers/index.ts | 1 + .../providers/theme-shared-config.provider.ts | 75 +++++++ .../src/lib/theme-shared.module.ts | 139 +------------ 26 files changed, 436 insertions(+), 501 deletions(-) create mode 100644 npm/ng-packs/packages/account/config/src/providers/account-config.provider.ts create mode 100644 npm/ng-packs/packages/core/src/lib/providers/core-module-config.provider.ts create mode 100644 npm/ng-packs/packages/feature-management/src/lib/providers/feature-management-config.provider.ts create mode 100644 npm/ng-packs/packages/identity/config/src/providers/identity-config.provider.ts create mode 100644 npm/ng-packs/packages/oauth/src/lib/providers/oauth-module-config.provider.ts create mode 100644 npm/ng-packs/packages/setting-management/config/src/lib/providers/setting-management-config.provider.ts create mode 100644 npm/ng-packs/packages/tenant-management/config/src/providers/tenant-management-config.provider.ts create mode 100644 npm/ng-packs/packages/theme-shared/src/lib/providers/theme-shared-config.provider.ts diff --git a/npm/ng-packs/apps/dev-app/src/app/app.module.ts b/npm/ng-packs/apps/dev-app/src/app/app.module.ts index fb53417c02..96ea3e8b20 100644 --- a/npm/ng-packs/apps/dev-app/src/app/app.module.ts +++ b/npm/ng-packs/apps/dev-app/src/app/app.module.ts @@ -1,7 +1,10 @@ import { NgModule } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; -import { CoreModule, provideCoreModuleConfig } from '@abp/ng.core'; +import { + CoreModule, + provideCoreModuleConfig, withOptions +} from '@abp/ng.core'; import { registerLocale } from '@abp/ng.core/locale'; import { InternetConnectionStatusComponent, @@ -10,9 +13,9 @@ import { } from '@abp/ng.theme.shared'; import { ThemeLeptonXModule } from '@abp/ng.theme.lepton-x'; import { SideMenuLayoutModule } from '@abp/ng.theme.lepton-x/layouts'; -import { provideAbpOAuthConfig } from '@abp/ng.oauth'; +import { AbpOAuthModule, provideAbpOAuthConfig } from '@abp/ng.oauth'; import { provideSettingManagementConfig } from '@abp/ng.setting-management/config'; -import { provideAccountConfig } from '@abp/ng.account/config'; +import { AccountConfigModule, provideAccountConfig } from '@abp/ng.account/config'; import { provideIdentityConfig } from '@abp/ng.identity/config'; import { provideTenantManagementConfig } from '@abp/ng.tenant-management/config'; import { provideFeatureManagementConfig } from '@abp/ng.feature-management'; @@ -36,12 +39,14 @@ import { APP_ROUTE_PROVIDER } from './route.provider'; ], providers: [ APP_ROUTE_PROVIDER, - provideCoreModuleConfig({ - environment, - registerLocaleFn: registerLocale(), - sendNullsAsQueryParam: false, - skipGetAppConfiguration: false, - }), + provideCoreModuleConfig( + withOptions({ + environment, + registerLocaleFn: registerLocale(), + sendNullsAsQueryParam: false, + skipGetAppConfiguration: false, + }), + ), provideAbpOAuthConfig(), provideThemeSharedConfig(), provideSettingManagementConfig(), diff --git a/npm/ng-packs/packages/account/config/src/account-config.module.ts b/npm/ng-packs/packages/account/config/src/account-config.module.ts index a80d76f44d..97c38d2e56 100644 --- a/npm/ng-packs/packages/account/config/src/account-config.module.ts +++ b/npm/ng-packs/packages/account/config/src/account-config.module.ts @@ -1,32 +1,15 @@ -import { Injector, ModuleWithProviders, NgModule, makeEnvironmentProviders } from '@angular/core'; -import { NAVIGATE_TO_MANAGE_PROFILE } from '@abp/ng.core'; -import { ACCOUNT_ROUTE_PROVIDERS } from './providers/route.provider'; -import { navigateToManageProfileFactory } from './utils/factories'; +import { ModuleWithProviders, NgModule } from '@angular/core'; +import { provideAccountConfig } from './providers'; +/** + * @deprecated AccountConfigModule is deprecated use `provideAccountConfig` *function* instead. + */ @NgModule() export class AccountConfigModule { static forRoot(): ModuleWithProviders { return { ngModule: AccountConfigModule, - providers: [ - ACCOUNT_ROUTE_PROVIDERS, - { - provide: NAVIGATE_TO_MANAGE_PROFILE, - useFactory: navigateToManageProfileFactory, - deps: [Injector], - }, - ], + providers: [provideAccountConfig()], }; } } - -export function provideAccountConfig() { - return makeEnvironmentProviders([ - ACCOUNT_ROUTE_PROVIDERS, - { - provide: NAVIGATE_TO_MANAGE_PROFILE, - useFactory: navigateToManageProfileFactory, - deps: [Injector], - }, - ]); -} diff --git a/npm/ng-packs/packages/account/config/src/providers/account-config.provider.ts b/npm/ng-packs/packages/account/config/src/providers/account-config.provider.ts new file mode 100644 index 0000000000..07d9f5aa22 --- /dev/null +++ b/npm/ng-packs/packages/account/config/src/providers/account-config.provider.ts @@ -0,0 +1,15 @@ +import { NAVIGATE_TO_MANAGE_PROFILE } from '@abp/ng.core'; +import { makeEnvironmentProviders, Injector } from '@angular/core'; +import { navigateToManageProfileFactory } from '../utils/factories'; +import { ACCOUNT_ROUTE_PROVIDERS } from './route.provider'; + +export function provideAccountConfig() { + return makeEnvironmentProviders([ + ACCOUNT_ROUTE_PROVIDERS, + { + provide: NAVIGATE_TO_MANAGE_PROFILE, + useFactory: navigateToManageProfileFactory, + deps: [Injector], + }, + ]); +} diff --git a/npm/ng-packs/packages/account/config/src/providers/index.ts b/npm/ng-packs/packages/account/config/src/providers/index.ts index fe08efba8c..e6961c188d 100644 --- a/npm/ng-packs/packages/account/config/src/providers/index.ts +++ b/npm/ng-packs/packages/account/config/src/providers/index.ts @@ -1 +1,2 @@ export * from './route.provider'; +export * from './account-config.provider'; 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 d7f68bb38a..44ed63000d 100644 --- a/npm/ng-packs/packages/core/src/lib/core.module.ts +++ b/npm/ng-packs/packages/core/src/lib/core.module.ts @@ -1,14 +1,8 @@ import { CommonModule } from '@angular/common'; import { HttpClientModule, HttpClientXsrfModule } from '@angular/common/http'; -import { - APP_INITIALIZER, - Injector, - ModuleWithProviders, - NgModule, - makeEnvironmentProviders, -} from '@angular/core'; +import { ModuleWithProviders, NgModule } from '@angular/core'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; -import { RouterModule, TitleStrategy } from '@angular/router'; +import { RouterModule } from '@angular/router'; import { AbstractNgModelComponent } from './abstracts/ng-model.component'; import { DynamicLayoutComponent } from './components/dynamic-layout.component'; import { ReplaceableRouteContainerComponent } from './components/replaceable-route-container.component'; @@ -21,35 +15,19 @@ import { InitDirective } from './directives/init.directive'; import { PermissionDirective } from './directives/permission.directive'; import { ReplaceableTemplateDirective } from './directives/replaceable-template.directive'; import { StopPropagationDirective } from './directives/stop-propagation.directive'; -import { RoutesHandler } from './handlers/routes.handler'; import { LocalizationModule } from './localization.module'; import { ABP } from './models/common'; import { LocalizationPipe } from './pipes/localization.pipe'; import { SortPipe } from './pipes/sort.pipe'; import { ToInjectorPipe } from './pipes/to-injector.pipe'; -import { CookieLanguageProvider } from './providers/cookie-language.provider'; -import { LocaleProvider } from './providers/locale.provider'; import { LocalizationService } from './services/localization.service'; -import { OTHERS_GROUP } from './tokens'; import { localizationContributor, LOCALIZATIONS } from './tokens/localization.token'; -import { CORE_OPTIONS, coreOptionsFactory } from './tokens/options.token'; -import { TENANT_KEY } from './tokens/tenant-key.token'; -import { noop } from './utils/common-utils'; import './utils/date-extensions'; -import { getInitialData, localeInitializer } from './utils/initial-utils'; import { ShortDateTimePipe } from './pipes/short-date-time.pipe'; import { ShortTimePipe } from './pipes/short-time.pipe'; import { ShortDatePipe } from './pipes/short-date.pipe'; import { SafeHtmlPipe } from './pipes/safe-html.pipe'; -import { QUEUE_MANAGER } from './tokens/queue.token'; -import { DefaultQueueManager } from './utils/queue'; -import { IncludeLocalizationResourcesProvider } from './providers/include-localization-resources.provider'; -import { SORT_COMPARE_FUNC, compareFuncFactory } from './tokens/compare-func.token'; -import { AuthErrorFilterService } from './abstracts'; -import { DYNAMIC_LAYOUTS_TOKEN } from './tokens/dynamic-layout.token'; -import { DEFAULT_DYNAMIC_LAYOUTS } from './constants'; -import { AbpTitleStrategy } from './services/title-strategy.service'; -import { LocalStorageListenerService } from './services/local-storage-listener.service'; +import { provideCoreModuleConfig, provideCoreModuleConfigChild, withOptions } from './providers'; const standaloneDirectives = [ AutofocusDirective, @@ -137,171 +115,23 @@ export class RootCoreModule {} imports: [BaseCoreModule], }) export class CoreModule { + /** + * @deprecated forRoot method is deprecated, use `provideCoreModuleConfig` *function* for config settings. + */ static forRoot(options = {} as ABP.Root): ModuleWithProviders { return { ngModule: RootCoreModule, - providers: [ - LocaleProvider, - CookieLanguageProvider, - { - provide: 'CORE_OPTIONS', - useValue: options, - }, - { - provide: CORE_OPTIONS, - useFactory: coreOptionsFactory, - deps: ['CORE_OPTIONS'], - }, - { - provide: APP_INITIALIZER, - multi: true, - deps: [Injector], - useFactory: getInitialData, - }, - { - provide: APP_INITIALIZER, - multi: true, - deps: [Injector], - useFactory: localeInitializer, - }, - { - provide: APP_INITIALIZER, - multi: true, - deps: [LocalizationService], - useFactory: noop, - }, - { - provide: APP_INITIALIZER, - multi: true, - deps: [LocalStorageListenerService], - useFactory: noop, - }, - { - provide: APP_INITIALIZER, - multi: true, - deps: [RoutesHandler], - useFactory: noop, - }, - - { provide: TENANT_KEY, useValue: options.tenantKey || '__tenant' }, - { - provide: LOCALIZATIONS, - multi: true, - useValue: localizationContributor(options.localizations), - deps: [LocalizationService], - }, - { - provide: SORT_COMPARE_FUNC, - useFactory: compareFuncFactory, - }, - { - provide: QUEUE_MANAGER, - useClass: DefaultQueueManager, - }, - { - provide: OTHERS_GROUP, - useValue: options.othersGroup || 'AbpUi::OthersGroup', - }, - AuthErrorFilterService, - IncludeLocalizationResourcesProvider, - { - provide: DYNAMIC_LAYOUTS_TOKEN, - useValue: options.dynamicLayouts || DEFAULT_DYNAMIC_LAYOUTS, - }, - { - provide: TitleStrategy, - useExisting: AbpTitleStrategy, - }, - ], + providers: [provideCoreModuleConfig(withOptions(options))], }; } + /** + * @deprecated forChild method is deprecated, use `provideCoreModuleConfig` *function* for config settings. + */ static forChild(options = {} as ABP.Child): ModuleWithProviders { return { ngModule: RootCoreModule, - providers: [ - { - provide: LOCALIZATIONS, - multi: true, - useValue: localizationContributor(options.localizations), - deps: [LocalizationService], - }, - ], + providers: [provideCoreModuleConfigChild(options)], }; } } - -export function provideCoreModuleConfig(options = {} as ABP.Root) { - return makeEnvironmentProviders([ - LocaleProvider, - CookieLanguageProvider, - { - provide: 'CORE_OPTIONS', - useValue: options, - }, - { - provide: CORE_OPTIONS, - useFactory: coreOptionsFactory, - deps: ['CORE_OPTIONS'], - }, - { - provide: APP_INITIALIZER, - multi: true, - deps: [Injector], - useFactory: getInitialData, - }, - { - provide: APP_INITIALIZER, - multi: true, - deps: [Injector], - useFactory: localeInitializer, - }, - { - provide: APP_INITIALIZER, - multi: true, - deps: [LocalizationService], - useFactory: noop, - }, - { - provide: APP_INITIALIZER, - multi: true, - deps: [LocalStorageListenerService], - useFactory: noop, - }, - { - provide: APP_INITIALIZER, - multi: true, - deps: [RoutesHandler], - useFactory: noop, - }, - { provide: TENANT_KEY, useValue: options.tenantKey || '__tenant' }, - { - provide: LOCALIZATIONS, - multi: true, - useValue: localizationContributor(options.localizations), - deps: [LocalizationService], - }, - { - provide: SORT_COMPARE_FUNC, - useFactory: compareFuncFactory, - }, - { - provide: QUEUE_MANAGER, - useClass: DefaultQueueManager, - }, - { - provide: OTHERS_GROUP, - useValue: options.othersGroup || 'AbpUi::OthersGroup', - }, - AuthErrorFilterService, - IncludeLocalizationResourcesProvider, - { - provide: DYNAMIC_LAYOUTS_TOKEN, - useValue: options.dynamicLayouts || DEFAULT_DYNAMIC_LAYOUTS, - }, - { - provide: TitleStrategy, - useExisting: AbpTitleStrategy, - }, - ]); -} diff --git a/npm/ng-packs/packages/core/src/lib/providers/core-module-config.provider.ts b/npm/ng-packs/packages/core/src/lib/providers/core-module-config.provider.ts new file mode 100644 index 0000000000..6df8d1043a --- /dev/null +++ b/npm/ng-packs/packages/core/src/lib/providers/core-module-config.provider.ts @@ -0,0 +1,166 @@ +import { + ABP, + AuthErrorFilterService, + CORE_OPTIONS, + DEFAULT_DYNAMIC_LAYOUTS, + DefaultQueueManager, + LOCALIZATIONS, + LocalStorageListenerService, + LocalizationService, + OTHERS_GROUP, + QUEUE_MANAGER, + SORT_COMPARE_FUNC, + TENANT_KEY, + compareFuncFactory, + coreOptionsFactory, + getInitialData, + localeInitializer, + localizationContributor, + noop, +} from '@abp/ng.core'; +import { makeEnvironmentProviders, APP_INITIALIZER, Injector, Provider } from '@angular/core'; +import { TitleStrategy } from '@angular/router'; +import { RoutesHandler } from '../handlers'; +import { AbpTitleStrategy } from '../services/title-strategy.service'; +import { DYNAMIC_LAYOUTS_TOKEN } from '../tokens/dynamic-layout.token'; +import { CookieLanguageProvider } from './cookie-language.provider'; +import { IncludeLocalizationResourcesProvider } from './include-localization-resources.provider'; +import { LocaleProvider } from './locale.provider'; + +export enum CoreFeatureKind { + Options, + compareFuncFactory, + TitleStrategy, +} + +export interface CoreFeature { + ɵkind: KindT; + ɵproviders: Provider[]; +} + +function makeCoreFeature( + kind: KindT, + providers: Provider[], +): CoreFeature { + return { + ɵkind: kind, + ɵproviders: providers, + }; +} + +export function withOptions(options = {} as ABP.Root): CoreFeature { + return makeCoreFeature(CoreFeatureKind.Options, [ + { + provide: 'CORE_OPTIONS', + useValue: options, + }, + { + provide: CORE_OPTIONS, + useFactory: coreOptionsFactory, + deps: ['CORE_OPTIONS'], + }, + { provide: TENANT_KEY, useValue: options.tenantKey || '__tenant' }, + { + provide: LOCALIZATIONS, + multi: true, + useValue: localizationContributor(options.localizations), + deps: [LocalizationService], + }, + { + provide: OTHERS_GROUP, + useValue: options.othersGroup || 'AbpUi::OthersGroup', + }, + { + provide: DYNAMIC_LAYOUTS_TOKEN, + useValue: options.dynamicLayouts || DEFAULT_DYNAMIC_LAYOUTS, + }, + ]); +} + +export function withTitleStrategy(strategy: any): CoreFeature { + return makeCoreFeature(CoreFeatureKind.TitleStrategy, [ + { + provide: TitleStrategy, + useExisting: strategy, + }, + ]); +} + +export function withCompareFuncFactory( + factory: any, +): CoreFeature { + return makeCoreFeature(CoreFeatureKind.compareFuncFactory, [ + { + provide: SORT_COMPARE_FUNC, + useFactory: factory, + }, + ]); +} + +export function provideCoreModuleConfig(...features: CoreFeature[]) { + const providers = [ + LocaleProvider, + CookieLanguageProvider, + { + provide: APP_INITIALIZER, + multi: true, + deps: [Injector], + useFactory: getInitialData, + }, + { + provide: APP_INITIALIZER, + multi: true, + deps: [Injector], + useFactory: localeInitializer, + }, + { + provide: APP_INITIALIZER, + multi: true, + deps: [LocalizationService], + useFactory: noop, + }, + { + provide: APP_INITIALIZER, + multi: true, + deps: [LocalStorageListenerService], + useFactory: noop, + }, + { + provide: APP_INITIALIZER, + multi: true, + deps: [RoutesHandler], + useFactory: noop, + }, + { + provide: SORT_COMPARE_FUNC, + useFactory: compareFuncFactory, + }, + { + provide: QUEUE_MANAGER, + useClass: DefaultQueueManager, + }, + AuthErrorFilterService, + IncludeLocalizationResourcesProvider, + { + provide: TitleStrategy, + useExisting: AbpTitleStrategy, + }, + ]; + + for (const feature of features) { + providers.push(...feature.ɵproviders); + } + + return makeEnvironmentProviders(providers); +} + +export function provideCoreModuleConfigChild(options = {} as ABP.Child) { + return makeEnvironmentProviders([ + { + provide: LOCALIZATIONS, + multi: true, + useValue: localizationContributor(options.localizations), + deps: [LocalizationService], + }, + ]); +} diff --git a/npm/ng-packs/packages/core/src/lib/providers/index.ts b/npm/ng-packs/packages/core/src/lib/providers/index.ts index 4ae2d22a1a..c59b5d4618 100644 --- a/npm/ng-packs/packages/core/src/lib/providers/index.ts +++ b/npm/ng-packs/packages/core/src/lib/providers/index.ts @@ -1,3 +1,4 @@ export * from './cookie-language.provider'; export * from './locale.provider'; export * from './include-localization-resources.provider'; +export * from './core-module-config.provider'; diff --git a/npm/ng-packs/packages/core/src/public-api.ts b/npm/ng-packs/packages/core/src/public-api.ts index c7b56ac41c..5511de5057 100644 --- a/npm/ng-packs/packages/core/src/public-api.ts +++ b/npm/ng-packs/packages/core/src/public-api.ts @@ -9,6 +9,7 @@ export * from './lib/guards'; export * from './lib/localization.module'; export * from './lib/models'; export * from './lib/pipes'; +export * from './lib/providers'; export * from './lib/proxy/pages/abp/multi-tenancy'; export * from './lib/proxy/volo/abp/asp-net-core/mvc/api-exploring'; export * from './lib/proxy/volo/abp/asp-net-core/mvc/application-configurations'; 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 afd452e3f3..7db57f2c23 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,10 +1,10 @@ import { CoreModule } from '@abp/ng.core'; import { ThemeSharedModule } from '@abp/ng.theme.shared'; -import { ModuleWithProviders, NgModule, makeEnvironmentProviders } from '@angular/core'; +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 { FEATURE_MANAGEMENT_SETTINGS_PROVIDERS } from './providers'; +import { provideFeatureManagementConfig } from './providers'; import { FeatureManagementTabComponent } from './components'; const exported = [ @@ -13,6 +13,10 @@ const exported = [ FeatureManagementTabComponent, ]; +/** + * @deprecated FeatureManagementModule is deprecated . + * @description use `provideFeatureManagementConfig` *function* for config settings. You can import directives and pipes directly, it has been switched to standalone. + */ @NgModule({ imports: [CoreModule, ThemeSharedModule, NgbNavModule, ...exported], exports: [...exported], @@ -21,11 +25,7 @@ export class FeatureManagementModule { static forRoot(): ModuleWithProviders { return { ngModule: FeatureManagementModule, - providers: [FEATURE_MANAGEMENT_SETTINGS_PROVIDERS], + providers: [provideFeatureManagementConfig()], }; } } - -export function provideFeatureManagementConfig() { - return makeEnvironmentProviders([FEATURE_MANAGEMENT_SETTINGS_PROVIDERS]); -} diff --git a/npm/ng-packs/packages/feature-management/src/lib/providers/feature-management-config.provider.ts b/npm/ng-packs/packages/feature-management/src/lib/providers/feature-management-config.provider.ts new file mode 100644 index 0000000000..39655563f5 --- /dev/null +++ b/npm/ng-packs/packages/feature-management/src/lib/providers/feature-management-config.provider.ts @@ -0,0 +1,6 @@ +import { makeEnvironmentProviders } from '@angular/core'; +import { FEATURE_MANAGEMENT_SETTINGS_PROVIDERS } from './feature-management-settings.provider'; + +export function provideFeatureManagementConfig() { + return makeEnvironmentProviders([FEATURE_MANAGEMENT_SETTINGS_PROVIDERS]); +} diff --git a/npm/ng-packs/packages/feature-management/src/lib/providers/index.ts b/npm/ng-packs/packages/feature-management/src/lib/providers/index.ts index 34f4a30f78..fad7534e01 100644 --- a/npm/ng-packs/packages/feature-management/src/lib/providers/index.ts +++ b/npm/ng-packs/packages/feature-management/src/lib/providers/index.ts @@ -1 +1,2 @@ export * from './feature-management-settings.provider'; +export * from './feature-management-config.provider'; diff --git a/npm/ng-packs/packages/identity/config/src/identity-config.module.ts b/npm/ng-packs/packages/identity/config/src/identity-config.module.ts index 7cb914de21..c6723775de 100644 --- a/npm/ng-packs/packages/identity/config/src/identity-config.module.ts +++ b/npm/ng-packs/packages/identity/config/src/identity-config.module.ts @@ -1,16 +1,15 @@ -import { ModuleWithProviders, NgModule, makeEnvironmentProviders } from '@angular/core'; -import { IDENTITY_ROUTE_PROVIDERS } from './providers/route.provider'; +import { ModuleWithProviders, NgModule } from '@angular/core'; +import { provideIdentityConfig } from './providers'; +/** + * @deprecated IdentityConfigModule is deprecated use `provideIdentityConfig` *function* instead. + */ @NgModule() export class IdentityConfigModule { static forRoot(): ModuleWithProviders { return { ngModule: IdentityConfigModule, - providers: [IDENTITY_ROUTE_PROVIDERS], + providers: [provideIdentityConfig()], }; } } - -export function provideIdentityConfig() { - return makeEnvironmentProviders([IDENTITY_ROUTE_PROVIDERS]); -} diff --git a/npm/ng-packs/packages/identity/config/src/providers/identity-config.provider.ts b/npm/ng-packs/packages/identity/config/src/providers/identity-config.provider.ts new file mode 100644 index 0000000000..b7c6e52ea1 --- /dev/null +++ b/npm/ng-packs/packages/identity/config/src/providers/identity-config.provider.ts @@ -0,0 +1,6 @@ +import { makeEnvironmentProviders } from '@angular/core'; +import { IDENTITY_ROUTE_PROVIDERS } from './route.provider'; + +export function provideIdentityConfig() { + return makeEnvironmentProviders([IDENTITY_ROUTE_PROVIDERS]); +} diff --git a/npm/ng-packs/packages/identity/config/src/providers/index.ts b/npm/ng-packs/packages/identity/config/src/providers/index.ts index fe08efba8c..1ae506684e 100644 --- a/npm/ng-packs/packages/identity/config/src/providers/index.ts +++ b/npm/ng-packs/packages/identity/config/src/providers/index.ts @@ -1 +1,2 @@ export * from './route.provider'; +export * from './identity-config.provider'; diff --git a/npm/ng-packs/packages/oauth/src/lib/oauth.module.ts b/npm/ng-packs/packages/oauth/src/lib/oauth.module.ts index 5b34b4a748..38fe147f9a 100644 --- a/npm/ng-packs/packages/oauth/src/lib/oauth.module.ts +++ b/npm/ng-packs/packages/oauth/src/lib/oauth.module.ts @@ -1,125 +1,15 @@ -import { - APP_INITIALIZER, - ModuleWithProviders, - NgModule, - Provider, - makeEnvironmentProviders, -} from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { HTTP_INTERCEPTORS } from '@angular/common/http'; -import { OAuthModule, OAuthStorage } from 'angular-oauth2-oidc'; -import { - AbpLocalStorageService, - ApiInterceptor, - AuthErrorFilterService, - AuthGuard, - authGuard, - AuthService, - CHECK_AUTHENTICATION_STATE_FN_KEY, - noop, - PIPE_TO_LOGIN_FN_KEY, -} from '@abp/ng.core'; -import { AbpOAuthService, OAuthErrorFilterService } from './services'; -import { OAuthConfigurationHandler } from './handlers/oauth-configuration.handler'; -import { OAuthApiInterceptor } from './interceptors/api.interceptor'; -import { AbpOAuthGuard, abpOAuthGuard } from './guards/oauth.guard'; -import { NavigateToManageProfileProvider } from './providers'; -import { checkAccessToken, pipeToLogin } from './utils'; +import { ModuleWithProviders, NgModule } from '@angular/core'; +import { provideAbpOAuthConfig } from './providers'; -@NgModule({ - imports: [CommonModule, OAuthModule], -}) +/** + * @deprecated AbpOAuthModule is deprecated use `provideAbpOAuthConfig` *function* instead. + */ +@NgModule() export class AbpOAuthModule { static forRoot(): ModuleWithProviders { return { ngModule: AbpOAuthModule, - providers: [ - { - provide: AuthService, - useClass: AbpOAuthService, - }, - { - provide: AuthGuard, - useClass: AbpOAuthGuard, - }, - { - provide: authGuard, - useValue: abpOAuthGuard, - }, - { - provide: ApiInterceptor, - useClass: OAuthApiInterceptor, - }, - { - provide: PIPE_TO_LOGIN_FN_KEY, - useValue: pipeToLogin, - }, - { - provide: CHECK_AUTHENTICATION_STATE_FN_KEY, - useValue: checkAccessToken, - }, - { - provide: HTTP_INTERCEPTORS, - useExisting: ApiInterceptor, - multi: true, - }, - NavigateToManageProfileProvider, - { - provide: APP_INITIALIZER, - multi: true, - deps: [OAuthConfigurationHandler], - useFactory: noop, - }, - OAuthModule.forRoot().providers as Provider[], - { provide: OAuthStorage, useClass: AbpLocalStorageService }, - { provide: AuthErrorFilterService, useExisting: OAuthErrorFilterService }, - ], + providers: [provideAbpOAuthConfig()], }; } } - -export function provideAbpOAuthConfig() { - const providers = [ - { - provide: AuthService, - useClass: AbpOAuthService, - }, - { - provide: AuthGuard, - useClass: AbpOAuthGuard, - }, - { - provide: authGuard, - useValue: abpOAuthGuard, - }, - { - provide: ApiInterceptor, - useClass: OAuthApiInterceptor, - }, - { - provide: PIPE_TO_LOGIN_FN_KEY, - useValue: pipeToLogin, - }, - { - provide: CHECK_AUTHENTICATION_STATE_FN_KEY, - useValue: checkAccessToken, - }, - { - provide: HTTP_INTERCEPTORS, - useExisting: ApiInterceptor, - multi: true, - }, - NavigateToManageProfileProvider, - { - provide: APP_INITIALIZER, - multi: true, - deps: [OAuthConfigurationHandler], - useFactory: noop, - }, - OAuthModule.forRoot().providers as Provider[], - { provide: OAuthStorage, useClass: AbpLocalStorageService }, - { provide: AuthErrorFilterService, useExisting: OAuthErrorFilterService }, - ]; - - return makeEnvironmentProviders(providers); -} diff --git a/npm/ng-packs/packages/oauth/src/lib/providers/index.ts b/npm/ng-packs/packages/oauth/src/lib/providers/index.ts index d938907916..abe17a431f 100644 --- a/npm/ng-packs/packages/oauth/src/lib/providers/index.ts +++ b/npm/ng-packs/packages/oauth/src/lib/providers/index.ts @@ -1 +1,2 @@ export * from './navigate-to-manage-profile.provider'; +export * from './oauth-module-config.provider'; diff --git a/npm/ng-packs/packages/oauth/src/lib/providers/oauth-module-config.provider.ts b/npm/ng-packs/packages/oauth/src/lib/providers/oauth-module-config.provider.ts new file mode 100644 index 0000000000..ec02be4029 --- /dev/null +++ b/npm/ng-packs/packages/oauth/src/lib/providers/oauth-module-config.provider.ts @@ -0,0 +1,67 @@ +import { + AuthService, + AuthGuard, + authGuard, + ApiInterceptor, + PIPE_TO_LOGIN_FN_KEY, + CHECK_AUTHENTICATION_STATE_FN_KEY, + AbpLocalStorageService, + AuthErrorFilterService, + noop, +} from '@abp/ng.core'; +import { APP_INITIALIZER, Provider, makeEnvironmentProviders } from '@angular/core'; +import { OAuthModule, OAuthStorage } from 'angular-oauth2-oidc'; +import { AbpOAuthGuard, abpOAuthGuard } from '../guards'; +import { OAuthConfigurationHandler } from '../handlers'; +import { OAuthApiInterceptor } from '../interceptors'; +import { AbpOAuthService, OAuthErrorFilterService } from '../services'; +import { pipeToLogin, checkAccessToken } from '../utils'; +import { NavigateToManageProfileProvider } from './navigate-to-manage-profile.provider'; + +import { HTTP_INTERCEPTORS } from '@angular/common/http'; + +export function provideAbpOAuthConfig() { + const providers = [ + { + provide: AuthService, + useClass: AbpOAuthService, + }, + { + provide: AuthGuard, + useClass: AbpOAuthGuard, + }, + { + provide: authGuard, + useValue: abpOAuthGuard, + }, + { + provide: ApiInterceptor, + useClass: OAuthApiInterceptor, + }, + { + provide: PIPE_TO_LOGIN_FN_KEY, + useValue: pipeToLogin, + }, + { + provide: CHECK_AUTHENTICATION_STATE_FN_KEY, + useValue: checkAccessToken, + }, + { + provide: HTTP_INTERCEPTORS, + useExisting: ApiInterceptor, + multi: true, + }, + NavigateToManageProfileProvider, + { + provide: APP_INITIALIZER, + multi: true, + deps: [OAuthConfigurationHandler], + useFactory: noop, + }, + OAuthModule.forRoot().providers as Provider[], + { provide: OAuthStorage, useClass: AbpLocalStorageService }, + { provide: AuthErrorFilterService, useExisting: OAuthErrorFilterService }, + ]; + + return makeEnvironmentProviders(providers); +} diff --git a/npm/ng-packs/packages/setting-management/config/src/lib/providers/index.ts b/npm/ng-packs/packages/setting-management/config/src/lib/providers/index.ts index b44902e5d5..a9d0434c23 100644 --- a/npm/ng-packs/packages/setting-management/config/src/lib/providers/index.ts +++ b/npm/ng-packs/packages/setting-management/config/src/lib/providers/index.ts @@ -1,3 +1,4 @@ export * from './route.provider'; export * from './setting-tab.provider'; export * from './visible.provider'; +export * from './setting-management-config.provider'; diff --git a/npm/ng-packs/packages/setting-management/config/src/lib/providers/setting-management-config.provider.ts b/npm/ng-packs/packages/setting-management/config/src/lib/providers/setting-management-config.provider.ts new file mode 100644 index 0000000000..291d48aa36 --- /dev/null +++ b/npm/ng-packs/packages/setting-management/config/src/lib/providers/setting-management-config.provider.ts @@ -0,0 +1,14 @@ +import { makeEnvironmentProviders } from '@angular/core'; +import { SETTING_MANAGEMENT_FEATURES_PROVIDERS } from './features.token'; +import { SETTING_MANAGEMENT_ROUTE_PROVIDERS } from './route.provider'; +import { SETTING_MANAGEMENT_SETTING_TAB_PROVIDERS } from './setting-tab.provider'; +import { SETTING_MANAGEMENT_VISIBLE_PROVIDERS } from './visible.provider'; + +export function provideSettingManagementConfig() { + return makeEnvironmentProviders([ + SETTING_MANAGEMENT_ROUTE_PROVIDERS, + SETTING_MANAGEMENT_SETTING_TAB_PROVIDERS, + SETTING_MANAGEMENT_FEATURES_PROVIDERS, + SETTING_MANAGEMENT_VISIBLE_PROVIDERS, + ]); +} diff --git a/npm/ng-packs/packages/setting-management/config/src/lib/setting-management-config.module.ts b/npm/ng-packs/packages/setting-management/config/src/lib/setting-management-config.module.ts index 4463f11d06..45b2340feb 100644 --- a/npm/ng-packs/packages/setting-management/config/src/lib/setting-management-config.module.ts +++ b/npm/ng-packs/packages/setting-management/config/src/lib/setting-management-config.module.ts @@ -1,12 +1,9 @@ import { ThemeSharedModule } from '@abp/ng.theme.shared'; -import { ModuleWithProviders, NgModule, makeEnvironmentProviders } from '@angular/core'; +import { ModuleWithProviders, NgModule } from '@angular/core'; import { CoreModule } from '@abp/ng.core'; import { NgxValidateCoreModule } from '@ngx-validate/core'; -import { SETTING_MANAGEMENT_FEATURES_PROVIDERS } from './providers/features.token'; -import { SETTING_MANAGEMENT_VISIBLE_PROVIDERS } from './providers/visible.provider'; -import { SETTING_MANAGEMENT_ROUTE_PROVIDERS } from './providers/route.provider'; -import { SETTING_MANAGEMENT_SETTING_TAB_PROVIDERS } from './providers/setting-tab.provider'; import { EmailSettingGroupComponent } from './components/email-setting-group/email-setting-group.component'; +import { provideSettingManagementConfig } from './providers'; @NgModule({ imports: [CoreModule, ThemeSharedModule, NgxValidateCoreModule], @@ -14,24 +11,13 @@ import { EmailSettingGroupComponent } from './components/email-setting-group/ema exports: [EmailSettingGroupComponent], }) export class SettingManagementConfigModule { + /** + * @deprecated forRoot method is deprecated, use `provideSettingManagementConfig` *function* for config settings. + */ static forRoot(): ModuleWithProviders { return { ngModule: SettingManagementConfigModule, - providers: [ - SETTING_MANAGEMENT_ROUTE_PROVIDERS, - SETTING_MANAGEMENT_SETTING_TAB_PROVIDERS, - SETTING_MANAGEMENT_FEATURES_PROVIDERS, - SETTING_MANAGEMENT_VISIBLE_PROVIDERS, - ], + providers: [provideSettingManagementConfig()], }; } } - -export function provideSettingManagementConfig() { - return makeEnvironmentProviders([ - SETTING_MANAGEMENT_ROUTE_PROVIDERS, - SETTING_MANAGEMENT_SETTING_TAB_PROVIDERS, - SETTING_MANAGEMENT_FEATURES_PROVIDERS, - SETTING_MANAGEMENT_VISIBLE_PROVIDERS, - ]); -} diff --git a/npm/ng-packs/packages/tenant-management/config/src/providers/index.ts b/npm/ng-packs/packages/tenant-management/config/src/providers/index.ts index fe08efba8c..39ed6c50ee 100644 --- a/npm/ng-packs/packages/tenant-management/config/src/providers/index.ts +++ b/npm/ng-packs/packages/tenant-management/config/src/providers/index.ts @@ -1 +1,2 @@ export * from './route.provider'; +export * from './tenant-management-config.provider'; diff --git a/npm/ng-packs/packages/tenant-management/config/src/providers/tenant-management-config.provider.ts b/npm/ng-packs/packages/tenant-management/config/src/providers/tenant-management-config.provider.ts new file mode 100644 index 0000000000..b2322ecacb --- /dev/null +++ b/npm/ng-packs/packages/tenant-management/config/src/providers/tenant-management-config.provider.ts @@ -0,0 +1,6 @@ +import { makeEnvironmentProviders } from '@angular/core'; +import { TENANT_MANAGEMENT_ROUTE_PROVIDERS } from './route.provider'; + +export function provideTenantManagementConfig() { + return makeEnvironmentProviders([TENANT_MANAGEMENT_ROUTE_PROVIDERS]); +} diff --git a/npm/ng-packs/packages/tenant-management/config/src/tenant-management-config.module.ts b/npm/ng-packs/packages/tenant-management/config/src/tenant-management-config.module.ts index 6e1dcd04c0..3e93ac6bb8 100644 --- a/npm/ng-packs/packages/tenant-management/config/src/tenant-management-config.module.ts +++ b/npm/ng-packs/packages/tenant-management/config/src/tenant-management-config.module.ts @@ -1,16 +1,15 @@ -import { ModuleWithProviders, NgModule, makeEnvironmentProviders } from '@angular/core'; -import { TENANT_MANAGEMENT_ROUTE_PROVIDERS } from './providers/route.provider'; +import { ModuleWithProviders, NgModule } from '@angular/core'; +import { provideTenantManagementConfig } from './providers'; +/** + * @deprecated TenantManagementConfigModule is deprecated use `provideTenantManagementConfig` *function* instead. + */ @NgModule() export class TenantManagementConfigModule { static forRoot(): ModuleWithProviders { return { ngModule: TenantManagementConfigModule, - providers: [TENANT_MANAGEMENT_ROUTE_PROVIDERS], + providers: [provideTenantManagementConfig()], }; } } - -export function provideTenantManagementConfig() { - return makeEnvironmentProviders([TENANT_MANAGEMENT_ROUTE_PROVIDERS]); -} diff --git a/npm/ng-packs/packages/theme-shared/src/lib/providers/index.ts b/npm/ng-packs/packages/theme-shared/src/lib/providers/index.ts index b6b1f9b60f..cf462deae8 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/providers/index.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/providers/index.ts @@ -2,3 +2,4 @@ export * from './ng-bootstrap-config.provider'; export * from './route.provider'; export * from './tenant-not-found.provider'; export * from './error-handlers.provider'; +export * from './theme-shared-config.provider'; diff --git a/npm/ng-packs/packages/theme-shared/src/lib/providers/theme-shared-config.provider.ts b/npm/ng-packs/packages/theme-shared/src/lib/providers/theme-shared-config.provider.ts new file mode 100644 index 0000000000..900bab18b6 --- /dev/null +++ b/npm/ng-packs/packages/theme-shared/src/lib/providers/theme-shared-config.provider.ts @@ -0,0 +1,75 @@ +import { APP_INITIALIZER, ErrorHandler, makeEnvironmentProviders } from '@angular/core'; +import { noop } from '@abp/ng.core'; +import { NgbDateParserFormatter } from '@ng-bootstrap/ng-bootstrap'; +import { + VALIDATION_BLUEPRINTS, + VALIDATION_MAP_ERRORS_FN, + defaultMapErrorsFn, + VALIDATION_VALIDATE_ON_SUBMIT, +} from '@ngx-validate/core'; +import { DEFAULT_VALIDATION_BLUEPRINTS } from '../constants'; +import { DocumentDirHandlerService } from '../handlers'; +import { RootParams } from '../models'; +import { THEME_SHARED_APPEND_CONTENT, HTTP_ERROR_CONFIG } from '../tokens'; +import { CONFIRMATION_ICONS, DEFAULT_CONFIRMATION_ICONS } from '../tokens/confirmation-icons.token'; +import { DateParserFormatter } from '../utils'; +import { DEFAULT_HANDLERS_PROVIDERS } from './error-handlers.provider'; +import { NG_BOOTSTRAP_CONFIG_PROVIDERS } from './ng-bootstrap-config.provider'; +import { THEME_SHARED_ROUTE_PROVIDERS } from './route.provider'; +import { tenantNotFoundProvider } from './tenant-not-found.provider'; + +export function provideThemeSharedConfig( + { httpErrorConfig, validation = {}, confirmationIcons = {} } = {} as RootParams, +) { + const providers = [ + { + provide: APP_INITIALIZER, + multi: true, + deps: [ErrorHandler], + useFactory: noop, + }, + THEME_SHARED_ROUTE_PROVIDERS, + { + provide: APP_INITIALIZER, + multi: true, + deps: [THEME_SHARED_APPEND_CONTENT], + useFactory: noop, + }, + { provide: HTTP_ERROR_CONFIG, useValue: httpErrorConfig }, + { provide: NgbDateParserFormatter, useClass: DateParserFormatter }, + NG_BOOTSTRAP_CONFIG_PROVIDERS, + { + provide: VALIDATION_BLUEPRINTS, + useValue: { + ...DEFAULT_VALIDATION_BLUEPRINTS, + ...(validation.blueprints || {}), + }, + }, + { + provide: VALIDATION_MAP_ERRORS_FN, + useValue: validation.mapErrorsFn || defaultMapErrorsFn, + }, + { + provide: VALIDATION_VALIDATE_ON_SUBMIT, + useValue: validation.validateOnSubmit, + }, + DocumentDirHandlerService, + { + provide: APP_INITIALIZER, + useFactory: noop, + multi: true, + deps: [DocumentDirHandlerService], + }, + { + provide: CONFIRMATION_ICONS, + useValue: { + ...DEFAULT_CONFIRMATION_ICONS, + ...(confirmationIcons || {}), + }, + }, + tenantNotFoundProvider, + DEFAULT_HANDLERS_PROVIDERS, + ]; + + return makeEnvironmentProviders(providers); +} 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 482b9f4b6b..675fa00a9e 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,19 +1,8 @@ -import { CoreModule, noop } from '@abp/ng.core'; +import { CoreModule } from '@abp/ng.core'; import { DatePipe } from '@angular/common'; -import { - APP_INITIALIZER, - ModuleWithProviders, - NgModule, - makeEnvironmentProviders, -} from '@angular/core'; -import { NgbDateParserFormatter, NgbPaginationModule } from '@ng-bootstrap/ng-bootstrap'; -import { - defaultMapErrorsFn, - NgxValidateCoreModule, - VALIDATION_BLUEPRINTS, - VALIDATION_MAP_ERRORS_FN, - VALIDATION_VALIDATE_ON_SUBMIT, -} from '@ngx-validate/core'; +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'; import { BreadcrumbComponent } from './components/breadcrumb/breadcrumb.component'; @@ -26,26 +15,17 @@ 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 { DEFAULT_VALIDATION_BLUEPRINTS } from './constants/validation'; 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'; -import { DocumentDirHandlerService } from './handlers/document-dir.handler'; -import { ErrorHandler } from './handlers/error.handler'; import { RootParams } from './models/common'; -import { DEFAULT_HANDLERS_PROVIDERS, NG_BOOTSTRAP_CONFIG_PROVIDERS } from './providers'; -import { THEME_SHARED_ROUTE_PROVIDERS } from './providers/route.provider'; -import { THEME_SHARED_APPEND_CONTENT } from './tokens/append-content.token'; -import { HTTP_ERROR_CONFIG } from './tokens/http-error.token'; -import { DateParserFormatter } from './utils/date-parser-formatter'; -import { CONFIRMATION_ICONS, DEFAULT_CONFIRMATION_ICONS } from './tokens/confirmation-icons.token'; +import { provideThemeSharedConfig } from './providers'; import { PasswordComponent } from './components/password/password.component'; import { CardModule } from './components/card/card.module'; import { AbpVisibleDirective, DisabledDirective } from './directives'; import { FormInputComponent } from './components/form-input/form-input.component'; import { FormCheckboxComponent } from './components/checkbox/checkbox.component'; -import { tenantNotFoundProvider } from './providers/tenant-not-found.provider'; const declarationsWithExports = [ BreadcrumbComponent, @@ -98,116 +78,15 @@ export class BaseThemeSharedModule {} exports: [BaseThemeSharedModule], }) export class ThemeSharedModule { + /** + * @deprecated forRoot method is deprecated, use `provideThemeSharedConfig` *function* for config settings. + */ static forRoot( { httpErrorConfig, validation = {}, confirmationIcons = {} } = {} as RootParams, ): ModuleWithProviders { return { ngModule: ThemeSharedModule, - providers: [ - { - provide: APP_INITIALIZER, - multi: true, - deps: [ErrorHandler], - useFactory: noop, - }, - THEME_SHARED_ROUTE_PROVIDERS, - { - provide: APP_INITIALIZER, - multi: true, - deps: [THEME_SHARED_APPEND_CONTENT], - useFactory: noop, - }, - { provide: HTTP_ERROR_CONFIG, useValue: httpErrorConfig }, - { provide: NgbDateParserFormatter, useClass: DateParserFormatter }, - NG_BOOTSTRAP_CONFIG_PROVIDERS, - { - provide: VALIDATION_BLUEPRINTS, - useValue: { - ...DEFAULT_VALIDATION_BLUEPRINTS, - ...(validation.blueprints || {}), - }, - }, - { - provide: VALIDATION_MAP_ERRORS_FN, - useValue: validation.mapErrorsFn || defaultMapErrorsFn, - }, - { - provide: VALIDATION_VALIDATE_ON_SUBMIT, - useValue: validation.validateOnSubmit, - }, - DocumentDirHandlerService, - { - provide: APP_INITIALIZER, - useFactory: noop, - multi: true, - deps: [DocumentDirHandlerService], - }, - { - provide: CONFIRMATION_ICONS, - useValue: { - ...DEFAULT_CONFIRMATION_ICONS, - ...(confirmationIcons || {}), - }, - }, - tenantNotFoundProvider, - DEFAULT_HANDLERS_PROVIDERS, - ], + providers: [provideThemeSharedConfig({ httpErrorConfig, validation, confirmationIcons })], }; } } - -export function provideThemeSharedConfig( - { httpErrorConfig, validation = {}, confirmationIcons = {} } = {} as RootParams, -) { - const providers = [ - { - provide: APP_INITIALIZER, - multi: true, - deps: [ErrorHandler], - useFactory: noop, - }, - THEME_SHARED_ROUTE_PROVIDERS, - { - provide: APP_INITIALIZER, - multi: true, - deps: [THEME_SHARED_APPEND_CONTENT], - useFactory: noop, - }, - { provide: HTTP_ERROR_CONFIG, useValue: httpErrorConfig }, - { provide: NgbDateParserFormatter, useClass: DateParserFormatter }, - NG_BOOTSTRAP_CONFIG_PROVIDERS, - { - provide: VALIDATION_BLUEPRINTS, - useValue: { - ...DEFAULT_VALIDATION_BLUEPRINTS, - ...(validation.blueprints || {}), - }, - }, - { - provide: VALIDATION_MAP_ERRORS_FN, - useValue: validation.mapErrorsFn || defaultMapErrorsFn, - }, - { - provide: VALIDATION_VALIDATE_ON_SUBMIT, - useValue: validation.validateOnSubmit, - }, - DocumentDirHandlerService, - { - provide: APP_INITIALIZER, - useFactory: noop, - multi: true, - deps: [DocumentDirHandlerService], - }, - { - provide: CONFIRMATION_ICONS, - useValue: { - ...DEFAULT_CONFIRMATION_ICONS, - ...(confirmationIcons || {}), - }, - }, - tenantNotFoundProvider, - DEFAULT_HANDLERS_PROVIDERS, - ]; - - return makeEnvironmentProviders(providers); -} From b8dbd462bdc29f2ed5221ab50dfb9745d20a19a5 Mon Sep 17 00:00:00 2001 From: Sinan997 Date: Fri, 10 May 2024 15:52:25 +0300 Subject: [PATCH 05/14] update CoreFeatureKind enums --- .../core/src/lib/providers/core-module-config.provider.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/npm/ng-packs/packages/core/src/lib/providers/core-module-config.provider.ts b/npm/ng-packs/packages/core/src/lib/providers/core-module-config.provider.ts index 6df8d1043a..7f17aa2528 100644 --- a/npm/ng-packs/packages/core/src/lib/providers/core-module-config.provider.ts +++ b/npm/ng-packs/packages/core/src/lib/providers/core-module-config.provider.ts @@ -29,7 +29,7 @@ import { LocaleProvider } from './locale.provider'; export enum CoreFeatureKind { Options, - compareFuncFactory, + CompareFunctionFactory, TitleStrategy, } @@ -88,8 +88,8 @@ export function withTitleStrategy(strategy: any): CoreFeature { - return makeCoreFeature(CoreFeatureKind.compareFuncFactory, [ +): CoreFeature { + return makeCoreFeature(CoreFeatureKind.CompareFunctionFactory, [ { provide: SORT_COMPARE_FUNC, useFactory: factory, From 6d739f60d6d3736cd4e10a9ebf810a3215aa3760 Mon Sep 17 00:00:00 2001 From: Sinan997 Date: Tue, 14 May 2024 11:39:37 +0300 Subject: [PATCH 06/14] update provider names and argument types --- npm/ng-packs/apps/dev-app/src/app/app.module.ts | 17 +++++++---------- .../packages/core/src/lib/core.module.ts | 12 +++++------- .../providers/core-module-config.provider.ts | 9 +++++---- .../packages/oauth/src/lib/oauth.module.ts | 6 +++--- .../providers/oauth-module-config.provider.ts | 2 +- .../providers/theme-shared-config.provider.ts | 2 +- .../theme-shared/src/lib/theme-shared.module.ts | 4 ++-- 7 files changed, 24 insertions(+), 28 deletions(-) diff --git a/npm/ng-packs/apps/dev-app/src/app/app.module.ts b/npm/ng-packs/apps/dev-app/src/app/app.module.ts index 96ea3e8b20..707f1f846f 100644 --- a/npm/ng-packs/apps/dev-app/src/app/app.module.ts +++ b/npm/ng-packs/apps/dev-app/src/app/app.module.ts @@ -1,21 +1,18 @@ import { NgModule } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; -import { - CoreModule, - provideCoreModuleConfig, withOptions -} from '@abp/ng.core'; +import { CoreModule, provideAbpCore, withOptions } from '@abp/ng.core'; import { registerLocale } from '@abp/ng.core/locale'; import { InternetConnectionStatusComponent, ThemeSharedModule, - provideThemeSharedConfig, + provideAbpThemeShared, } from '@abp/ng.theme.shared'; import { ThemeLeptonXModule } from '@abp/ng.theme.lepton-x'; import { SideMenuLayoutModule } from '@abp/ng.theme.lepton-x/layouts'; -import { AbpOAuthModule, provideAbpOAuthConfig } from '@abp/ng.oauth'; +import { provideAbpOAuth } from '@abp/ng.oauth'; import { provideSettingManagementConfig } from '@abp/ng.setting-management/config'; -import { AccountConfigModule, provideAccountConfig } from '@abp/ng.account/config'; +import { provideAccountConfig } from '@abp/ng.account/config'; import { provideIdentityConfig } from '@abp/ng.identity/config'; import { provideTenantManagementConfig } from '@abp/ng.tenant-management/config'; import { provideFeatureManagementConfig } from '@abp/ng.feature-management'; @@ -39,7 +36,7 @@ import { APP_ROUTE_PROVIDER } from './route.provider'; ], providers: [ APP_ROUTE_PROVIDER, - provideCoreModuleConfig( + provideAbpCore( withOptions({ environment, registerLocaleFn: registerLocale(), @@ -47,8 +44,8 @@ import { APP_ROUTE_PROVIDER } from './route.provider'; skipGetAppConfiguration: false, }), ), - provideAbpOAuthConfig(), - provideThemeSharedConfig(), + provideAbpOAuth(), + provideAbpThemeShared(), provideSettingManagementConfig(), provideAccountConfig(), provideIdentityConfig(), 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 44ed63000d..30c09c4c0c 100644 --- a/npm/ng-packs/packages/core/src/lib/core.module.ts +++ b/npm/ng-packs/packages/core/src/lib/core.module.ts @@ -20,14 +20,12 @@ import { ABP } from './models/common'; import { LocalizationPipe } from './pipes/localization.pipe'; import { SortPipe } from './pipes/sort.pipe'; import { ToInjectorPipe } from './pipes/to-injector.pipe'; -import { LocalizationService } from './services/localization.service'; -import { localizationContributor, LOCALIZATIONS } from './tokens/localization.token'; import './utils/date-extensions'; import { ShortDateTimePipe } from './pipes/short-date-time.pipe'; import { ShortTimePipe } from './pipes/short-time.pipe'; import { ShortDatePipe } from './pipes/short-date.pipe'; import { SafeHtmlPipe } from './pipes/safe-html.pipe'; -import { provideCoreModuleConfig, provideCoreModuleConfigChild, withOptions } from './providers'; +import { provideAbpCoreChild, provideAbpCore, withOptions } from './providers'; const standaloneDirectives = [ AutofocusDirective, @@ -116,22 +114,22 @@ export class RootCoreModule {} }) export class CoreModule { /** - * @deprecated forRoot method is deprecated, use `provideCoreModuleConfig` *function* for config settings. + * @deprecated forRoot method is deprecated, use `provideAbpCore` *function* for config settings. */ static forRoot(options = {} as ABP.Root): ModuleWithProviders { return { ngModule: RootCoreModule, - providers: [provideCoreModuleConfig(withOptions(options))], + providers: [provideAbpCore(withOptions(options))], }; } /** - * @deprecated forChild method is deprecated, use `provideCoreModuleConfig` *function* for config settings. + * @deprecated forChild method is deprecated, use `provideAbpCoreChild` *function* for config settings. */ static forChild(options = {} as ABP.Child): ModuleWithProviders { return { ngModule: RootCoreModule, - providers: [provideCoreModuleConfigChild(options)], + providers: [provideAbpCoreChild(options)], }; } } diff --git a/npm/ng-packs/packages/core/src/lib/providers/core-module-config.provider.ts b/npm/ng-packs/packages/core/src/lib/providers/core-module-config.provider.ts index 7f17aa2528..cf8c260e39 100644 --- a/npm/ng-packs/packages/core/src/lib/providers/core-module-config.provider.ts +++ b/npm/ng-packs/packages/core/src/lib/providers/core-module-config.provider.ts @@ -10,6 +10,7 @@ import { OTHERS_GROUP, QUEUE_MANAGER, SORT_COMPARE_FUNC, + SortableItem, TENANT_KEY, compareFuncFactory, coreOptionsFactory, @@ -77,7 +78,7 @@ export function withOptions(options = {} as ABP.Root): CoreFeature { +export function withTitleStrategy(strategy: unknown): CoreFeature { return makeCoreFeature(CoreFeatureKind.TitleStrategy, [ { provide: TitleStrategy, @@ -87,7 +88,7 @@ export function withTitleStrategy(strategy: any): CoreFeature 1 | -1 | 0, ): CoreFeature { return makeCoreFeature(CoreFeatureKind.CompareFunctionFactory, [ { @@ -97,7 +98,7 @@ export function withCompareFuncFactory( ]); } -export function provideCoreModuleConfig(...features: CoreFeature[]) { +export function provideAbpCore(...features: CoreFeature[]) { const providers = [ LocaleProvider, CookieLanguageProvider, @@ -154,7 +155,7 @@ export function provideCoreModuleConfig(...features: CoreFeature { return { ngModule: AbpOAuthModule, - providers: [provideAbpOAuthConfig()], + providers: [provideAbpOAuth()], }; } } diff --git a/npm/ng-packs/packages/oauth/src/lib/providers/oauth-module-config.provider.ts b/npm/ng-packs/packages/oauth/src/lib/providers/oauth-module-config.provider.ts index ec02be4029..936aee113f 100644 --- a/npm/ng-packs/packages/oauth/src/lib/providers/oauth-module-config.provider.ts +++ b/npm/ng-packs/packages/oauth/src/lib/providers/oauth-module-config.provider.ts @@ -20,7 +20,7 @@ import { NavigateToManageProfileProvider } from './navigate-to-manage-profile.pr import { HTTP_INTERCEPTORS } from '@angular/common/http'; -export function provideAbpOAuthConfig() { +export function provideAbpOAuth() { const providers = [ { provide: AuthService, diff --git a/npm/ng-packs/packages/theme-shared/src/lib/providers/theme-shared-config.provider.ts b/npm/ng-packs/packages/theme-shared/src/lib/providers/theme-shared-config.provider.ts index 900bab18b6..0ca68316c7 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/providers/theme-shared-config.provider.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/providers/theme-shared-config.provider.ts @@ -18,7 +18,7 @@ import { NG_BOOTSTRAP_CONFIG_PROVIDERS } from './ng-bootstrap-config.provider'; import { THEME_SHARED_ROUTE_PROVIDERS } from './route.provider'; import { tenantNotFoundProvider } from './tenant-not-found.provider'; -export function provideThemeSharedConfig( +export function provideAbpThemeShared( { httpErrorConfig, validation = {}, confirmationIcons = {} } = {} as RootParams, ) { const providers = [ 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 675fa00a9e..8b81c14df2 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 @@ -20,7 +20,7 @@ import { LoadingDirective } from './directives/loading.directive'; import { NgxDatatableDefaultDirective } from './directives/ngx-datatable-default.directive'; import { NgxDatatableListDirective } from './directives/ngx-datatable-list.directive'; import { RootParams } from './models/common'; -import { provideThemeSharedConfig } from './providers'; +import { provideAbpThemeShared } from './providers'; import { PasswordComponent } from './components/password/password.component'; import { CardModule } from './components/card/card.module'; import { AbpVisibleDirective, DisabledDirective } from './directives'; @@ -86,7 +86,7 @@ export class ThemeSharedModule { ): ModuleWithProviders { return { ngModule: ThemeSharedModule, - providers: [provideThemeSharedConfig({ httpErrorConfig, validation, confirmationIcons })], + providers: [provideAbpThemeShared({ httpErrorConfig, validation, confirmationIcons })], }; } } From 401d47606ca597f117b017789e8efcd3d49b550b Mon Sep 17 00:00:00 2001 From: Sinan997 Date: Tue, 14 May 2024 12:57:28 +0300 Subject: [PATCH 07/14] add with methods to theme shared provider function --- .../providers/theme-shared-config.provider.ts | 125 ++++++++++++++---- .../src/lib/theme-shared.module.ts | 19 ++- 2 files changed, 118 insertions(+), 26 deletions(-) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/providers/theme-shared-config.provider.ts b/npm/ng-packs/packages/theme-shared/src/lib/providers/theme-shared-config.provider.ts index 0ca68316c7..8efe332d37 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/providers/theme-shared-config.provider.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/providers/theme-shared-config.provider.ts @@ -1,4 +1,4 @@ -import { APP_INITIALIZER, ErrorHandler, makeEnvironmentProviders } from '@angular/core'; +import { APP_INITIALIZER, Provider, makeEnvironmentProviders } from '@angular/core'; import { noop } from '@abp/ng.core'; import { NgbDateParserFormatter } from '@ng-bootstrap/ng-bootstrap'; import { @@ -8,19 +8,104 @@ import { VALIDATION_VALIDATE_ON_SUBMIT, } from '@ngx-validate/core'; import { DEFAULT_VALIDATION_BLUEPRINTS } from '../constants'; -import { DocumentDirHandlerService } from '../handlers'; -import { RootParams } from '../models'; +import { DocumentDirHandlerService, ErrorHandler } from '../handlers'; +import { HttpErrorConfig } from '../models'; import { THEME_SHARED_APPEND_CONTENT, HTTP_ERROR_CONFIG } from '../tokens'; -import { CONFIRMATION_ICONS, DEFAULT_CONFIRMATION_ICONS } from '../tokens/confirmation-icons.token'; +import { + CONFIRMATION_ICONS, + ConfirmationIcons, + DEFAULT_CONFIRMATION_ICONS, +} from '../tokens/confirmation-icons.token'; import { DateParserFormatter } from '../utils'; import { DEFAULT_HANDLERS_PROVIDERS } from './error-handlers.provider'; import { NG_BOOTSTRAP_CONFIG_PROVIDERS } from './ng-bootstrap-config.provider'; import { THEME_SHARED_ROUTE_PROVIDERS } from './route.provider'; import { tenantNotFoundProvider } from './tenant-not-found.provider'; +import { Validation } from '@ngx-validate/core'; + +export enum ThemeSharedFeatureKind { + HttpErrorConfig, + ValidationBluePrint, + ValidationErrorsFn, + ValidateOnSubmit, + Validation, + ConfirmationIcons, +} + +export interface ThemeSharedFeature { + ɵkind: KindT; + ɵproviders: Provider[]; +} + +function makeThemeSharedFeature( + kind: KindT, + providers: Provider[], +): ThemeSharedFeature { + return { + ɵkind: kind, + ɵproviders: providers, + }; +} + +export function withHttpErrorConfig( + httpErrorConfig: HttpErrorConfig, +): ThemeSharedFeature { + return makeThemeSharedFeature(ThemeSharedFeatureKind.HttpErrorConfig, [ + { + provide: HTTP_ERROR_CONFIG, + useValue: httpErrorConfig, + }, + ]); +} -export function provideAbpThemeShared( - { httpErrorConfig, validation = {}, confirmationIcons = {} } = {} as RootParams, -) { +export function withValidationBluePrint( + bluePrints: Validation.Blueprints, +): ThemeSharedFeature { + return makeThemeSharedFeature(ThemeSharedFeatureKind.ValidationBluePrint, [ + { + provide: VALIDATION_BLUEPRINTS, + useValue: { + ...DEFAULT_VALIDATION_BLUEPRINTS, + ...(bluePrints || {}), + }, + }, + ]); +} + +export function withValidationMapErrorsFn( + mapErrorsFn: Validation.MapErrorsFn, +): ThemeSharedFeature { + return makeThemeSharedFeature(ThemeSharedFeatureKind.ValidationErrorsFn, [ + { + provide: VALIDATION_MAP_ERRORS_FN, + useValue: mapErrorsFn || defaultMapErrorsFn, + }, + ]); +} + +export function withValidateOnSubmit( + validateOnSubmit: boolean, +): ThemeSharedFeature { + return makeThemeSharedFeature(ThemeSharedFeatureKind.ValidateOnSubmit, [ + { + provide: VALIDATION_VALIDATE_ON_SUBMIT, + useValue: validateOnSubmit, + }, + ]); +} + +export function withConfirmationIcon( + confirmationIcons: Partial, +): ThemeSharedFeature { + return makeThemeSharedFeature(ThemeSharedFeatureKind.HttpErrorConfig, [ + { + provide: CONFIRMATION_ICONS, + useValue: { ...DEFAULT_CONFIRMATION_ICONS, ...(confirmationIcons || {}) }, + }, + ]); +} + +export function provideAbpThemeShared(...features: ThemeSharedFeature[]) { const providers = [ { provide: APP_INITIALIZER, @@ -35,41 +120,33 @@ export function provideAbpThemeShared( deps: [THEME_SHARED_APPEND_CONTENT], useFactory: noop, }, - { provide: HTTP_ERROR_CONFIG, useValue: httpErrorConfig }, + { provide: HTTP_ERROR_CONFIG, useValue: undefined }, { provide: NgbDateParserFormatter, useClass: DateParserFormatter }, NG_BOOTSTRAP_CONFIG_PROVIDERS, { provide: VALIDATION_BLUEPRINTS, - useValue: { - ...DEFAULT_VALIDATION_BLUEPRINTS, - ...(validation.blueprints || {}), - }, + useValue: { ...DEFAULT_VALIDATION_BLUEPRINTS }, }, { provide: VALIDATION_MAP_ERRORS_FN, - useValue: validation.mapErrorsFn || defaultMapErrorsFn, + useValue: defaultMapErrorsFn, }, { provide: VALIDATION_VALIDATE_ON_SUBMIT, - useValue: validation.validateOnSubmit, + useValue: undefined, }, DocumentDirHandlerService, - { - provide: APP_INITIALIZER, - useFactory: noop, - multi: true, - deps: [DocumentDirHandlerService], - }, { provide: CONFIRMATION_ICONS, - useValue: { - ...DEFAULT_CONFIRMATION_ICONS, - ...(confirmationIcons || {}), - }, + useValue: { ...DEFAULT_CONFIRMATION_ICONS }, }, tenantNotFoundProvider, DEFAULT_HANDLERS_PROVIDERS, ]; + for (const feature of features) { + providers.push(...feature.ɵproviders); + } + return makeEnvironmentProviders(providers); } 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 8b81c14df2..c26c95807a 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 @@ -20,7 +20,14 @@ import { LoadingDirective } from './directives/loading.directive'; import { NgxDatatableDefaultDirective } from './directives/ngx-datatable-default.directive'; import { NgxDatatableListDirective } from './directives/ngx-datatable-list.directive'; import { RootParams } from './models/common'; -import { provideAbpThemeShared } from './providers'; +import { + provideAbpThemeShared, + withConfirmationIcon, + withHttpErrorConfig, + withValidateOnSubmit, + withValidationBluePrint, + withValidationMapErrorsFn, +} from './providers'; import { PasswordComponent } from './components/password/password.component'; import { CardModule } from './components/card/card.module'; import { AbpVisibleDirective, DisabledDirective } from './directives'; @@ -86,7 +93,15 @@ export class ThemeSharedModule { ): ModuleWithProviders { return { ngModule: ThemeSharedModule, - providers: [provideAbpThemeShared({ httpErrorConfig, validation, confirmationIcons })], + providers: [ + provideAbpThemeShared( + withHttpErrorConfig(httpErrorConfig), + withValidationBluePrint(validation.blueprints), + withValidationMapErrorsFn(validation.mapErrorsFn), + withValidateOnSubmit(validation.validateOnSubmit), + withConfirmationIcon(confirmationIcons), + ), + ], }; } } From 138fd39e2c4aa1b8222b88a2ec2d1e303b149c31 Mon Sep 17 00:00:00 2001 From: Sinan997 Date: Tue, 14 May 2024 20:34:09 +0300 Subject: [PATCH 08/14] update import path for config provider functions --- .../src/providers/account-config.provider.ts | 4 +-- .../packages/account/config/src/public-api.ts | 1 + .../account/config/src/utils/index.ts | 1 + .../providers/core-module-config.provider.ts | 28 +++++++------------ .../packages/core/src/lib/services/index.ts | 1 + .../packages/core/src/lib/tokens/index.ts | 3 +- .../src/lib/feature-management.module.ts | 3 +- .../feature-management-config.provider.ts | 2 +- .../src/providers/identity-config.provider.ts | 2 +- .../providers/oauth-module-config.provider.ts | 3 +- .../config/src/lib/providers/index.ts | 1 + .../setting-management-config.provider.ts | 10 ++++--- .../tenant-management-config.provider.ts | 2 +- .../providers/theme-shared-config.provider.ts | 17 ++++++----- .../theme-shared/src/lib/tokens/index.ts | 1 + 15 files changed, 41 insertions(+), 38 deletions(-) create mode 100644 npm/ng-packs/packages/account/config/src/utils/index.ts diff --git a/npm/ng-packs/packages/account/config/src/providers/account-config.provider.ts b/npm/ng-packs/packages/account/config/src/providers/account-config.provider.ts index 07d9f5aa22..49304cdfc2 100644 --- a/npm/ng-packs/packages/account/config/src/providers/account-config.provider.ts +++ b/npm/ng-packs/packages/account/config/src/providers/account-config.provider.ts @@ -1,7 +1,7 @@ import { NAVIGATE_TO_MANAGE_PROFILE } from '@abp/ng.core'; import { makeEnvironmentProviders, Injector } from '@angular/core'; -import { navigateToManageProfileFactory } from '../utils/factories'; -import { ACCOUNT_ROUTE_PROVIDERS } from './route.provider'; +import { navigateToManageProfileFactory } from '../utils'; +import { ACCOUNT_ROUTE_PROVIDERS } from './'; export function provideAccountConfig() { return makeEnvironmentProviders([ diff --git a/npm/ng-packs/packages/account/config/src/public-api.ts b/npm/ng-packs/packages/account/config/src/public-api.ts index cb4f854a64..47a2c8d3d7 100644 --- a/npm/ng-packs/packages/account/config/src/public-api.ts +++ b/npm/ng-packs/packages/account/config/src/public-api.ts @@ -1,3 +1,4 @@ export * from './account-config.module'; export * from './enums'; export * from './providers'; +export * from './utils'; diff --git a/npm/ng-packs/packages/account/config/src/utils/index.ts b/npm/ng-packs/packages/account/config/src/utils/index.ts new file mode 100644 index 0000000000..3a94418e3f --- /dev/null +++ b/npm/ng-packs/packages/account/config/src/utils/index.ts @@ -0,0 +1 @@ +export * from './factories'; diff --git a/npm/ng-packs/packages/core/src/lib/providers/core-module-config.provider.ts b/npm/ng-packs/packages/core/src/lib/providers/core-module-config.provider.ts index cf8c260e39..b07697b135 100644 --- a/npm/ng-packs/packages/core/src/lib/providers/core-module-config.provider.ts +++ b/npm/ng-packs/packages/core/src/lib/providers/core-module-config.provider.ts @@ -1,32 +1,24 @@ +import { makeEnvironmentProviders, APP_INITIALIZER, Injector, Provider } from '@angular/core'; +import { TitleStrategy } from '@angular/router'; import { - ABP, - AuthErrorFilterService, CORE_OPTIONS, - DEFAULT_DYNAMIC_LAYOUTS, - DefaultQueueManager, LOCALIZATIONS, - LocalStorageListenerService, - LocalizationService, + DYNAMIC_LAYOUTS_TOKEN, OTHERS_GROUP, QUEUE_MANAGER, SORT_COMPARE_FUNC, - SortableItem, TENANT_KEY, compareFuncFactory, coreOptionsFactory, - getInitialData, - localeInitializer, localizationContributor, - noop, -} from '@abp/ng.core'; -import { makeEnvironmentProviders, APP_INITIALIZER, Injector, Provider } from '@angular/core'; -import { TitleStrategy } from '@angular/router'; +} from '../tokens'; import { RoutesHandler } from '../handlers'; -import { AbpTitleStrategy } from '../services/title-strategy.service'; -import { DYNAMIC_LAYOUTS_TOKEN } from '../tokens/dynamic-layout.token'; -import { CookieLanguageProvider } from './cookie-language.provider'; -import { IncludeLocalizationResourcesProvider } from './include-localization-resources.provider'; -import { LocaleProvider } from './locale.provider'; +import { ABP, SortableItem } from '../models'; +import { AuthErrorFilterService } from '../abstracts'; +import { DEFAULT_DYNAMIC_LAYOUTS } from '../constants'; +import { LocalizationService, LocalStorageListenerService, AbpTitleStrategy } from '../services'; +import { DefaultQueueManager, getInitialData, localeInitializer, noop } from '../utils'; +import { CookieLanguageProvider, IncludeLocalizationResourcesProvider, LocaleProvider } from './'; export enum CoreFeatureKind { Options, diff --git a/npm/ng-packs/packages/core/src/lib/services/index.ts b/npm/ng-packs/packages/core/src/lib/services/index.ts index a20ae907ae..c47bef3106 100644 --- a/npm/ng-packs/packages/core/src/lib/services/index.ts +++ b/npm/ng-packs/packages/core/src/lib/services/index.ts @@ -22,3 +22,4 @@ export * from './local-storage.service'; export * from './window.service'; export * from './internet-connection-service'; export * from './local-storage-listener.service'; +export * from './title-strategy.service'; diff --git a/npm/ng-packs/packages/core/src/lib/tokens/index.ts b/npm/ng-packs/packages/core/src/lib/tokens/index.ts index 7d0422ad7d..d4e4314c52 100644 --- a/npm/ng-packs/packages/core/src/lib/tokens/index.ts +++ b/npm/ng-packs/packages/core/src/lib/tokens/index.ts @@ -14,4 +14,5 @@ export * from './check-authentication-state'; export * from './http-context.token'; export * from './others-group.token'; export * from './tenant-not-found-by-name'; -export * from './compare-func.token' +export * from './compare-func.token'; +export * from './dynamic-layout.token'; 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 7db57f2c23..fd3ab95386 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 @@ -15,7 +15,8 @@ const exported = [ /** * @deprecated FeatureManagementModule is deprecated . - * @description use `provideFeatureManagementConfig` *function* for config settings. You can import directives and pipes directly, it has been switched to standalone. + * @description use `provideFeatureManagementConfig` *function* for config settings. + * You can import directives and pipes directly whichs were belongs to FeatureManagementModule are switched to standalone. */ @NgModule({ imports: [CoreModule, ThemeSharedModule, NgbNavModule, ...exported], diff --git a/npm/ng-packs/packages/feature-management/src/lib/providers/feature-management-config.provider.ts b/npm/ng-packs/packages/feature-management/src/lib/providers/feature-management-config.provider.ts index 39655563f5..9df930a361 100644 --- a/npm/ng-packs/packages/feature-management/src/lib/providers/feature-management-config.provider.ts +++ b/npm/ng-packs/packages/feature-management/src/lib/providers/feature-management-config.provider.ts @@ -1,5 +1,5 @@ import { makeEnvironmentProviders } from '@angular/core'; -import { FEATURE_MANAGEMENT_SETTINGS_PROVIDERS } from './feature-management-settings.provider'; +import { FEATURE_MANAGEMENT_SETTINGS_PROVIDERS } from './'; export function provideFeatureManagementConfig() { return makeEnvironmentProviders([FEATURE_MANAGEMENT_SETTINGS_PROVIDERS]); diff --git a/npm/ng-packs/packages/identity/config/src/providers/identity-config.provider.ts b/npm/ng-packs/packages/identity/config/src/providers/identity-config.provider.ts index b7c6e52ea1..20a56dde0f 100644 --- a/npm/ng-packs/packages/identity/config/src/providers/identity-config.provider.ts +++ b/npm/ng-packs/packages/identity/config/src/providers/identity-config.provider.ts @@ -1,5 +1,5 @@ import { makeEnvironmentProviders } from '@angular/core'; -import { IDENTITY_ROUTE_PROVIDERS } from './route.provider'; +import { IDENTITY_ROUTE_PROVIDERS } from './'; export function provideIdentityConfig() { return makeEnvironmentProviders([IDENTITY_ROUTE_PROVIDERS]); diff --git a/npm/ng-packs/packages/oauth/src/lib/providers/oauth-module-config.provider.ts b/npm/ng-packs/packages/oauth/src/lib/providers/oauth-module-config.provider.ts index 936aee113f..021ad59a05 100644 --- a/npm/ng-packs/packages/oauth/src/lib/providers/oauth-module-config.provider.ts +++ b/npm/ng-packs/packages/oauth/src/lib/providers/oauth-module-config.provider.ts @@ -10,6 +10,7 @@ import { noop, } from '@abp/ng.core'; import { APP_INITIALIZER, Provider, makeEnvironmentProviders } from '@angular/core'; +import { HTTP_INTERCEPTORS } from '@angular/common/http'; import { OAuthModule, OAuthStorage } from 'angular-oauth2-oidc'; import { AbpOAuthGuard, abpOAuthGuard } from '../guards'; import { OAuthConfigurationHandler } from '../handlers'; @@ -18,8 +19,6 @@ import { AbpOAuthService, OAuthErrorFilterService } from '../services'; import { pipeToLogin, checkAccessToken } from '../utils'; import { NavigateToManageProfileProvider } from './navigate-to-manage-profile.provider'; -import { HTTP_INTERCEPTORS } from '@angular/common/http'; - export function provideAbpOAuth() { const providers = [ { diff --git a/npm/ng-packs/packages/setting-management/config/src/lib/providers/index.ts b/npm/ng-packs/packages/setting-management/config/src/lib/providers/index.ts index a9d0434c23..c0c77b7214 100644 --- a/npm/ng-packs/packages/setting-management/config/src/lib/providers/index.ts +++ b/npm/ng-packs/packages/setting-management/config/src/lib/providers/index.ts @@ -2,3 +2,4 @@ export * from './route.provider'; export * from './setting-tab.provider'; export * from './visible.provider'; export * from './setting-management-config.provider'; +export * from './features.token'; diff --git a/npm/ng-packs/packages/setting-management/config/src/lib/providers/setting-management-config.provider.ts b/npm/ng-packs/packages/setting-management/config/src/lib/providers/setting-management-config.provider.ts index 291d48aa36..b981bc5147 100644 --- a/npm/ng-packs/packages/setting-management/config/src/lib/providers/setting-management-config.provider.ts +++ b/npm/ng-packs/packages/setting-management/config/src/lib/providers/setting-management-config.provider.ts @@ -1,8 +1,10 @@ import { makeEnvironmentProviders } from '@angular/core'; -import { SETTING_MANAGEMENT_FEATURES_PROVIDERS } from './features.token'; -import { SETTING_MANAGEMENT_ROUTE_PROVIDERS } from './route.provider'; -import { SETTING_MANAGEMENT_SETTING_TAB_PROVIDERS } from './setting-tab.provider'; -import { SETTING_MANAGEMENT_VISIBLE_PROVIDERS } from './visible.provider'; +import { + SETTING_MANAGEMENT_FEATURES_PROVIDERS, + SETTING_MANAGEMENT_ROUTE_PROVIDERS, + SETTING_MANAGEMENT_SETTING_TAB_PROVIDERS, + SETTING_MANAGEMENT_VISIBLE_PROVIDERS, +} from './'; export function provideSettingManagementConfig() { return makeEnvironmentProviders([ diff --git a/npm/ng-packs/packages/tenant-management/config/src/providers/tenant-management-config.provider.ts b/npm/ng-packs/packages/tenant-management/config/src/providers/tenant-management-config.provider.ts index b2322ecacb..c5599e410c 100644 --- a/npm/ng-packs/packages/tenant-management/config/src/providers/tenant-management-config.provider.ts +++ b/npm/ng-packs/packages/tenant-management/config/src/providers/tenant-management-config.provider.ts @@ -1,5 +1,5 @@ import { makeEnvironmentProviders } from '@angular/core'; -import { TENANT_MANAGEMENT_ROUTE_PROVIDERS } from './route.provider'; +import { TENANT_MANAGEMENT_ROUTE_PROVIDERS } from './'; export function provideTenantManagementConfig() { return makeEnvironmentProviders([TENANT_MANAGEMENT_ROUTE_PROVIDERS]); diff --git a/npm/ng-packs/packages/theme-shared/src/lib/providers/theme-shared-config.provider.ts b/npm/ng-packs/packages/theme-shared/src/lib/providers/theme-shared-config.provider.ts index 8efe332d37..b5e9ba9ce1 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/providers/theme-shared-config.provider.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/providers/theme-shared-config.provider.ts @@ -6,22 +6,25 @@ import { VALIDATION_MAP_ERRORS_FN, defaultMapErrorsFn, VALIDATION_VALIDATE_ON_SUBMIT, + Validation, } from '@ngx-validate/core'; import { DEFAULT_VALIDATION_BLUEPRINTS } from '../constants'; import { DocumentDirHandlerService, ErrorHandler } from '../handlers'; import { HttpErrorConfig } from '../models'; -import { THEME_SHARED_APPEND_CONTENT, HTTP_ERROR_CONFIG } from '../tokens'; import { + THEME_SHARED_APPEND_CONTENT, + HTTP_ERROR_CONFIG, CONFIRMATION_ICONS, ConfirmationIcons, DEFAULT_CONFIRMATION_ICONS, -} from '../tokens/confirmation-icons.token'; +} from '../tokens'; import { DateParserFormatter } from '../utils'; -import { DEFAULT_HANDLERS_PROVIDERS } from './error-handlers.provider'; -import { NG_BOOTSTRAP_CONFIG_PROVIDERS } from './ng-bootstrap-config.provider'; -import { THEME_SHARED_ROUTE_PROVIDERS } from './route.provider'; -import { tenantNotFoundProvider } from './tenant-not-found.provider'; -import { Validation } from '@ngx-validate/core'; +import { + DEFAULT_HANDLERS_PROVIDERS, + NG_BOOTSTRAP_CONFIG_PROVIDERS, + THEME_SHARED_ROUTE_PROVIDERS, + tenantNotFoundProvider, +} from './'; export enum ThemeSharedFeatureKind { HttpErrorConfig, diff --git a/npm/ng-packs/packages/theme-shared/src/lib/tokens/index.ts b/npm/ng-packs/packages/theme-shared/src/lib/tokens/index.ts index 98edb1a87b..b38eb7ae3e 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/tokens/index.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/tokens/index.ts @@ -2,3 +2,4 @@ export * from './append-content.token'; export * from './http-error.token'; export * from './ngx-datatable-messages.token'; export * from './suppress-unsaved-changes-warning.token'; +export * from './confirmation-icons.token'; From eeb44dba5b19fb7cae961b66787ec735e0b6bec2 Mon Sep 17 00:00:00 2001 From: Sinan997 Date: Wed, 15 May 2024 17:45:14 +0300 Subject: [PATCH 09/14] add provider function for theme basic config --- .../theme-basic/src/lib/providers/index.ts | 1 + .../providers/theme-basic-config.provider.ts | 39 ++++++++++++++++ .../theme-basic/src/lib/theme-basic.module.ts | 44 ++++--------------- .../providers/theme-shared-config.provider.ts | 6 +++ .../src/lib/theme-shared.module.ts | 2 +- 5 files changed, 55 insertions(+), 37 deletions(-) create mode 100644 npm/ng-packs/packages/theme-basic/src/lib/providers/theme-basic-config.provider.ts diff --git a/npm/ng-packs/packages/theme-basic/src/lib/providers/index.ts b/npm/ng-packs/packages/theme-basic/src/lib/providers/index.ts index d3028eab68..d1dc780142 100644 --- a/npm/ng-packs/packages/theme-basic/src/lib/providers/index.ts +++ b/npm/ng-packs/packages/theme-basic/src/lib/providers/index.ts @@ -1,3 +1,4 @@ export * from './nav-item.provider'; export * from './styles.provider'; export * from './user-menu.provider'; +export * from './theme-basic-config.provider'; diff --git a/npm/ng-packs/packages/theme-basic/src/lib/providers/theme-basic-config.provider.ts b/npm/ng-packs/packages/theme-basic/src/lib/providers/theme-basic-config.provider.ts new file mode 100644 index 0000000000..c75b5b0b6d --- /dev/null +++ b/npm/ng-packs/packages/theme-basic/src/lib/providers/theme-basic-config.provider.ts @@ -0,0 +1,39 @@ +import { APP_INITIALIZER, makeEnvironmentProviders } from '@angular/core'; +import { noop } from '@abp/ng.core'; +import { + VALIDATION_ERROR_TEMPLATE, + VALIDATION_TARGET_SELECTOR, + VALIDATION_INVALID_CLASSES, +} from '@ngx-validate/core'; +import { LazyStyleHandler } from '../handlers'; +import { BASIC_THEME_NAV_ITEM_PROVIDERS } from './nav-item.provider'; +import { BASIC_THEME_STYLES_PROVIDERS } from './styles.provider'; +import { BASIC_THEME_USER_MENU_PROVIDERS } from './user-menu.provider'; +import { ValidationErrorComponent } from '../components'; + +export function provideThemeBasicConfig() { + return makeEnvironmentProviders([ + BASIC_THEME_NAV_ITEM_PROVIDERS, + BASIC_THEME_USER_MENU_PROVIDERS, + BASIC_THEME_STYLES_PROVIDERS, + { + provide: VALIDATION_ERROR_TEMPLATE, + useValue: ValidationErrorComponent, + }, + { + provide: VALIDATION_TARGET_SELECTOR, + useValue: '.form-group', + }, + { + provide: VALIDATION_INVALID_CLASSES, + useValue: 'is-invalid', + }, + LazyStyleHandler, + { + provide: APP_INITIALIZER, + useFactory: noop, + multi: true, + deps: [LazyStyleHandler], + }, + ]); +} 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 e04ed6dde1..d959509dfd 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,13 +1,8 @@ -import { CoreModule, noop } from '@abp/ng.core'; +import { CoreModule } from '@abp/ng.core'; import { ThemeSharedModule } from '@abp/ng.theme.shared'; -import { APP_INITIALIZER, ModuleWithProviders, NgModule } from '@angular/core'; +import { ModuleWithProviders, NgModule } from '@angular/core'; import { NgbCollapseModule, NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap'; -import { - NgxValidateCoreModule, - VALIDATION_ERROR_TEMPLATE, - VALIDATION_INVALID_CLASSES, - VALIDATION_TARGET_SELECTOR, -} from '@ngx-validate/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'; @@ -20,10 +15,7 @@ import { NavItemsComponent } from './components/nav-items/nav-items.component'; import { PageAlertContainerComponent } from './components/page-alert-container/page-alert-container.component'; import { RoutesComponent } from './components/routes/routes.component'; import { ValidationErrorComponent } from './components/validation-error/validation-error.component'; -import { LazyStyleHandler } from './handlers/lazy-style.handler'; -import { BASIC_THEME_NAV_ITEM_PROVIDERS } from './providers/nav-item.provider'; -import { BASIC_THEME_STYLES_PROVIDERS } from './providers/styles.provider'; -import { BASIC_THEME_USER_MENU_PROVIDERS } from './providers/user-menu.provider'; +import { provideThemeBasicConfig } from './providers'; export const LAYOUTS = [ApplicationLayoutComponent, AccountLayoutComponent, EmptyLayoutComponent]; @@ -65,33 +57,13 @@ export class BaseThemeBasicModule {} imports: [BaseThemeBasicModule], }) export class ThemeBasicModule { + /** + * @deprecated forRoot method is deprecated, use `provideThemeBasicConfig` *function* for config settings. + */ static forRoot(): ModuleWithProviders { return { ngModule: ThemeBasicModule, - providers: [ - BASIC_THEME_NAV_ITEM_PROVIDERS, - BASIC_THEME_USER_MENU_PROVIDERS, - BASIC_THEME_STYLES_PROVIDERS, - { - provide: VALIDATION_ERROR_TEMPLATE, - useValue: ValidationErrorComponent, - }, - { - provide: VALIDATION_TARGET_SELECTOR, - useValue: '.form-group', - }, - { - provide: VALIDATION_INVALID_CLASSES, - useValue: 'is-invalid', - }, - LazyStyleHandler, - { - provide: APP_INITIALIZER, - useFactory: noop, - multi: true, - deps: [LazyStyleHandler], - }, - ], + providers: [provideThemeBasicConfig()], }; } } diff --git a/npm/ng-packs/packages/theme-shared/src/lib/providers/theme-shared-config.provider.ts b/npm/ng-packs/packages/theme-shared/src/lib/providers/theme-shared-config.provider.ts index b5e9ba9ce1..ad29327e18 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/providers/theme-shared-config.provider.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/providers/theme-shared-config.provider.ts @@ -139,6 +139,12 @@ export function provideAbpThemeShared(...features: ThemeSharedFeature Date: Wed, 22 May 2024 11:47:31 +0300 Subject: [PATCH 10/14] use `provideAbpCore` function instead of forRoot pattern in permission guard test file --- .../packages/core/src/lib/tests/permission.guard.spec.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/npm/ng-packs/packages/core/src/lib/tests/permission.guard.spec.ts b/npm/ng-packs/packages/core/src/lib/tests/permission.guard.spec.ts index 8b2a99476a..adbaa86071 100644 --- a/npm/ng-packs/packages/core/src/lib/tests/permission.guard.spec.ts +++ b/npm/ng-packs/packages/core/src/lib/tests/permission.guard.spec.ts @@ -14,7 +14,7 @@ import { HttpErrorReporterService } from '../services/http-error-reporter.servic import { PermissionService } from '../services/permission.service'; import { RoutesService } from '../services/routes.service'; import { CORE_OPTIONS } from '../tokens/options.token'; -import { IncludeLocalizationResourcesProvider } from '../providers'; +import { IncludeLocalizationResourcesProvider, provideAbpCore, withOptions } from '../providers'; import { TestBed } from '@angular/core/testing'; import { RouterTestingHarness } from '@angular/router/testing'; import { OTHERS_GROUP } from '../tokens'; @@ -155,12 +155,13 @@ describe('authGuard', () => { permissionService = createSpyObject(PermissionService); TestBed.configureTestingModule({ - imports: [HttpClientTestingModule, CoreModule.forRoot()], + imports: [HttpClientTestingModule], providers: [ { provide: AuthService, useValue: mockOAuthService }, { provide: PermissionService, useValue: permissionService }, { provide: HttpErrorReporterService, useValue: httpErrorReporter }, provideRouter(routes), + provideAbpCore(withOptions()), ], }); }); From 5caf22fbb6c930ee1c67083b14e4c8991d51226c Mon Sep 17 00:00:00 2001 From: Sinan997 Date: Wed, 22 May 2024 17:56:57 +0300 Subject: [PATCH 11/14] Update app.module.ts to import SettingManagementConfigModule --- npm/ng-packs/apps/dev-app/src/app/app.module.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/npm/ng-packs/apps/dev-app/src/app/app.module.ts b/npm/ng-packs/apps/dev-app/src/app/app.module.ts index 707f1f846f..09817fea0e 100644 --- a/npm/ng-packs/apps/dev-app/src/app/app.module.ts +++ b/npm/ng-packs/apps/dev-app/src/app/app.module.ts @@ -11,7 +11,7 @@ import { import { ThemeLeptonXModule } from '@abp/ng.theme.lepton-x'; import { SideMenuLayoutModule } from '@abp/ng.theme.lepton-x/layouts'; import { provideAbpOAuth } from '@abp/ng.oauth'; -import { provideSettingManagementConfig } from '@abp/ng.setting-management/config'; +import { SettingManagementConfigModule, provideSettingManagementConfig } from '@abp/ng.setting-management/config'; import { provideAccountConfig } from '@abp/ng.account/config'; import { provideIdentityConfig } from '@abp/ng.identity/config'; import { provideTenantManagementConfig } from '@abp/ng.tenant-management/config'; @@ -29,6 +29,7 @@ import { APP_ROUTE_PROVIDER } from './route.provider'; AppRoutingModule, CoreModule, ThemeSharedModule, + SettingManagementConfigModule, ThemeLeptonXModule.forRoot(), SideMenuLayoutModule.forRoot(), AccountLayoutModule.forRoot(), From cc5f9d7666ca7416a74dec6ade4b54dfdff08c95 Mon Sep 17 00:00:00 2001 From: sumeyyeKurtulus Date: Thu, 23 May 2024 14:47:40 +0300 Subject: [PATCH 12/14] fix: localization scope for SavedSuccessfully key --- .../feature-management/feature-management.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 01a6eee6c4..972daeb8c5 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 @@ -139,7 +139,7 @@ export class FeatureManagementComponent .subscribe(() => { this.visible = false; - this.toasterService.success('AbpFeatureManagement::SavedSuccessfully'); + this.toasterService.success('AbpUi::SavedSuccessfully'); if (!this.providerKey) { // to refresh host's features this.configState.refreshAppState().subscribe(); From 48ec5f7bd28ce03611ac6b2206e8600b7487ca99 Mon Sep 17 00:00:00 2001 From: sumeyyeKurtulus Date: Thu, 23 May 2024 15:10:27 +0300 Subject: [PATCH 13/14] update: unused import is removed from tests --- .../packages/core/src/lib/tests/permission.guard.spec.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/npm/ng-packs/packages/core/src/lib/tests/permission.guard.spec.ts b/npm/ng-packs/packages/core/src/lib/tests/permission.guard.spec.ts index adbaa86071..68e47053fd 100644 --- a/npm/ng-packs/packages/core/src/lib/tests/permission.guard.spec.ts +++ b/npm/ng-packs/packages/core/src/lib/tests/permission.guard.spec.ts @@ -19,7 +19,6 @@ import { TestBed } from '@angular/core/testing'; import { RouterTestingHarness } from '@angular/router/testing'; import { OTHERS_GROUP } from '../tokens'; import { SORT_COMPARE_FUNC, compareFuncFactory } from '../tokens/compare-func.token'; -import { CoreModule } from '../core.module'; import { AuthService } from '../abstracts'; describe('PermissionGuard', () => { From e56fbd022f40841c79914d9169eba6c4fb267852 Mon Sep 17 00:00:00 2001 From: Sinan997 Date: Thu, 23 May 2024 16:30:51 +0300 Subject: [PATCH 14/14] remove `SettingManagementConfigModule` from imports in `app.module.ts` --- npm/ng-packs/apps/dev-app/src/app/app.module.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/npm/ng-packs/apps/dev-app/src/app/app.module.ts b/npm/ng-packs/apps/dev-app/src/app/app.module.ts index 09817fea0e..707f1f846f 100644 --- a/npm/ng-packs/apps/dev-app/src/app/app.module.ts +++ b/npm/ng-packs/apps/dev-app/src/app/app.module.ts @@ -11,7 +11,7 @@ import { import { ThemeLeptonXModule } from '@abp/ng.theme.lepton-x'; import { SideMenuLayoutModule } from '@abp/ng.theme.lepton-x/layouts'; import { provideAbpOAuth } from '@abp/ng.oauth'; -import { SettingManagementConfigModule, provideSettingManagementConfig } from '@abp/ng.setting-management/config'; +import { provideSettingManagementConfig } from '@abp/ng.setting-management/config'; import { provideAccountConfig } from '@abp/ng.account/config'; import { provideIdentityConfig } from '@abp/ng.identity/config'; import { provideTenantManagementConfig } from '@abp/ng.tenant-management/config'; @@ -29,7 +29,6 @@ import { APP_ROUTE_PROVIDER } from './route.provider'; AppRoutingModule, CoreModule, ThemeSharedModule, - SettingManagementConfigModule, ThemeLeptonXModule.forRoot(), SideMenuLayoutModule.forRoot(), AccountLayoutModule.forRoot(),