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

@@ -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">
<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">
@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>
} @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';