AAE-36580 bootstrap as standalone app (#4667)

This commit is contained in:
Denys Vuika
2025-07-11 07:19:33 -04:00
committed by GitHub
parent 5bfdd3f911
commit 24c5f08f7b
22 changed files with 113 additions and 258 deletions

View File

@@ -25,13 +25,15 @@
import { Component, ViewEncapsulation } from '@angular/core';
import { AppService } from '@alfresco/aca-shared';
import { MatIconRegistry } from '@angular/material/icon';
import { RouterOutlet } from '@angular/router';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss'],
encapsulation: ViewEncapsulation.None,
standalone: false
standalone: true,
imports: [RouterOutlet]
})
export class AppComponent {
constructor(

View File

@@ -22,8 +22,7 @@
* from Hyland Software. If not, see <http://www.gnu.org/licenses/>.
*/
import { BrowserModule } from '@angular/platform-browser';
import { importProvidersFrom, NgModule } from '@angular/core';
import { importProvidersFrom, ApplicationConfig } 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';
@@ -46,12 +45,10 @@ import localePl from '@angular/common/locales/pl';
import localeFi from '@angular/common/locales/fi';
import localeDa from '@angular/common/locales/da';
import localeSv from '@angular/common/locales/sv';
import { RouterModule } from '@angular/router';
import { AppComponent } from './app.components';
import { CONTENT_LAYOUT_ROUTES, ContentServiceExtensionModule, ContentUrlService, CoreExtensionsModule } from '@alfresco/aca-content';
import { provideRouter, withHashLocation } from '@angular/router';
import { CONTENT_LAYOUT_ROUTES, ContentServiceExtensionModule, ContentUrlService, provideExtensions } 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 { StoreDevtoolsModule } from '@ngrx/store-devtools';
import { APP_ROUTES } from './app.routes';
registerLocaleData(localeFr);
@@ -71,20 +68,11 @@ registerLocaleData(localeFi);
registerLocaleData(localeDa);
registerLocaleData(localeSv);
@NgModule({
imports: [
BrowserModule,
CoreModule.forRoot(),
CoreExtensionsModule.forRoot(),
!environment.production ? StoreDevtoolsModule.instrument({ maxAge: 25 }) : [],
RouterModule.forRoot(APP_ROUTES, {
useHash: true,
enableTracing: false // enable for debug only
}),
AppExtensionsModule,
ContentServiceExtensionModule
],
export const AppConfig: ApplicationConfig = {
providers: [
importProvidersFrom(CoreModule.forRoot(), AppExtensionsModule, ContentServiceExtensionModule),
provideExtensions(),
provideRouter(APP_ROUTES, withHashLocation()),
environment.e2e ? provideNoopAnimations() : provideAnimations(),
provideShellRoutes(CONTENT_LAYOUT_ROUTES),
{ provide: ContentVersionService, useClass: ContentUrlService },
@@ -98,8 +86,5 @@ registerLocaleData(localeSv);
},
provideTranslations('app', 'assets'),
importProvidersFrom(AuthModule.forRoot({ useHash: true }))
],
declarations: [AppComponent],
bootstrap: [AppComponent]
})
export class AppModule {}
]
};

View File

@@ -23,13 +23,15 @@
*/
import { enableProdMode } from '@angular/core';
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app/app.module';
import { environment } from './environments/environment';
import { bootstrapApplication } from '@angular/platform-browser';
import { AppComponent } from './app/app.components';
import { AppConfig } from './app/app.config';
if (environment.production) {
enableProdMode();
}
void platformBrowserDynamic().bootstrapModule(AppModule);
void (async () => {
await bootstrapApplication(AppComponent, AppConfig);
})();

View File

@@ -27,52 +27,45 @@ See the official [Nx Angular library](https://nx.dev/nx-api/angular/generators/l
Next to validate the changed verify the following:
- Check in `tsconfig.base.json` that an import path exists and points to the correct entry point:
-
```json
"@myorg/my-extension": ["extensions/my-extension/src/index.ts"],
{
"paths" : {
"@myorg/my-extension": [
"extensions/my-extension/src/index.ts"
]
}
}
```
- Test if npm i is working:
# Developing the basics of the ACA extension
Now that the `my-extension` is created, let's add the proper configuration to the extension module. For this purpose, edit the `extensions/my-extension/src/lib/my-extension.module.ts` file changing what is described below.
Now that the `my-extension` is created, let's add the proper configuration to the extension module.
For this purpose, edit the `extensions/my-extension/src/lib/my-extension.module.ts` file changing what is described below:
```typescript
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { ExtensionService, provideExtensionConfig } from '@alfresco/adf-extensions';
import { CoreModule, TRANSLATION_PROVIDER } from '@alfresco/adf-core';
import { provideTranslations } from '@alfresco/adf-core';
import { MyExtensionComponent } from './my-extension.component';
import { MyExtensionService } from './my-extension.service';
export function components() {
return [MyExtensionComponent];
}
@NgModule({
imports: [CoreModule, BrowserModule, FormsModule],
imports: [MyExtensionComponent],
providers: [
{
provide: TRANSLATION_PROVIDER,
multi: true,
useValue: {
name: 'my-extension',
source: 'assets/my-extension',
},
},
provideTranslations('my-extension', 'assets/my-extension'),
MyExtensionService,
provideExtensionConfig(['my-extension.json']),
],
declarations: components(),
exports: components(),
]
})
export class MyExtensionModule {
constructor(extensions: ExtensionService) {
extensions.setComponents({
'my-extension.main.component' : MyExtensionComponent,
'my-extension.main.component': MyExtensionComponent,
});
}
}
@@ -133,16 +126,13 @@ This is a very basic example, adding a “My Extension” item to the existing l
Now that the ACA extension is developed in its initial version, let's add the extension module to the list of the ones used by the application. To complete the task, edit the `src/app/extensions.module.ts` file as described below.
```typescript
// Add the following import to the page.
import { MyExtensionModule } from 'my-extension';
// Add the following import to the page.
import { MyExtensionModule } from 'my-extension';
@NgModule({
imports: [
...,
MyExtensionModule
]
})
export class AppExtensionsModule {}
@NgModule({
imports: [MyExtensionModule]
})
export class AppExtensionsModule {}
```
In addition, edit the `src/assets/app.extensions.json` file on the `$references` array. Below how it should look like.

View File

@@ -27,7 +27,6 @@ import { AboutComponent } from './about.component';
import { ExtensionService, provideExtensionConfig } from '@alfresco/adf-extensions';
@NgModule({
imports: [AboutComponent],
providers: [provideExtensionConfig(['about.plugin.json'])]
})
export class AcaAboutModule {

View File

@@ -22,24 +22,12 @@
* from Hyland Software. If not, see <http://www.gnu.org/licenses/>.
*/
import { TranslationService } from '@alfresco/adf-core';
import { provideTranslations } from '@alfresco/adf-core';
import { ExtensionService, provideExtensionConfig } from '@alfresco/adf-extensions';
import { NgModule } from '@angular/core';
import * as rules from './folder-rules.rules';
import { RouterModule, Routes } from '@angular/router';
import { EditRuleDialogUiComponent } from './rule-details/edit-rule-dialog.ui-component';
import { provideRouter, Routes } from '@angular/router';
import { ManageRulesSmartComponent } from './manage-rules/manage-rules.smart-component';
import { RuleCompositeConditionUiComponent } from './rule-details/conditions/rule-composite-condition.ui-component';
import { RuleDetailsUiComponent } from './rule-details/rule-details.ui-component';
import { RuleSimpleConditionUiComponent } from './rule-details/conditions/rule-simple-condition.ui-component';
import { RuleListItemUiComponent } from './rule-list/rule-list-item/rule-list-item.ui-component';
import { RuleListGroupingUiComponent } from './rule-list/rule-list-grouping/rule-list-grouping.ui-component';
import { RuleTriggersUiComponent } from './rule-details/triggers/rule-triggers.ui-component';
import { RuleOptionsUiComponent } from './rule-details/options/rule-options.ui-component';
import { RuleActionListUiComponent } from './rule-details/actions/rule-action-list.ui-component';
import { RuleActionUiComponent } from './rule-details/actions/rule-action.ui-component';
import { RuleListUiComponent } from './rule-list/rule-list/rule-list.ui-component';
import { RuleSetPickerSmartComponent } from './rule-set-picker/rule-set-picker.smart-component';
import { PluginEnabledGuard } from '@alfresco/aca-shared';
const routes: Routes = [
@@ -54,28 +42,10 @@ const routes: Routes = [
];
@NgModule({
providers: [provideExtensionConfig(['folder-rules.plugin.json'])],
imports: [
RouterModule.forChild(routes),
RuleListItemUiComponent,
RuleListGroupingUiComponent,
RuleListUiComponent,
ManageRulesSmartComponent,
RuleSetPickerSmartComponent,
RuleActionListUiComponent,
RuleActionUiComponent,
RuleCompositeConditionUiComponent,
RuleSimpleConditionUiComponent,
RuleOptionsUiComponent,
RuleTriggersUiComponent,
RuleDetailsUiComponent,
EditRuleDialogUiComponent
]
providers: [provideTranslations('folder-rules', 'assets/folder-rules'), provideExtensionConfig(['folder-rules.plugin.json']), provideRouter(routes)]
})
export class AcaFolderRulesModule {
constructor(translation: TranslationService, extensions: ExtensionService) {
translation.addTranslationFolder('folder-rules', 'assets/folder-rules');
constructor(extensions: ExtensionService) {
extensions.setEvaluators({
'rules.isFolderRulesEnabled': rules.isFolderRulesEnabled
});

View File

@@ -26,16 +26,15 @@ import { ExtensionService, provideExtensionConfig } from '@alfresco/adf-extensio
import { NgModule } from '@angular/core';
import { EffectsModule } from '@ngrx/effects';
import { AosEffects } from './effects/aos.effects';
import { TranslationService } from '@alfresco/adf-core';
import { provideTranslations } from '@alfresco/adf-core';
import { canOpenWithOffice } from '@alfresco/aca-shared/rules';
@NgModule({
imports: [EffectsModule.forFeature([AosEffects])],
providers: [provideExtensionConfig(['aos.plugin.json'])]
providers: [provideExtensionConfig(['aos.plugin.json']), provideTranslations('ms-office', 'assets/ms-office')]
})
export class AosExtensionModule {
constructor(extensions: ExtensionService, translation: TranslationService) {
translation.addTranslationFolder('ms-office', 'assets/ms-office');
constructor(extensions: ExtensionService) {
extensions.setEvaluators({
'aos.canOpenWithOffice': canOpenWithOffice
});

View File

@@ -34,17 +34,15 @@ import {
LibraryStatusColumnComponent,
TrashcanNameColumnComponent
} from '@alfresco/adf-content-services';
import { DocumentBasePageService, ExtensionsDataLoaderGuard, OpenInAppComponent } from '@alfresco/aca-shared';
import { DocumentBasePageService, ExtensionsDataLoaderGuard } 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 { AppInfoDrawerModule } from './components/info-drawer/info.drawer.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 { CreateFromTemplateDialogComponent } from './dialogs/node-template/create-from-template.dialog';
import { ContentUrlService } from './services/content-url.service';
import { CommonModule } from '@angular/common';
import { LocationLinkComponent } from './components/common/location-link/location-link.component';
@@ -95,12 +93,8 @@ import { SaveSearchSidenavComponent } from './components/search/search-save/side
...APP_SIDENAV_DIRECTIVES,
...APP_SEARCH_DIRECTIVES,
ContextMenuComponent,
AppInfoDrawerModule,
HammerModule,
AcaFolderRulesModule,
CreateFromTemplateDialogComponent,
OpenInAppComponent,
UploadFilesDialogComponent
AcaFolderRulesModule
],
providers: [
{ provide: ContentVersionService, useClass: ContentUrlService },

View File

@@ -24,12 +24,12 @@
import { CommentsTabComponent } from './comments-tab.component';
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { AppTestingModule } from '../../../testing/app-testing.module';
import { NodePermissionService } from '@alfresco/aca-shared';
import { Node } from '@alfresco/js-api';
import { of } from 'rxjs';
import { AuthenticationService } from '@alfresco/adf-core';
import { AuthenticationService, NoopTranslateModule } from '@alfresco/adf-core';
import { ExternalNodePermissionCommentsTabService } from '@alfresco/aca-content';
import { AlfrescoApiService, AlfrescoApiServiceMock } from '@alfresco/adf-content-services';
describe('CommentsTabComponent', () => {
let component: CommentsTabComponent;
@@ -40,8 +40,9 @@ describe('CommentsTabComponent', () => {
beforeEach(() => {
TestBed.configureTestingModule({
imports: [AppTestingModule, CommentsTabComponent],
imports: [NoopTranslateModule, CommentsTabComponent],
providers: [
{ provide: AlfrescoApiService, useClass: AlfrescoApiServiceMock },
{ provide: ExternalNodePermissionCommentsTabService, useValue: { canAddComments: () => canAddComment } },
{ provide: AuthenticationService, useValue: { onLogout: of({}) } }
]

View File

@@ -26,13 +26,13 @@ import { Component, Input, OnInit, Optional, ViewEncapsulation } from '@angular/
import { Node } from '@alfresco/js-api';
import { isLocked, NodePermissionService } from '@alfresco/aca-shared';
import { MatCardModule } from '@angular/material/card';
import { NodeCommentsModule } from '@alfresco/adf-content-services';
import { NodeCommentsComponent } from '@alfresco/adf-content-services';
import { ExternalNodePermissionCommentsTabService } from './external-node-permission-comments-tab.service';
@Component({
imports: [MatCardModule, NodeCommentsModule],
imports: [MatCardModule, NodeCommentsComponent],
selector: 'app-comments-tab',
template: `<mat-card class="adf-comments-tab-container" appearance="raised"
template: ` <mat-card class="adf-comments-tab-container" appearance="raised"
><adf-node-comments [readOnly]="!canUpdateNode" [nodeId]="node?.id"
/></mat-card>`,
styles: ['app-comments-tab mat-card { padding: 16px }'],

View File

@@ -1,51 +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 <http://www.gnu.org/licenses/>.
*/
import { NgModule } from '@angular/core';
import { CommentsTabComponent } from './comments-tab/comments-tab.component';
import { MetadataTabComponent } from './metadata-tab/metadata-tab.component';
import { LibraryMetadataTabComponent } from './library-metadata-tab/library-metadata-tab.component';
import { LibraryMetadataFormComponent } from './library-metadata-tab/library-metadata-form.component';
import { VersionsTabComponent } from './versions-tab/versions-tab.component';
import { InfoDrawerComponent } from '@alfresco/aca-shared';
@NgModule({
imports: [
InfoDrawerComponent,
CommentsTabComponent,
LibraryMetadataFormComponent,
LibraryMetadataTabComponent,
MetadataTabComponent,
VersionsTabComponent
],
exports: [
InfoDrawerComponent,
CommentsTabComponent,
LibraryMetadataFormComponent,
LibraryMetadataTabComponent,
MetadataTabComponent,
VersionsTabComponent
]
})
export class AppInfoDrawerModule {}

View File

@@ -1,4 +1,5 @@
<mat-card appearance="raised" *ngIf="node">
@if (node) {
<mat-card appearance="raised">
<mat-card-content>
<form [formGroup]="form" autocomplete="off">
<mat-form-field floatLabel="auto" data-automation-id="library-name-properties-wrapper" class="app-library-metadata-form-field">
@@ -12,7 +13,9 @@
formControlName="title"
[errorStateMatcher]="matcher"
/>
<mat-hint *ngIf="libraryTitleExists">{{ 'LIBRARY.HINTS.SITE_TITLE_EXISTS' | translate }}</mat-hint>
@if (libraryTitleExists) {
<mat-hint>{{ 'LIBRARY.HINTS.SITE_TITLE_EXISTS' | translate }}</mat-hint>
}
<mat-error>
{{ titleErrorTranslationKey | translate }}
</mat-error>
@@ -48,17 +51,21 @@
</form>
</mat-card-content>
<mat-card-actions align="end" *ngIf="canUpdateLibrary">
<ng-container *ngIf="form.enabled">
@if (canUpdateLibrary) {
<mat-card-actions align="end">
@if (form.enabled) {
<button mat-button (click)="cancel()">
{{ 'LIBRARY.DIALOG.CANCEL' | translate }}
</button>
<button mat-button color="primary" [disabled]="form.invalid || form.pristine" (click)="update()">
{{ 'LIBRARY.DIALOG.UPDATE' | translate }}
</button>
</ng-container>
<button mat-button color="primary" (click)="toggleEdit()" *ngIf="form.disabled">
} @else {
<button mat-button color="primary" (click)="toggleEdit()">
{{ 'LIBRARY.DIALOG.EDIT' | translate }}
</button>
}
</mat-card-actions>
}
</mat-card>
}

View File

@@ -42,7 +42,6 @@ import { debounceTime, mergeMap } from 'rxjs/operators';
import { AlfrescoApiService } from '@alfresco/adf-content-services';
import { from, Observable } from 'rxjs';
import { ErrorStateMatcher, MatOptionModule } from '@angular/material/core';
import { CommonModule } from '@angular/common';
import { MatCardModule } from '@angular/material/card';
import { TranslatePipe } from '@ngx-translate/core';
import { MatFormFieldModule } from '@angular/material/form-field';
@@ -51,6 +50,7 @@ import { MatInputModule } from '@angular/material/input';
import { A11yModule } from '@angular/cdk/a11y';
import { MatButtonModule } from '@angular/material/button';
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
import { NgForOf } from '@angular/common';
export class InstantErrorStateMatcher implements ErrorStateMatcher {
isErrorState(control: UntypedFormControl | null, form: FormGroupDirective | NgForm | null): boolean {
@@ -61,7 +61,6 @@ export class InstantErrorStateMatcher implements ErrorStateMatcher {
@Component({
imports: [
CommonModule,
MatCardModule,
TranslatePipe,
MatFormFieldModule,
@@ -71,7 +70,8 @@ export class InstantErrorStateMatcher implements ErrorStateMatcher {
MatOptionModule,
MatInputModule,
A11yModule,
MatButtonModule
MatButtonModule,
NgForOf
],
selector: 'app-library-metadata-form',
templateUrl: './library-metadata-form.component.html',

View File

@@ -36,14 +36,14 @@ import {
TagService
} from '@alfresco/adf-content-services';
import { filter, map } from 'rxjs/operators';
import { CommonModule } from '@angular/common';
import { AsyncPipe } from '@angular/common';
import { Actions, ofType } from '@ngrx/effects';
import { Store } from '@ngrx/store';
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
import { ExtensionService } from '@alfresco/adf-extensions';
@Component({
imports: [CommonModule, ContentMetadataComponent],
imports: [ContentMetadataComponent, AsyncPipe],
selector: 'app-metadata-tab',
template: `
<adf-content-metadata

View File

@@ -32,10 +32,10 @@ import { MatFormFieldModule } from '@angular/material/form-field';
import { MatInputModule } from '@angular/material/input';
import { A11yModule } from '@angular/cdk/a11y';
import { MatCheckboxModule } from '@angular/material/checkbox';
import { FormControl, FormGroup, FormsModule, Validators } from '@angular/forms';
import { CoreModule, NotificationService } from '@alfresco/adf-core';
import { FormControl, FormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms';
import { NotificationService } from '@alfresco/adf-core';
import { AutoFocusDirective, forbidOnlySpaces, SavedSearchesService } from '@alfresco/adf-content-services';
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
import { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog';
import { take } from 'rxjs/operators';
import { UniqueSearchNameValidator } from './unique-search-name-validator';
import { SavedSearchForm } from './saved-search-form.interface';
@@ -52,8 +52,9 @@ import { SavedSearchForm } from './saved-search-form.interface';
A11yModule,
MatCheckboxModule,
FormsModule,
CoreModule,
AutoFocusDirective
AutoFocusDirective,
ReactiveFormsModule,
MatDialogModule
],
selector: 'aca-save-search-dialog',
templateUrl: './save-search-dialog.component.html',

View File

@@ -1 +1,3 @@
<app-expand-menu *ngIf="item" [item]="item" (actionClicked)="onActionClick($event)" />
@if (item) {
<app-expand-menu [item]="item" (actionClicked)="onActionClick($event)" />
}

View File

@@ -24,7 +24,7 @@
import { Component, DestroyRef, inject, OnInit, ViewEncapsulation } from '@angular/core';
import { SavedSearch, SavedSearchesService } from '@alfresco/adf-content-services';
import { CoreModule, TranslationService, UserPreferencesService, UserPreferenceValues } from '@alfresco/adf-core';
import { TranslationService, UserPreferencesService, UserPreferenceValues } from '@alfresco/adf-core';
import { NavBarLinkRef } from '@alfresco/adf-extensions';
import { ExpandMenuComponent } from '../../../sidenav/components/expand-menu.component';
import { AppService } from '@alfresco/aca-shared';
@@ -33,7 +33,7 @@ import { delay } from 'rxjs/operators';
@Component({
selector: 'aca-save-search-sidenav',
imports: [CoreModule, ExpandMenuComponent],
imports: [ExpandMenuComponent],
templateUrl: './save-search-sidenav.component.html',
encapsulation: ViewEncapsulation.None
})

View File

@@ -23,24 +23,18 @@
*/
import { inject, ModuleWithProviders, NgModule, provideAppInitializer } from '@angular/core';
import { ExtensionsModule } from '@alfresco/adf-extensions';
import { AppExtensionService } from '@alfresco/aca-shared';
export function setupExtensions(service: AppExtensionService): () => void {
return () => service.load();
}
@NgModule({
imports: [ExtensionsModule]
})
/** @deprecated use provideExtensions() api instead */
@NgModule()
export class CoreExtensionsModule {
static forRoot(): ModuleWithProviders<CoreExtensionsModule> {
return {
ngModule: CoreExtensionsModule,
providers: [
provideAppInitializer(() => {
const initializerFn = setupExtensions(inject(AppExtensionService));
return initializerFn();
const service = inject(AppExtensionService);
return service.load();
})
]
};

View File

@@ -22,16 +22,14 @@
* from Hyland Software. If not, see <http://www.gnu.org/licenses/>.
*/
import { NgModule } from '@angular/core';
import { MatButtonModule } from '@angular/material/button';
import { MatIconModule } from '@angular/material/icon';
import { MatDialogModule } from '@angular/material/dialog';
import { TranslateModule } from '@ngx-translate/core';
import { ContextActionsDirective } from '../directives/contextmenu/contextmenu.directive';
import { EnvironmentProviders, inject, provideAppInitializer, Provider } from '@angular/core';
import { AppExtensionService } from '@alfresco/aca-shared';
// @deprecated
@NgModule({
imports: [MatButtonModule, MatIconModule, MatDialogModule, TranslateModule, ContextActionsDirective],
exports: [MatButtonModule, MatIconModule, MatDialogModule, TranslateModule, ContextActionsDirective]
})
export class SharedModule {}
export function provideExtensions(): (Provider | EnvironmentProviders)[] {
return [
provideAppInitializer(() => {
const service = inject(AppExtensionService);
return service.load();
})
];
}

View File

@@ -34,3 +34,4 @@ 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';

View File

@@ -1,36 +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 <http://www.gnu.org/licenses/>.
*/
import { NgModule } from '@angular/core';
import { ToolbarButtonComponent } from '../components/toolbar/toolbar-button/toolbar-button.component';
import { ToolbarActionComponent } from '../components/toolbar/toolbar-action/toolbar-action.component';
import { ToolbarMenuItemComponent } from '../components/toolbar/toolbar-menu-item/toolbar-menu-item.component';
import { ToolbarMenuComponent } from '../components/toolbar/toolbar-menu/toolbar-menu.component';
// @deprecated
@NgModule({
imports: [ToolbarButtonComponent, ToolbarActionComponent, ToolbarMenuItemComponent, ToolbarMenuComponent],
exports: [ToolbarButtonComponent, ToolbarActionComponent, ToolbarMenuItemComponent, ToolbarMenuComponent]
})
export class SharedToolbarModule {}

View File

@@ -62,6 +62,3 @@ export * from './lib/services/navigation-history.service';
export * from './lib/utils/node.utils';
export * from './lib/testing/lib-testing-module';
export * from './lib/deprecated/shared.module';
export * from './lib/deprecated/shared-toolbar.module';