diff --git a/app/src/app/app.config.ts b/app/src/app/app.config.ts index d47e82b9a..d091387c9 100644 --- a/app/src/app/app.config.ts +++ b/app/src/app/app.config.ts @@ -22,11 +22,20 @@ * from Hyland Software. If not, see . */ -import { importProvidersFrom, ApplicationConfig } from '@angular/core'; +import { importProvidersFrom, ApplicationConfig, Provider, EnvironmentProviders } from '@angular/core'; import { provideNoopAnimations, provideAnimations } from '@angular/platform-browser/animations'; -import { AuthGuard, CoreModule, AuthModule, provideTranslations } from '@alfresco/adf-core'; -import { AppService } from '@alfresco/aca-shared'; -import { AppExtensionsModule } from './extensions.module'; +import { + AuthGuard, + AuthModule, + provideTranslations, + provideAppConfig, + FORM_FIELD_MODEL_RENDER_MIDDLEWARE, + DecimalRenderMiddlewareService, + AuthenticationService, + TranslateLoaderService +} from '@alfresco/adf-core'; +import { AppService, provideContentAppExtensions } from '@alfresco/aca-shared'; +import { provideApplicationExtensions } from './extensions.module'; import { environment } from '../environments/environment'; import { registerLocaleData } from '@angular/common'; import localeFr from '@angular/common/locales/fr'; @@ -46,10 +55,14 @@ import localeFi from '@angular/common/locales/fi'; import localeDa from '@angular/common/locales/da'; import localeSv from '@angular/common/locales/sv'; import { provideRouter, withHashLocation } from '@angular/router'; -import { CONTENT_LAYOUT_ROUTES, ContentServiceExtensionModule, ContentUrlService, provideExtensions } from '@alfresco/aca-content'; +import { CONTENT_LAYOUT_ROUTES, ContentServiceExtensionModule, ContentUrlService } from '@alfresco/aca-content'; import { ContentVersionService } from '@alfresco/adf-content-services'; import { SHELL_APP_SERVICE, SHELL_AUTH_TOKEN, provideShellRoutes } from '@alfresco/adf-core/shell'; import { APP_ROUTES } from './app.routes'; +import { HTTP_INTERCEPTORS, HttpClient, provideHttpClient, withInterceptorsFromDi, withXsrfConfiguration } from '@angular/common/http'; +import { MAT_SNACK_BAR_DEFAULT_OPTIONS } from '@angular/material/snack-bar'; +import { Authentication, AuthenticationInterceptor } from '@alfresco/adf-core/auth'; +import { provideTranslateService, TranslateLoader } from '@ngx-translate/core'; registerLocaleData(localeFr); registerLocaleData(localeDe); @@ -68,11 +81,42 @@ registerLocaleData(localeFi); registerLocaleData(localeDa); registerLocaleData(localeSv); +/* The replacement for the CoreModule.forRoot() */ +function provideAdfCore(): (Provider | EnvironmentProviders)[] { + return [ + provideAppConfig(), + provideHttpClient(withInterceptorsFromDi(), withXsrfConfiguration({ cookieName: 'CSRF-TOKEN', headerName: 'X-CSRF-TOKEN' })), + { provide: HTTP_INTERCEPTORS, useClass: AuthenticationInterceptor, multi: true }, + { provide: Authentication, useClass: AuthenticationService }, + { + provide: MAT_SNACK_BAR_DEFAULT_OPTIONS, + useValue: { + duration: 10000 + } + }, + { + provide: FORM_FIELD_MODEL_RENDER_MIDDLEWARE, + useClass: DecimalRenderMiddlewareService, + multi: true + } + ]; +} + export const AppConfig: ApplicationConfig = { providers: [ importProvidersFrom(AuthModule.forRoot({ useHash: true })), - importProvidersFrom(CoreModule.forRoot(), AppExtensionsModule, ContentServiceExtensionModule), - provideExtensions(), + importProvidersFrom(ContentServiceExtensionModule), + provideTranslateService({ + loader: { + provide: TranslateLoader, + useClass: TranslateLoaderService, + deps: [HttpClient] + }, + defaultLanguage: 'en' + }), + provideAdfCore(), + provideContentAppExtensions(), + provideApplicationExtensions(), provideRouter(APP_ROUTES, withHashLocation()), environment.e2e ? provideNoopAnimations() : provideAnimations(), provideShellRoutes(CONTENT_LAYOUT_ROUTES), diff --git a/app/src/app/extensions.module.ts b/app/src/app/extensions.module.ts index 3c5ed3f2e..c57c5500f 100644 --- a/app/src/app/extensions.module.ts +++ b/app/src/app/extensions.module.ts @@ -22,18 +22,25 @@ * from Hyland Software. If not, see . */ -import { NgModule } from '@angular/core'; -import { AcaFolderRulesModule } from '@alfresco/aca-content/folder-rules'; -import { AosExtensionModule } from '@alfresco/aca-content/ms-office'; -import { AcaAboutModule, DEV_MODE_TOKEN, PACKAGE_JSON } from '@alfresco/aca-content/about'; +import { EnvironmentProviders, NgModule, Provider } from '@angular/core'; +import { provideFolderRulesExtension } from '@alfresco/aca-content/folder-rules'; +import { provideAosExtension } from '@alfresco/aca-content/ms-office'; +import { DEV_MODE_TOKEN, PACKAGE_JSON, provideAboutExtension } from '@alfresco/aca-content/about'; import { environment } from '../environments/environment'; import packageJson from 'package.json'; -@NgModule({ - imports: [AosExtensionModule, AcaAboutModule, AcaFolderRulesModule], - providers: [ +export function provideApplicationExtensions(): (Provider | EnvironmentProviders)[] { + return [ + ...provideAboutExtension(), + ...provideAosExtension(), + ...provideFolderRulesExtension(), { provide: PACKAGE_JSON, useValue: packageJson }, { provide: DEV_MODE_TOKEN, useValue: !environment.production } - ] + ]; +} + +/* @deprecated use `provideApplicationExtensions()` provider api instead */ +@NgModule({ + providers: [...provideApplicationExtensions()] }) export class AppExtensionsModule {} diff --git a/projects/aca-content/about/src/aca-about.module.ts b/projects/aca-content/about/src/aca-about.module.ts index 187a6b6d5..1914accfa 100644 --- a/projects/aca-content/about/src/aca-about.module.ts +++ b/projects/aca-content/about/src/aca-about.module.ts @@ -22,17 +22,23 @@ * from Hyland Software. If not, see . */ -import { NgModule } from '@angular/core'; +import { NgModule, Provider } from '@angular/core'; import { AboutComponent } from './about.component'; -import { ExtensionService, provideExtensionConfig } from '@alfresco/adf-extensions'; +import { provideExtensionConfig, provideExtensions } from '@alfresco/adf-extensions'; -@NgModule({ - providers: [provideExtensionConfig(['about.plugin.json'])] -}) -export class AcaAboutModule { - constructor(extensions: ExtensionService) { - extensions.setComponents({ - 'app.about.component': AboutComponent - }); - } +export function provideAboutExtension(): Provider[] { + return [ + provideExtensionConfig(['about.plugin.json']), + provideExtensions({ + components: { + 'app.about.component': AboutComponent + } + }) + ]; } + +/* @deprecated use `provideAboutExtension()` provider api instead */ +@NgModule({ + providers: [...provideAboutExtension()] +}) +export class AcaAboutModule {} diff --git a/projects/aca-content/folder-rules/src/folder-rules.module.ts b/projects/aca-content/folder-rules/src/folder-rules.module.ts index 777b238dd..168cfbe9c 100644 --- a/projects/aca-content/folder-rules/src/folder-rules.module.ts +++ b/projects/aca-content/folder-rules/src/folder-rules.module.ts @@ -23,14 +23,14 @@ */ import { provideTranslations } from '@alfresco/adf-core'; -import { ExtensionService, provideExtensionConfig } from '@alfresco/adf-extensions'; -import { NgModule } from '@angular/core'; +import { provideExtensionConfig, provideExtensions } from '@alfresco/adf-extensions'; +import { EnvironmentProviders, NgModule, Provider } from '@angular/core'; import * as rules from './folder-rules.rules'; import { provideRouter, Routes } from '@angular/router'; import { ManageRulesSmartComponent } from './manage-rules/manage-rules.smart-component'; import { PluginEnabledGuard } from '@alfresco/aca-shared'; -const routes: Routes = [ +export const FOLDER_RULES_ROUTES: Routes = [ { path: 'rules', component: ManageRulesSmartComponent, @@ -41,13 +41,21 @@ const routes: Routes = [ } ]; -@NgModule({ - providers: [provideTranslations('folder-rules', 'assets/folder-rules'), provideExtensionConfig(['folder-rules.plugin.json']), provideRouter(routes)] -}) -export class AcaFolderRulesModule { - constructor(extensions: ExtensionService) { - extensions.setEvaluators({ - 'rules.isFolderRulesEnabled': rules.isFolderRulesEnabled - }); - } +export function provideFolderRulesExtension(): (Provider | EnvironmentProviders)[] { + return [ + provideTranslations('folder-rules', 'assets/folder-rules'), + provideExtensionConfig(['folder-rules.plugin.json']), + provideRouter(FOLDER_RULES_ROUTES), + provideExtensions({ + evaluators: { + 'rules.isFolderRulesEnabled': rules.isFolderRulesEnabled + } + }) + ]; } + +/** @deprecated use `provideFolderRulesExtension()` instead **/ +@NgModule({ + providers: [...provideFolderRulesExtension()] +}) +export class AcaFolderRulesModule {} diff --git a/projects/aca-content/ms-office/src/aos-extension.module.ts b/projects/aca-content/ms-office/src/aos-extension.module.ts index 63e5f184f..38fd1ec88 100644 --- a/projects/aca-content/ms-office/src/aos-extension.module.ts +++ b/projects/aca-content/ms-office/src/aos-extension.module.ts @@ -22,20 +22,28 @@ * from Hyland Software. If not, see . */ -import { ExtensionService, provideExtensionConfig } from '@alfresco/adf-extensions'; -import { NgModule } from '@angular/core'; +import { provideExtensionConfig, provideExtensions } from '@alfresco/adf-extensions'; +import { EnvironmentProviders, NgModule, Provider } from '@angular/core'; import { provideEffects } from '@ngrx/effects'; import { AosEffects } from './effects/aos.effects'; import { provideTranslations } from '@alfresco/adf-core'; import { canOpenWithOffice } from '@alfresco/aca-shared/rules'; -@NgModule({ - providers: [provideExtensionConfig(['aos.plugin.json']), provideTranslations('ms-office', 'assets/ms-office'), provideEffects(AosEffects)] -}) -export class AosExtensionModule { - constructor(extensions: ExtensionService) { - extensions.setEvaluators({ - 'aos.canOpenWithOffice': canOpenWithOffice - }); - } +export function provideAosExtension(): (Provider | EnvironmentProviders)[] { + return [ + provideExtensionConfig(['aos.plugin.json']), + provideTranslations('ms-office', 'assets/ms-office'), + provideEffects(AosEffects), + provideExtensions({ + evaluators: { + 'aos.canOpenWithOffice': canOpenWithOffice + } + }) + ]; } + +/* @deprecated use `provideAosExtension()` provider api instead */ +@NgModule({ + providers: [...provideAosExtension()] +}) +export class AosExtensionModule {} diff --git a/projects/aca-content/src/lib/aca-content.module.ts b/projects/aca-content/src/lib/aca-content.module.ts index f3e0a69c6..adc7da12d 100644 --- a/projects/aca-content/src/lib/aca-content.module.ts +++ b/projects/aca-content/src/lib/aca-content.module.ts @@ -24,7 +24,6 @@ import { HammerModule } from '@angular/platform-browser'; import { NgModule } from '@angular/core'; -import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { AuthGuardEcm, LanguagePickerComponent, NotificationHistoryComponent, provideTranslations } from '@alfresco/adf-core'; import { ContentModule, @@ -34,17 +33,11 @@ import { LibraryStatusColumnComponent, TrashcanNameColumnComponent } from '@alfresco/adf-content-services'; -import { DocumentBasePageService, ExtensionsDataLoaderGuard } from '@alfresco/aca-shared'; +import { DocumentBasePageService, ExtensionsDataLoaderGuard, provideContentAppExtensions } from '@alfresco/aca-shared'; import * as rules from '@alfresco/aca-shared/rules'; import { AppStoreModule } from './store/app-store.module'; -import { CoreExtensionsModule } from './extensions/core.extensions.module'; -import { ExtensionService, ExtensionsModule } from '@alfresco/adf-extensions'; -import { APP_TOOLBAR_DIRECTIVES } from './components/toolbar'; -import { APP_SIDENAV_DIRECTIVES } from './components/sidenav'; -import { APP_COMMON_DIRECTIVES } from './components/common'; -import { APP_SEARCH_DIRECTIVES } from './components/search'; +import { provideAppExtensions, provideExtensions } from '@alfresco/adf-extensions'; import { ContentUrlService } from './services/content-url.service'; -import { CommonModule } from '@angular/common'; import { LocationLinkComponent } from './components/common/location-link/location-link.component'; import { LogoutComponent } from './components/common/logout/logout.component'; import { ToggleSharedComponent } from './components/common/toggle-shared/toggle-shared.component'; @@ -62,16 +55,15 @@ import { ToggleJoinLibraryButtonComponent } from './components/toolbar/toggle-jo import { ToggleJoinLibraryMenuComponent } from './components/toolbar/toggle-join-library/toggle-join-library-menu.component'; import { ViewNodeComponent } from './components/toolbar/view-node/view-node.component'; import { CONTENT_ROUTES } from './aca-content.routes'; -import { RouterModule } from '@angular/router'; +import { provideRouter } from '@angular/router'; import { UploadFilesDialogComponent } from './components/upload-files-dialog/upload-files-dialog.component'; -import { AcaFolderRulesModule } from '@alfresco/aca-content/folder-rules'; +import { provideFolderRulesExtension } from '@alfresco/aca-content/folder-rules'; import { TagsColumnComponent } from './components/dl-custom-components/tags-column/tags-column.component'; import { UserInfoComponent } from './components/common/user-info/user-info.component'; import { SidenavComponent } from './components/sidenav/sidenav.component'; import { ContentManagementService } from './services/content-management.service'; import { SHELL_NAVBAR_MIN_WIDTH, ShellLayoutComponent } from '@alfresco/adf-core/shell'; import { UserMenuComponent } from './components/sidenav/user-menu/user-menu.component'; -import { ContextMenuComponent } from './components/context-menu/context-menu.component'; import { MAT_DIALOG_DEFAULT_OPTIONS } from '@angular/material/dialog'; import { SearchResultsRowComponent } from './components/search/search-results-row/search-results-row.component'; import { BulkActionsDropdownComponent } from './components/bulk-actions-dropdown/bulk-actions-dropdown.component'; @@ -79,116 +71,101 @@ import { AgentsButtonComponent } from './components/knowledge-retrieval/search-a import { SaveSearchSidenavComponent } from './components/search/search-save/sidenav/save-search-sidenav.component'; @NgModule({ - imports: [ - CommonModule, - FormsModule, - ReactiveFormsModule, - ContentModule.forRoot(), - RouterModule.forChild(CONTENT_ROUTES), - ExtensionsModule, - CoreExtensionsModule, - AppStoreModule, - ...APP_COMMON_DIRECTIVES, - ...APP_TOOLBAR_DIRECTIVES, - ...APP_SIDENAV_DIRECTIVES, - ...APP_SEARCH_DIRECTIVES, - ContextMenuComponent, - HammerModule, - AcaFolderRulesModule - ], + imports: [ContentModule.forRoot(), AppStoreModule, HammerModule], providers: [ + provideRouter(CONTENT_ROUTES), { provide: ContentVersionService, useClass: ContentUrlService }, { provide: DocumentBasePageService, useExisting: ContentManagementService }, + provideAppExtensions(), + provideContentAppExtensions(), + provideFolderRulesExtension(), provideTranslations('app', 'assets'), { provide: SHELL_NAVBAR_MIN_WIDTH, useValue: 0 }, { provide: MAT_DIALOG_DEFAULT_OPTIONS, useValue: { closeOnNavigation: true, hasBackdrop: true, autoFocus: true } - } + }, + provideExtensions({ + authGuards: { + 'app.auth': AuthGuardEcm, + 'app.extensions.dataLoaderGuard': ExtensionsDataLoaderGuard + }, + components: { + 'app.layout.main': ShellLayoutComponent, + 'app.layout.sidenav': SidenavComponent, + 'app.shell.sibling': UploadFilesDialogComponent, + 'app.components.tabs.metadata': MetadataTabComponent, + 'app.components.tabs.library.metadata': LibraryMetadataTabComponent, + 'app.components.tabs.comments': CommentsTabComponent, + 'app.components.tabs.versions': VersionsTabComponent, + 'app.components.preview': PreviewComponent, + 'app.toolbar.toggleInfoDrawer': ToggleInfoDrawerComponent, + 'app.toolbar.toggleFavorite': ToggleFavoriteComponent, + 'app.toolbar.toggleFavoriteLibrary': ToggleFavoriteLibraryComponent, + 'app.toolbar.toggleJoinLibrary': ToggleJoinLibraryButtonComponent, + 'app.toolbar.ai.agents-button': AgentsButtonComponent, + 'app.menu.toggleJoinLibrary': ToggleJoinLibraryMenuComponent, + 'app.bulk-actions-dropdown': BulkActionsDropdownComponent, + 'app.shared-link.toggleSharedLink': ToggleSharedComponent, + 'app.columns.name': CustomNameColumnComponent, + 'app.columns.libraryName': LibraryNameColumnComponent, + 'app.columns.libraryRole': LibraryRoleColumnComponent, + 'app.columns.libraryStatus': LibraryStatusColumnComponent, + 'app.columns.trashcanName': TrashcanNameColumnComponent, + 'app.columns.location': LocationLinkComponent, + 'app.columns.tags': TagsColumnComponent, + 'app.toolbar.toggleEditOffline': ToggleEditOfflineComponent, + 'app.toolbar.viewNode': ViewNodeComponent, + 'app.languagePicker': LanguagePickerComponent, + 'app.logout': LogoutComponent, + 'app.user': UserInfoComponent, + 'app.notification-center': NotificationHistoryComponent, + 'app.user.menu': UserMenuComponent, + 'app.search.columns.name': SearchResultsRowComponent, + 'app.search.navbar': SaveSearchSidenavComponent + }, + evaluators: { + canToggleJoinLibrary: rules.canToggleJoinLibrary, + canToggleSharedLink: rules.canToggleSharedLink, + canToggleFileLock: rules.canToggleFileLock, + canToggleFavorite: rules.canToggleFavorite, + isLibraryManager: rules.isLibraryManager, + canEditAspects: rules.canEditAspects, + isSmartFolder: rules.isSmartFolder, + isMultiSelection: rules.isMultiselection, + canPrintFile: rules.canPrintFile, + + 'app.selection.canDelete': rules.canDeleteSelection, + 'app.selection.canDownload': rules.canDownloadSelection, + 'app.selection.notEmpty': rules.hasSelection, + 'app.selection.canAddFavorite': rules.canAddFavorite, + 'app.selection.canRemoveFavorite': rules.canRemoveFavorite, + 'app.selection.first.canUpdate': rules.canUpdateSelectedNode, + 'app.selection.file': rules.hasFileSelected, + 'app.selection.file.isLocked': rules.hasLockedFiles, + 'app.selection.file.canUploadVersion': rules.canUploadVersion, + 'app.selection.library': rules.hasLibrarySelected, + 'app.selection.hasLibraryRole': rules.hasLibraryRole, + 'app.selection.folder': rules.hasFolderSelected, + 'app.selection.folder.canUpdate': rules.canUpdateSelectedFolder, + 'app.selection.displayedKnowledgeRetrievalButton': rules.canDisplayKnowledgeRetrievalButton, + + 'app.navigation.folder.canCreate': rules.canCreateFolder, + 'app.navigation.isTrashcan': rules.isTrashcan, + 'app.navigation.isLibraries': rules.isLibraries, + 'app.navigation.isSharedFiles': rules.isSharedFiles, + 'app.navigation.isFavorites': rules.isFavorites, + 'app.navigation.isRecentFiles': rules.isRecentFiles, + 'app.navigation.isSearchResults': rules.isSearchResults, + 'app.navigation.isPreview': rules.isPreview, + 'app.navigation.isDetails': rules.isDetails, + + 'app.canShowLogout': rules.canShowLogout, + 'app.isContentServiceEnabled': rules.isContentServiceEnabled, + 'app.areTagsEnabled': rules.areTagsEnabled, + 'app.areCategoriesEnabled': rules.areCategoriesEnabled + } + }) ] }) -export class ContentServiceExtensionModule { - constructor(public extensions: ExtensionService) { - extensions.setAuthGuards({ - 'app.auth': AuthGuardEcm, - 'app.extensions.dataLoaderGuard': ExtensionsDataLoaderGuard - }); - - extensions.setComponents({ - 'app.layout.main': ShellLayoutComponent, - 'app.layout.sidenav': SidenavComponent, - 'app.shell.sibling': UploadFilesDialogComponent, - 'app.components.tabs.metadata': MetadataTabComponent, - 'app.components.tabs.library.metadata': LibraryMetadataTabComponent, - 'app.components.tabs.comments': CommentsTabComponent, - 'app.components.tabs.versions': VersionsTabComponent, - 'app.components.preview': PreviewComponent, - 'app.toolbar.toggleInfoDrawer': ToggleInfoDrawerComponent, - 'app.toolbar.toggleFavorite': ToggleFavoriteComponent, - 'app.toolbar.toggleFavoriteLibrary': ToggleFavoriteLibraryComponent, - 'app.toolbar.toggleJoinLibrary': ToggleJoinLibraryButtonComponent, - 'app.toolbar.ai.agents-button': AgentsButtonComponent, - 'app.menu.toggleJoinLibrary': ToggleJoinLibraryMenuComponent, - 'app.bulk-actions-dropdown': BulkActionsDropdownComponent, - 'app.shared-link.toggleSharedLink': ToggleSharedComponent, - 'app.columns.name': CustomNameColumnComponent, - 'app.columns.libraryName': LibraryNameColumnComponent, - 'app.columns.libraryRole': LibraryRoleColumnComponent, - 'app.columns.libraryStatus': LibraryStatusColumnComponent, - 'app.columns.trashcanName': TrashcanNameColumnComponent, - 'app.columns.location': LocationLinkComponent, - 'app.columns.tags': TagsColumnComponent, - 'app.toolbar.toggleEditOffline': ToggleEditOfflineComponent, - 'app.toolbar.viewNode': ViewNodeComponent, - 'app.languagePicker': LanguagePickerComponent, - 'app.logout': LogoutComponent, - 'app.user': UserInfoComponent, - 'app.notification-center': NotificationHistoryComponent, - 'app.user.menu': UserMenuComponent, - 'app.search.columns.name': SearchResultsRowComponent, - 'app.search.navbar': SaveSearchSidenavComponent - }); - - extensions.setEvaluators({ - canToggleJoinLibrary: rules.canToggleJoinLibrary, - canToggleSharedLink: rules.canToggleSharedLink, - canToggleFileLock: rules.canToggleFileLock, - canToggleFavorite: rules.canToggleFavorite, - isLibraryManager: rules.isLibraryManager, - canEditAspects: rules.canEditAspects, - isSmartFolder: rules.isSmartFolder, - isMultiSelection: rules.isMultiselection, - canPrintFile: rules.canPrintFile, - - 'app.selection.canDelete': rules.canDeleteSelection, - 'app.selection.canDownload': rules.canDownloadSelection, - 'app.selection.notEmpty': rules.hasSelection, - 'app.selection.canAddFavorite': rules.canAddFavorite, - 'app.selection.canRemoveFavorite': rules.canRemoveFavorite, - 'app.selection.first.canUpdate': rules.canUpdateSelectedNode, - 'app.selection.file': rules.hasFileSelected, - 'app.selection.file.isLocked': rules.hasLockedFiles, - 'app.selection.file.canUploadVersion': rules.canUploadVersion, - 'app.selection.library': rules.hasLibrarySelected, - 'app.selection.hasLibraryRole': rules.hasLibraryRole, - 'app.selection.folder': rules.hasFolderSelected, - 'app.selection.folder.canUpdate': rules.canUpdateSelectedFolder, - 'app.selection.displayedKnowledgeRetrievalButton': rules.canDisplayKnowledgeRetrievalButton, - - 'app.navigation.folder.canCreate': rules.canCreateFolder, - 'app.navigation.isTrashcan': rules.isTrashcan, - 'app.navigation.isLibraries': rules.isLibraries, - 'app.navigation.isSharedFiles': rules.isSharedFiles, - 'app.navigation.isFavorites': rules.isFavorites, - 'app.navigation.isRecentFiles': rules.isRecentFiles, - 'app.navigation.isSearchResults': rules.isSearchResults, - 'app.navigation.isPreview': rules.isPreview, - 'app.navigation.isDetails': rules.isDetails, - - 'app.canShowLogout': rules.canShowLogout, - 'app.isContentServiceEnabled': rules.isContentServiceEnabled, - 'app.areTagsEnabled': rules.areTagsEnabled, - 'app.areCategoriesEnabled': rules.areCategoriesEnabled - }); - } -} +export class ContentServiceExtensionModule {} diff --git a/projects/aca-content/src/lib/aca-content.routes.ts b/projects/aca-content/src/lib/aca-content.routes.ts index ee9f467f3..bbc4f25ac 100644 --- a/projects/aca-content/src/lib/aca-content.routes.ts +++ b/projects/aca-content/src/lib/aca-content.routes.ts @@ -337,7 +337,7 @@ export const CONTENT_LAYOUT_ROUTES: Route[] = [ children: [ { path: '', - loadChildren: () => import('@alfresco/aca-content/folder-rules').then((m) => m.AcaFolderRulesModule) + loadChildren: () => import('@alfresco/aca-content/folder-rules').then((m) => m.FOLDER_RULES_ROUTES) } ] }, diff --git a/projects/aca-content/src/lib/components/common/index.ts b/projects/aca-content/src/lib/components/common/index.ts index e89fc7581..721600fc4 100644 --- a/projects/aca-content/src/lib/components/common/index.ts +++ b/projects/aca-content/src/lib/components/common/index.ts @@ -28,6 +28,7 @@ import { LanguagePickerComponent } from './language-picker/language-picker.compo import { LogoutComponent } from './logout/logout.component'; import { UserInfoComponent } from './user-info/user-info.component'; +/* @deprecated import standalone components instead */ export const APP_COMMON_DIRECTIVES = [ LanguagePickerComponent, LocationLinkComponent, diff --git a/projects/aca-content/src/lib/components/search/index.ts b/projects/aca-content/src/lib/components/search/index.ts index 38837cbf7..cbad922bf 100644 --- a/projects/aca-content/src/lib/components/search/index.ts +++ b/projects/aca-content/src/lib/components/search/index.ts @@ -29,6 +29,7 @@ import { SearchResultsRowComponent } from './search-results-row/search-results-r import { SearchInputComponent } from './search-input/search-input.component'; import { SearchInputControlComponent } from './search-input-control/search-input-control.component'; +/* @deprecated import standalone components instead */ export const APP_SEARCH_DIRECTIVES = [ SearchActionMenuComponent, SearchLibrariesResultsComponent, diff --git a/projects/aca-content/src/lib/components/sidenav/index.ts b/projects/aca-content/src/lib/components/sidenav/index.ts index 56da49fdd..d1c818176 100644 --- a/projects/aca-content/src/lib/components/sidenav/index.ts +++ b/projects/aca-content/src/lib/components/sidenav/index.ts @@ -32,6 +32,7 @@ import { ActionDirective } from './directives/action.directive'; import { SidenavHeaderComponent } from './components/sidenav-header.component'; import { UserMenuComponent } from './user-menu/user-menu.component'; +/* @deprecated import standalone components instead */ export const APP_SIDENAV_DIRECTIVES = [ ButtonMenuComponent, ActiveLinkDirective, diff --git a/projects/aca-content/src/lib/components/toolbar/index.ts b/projects/aca-content/src/lib/components/toolbar/index.ts index 0b3e6fbdd..4419218d1 100644 --- a/projects/aca-content/src/lib/components/toolbar/index.ts +++ b/projects/aca-content/src/lib/components/toolbar/index.ts @@ -30,6 +30,7 @@ import { ToggleFavoriteLibraryComponent } from './toggle-favorite-library/toggle import { ToggleEditOfflineComponent } from './toggle-edit-offline/toggle-edit-offline.component'; import { ViewNodeComponent } from './view-node/view-node.component'; +/* @deprecated import standalone components instead */ export const APP_TOOLBAR_DIRECTIVES = [ ToggleFavoriteComponent, ToggleEditOfflineComponent, diff --git a/projects/aca-content/src/lib/extensions/core.extensions.module.ts b/projects/aca-content/src/lib/extensions/core.extensions.module.ts deleted file mode 100644 index bcca4df02..000000000 --- a/projects/aca-content/src/lib/extensions/core.extensions.module.ts +++ /dev/null @@ -1,42 +0,0 @@ -/*! - * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved. - * - * Alfresco Example Content Application - * - * This file is part of the Alfresco Example Content Application. - * If the software was purchased under a paid Alfresco license, the terms of - * the paid license agreement will prevail. Otherwise, the software is - * provided under the following open source license terms: - * - * The Alfresco Example Content Application is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * The Alfresco Example Content Application is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * from Hyland Software. If not, see . - */ - -import { inject, ModuleWithProviders, NgModule, provideAppInitializer } from '@angular/core'; -import { AppExtensionService } from '@alfresco/aca-shared'; - -/** @deprecated use provideExtensions() api instead */ -@NgModule() -export class CoreExtensionsModule { - static forRoot(): ModuleWithProviders { - return { - ngModule: CoreExtensionsModule, - providers: [ - provideAppInitializer(() => { - const service = inject(AppExtensionService); - return service.load(); - }) - ] - }; - } -} diff --git a/projects/aca-content/src/lib/extensions/provide-extensions.ts b/projects/aca-content/src/lib/extensions/provide-extensions.ts deleted file mode 100644 index 7c71c2a1c..000000000 --- a/projects/aca-content/src/lib/extensions/provide-extensions.ts +++ /dev/null @@ -1,35 +0,0 @@ -/*! - * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved. - * - * Alfresco Example Content Application - * - * This file is part of the Alfresco Example Content Application. - * If the software was purchased under a paid Alfresco license, the terms of - * the paid license agreement will prevail. Otherwise, the software is - * provided under the following open source license terms: - * - * The Alfresco Example Content Application is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * The Alfresco Example Content Application is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * from Hyland Software. If not, see . - */ - -import { EnvironmentProviders, inject, provideAppInitializer, Provider } from '@angular/core'; -import { AppExtensionService } from '@alfresco/aca-shared'; - -export function provideExtensions(): (Provider | EnvironmentProviders)[] { - return [ - provideAppInitializer(() => { - const service = inject(AppExtensionService); - return service.load(); - }) - ]; -} diff --git a/projects/aca-content/src/public-api.ts b/projects/aca-content/src/public-api.ts index 1dbe98157..55a4fa91d 100644 --- a/projects/aca-content/src/public-api.ts +++ b/projects/aca-content/src/public-api.ts @@ -28,10 +28,8 @@ export * from './lib/aca-content.module'; export * from './lib/aca-content.routes'; -export * from './lib/extensions/core.extensions.module'; export * from './lib/store/initial-state'; export * from './lib/services/content-url.service'; export * from './lib/services/content-management.service'; export * from './lib/components/info-drawer/comments-tab/external-node-permission-comments-tab.service'; export * from './lib/utils/aca-search-utils'; -export * from './lib/extensions/provide-extensions'; diff --git a/projects/aca-playwright-shared/src/api/rules-api.ts b/projects/aca-playwright-shared/src/api/rules-api.ts index 02c3e9de3..fc1d1eb04 100644 --- a/projects/aca-playwright-shared/src/api/rules-api.ts +++ b/projects/aca-playwright-shared/src/api/rules-api.ts @@ -23,7 +23,6 @@ */ import { ApiClientFactory } from './api-client-factory'; -import { AcaFolderRulesModule } from '@alfresco/aca-content/folder-rules'; import * as crypto from 'crypto'; export class RulesApi { @@ -199,7 +198,7 @@ export interface Rule { errorScript: string; isShared: boolean; triggers: RuleTrigger[]; - conditions: AcaFolderRulesModule; + conditions: any; actions: RuleAction[]; } @@ -288,6 +287,6 @@ export class ConditionsTypes { static readonly conditions = [ConditionsTypes.MIMETYPE.value, ConditionsTypes.CMNAME.value, ConditionsTypes.SIZE.value, ConditionsTypes.TAG.value]; constructor( public key: string, - public value: AcaFolderRulesModule + public value: any ) {} } diff --git a/projects/aca-shared/src/lib/services/app.extension.service.ts b/projects/aca-shared/src/lib/services/app.extension.service.ts index 7c02d789a..e1dbfbb81 100644 --- a/projects/aca-shared/src/lib/services/app.extension.service.ts +++ b/projects/aca-shared/src/lib/services/app.extension.service.ts @@ -22,7 +22,7 @@ * from Hyland Software. If not, see . */ -import { Injectable } from '@angular/core'; +import { EnvironmentProviders, inject, Injectable, provideAppInitializer } from '@angular/core'; import { Store } from '@ngrx/store'; import { MatIconRegistry } from '@angular/material/icon'; import { DomSanitizer } from '@angular/platform-browser'; @@ -58,6 +58,15 @@ import { NodePermissionService } from '../services/node-permission.service'; import { map } from 'rxjs/operators'; import { SearchCategory } from '@alfresco/adf-content-services'; +export function provideContentAppExtensions(): EnvironmentProviders[] { + return [ + provideAppInitializer(() => { + const service = inject(AppExtensionService); + return service.load(); + }) + ]; +} + @Injectable({ providedIn: 'root' })