mirror of
https://github.com/Alfresco/alfresco-ng2-components.git
synced 2025-08-07 17:48:54 +00:00
[ACA-805] extensions metadata, basic extensibility for demo shell (#3966)
* bootstrap extensibility in demo shell app * example data * parse and store plugin metadata * preserve root config metadata * show plugin info in the About box * update tests * update gitignore * remove unused imports * disable flaky test * add missing tsconfig entries * use pre-build project as CLI 6+ does * update package scripts * update tsconfig * make dist builds work locally * update scripts * Revert "update scripts" This reverts commit 58d218643fe22d642ad7f3ac67f9089ed69ec33e. * update scripts * use lib paths * update configs * update tsconfig
This commit is contained in:
committed by
Eugenio Romano
parent
f528d23aff
commit
c2bdbba0dc
@@ -68,6 +68,7 @@ import { CloudComponent } from './components/cloud/cloud.component';
|
||||
import { TaskListCloudDemoComponent } from './components/task-list-cloud-demo/task-list-cloud-demo.component';
|
||||
import { ProcessListCloudExampleComponent } from './components/cloud/process-list-cloud-example.component';
|
||||
import { TreeViewSampleComponent } from './components/tree-view/tree-view-sample.component';
|
||||
import { AppExtensionsModule } from './extensions/extensions.module';
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
@@ -86,7 +87,8 @@ import { TreeViewSampleComponent } from './components/tree-view/tree-view-sample
|
||||
ThemePickerModule,
|
||||
ChartsModule,
|
||||
MonacoEditorModule.forRoot(),
|
||||
ProcessServicesCloudModule
|
||||
ProcessServicesCloudModule,
|
||||
AppExtensionsModule.forRoot()
|
||||
],
|
||||
declarations: [
|
||||
AppComponent,
|
||||
|
@@ -1 +1,51 @@
|
||||
<h3>Plugins</h3>
|
||||
<div class="extension-details-container">
|
||||
<mat-table [dataSource]="extensions$ | async">
|
||||
<!-- $id Column -->
|
||||
<ng-container matColumnDef="$id">
|
||||
<mat-header-cell *matHeaderCellDef>ID</mat-header-cell>
|
||||
<mat-cell *matCellDef="let element">{{element.$id}}</mat-cell>
|
||||
</ng-container>
|
||||
|
||||
<!-- $name Column -->
|
||||
<ng-container matColumnDef="$name">
|
||||
<mat-header-cell *matHeaderCellDef>Name</mat-header-cell>
|
||||
<mat-cell *matCellDef="let element">{{element.$name}}</mat-cell>
|
||||
</ng-container>
|
||||
|
||||
<!-- $version Column -->
|
||||
<ng-container matColumnDef="$version">
|
||||
<mat-header-cell *matHeaderCellDef>Version</mat-header-cell>
|
||||
<mat-cell *matCellDef="let element">{{element.$version}}</mat-cell>
|
||||
</ng-container>
|
||||
|
||||
<!-- $vendor Column -->
|
||||
<ng-container matColumnDef="$vendor">
|
||||
<mat-header-cell *matHeaderCellDef>Vendor</mat-header-cell>
|
||||
<mat-cell *matCellDef="let element">{{element.$vendor}}</mat-cell>
|
||||
</ng-container>
|
||||
|
||||
<!-- $license Column -->
|
||||
<ng-container matColumnDef="$license">
|
||||
<mat-header-cell *matHeaderCellDef>License</mat-header-cell>
|
||||
<mat-cell *matCellDef="let element">{{element.$license}}</mat-cell>
|
||||
</ng-container>
|
||||
|
||||
<!-- $runtime Column -->
|
||||
<ng-container matColumnDef="$runtime">
|
||||
<mat-header-cell *matHeaderCellDef>Runtime</mat-header-cell>
|
||||
<mat-cell *matCellDef="let element">{{element.$runtime}}</mat-cell>
|
||||
</ng-container>
|
||||
|
||||
<!-- $description Column -->
|
||||
<ng-container matColumnDef="$description">
|
||||
<mat-header-cell *matHeaderCellDef>Description</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>
|
||||
|
||||
<adf-about></adf-about>
|
||||
|
3
demo-shell/src/app/components/about/about.component.scss
Normal file
3
demo-shell/src/app/components/about/about.component.scss
Normal file
@@ -0,0 +1,3 @@
|
||||
.extension-details-container {
|
||||
padding: 4px;
|
||||
}
|
@@ -16,11 +16,20 @@
|
||||
*/
|
||||
|
||||
import { Component } from '@angular/core';
|
||||
import { ExtensionRef } from '@alfresco/adf-extensions';
|
||||
import { AppExtensionService } from '../../extensions/extension.service';
|
||||
import { Observable } from 'rxjs';
|
||||
|
||||
@Component({
|
||||
selector: 'app-about-page',
|
||||
templateUrl: './about.component.html'
|
||||
templateUrl: './about.component.html',
|
||||
styleUrls: ['about.component.scss']
|
||||
})
|
||||
export class AboutComponent {
|
||||
export class AboutComponent {
|
||||
extensionColumns: string[] = ['$id', '$name', '$version', '$vendor', '$license', '$runtime', '$description'];
|
||||
extensions$: Observable<ExtensionRef[]>;
|
||||
|
||||
constructor(appExtensions: AppExtensionService) {
|
||||
this.extensions$ = appExtensions.references$;
|
||||
}
|
||||
}
|
||||
|
56
demo-shell/src/app/extensions/extension.service.ts
Normal file
56
demo-shell/src/app/extensions/extension.service.ts
Normal file
@@ -0,0 +1,56 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 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 {
|
||||
ExtensionService,
|
||||
ExtensionConfig,
|
||||
ExtensionRef
|
||||
} from '@alfresco/adf-extensions';
|
||||
import { Observable, BehaviorSubject } from 'rxjs';
|
||||
|
||||
@Injectable({
|
||||
providedIn: 'root'
|
||||
})
|
||||
export class AppExtensionService {
|
||||
private _references = new BehaviorSubject<ExtensionRef[]>([]);
|
||||
|
||||
references$: Observable<ExtensionRef[]>;
|
||||
|
||||
constructor(private extensions: ExtensionService) {
|
||||
this.references$ = this._references.asObservable();
|
||||
}
|
||||
|
||||
async load() {
|
||||
const config = await this.extensions.load();
|
||||
this.setup(config);
|
||||
}
|
||||
|
||||
setup(config: ExtensionConfig) {
|
||||
if (!config) {
|
||||
console.error('Extension configuration not found');
|
||||
return;
|
||||
}
|
||||
// tslint:disable-next-line:no-console
|
||||
console.log('loaded extension config', config);
|
||||
|
||||
const references = (config.$references || [])
|
||||
.filter(entry => typeof entry === 'object')
|
||||
.map(entry => <ExtensionRef> entry);
|
||||
this._references.next(references);
|
||||
}
|
||||
}
|
51
demo-shell/src/app/extensions/extensions.module.ts
Normal file
51
demo-shell/src/app/extensions/extensions.module.ts
Normal file
@@ -0,0 +1,51 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 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 { NgModule, ModuleWithProviders, APP_INITIALIZER } from '@angular/core';
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { CoreModule } from '@alfresco/adf-core';
|
||||
import { AppExtensionService } from './extension.service';
|
||||
import { ExtensionsModule } from '@alfresco/adf-extensions';
|
||||
|
||||
export function setupExtensions(service: AppExtensionService): Function {
|
||||
return () => service.load();
|
||||
}
|
||||
|
||||
@NgModule({
|
||||
imports: [CommonModule, CoreModule.forChild(), ExtensionsModule]
|
||||
})
|
||||
export class AppExtensionsModule {
|
||||
static forRoot(): ModuleWithProviders {
|
||||
return {
|
||||
ngModule: AppExtensionsModule,
|
||||
providers: [
|
||||
{
|
||||
provide: APP_INITIALIZER,
|
||||
useFactory: setupExtensions,
|
||||
deps: [AppExtensionService],
|
||||
multi: true
|
||||
}
|
||||
]
|
||||
};
|
||||
}
|
||||
|
||||
static forChild(): ModuleWithProviders {
|
||||
return {
|
||||
ngModule: AppExtensionsModule
|
||||
};
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user