From b8c78e71355cc65fc373a5b2133af1589a5583fb Mon Sep 17 00:00:00 2001 From: Ioannis Kalyvas Date: Fri, 5 Oct 2018 09:56:50 +0300 Subject: [PATCH] Introduced Facet Search Component On Dataset Public Listing --- .../dataset/DatasetPublicTableRequest.java | 2 + .../eudat/logic/managers/DatasetManager.java | 3 +- .../src/main/resources/application.properties | 3 +- dmp-frontend/.editorconfig | 4 +- dmp-frontend/Dockerfile | 1 + dmp-frontend/nginx-custom.conf | 4 + .../dataset-profile.module.ts | 114 +++++----- .../dataset-profile.router.ts | 16 +- .../rule-component/rule.component.ts | 21 +- .../dataset-public-listing.component.html | 10 +- .../dataset-public-listing.component.scss | 3 + .../datasetprofile/DatasetProfileModel.ts | 4 +- .../ExternalSourcesItemModel.ts | 2 +- .../breadcrumb/breadcrumb-resolver.service.ts | 82 +++---- .../app/services/dataset/dataset.service.ts | 16 +- .../facet-search-section.component.html | 15 ++ .../facet-search-section.component.scss | 0 .../facet-search-section.component.ts | 71 ++++++ .../facets/facet-search.component.html | 105 ++++++--- .../facets/facet-search.component.ts | 214 +++++++++++------- .../figurecard/figurecard.component.ts | 18 +- .../navigation/navigation.component.html | 2 +- .../navigation/navigation.component.scss | 8 +- .../user-dialog/user-dialog.component.html | 2 +- dmp-frontend/src/app/shared/shared.module.ts | 118 +++++----- .../login/login.component.html | 2 +- dmp-frontend/src/assets/images/OpenDMP.png | Bin 0 -> 5764 bytes dmp-frontend/src/assets/images/openDmps.png | Bin 3322 -> 0 bytes dmp-frontend/src/assets/lang/en.json | 10 +- dmp-frontend/static/index.html | 4 +- docker-compose.yml | 1 + 31 files changed, 521 insertions(+), 334 deletions(-) create mode 100644 dmp-frontend/src/app/shared/components/facets/facet-search-component/facet-search-section.component.html create mode 100644 dmp-frontend/src/app/shared/components/facets/facet-search-component/facet-search-section.component.scss create mode 100644 dmp-frontend/src/app/shared/components/facets/facet-search-component/facet-search-section.component.ts create mode 100644 dmp-frontend/src/assets/images/OpenDMP.png delete mode 100644 dmp-frontend/src/assets/images/openDmps.png diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/query/items/table/dataset/DatasetPublicTableRequest.java b/dmp-backend/data/src/main/java/eu/eudat/data/query/items/table/dataset/DatasetPublicTableRequest.java index ad438a278..27546ccae 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/query/items/table/dataset/DatasetPublicTableRequest.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/query/items/table/dataset/DatasetPublicTableRequest.java @@ -20,6 +20,8 @@ public class DatasetPublicTableRequest extends TableQuery builder.equal(root.get("dmp").get("version"), query.subQueryMax((builder1, externalRoot, nestedRoot) -> builder1.equal(externalRoot.get("dmp").get("groupId"), nestedRoot.get("dmp").get("groupId")), Arrays.asList(new SelectionField(FieldSelectionType.COMPOSITE_FIELD, "dmp:version")), String.class))); + if (this.getCriteria().getLike() != null && !this.getCriteria().getLike().isEmpty()) + query.where((builder, root) -> builder.like(root.get("label"), "%" + this.getCriteria().getLike() + "%")); if (this.getCriteria().projects != null && !this.getCriteria().projects.isEmpty()) query.where(((builder, root) -> root.get("dmp").get("project").get("id").in(this.getCriteria().projects))); if (this.getCriteria().projectStatus != null) query diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java index f03263954..7c1f7e03d 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java @@ -80,8 +80,7 @@ public class DatasetManager { public DataTableData getPaged(ApiContext apiContext, DatasetPublicTableRequest datasetTableRequest, Principal principal) throws Exception { datasetTableRequest.setQuery(apiContext.getOperationsContext().getDatabaseRepository().getDatasetDao().asQueryable().withHint(HintedModelFactory.getHint(DatasetListingModel.class))); QueryableList pagedItems = PaginationManager.applyPaging(datasetTableRequest.applyCriteria(), datasetTableRequest); - DataTableData dataTable = new DataTableData(); - + DataTableData dataTable = new DataTableData<>(); CompletableFuture> itemsFuture = pagedItems. selectAsync(item -> new DatasetListingModel().fromDataModel(item)).whenComplete((resultList, throwable) -> { diff --git a/dmp-backend/web/src/main/resources/application.properties b/dmp-backend/web/src/main/resources/application.properties index b3d677cf7..09759d640 100644 --- a/dmp-backend/web/src/main/resources/application.properties +++ b/dmp-backend/web/src/main/resources/application.properties @@ -3,7 +3,8 @@ #eu.eudat.logic.security.portmapping.https = 7444 ########################/Security######################################## server.port=8080 -server.tomcat.max-threads = 1000 +server.tomcat.max-threads = 20 +server.tomcat.max-connections = 10000 logging.file=/logs/spring-boot-logging.log ##########################Persistence########################################## database.driver-class-name=org.postgresql.Driver diff --git a/dmp-frontend/.editorconfig b/dmp-frontend/.editorconfig index 6e87a003d..2e8b0ef1b 100644 --- a/dmp-frontend/.editorconfig +++ b/dmp-frontend/.editorconfig @@ -3,8 +3,8 @@ root = true [*] charset = utf-8 -indent_style = space -indent_size = 2 +indent_style = tab +indent_size = 4 insert_final_newline = true trim_trailing_whitespace = true diff --git a/dmp-frontend/Dockerfile b/dmp-frontend/Dockerfile index fff27ccaa..a1aaa80d3 100644 --- a/dmp-frontend/Dockerfile +++ b/dmp-frontend/Dockerfile @@ -2,6 +2,7 @@ FROM johnpapa/angular-cli as angular WORKDIR /app COPY package.json /app/ RUN npm cache clear --force && npm install + COPY ./ /app/ ARG env=dev ARG aot=--no-aot diff --git a/dmp-frontend/nginx-custom.conf b/dmp-frontend/nginx-custom.conf index 4ee48806b..fdb50e93d 100644 --- a/dmp-frontend/nginx-custom.conf +++ b/dmp-frontend/nginx-custom.conf @@ -9,4 +9,8 @@ server { location /material/ { alias /usr/share/nginx/static/; } + + location /.well-known/ { + alias /usr/share/nginx/wwwcert/; + } } \ No newline at end of file diff --git a/dmp-frontend/src/app/dataset-profile-form/dataset-profile.module.ts b/dmp-frontend/src/app/dataset-profile-form/dataset-profile.module.ts index 0004728b5..6340c5746 100644 --- a/dmp-frontend/src/app/dataset-profile-form/dataset-profile.module.ts +++ b/dmp-frontend/src/app/dataset-profile-form/dataset-profile.module.ts @@ -1,9 +1,9 @@ -import { NgModule } from "@angular/core"; +import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; -import { DatasetProfileRoutes } from "./dataset-profile.router"; -import { RouterModule } from "@angular/router"; +import { DatasetProfileRoutes } from './dataset-profile.router'; +import { RouterModule } from '@angular/router'; import { FormComponent } from './form/form.component'; //import { GroupFieldFormComponent } from './groupfield-form/groupfield-form.component'; @@ -12,7 +12,7 @@ import { SectionFormComponent } from './section-form/section-form.component'; import { PageFormComponent } from './page-form/page-component'; import { CompositeFieldFormComponent } from './compositefield-form/compositefield-form.component'; import { FieldFormComponent } from './field-form/field-form.component'; -import { HttpClientModule, HttpClient } from "@angular/common/http"; +import { HttpClientModule, HttpClient } from '@angular/common/http'; import { CheckBoxComponent } from '../shared/componentsAdmin/checkbox/checkbox-component'; import { FreeTextData } from '../models/DataField/FreeTextData'; @@ -23,63 +23,63 @@ import { RadioBoxComponent } from '../shared/componentsAdmin/radiobox/radiobox-c import { WordlistComponent } from '../shared/componentsAdmin/wordlist/wordlist-component'; import { AutocompleteComponent } from '../shared/componentsAdmin/autocomplete/autocomplete-component'; import { ComboboxComponent } from '../shared/componentsAdmin/combobox/combobox-component'; -import { SharedModule } from "../shared/shared.module"; -import { DatasetProfilePreviewerComponent } from "./previewer/dataset-profile-previewer.component"; -import { DynamicFormModule } from "../form/dynamic-form.module"; +import { SharedModule } from '../shared/shared.module'; +import { DatasetProfilePreviewerComponent } from './previewer/dataset-profile-previewer.component'; +import { DynamicFormModule } from '../form/dynamic-form.module'; @NgModule({ - imports: [ - CommonModule, - FormsModule, - HttpClientModule, - ReactiveFormsModule, - RouterModule, - SharedModule, - DynamicFormModule, - RouterModule.forChild(DatasetProfileRoutes) - ], + imports: [ + CommonModule, + FormsModule, + HttpClientModule, + ReactiveFormsModule, + RouterModule, + SharedModule, + DynamicFormModule, + RouterModule.forChild(DatasetProfileRoutes) + ], - declarations: [ - FormComponent, - //GroupFieldFormComponent, - RuleFormComponent, - SectionFormComponent, - PageFormComponent, - CompositeFieldFormComponent, - FieldFormComponent, - TextAreaComponent, - CheckBoxComponent, - BooleanDecisionComponent, - FreeTextComponent, - ComboboxComponent, - AutocompleteComponent, - WordlistComponent, - RadioBoxComponent, - DatasetProfilePreviewerComponent - ], + declarations: [ + FormComponent, + //GroupFieldFormComponent, + RuleFormComponent, + SectionFormComponent, + PageFormComponent, + CompositeFieldFormComponent, + FieldFormComponent, + TextAreaComponent, + CheckBoxComponent, + BooleanDecisionComponent, + FreeTextComponent, + ComboboxComponent, + AutocompleteComponent, + WordlistComponent, + RadioBoxComponent, + DatasetProfilePreviewerComponent + ], - exports: [ - FormComponent, - //GroupFieldFormComponent, - RuleFormComponent, - SectionFormComponent, - PageFormComponent, - CompositeFieldFormComponent, - FieldFormComponent, - TextAreaComponent, - CheckBoxComponent, - BooleanDecisionComponent, - FreeTextComponent, - ComboboxComponent, - AutocompleteComponent, - WordlistComponent, - RadioBoxComponent - ], - providers: [ - ], - entryComponents: [ - DatasetProfilePreviewerComponent - ] + exports: [ + FormComponent, + //GroupFieldFormComponent, + RuleFormComponent, + SectionFormComponent, + PageFormComponent, + CompositeFieldFormComponent, + FieldFormComponent, + TextAreaComponent, + CheckBoxComponent, + BooleanDecisionComponent, + FreeTextComponent, + ComboboxComponent, + AutocompleteComponent, + WordlistComponent, + RadioBoxComponent + ], + providers: [ + ], + entryComponents: [ + DatasetProfilePreviewerComponent + ] }) diff --git a/dmp-frontend/src/app/dataset-profile-form/dataset-profile.router.ts b/dmp-frontend/src/app/dataset-profile-form/dataset-profile.router.ts index e4f05656b..c63b11d83 100644 --- a/dmp-frontend/src/app/dataset-profile-form/dataset-profile.router.ts +++ b/dmp-frontend/src/app/dataset-profile-form/dataset-profile.router.ts @@ -2,13 +2,13 @@ import { RouterModule, Routes } from '@angular/router'; import { FormComponent } from 'app/dataset-profile-form/form/form.component'; export const DatasetProfileRoutes: Routes = [ - { - path: ':id', - component: FormComponent - }, - { - path: '', - component: FormComponent - } + { + path: ':id', + component: FormComponent + }, + { + path: '', + component: FormComponent + } ]; diff --git a/dmp-frontend/src/app/dataset-profile-form/rule-component/rule.component.ts b/dmp-frontend/src/app/dataset-profile-form/rule-component/rule.component.ts index 562ef914a..34980934f 100644 --- a/dmp-frontend/src/app/dataset-profile-form/rule-component/rule.component.ts +++ b/dmp-frontend/src/app/dataset-profile-form/rule-component/rule.component.ts @@ -1,18 +1,17 @@ -import { Component, Input, Output, EventEmitter } from '@angular/core'; -import { FormGroup } from '@angular/forms' -import { Rule } from 'app/models/datasetProfileAdmin/Rule' +import { Component, Input } from '@angular/core'; +import { FormGroup } from '@angular/forms'; @Component({ - selector: 'rule-form', - templateUrl: './rule.component.html', - styleUrls: ['./rule.component.scss'] + selector: 'app-rule-form', + templateUrl: './rule.component.html', + styleUrls: ['./rule.component.scss'] }) export class RuleFormComponent { -@Input() form: FormGroup; -@Input() dataModel: FormGroup; + @Input() form: FormGroup; + @Input() dataModel: FormGroup; -TargetValidation(){ -} + TargetValidation() { + } -} \ No newline at end of file +} diff --git a/dmp-frontend/src/app/datasets/dataset-public/dataset-public-listing.component.html b/dmp-frontend/src/app/datasets/dataset-public/dataset-public-listing.component.html index 8a3c7387a..4ce458ce2 100644 --- a/dmp-frontend/src/app/datasets/dataset-public/dataset-public-listing.component.html +++ b/dmp-frontend/src/app/datasets/dataset-public/dataset-public-listing.component.html @@ -1,15 +1,13 @@ -
+
+

{{'DATASET-PUBLIC-LISTING.TITLE' | translate}} {{titlePrefix}}

-
+
-
+
-

{{'DATASET-PUBLIC-LISTING.TITLE' | translate}} {{titlePrefix}}

- - diff --git a/dmp-frontend/src/app/datasets/dataset-public/dataset-public-listing.component.scss b/dmp-frontend/src/app/datasets/dataset-public/dataset-public-listing.component.scss index e69de29bb..d750ff77c 100644 --- a/dmp-frontend/src/app/datasets/dataset-public/dataset-public-listing.component.scss +++ b/dmp-frontend/src/app/datasets/dataset-public/dataset-public-listing.component.scss @@ -0,0 +1,3 @@ +text-center{ + text-align: center +} diff --git a/dmp-frontend/src/app/models/datasetprofile/DatasetProfileModel.ts b/dmp-frontend/src/app/models/datasetprofile/DatasetProfileModel.ts index 24bfee236..879045eee 100644 --- a/dmp-frontend/src/app/models/datasetprofile/DatasetProfileModel.ts +++ b/dmp-frontend/src/app/models/datasetprofile/DatasetProfileModel.ts @@ -2,7 +2,7 @@ import { BaseErrorModel } from '../error/BaseErrorModel'; import { BackendErrorValidator } from '../../utilities/validators/BackendErrorValidator'; import { FormBuilder, FormGroup, Validators } from '@angular/forms'; import { ValidationContext } from '../../utilities/validators/ValidationContext'; -import { Serializable } from "../Serializable"; +import { Serializable } from '../Serializable'; export class DatasetProfileModel implements Serializable { public id: String; @@ -29,4 +29,4 @@ export class DatasetProfileModel implements Serializable { //baseContext.validation.push({ key: 'id', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'id')] }); return baseContext; } -} \ No newline at end of file +} diff --git a/dmp-frontend/src/app/models/external-sources/ExternalSourcesItemModel.ts b/dmp-frontend/src/app/models/external-sources/ExternalSourcesItemModel.ts index aec2fd4b4..0977d18cb 100644 --- a/dmp-frontend/src/app/models/external-sources/ExternalSourcesItemModel.ts +++ b/dmp-frontend/src/app/models/external-sources/ExternalSourcesItemModel.ts @@ -2,4 +2,4 @@ export interface ExternalSourcesItemModel { id: String; name: String; description: String; -} \ No newline at end of file +} diff --git a/dmp-frontend/src/app/services/breadcrumb/breadcrumb-resolver.service.ts b/dmp-frontend/src/app/services/breadcrumb/breadcrumb-resolver.service.ts index b60200afd..5913414c7 100644 --- a/dmp-frontend/src/app/services/breadcrumb/breadcrumb-resolver.service.ts +++ b/dmp-frontend/src/app/services/breadcrumb/breadcrumb-resolver.service.ts @@ -13,71 +13,71 @@ export class BreadCrumbResolverService { private parentComponents = []; private breadCrumbs: Observable = Observable.of([]); constructor( - private router: Router, - private zone: NgZone + private router: Router, + private zone: NgZone ) { } public push(component: any) { - let existingComponentIndex = this.activeComponents.map(x => x.constructor.name).indexOf(component.constructor.name); - if (existingComponentIndex !== -1) this.activeComponents.splice(existingComponentIndex, 1) - this.activeComponents.push(component); + const existingComponentIndex = this.activeComponents.map(x => x.constructor.name).indexOf(component.constructor.name); + if (existingComponentIndex !== -1) { this.activeComponents.splice(existingComponentIndex, 1); } + this.activeComponents.push(component); } public clear() { - this.activeComponents.length = 0; - this.breadCrumbs = Observable.of([]) + this.activeComponents.length = 0; + this.breadCrumbs = Observable.of([]); } public resolve(activatedRoute: ActivatedRoute): Observable { - this.breadCrumbs = Observable.of([]) - let routeComponents = this.getComponentsFromRoute(activatedRoute, []); - this.activeComponents.filter(x => routeComponents.indexOf(x.constructor.name) !== -1).forEach(x => { - if (x.hasOwnProperty('breadCrumbs')) { - let componentItems = this.resolveDependentComponents((x).breadCrumbs, []); - this.breadCrumbs = Observable.of(componentItems); - } - }) - return this.breadCrumbs; + this.breadCrumbs = Observable.of([]); + const routeComponents = this.getComponentsFromRoute(activatedRoute, []); + this.activeComponents.filter(x => routeComponents.indexOf(x.constructor.name) !== -1).forEach(x => { + if (x.hasOwnProperty('breadCrumbs')) { + const componentItems = this.resolveDependentComponents((x).breadCrumbs, []); + this.breadCrumbs = Observable.of(componentItems); + } + }); + return this.breadCrumbs; } private getComponentsFromRoute(activatedRoute: ActivatedRoute, routeComponents: any[]): any[] { - activatedRoute.children.forEach(x => { - if (x.children.length > 0) this.getComponentsFromRoute(x.children[0], routeComponents); - if (x.component) routeComponents.push(x.component['name']) - }) - if (activatedRoute.component) routeComponents.push(activatedRoute.component['name']) + activatedRoute.children.forEach(x => { + if (x.children.length > 0) { this.getComponentsFromRoute(x.children[0], routeComponents); } + if (x.component) { routeComponents.push(x.component['name']); } + }); + if (activatedRoute.component) { routeComponents.push(activatedRoute.component['name']); } - return routeComponents; + return routeComponents; } resolveDependentComponents(items: Observable, components: any[]): any[] { - items.subscribe(breadCrumbs => { - breadCrumbs.forEach(async item => { - let parentComponent = item.parentComponentName ? this.findComponent(item.parentComponentName) : null - if (parentComponent && parentComponent.hasOwnProperty('breadCrumbs')) { - components = this.pushToStart(components, this.resolveDependentComponents((parentComponent).breadCrumbs, components)) - } else if (item.notFoundResolver) { - components = this.pushToStart(components, item.notFoundResolver) - //components = this.pushToStart(components, [unresolvedComponentItems]) - } - }) - components = this.pushToEnd(components, breadCrumbs); - }) - return components + items.subscribe(breadCrumbs => { + breadCrumbs.forEach(async item => { + const parentComponent = item.parentComponentName ? this.findComponent(item.parentComponentName) : null; + if (parentComponent && parentComponent.hasOwnProperty('breadCrumbs')) { + components = this.pushToStart(components, this.resolveDependentComponents((parentComponent).breadCrumbs, components)); + } else if (item.notFoundResolver) { + components = this.pushToStart(components, item.notFoundResolver); + //components = this.pushToStart(components, [unresolvedComponentItems]) + } + }); + components = this.pushToEnd(components, breadCrumbs); + }); + return components; } private findComponent(componentName: string): any { - for (let i = 0; i < this.activeComponents.length; i++) { - if (this.activeComponents[i].constructor.name === componentName) return this.activeComponents[i]; - } - return null + for (let i = 0; i < this.activeComponents.length; i++) { + if (this.activeComponents[i].constructor.name === componentName) { return this.activeComponents[i]; } + } + return null; } pushToStart(first: any[], second: any[]) { - return [].concat(second.filter(x => first.map(firstX => firstX.label).indexOf(x.label) == -1), first); + return [].concat(second.filter(x => first.map(firstX => firstX.label).indexOf(x.label) === -1), first); } pushToEnd(first: any[], second: any[]) { - return [].concat(first, second.filter(x => first.map(firstX => firstX.label).indexOf(x.label) == -1)); + return [].concat(first, second.filter(x => first.map(firstX => firstX.label).indexOf(x.label) === -1)); } } diff --git a/dmp-frontend/src/app/services/dataset/dataset.service.ts b/dmp-frontend/src/app/services/dataset/dataset.service.ts index 5603ec152..0736bef01 100644 --- a/dmp-frontend/src/app/services/dataset/dataset.service.ts +++ b/dmp-frontend/src/app/services/dataset/dataset.service.ts @@ -22,27 +22,27 @@ export class DatasetService { constructor(private http: BaseHttpService) { - this.actionUrl = HostConfiguration.Server + 'datasets/'; + this.actionUrl = HostConfiguration.Server + 'datasets/'; - this.headers = new HttpHeaders(); - this.headers = this.headers.set('Content-Type', 'application/json'); - this.headers = this.headers.set('Accept', 'application/json'); + this.headers = new HttpHeaders(); + this.headers = this.headers.set('Content-Type', 'application/json'); + this.headers = this.headers.set('Accept', 'application/json'); } getPaged(dataTableRequest: DataTableRequest): Observable> { - return this.http.post>(this.actionUrl + 'getPaged', dataTableRequest, { headers: this.headers }); + return this.http.post>(this.actionUrl + 'getPaged', dataTableRequest, { headers: this.headers }); } getPublicPaged(dataTableRequest: DataTableRequest): Observable> { - return this.http.post>(this.actionUrl + 'public/paged', dataTableRequest, { headers: this.headers }); + return this.http.post>(this.actionUrl + 'public/paged', dataTableRequest, { headers: this.headers }); } makeDatasetPublic(id: String) { - return this.http.get(this.actionUrl + 'makepublic/' + id, { headers: this.headers }) + return this.http.get(this.actionUrl + 'makepublic/' + id, { headers: this.headers }); } getDatasetProfiles(): Observable { - return this.http.get(HostConfiguration.Server + 'datasetprofiles/getAll', { headers: this.headers }) + return this.http.get(HostConfiguration.Server + 'datasetprofiles/getAll', { headers: this.headers }); } } diff --git a/dmp-frontend/src/app/shared/components/facets/facet-search-component/facet-search-section.component.html b/dmp-frontend/src/app/shared/components/facets/facet-search-component/facet-search-section.component.html new file mode 100644 index 000000000..b0b3865db --- /dev/null +++ b/dmp-frontend/src/app/shared/components/facets/facet-search-component/facet-search-section.component.html @@ -0,0 +1,15 @@ +
+ + + +
+ + {{ option }} + cancel + + + + +

{{ displayLabel(option) }}

+
+
diff --git a/dmp-frontend/src/app/shared/components/facets/facet-search-component/facet-search-section.component.scss b/dmp-frontend/src/app/shared/components/facets/facet-search-component/facet-search-section.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/dmp-frontend/src/app/shared/components/facets/facet-search-component/facet-search-section.component.ts b/dmp-frontend/src/app/shared/components/facets/facet-search-component/facet-search-section.component.ts new file mode 100644 index 000000000..87bb31711 --- /dev/null +++ b/dmp-frontend/src/app/shared/components/facets/facet-search-component/facet-search-section.component.ts @@ -0,0 +1,71 @@ +import { Component, ViewEncapsulation, OnInit, Input, Output, ViewChild, EventEmitter } from '@angular/core'; +import { Observable } from 'rxjs/Observable'; +import { FormControl } from '@angular/forms'; +import { MatSelectionList } from '@angular/material'; + +@Component({ + selector: 'app-facet-section-component', + templateUrl: './facet-search-section.component.html', + styleUrls: ['./facet-search-section.component.scss'], + encapsulation: ViewEncapsulation.None, +}) +export class FacetSearchSectionComponent implements OnInit { + + @Input() + searchEnabled = false; + + @Input() + filterOptions: (value) => Observable; + + @Input() + options: Observable = Observable.of([]); + + @Input() + displayTitleFunc: (value) => string; + + @Input() + displayValueFunc: (value) => string; + + @Output() + selectedChanged = new EventEmitter(); + + @Output() + optionRemoved = new EventEmitter(); + + optionSearchControl = new FormControl(''); + + private selectedOptions: any[] = []; + + @ViewChild('optionsList') selectionList: MatSelectionList; + + + ngOnInit(): void { + this.optionSearchControl.valueChanges.subscribe(x => { if (this.filterOptions) { this.options = this.filterOptions(x); } }); + } + + public selectionChanged(event: any) { + this.selectedChanged.emit(event); + } + + public removeOption(project) { + const list = this.selectionList.selectedOptions.selected.map(x => x.value); + const indexOfProject = list.indexOf(project); + if (this.selectionList.selectedOptions.selected[indexOfProject]) { + this.selectionList.selectedOptions.selected[indexOfProject].selected = false; + this.selectionList.selectedOptions.selected.splice(indexOfProject, 1); + } + this.optionRemoved.emit(project); + } + + public isOptionSelected(value) { + return this.selectedOptions.indexOf(value) !== -1; + } + + displayLabel(value) { + return this.displayTitleFunc ? this.displayTitleFunc(value) : value; + } + + displayValue(value) { + return this.displayValueFunc ? this.displayValueFunc(value) : value; + } +} diff --git a/dmp-frontend/src/app/shared/components/facets/facet-search.component.html b/dmp-frontend/src/app/shared/components/facets/facet-search.component.html index 003d6b175..ec244ab85 100644 --- a/dmp-frontend/src/app/shared/components/facets/facet-search.component.html +++ b/dmp-frontend/src/app/shared/components/facets/facet-search.component.html @@ -1,35 +1,70 @@ -
- -

{{ 'FACET-SEARCH.PROJECT-STATUS.TITLE' | translate }}

- - {{ 'FACET-SEARCH.PROJECT-STATUS.OPTIONS.INACTIVE' | translate }} - - - {{ 'FACET-SEARCH.PROJECT-STATUS.OPTIONS.ACTIVE' | translate }} - -
- - -

{{ 'FACET-SEARCH.PROJECT.TITLE' | translate }}

- - {{ project.label }} - -
- - -

{{ 'FACET-SEARCH.PROFILES.TITLE' | translate }}

- - {{ profile.label }} - -
- - -

{{ 'FACET-SEARCH.DMP-ORGANISATIONS.TITLE' | translate }}

- - {{ dmpOrganisation.name }} - -
-
+ + + + + {{ 'FACET-SEARCH.PROJECT-STATUS.TITLE' | translate }} + + + + +

{{ 'FACET-SEARCH.PROJECT-STATUS.OPTIONS.INACTIVE' | translate }}

+
+ +

{{ 'FACET-SEARCH.PROJECT-STATUS.OPTIONS.ACTIVE' | translate }}

+
+
+
+ + + + {{ 'FACET-SEARCH.PROJECT.TITLE' | translate }} + + +
+ + + +
+ + {{ + project }} + cancel + + + + +

{{ project.label }}

+
+
+
+ + + + {{ 'FACET-SEARCH.PROFILES.TITLE' | translate }} + + + + +

{{ profile.label }}

+
+
+
+ + + + {{ 'FACET-SEARCH.DMP-ORGANISATIONS.TITLE' | translate }} + + +
+ + + +
+ + +

{{ dmpOrganisation.name }}

+
+
+
+
diff --git a/dmp-frontend/src/app/shared/components/facets/facet-search.component.ts b/dmp-frontend/src/app/shared/components/facets/facet-search.component.ts index a74076119..742f917cf 100644 --- a/dmp-frontend/src/app/shared/components/facets/facet-search.component.ts +++ b/dmp-frontend/src/app/shared/components/facets/facet-search.component.ts @@ -17,90 +17,142 @@ import { DatasetProfileModel } from '../../../models/datasetprofile/DatasetProfi import { RequestItem } from '../../../models/criteria/RequestItem'; import { ExternalSourcesService } from '../../../services/external-sources/external-sources.service'; import { ExternalSourcesItemModel } from '../../../models/external-sources/ExternalSourcesItemModel'; +import { FormControl } from '@angular/forms'; +import { LanguageService } from '../../../services/language/language.service'; +import { TranslateService } from '@ngx-translate/core'; @Component({ - selector: 'app-facet', - templateUrl: './facet-search.component.html', - styleUrls: ['./facet-search.component.scss'], - encapsulation: ViewEncapsulation.None, - providers: [ProjectService] + selector: 'app-facet', + templateUrl: './facet-search.component.html', + styleUrls: ['./facet-search.component.scss'], + encapsulation: ViewEncapsulation.None, + providers: [ProjectService] }) export class FacetSearchComponent implements OnInit { - @Input() - facetCriteria = new FacetSearchCriteriaModel(); - - @Output() - facetCriteriaChange = new EventEmitter(); - - ProjectStateType = ProjectStateType; - projects: Observable - profiles: Observable - dmpOrganisations: Observable - - @ViewChild("project") selectionList: MatSelectionList - - constructor( - public activatedRoute: ActivatedRoute, - public projectService: ProjectService, - public datasetProfileService: DatasetService, - public externalSourcesService: ExternalSourcesService - ) { - } - - ngOnInit() { - this.profiles = this.datasetProfileService.getDatasetProfiles() - this.selectionList.selectedOptions = new SelectionModel(false); - this.dmpOrganisations = this.externalSourcesService.searchDMPOrganizations('') - } - - public projectStatusChanged(event) { - this.facetCriteria.projectStatus = event.option.value - if (!event.option.selected) { - this.facetCriteria.projectStatus = null; - this.projects = Observable.of([]) - this.facetCriteria.projects = [] - } - if (event.option.selected) { - let projectCriteria = new ProjectCriteria() - projectCriteria.projectStateType = this.facetCriteria.projectStatus; - projectCriteria["length"] = 10; - let dataTableRequest: RequestItem = { criteria: projectCriteria }; - this.projects = this.projectService.get(dataTableRequest); - this.facetCriteria.projects = [] - } - this.facetCriteriaChange.emit(this.facetCriteria); - } - - public projectChanged(event: any) { - let eventValue = event.option.value - if (event.option.selected) this.facetCriteria.projects.push(eventValue); - if (!event.option.selected) { - var index = this.facetCriteria.projects.indexOf(eventValue); - this.facetCriteria.projects.splice(index, 1); - } - this.facetCriteriaChange.emit(this.facetCriteria); - } - - public profileChanged(event: any) { - let eventValue = event.option.value - if (event.option.selected) { - this.facetCriteria.datasetProfile.push(eventValue); - } - if (!event.option.selected) { - var index = this.facetCriteria.datasetProfile.indexOf(eventValue); - this.facetCriteria.datasetProfile.splice(index, 1); - } - this.facetCriteriaChange.emit(this.facetCriteria); - } - - public dmpOrganisationChanged(event: any) { - let eventValue = event.option.value - if (event.option.selected) this.facetCriteria.dmpOrganisations.push(eventValue); - if (!event.option.selected) { - var index = this.facetCriteria.dmpOrganisations.indexOf(eventValue); - this.facetCriteria.dmpOrganisations.splice(index, 1); - } - this.facetCriteriaChange.emit(this.facetCriteria); - } + @Input() + facetCriteria = new FacetSearchCriteriaModel(); + + @Output() + facetCriteriaChange = new EventEmitter(); + + + + + removable = true; + ProjectStateType = ProjectStateType; + projects: Observable; + profiles: Observable; + dmpOrganisations: Observable; + projectSearchControl = new FormControl(''); + organisationSearchControl = new FormControl(''); + + projectStateOptions = Observable.of( + [ + { label: this.languageService.instant('FACET-SEARCH.PROJECT-STATUS.OPTIONS.INACTIVE'), value: ProjectStateType.Finished }, + { label: this.languageService.instant('FACET-SEARCH.PROJECT-STATUS.OPTIONS.ACTIVE'), value: ProjectStateType.OnGoing }, + ]); + projectOptions: Observable; + + @ViewChild('project') projectSelectionList: MatSelectionList; + + displayProjectStateValue = (option) => option['value']; + displayProjectStateLabel = (option) => option['label']; + + displayProjectValue = (option) => option['id']; + displayProjectLabel = (option) => option['label']; + + constructor( + public activatedRoute: ActivatedRoute, + public projectService: ProjectService, + public languageService: TranslateService, + public datasetProfileService: DatasetService, + public externalSourcesService: ExternalSourcesService + ) { + } + + ngOnInit() { + this.profiles = this.datasetProfileService.getDatasetProfiles(); + this.dmpOrganisations = this.externalSourcesService.searchDMPOrganizations(''); + this.projectSearchControl.valueChanges.subscribe(x => this.projectSearch(x)); + this.organisationSearchControl.valueChanges.subscribe(x => this.dmpOrganisationSearch(x)); + } + + public projectStatusChanged(event) { + this.facetCriteria.projectStatus = event.option.value; + if (!event.option.selected) { + this.facetCriteria.projectStatus = null; + this.projects = Observable.of([]); + this.facetCriteria.projects = []; + } + if (event.option.selected) { + const projectCriteria = new ProjectCriteria(); + projectCriteria.projectStateType = this.facetCriteria.projectStatus; + projectCriteria['length'] = 10; + const dataTableRequest: RequestItem = { criteria: projectCriteria }; + this.projects = this.projectService.get(dataTableRequest); + this.facetCriteria.projects = []; + } + this.facetCriteriaChange.emit(this.facetCriteria); + } + + public projectChanged(event: any) { + const eventValue = event.option.value; + if (event.option.selected) { this.facetCriteria.projects.push(eventValue); } + if (!event.option.selected) { + const index = this.facetCriteria.projects.indexOf(eventValue); + this.facetCriteria.projects.splice(index, 1); + } + this.facetCriteriaChange.emit(this.facetCriteria); + } + + removeProject(project) { + const list = this.projectSelectionList.selectedOptions.selected.map(x => x.value); + const indexOfProject = list.indexOf(project); + if (this.projectSelectionList.selectedOptions.selected[indexOfProject]) { + this.projectSelectionList.selectedOptions.selected[indexOfProject].selected = false; + this.projectSelectionList.selectedOptions.selected.splice(indexOfProject, 1); + } + this.facetCriteria.projects.splice(this.facetCriteria.projects.indexOf(project), 1); + this.facetCriteriaChange.emit(this.facetCriteria); + } + + public profileChanged(event: any) { + const eventValue = event.option.value; + if (event.option.selected) { + this.facetCriteria.datasetProfile.push(eventValue); + } + if (!event.option.selected) { + const index = this.facetCriteria.datasetProfile.indexOf(eventValue); + this.facetCriteria.datasetProfile.splice(index, 1); + } + this.facetCriteriaChange.emit(this.facetCriteria); + } + + public dmpOrganisationChanged(event: any) { + const eventValue = event.option.value; + if (event.option.selected) { this.facetCriteria.dmpOrganisations.push(eventValue); } + if (!event.option.selected) { + const index = this.facetCriteria.dmpOrganisations.indexOf(eventValue); + this.facetCriteria.dmpOrganisations.splice(index, 1); + } + this.facetCriteriaChange.emit(this.facetCriteria); + } + + public projectIsSelected(value: string) { + return this.facetCriteria.projects.indexOf(value) !== -1; + } + + public projectSearch(value: string): Observable { + const projectCriteria = new ProjectCriteria(); + projectCriteria.projectStateType = this.facetCriteria.projectStatus; + projectCriteria['length'] = 10; + projectCriteria.like = value; + const dataTableRequest: RequestItem = { criteria: projectCriteria }; + return this.projectService.get(dataTableRequest); + } + + public dmpOrganisationSearch(value: string) { + this.dmpOrganisations = this.externalSourcesService.searchDMPOrganizations(value); + } } diff --git a/dmp-frontend/src/app/shared/components/figurecard/figurecard.component.ts b/dmp-frontend/src/app/shared/components/figurecard/figurecard.component.ts index 32c325d53..7feb543cd 100644 --- a/dmp-frontend/src/app/shared/components/figurecard/figurecard.component.ts +++ b/dmp-frontend/src/app/shared/components/figurecard/figurecard.component.ts @@ -20,22 +20,22 @@ export class FigurecardComponent implements OnInit { @Input() buttonTitle: string; @Input() buttonRedirectLink: string; - constructor(private router: Router,private authService: AuthService) { } + constructor(private router: Router, private authService: AuthService) { } ngOnInit() { } navigateToUrl() { - if(!this.isAuthenticated()) return; + if (!this.isAuthenticated()) { return; } this.router.navigate([this.routelLink]); - } + } - createNew(){ - this.router.navigate([this.buttonRedirectLink]); - } + createNew() { + this.router.navigate([this.buttonRedirectLink]); + } - isAuthenticated(){ - return this.authService.current() != null; - } + isAuthenticated() { + return this.authService.current() != null; + } } diff --git a/dmp-frontend/src/app/shared/components/navigation/navigation.component.html b/dmp-frontend/src/app/shared/components/navigation/navigation.component.html index 54f85fe92..9915b4b18 100644 --- a/dmp-frontend/src/app/shared/components/navigation/navigation.component.html +++ b/dmp-frontend/src/app/shared/components/navigation/navigation.component.html @@ -1,6 +1,6 @@
{{this.languageResolver.getBy('navbar') | translate}} diff --git a/dmp-frontend/src/app/shared/components/navigation/navigation.component.scss b/dmp-frontend/src/app/shared/components/navigation/navigation.component.scss index 2be63d415..816925725 100644 --- a/dmp-frontend/src/app/shared/components/navigation/navigation.component.scss +++ b/dmp-frontend/src/app/shared/components/navigation/navigation.component.scss @@ -33,9 +33,11 @@ font-size: 14px; } -.logo { - width: 38px; - height: 38px; +.app-logo { + height: 60px; + img{ + height: inherit; + } } .user-profile{ diff --git a/dmp-frontend/src/app/shared/components/user-dialog/user-dialog.component.html b/dmp-frontend/src/app/shared/components/user-dialog/user-dialog.component.html index 375fec73b..56071b61e 100644 --- a/dmp-frontend/src/app/shared/components/user-dialog/user-dialog.component.html +++ b/dmp-frontend/src/app/shared/components/user-dialog/user-dialog.component.html @@ -14,7 +14,7 @@
-
+
{{'USER-DIALOG.EXIT' | translate}}
-

You dont need to have a registered account for OpenDMPs

+

You dont need to have a registered account for OpenDMP

diff --git a/dmp-frontend/src/assets/images/OpenDMP.png b/dmp-frontend/src/assets/images/OpenDMP.png new file mode 100644 index 0000000000000000000000000000000000000000..6259b5813e2f53d5a2afbd4aa3e14d5a5a6b9cdd GIT binary patch literal 5764 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 diff --git a/dmp-frontend/src/assets/lang/en.json b/dmp-frontend/src/assets/lang/en.json index 7b06278bc..cc1550a08 100644 --- a/dmp-frontend/src/assets/lang/en.json +++ b/dmp-frontend/src/assets/lang/en.json @@ -29,7 +29,7 @@ } }, "NAV-BAR": { - "TITLE": "OpenDMPS", + "TITLE": "OpenDMP", "PROJECTS": "Projects", "DMPS": "DMPs", "DATASETS": "Datasets", @@ -316,7 +316,7 @@ }, "HOMEPAGE": { "OPEN-DMPS": { - "STATS": "OpenDMPS DashBoard" + "STATS": "OpenDMP DashBoard" }, "MY-DMPS": { "STATS": "My DashBoard" @@ -388,13 +388,15 @@ } }, "PROJECT": { - "TITLE": "Project" + "TITLE": "Project", + "FILTER": "Filter Projects" }, "PROFILES": { "TITLE": "Dataset specification" }, "DMP-ORGANISATIONS": { - "TITLE": "DMP Organisations" + "TITLE": "DMP Organisations", + "FILTER": "Filter Organisations" } } } diff --git a/dmp-frontend/static/index.html b/dmp-frontend/static/index.html index 6adbe2c25..f61ccae56 100644 --- a/dmp-frontend/static/index.html +++ b/dmp-frontend/static/index.html @@ -19,11 +19,11 @@ - \ No newline at end of file + diff --git a/docker-compose.yml b/docker-compose.yml index 2dc0ea360..1b94552b3 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -41,6 +41,7 @@ services: container_name: dmp-frontend volumes: - ./static:/usr/share/nginx/static + - /srv/docker/wwwcert:/usr/share/nginx/wwwcert ports: ['0.0.0.0:80:80'] networks: ['stack']