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); -}