[ACA-4382 ] About Page refactoring to use it across all the platform (#7365)

* about page refactor for global usage

* Development About

* add storybook

* fix build

* fix

* fix

* fix imports

* fix

* fix lint

* fix

* fix

* fix

* fix
This commit is contained in:
Eugenio Romano 2021-11-23 10:30:10 +00:00 committed by GitHub
parent dcb966f391
commit c8688bf0bf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
56 changed files with 1079 additions and 777 deletions

View File

@ -1,5 +1,8 @@
{
"APP": {
"ABOUT": {
"DEVELOPMENT":"Dev Mode"
},
"INFO_DRAWER": {
"TITLE": "Details",
"COMMENTS": "Comments",

View File

@ -1,11 +1,4 @@
<adf-about-github-link [application]="application" [url]="url" [version]="version"></adf-about-github-link>
<mat-slide-toggle [(ngModel)]="dev">{{'APP.ABOUT.DEVELOPMENT' | translate }}</mat-slide-toggle>
<adf-about-server-settings></adf-about-server-settings>
<adf-about [dev]="dev" [pkg]="pkg"> </adf-about>
<adf-about-product-version> </adf-about-product-version>
<adf-about-application-modules
[dependencies]="dependencies"
[showExtensions]="showExtensions"
>
</adf-about-application-modules>

View File

@ -15,27 +15,20 @@
* limitations under the License.
*/
import { Component, OnInit } from '@angular/core';
import { Component } from '@angular/core';
import pkg from '../../../../../package.json';
import { AppConfigService } from '@alfresco/adf-core';
@Component({
selector: 'app-about-page',
templateUrl: './about.component.html',
styleUrls: ['./about.component.scss']
})
export class AboutComponent implements OnInit {
url = `https://github.com/Alfresco/${pkg.name}/commits/${pkg.commit}`;
version = pkg.version;
dependencies = pkg.dependencies;
showExtensions = true;
application = '';
export class AboutComponent {
pkg: any;
dev: true;
constructor(private appConfigService: AppConfigService) {}
constructor() {
this.pkg = pkg;
}
ngOnInit() {
this.application = this.appConfigService.get<string>(
'application.name'
);
}
}

View File

@ -1,62 +0,0 @@
<div class="adf-about-modules-container">
<h3 data-automation-id="adf-about-modules-title">{{ 'ABOUT.PACKAGES.TITLE' | translate }}</h3>
<small>{{ 'ABOUT.PACKAGES.DESCRIPTION' | translate }}</small>
<adf-datatable [data]="dependencyEntries"></adf-datatable>
<div class="adf-extension-details-container" *ngIf="showExtensions && extensions.length">
<h3>{{ 'ABOUT.EXTENSIONS.TITLE' | translate }}</h3>
<mat-table [dataSource]="extensions">
<!-- $id Column -->
<ng-container matColumnDef="$id">
<mat-header-cell
*matHeaderCellDef>{{ 'ABOUT.EXTENSIONS.TABLE_HEADERS.ID' | translate }}</mat-header-cell>
<mat-cell *matCellDef="let element">{{element.$id}}</mat-cell>
</ng-container>
<!-- $name Column -->
<ng-container matColumnDef="$name">
<mat-header-cell
*matHeaderCellDef>{{ 'ABOUT.EXTENSIONS.TABLE_HEADERS.NAME' | translate }}</mat-header-cell>
<mat-cell *matCellDef="let element">{{element.$name}}</mat-cell>
</ng-container>
<!-- $version Column -->
<ng-container matColumnDef="$version">
<mat-header-cell
*matHeaderCellDef>{{ 'ABOUT.EXTENSIONS.TABLE_HEADERS.VERSION' | translate }}</mat-header-cell>
<mat-cell *matCellDef="let element">{{element.$version}}</mat-cell>
</ng-container>
<!-- $vendor Column -->
<ng-container matColumnDef="$vendor">
<mat-header-cell
*matHeaderCellDef>{{ 'ABOUT.EXTENSIONS.TABLE_HEADERS.VENDOR' | translate }}</mat-header-cell>
<mat-cell *matCellDef="let element">{{element.$vendor}}</mat-cell>
</ng-container>
<!-- $license Column -->
<ng-container matColumnDef="$license">
<mat-header-cell
*matHeaderCellDef>{{ 'ABOUT.EXTENSIONS.TABLE_HEADERS.LICENSE' | translate }}</mat-header-cell>
<mat-cell *matCellDef="let element">{{element.$license}}</mat-cell>
</ng-container>
<!-- $runtime Column -->
<ng-container matColumnDef="$runtime">
<mat-header-cell
*matHeaderCellDef>{{ 'ABOUT.EXTENSIONS.TABLE_HEADERS.RUNTIME' | translate }}</mat-header-cell>
<mat-cell *matCellDef="let element">{{element.$runtime}}</mat-cell>
</ng-container>
<!-- $description Column -->
<ng-container matColumnDef="$description">
<mat-header-cell
*matHeaderCellDef>{{ 'ABOUT.EXTENSIONS.TABLE_HEADERS.DESCRIPTION' | translate }}</mat-header-cell>
<mat-cell *matCellDef="let element">{{element.$description}}</mat-cell>
</ng-container>
<mat-header-row *matHeaderRowDef="extensionColumns"></mat-header-row>
<mat-row *matRowDef="let row; columns: extensionColumns;"></mat-row>
</mat-table>
</div>
</div>

View File

@ -1,3 +0,0 @@
.adf-about-modules-container {
padding: 10px;
}

View File

@ -1,107 +0,0 @@
/*!
* @license
* Copyright 2019 Alfresco Software, Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { CoreTestingModule } from '../../testing/core.testing.module';
import { setupTestBed } from '../../testing/setup-test-bed';
import { AboutApplicationModulesComponent } from './about-application-modules.component';
import { mockDependencies, mockPlugins } from '../about.mock';
import { TranslateModule } from '@ngx-translate/core';
describe('AboutApplicationModulesComponent', () => {
let fixture: ComponentFixture<AboutApplicationModulesComponent>;
let component: AboutApplicationModulesComponent;
setupTestBed({
imports: [
TranslateModule.forRoot(),
CoreTestingModule
]
});
beforeEach(() => {
fixture = TestBed.createComponent(AboutApplicationModulesComponent);
component = fixture.componentInstance;
component.dependencies = mockDependencies;
fixture.detectChanges();
});
afterEach(() => {
fixture.destroy();
});
it('Should display title', () => {
const titleElement = fixture.nativeElement.querySelector('[data-automation-id="adf-about-modules-title"]');
expect(titleElement.innerText).toEqual('ABOUT.PACKAGES.TITLE');
});
it('should display dependencies', async() => {
fixture.detectChanges();
await fixture.whenStable();
const dataTable = fixture.nativeElement.querySelector('.adf-datatable');
const depOne = fixture.nativeElement.querySelector('[data-automation-id="text_@alfresco/mock-core"]');
const depTwo = fixture.nativeElement.querySelector('[data-automation-id="text_@alfresco/mock-services"]');
const depVersionOne = fixture.nativeElement.querySelector('[data-automation-id="text_3.7.0"]');
const depVersionTwo = fixture.nativeElement.querySelector('[data-automation-id="text_2.0.0"]');
expect(dataTable).not.toBeNull();
expect(depOne.innerText).toEqual('@alfresco/mock-core');
expect(depTwo.innerText).toEqual('@alfresco/mock-services');
expect(depVersionOne.innerText).toEqual('3.7.0');
expect(depVersionTwo.innerText).toEqual('2.0.0');
});
it('should display extensions', async() => {
component.extensions = mockPlugins;
fixture.detectChanges();
await fixture.whenStable();
const dataTable = fixture.nativeElement.querySelector('.mat-table');
const nameColumn = fixture.nativeElement.querySelector('.mat-column--name');
const versionColumn = fixture.nativeElement.querySelector('.mat-column--version');
const licenseColumn = fixture.nativeElement.querySelector('.mat-column--license');
const nameRows = fixture.nativeElement.querySelector('.mat-row .mat-column--name');
const versionRows = fixture.nativeElement.querySelector('.mat-row .mat-column--version');
const licenseRows = fixture.nativeElement.querySelector('.mat-row .mat-column--license');
expect(dataTable).not.toBeNull();
expect(versionColumn.innerText).toEqual('ABOUT.EXTENSIONS.TABLE_HEADERS.VERSION');
expect(nameColumn.innerText).toEqual('ABOUT.EXTENSIONS.TABLE_HEADERS.NAME');
expect(licenseColumn.innerText).toEqual('ABOUT.EXTENSIONS.TABLE_HEADERS.LICENSE');
expect(nameRows.innerText).toEqual('plugin1');
expect(versionRows.innerText).toEqual('1.0.0');
expect(licenseRows.innerText).toEqual('MockLicense-2.0');
});
it('should not display extensions if showExtensions set to false ', async() => {
component.extensions = mockPlugins;
component.showExtensions = false;
fixture.detectChanges();
await fixture.whenStable();
const dataTable = fixture.nativeElement.querySelector('.mat-table');
const nameColumn = fixture.nativeElement.querySelector('.mat-column--name');
const nameRows = fixture.nativeElement.querySelector('.mat-row .mat-column--name');
expect(dataTable).toBeNull();
expect(nameColumn).toBeNull();
expect(nameRows).toBeNull();
});
});

View File

@ -1,78 +0,0 @@
/*!
* @license
* Copyright 2019 Alfresco Software, Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { Component, Input, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core';
import { ObjectDataTableAdapter } from '../../datatable/data/object-datatable-adapter';
import { AppExtensionService, ExtensionRef } from '@alfresco/adf-extensions';
import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
@Component({
selector: 'adf-about-application-modules',
templateUrl: './about-application-modules.component.html',
encapsulation: ViewEncapsulation.None
})
export class AboutApplicationModulesComponent implements OnInit, OnDestroy {
extensionColumns: string[] = ['$id', '$name', '$version', '$vendor', '$license', '$runtime', '$description'];
dependencyEntries: ObjectDataTableAdapter;
extensions: ExtensionRef[];
/** Toggles showing/hiding of extensions block. */
@Input()
showExtensions = true;
/** Regular expression for filtering dependencies packages. */
@Input() regexp = '^(@alfresco)';
/** Current version of the app running */
@Input() dependencies: any;
private onDestroy$ = new Subject<boolean>();
constructor(private appExtensions: AppExtensionService) {
}
ngOnInit() {
const alfrescoPackages = Object.keys(this.dependencies).filter((val) => {
return new RegExp(this.regexp).test(val);
});
const alfrescoPackagesTableRepresentation = [];
alfrescoPackages.forEach((val) => {
alfrescoPackagesTableRepresentation.push({
name: val,
version: (this.dependencies[val])
});
});
this.dependencyEntries = new ObjectDataTableAdapter(alfrescoPackagesTableRepresentation, [
{ type: 'text', key: 'name', title: 'Name', sortable: true },
{ type: 'text', key: 'version', title: 'Version', sortable: true }
]);
this.appExtensions.references$
.pipe(takeUntil(this.onDestroy$))
.subscribe((extensions) => this.extensions = extensions);
}
ngOnDestroy() {
this.onDestroy$.next(true);
this.onDestroy$.complete();
}
}

View File

@ -0,0 +1,11 @@
<mat-table [dataSource]="data">
<ng-container *ngFor="let column of columns" [matColumnDef]="column.columnDef">
<mat-header-cell *matHeaderCellDef>
{{ column.header | translate }}
</mat-header-cell>
<mat-cell *matCellDef="let row">{{ column.cell(row) }}</mat-cell>
</ng-container>
<mat-header-row *matHeaderRowDef="displayedColumns"></mat-header-row>
<mat-row *matRowDef="let row; columns: displayedColumns"></mat-row>
</mat-table>

View File

@ -0,0 +1,45 @@
/*!
* @license
* Copyright 2019 Alfresco Software, Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { Component, ViewEncapsulation, ChangeDetectionStrategy, Input } from '@angular/core';
import { ExtensionRef } from '@alfresco/adf-extensions';
@Component({
selector: 'adf-about-extension-list',
templateUrl: './about-extension-list.component.html',
encapsulation: ViewEncapsulation.None,
changeDetection: ChangeDetectionStrategy.OnPush
})
export class AboutExtensionListComponent {
columns = [
{
columnDef: 'name',
header: 'ABOUT.PLUGINS.NAME',
cell: (row: ExtensionRef) => `${row.$name}`
},
{
columnDef: 'version',
header: 'ABOUT.PLUGINS.VERSION',
cell: (row: ExtensionRef) => `${row.$version}`
}
];
displayedColumns = this.columns.map((x) => x.columnDef);
@Input()
data: Array<ExtensionRef> = [];
}

View File

@ -1,7 +1,6 @@
<div class="adf-github-link-container">
<div>
<h3 data-automation-id="adf-github-source-code-title">{{ 'ABOUT.SOURCE_CODE.TITLE' | translate }}</h3>
<mat-card>
<header data-automation-id="adf-github-source-code-title">{{ 'ABOUT.SOURCE_CODE.TITLE' | translate }}</header>
<mat-card class="mat-elevation-z0">
<h3 data-automation-id="adf-github-app-title">{{application}}</h3>
<p *ngIf="version" data-automation-id="adf-github-version">{{ 'ABOUT.VERSION' | translate }}: {{ version }}</p>
@ -13,4 +12,3 @@
</div>
</mat-card>
</div>
</div>

View File

@ -0,0 +1,11 @@
<mat-table [dataSource]="data">
<ng-container *ngFor="let column of columns" [matColumnDef]="column.columnDef">
<mat-header-cell *matHeaderCellDef>
{{ column.header | translate }}
</mat-header-cell>
<mat-cell *matCellDef="let row">{{ column.cell(row) }}</mat-cell>
</ng-container>
<mat-header-row *matHeaderRowDef="displayedColumns"></mat-header-row>
<mat-row *matRowDef="let row; columns: displayedColumns"></mat-row>
</mat-table>

View File

@ -0,0 +1,45 @@
/*!
* @license
* Copyright 2019 Alfresco Software, Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { Component, ViewEncapsulation, ChangeDetectionStrategy, Input } from '@angular/core';
import { LicenseData } from '../interfaces';
@Component({
selector: 'adf-about-license-list',
templateUrl: './about-license-list.component.html',
encapsulation: ViewEncapsulation.None,
changeDetection: ChangeDetectionStrategy.OnPush
})
export class AboutLicenseListComponent {
columns = [
{
columnDef: 'property',
header: 'ABOUT.LICENSE.PROPERTY',
cell: (row: LicenseData) => `${row.property}`
},
{
columnDef: 'value',
header: 'ABOUT.LICENSE.VALUE',
cell: (row: LicenseData) => `${row.value}`
}
];
displayedColumns = this.columns.map((x) => x.columnDef);
@Input()
data: LicenseData[] = [];
}

View File

@ -0,0 +1,11 @@
<mat-table [dataSource]="data">
<ng-container *ngFor="let column of columns" [matColumnDef]="column.columnDef">
<mat-header-cell *matHeaderCellDef>
{{ column.header | translate }}
</mat-header-cell>
<mat-cell *matCellDef="let row">{{ column.cell(row) }}</mat-cell>
</ng-container>
<mat-header-row *matHeaderRowDef="displayedColumns"></mat-header-row>
<mat-row *matRowDef="let row; columns: displayedColumns"></mat-row>
</mat-table>

View File

@ -0,0 +1,45 @@
/*!
* @license
* Copyright 2019 Alfresco Software, Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { Component, ViewEncapsulation, ChangeDetectionStrategy, Input } from '@angular/core';
import { ModuleInfo } from '@alfresco/js-api';
@Component({
selector: 'adf-about-module-list',
templateUrl: './module-list.component.html',
encapsulation: ViewEncapsulation.None,
changeDetection: ChangeDetectionStrategy.OnPush
})
export class ModuleListComponent {
columns = [
{
columnDef: 'title',
header: 'ABOUT.MODULES.NAME',
cell: (row: ModuleInfo) => `${row.title}`
},
{
columnDef: 'version',
header: 'ABOUT.MODULES.VERSION',
cell: (row: ModuleInfo) => `${row.version}`
}
];
displayedColumns = this.columns.map((x) => x.columnDef);
@Input()
data: Array<ModuleInfo> = [];
}

View File

@ -0,0 +1,11 @@
<mat-table [dataSource]="data">
<ng-container *ngFor="let column of columns" [matColumnDef]="column.columnDef">
<mat-header-cell *matHeaderCellDef>
{{ column.header | translate }}
</mat-header-cell>
<mat-cell *matCellDef="let row">{{ column.cell(row) }}</mat-cell>
</ng-container>
<mat-header-row *matHeaderRowDef="displayedColumns"></mat-header-row>
<mat-row *matRowDef="let row; columns: displayedColumns"></mat-row>
</mat-table>

View File

@ -0,0 +1,45 @@
/*!
* @license
* Copyright 2019 Alfresco Software, Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { Component, ViewEncapsulation, ChangeDetectionStrategy, Input } from '@angular/core';
import { PackageInfo } from '../interfaces';
@Component({
selector: 'adf-about-package-list',
templateUrl: './package-list.component.html',
encapsulation: ViewEncapsulation.None,
changeDetection: ChangeDetectionStrategy.OnPush
})
export class PackageListComponent {
columns = [
{
columnDef: 'title',
header: 'ABOUT.PACKAGES.NAME',
cell: (row: PackageInfo) => `${row.name}`
},
{
columnDef: 'version',
header: 'ABOUT.PACKAGES.VERSION',
cell: (row: PackageInfo) => `${row.version}`
}
];
displayedColumns = this.columns.map((x) => x.columnDef);
@Input()
data: Array<PackageInfo> = [];
}

View File

@ -0,0 +1,67 @@
<header data-automation-id="adf-about-product-version-title">{{ 'ABOUT.VERSIONS.TITLE' | translate }}</header>
<mat-card class="mat-elevation-z0">
<ng-container *ngIf="process" data-automation-id="adf-about-bpm-service">
<article>
<div>{{ 'ABOUT.VERSIONS.PROCESS_SERVICE' | translate }}</div>
<p data-automation-id="adf-about-bpm-version">
{{ 'ABOUT.VERSIONS.LABELS.VERSION' | translate }}: {{ process.majorVersion }}.{{
process.minorVersion }}.{{ process.revisionVersion }}
</p>
</article>
</ng-container>
<br>
<ng-container *ngIf="repository" data-automation-id="adf-about-ecm-service">
<article>
<div>{{ 'ABOUT.VERSIONS.CONTENT_SERVICE' | translate }}</div>
<p data-automation-id="adf-about-ecm-edition">
{{ 'ABOUT.VERSIONS.LABELS.EDITION' | translate }}: {{ repository.edition }}
</p>
<p data-automation-id="adf-about-ecm-version">
{{ 'ABOUT.VERSIONS.LABELS.VERSION' | translate }}: {{ repository.version.display }}
</p>
</article>
</ng-container>
<br>
<ng-container *ngIf="modeling$ | async as modeling" data-automation-id="adf-about-ecm-service">
<article>
<div>{{ 'ABOUT.VERSIONS.MODELING_SERVICE' | translate }}</div>
<p>
{{ 'ABOUT.VERSIONS.LABELS.VERSION' | translate }}: {{ modeling.version }}
</p>
</article>
</ng-container>
<br>
<ng-container *ngIf="deployment$| async as deployment" data-automation-id="adf-about-ecm-service">
<article>
<div>{{ 'ABOUT.VERSIONS.DEPLOYMENT_SERVICE' | translate }}</div>
<p>
{{ 'ABOUT.VERSIONS.LABELS.VERSION' | translate }}: {{ deployment.version }}
</p>
</article>
</ng-container>
<br>
<ng-container *ngIf="rb$ | async as rb" data-automation-id="adf-about-ecm-service">
<article>
<div>{{ 'ABOUT.VERSIONS.RB' | translate }}</div>
<p>
{{ 'ABOUT.VERSIONS.LABELS.EDITION' | translate }}: {{ rb.artifact }}
</p>
<p>
{{ 'ABOUT.VERSIONS.LABELS.VERSION' | translate }}: {{ rb.version }}
</p>
</article>
</ng-container>
<br>
<ng-container *ngIf="query$ | async as query" data-automation-id="adf-about-ecm-service">
<article>
<div>{{ 'ABOUT.VERSIONS.QUERY_SERVICE' | translate }}</div>
<p>
{{ 'ABOUT.VERSIONS.LABELS.VERSION' | translate }}: {{ query.version }}
</p>
</article>
</ng-container>
</mat-card>

View File

@ -0,0 +1,67 @@
/*!
* @license
* Copyright 2019 Alfresco Software, Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { Component, Input, ViewEncapsulation } from '@angular/core';
import { RepositoryInfo } from '@alfresco/js-api';
import { Observable } from 'rxjs';
import { BpmProductVersionModel } from '../../models/product-version.model';
import { AaeInfoService, ActivitiDependencyInfo } from '../services/aae-info.service';
import { AppConfigService } from '../../app-config/app-config.service';
@Component({
selector: 'adf-about-platform-version',
templateUrl: './about-platform-version.component.html',
encapsulation: ViewEncapsulation.None
})
export class AboutPlatformVersionComponent {
/** repository info. */
@Input()
repository: RepositoryInfo = null;
/** process info. */
@Input()
process: BpmProductVersionModel = null;
modeling$: Observable<ActivitiDependencyInfo>;
deployment$: Observable<ActivitiDependencyInfo>;
rb$: Observable<ActivitiDependencyInfo>;
query$: Observable<ActivitiDependencyInfo>;
constructor(private aaeInfoService: AaeInfoService, private appConfigService: AppConfigService) {
this.modelingInfo();
this.deploymentInfo();
this.rbInfo();
}
modelingInfo() {
this.modeling$ = this.aaeInfoService.getServiceVersion('modeling-service');
}
deploymentInfo() {
this.deployment$ = this.aaeInfoService.getServiceVersion('deployment-service');
}
rbInfo() {
this.rb$ = this.aaeInfoService.getServiceVersion(`${this.appConfigService.get('oauth2.clientId')}/rb`);
}
queryInfo() {
this.query$ = this.aaeInfoService.getServiceVersion(`${this.appConfigService.get('oauth2.clientId')}/query`);
}
}

View File

@ -1,35 +0,0 @@
<div class="adf-about-product-version-container" *ngIf="bpmVersion || ecmVersion">
<h3 data-automation-id="adf-about-product-version-title">{{ 'ABOUT.VERSIONS.TITLE' | translate }}</h3>
<mat-card>
<div *ngIf="bpmVersion" data-automation-id="adf-about-bpm-service">
<h3>{{ 'ABOUT.VERSIONS.PROCESS_SERVICE' | translate }}</h3>
<p data-automation-id="adf-about-bpm-edition">
{{ 'ABOUT.VERSIONS.LABELS.EDITION' | translate }}: {{ bpmVersion.edition }}
</p>
<p data-automation-id="adf-about-bpm-version">
{{ 'ABOUT.VERSIONS.LABELS.VERSION' | translate }}: {{ bpmVersion.majorVersion }}.{{
bpmVersion.minorVersion }}.{{ bpmVersion.revisionVersion }}
</p>
</div>
<div *ngIf="ecmVersion" data-automation-id="adf-about-ecm-service">
<h3>{{ 'ABOUT.VERSIONS.CONTENT_SERVICE' | translate }}</h3>
<p data-automation-id="adf-about-ecm-edition">
{{ 'ABOUT.VERSIONS.LABELS.EDITION' | translate }}: {{ ecmVersion.edition }}
</p>
<p data-automation-id="adf-about-ecm-version">
{{ 'ABOUT.VERSIONS.LABELS.VERSION' | translate }}: {{ ecmVersion.version.display }}
</p>
</div>
</mat-card>
<div *ngIf="ecmVersion" data-automation-id="adf-about-ecm">
<h3 data-automation-id="adf-about-ecm-license-title">{{ 'ABOUT.VERSIONS.LABELS.LICENSE' | translate }}</h3>
<adf-datatable [data]="license"></adf-datatable>
<h3 data-automation-id="adf-about-ecm-status-title"> {{ 'ABOUT.VERSIONS.LABELS.STATUS' | translate }}</h3>
<adf-datatable [data]="status"></adf-datatable>
<h3 data-automation-id="adf-about-ecm-modules-title">{{ 'ABOUT.VERSIONS.LABELS.MODULES' | translate }}</h3>
<adf-datatable [data]="modules"></adf-datatable>
</div>
</div>

View File

@ -1,3 +0,0 @@
.adf-about-product-version-container {
padding: 10px;
}

View File

@ -1,116 +0,0 @@
/*!
* @license
* Copyright 2019 Alfresco Software, Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { CoreTestingModule } from '../../testing/core.testing.module';
import { setupTestBed } from '../../testing/setup-test-bed';
import { AboutProductVersionComponent } from './about-product-version.component';
import { DiscoveryApiService } from '../../services/discovery-api.service';
import { AuthenticationService } from '../../services/authentication.service';
import { of } from 'rxjs';
import { aboutAPSMockDetails, mockModules } from '../about.mock';
import { TranslateModule } from '@ngx-translate/core';
describe('AboutProductVersionComponent', () => {
let fixture: ComponentFixture<AboutProductVersionComponent>;
let authenticationService: AuthenticationService;
let discoveryApiService: DiscoveryApiService;
setupTestBed({
imports: [
TranslateModule.forRoot(),
CoreTestingModule
]
});
beforeEach(() => {
fixture = TestBed.createComponent(AboutProductVersionComponent);
authenticationService = TestBed.inject(AuthenticationService);
discoveryApiService = TestBed.inject(DiscoveryApiService);
spyOn(discoveryApiService, 'getEcmProductInfo').and.returnValue(of(mockModules));
spyOn(authenticationService, 'isBpmLoggedIn').and.returnValue(true);
spyOn(authenticationService, 'isEcmLoggedIn').and.returnValue(true);
spyOn(discoveryApiService, 'getBpmProductInfo').and.returnValue(of(aboutAPSMockDetails));
fixture.detectChanges();
});
afterEach(() => {
fixture.destroy();
});
it('Should display title', () => {
const titleElement = fixture.nativeElement.querySelector('[data-automation-id="adf-about-product-version-title"]');
expect(titleElement === null).toBeFalsy();
expect(titleElement.innerText).toBe('ABOUT.VERSIONS.TITLE');
});
it('should display bpm details', async() => {
fixture.detectChanges();
await fixture.whenStable();
const version = fixture.nativeElement.querySelector('[data-automation-id="adf-about-bpm-version"]');
expect(version.innerText).toEqual('ABOUT.VERSIONS.LABELS.VERSION: 1.10.0');
});
it('should display ecm details', async() => {
fixture.detectChanges();
await fixture.whenStable();
const version = fixture.nativeElement.querySelector('[data-automation-id="adf-about-ecm-version"]');
expect(version.innerText).toEqual('ABOUT.VERSIONS.LABELS.VERSION: 6.2.0.0');
});
it('should display both bpm & ecm details', async() => {
fixture.detectChanges();
await fixture.whenStable();
const bpmVersion = fixture.nativeElement.querySelector('[data-automation-id="adf-about-bpm-version"]');
const ecmVersion = fixture.nativeElement.querySelector('[data-automation-id="adf-about-ecm-version"]');
expect(bpmVersion.innerText).toEqual('ABOUT.VERSIONS.LABELS.VERSION: 1.10.0');
expect(ecmVersion.innerText).toEqual('ABOUT.VERSIONS.LABELS.VERSION: 6.2.0.0');
});
it('should display license details', async() => {
fixture.detectChanges();
await fixture.whenStable();
const dataTable = fixture.nativeElement.querySelector('.adf-datatable');
const issueAt = fixture.nativeElement.querySelector('[data-automation-id="text_2018-12-20T12:07:31.276+0000"]');
const expiresAt = fixture.nativeElement.querySelector('[data-automation-id="text_2019-05-31T23:00:00.000+0000"]');
expect(dataTable).not.toBeNull();
expect(issueAt.innerText).toEqual('2018-12-20T12:07:31.276+0000');
expect(expiresAt.innerText).toEqual('2019-05-31T23:00:00.000+0000');
});
it('should display status details', async() => {
fixture.detectChanges();
await fixture.whenStable();
const dataTable = fixture.nativeElement.querySelector('.adf-datatable');
const readOnly = fixture.nativeElement.querySelector('[data-automation-id="text_false"]');
const isAuditEnabled = fixture.nativeElement.querySelector('[data-automation-id="text_true"]');
expect(dataTable).not.toBeNull();
expect(readOnly.innerText).toEqual('false');
expect(isAuditEnabled.innerText).toEqual('true');
});
it('should display module details', async() => {
fixture.detectChanges();
await fixture.whenStable();
const dataTable = fixture.nativeElement.querySelector('.adf-datatable');
const moduleTitle = fixture.nativeElement.querySelector('[data-automation-id="text_ABC Repo"]');
const moduleTitleTwo = fixture.nativeElement.querySelector('[data-automation-id="text_AOFS Module"]');
expect(dataTable).not.toBeNull();
expect(moduleTitle.innerText).toEqual('ABC Repo');
expect(moduleTitleTwo.innerText).toEqual('AOFS Module');
});
});

View File

@ -1,139 +0,0 @@
/*!
* @license
* Copyright 2019 Alfresco Software, Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { Component, OnInit, ViewEncapsulation } from '@angular/core';
import { BpmProductVersionModel, EcmProductVersionModel } from '../../models/product-version.model';
import { ObjectDataTableAdapter } from '../../datatable/data/object-datatable-adapter';
import { AuthenticationService } from '../../services/authentication.service';
import { DiscoveryApiService } from '../../services/discovery-api.service';
@Component({
selector: 'adf-about-product-version',
templateUrl: './about-product-version.component.html',
encapsulation: ViewEncapsulation.None
})
export class AboutProductVersionComponent implements OnInit {
ecmVersion: EcmProductVersionModel = null;
bpmVersion: BpmProductVersionModel = null;
status: ObjectDataTableAdapter;
license: ObjectDataTableAdapter;
modules: ObjectDataTableAdapter;
constructor(private authService: AuthenticationService,
private discovery: DiscoveryApiService) {}
ngOnInit() {
if (this.authService.isEcmLoggedIn()) {
this.setECMInfo();
}
if (this.authService.isBpmLoggedIn()) {
this.setBPMInfo();
}
}
setECMInfo() {
this.discovery.getEcmProductInfo().subscribe((ecmVers) => {
this.ecmVersion = ecmVers;
this.modules = new ObjectDataTableAdapter(this.ecmVersion.modules, [
{ type: 'text', key: 'id', title: 'ABOUT.TABLE_HEADERS.MODULES.ID', sortable: true },
{ type: 'text', key: 'title', title: 'ABOUT.TABLE_HEADERS.MODULES.TITLE', sortable: true },
{ type: 'text', key: 'version', title: 'ABOUT.TABLE_HEADERS.MODULES.DESCRIPTION', sortable: true },
{
type: 'text',
key: 'installDate',
title: 'ABOUT.TABLE_HEADERS.MODULES.INSTALL_DATE',
sortable: true
},
{
type: 'text',
key: 'installState',
title: 'ABOUT.TABLE_HEADERS.MODULES.INSTALL_STATE',
sortable: true
},
{
type: 'text',
key: 'versionMin',
title: 'ABOUT.TABLE_HEADERS.MODULES.VERSION_MIN',
sortable: true
},
{
type: 'text',
key: 'versionMax',
title: 'ABOUT.TABLE_HEADERS.MODULES.VERSION_MAX',
sortable: true
}
]);
this.status = new ObjectDataTableAdapter([this.ecmVersion.status], [
{ type: 'text', key: 'isReadOnly', title: 'ABOUT.TABLE_HEADERS.STATUS.READ_ONLY', sortable: true },
{
type: 'text',
key: 'isAuditEnabled',
title: 'ABOUT.TABLE_HEADERS.STATUS.AUDIT_ENABLED',
sortable: true
},
{
type: 'text',
key: 'isQuickShareEnabled',
title: 'ABOUT.TABLE_HEADERS.STATUS.QUICK_SHARE_ENABLED',
sortable: true
},
{
type: 'text',
key: 'isThumbnailGenerationEnabled',
title: 'ABOUT.TABLE_HEADERS.STATUS.THUMBNAIL_ENABLED',
sortable: true
}
]);
this.license = new ObjectDataTableAdapter([this.ecmVersion.license], [
{ type: 'text', key: 'issuedAt', title: 'ABOUT.TABLE_HEADERS.LICENSE.ISSUES_AT', sortable: true },
{ type: 'text', key: 'expiresAt', title: 'ABOUT.TABLE_HEADERS.LICENSE.EXPIRES_AT', sortable: true },
{
type: 'text',
key: 'remainingDays',
title: 'ABOUT.TABLE_HEADERS.LICENSE.REMAINING_DAYS',
sortable: true
},
{ type: 'text', key: 'holder', title: 'ABOUT.TABLE_HEADERS.LICENSE.HOLDER', sortable: true },
{ type: 'text', key: 'mode', title: 'ABOUT.TABLE_HEADERS.LICENSE.MODE', sortable: true },
{
type: 'text',
key: 'isClusterEnabled',
title: 'ABOUT.TABLE_HEADERS.LICENSE.CLUSTER_ENABLED',
sortable: true
},
{
type: 'text',
key: 'isCryptodocEnabled',
title: 'ABOUT.TABLE_HEADERS.LICENSE.CRYPTODOC_ENABLED',
sortable: true
}
]);
});
}
setBPMInfo() {
this.discovery.getBpmProductInfo().subscribe((bpmVersion) => {
this.bpmVersion = bpmVersion;
});
}
}

View File

@ -1,7 +1,6 @@
<div class="adf-github-link-container">
<h3 data-automation-id="adf-about-setting-title">{{ 'ABOUT.SERVER_SETTINGS.TITLE' | translate }}</h3>
<small>{{ 'ABOUT.SERVER_SETTINGS.DESCRIPTION' | translate }}</small>
<mat-card>
<header data-automation-id="adf-about-setting-title">{{ 'ABOUT.SERVER_SETTINGS.TITLE' | translate }}</header>
<mat-card class="mat-elevation-z0">
<p data-automation-id="adf-process-service-host">
{{ 'ABOUT.SERVER_SETTINGS.PROCESS_SERVICE_HOST' | translate: {value: bpmHost} }}
</p>

View File

@ -0,0 +1,11 @@
<mat-table [dataSource]="data">
<ng-container *ngFor="let column of columns" [matColumnDef]="column.columnDef">
<mat-header-cell *matHeaderCellDef>
{{ column.header | translate }}
</mat-header-cell>
<mat-cell *matCellDef="let row">{{ column.cell(row) }}</mat-cell>
</ng-container>
<mat-header-row *matHeaderRowDef="displayedColumns"></mat-header-row>
<mat-row *matRowDef="let row; columns: displayedColumns"></mat-row>
</mat-table>

View File

@ -0,0 +1,45 @@
/*!
* @license
* Copyright 2019 Alfresco Software, Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { Component, ViewEncapsulation, ChangeDetectionStrategy, Input } from '@angular/core';
import { StatusData } from '../interfaces';
@Component({
selector: 'adf-about-status-list',
templateUrl: './about-status-list.component.html',
encapsulation: ViewEncapsulation.None,
changeDetection: ChangeDetectionStrategy.OnPush
})
export class AboutStatusListComponent {
columns = [
{
columnDef: 'property',
header: 'ABOUT.STATUS.PROPERTY',
cell: (row: StatusData) => `${row.property}`
},
{
columnDef: 'value',
header: 'ABOUT.STATUS.VALUE',
cell: (row: StatusData) => `${row.value}`
}
];
displayedColumns = this.columns.map((x) => x.columnDef);
@Input()
data: StatusData[] = [];
}

View File

@ -0,0 +1,41 @@
<div class="adf-about-container">
<adf-about-github-link *ngIf="dev" [application]="pkg.application" [url]="url" ></adf-about-github-link>
<adf-about-server-settings *ngIf="dev" ></adf-about-server-settings>
<adf-about-platform-version [repository]="repository"
[process]="bpmVersion">
</adf-about-platform-version>
<ng-container *ngIf="repository">
<article *ngIf="licenseEntries">
<header>{{ 'ABOUT.LICENSE.TITLE' | translate }}</header>
<adf-about-license-list [data]="licenseEntries"></adf-about-license-list>
</article>
<article *ngIf="statusEntries">
<header>{{ 'ABOUT.STATUS.TITLE' | translate }}</header>
<adf-about-status-list [data]="statusEntries"></adf-about-status-list>
</article>
<article *ngIf="repository?.modules">
<header>{{ 'ABOUT.MODULES.TITLE' | translate }}</header>
<adf-about-module-list [data]="repository.modules"></adf-about-module-list>
</article>
</ng-container>
<article *ngIf="dependencyEntries && dev" >
<header>{{ 'ABOUT.PACKAGES.TITLE' | translate }}</header>
<adf-about-package-list [data]="dependencyEntries"></adf-about-package-list>
</article>
<ng-container *ngIf="extensions$ | async as extensions">
<article *ngIf="extensions.length > 0">
<header>{{ 'ABOUT.PLUGINS.TITLE' | translate }}</header>
<adf-about-extension-list [data]="extensions"></adf-about-extension-list>
</article>
</ng-container>
</div>

View File

@ -0,0 +1,12 @@
adf-about {
.adf-about-container {
margin: 10px 0 5px 2px;
}
header {
margin: 5px;
}
}

View File

@ -0,0 +1,67 @@
/*!
* @license
* Copyright 2019 Alfresco Software, Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { Meta, moduleMetadata, Story } from '@storybook/angular';
import { AboutComponent } from './about.component';
import { AboutModule } from './about.module';
import { AuthenticationService, DiscoveryApiService } from '../services';
import { AppConfigServiceMock, AuthenticationMock } from '../mock';
import { DiscoveryApiServiceMock } from '../mock/discovery-api.service.mock';
import { AppExtensionService, AppExtensionServiceMock } from '@alfresco/adf-extensions';
import { AppConfigService } from '../app-config/app-config.service';
import { CoreStoryModule } from '../testing/core.story.module';
export default {
component: AboutComponent,
title: 'Core/Components/About',
decorators: [
moduleMetadata({
imports: [CoreStoryModule, AboutModule],
providers: [
{ provide: AuthenticationService, useClass: AuthenticationMock },
{ provide: DiscoveryApiService, useClass: DiscoveryApiServiceMock },
{ provide: AppExtensionService, useClass: AppExtensionServiceMock },
{ provide: AppConfigService, useClass: AppConfigServiceMock }
]
})
]
} as Meta;
const template: Story<AboutComponent> = (args: AboutComponent) => ({
props: args
});
export const devAbout = template.bind({});
devAbout.args = {
dev: true,
pkg: {
name: 'My Storybook App', commit: 'my-commit-value', version: '1.0.0', dependencies: {
'@alfresco/adf-content-services': '4.7.0',
'@alfresco/adf-core': '4.7.0',
'@alfresco/adf-extensions': '4.7.0',
'@alfresco/adf-process-services': '4.7.0',
'@alfresco/adf-process-services-cloud': '4.7.0',
'@alfresco/js-api': '4.7.0-3976'
}
}
};
export const prodAbout = template.bind({});
prodAbout.args = {
dev: false
};

View File

@ -0,0 +1,124 @@
/*!
* @license
* Copyright 2019 Alfresco Software, Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { Component, Input, OnInit, ViewEncapsulation } from '@angular/core';
import { AppExtensionService, ExtensionRef } from '@alfresco/adf-extensions';
import { Observable } from 'rxjs';
import { AppConfigService } from '../app-config/app-config.service';
import { RepositoryInfo } from '@alfresco/js-api';
import { BpmProductVersionModel } from '../models/product-version.model';
import { AuthenticationService } from '../services/authentication.service';
import { DiscoveryApiService } from '../services/discovery-api.service';
import { LicenseData, PackageInfo, StatusData } from './interfaces';
@Component({
selector: 'adf-about',
templateUrl: './about.component.html',
styleUrls: ['./about.component.scss'],
encapsulation: ViewEncapsulation.None
})
export class AboutComponent implements OnInit {
repository: RepositoryInfo = null;
bpmVersion: BpmProductVersionModel = null;
statusEntries: StatusData[];
licenseEntries: LicenseData[];
dependencyEntries: PackageInfo[] = [];
url: string;
version: string;
dependencies: string;
application: string;
/** If active show more information about the app and the platform useful in debug. */
@Input() dev: boolean = false;
/** pkg json. */
@Input() pkg: any;
/** Regular expression for filtering dependencies packages. */
@Input() regexp = '^(@alfresco)';
extensions$: Observable<ExtensionRef[]>;
constructor(private authService: AuthenticationService,
private discovery: DiscoveryApiService,
private appExtensions: AppExtensionService,
private appConfigService: AppConfigService) {
this.extensions$ = this.appExtensions.references$;
this.application = this.appConfigService.get<string>(
'application.name'
);
}
ngOnInit() {
this.url = `https://github.com/Alfresco/${this.pkg?.name}/commits/${this.pkg?.commit}`;
this.version = this.pkg?.version;
this.dependencies = this.pkg?.dependencies;
if (this.dependencies) {
const alfrescoPackages = Object.keys(this.dependencies).filter((val) => {
return new RegExp(this.regexp).test(val);
});
alfrescoPackages.forEach((val) => {
this.dependencyEntries.push({
name: val,
version: (this.dependencies[val])
});
});
}
if (this.authService.isEcmLoggedIn()) {
this.setECMInfo();
}
if (this.authService.isBpmLoggedIn()) {
this.setBPMInfo();
}
}
setECMInfo() {
this.discovery.getEcmProductInfo().subscribe((repository) => {
this.repository = repository;
this.statusEntries = Object.keys(repository.status).map((key) => {
return {
property: key,
value: repository.status[key]
};
});
if (repository.license) {
this.licenseEntries = Object.keys(repository.license).map((key) => {
return {
property: key,
value: repository.license[key]
};
});
}
});
}
setBPMInfo() {
this.discovery.getBpmProductInfo().subscribe((bpmVersion) => {
this.bpmVersion = bpmVersion;
});
}
}

View File

@ -19,30 +19,44 @@ import { CommonModule } from '@angular/common';
import { NgModule } from '@angular/core';
import { TranslateModule } from '@ngx-translate/core';
import { MaterialModule } from '../material.module';
import { DataTableModule } from '../datatable/datatable.module';
import { AboutApplicationModulesComponent } from './about-application-modules/about-application-modules.component';
import { AboutProductVersionComponent } from './about-product-version/about-product-version.component';
import { AboutGithubLinkComponent } from './about-github-link/about-github-link.component';
import { AboutServerSettingsComponent } from './about-server-settings/about-server-settings.component';
import { AboutExtensionListComponent } from './about-extension-list/about-extension-list.component';
import { AboutLicenseListComponent } from './about-license-list/about-license-list.component';
import { PackageListComponent } from './about-package/package-list.component';
import { AboutStatusListComponent } from './about-status-list/about-status-list.component';
import { ModuleListComponent } from './about-module-list/module-list.component';
import { AboutPlatformVersionComponent } from './about-platform-version/about-platform-version.component';
import { AboutComponent } from './about.component';
@NgModule({
imports: [
CommonModule,
MaterialModule,
TranslateModule,
DataTableModule
TranslateModule
],
declarations: [
AboutApplicationModulesComponent,
AboutProductVersionComponent,
AboutComponent,
AboutPlatformVersionComponent,
AboutGithubLinkComponent,
AboutServerSettingsComponent
AboutServerSettingsComponent,
AboutExtensionListComponent,
AboutLicenseListComponent,
PackageListComponent,
AboutStatusListComponent,
ModuleListComponent
],
exports: [
AboutApplicationModulesComponent,
AboutProductVersionComponent,
AboutComponent,
AboutPlatformVersionComponent,
AboutGithubLinkComponent,
AboutServerSettingsComponent
AboutServerSettingsComponent,
AboutExtensionListComponent,
AboutLicenseListComponent,
PackageListComponent,
AboutStatusListComponent,
ModuleListComponent
]
})
export class AboutModule {}

View File

@ -0,0 +1,31 @@
/*!
* @license
* Copyright 2019 Alfresco Software, Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
export interface PackageInfo {
name: string;
version: string;
}
export interface StatusData {
property: string;
value: string;
}
export interface LicenseData {
property: string;
value: string;
}

View File

@ -15,9 +15,14 @@
* limitations under the License.
*/
export * from './about-extension-list/about-extension-list.component';
export * from './about-github-link/about-github-link.component';
export * from './about-product-version/about-product-version.component';
export * from './about-application-modules/about-application-modules.component';
export * from './about-license-list/about-license-list.component';
export * from './about-module-list/module-list.component';
export * from './about-package/package-list.component';
export * from './about-platform-version/about-platform-version.component';
export * from './about-server-settings/about-server-settings.component';
export * from './about-status-list/about-status-list.component';
export * from './about.component';
export * from './about.module';

View File

@ -0,0 +1,55 @@
/*!
* @license
* Copyright 2019 Alfresco Software, Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { map } from 'rxjs/operators';
import { Observable } from 'rxjs';
import { AppConfigService } from '../../app-config/app-config.service';
export interface ActivitiDependencyInfo {
artifact: string;
version: string;
activiti: string;
}
@Injectable({
providedIn: 'root'
})
export class AaeInfoService {
contextRoot = '';
constructor(protected httpClient: HttpClient, protected appConfigService: AppConfigService) {
this.contextRoot = appConfigService.get('bpmHost', '');
}
getServiceVersion(serviceName: string): Observable<ActivitiDependencyInfo> {
return this.httpClient.get<any>(`${this.contextRoot}/${serviceName}/actuator/info`).pipe(
map((response: any) => {
let activitiVersion = 'N/A';
if (response.build.activiti) {
activitiVersion = response.build.activiti.version;
}
return {
artifact: response.build.artifact,
version: response.build.version,
activiti: activitiVersion
};
})
);
}
}

View File

@ -22,7 +22,10 @@ import { CardViewUpdateService } from '../../services/card-view-update.service';
import { CardViewTextItemComponent } from './card-view-textitem.component';
import { setupTestBed } from '../../../testing/setup-test-bed';
import { CoreTestingModule } from '../../../testing/core.testing.module';
import { CardViewItemFloatValidator, CardViewItemIntValidator, CardViewIntItemModel, CardViewFloatItemModel } from '@alfresco/adf-core';
import { CardViewItemFloatValidator } from '../../validators/card-view-item-float.validator';
import { CardViewItemIntValidator } from '../../validators/card-view-item-int.validator';
import { CardViewIntItemModel } from '../../models/card-view-intitem.model';
import { CardViewFloatItemModel } from '../../models/card-view-floatitem.model';
import { MatChipsModule } from '@angular/material/chips';
import { ClipboardService } from '../../../clipboard/clipboard.service';
import { DebugElement, SimpleChange } from '@angular/core';

View File

@ -17,7 +17,7 @@
import { DateCellComponent } from '../date-cell/date-cell.component';
import { Subject } from 'rxjs';
import { AppConfigService } from '@alfresco/adf-core';
import { AppConfigService } from '../../../app-config/app-config.service';
import { Node } from '@alfresco/js-api';
import { TestBed } from '@angular/core/testing';
import { CoreTestingModule } from '../../../testing';

View File

@ -20,7 +20,7 @@ import { ComponentFixture, TestBed } from '@angular/core/testing';
import { Router } from '@angular/router';
import { of, throwError } from 'rxjs';
import { AuthenticationService } from '../services';
import { AppConfigService } from '../app-config';
import { AppConfigService } from '../app-config/app-config.service';
import { setupTestBed } from '../testing/setup-test-bed';
import { LogoutDirective } from './logout.directive';
import { CoreTestingModule } from '../testing/core.testing.module';

View File

@ -22,7 +22,7 @@ import { TestBed, ComponentFixture } from '@angular/core/testing';
import { setupTestBed } from '../testing/setup-test-bed';
import { CoreTestingModule } from '../testing/core.testing.module';
import { VersionCompatibilityService } from '../services/version-compatibility.service';
import { VersionModel } from '../models/product-version.model';
import { VersionInfo } from '@alfresco/js-api';
@Component({
template: `
@ -52,7 +52,7 @@ describe('VersionCompatibilityDirective', () => {
let fixture: ComponentFixture<TestComponent>;
let versionCompatibilityService: VersionCompatibilityService;
const acsResponceMock = new VersionModel({
const acsResponceMock = new VersionInfo({
display: '7.0.1',
major: '7',
minor: '0',

View File

@ -493,14 +493,17 @@
"VERSION": "Version",
"SERVER_SETTINGS": {
"TITLE": "Server settings",
"DESCRIPTION": "The values below are taken from the AppConfigService",
"CONTENT_SERVICE_HOST": "Alfresco Content Services URL: {{ value }}",
"PROCESS_SERVICE_HOST": "Alfresco Process Services URL: {{ value }}"
},
"VERSIONS": {
"TITLE": "Product Versions",
"CONTENT_SERVICE": "ECM",
"PROCESS_SERVICE": "BPM",
"CONTENT_SERVICE": "Content Services",
"PROCESS_SERVICE": "Process Services",
"MODELING_SERVICE": "Modeling Services",
"DEPLOYMENT_SERVICE": "Deployment Services",
"QUERY_SERVICE": "Deployment Services",
"RB": "Runtime",
"LABELS": {
"EDITION": "Edition",
"VERSION": "Version",
@ -515,33 +518,8 @@
},
"PACKAGES": {
"TITLE": "Packages",
"DESCRIPTION": "Current project is using the following ADF libraries:"
},
"TABLE_HEADERS": {
"MODULES": {
"ID": "ID",
"TITLE": "Title",
"DESCRIPTION": "Description",
"INSTALL_DATE": "Install Date",
"INSTALL_STATE": "Install State",
"VERSION_MIN": "Version Minor",
"VERSION_MAX": "Version Max"
},
"STATUS": {
"READ_ONLY": "ReadOnly",
"AUDIT_ENABLED": "Is Audit Enabled",
"QUICK_SHARE_ENABLED": "Is Quick Shared Enabled",
"THUMBNAIL_ENABLED": "Thumbnail Generation"
},
"LICENSE": {
"ISSUES_AT": "Issued At",
"EXPIRES_AT": "Expires At",
"REMAINING_DAYS": "Remaining Days",
"HOLDER": "Holder",
"MODE": "Mode",
"CLUSTER_ENABLED": "Is Cluster Enabled",
"CRYPTODOC_ENABLED": "Is Cryptodoc Enabled"
}
"NAME": "Name",
"VERSION": "Version"
},
"EXTENSIONS": {
"TITLE": "Plugins",
@ -554,6 +532,26 @@
"RUNTIME": "Runtime",
"DESCRIPTION": "Description"
}
},
"LICENSE": {
"TITLE": "License",
"PROPERTY": "Property",
"VALUE": "Value"
},
"STATUS": {
"TITLE": "Status",
"PROPERTY": "Property",
"VALUE": "Value"
},
"MODULES": {
"TITLE": "Modules",
"NAME": "Name",
"VERSION": "Version"
},
"PLUGINS": {
"TITLE": "Plugins",
"NAME": "Name",
"VERSION": "Version"
}
},
"CLIPBOARD": {

View File

@ -31,7 +31,7 @@ import { UserPreferencesService } from '../../../services/user-preferences.servi
import { CommonModule } from '@angular/common';
import { Direction } from '@angular/cdk/bidi';
import { of } from 'rxjs';
import { setupTestBed } from '@alfresco/adf-core';
import { setupTestBed } from '../../../testing/setup-test-bed';
@Component({
selector: 'adf-layout-container',

View File

@ -18,14 +18,21 @@
import { Observable, of, throwError } from 'rxjs';
import { RedirectionModel } from '../models/redirection.model';
// TODO: should be extending AuthenticationService
export class AuthenticationMock /*extends AuthenticationService*/ {
export class AuthenticationMock {
private redirectUrl: RedirectionModel = null;
setRedirectUrl(url: RedirectionModel) {
this.redirectUrl = url;
}
isEcmLoggedIn(): boolean {
return true;
}
isBpmLoggedIn(): boolean {
return true;
}
getRedirectUrl(): string | null {
return this.redirectUrl ? this.redirectUrl.url : null;
}
@ -50,7 +57,10 @@ export class AuthenticationMock /*extends AuthenticationService*/ {
}
if (username === 'fake-username-ECM-access-error' && password === 'fake-password') {
return throwError({message: 'ERROR: 00170728 Access Denied. The system is currently in read-only mode', status: 403});
return throwError({
message: 'ERROR: 00170728 Access Denied. The system is currently in read-only mode',
status: 403
});
}
return throwError('Fake server error');

View File

@ -0,0 +1,117 @@
/*!
* @license
* Copyright 2019 Alfresco Software, Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/* tslint:disable */
import { Injectable } from '@angular/core';
import { Observable, Subject, of } from 'rxjs';
import { BpmProductVersionModel } from '../models/product-version.model';
import {
RepositoryInfo,
SystemPropertiesRepresentation
} from '@alfresco/js-api';
@Injectable({
providedIn: 'root'
})
export class DiscoveryApiServiceMock {
/**
* Gets product information for Content Services.
*/
ecmProductInfo$ = new Subject<RepositoryInfo>();
public getEcmProductInfo(): Observable<RepositoryInfo | any> {
return of({
edition: 'Enterprise',
version: {
major: '7',
minor: '2',
patch: '0',
hotfix: '0',
schema: 16000,
label: 'rde8705d0-blocal',
display: '7.2.0.0 (rde8705d0-blocal) schema 16000'
},
license: {
issuedAt: '2021-11-10T23:30:30.234+0000',
expiresAt: '2021-11-12T00:00:00.000+0000',
remainingDays: 1,
holder: 'Trial User',
mode: 'ENTERPRISE',
entitlements: { isClusterEnabled: true, isCryptodocEnabled: false }
},
status: {
isReadOnly: false,
isAuditEnabled: true,
isQuickShareEnabled: true,
isThumbnailGenerationEnabled: true,
isDirectAccessUrlEnabled: true
},
modules: [{
id: 'org_alfresco_module_rm',
title: 'AGS Repo',
description: 'Alfresco Governance Services Repository Extension',
version: '14.26',
installState: 'UNKNOWN',
versionMin: '7.0.0',
versionMax: '999'
}, {
id: 'org_alfresco_integrations_S3Connector',
title: 'S3 Connector',
description: 'Provides Amazon S3 content storage for the contentstore and deleted contentstore',
version: '5.0.0-A1',
installDate: '2021-11-10T23:29:19.560+0000',
installState: 'INSTALLED',
versionMin: '7.2',
versionMax: '999'
}, {
id: 'alfresco-trashcan-cleaner',
title: 'alfresco-trashcan-cleaner project',
description: 'The Alfresco Trashcan Cleaner (Alfresco Module)',
version: '2.4.1',
installState: 'UNKNOWN',
versionMin: '0',
versionMax: '999'
}, {
id: 'alfresco-content-connector-for-salesforce-repo',
title: 'Alfresco Content Connector for Salesforce Repository AMP',
description: 'Alfresco Repository artifacts needed for the Alfresco Content Connector for Salesforce Repository Amp',
version: '2.3.0.3',
installDate: '2021-11-10T23:29:18.918+0000',
installState: 'INSTALLED',
versionMin: '6.2.0',
versionMax: '999'
}]
});
}
public getBpmProductInfo(): Observable<BpmProductVersionModel> {
return of({
revisionVersion: '0-RC1',
edition: 'Alfresco Process Services (powered by Activiti)',
type: 'bpmSuite',
majorVersion: '2',
minorVersion: '1'
});
}
public getBPMSystemProperties(): Observable<SystemPropertiesRepresentation> {
return of({});
}
}
/* tslint:enable */

View File

@ -32,110 +32,3 @@ export class BpmProductVersionModel {
}
}
}
export class VersionModel {
major: string;
minor: string;
patch: string;
hotfix: string;
schema: number;
label: string;
display: string;
constructor(obj?: any) {
if (obj) {
this.major = obj.major || null;
this.minor = obj.minor || null;
this.patch = obj.patch || null;
this.hotfix = obj.hotfix || null;
this.schema = obj.schema || null;
this.label = obj.label || null;
this.display = obj.display || null;
}
}
}
export class LicenseModel {
issuedAt: string;
expiresAt: string;
remainingDays: number;
holder: string;
mode: string;
isClusterEnabled: boolean;
isCryptodocEnabled: boolean;
constructor(obj?: any) {
if (obj) {
this.issuedAt = obj.issuedAt || null;
this.expiresAt = obj.expiresAt || null;
this.remainingDays = obj.remainingDays || null;
this.holder = obj.holder || null;
this.mode = obj.mode || null;
this.isClusterEnabled = !!obj.isClusterEnabled;
this.isCryptodocEnabled = !!obj.isCryptodocEnabled;
}
}
}
export class VersionStatusModel {
isReadOnly: boolean;
isAuditEnabled: boolean;
isQuickShareEnabled: boolean;
isThumbnailGenerationEnabled: boolean;
constructor(obj?: any) {
if (obj) {
this.isReadOnly = !!obj.isReadOnly;
this.isAuditEnabled = !!obj.isAuditEnabled;
this.isQuickShareEnabled = !!obj.isQuickShareEnabled;
this.isThumbnailGenerationEnabled = !!obj.isThumbnailGenerationEnabled;
}
}
}
export class VersionModuleModel {
id: string;
title: string;
description: string;
version: string;
installDate: string;
installState: string;
versionMin: string;
versionMax: string;
constructor(obj?: any) {
if (obj) {
this.id = obj.id || null;
this.title = obj.title || null;
this.description = obj.description || null;
this.version = obj.version || null;
this.installDate = obj.installDate || null;
this.installState = obj.installState || null;
this.versionMin = obj.versionMin || null;
this.versionMax = obj.versionMax || null;
}
}
}
export class EcmProductVersionModel {
edition: string;
version: VersionModel;
license: LicenseModel;
status: VersionStatusModel;
modules: VersionModuleModel[] = [];
constructor(obj?: any) {
if (obj && obj.entry && obj.entry.repository) {
this.edition = obj.entry.repository.edition || null;
this.version = new VersionModel(obj.entry.repository.version);
this.license = new LicenseModel(obj.entry.repository.license);
this.status = new VersionStatusModel(obj.entry.repository.status);
if (obj.entry.repository.modules) {
obj.entry.repository.modules.forEach((module) => {
this.modules.push(new VersionModuleModel(module));
});
}
}
}
}

View File

@ -17,10 +17,11 @@
import { Injectable } from '@angular/core';
import { from, Observable, throwError, Subject } from 'rxjs';
import { BpmProductVersionModel, EcmProductVersionModel } from '../models/product-version.model';
import { AlfrescoApiService } from './alfresco-api.service';
import { catchError, map, switchMap, filter, take } from 'rxjs/operators';
import { AboutApi, DiscoveryApi, SystemPropertiesApi, SystemPropertiesRepresentation } from '@alfresco/js-api';
import { AboutApi, DiscoveryApi, RepositoryInfo, SystemPropertiesApi, SystemPropertiesRepresentation } from '@alfresco/js-api';
import { BpmProductVersionModel } from '../models/product-version.model';
import { AlfrescoApiService } from './alfresco-api.service';
import { AuthenticationService } from './authentication.service';
@Injectable({
@ -31,7 +32,7 @@ export class DiscoveryApiService {
/**
* Gets product information for Content Services.
*/
ecmProductInfo$ = new Subject<EcmProductVersionModel>();
ecmProductInfo$ = new Subject<RepositoryInfo>();
constructor(
private apiService: AlfrescoApiService,
@ -50,12 +51,12 @@ export class DiscoveryApiService {
* Gets product information for Content Services.
* @returns ProductVersionModel containing product details
*/
public getEcmProductInfo(): Observable<EcmProductVersionModel> {
public getEcmProductInfo(): Observable<RepositoryInfo> {
const discoveryApi = new DiscoveryApi(this.apiService.getInstance());
return from(discoveryApi.getRepositoryInformation())
.pipe(
map((res) => new EcmProductVersionModel(res)),
map((res) => res.entry.repository),
catchError((err) => throwError(err))
);
}

View File

@ -16,7 +16,11 @@
*/
import { fakeAsync, TestBed } from '@angular/core/testing';
import { setupTestBed, AlfrescoApiService, IdentityGroupService, IdentityGroupSearchParam } from '@alfresco/adf-core';
import { setupTestBed } from '../testing/setup-test-bed';
import { AlfrescoApiService } from './alfresco-api.service';
import { IdentityGroupService } from './identity-group.service';
import { IdentityGroupSearchParam } from '../models/identity-group.model';
import { HttpErrorResponse } from '@angular/common/http';
import { throwError, of } from 'rxjs';
import {

View File

@ -15,7 +15,7 @@
* limitations under the License.
*/
import { setupTestBed } from '@alfresco/adf-core';
import { setupTestBed } from '../testing/setup-test-bed';
import { HttpClientModule, HttpErrorResponse, HttpResponse } from '@angular/common/http';
import { TestBed } from '@angular/core/testing';
import { of, throwError } from 'rxjs';

View File

@ -24,11 +24,10 @@ import { AppConfigService } from '../app-config/app-config.service';
import { setupTestBed } from '../testing/setup-test-bed';
import { CoreTestingModule } from '../testing/core.testing.module';
import { AssocChildBody, AssociationBody } from '@alfresco/js-api';
import { AssocChildBody, AssociationBody, RepositoryInfo } from '@alfresco/js-api';
import { TranslateModule } from '@ngx-translate/core';
import { DiscoveryApiService } from './discovery-api.service';
import { BehaviorSubject } from 'rxjs';
import { EcmProductVersionModel } from '../models';
declare let jasmine: any;
@ -37,7 +36,7 @@ describe('UploadService', () => {
let appConfigService: AppConfigService;
let uploadFileSpy: jasmine.Spy;
const mockProductInfo = new BehaviorSubject<EcmProductVersionModel>(null);
const mockProductInfo = new BehaviorSubject<RepositoryInfo>(null);
setupTestBed({
imports: [
@ -82,7 +81,7 @@ describe('UploadService', () => {
uploadFileSpy = spyOn(service.uploadApi, 'uploadFile').and.callThrough();
jasmine.Ajax.install();
mockProductInfo.next({ status: { isThumbnailGenerationEnabled: true } } as EcmProductVersionModel);
mockProductInfo.next({ status: { isThumbnailGenerationEnabled: true } } as RepositoryInfo);
});
afterEach(() => {
@ -539,7 +538,7 @@ describe('UploadService', () => {
});
it('Should not pass rendition if it is disabled', () => {
mockProductInfo.next({ status: { isThumbnailGenerationEnabled: false } } as EcmProductVersionModel);
mockProductInfo.next({ status: { isThumbnailGenerationEnabled: false } } as RepositoryInfo);
const filesFake = new FileModel(
<File> { name: 'fake-name', size: 10 },

View File

@ -22,12 +22,12 @@ import { CoreTestingModule } from '../testing/core.testing.module';
import { VersionCompatibilityService } from './version-compatibility.service';
import { BehaviorSubject } from 'rxjs';
import { TranslateModule } from '@ngx-translate/core';
import { EcmProductVersionModel } from './../models/product-version.model';
import { RepositoryInfo } from '@alfresco/js-api';
describe('VersionCompatibilityService', () => {
let versionCompatibilityService: VersionCompatibilityService;
let discoveryApiService: DiscoveryApiService;
const mockProductInfo = new BehaviorSubject<EcmProductVersionModel>(null);
const mockProductInfo = new BehaviorSubject<RepositoryInfo>(null);
const acsResponceMock = {
version: {
@ -56,7 +56,7 @@ describe('VersionCompatibilityService', () => {
beforeEach(async () => {
discoveryApiService = TestBed.inject(DiscoveryApiService);
versionCompatibilityService = TestBed.inject(VersionCompatibilityService);
mockProductInfo.next(acsResponceMock as EcmProductVersionModel);
mockProductInfo.next(acsResponceMock as RepositoryInfo);
versionCompatibilityService = new VersionCompatibilityService(discoveryApiService);
});

View File

@ -16,31 +16,31 @@
*/
import { Injectable } from '@angular/core';
import { DiscoveryApiService } from './discovery-api.service';
import { VersionModel, EcmProductVersionModel } from '../models/product-version.model';
import { filter } from 'rxjs/operators';
import { ReplaySubject } from 'rxjs';
import { VersionInfo, RepositoryInfo } from '@alfresco/js-api';
import { DiscoveryApiService } from './discovery-api.service';
@Injectable({
providedIn: 'root'
})
export class VersionCompatibilityService {
private acsVersion: VersionModel;
private acsVersion: VersionInfo;
acsVersionInitialized$ = new ReplaySubject();
constructor(private discoveryApiService: DiscoveryApiService) {
this.discoveryApiService.ecmProductInfo$
.pipe(filter(acsInfo => !!acsInfo))
.subscribe((acsInfo: EcmProductVersionModel) => this.initializeAcsVersion(acsInfo.version));
.subscribe((acsInfo: RepositoryInfo) => this.initializeAcsVersion(acsInfo.version));
}
private initializeAcsVersion(acsVersion: VersionModel) {
private initializeAcsVersion(acsVersion: VersionInfo) {
this.acsVersion = acsVersion;
this.acsVersionInitialized$.next();
}
getAcsVersion(): VersionModel {
getAcsVersion(): VersionInfo {
return this.acsVersion;
}
@ -66,7 +66,7 @@ export class VersionCompatibilityService {
return versionSupported;
}
private parseVersion(version: string): VersionModel {
private parseVersion(version: string): VersionInfo {
const major = version.split('.')[0];
const minor = version.split('.')[1] || '0';
const patch = version.split('.')[2] || '0';
@ -75,6 +75,6 @@ export class VersionCompatibilityService {
major: major,
minor: minor,
patch: patch
} as VersionModel;
} as VersionInfo;
}
}

View File

@ -18,7 +18,7 @@
import { Component } from '@angular/core';
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { By } from '@angular/platform-browser';
import { setupTestBed } from '@alfresco/adf-core';
import { setupTestBed } from '../../testing/setup-test-bed';
import { TranslateService, TranslateModule } from '@ngx-translate/core';
import { of } from 'rxjs';
import { CoreTestingModule } from '../../testing/core.testing.module';

View File

@ -19,12 +19,23 @@ import { NgModule } from '@angular/core';
import { CoreModule } from '../core.module';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { TranslateModule } from '@ngx-translate/core';
import { TRANSLATION_PROVIDER } from '../services/translation.service';
@NgModule({
imports: [
TranslateModule.forRoot(),
CoreModule.forRoot(),
BrowserAnimationsModule
],
providers: [
{
provide: TRANSLATION_PROVIDER,
multi: true,
useValue: {
name: 'adf-core',
source: 'assets/adf-core'
}
}
]
})
export class CoreStoryModule { }

View File

@ -20,7 +20,7 @@ import { ComponentFixture, fakeAsync, TestBed, tick } from '@angular/core/testin
import { ContentService } from '../../services/content.service';
import { ImgViewerComponent } from './img-viewer.component';
import { setupTestBed, CoreTestingModule } from '../../testing';
import { AppConfigService } from '@alfresco/adf-core';
import { AppConfigService } from '../../app-config/app-config.service';
import { TranslateModule } from '@ngx-translate/core';
import { By } from '@angular/platform-browser';

View File

@ -25,7 +25,7 @@ import { MatDialog } from '@angular/material/dialog';
import { of } from 'rxjs';
import { setupTestBed } from '../../testing/setup-test-bed';
import { take } from 'rxjs/operators';
import { AppConfigService } from '@alfresco/adf-core';
import { AppConfigService } from '../../app-config/app-config.service';
import { CoreTestingModule } from '../../testing/core.testing.module';
import { TranslateModule } from '@ngx-translate/core';

View File

@ -0,0 +1,39 @@
/*!
* @license
* Copyright 2019 Alfresco Software, Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { Injectable } from '@angular/core';
import { ExtensionRef } from '../config/extension.config';
import { Observable, BehaviorSubject } from 'rxjs';
import { ViewerExtensionRef } from '../config/viewer.extensions';
@Injectable({
providedIn: 'root'
})
export class AppExtensionServiceMock {
private _references = new BehaviorSubject<ExtensionRef[]>([]);
references$: Observable<ExtensionRef[]>;
constructor() {
this.references$ = this._references.asObservable();
}
getViewerExtensions(): ViewerExtensionRef[] {
return [];
}
}

View File

@ -0,0 +1,18 @@
/*!
* @license
* Copyright 2019 Alfresco Software, Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
export * from './app-extension.service.mock';

View File

@ -41,3 +41,5 @@ export * from './lib/store/states/repository.state';
export * from './lib/components/public-api';
export * from './lib/extensions.module';
export * from './lib/mock/public-api';

View File

@ -29,6 +29,7 @@ export * from './components/widgets/dropdown/dropdown-cloud.widget';
export * from './components/widgets/group/group-cloud.widget';
export * from './components/widgets/people/people-cloud.widget';
export * from './components/widgets/properties-viewer/properties-viewer.widget';
export * from './components/widgets/radio-buttons/radio-buttons-cloud.widget';
export * from './services/content-cloud-node-selector.service';
export * from './services/form-cloud.service';