diff --git a/client/src/app/admin/admin-shared/components/data-path-form-control.component.html b/client/src/app/admin/admin-shared/components/data-path-form-control.component.html index dfe6a5f708c475b04905af67d8f90eea2aad1a1f..b0227d45ef7d6924f3f29ef13c41ba6a5cb61e98 100644 --- a/client/src/app/admin/admin-shared/components/data-path-form-control.component.html +++ b/client/src/app/admin/admin-shared/components/data-path-form-control.component.html @@ -17,13 +17,13 @@ <h4 class="modal-title pull-left">ANIS file explorer</h4> </div> <div> - <app-spinner *ngIf="rootDirectoryIsLoading"></app-spinner> + <app-spinner *ngIf="directoryIsLoading"></app-spinner> <p class="ml-3 mt-3"> <span class="far fa-folder"></span> {{ fileExplorerPath }} </p> - <div *ngIf="rootDirectoryIsLoaded" class="table-responsive"> + <div *ngIf="directoryIsLoaded" class="table-responsive"> <table class="table table-hover" aria-describedby="File explorer"> <thead> <tr> @@ -34,7 +34,7 @@ </tr> </thead> <tbody> - <tr *ngFor="let fileInfo of rootDirectory" (click)="dataPathAction(fileInfo)" [class.pointer]="fileInfo.type === 'dir' && fileInfo.name !== '.'"> + <tr *ngFor="let fileInfo of files" (click)="dataPathAction(fileInfo)" [class.pointer]="fileInfo.type === 'dir' && fileInfo.name !== '.'"> <td> <span *ngIf="fileInfo.type === 'dir'"><span class="far fa-folder"></span></span> <span *ngIf="fileInfo.type === 'file'"><span class="far fa-file"></span></span> diff --git a/client/src/app/admin/admin-shared/components/data-path-form-control.component.ts b/client/src/app/admin/admin-shared/components/data-path-form-control.component.ts index 9ff36dfbe649209523f6e833a2131ca22dddc901..c1585ee37db3a82603d595e9865baee6be3a8313 100644 --- a/client/src/app/admin/admin-shared/components/data-path-form-control.component.ts +++ b/client/src/app/admin/admin-shared/components/data-path-form-control.component.ts @@ -21,9 +21,9 @@ import { FileInfo } from 'src/app/metamodel/models'; }) export class DataPathFormControlComponent { @Input() form: FormGroup; - @Input() rootDirectory: FileInfo[]; - @Input() rootDirectoryIsLoading: boolean; - @Input() rootDirectoryIsLoaded: boolean; + @Input() files: FileInfo[]; + @Input() directoryIsLoading: boolean; + @Input() directoryIsLoaded: boolean; @Output() loadRootDirectory: EventEmitter<string> = new EventEmitter(); modalRef: BsModalRef; diff --git a/client/src/app/admin/admin-shared/components/file-select-form-control.component.html b/client/src/app/admin/admin-shared/components/file-select-form-control.component.html index ef2e1e34dd1040281c3544aa1d6f108ba5e4eb14..01180cd76a12ff6ff9dff66239ab814cb63f2a3f 100644 --- a/client/src/app/admin/admin-shared/components/file-select-form-control.component.html +++ b/client/src/app/admin/admin-shared/components/file-select-form-control.component.html @@ -17,13 +17,13 @@ <h4 class="modal-title pull-left">ANIS file explorer</h4> </div> <div> - <app-spinner *ngIf="rootDirectoryIsLoading"></app-spinner> + <app-spinner *ngIf="directoryIsLoading"></app-spinner> <p class="ml-3 mt-3"> <span class="far fa-folder"></span> {{ fileExplorerPath }} </p> - <div *ngIf="rootDirectoryIsLoaded" class="table-responsive"> + <div *ngIf="directoryIsLoaded" class="table-responsive"> <table class="table table-hover" aria-describedby="File selector"> <thead> <tr> @@ -34,7 +34,7 @@ </tr> </thead> <tbody> - <tr *ngFor="let fileInfo of rootDirectory" + <tr *ngFor="let fileInfo of files" (click)="click(fileInfo)" [class.table-active]="checkFileSelected(fileInfo)" [class.pointer]="fileInfo.name !== '.'"> diff --git a/client/src/app/admin/admin-shared/components/file-select-form-control.component.ts b/client/src/app/admin/admin-shared/components/file-select-form-control.component.ts index 4c0e5cc9a01a38609076b6c3444be8df9027a059..2986f65b0a2d272d0dbd01931f82bf327d8b552e 100644 --- a/client/src/app/admin/admin-shared/components/file-select-form-control.component.ts +++ b/client/src/app/admin/admin-shared/components/file-select-form-control.component.ts @@ -24,10 +24,10 @@ export class FileSelectFormControlComponent implements OnChanges { @Input() disabled: boolean = false; @Input() controlName: string; @Input() controlLabel: string; - @Input() rootDirectory: FileInfo[]; - @Input() rootDirectoryIsLoading: boolean; - @Input() rootDirectoryIsLoaded: boolean; - @Output() loadRootDirectory: EventEmitter<string> = new EventEmitter(); + @Input() files: FileInfo[]; + @Input() directoryIsLoading: boolean; + @Input() directoryIsLoaded: boolean; + @Output() loadDirectory: EventEmitter<string> = new EventEmitter(); modalRef: BsModalRef; fileExplorerPath = ''; @@ -52,7 +52,7 @@ export class FileSelectFormControlComponent implements OnChanges { this.fileExplorerPath = ''; } this.modalRef = this.modalService.show(template); - this.loadRootDirectory.emit(this.fileExplorerPath); + this.loadDirectory.emit(this.fileExplorerPath); } click(fileInfo: FileInfo): void { @@ -70,7 +70,7 @@ export class FileSelectFormControlComponent implements OnChanges { } else { this.fileExplorerPath += `/${fileInfo.name}`; } - this.loadRootDirectory.emit(this.fileExplorerPath); + this.loadDirectory.emit(this.fileExplorerPath); } buildFilePath(fileInfo: FileInfo) { diff --git a/client/src/app/admin/instance/components/instance-form.component.html b/client/src/app/admin/instance/components/instance-form.component.html index e756ad55457b56d8dbafce416b0af8c5e919e217..70e1d906d842c69340cdcbd004d1ecce510f4ac9 100644 --- a/client/src/app/admin/instance/components/instance-form.component.html +++ b/client/src/app/admin/instance/components/instance-form.component.html @@ -19,9 +19,9 @@ </div> <app-data-path-form-control [form]="form" - [rootDirectory]="rootDirectory" - [rootDirectoryIsLoading]="rootDirectoryIsLoading" - [rootDirectoryIsLoaded]="rootDirectoryIsLoaded" + [files]="files" + [directoryIsLoading]="directoryIsLoading" + [directoryIsLoaded]="directoryIsLoaded" (loadRootDirectory)="loadRootDirectory.emit($event)"> </app-data-path-form-control> <div class="custom-control custom-radio custom-control-inline"> @@ -39,10 +39,10 @@ [disabled]="isDataPathEmpty()" [controlName]="'portal_logo'" [controlLabel]="'Portal logo'" - [rootDirectory]="rootDirectory" - [rootDirectoryIsLoading]="rootDirectoryIsLoading" - [rootDirectoryIsLoaded]="rootDirectoryIsLoaded" - (loadRootDirectory)="loadRootDirectory.emit($event)"> + [files]="files" + [directoryIsLoading]="directoryIsLoading" + [directoryIsLoaded]="directoryIsLoaded" + (loadDirectory)="onChangeFileSelect($event)"> </app-file-select-form-control> <div class="form-row"> <div class="form-group col-md-6"> @@ -69,20 +69,20 @@ [disabled]="isDataPathEmpty()" [controlName]="'design_logo'" [controlLabel]="'Logo'" - [rootDirectory]="rootDirectory" - [rootDirectoryIsLoading]="rootDirectoryIsLoading" - [rootDirectoryIsLoaded]="rootDirectoryIsLoaded" - (loadRootDirectory)="loadRootDirectory.emit($event)"> + [files]="files" + [directoryIsLoading]="directoryIsLoading" + [directoryIsLoaded]="directoryIsLoaded" + (loadDirectory)="onChangeFileSelect($event)"> </app-file-select-form-control> <app-file-select-form-control [form]="form" [disabled]="isDataPathEmpty()" [controlName]="'design_favicon'" [controlLabel]="'Favicon'" - [rootDirectory]="rootDirectory" - [rootDirectoryIsLoading]="rootDirectoryIsLoading" - [rootDirectoryIsLoaded]="rootDirectoryIsLoaded" - (loadRootDirectory)="loadRootDirectory.emit($event)"> + [files]="files" + [directoryIsLoading]="directoryIsLoading" + [directoryIsLoaded]="directoryIsLoaded" + (loadDirectory)="onChangeFileSelect($event)"> </app-file-select-form-control> </accordion-group> <accordion-group heading="Home page" [isOpen]="true"> @@ -101,10 +101,10 @@ [form]="getHomeConfigFormGroup()" [controlName]="'home_component_logo'" [controlLabel]="'Logo'" - [rootDirectory]="rootDirectory" - [rootDirectoryIsLoading]="rootDirectoryIsLoading" - [rootDirectoryIsLoaded]="rootDirectoryIsLoaded" - (loadRootDirectory)="loadRootDirectory.emit($event)"> + [files]="files" + [directoryIsLoading]="directoryIsLoading" + [directoryIsLoaded]="directoryIsLoaded" + (loadDirectory)="onChangeFileSelect($event)"> </app-file-select-form-control> </div> </accordion-group> diff --git a/client/src/app/admin/instance/components/instance-form.component.ts b/client/src/app/admin/instance/components/instance-form.component.ts index 407768ea2d84f8dc9b128f9d480cc92f7eadd4d7..428378525cd649ab7ab15df974cf9d675592ad43 100644 --- a/client/src/app/admin/instance/components/instance-form.component.ts +++ b/client/src/app/admin/instance/components/instance-form.component.ts @@ -18,9 +18,9 @@ import { Instance, FileInfo } from 'src/app/metamodel/models'; }) export class InstanceFormComponent implements OnInit { @Input() instance: Instance; - @Input() rootDirectory: FileInfo[]; - @Input() rootDirectoryIsLoading: boolean; - @Input() rootDirectoryIsLoaded: boolean; + @Input() files: FileInfo[]; + @Input() directoryIsLoading: boolean; + @Input() directoryIsLoaded: boolean; @Output() loadRootDirectory: EventEmitter<string> = new EventEmitter(); @Output() onSubmit: EventEmitter<Instance> = new EventEmitter(); @@ -74,6 +74,10 @@ the fast implementation of a project data exchange platform in a dedicated infor return this.form.controls.data_path.value == ''; } + onChangeFileSelect(path: string) { + this.loadRootDirectory.emit(`${this.form.controls.data_path.value}${path}`); + } + getHomeConfigFormGroup() { return this.form.controls.home_component_config as FormGroup; } diff --git a/client/src/app/admin/instance/containers/edit-instance.component.html b/client/src/app/admin/instance/containers/edit-instance.component.html index 1a8c5740c24e9a663c8f950b5ea67a86f448e9cc..419925a9a2bf1c1a39aa346fdbb7a09cc58bb64b 100644 --- a/client/src/app/admin/instance/containers/edit-instance.component.html +++ b/client/src/app/admin/instance/containers/edit-instance.component.html @@ -12,9 +12,9 @@ <div class="col-12"> <app-instance-form [instance]="instance | async" - [rootDirectory]="rootDirectory | async" - [rootDirectoryIsLoading]="rootDirectoryIsLoading | async" - [rootDirectoryIsLoaded]="rootDirectoryIsLoaded | async" + [files]="files | async" + [directoryIsLoading]="directoryIsLoading | async" + [directoryIsLoaded]="directoryIsLoaded | async" (loadRootDirectory)="loadRootDirectory($event)" (onSubmit)="editInstance($event)" #formInstance> diff --git a/client/src/app/admin/instance/containers/edit-instance.component.ts b/client/src/app/admin/instance/containers/edit-instance.component.ts index 278e28cb6c2d8d583151cbf1373708acb58b937b..590a1e02483930d5ca09d5bcbf91ec9cb2bc0332 100644 --- a/client/src/app/admin/instance/containers/edit-instance.component.ts +++ b/client/src/app/admin/instance/containers/edit-instance.component.ts @@ -15,8 +15,8 @@ import { Observable } from 'rxjs'; import { Instance, FileInfo } from 'src/app/metamodel/models'; import * as instanceActions from 'src/app/metamodel/actions/instance.actions'; import * as instanceSelector from 'src/app/metamodel/selectors/instance.selector'; -import * as rootDirectoryActions from 'src/app/metamodel/actions/root-directory.actions'; -import * as rootDirectorySelector from 'src/app/metamodel/selectors/root-directory.selector'; +import * as fileExplorerActions from 'src/app/metamodel/actions/file-explorer.actions'; +import * as fileExplorerSelector from 'src/app/metamodel/selectors/file-explorer.selector'; @Component({ selector: 'app-edit-instance', @@ -24,15 +24,15 @@ import * as rootDirectorySelector from 'src/app/metamodel/selectors/root-directo }) export class EditInstanceComponent { public instance: Observable<Instance>; - public rootDirectory: Observable<FileInfo[]>; - public rootDirectoryIsLoading: Observable<boolean>; - public rootDirectoryIsLoaded: Observable<boolean>; + public files: Observable<FileInfo[]>; + public directoryIsLoading: Observable<boolean>; + public directoryIsLoaded: Observable<boolean>; constructor(private store: Store<{ }>) { this.instance = store.select(instanceSelector.selectInstanceByRouteName); - this.rootDirectory = store.select(rootDirectorySelector.selectAllFileInfo); - this.rootDirectoryIsLoading = store.select(rootDirectorySelector.selectRootDirectoryIsLoading); - this.rootDirectoryIsLoaded = store.select(rootDirectorySelector.selectRootDirectoryIsLoaded); + this.files = store.select(fileExplorerSelector.selectFiles); + this.directoryIsLoading = store.select(fileExplorerSelector.selectDirectoryIsLoading); + this.directoryIsLoaded = store.select(fileExplorerSelector.selectDirectoryIsLoaded); } editInstance(instance: Instance) { @@ -40,6 +40,6 @@ export class EditInstanceComponent { } loadRootDirectory(path: string) { - this.store.dispatch(rootDirectoryActions.loadRootDirectory({ path })); + this.store.dispatch(fileExplorerActions.loadRootDirectory({ path })); } } diff --git a/client/src/app/admin/instance/containers/new-instance.component.html b/client/src/app/admin/instance/containers/new-instance.component.html index 5566a5170881a0fc25982b0a116e54e2ff195578..ed3f20581e52abffd8c928a6e3a630b6efdee6c8 100644 --- a/client/src/app/admin/instance/containers/new-instance.component.html +++ b/client/src/app/admin/instance/containers/new-instance.component.html @@ -11,9 +11,9 @@ <div class="row"> <div class="col-12"> <app-instance-form - [rootDirectory]="rootDirectory | async" - [rootDirectoryIsLoading]="rootDirectoryIsLoading | async" - [rootDirectoryIsLoaded]="rootDirectoryIsLoaded | async" + [files]="files | async" + [directoryIsLoading]="directoryIsLoading | async" + [directoryIsLoaded]="directoryIsLoaded | async" (loadRootDirectory)="loadRootDirectory($event)" (onSubmit)="addNewInstance($event)" #formInstance> diff --git a/client/src/app/admin/instance/containers/new-instance.component.ts b/client/src/app/admin/instance/containers/new-instance.component.ts index 9c3383cf43af6ed532228bf34897d3d1b3d57333..70756b1d3d7e434ce7e27272f73c535f75b3a0c6 100644 --- a/client/src/app/admin/instance/containers/new-instance.component.ts +++ b/client/src/app/admin/instance/containers/new-instance.component.ts @@ -14,22 +14,22 @@ import { Observable } from 'rxjs'; import { Instance, FileInfo } from 'src/app/metamodel/models'; import * as instanceActions from 'src/app/metamodel/actions/instance.actions'; -import * as rootDirectoryActions from 'src/app/metamodel/actions/root-directory.actions'; -import * as rootDirectorySelector from 'src/app/metamodel/selectors/root-directory.selector'; +import * as fileExplorerActions from 'src/app/metamodel/actions/file-explorer.actions'; +import * as fileExplorerSelector from 'src/app/metamodel/selectors/file-explorer.selector'; @Component({ selector: 'app-new-instance', templateUrl: 'new-instance.component.html' }) export class NewInstanceComponent { - public rootDirectory: Observable<FileInfo[]>; - public rootDirectoryIsLoading: Observable<boolean>; - public rootDirectoryIsLoaded: Observable<boolean>; + public files: Observable<FileInfo[]>; + public directoryIsLoading: Observable<boolean>; + public directoryIsLoaded: Observable<boolean>; constructor(private store: Store<{ }>) { - this.rootDirectory = store.select(rootDirectorySelector.selectAllFileInfo); - this.rootDirectoryIsLoading = store.select(rootDirectorySelector.selectRootDirectoryIsLoading); - this.rootDirectoryIsLoaded = store.select(rootDirectorySelector.selectRootDirectoryIsLoaded); + this.files = store.select(fileExplorerSelector.selectFiles); + this.directoryIsLoading = store.select(fileExplorerSelector.selectDirectoryIsLoading); + this.directoryIsLoaded = store.select(fileExplorerSelector.selectDirectoryIsLoaded); } addNewInstance(instance: Instance) { @@ -37,6 +37,6 @@ export class NewInstanceComponent { } loadRootDirectory(path: string) { - this.store.dispatch(rootDirectoryActions.loadRootDirectory({ path })); + this.store.dispatch(fileExplorerActions.loadRootDirectory({ path })); } } diff --git a/client/src/app/admin/instance/dataset/components/dataset/dataset-form.component.html b/client/src/app/admin/instance/dataset/components/dataset/dataset-form.component.html index 7434b275297a35355f1d3af2a2601eb055e2a7fb..5680185aee54eaa92c73846ea4120f533a4a33ac 100644 --- a/client/src/app/admin/instance/dataset/components/dataset/dataset-form.component.html +++ b/client/src/app/admin/instance/dataset/components/dataset/dataset-form.component.html @@ -42,9 +42,9 @@ </div> <app-data-path-form-control [form]="form" - [rootDirectory]="rootDirectory" - [rootDirectoryIsLoading]="rootDirectoryIsLoading" - [rootDirectoryIsLoaded]="rootDirectoryIsLoaded" + [files]="rootDirectory" + [directoryIsLoading]="rootDirectoryIsLoading" + [directoryIsLoaded]="rootDirectoryIsLoaded" (loadRootDirectory)="onChangeDataPath($event)"> </app-data-path-form-control> <div class="form-group"> diff --git a/client/src/app/admin/instance/dataset/containers/edit-dataset.component.ts b/client/src/app/admin/instance/dataset/containers/edit-dataset.component.ts index a816c37aef2efbdfbf8846c463288bee305e851e..1eaadb2d9fb73614585f0e221a03180ac83dc2b5 100644 --- a/client/src/app/admin/instance/dataset/containers/edit-dataset.component.ts +++ b/client/src/app/admin/instance/dataset/containers/edit-dataset.component.ts @@ -23,8 +23,8 @@ import * as tableActions from 'src/app/metamodel/actions/table.actions'; import * as tableSelector from 'src/app/metamodel/selectors/table.selector'; import * as datasetFamilySelector from 'src/app/metamodel/selectors/dataset-family.selector'; import * as instanceSelector from 'src/app/metamodel/selectors/instance.selector'; -import * as rootDirectoryActions from 'src/app/metamodel/actions/root-directory.actions'; -import * as rootDirectorySelector from 'src/app/metamodel/selectors/root-directory.selector'; +import * as fileExplorerActions from 'src/app/metamodel/actions/file-explorer.actions'; +import * as fileExplorerSelector from 'src/app/metamodel/selectors/file-explorer.selector'; @Component({ selector: 'app-edit-dataset', @@ -70,9 +70,9 @@ export class EditDatasetComponent implements OnInit { this.datasetFamilyListIsLoading = store.select(datasetFamilySelector.selectDatasetFamilyListIsLoading); this.datasetFamilyListIsLoaded = store.select(datasetFamilySelector.selectDatasetFamilyListIsLoaded); this.datasetFamilyList = store.select(datasetFamilySelector.selectAllDatasetFamilies); - this.rootDirectory = store.select(rootDirectorySelector.selectAllFileInfo); - this.rootDirectoryIsLoading = store.select(rootDirectorySelector.selectRootDirectoryIsLoading); - this.rootDirectoryIsLoaded = store.select(rootDirectorySelector.selectRootDirectoryIsLoaded); + this.rootDirectory = store.select(fileExplorerSelector.selectFiles); + this.rootDirectoryIsLoading = store.select(fileExplorerSelector.selectDirectoryIsLoading); + this.rootDirectoryIsLoaded = store.select(fileExplorerSelector.selectDirectoryIsLoaded); } ngOnInit() { @@ -84,7 +84,7 @@ export class EditDatasetComponent implements OnInit { } loadRootDirectory(path: string) { - this.store.dispatch(rootDirectoryActions.loadRootDirectory({ path })); + this.store.dispatch(fileExplorerActions.loadRootDirectory({ path })); } editDataset(dataset: Dataset) { diff --git a/client/src/app/admin/instance/dataset/containers/new-dataset.component.ts b/client/src/app/admin/instance/dataset/containers/new-dataset.component.ts index a9de9b2f2c37f518eefce4740a8b8117782f75d8..73393f666d953240e635495efc1c6eb2fa06c30a 100644 --- a/client/src/app/admin/instance/dataset/containers/new-dataset.component.ts +++ b/client/src/app/admin/instance/dataset/containers/new-dataset.component.ts @@ -21,8 +21,8 @@ import * as tableSelector from 'src/app/metamodel/selectors/table.selector'; import * as datasetFamilySelector from 'src/app/metamodel/selectors/dataset-family.selector'; import * as datasetActions from 'src/app/metamodel/actions/dataset.actions'; import * as instanceSelector from 'src/app/metamodel/selectors/instance.selector'; -import * as rootDirectoryActions from 'src/app/metamodel/actions/root-directory.actions'; -import * as rootDirectorySelector from 'src/app/metamodel/selectors/root-directory.selector'; +import * as fileExplorerActions from 'src/app/metamodel/actions/file-explorer.actions'; +import * as fileExplorerSelector from 'src/app/metamodel/selectors/file-explorer.selector'; @Component({ selector: 'app-new-dataset', @@ -55,9 +55,9 @@ export class NewDatasetComponent implements OnInit { this.datasetFamilyListIsLoading = store.select(datasetFamilySelector.selectDatasetFamilyListIsLoading); this.datasetFamilyListIsLoaded = store.select(datasetFamilySelector.selectDatasetFamilyListIsLoaded); this.datasetFamilyList = store.select(datasetFamilySelector.selectAllDatasetFamilies); - this.rootDirectory = store.select(rootDirectorySelector.selectAllFileInfo); - this.rootDirectoryIsLoading = store.select(rootDirectorySelector.selectRootDirectoryIsLoading); - this.rootDirectoryIsLoaded = store.select(rootDirectorySelector.selectRootDirectoryIsLoaded); + this.rootDirectory = store.select(fileExplorerSelector.selectFiles); + this.rootDirectoryIsLoading = store.select(fileExplorerSelector.selectDirectoryIsLoading); + this.rootDirectoryIsLoaded = store.select(fileExplorerSelector.selectDirectoryIsLoaded); } ngOnInit() { @@ -71,7 +71,7 @@ export class NewDatasetComponent implements OnInit { } loadRootDirectory(path: string) { - this.store.dispatch(rootDirectoryActions.loadRootDirectory({ path })); + this.store.dispatch(fileExplorerActions.loadRootDirectory({ path })); } addNewDataset(dataset: Dataset) { diff --git a/client/src/app/metamodel/actions/root-directory.actions.ts b/client/src/app/metamodel/actions/file-explorer.actions.ts similarity index 57% rename from client/src/app/metamodel/actions/root-directory.actions.ts rename to client/src/app/metamodel/actions/file-explorer.actions.ts index e702eff1305b8dc60434d3c4533d74e1cc212d28..2eac1f022fd74ed42a255d9dd3c53c82432e3b23 100644 --- a/client/src/app/metamodel/actions/root-directory.actions.ts +++ b/client/src/app/metamodel/actions/file-explorer.actions.ts @@ -12,5 +12,6 @@ import { createAction, props } from '@ngrx/store'; import { FileInfo } from '../models'; export const loadRootDirectory = createAction('[Metamodel] Load Root Directory', props<{ path: string }>()); -export const loadRootDirectorySuccess = createAction('[Metamodel] Load Root Directory Success', props<{ files: FileInfo[] }>()); -export const loadRootDirectoryFail = createAction('[Metamodel] Load Root Directory Fail'); +export const loadDatasetDirectory = createAction('[Metamodel] Load Dataset Directory', props<{ path: string }>()); +export const loadDirectorySuccess = createAction('[Metamodel] Load Root Directory Success', props<{ files: FileInfo[] }>()); +export const loadDirectoryFail = createAction('[Metamodel] Load Root Directory Fail'); \ No newline at end of file diff --git a/client/src/app/metamodel/effects/file-explorer.effects.ts b/client/src/app/metamodel/effects/file-explorer.effects.ts new file mode 100644 index 0000000000000000000000000000000000000000..cd99b62a0ac86be7ecef5dc49f915b9ede2635eb --- /dev/null +++ b/client/src/app/metamodel/effects/file-explorer.effects.ts @@ -0,0 +1,64 @@ +/** + * 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 { Injectable } from '@angular/core'; + +import { Actions, createEffect, ofType, concatLatestFrom } from '@ngrx/effects'; +import { Store } from '@ngrx/store'; +import { of } from 'rxjs'; +import { map, mergeMap, catchError } from 'rxjs/operators'; + +import * as fileExplorerActions from '../actions/file-explorer.actions'; +import { FileExplorerService } from '../services/file-explorer.service'; +import * as instanceSelector from '../selectors/instance.selector'; +import * as datasetSelector from '../selectors/dataset.selector'; + +/** + * @class + * @classdesc File explorer effects. + */ +@Injectable() +export class FileExplorerEffects { + /** + * Calls action to retrieve file list for the given root directory. + */ + loadRootDirectory$ = createEffect((): any => + this.actions$.pipe( + ofType(fileExplorerActions.loadRootDirectory), + mergeMap(action => this.fileExplorerService.retrieveRootDirectory(action.path) + .pipe( + map(files => fileExplorerActions.loadDirectorySuccess({ files })), + catchError(() => of(fileExplorerActions.loadDirectoryFail())) + ) + ) + ) + ); + + /** + * Calls action to retrieve file list for the given dataset directory. + */ + loadDatasetDirectory$ = createEffect((): any => + this.actions$.pipe( + ofType(fileExplorerActions.loadDatasetDirectory), + concatLatestFrom(() => this.store.select(datasetSelector.selectDatasetNameByRoute)), + mergeMap(([action, datasetName]) => this.fileExplorerService.retrieveDatasetDirectory(datasetName, action.path) + .pipe( + map(files => fileExplorerActions.loadDirectorySuccess({ files })), + catchError(() => of(fileExplorerActions.loadDirectoryFail())) + ) + ) + ) + ); + + constructor( + private actions$: Actions, + private fileExplorerService: FileExplorerService, + private store: Store<{ }> + ) {} +} diff --git a/client/src/app/metamodel/effects/index.ts b/client/src/app/metamodel/effects/index.ts index 2be316f4d96b35d79b4dc68fdee9a389f184b615..e024d70be1c7979712561c10aa94e919fc9aba5b 100644 --- a/client/src/app/metamodel/effects/index.ts +++ b/client/src/app/metamodel/effects/index.ts @@ -20,10 +20,10 @@ import { InstanceGroupEffects } from './instance-group.effects'; import { CriteriaFamilyEffects } from './criteria-family.effects'; import { OutputCategoryEffects } from './output-category.effects'; import { OutputFamilyEffects } from './output-family.effects'; -import { RootDirectoryEffects } from './root-directory.effects' import { SelectEffects } from './select.effects'; import { SelectOptionEffects } from './select-option.effects'; import { AttributeDistinctEffects } from './attribute-distinct.effects'; +import { FileExplorerEffects } from './file-explorer.effects'; export const metamodelEffects = [ DatabaseEffects, @@ -39,8 +39,8 @@ export const metamodelEffects = [ CriteriaFamilyEffects, OutputCategoryEffects, OutputFamilyEffects, - RootDirectoryEffects, SelectEffects, SelectOptionEffects, - AttributeDistinctEffects + AttributeDistinctEffects, + FileExplorerEffects ]; diff --git a/client/src/app/metamodel/effects/root-directory.effects.spec.ts b/client/src/app/metamodel/effects/root-directory.effects.spec.ts deleted file mode 100644 index c2704c84e1b90a55c0b32d8aedfbdad65ab5230e..0000000000000000000000000000000000000000 --- a/client/src/app/metamodel/effects/root-directory.effects.spec.ts +++ /dev/null @@ -1,62 +0,0 @@ -import { TestBed } from '@angular/core/testing'; - -import { provideMockActions } from '@ngrx/effects/testing'; -import { EffectsMetadata, getEffectsMetadata } from '@ngrx/effects'; -import { Observable } from 'rxjs'; -import { cold, hot } from 'jasmine-marbles'; - -import { RootDirectoryEffects } from './root-directory.effects'; -import { RootDirectoryService } from '../services/root-directory.service'; -import * as rootDirectoryActions from '../actions/root-directory.actions'; -import { FILES } from '../../../test-data'; - -describe('[Metamodel][Effects] RootDirectoryEffects', () => { - let actions = new Observable(); - let effects: RootDirectoryEffects; - let metadata: EffectsMetadata<RootDirectoryEffects>; - let service: RootDirectoryService; - - beforeEach(() => { - TestBed.configureTestingModule({ - providers: [ - RootDirectoryEffects, - { provide: RootDirectoryService, useValue: { }}, - provideMockActions(() => actions) - ] - }).compileComponents(); - effects = TestBed.inject(RootDirectoryEffects); - metadata = getEffectsMetadata(effects); - service = TestBed.inject(RootDirectoryService); - }); - - it('should be created', () => { - expect(effects).toBeTruthy(); - }); - - describe('loadRootDirectory$ effect', () => { - it('should dispatch the loadRootDirectorySuccess action on success', () => { - const action = rootDirectoryActions.loadRootDirectory({ path: 'path' }); - const outcome = rootDirectoryActions.loadRootDirectorySuccess({ files: FILES }); - - actions = hot('-a', { a: action }); - const response = cold('-a|', { a: FILES }); - const expected = cold('--b', { b: outcome }); - service.retrieveRootDirectory = jest.fn(() => response); - - expect(effects.loadRootDirectory$).toBeObservable(expected); - }); - - it('should dispatch the loadRootDirectoryFail action on HTTP failure', () => { - const action = rootDirectoryActions.loadRootDirectory({ path: 'path' }); - const error = new Error(); - const outcome = rootDirectoryActions.loadRootDirectoryFail(); - - actions = hot('-a', { a: action }); - const response = cold('-#|', { }, error); - const expected = cold('--b', { b: outcome }); - service.retrieveRootDirectory = jest.fn(() => response); - - expect(effects.loadRootDirectory$).toBeObservable(expected); - }); - }); -}); diff --git a/client/src/app/metamodel/effects/root-directory.effects.ts b/client/src/app/metamodel/effects/root-directory.effects.ts deleted file mode 100644 index f8ff1ff7f5167b651e47b1cea970ed6634808432..0000000000000000000000000000000000000000 --- a/client/src/app/metamodel/effects/root-directory.effects.ts +++ /dev/null @@ -1,45 +0,0 @@ -/** - * 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 { Injectable } from '@angular/core'; - -import { Actions, createEffect, ofType } from '@ngrx/effects'; -import { of } from 'rxjs'; -import { map, mergeMap, catchError } from 'rxjs/operators'; - -import * as rootDirectoryActions from '../actions/root-directory.actions'; -import { RootDirectoryService } from '../services/root-directory.service'; - -/** - * @class - * @classdesc Root directory effects. - */ -@Injectable() -export class RootDirectoryEffects { - - /** - * Calls action to retrieve file list for the given root directory. - */ - loadRootDirectory$ = createEffect((): any => - this.actions$.pipe( - ofType(rootDirectoryActions.loadRootDirectory), - mergeMap(action => this.rootDirectoryService.retrieveRootDirectory(action.path) - .pipe( - map(files => rootDirectoryActions.loadRootDirectorySuccess({ files })), - catchError(() => of(rootDirectoryActions.loadRootDirectoryFail())) - ) - ) - ) - ); - - constructor( - private actions$: Actions, - private rootDirectoryService: RootDirectoryService - ) {} -} diff --git a/client/src/app/metamodel/metamodel.reducer.ts b/client/src/app/metamodel/metamodel.reducer.ts index 2873d8352a35318928b41d8cff2800df6015f303..a58d93875c1e54e83db94d316428e21e513fdb09 100644 --- a/client/src/app/metamodel/metamodel.reducer.ts +++ b/client/src/app/metamodel/metamodel.reducer.ts @@ -23,10 +23,10 @@ import * as attribute from './reducers/attribute.reducer'; import * as criteriaFamily from './reducers/criteria-family.reducer'; import * as outputCategory from './reducers/output-category.reducer'; import * as outputFamily from './reducers/output-family.reducer'; -import * as rootDirectory from './reducers/root-directory.reducer'; import * as select from './reducers/select.reducer'; import * as selectOption from './reducers/select-option.reducer'; import * as attributeDistinct from './reducers/attribute-distinct.reducer'; +import * as fileExplorer from './reducers/file-explorer.reducer'; /** * Interface for metamodel state. @@ -47,10 +47,10 @@ export interface State { criteriaFamily: criteriaFamily.State; outputCategory: outputCategory.State; outputFamily: outputFamily.State; - rootDirectory: rootDirectory.State; select: select.State; selectOption: selectOption.State; attributeDistinct: attributeDistinct.State; + fileExplorer: fileExplorer.State; } const reducers = { @@ -67,10 +67,10 @@ const reducers = { criteriaFamily: criteriaFamily.criteriaFamilyReducer, outputCategory: outputCategory.outputCategoryReducer, outputFamily: outputFamily.outputFamilyReducer, - rootDirectory: rootDirectory.rootDirectoryReducer, select: select.selectReducer, selectOption: selectOption.selectOptionReducer, - attributeDistinct: attributeDistinct.attributeDistinctReducer + attributeDistinct: attributeDistinct.attributeDistinctReducer, + fileExplorer: fileExplorer.fileExplorerReducer }; export const metamodelReducer = combineReducers(reducers); diff --git a/client/src/app/metamodel/reducers/file-explorer.reducer.ts b/client/src/app/metamodel/reducers/file-explorer.reducer.ts new file mode 100644 index 0000000000000000000000000000000000000000..c625f43e979c43806261341eba2fc3d042a7167d --- /dev/null +++ b/client/src/app/metamodel/reducers/file-explorer.reducer.ts @@ -0,0 +1,61 @@ +/** + * 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 { createReducer, on } from '@ngrx/store'; + +import * as fileExplorerActions from '../actions/file-explorer.actions'; +import { FileInfo } from '../models'; + +/** + * Interface for root directory state. + * + * @interface State + */ +export interface State { + files: FileInfo[]; + directoryIsLoading: boolean; + directoryIsLoaded: boolean; +} + +export const initialState: State = { + files: null, + directoryIsLoading: false, + directoryIsLoaded: false +}; + +export const fileExplorerReducer = createReducer( + initialState, + on(fileExplorerActions.loadRootDirectory, (state) => ({ + ...state, + files: null, + directoryIsLoading: true, + directoryIsLoaded: false + })), + on(fileExplorerActions.loadDatasetDirectory, (state) => ({ + ...state, + files: null, + directoryIsLoading: true, + directoryIsLoaded: false + })), + on(fileExplorerActions.loadDirectorySuccess, (state, { files }) => ({ + ...state, + files, + directoryIsLoading: false, + directoryIsLoaded: true + })), + on(fileExplorerActions.loadDirectoryFail, state => ({ + ...state, + directoryIsLoading: false, + directoryIsLoaded: false + })) +); + +export const selectFiles = (state: State) => state.files; +export const selectDirectoryIsLoading = (state: State) => state.directoryIsLoading; +export const selectDirectoryIsLoaded = (state: State) => state.directoryIsLoaded; diff --git a/client/src/app/metamodel/reducers/root-directory.reducer.spec.ts b/client/src/app/metamodel/reducers/root-directory.reducer.spec.ts deleted file mode 100644 index 942dcd439222fccc6ad85e3725e9cebe70b442c4..0000000000000000000000000000000000000000 --- a/client/src/app/metamodel/reducers/root-directory.reducer.spec.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { Action } from '@ngrx/store'; - -import * as fromRootDirectory from './root-directory.reducer'; -import * as rootDirectoryActions from '../actions/root-directory.actions'; -import { FILES } from '../../../test-data'; - -describe('[Metamodel][Reducers] RootDirectory reducer', () => { - it('unknown action should return the default state', () => { - const { initialState } = fromRootDirectory; - const action = { type: 'Unknown' }; - const state = fromRootDirectory.rootDirectoryReducer(initialState, action); - expect(state).toBe(initialState); - }); - - it('loadRootDirectory action should set rootDirectoryIsLoading to true', () => { - const { initialState } = fromRootDirectory; - const action = rootDirectoryActions.loadRootDirectory({ path: 'path' }); - const state = fromRootDirectory.rootDirectoryReducer(initialState, action); - expect(state.ids.length).toEqual(0); - expect(state.entities).toEqual({ }); - expect(state.rootDirectoryIsLoading).toEqual(true); - expect(state.rootDirectoryIsLoaded).toEqual(false); - expect(state).not.toBe(initialState); - }); - - it('loadRootDirectorySuccess action should add files, set rootDirectoryIsLoading to false and set rootDirectoryIsLoaded to true', () => { - const { initialState } = fromRootDirectory; - const action = rootDirectoryActions.loadRootDirectorySuccess({ files: FILES }); - const state = fromRootDirectory.rootDirectoryReducer(initialState, action); - expect(state.ids.length).toEqual(2); - expect(state.ids).toContain('file-one'); - expect(state.ids).toContain('file-two'); - expect(Object.keys(state.entities).length).toEqual(2); - expect(state.rootDirectoryIsLoading).toEqual(false); - expect(state.rootDirectoryIsLoaded).toEqual(true); - expect(state).not.toBe(initialState); - }); - - it('loadRootDirectoryFail action should set rootDirectoryIsLoading to false', () => { - const { initialState } = fromRootDirectory; - const action = rootDirectoryActions.loadRootDirectoryFail(); - const state = fromRootDirectory.rootDirectoryReducer(initialState, action); - expect(state.ids.length).toEqual(0); - expect(state.entities).toEqual({ }); - expect(state.rootDirectoryIsLoading).toEqual(false); - expect(state.rootDirectoryIsLoaded).toEqual(false); - expect(state).not.toBe(initialState); - }); - - it('should get rootDirectoryIsLoading', () => { - const action = {} as Action; - const state = fromRootDirectory.rootDirectoryReducer(undefined, action); - - expect(fromRootDirectory.selectRootDirectoryIsLoading(state)).toEqual(false); - }); - - it('should get rootDirectoryIsLoaded', () => { - const action = {} as Action; - const state = fromRootDirectory.rootDirectoryReducer(undefined, action); - - expect(fromRootDirectory.selectRootDirectoryIsLoaded(state)).toEqual(false); - }); -}); diff --git a/client/src/app/metamodel/reducers/root-directory.reducer.ts b/client/src/app/metamodel/reducers/root-directory.reducer.ts deleted file mode 100644 index efab0b9d840fc4bb35267e4a32b820987b221bea..0000000000000000000000000000000000000000 --- a/client/src/app/metamodel/reducers/root-directory.reducer.ts +++ /dev/null @@ -1,76 +0,0 @@ -/** - * 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 { createReducer, on } from '@ngrx/store'; -import { EntityState, EntityAdapter, createEntityAdapter } from '@ngrx/entity'; - -import * as rootDirectoryActions from '../actions/root-directory.actions'; -import { FileInfo } from '../models'; - -/** - * Interface for root directory state. - * - * @interface State - */ -export interface State extends EntityState<FileInfo> { - rootDirectoryIsLoading: boolean; - rootDirectoryIsLoaded: boolean; -} - -export const adapter: EntityAdapter<FileInfo> = createEntityAdapter<FileInfo>({ - selectId: (fileInfo: FileInfo) => fileInfo.name, - sortComparer: (a: FileInfo, b: FileInfo) => a.name.localeCompare(b.name) -}); - -export const initialState: State = adapter.getInitialState({ - rootDirectoryIsLoading: false, - rootDirectoryIsLoaded: false -}); - -export const rootDirectoryReducer = createReducer( - initialState, - on(rootDirectoryActions.loadRootDirectory, (state) => { - return { - ...state, - rootDirectoryIsLoading: true, - rootDirectoryIsLoaded: false - } - }), - on(rootDirectoryActions.loadRootDirectorySuccess, (state, { files }) => { - return adapter.setAll( - files, - { - ...state, - rootDirectoryIsLoading: false, - rootDirectoryIsLoaded: true - } - ); - }), - on(rootDirectoryActions.loadRootDirectoryFail, (state) => { - return { - ...state, - rootDirectoryIsLoading: false - } - }) -); - -const { - selectIds, - selectEntities, - selectAll, - selectTotal, -} = adapter.getSelectors(); - -export const selectFileInfoIds = selectIds; -export const selectFileInfoEntities = selectEntities; -export const selectAllFileInfo = selectAll; -export const selectFileInfoTotal = selectTotal; - -export const selectRootDirectoryIsLoading = (state: State) => state.rootDirectoryIsLoading; -export const selectRootDirectoryIsLoaded = (state: State) => state.rootDirectoryIsLoaded; diff --git a/client/src/app/metamodel/selectors/file-explorer.selector.ts b/client/src/app/metamodel/selectors/file-explorer.selector.ts new file mode 100644 index 0000000000000000000000000000000000000000..a7d2b305e42016e3724a38e68d3900aa68a87875 --- /dev/null +++ b/client/src/app/metamodel/selectors/file-explorer.selector.ts @@ -0,0 +1,33 @@ +/** + * 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 { createSelector } from '@ngrx/store'; + +import * as reducer from '../metamodel.reducer'; +import * as fromFileExplorer from '../reducers/file-explorer.reducer'; + +export const selectFileExplorerState = createSelector( + reducer.getMetamodelState, + (state: reducer.State) => state.fileExplorer +); + +export const selectFiles = createSelector( + selectFileExplorerState, + fromFileExplorer.selectFiles +); + +export const selectDirectoryIsLoading = createSelector( + selectFileExplorerState, + fromFileExplorer.selectDirectoryIsLoading +); + +export const selectDirectoryIsLoaded = createSelector( + selectFileExplorerState, + fromFileExplorer.selectDirectoryIsLoaded +); diff --git a/client/src/app/metamodel/selectors/root-directory.selector.spec.ts b/client/src/app/metamodel/selectors/root-directory.selector.spec.ts deleted file mode 100644 index ab145eb08a0668c0575959ccedeca1561832f3ea..0000000000000000000000000000000000000000 --- a/client/src/app/metamodel/selectors/root-directory.selector.spec.ts +++ /dev/null @@ -1,39 +0,0 @@ -import * as rootDirectorySelector from './root-directory.selector'; -import * as fromRootDirectory from '../reducers/root-directory.reducer'; - -describe('[Metamodel][Selector] Root Directory selector', () => { - it('should get rootDirectory state', () => { - const state = { metamodel: { rootDirectory: { ...fromRootDirectory.initialState }}}; - expect(rootDirectorySelector.selectRootDirectoryState(state)).toEqual(state.metamodel.rootDirectory); - }); - - it('should get file info IDs', () => { - const state = { metamodel: { rootDirectory: { ...fromRootDirectory.initialState }}}; - expect(rootDirectorySelector.selectFileInfoIds(state).length).toEqual(0); - }); - - it('should get file info entities', () => { - const state = { metamodel: { rootDirectory: { ...fromRootDirectory.initialState }}}; - expect(rootDirectorySelector.selectFileInfoEntities(state)).toEqual({ }); - }); - - it('should get all file info', () => { - const state = { metamodel: { rootDirectory: { ...fromRootDirectory.initialState }}}; - expect(rootDirectorySelector.selectAllFileInfo(state).length).toEqual(0); - }); - - it('should get file info count', () => { - const state = { metamodel: { rootDirectory: { ...fromRootDirectory.initialState }}}; - expect(rootDirectorySelector.selectFileInfoTotal(state)).toEqual(0); - }); - - it('should get rootDirectoryIsLoading', () => { - const state = { metamodel: { rootDirectory: { ...fromRootDirectory.initialState }}}; - expect(rootDirectorySelector.selectRootDirectoryIsLoading(state)).toBe(false); - }); - - it('should get rootDirectoryIsLoading', () => { - const state = { metamodel: { rootDirectory: { ...fromRootDirectory.initialState }}}; - expect(rootDirectorySelector.selectRootDirectoryIsLoaded(state)).toBe(false); - }); -}); diff --git a/client/src/app/metamodel/selectors/root-directory.selector.ts b/client/src/app/metamodel/selectors/root-directory.selector.ts deleted file mode 100644 index 8462cfcff2aebb0b4c84c27fd3e2f5d6a1139e9d..0000000000000000000000000000000000000000 --- a/client/src/app/metamodel/selectors/root-directory.selector.ts +++ /dev/null @@ -1,48 +0,0 @@ -/** - * 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 { createSelector } from '@ngrx/store'; - -import * as reducer from '../metamodel.reducer'; -import * as fromRootDirectory from '../reducers/root-directory.reducer'; - -export const selectRootDirectoryState = createSelector( - reducer.getMetamodelState, - (state: reducer.State) => state.rootDirectory -); - -export const selectFileInfoIds = createSelector( - selectRootDirectoryState, - fromRootDirectory.selectFileInfoIds -); - -export const selectFileInfoEntities = createSelector( - selectRootDirectoryState, - fromRootDirectory.selectFileInfoEntities -); - -export const selectAllFileInfo = createSelector( - selectRootDirectoryState, - fromRootDirectory.selectAllFileInfo -); - -export const selectFileInfoTotal = createSelector( - selectRootDirectoryState, - fromRootDirectory.selectFileInfoTotal -); - -export const selectRootDirectoryIsLoading = createSelector( - selectRootDirectoryState, - fromRootDirectory.selectRootDirectoryIsLoading -); - -export const selectRootDirectoryIsLoaded = createSelector( - selectRootDirectoryState, - fromRootDirectory.selectRootDirectoryIsLoaded -); diff --git a/client/src/app/metamodel/services/root-directory.service.ts b/client/src/app/metamodel/services/file-explorer.service.ts similarity index 67% rename from client/src/app/metamodel/services/root-directory.service.ts rename to client/src/app/metamodel/services/file-explorer.service.ts index ed8c19c37fe555106b5d84b8e0ea5041026b2056..4894cd4b5822f0b1fd746c90a73845123b35a46e 100644 --- a/client/src/app/metamodel/services/root-directory.service.ts +++ b/client/src/app/metamodel/services/file-explorer.service.ts @@ -17,10 +17,10 @@ import { AppConfigService } from 'src/app/app-config.service'; /** * @class - * @classdesc Root directory service. + * @classdesc File explorer service. */ @Injectable() -export class RootDirectoryService { +export class FileExplorerService { constructor(private http: HttpClient, private config: AppConfigService) { } /** @@ -33,4 +33,15 @@ export class RootDirectoryService { retrieveRootDirectory(path: string): Observable<FileInfo[]> { return this.http.get<FileInfo[]>(`${this.config.apiUrl}/file-explorer${path}`); } + + /** + * Retrieves dataset directory with the given path. + * + * @param {string} path - The path. + * + * @return Observable<FileInfo[]> + */ + retrieveDatasetDirectory(datasetName: string, path: string): Observable<FileInfo[]> { + return this.http.get<FileInfo[]>(`${this.config.apiUrl}//dataset-file-explorer//${datasetName}${path}`); + } } diff --git a/client/src/app/metamodel/services/index.ts b/client/src/app/metamodel/services/index.ts index 414036d9c34bc042f163a8c65aa362ce45d9a231..5433cee05ebfd33103ee4e564e20a8d40f2adbb6 100644 --- a/client/src/app/metamodel/services/index.ts +++ b/client/src/app/metamodel/services/index.ts @@ -20,10 +20,10 @@ import { AttributeService } from './attribute.service'; import { CriteriaFamilyService } from './criteria-family.service'; import { OutputCategoryService } from './output-category.service'; import { OutputFamilyService } from './output-family.service'; -import { RootDirectoryService } from './root-directory.service'; import { SelectService } from './select.service'; import { SelectOptionService } from './select-option.service'; import { AttributeDistinctService } from './attribute-distinct.service'; +import { FileExplorerService } from './file-explorer.service'; export const metamodelServices = [ DatabaseService, @@ -39,8 +39,8 @@ export const metamodelServices = [ CriteriaFamilyService, OutputCategoryService, OutputFamilyService, - RootDirectoryService, SelectService, SelectOptionService, - AttributeDistinctService + AttributeDistinctService, + FileExplorerService ]; diff --git a/client/src/app/metamodel/services/root-directory.service.spec.ts b/client/src/app/metamodel/services/root-directory.service.spec.ts deleted file mode 100644 index adf40e820e48fd7c0217d4c03afece1a9df2048a..0000000000000000000000000000000000000000 --- a/client/src/app/metamodel/services/root-directory.service.spec.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { TestBed, inject } from '@angular/core/testing'; -import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; - -import { RootDirectoryService } from './root-directory.service'; -import { AppConfigService } from 'src/app/app-config.service'; -import { FileInfo } from '../models'; - -describe('[Instance][Metamodel][Services] RootDirectoryService', () => { - let service: RootDirectoryService; - - beforeEach(() => { - TestBed.configureTestingModule({ - imports: [HttpClientTestingModule], - providers: [ - { provide: AppConfigService, useValue: { apiUrl: 'http://testing.com' } }, - RootDirectoryService - ] - }); - service = TestBed.inject(RootDirectoryService); - }); - - it('#retrieveRootDirectory() should return an Observable<FileInfo[]>', - inject([HttpTestingController, RootDirectoryService],(httpMock: HttpTestingController, service: RootDirectoryService) => { - const mockResponse = []; - - service.retrieveRootDirectory('/path').subscribe((event: FileInfo[]) => { - expect(event).toEqual(mockResponse); - }); - - const mockRequest = httpMock.expectOne('http://testing.com/file-explorer/path'); - - expect(mockRequest.cancelled).toBeFalsy(); - expect(mockRequest.request.method).toEqual('GET'); - expect(mockRequest.request.responseType).toEqual('json'); - mockRequest.flush(mockResponse); - - httpMock.verify(); - } - ) - ); -});