diff --git a/frontends/dnet-is-application/src/app/contexts/context-viewer.component.html b/frontends/dnet-is-application/src/app/contexts/context-viewer.component.html index 35e0c686..d53f6ffc 100644 --- a/frontends/dnet-is-application/src/app/contexts/context-viewer.component.html +++ b/frontends/dnet-is-application/src/app/contexts/context-viewer.component.html @@ -1 +1,44 @@ -CONTEXT EDITOR \ No newline at end of file +

Context Viewer

+ +

+ Context ID: {{context?.id}}
+ Label: {{context?.label}}
+ Type: {{context?.type}}
+

+ +

+ Return to contexts list + + Download +

+ + \ No newline at end of file diff --git a/frontends/dnet-is-application/src/app/contexts/contexts.component.css b/frontends/dnet-is-application/src/app/contexts/contexts.component.css index d5ec5248..b8d78c73 100644 --- a/frontends/dnet-is-application/src/app/contexts/contexts.component.css +++ b/frontends/dnet-is-application/src/app/contexts/contexts.component.css @@ -4,3 +4,15 @@ padding: 0 !important; height: 2.5em !important; } + +.context-node { + padding-top: 1em; +} + +.context-node a { + text-decoration: none; +} + +.context-node a:hover { + text-decoration: underline; +} \ No newline at end of file diff --git a/frontends/dnet-is-application/src/app/contexts/contexts.component.html b/frontends/dnet-is-application/src/app/contexts/contexts.component.html index fa986db5..34dc5a8c 100644 --- a/frontends/dnet-is-application/src/app/contexts/contexts.component.html +++ b/frontends/dnet-is-application/src/app/contexts/contexts.component.html @@ -27,7 +27,7 @@ Parameters - + diff --git a/frontends/dnet-is-application/src/app/contexts/contexts.component.ts b/frontends/dnet-is-application/src/app/contexts/contexts.component.ts index 31ff650a..94c5b74f 100644 --- a/frontends/dnet-is-application/src/app/contexts/contexts.component.ts +++ b/frontends/dnet-is-application/src/app/contexts/contexts.component.ts @@ -2,12 +2,12 @@ import { Component, Inject,AfterViewInit, OnInit, ViewChild } from '@angular/cor import { ISService } from '../is.service'; import { MatTableDataSource } from '@angular/material/table'; import { MatSort, Sort } from '@angular/material/sort'; -import { Context, WfHistoryEntry } from '../model/controller.model'; +import { Context, ContextNode, WfHistoryEntry } from '../model/controller.model'; import { ActivatedRoute, Params } from '@angular/router'; import { Observable, combineLatest } from 'rxjs'; import { map } from 'rxjs/operators'; import { MatDialog, MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; -import { KeyValue } from '../model/controller.model'; +import { KeyValue, ContextParam } from '../model/controller.model'; import { FormControl, FormGroup, FormGroupDirective, NgForm, Validators } from '@angular/forms'; @Component({ @@ -22,7 +22,7 @@ export class ContextsComponent implements AfterViewInit ,OnInit { @ViewChild(MatSort) sort: MatSort | undefined - constructor(public service: ISService, public route: ActivatedRoute, public contextDialog: MatDialog) { + constructor(public service: ISService, public route: ActivatedRoute, public dialog: MatDialog) { } ngOnInit() { @@ -42,20 +42,13 @@ export class ContextsComponent implements AfterViewInit ,OnInit { this.contextsDatasource.filter = filterValue; } - - openEditDialog(context: Context): void { - const dialogRef = this.contextDialog.open(ContextParamsDialog, { + showParamsDialog(context: Context): void { + const dialogRef = this.dialog.open(ContextParamsDialog, { data: context.parameters, width: '80%' }); } - deleteContext(ctx:Context) { - if (confirm('Are you sure?')) { - this.service.deleteContext(ctx.id, (data: void) => this.reload()); - } - } - } @Component({ @@ -78,6 +71,35 @@ export class ContextParamsDialog { templateUrl: './context-viewer.component.html', styleUrls: ['./contexts.component.css'] }) -export class ContextViewerComponent { +export class ContextViewerComponent implements OnInit { + + context?:Context + categories:ContextNode[] = []; + + constructor(public service: ISService, public route: ActivatedRoute, public dialog: MatDialog) { + } + + ngOnInit() { + this.route.queryParams.subscribe((params) => { + this.service.loadContext(params['id'], (data: Context) => this.context = data); + this.service.loadContextCategories(params['id'], (data:ContextNode[]) => this.categories = data); + }); + } + + populateNode(level:number, node:ContextNode): void { + this.service.loadContextConcepts(level, node.id, (data:ContextNode[]) => { + node.populated = true; + node.childs = data + }); + } + + showParamsDialog(params:ContextParam[] | undefined): void { + if (params) { + this.dialog.open(ContextParamsDialog, { + data: params, + width: '80%' + }); + } + } } diff --git a/frontends/dnet-is-application/src/app/is.service.ts b/frontends/dnet-is-application/src/app/is.service.ts index 1337330a..dd0cb800 100644 --- a/frontends/dnet-is-application/src/app/is.service.ts +++ b/frontends/dnet-is-application/src/app/is.service.ts @@ -1,6 +1,6 @@ import { Injectable } from '@angular/core'; import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http'; -import { ResourceType, Protocol, WfHistoryEntry, SimpleResource, Context } from './model/controller.model'; +import { ResourceType, Protocol, WfHistoryEntry, SimpleResource, Context, ContextNode } from './model/controller.model'; import { Observable, Observer } from 'rxjs'; import { FormGroup } from '@angular/forms'; import { MatSnackBar } from '@angular/material/snack-bar'; @@ -112,15 +112,22 @@ export class ISService { }); } - addContext(context: Context, onSuccess: Function, relatedForm?: FormGroup): void { - this.client.post('/ajax/contexts/', context).subscribe({ + loadContext(ctxId:string, onSuccess: Function): void { + this.client.get('./ajax/contexts/' + encodeURIComponent(ctxId)).subscribe({ next: data => onSuccess(data), - error: error => this.showError(error, relatedForm) + error: error => this.showError(error) }); } - deleteContext(contextId: string, onSuccess: Function): void { - this.client.delete('/ajax/contexts/' + encodeURIComponent(contextId)).subscribe({ + loadContextCategories(ctxId:string, onSuccess: Function): void { + this.client.get('./ajax/contexts/' + encodeURIComponent(ctxId) + '/categories').subscribe({ + next: data => onSuccess(data), + error: error => this.showError(error) + }); + } + + loadContextConcepts(level:number, nodeId:string, onSuccess: Function): void { + this.client.get('./ajax/contexts/' + encodeURIComponent(level) + '/' + encodeURIComponent(nodeId) + '/concepts').subscribe({ next: data => onSuccess(data), error: error => this.showError(error) }); diff --git a/frontends/dnet-is-application/src/app/model/controller.model.ts b/frontends/dnet-is-application/src/app/model/controller.model.ts index cd339ac7..1c9084a1 100644 --- a/frontends/dnet-is-application/src/app/model/controller.model.ts +++ b/frontends/dnet-is-application/src/app/model/controller.model.ts @@ -64,4 +64,15 @@ export interface Context { parameters: ContextParam[], nChilds: number, type: string -} \ No newline at end of file +} + +export interface ContextNode { + id: string, + label: string, + parameters: ContextParam[], + nChilds: number, + claim: boolean, + parent: string, + populated?: boolean, + childs?: ContextNode[] +}