From 9fc5ed424b05765429021eca5cc682e67a91bb00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Agneray?= <francois.agneray@lam.fr> Date: Fri, 1 Jul 2022 16:14:53 +0200 Subject: [PATCH] Add module for dynamic content (instance) --- .../admin/admin-shared/admin-shared.module.ts | 4 ++ .../admin/admin-shared/components/index.ts | 4 +- .../webpage-form-content.component.html | 0 .../webpage-form-content.component.scss | 0 .../webpage-form-content.component.ts | 0 .../app/admin/admin-shared/services/index.ts | 5 ++ .../services/prism.service.ts | 3 -- .../instance/webpage/components/index.ts | 4 +- .../admin/instance/webpage/webpage.module.ts | 4 -- .../components/datatable.component.html | 12 +++++ .../components/datatable.component.ts | 22 ++++++++ .../dynamic-content/components/index.ts | 14 +++++ .../dataset-sample.component.html | 1 + .../dataset-sample.component.ts | 9 +++- .../dynamic-router-link.component.html | 0 .../dynamic-router-link.component.scss | 0 .../dynamic-router-link.component.ts | 0 .../dynamic-components}/index.ts | 2 +- .../dynamic-content/dynamic-content.module.ts | 53 +++++++++++++++++++ .../parsers/dynamic-router-link-parser.ts | 2 +- .../instance/dynamic-content/parsers/index.ts | 5 ++ .../components/dataset-sample.component.html | 1 - .../instance/webpage/hooks/parsers/index.ts | 13 ----- .../app/instance/webpage/webpage.module.ts | 18 ++----- client/src/styles.scss | 3 +- 25 files changed, 134 insertions(+), 45 deletions(-) rename client/src/app/admin/{instance/webpage => admin-shared}/components/webpage-form-content.component.html (100%) rename client/src/app/admin/{instance/webpage => admin-shared}/components/webpage-form-content.component.scss (100%) rename client/src/app/admin/{instance/webpage => admin-shared}/components/webpage-form-content.component.ts (100%) create mode 100644 client/src/app/admin/admin-shared/services/index.ts rename client/src/app/admin/{instance/webpage => admin-shared}/services/prism.service.ts (83%) create mode 100644 client/src/app/instance/dynamic-content/components/datatable.component.html create mode 100644 client/src/app/instance/dynamic-content/components/datatable.component.ts create mode 100644 client/src/app/instance/dynamic-content/components/index.ts create mode 100644 client/src/app/instance/dynamic-content/dynamic-components/dataset-sample.component.html rename client/src/app/instance/{webpage/hooks/components => dynamic-content/dynamic-components}/dataset-sample.component.ts (73%) rename client/src/app/instance/{webpage/hooks/components => dynamic-content/dynamic-components}/dynamic-router-link.component.html (100%) rename client/src/app/instance/{webpage/hooks/components => dynamic-content/dynamic-components}/dynamic-router-link.component.scss (100%) rename client/src/app/instance/{webpage/hooks/components => dynamic-content/dynamic-components}/dynamic-router-link.component.ts (100%) rename client/src/app/instance/{webpage/hooks/components => dynamic-content/dynamic-components}/index.ts (85%) create mode 100644 client/src/app/instance/dynamic-content/dynamic-content.module.ts rename client/src/app/instance/{webpage/hooks => dynamic-content}/parsers/dynamic-router-link-parser.ts (97%) create mode 100644 client/src/app/instance/dynamic-content/parsers/index.ts delete mode 100644 client/src/app/instance/webpage/hooks/components/dataset-sample.component.html delete mode 100644 client/src/app/instance/webpage/hooks/parsers/index.ts diff --git a/client/src/app/admin/admin-shared/admin-shared.module.ts b/client/src/app/admin/admin-shared/admin-shared.module.ts index 9b2e8c08..9589d20b 100644 --- a/client/src/app/admin/admin-shared/admin-shared.module.ts +++ b/client/src/app/admin/admin-shared/admin-shared.module.ts @@ -12,6 +12,7 @@ import { NgModule } from '@angular/core'; import { SharedModule } from 'src/app/shared/shared.module'; import { adminSharedComponents } from './components'; import { adminPipes } from './pipes'; +import { adminSharedServices } from './services'; /** * @class @@ -28,6 +29,9 @@ import { adminPipes } from './pipes'; exports: [ adminSharedComponents, adminPipes + ], + providers: [ + adminSharedServices ] }) export class AdminSharedModule { } diff --git a/client/src/app/admin/admin-shared/components/index.ts b/client/src/app/admin/admin-shared/components/index.ts index b60b506e..066af26a 100644 --- a/client/src/app/admin/admin-shared/components/index.ts +++ b/client/src/app/admin/admin-shared/components/index.ts @@ -9,8 +9,10 @@ import { DeleteBtnComponent } from './delete-btn.component'; import { PathSelectFormControlComponent } from './path-select-form-control.component'; +import { WebpageFormContentComponent } from './webpage-form-content.component'; export const adminSharedComponents = [ DeleteBtnComponent, - PathSelectFormControlComponent + PathSelectFormControlComponent, + WebpageFormContentComponent ]; diff --git a/client/src/app/admin/instance/webpage/components/webpage-form-content.component.html b/client/src/app/admin/admin-shared/components/webpage-form-content.component.html similarity index 100% rename from client/src/app/admin/instance/webpage/components/webpage-form-content.component.html rename to client/src/app/admin/admin-shared/components/webpage-form-content.component.html diff --git a/client/src/app/admin/instance/webpage/components/webpage-form-content.component.scss b/client/src/app/admin/admin-shared/components/webpage-form-content.component.scss similarity index 100% rename from client/src/app/admin/instance/webpage/components/webpage-form-content.component.scss rename to client/src/app/admin/admin-shared/components/webpage-form-content.component.scss diff --git a/client/src/app/admin/instance/webpage/components/webpage-form-content.component.ts b/client/src/app/admin/admin-shared/components/webpage-form-content.component.ts similarity index 100% rename from client/src/app/admin/instance/webpage/components/webpage-form-content.component.ts rename to client/src/app/admin/admin-shared/components/webpage-form-content.component.ts diff --git a/client/src/app/admin/admin-shared/services/index.ts b/client/src/app/admin/admin-shared/services/index.ts new file mode 100644 index 00000000..b88262d2 --- /dev/null +++ b/client/src/app/admin/admin-shared/services/index.ts @@ -0,0 +1,5 @@ +import { PrismService } from './prism.service'; + +export const adminSharedServices = [ + PrismService +]; diff --git a/client/src/app/admin/instance/webpage/services/prism.service.ts b/client/src/app/admin/admin-shared/services/prism.service.ts similarity index 83% rename from client/src/app/admin/instance/webpage/services/prism.service.ts rename to client/src/app/admin/admin-shared/services/prism.service.ts index a99215c0..0f1cf2ee 100644 --- a/client/src/app/admin/instance/webpage/services/prism.service.ts +++ b/client/src/app/admin/admin-shared/services/prism.service.ts @@ -4,11 +4,8 @@ import 'prismjs'; import 'prismjs/plugins/line-numbers/prism-line-numbers'; import 'prismjs/components/prism-css'; import 'prismjs/components/prism-javascript'; -import 'prismjs/components/prism-java'; import 'prismjs/components/prism-markup'; import 'prismjs/components/prism-typescript'; -import 'prismjs/components/prism-sass'; -import 'prismjs/components/prism-scss'; declare var Prism: any; diff --git a/client/src/app/admin/instance/webpage/components/index.ts b/client/src/app/admin/instance/webpage/components/index.ts index 4d87cc8d..401f94b1 100644 --- a/client/src/app/admin/instance/webpage/components/index.ts +++ b/client/src/app/admin/instance/webpage/components/index.ts @@ -13,7 +13,6 @@ import { EditWebpageFamilyComponent } from './edit-webpage-family.component'; import { WebpageFamilyFormComponent } from './webpage-family-form.component'; import { WebpageCardComponent } from './webpage-card.component'; import { WebpageFormComponent } from './webpage-form.component'; -import { WebpageFormContentComponent } from './webpage-form-content.component'; export const dummiesComponents = [ WebpageButtonsComponent, @@ -21,6 +20,5 @@ export const dummiesComponents = [ EditWebpageFamilyComponent, WebpageFamilyFormComponent, WebpageCardComponent, - WebpageFormComponent, - WebpageFormContentComponent + WebpageFormComponent ]; diff --git a/client/src/app/admin/instance/webpage/webpage.module.ts b/client/src/app/admin/instance/webpage/webpage.module.ts index ce08a41b..1411ce90 100644 --- a/client/src/app/admin/instance/webpage/webpage.module.ts +++ b/client/src/app/admin/instance/webpage/webpage.module.ts @@ -13,7 +13,6 @@ import { SharedModule } from 'src/app/shared/shared.module'; import { WebpageRoutingModule, routedComponents } from './webpage-routing.module'; import { dummiesComponents } from './components'; import { AdminSharedModule } from '../../admin-shared/admin-shared.module'; -import { PrismService } from './services/prism.service'; /** * @class @@ -28,9 +27,6 @@ import { PrismService } from './services/prism.service'; declarations: [ routedComponents, dummiesComponents - ], - providers: [ - PrismService ] }) export class WebpageModule { } diff --git a/client/src/app/instance/dynamic-content/components/datatable.component.html b/client/src/app/instance/dynamic-content/components/datatable.component.html new file mode 100644 index 00000000..3c9515fd --- /dev/null +++ b/client/src/app/instance/dynamic-content/components/datatable.component.html @@ -0,0 +1,12 @@ +<table class="table table-striped"> + <thead> + <tr> + <th *ngFor="let attribute of attributeList" scope="col">{{ attribute.label }}</th> + </tr> + </thead> + <tbody> + <tr *ngFor="let row of data"> + <td *ngFor="let attribute of attributeList">{{ row[attribute.label] }}</td> + </tr> + </tbody> +</table> diff --git a/client/src/app/instance/dynamic-content/components/datatable.component.ts b/client/src/app/instance/dynamic-content/components/datatable.component.ts new file mode 100644 index 00000000..b96564b7 --- /dev/null +++ b/client/src/app/instance/dynamic-content/components/datatable.component.ts @@ -0,0 +1,22 @@ +/** + * This file is part of Anis Client. + * + * @copyright Laboratoire d'Astrophysique de Marseille / CNRS + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +import { Component, ChangeDetectionStrategy, Input } from '@angular/core'; + +import { Attribute } from 'src/app/metamodel/models'; + +@Component({ + selector: 'app-datatable', + templateUrl: 'datatable.component.html', + changeDetection: ChangeDetectionStrategy.OnPush +}) +export class DatatableComponent { + @Input() attributeList: Attribute[]; + @Input() data: any[]; +} diff --git a/client/src/app/instance/dynamic-content/components/index.ts b/client/src/app/instance/dynamic-content/components/index.ts new file mode 100644 index 00000000..b3594ebb --- /dev/null +++ b/client/src/app/instance/dynamic-content/components/index.ts @@ -0,0 +1,14 @@ +/** + * This file is part of Anis Client. + * + * @copyright Laboratoire d'Astrophysique de Marseille / CNRS + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +import { DatatableComponent } from './datatable.component'; + +export const dummiesComponents = [ + DatatableComponent +]; diff --git a/client/src/app/instance/dynamic-content/dynamic-components/dataset-sample.component.html b/client/src/app/instance/dynamic-content/dynamic-components/dataset-sample.component.html new file mode 100644 index 00000000..c6594b57 --- /dev/null +++ b/client/src/app/instance/dynamic-content/dynamic-components/dataset-sample.component.html @@ -0,0 +1 @@ +<app-datatable [attributeList]="attributeList | async" [data]="data | async"></app-datatable> \ No newline at end of file diff --git a/client/src/app/instance/webpage/hooks/components/dataset-sample.component.ts b/client/src/app/instance/dynamic-content/dynamic-components/dataset-sample.component.ts similarity index 73% rename from client/src/app/instance/webpage/hooks/components/dataset-sample.component.ts rename to client/src/app/instance/dynamic-content/dynamic-components/dataset-sample.component.ts index f5f36285..4e4b0138 100644 --- a/client/src/app/instance/webpage/hooks/components/dataset-sample.component.ts +++ b/client/src/app/instance/dynamic-content/dynamic-components/dataset-sample.component.ts @@ -10,6 +10,9 @@ import { Component, OnInit, Input, ChangeDetectionStrategy } from '@angular/core'; import { HttpClient } from '@angular/common/http'; +import { Observable } from 'rxjs'; + +import { Attribute } from 'src/app/metamodel/models'; import { AppConfigService } from 'src/app/app-config.service'; @Component({ @@ -23,10 +26,14 @@ export class DatasetSampleComponent implements OnInit { @Input() sortingDirection: string; @Input() nbItems: number; + attributeList: Observable<Attribute[]>; + data: Observable<any[]>; + constructor(private http: HttpClient, private config: AppConfigService) { } ngOnInit() { + this.attributeList = this.http.get<any[]>(`${this.config.apiUrl}/dataset/${this.datasetName}/attribute`); const query = `${this.datasetName}?a=all&o=${this.sortingColumn}:${this.sortingDirection}&p=${this.nbItems}:1`; - this.http.get<any[]>(`${this.config.apiUrl}/search/${query}`).subscribe(data => console.log(data)); + this.data = this.http.get<any[]>(`${this.config.apiUrl}/search/${query}`); } } diff --git a/client/src/app/instance/webpage/hooks/components/dynamic-router-link.component.html b/client/src/app/instance/dynamic-content/dynamic-components/dynamic-router-link.component.html similarity index 100% rename from client/src/app/instance/webpage/hooks/components/dynamic-router-link.component.html rename to client/src/app/instance/dynamic-content/dynamic-components/dynamic-router-link.component.html diff --git a/client/src/app/instance/webpage/hooks/components/dynamic-router-link.component.scss b/client/src/app/instance/dynamic-content/dynamic-components/dynamic-router-link.component.scss similarity index 100% rename from client/src/app/instance/webpage/hooks/components/dynamic-router-link.component.scss rename to client/src/app/instance/dynamic-content/dynamic-components/dynamic-router-link.component.scss diff --git a/client/src/app/instance/webpage/hooks/components/dynamic-router-link.component.ts b/client/src/app/instance/dynamic-content/dynamic-components/dynamic-router-link.component.ts similarity index 100% rename from client/src/app/instance/webpage/hooks/components/dynamic-router-link.component.ts rename to client/src/app/instance/dynamic-content/dynamic-components/dynamic-router-link.component.ts diff --git a/client/src/app/instance/webpage/hooks/components/index.ts b/client/src/app/instance/dynamic-content/dynamic-components/index.ts similarity index 85% rename from client/src/app/instance/webpage/hooks/components/index.ts rename to client/src/app/instance/dynamic-content/dynamic-components/index.ts index cd090f23..81f64b14 100644 --- a/client/src/app/instance/webpage/hooks/components/index.ts +++ b/client/src/app/instance/dynamic-content/dynamic-components/index.ts @@ -1,7 +1,7 @@ import { DynamicRouterLinkComponent } from './dynamic-router-link.component'; import { DatasetSampleComponent } from './dataset-sample.component'; -export const hooksComponents = [ +export const DynamicComponents = [ DynamicRouterLinkComponent, DatasetSampleComponent ]; diff --git a/client/src/app/instance/dynamic-content/dynamic-content.module.ts b/client/src/app/instance/dynamic-content/dynamic-content.module.ts new file mode 100644 index 00000000..8f4f2781 --- /dev/null +++ b/client/src/app/instance/dynamic-content/dynamic-content.module.ts @@ -0,0 +1,53 @@ +/** + * This file is part of Anis Client. + * + * @copyright Laboratoire d'Astrophysique de Marseille / CNRS + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; + +import { DynamicHooksModule, HookParserEntry } from 'ngx-dynamic-hooks'; + +import { SharedModule } from 'src/app/shared/shared.module'; +import { hookParsers } from './parsers'; +import { DynamicComponents } from './dynamic-components'; +import { dummiesComponents } from './components'; + +export const componentParsers: Array<HookParserEntry> = [ + ...hookParsers, + ...DynamicComponents.map(component => { + return { component }; + }) +]; + +/** + * @class + * @classdesc Dynamic content module. + */ +@NgModule({ + imports: [ + SharedModule, + RouterModule, + DynamicHooksModule.forRoot({ + globalParsers: componentParsers + }), + ], + exports: [ + DynamicHooksModule + ], + providers: [ + hookParsers + ], + declarations: [ + DynamicComponents, + dummiesComponents + ], + entryComponents: [ + DynamicComponents + ] +}) +export class DynamicContentModule { } diff --git a/client/src/app/instance/webpage/hooks/parsers/dynamic-router-link-parser.ts b/client/src/app/instance/dynamic-content/parsers/dynamic-router-link-parser.ts similarity index 97% rename from client/src/app/instance/webpage/hooks/parsers/dynamic-router-link-parser.ts rename to client/src/app/instance/dynamic-content/parsers/dynamic-router-link-parser.ts index cc0242d8..cb543c79 100644 --- a/client/src/app/instance/webpage/hooks/parsers/dynamic-router-link-parser.ts +++ b/client/src/app/instance/dynamic-content/parsers/dynamic-router-link-parser.ts @@ -1,7 +1,7 @@ import { Injectable } from '@angular/core'; import { HookParser, HookPosition, HookValue, HookComponentData, HookBindings, HookFinder } from 'ngx-dynamic-hooks'; -import { DynamicRouterLinkComponent } from '../components/dynamic-router-link.component'; +import { DynamicRouterLinkComponent } from '../dynamic-components/dynamic-router-link.component'; @Injectable() export class DynamicRouterLinkParser implements HookParser { diff --git a/client/src/app/instance/dynamic-content/parsers/index.ts b/client/src/app/instance/dynamic-content/parsers/index.ts new file mode 100644 index 00000000..bac0c8f9 --- /dev/null +++ b/client/src/app/instance/dynamic-content/parsers/index.ts @@ -0,0 +1,5 @@ +import { DynamicRouterLinkParser } from './dynamic-router-link-parser'; + +export const hookParsers = [ + DynamicRouterLinkParser +]; diff --git a/client/src/app/instance/webpage/hooks/components/dataset-sample.component.html b/client/src/app/instance/webpage/hooks/components/dataset-sample.component.html deleted file mode 100644 index 85855148..00000000 --- a/client/src/app/instance/webpage/hooks/components/dataset-sample.component.html +++ /dev/null @@ -1 +0,0 @@ -<p>Coucou</p> \ No newline at end of file diff --git a/client/src/app/instance/webpage/hooks/parsers/index.ts b/client/src/app/instance/webpage/hooks/parsers/index.ts deleted file mode 100644 index 11414cc4..00000000 --- a/client/src/app/instance/webpage/hooks/parsers/index.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { HookParserEntry } from 'ngx-dynamic-hooks'; - -import { DynamicRouterLinkParser } from './dynamic-router-link-parser'; -import { DatasetSampleComponent } from '../components/dataset-sample.component'; - -export const hookParsers = [ - DynamicRouterLinkParser -]; - -export const componentParsers: Array<HookParserEntry> = [ - DynamicRouterLinkParser, - { component: DatasetSampleComponent } -]; diff --git a/client/src/app/instance/webpage/webpage.module.ts b/client/src/app/instance/webpage/webpage.module.ts index 989eb038..5bec1e05 100644 --- a/client/src/app/instance/webpage/webpage.module.ts +++ b/client/src/app/instance/webpage/webpage.module.ts @@ -9,13 +9,10 @@ import { NgModule } from '@angular/core'; -import { DynamicHooksModule } from 'ngx-dynamic-hooks'; - import { SharedModule } from 'src/app/shared/shared.module'; +import { DynamicContentModule } from '../dynamic-content/dynamic-content.module'; import { WebpageRoutingModule, routedComponents } from './webpage-routing.module'; import { dummiesComponents } from './components'; -import { hookParsers, componentParsers } from './hooks/parsers'; -import { hooksComponents } from './hooks/components'; /** * @class @@ -24,21 +21,12 @@ import { hooksComponents } from './hooks/components'; @NgModule({ imports: [ SharedModule, + DynamicContentModule, WebpageRoutingModule, - DynamicHooksModule.forRoot({ - globalParsers: componentParsers - }), ], declarations: [ routedComponents, - dummiesComponents, - hooksComponents - ], - providers: [ - hookParsers - ], - entryComponents: [ - hooksComponents + dummiesComponents ] }) export class WebpageModule { } diff --git a/client/src/styles.scss b/client/src/styles.scss index 5c065f8b..75f7f8c2 100644 --- a/client/src/styles.scss +++ b/client/src/styles.scss @@ -42,8 +42,6 @@ /* Import prismjs styled design */ @import "~prismjs/themes/prism-okaidia"; // @import "~prismjs/themes/prism-tomorrow"; -// @import "~prismjs/themes/prism-solarizedlight"; -// @import "~prismjs/themes/prism"; // Prism.js line numbers plugin .line-numbers .line-numbers-rows { @@ -56,6 +54,7 @@ letter-spacing: -1px; border-right: 1px solid rgb(179, 179, 179); user-select: none; + background-color: #272822; } .line-numbers-rows > span { -- GitLab