Skip to content
Snippets Groups Projects
Commit b8e90dfc authored by François Agneray's avatar François Agneray
Browse files

Merge branch '2-construction-url-search' into 'develop'

#2 => done

Closes #2

See merge request !3
parents a19abc11 7bb2a123
No related branches found
No related tags found
2 merge requests!68Develop,!3#2 => done
Pipeline #1106 passed
...@@ -5,6 +5,7 @@ import { CriteriaTabsComponent } from './criteria-tabs.component'; ...@@ -5,6 +5,7 @@ import { CriteriaTabsComponent } from './criteria-tabs.component';
import { OutputTabsComponent } from './output-tabs.component'; import { OutputTabsComponent } from './output-tabs.component';
import { SummaryComponent } from './summary.component'; import { SummaryComponent } from './summary.component';
import { criteriaComponents } from './criteria'; import { criteriaComponents } from './criteria';
import { UrlDisplayComponent } from './url-display.component';
export const dummiesComponents = [ export const dummiesComponents = [
ProgressComponent, ProgressComponent,
...@@ -13,5 +14,6 @@ export const dummiesComponents = [ ...@@ -13,5 +14,6 @@ export const dummiesComponents = [
CriteriaTabsComponent, CriteriaTabsComponent,
OutputTabsComponent, OutputTabsComponent,
criteriaComponents, criteriaComponents,
SummaryComponent SummaryComponent,
UrlDisplayComponent
]; ];
<p>
<a target="_blank" [href]="getUrl()">{{ getUrl() }}</a>
</p>
\ No newline at end of file
import { Component, Input, ChangeDetectionStrategy, Output, EventEmitter } from '@angular/core';
import { Criterion } from '../store/model';
@Component({
selector: 'app-url-display',
templateUrl: 'url-display.component.html',
styleUrls: [ 'url-display.component.css' ],
changeDetection: ChangeDetectionStrategy.OnPush
})
export class UrlDisplayComponent {
@Input() apiPath: string;
@Input() datasetName: string;
@Input() criteriaList: Criterion[];
@Input() outputList: number[];
getUrl() {
return this.apiPath + '/data/' + this.datasetName + '?a=' +
this.outputList.join(';') + '&c=' +
this.criteriaList.map(criterion => criterion.getCriterionStr()).join(';');
}
}
\ No newline at end of file
<div class="row mt-4"> <div class="row mt-4">
<div class="col-12 col-md-8"> <div class="col-12 col-md-8">
<app-url-display
[apiPath]="apiPath"
[datasetName]="datasetName | async"
[criteriaList]="criteriaList | async"
[outputList]="outputList | async">
</app-url-display>
Datatable ? Datatable ?
</div> </div>
<div class="col-12 col-md-4 pt-2"> <div class="col-12 col-md-4 pt-2">
......
...@@ -4,6 +4,7 @@ import { ActivatedRoute, ParamMap } from '@angular/router'; ...@@ -4,6 +4,7 @@ import { ActivatedRoute, ParamMap } from '@angular/router';
import { Observable } from 'rxjs'; import { Observable } from 'rxjs';
import { Store } from '@ngrx/store'; import { Store } from '@ngrx/store';
import { environment } from '../../../environments/environment';
import { Criterion } from '../store/model'; import { Criterion } from '../store/model';
import { Dataset, DatasetOutputFamily, OutputFamily, Category, Attribute } from '../../metamodel/model'; import { Dataset, DatasetOutputFamily, OutputFamily, Category, Attribute } from '../../metamodel/model';
import * as searchActions from '../store/search.action'; import * as searchActions from '../store/search.action';
...@@ -26,6 +27,7 @@ interface StoreState { ...@@ -26,6 +27,7 @@ interface StoreState {
styleUrls: [ 'result.component.css' ] styleUrls: [ 'result.component.css' ]
}) })
export class ResultComponent implements OnInit { export class ResultComponent implements OnInit {
public apiPath: string = environment.apiUrl + '/search';
public datasetName: Observable<String>; public datasetName: Observable<String>;
public currentStep: Observable<string>; public currentStep: Observable<string>;
public datasetList: Observable<Dataset[]>; public datasetList: Observable<Dataset[]>;
......
...@@ -14,6 +14,6 @@ export class SelectCriterion extends Criterion { ...@@ -14,6 +14,6 @@ export class SelectCriterion extends Criterion {
} }
getCriterionStr(): string { getCriterionStr(): string {
return this.id + '-se-' + this.option.value; return this.id + ':eq:' + this.option.value;
} }
} }
...@@ -4,9 +4,11 @@ import { Criterion } from './model'; ...@@ -4,9 +4,11 @@ import { Criterion } from './model';
export const CHANGE_STEP = 'Change Search Step'; export const CHANGE_STEP = 'Change Search Step';
export const SELECT_DATASET = 'Select Dataset'; export const SELECT_DATASET = 'Select Dataset';
export const UPDATE_DEFAULT_CRITERIA_LIST = 'Update Default Criteria List Action';
export const UPDATE_CRITERIA_LIST = 'Update Criteria List'; export const UPDATE_CRITERIA_LIST = 'Update Criteria List';
export const ADD_CRITERION = 'Add Criterion'; export const ADD_CRITERION = 'Add Criterion';
export const DELETE_CRITERION = 'Delete Criterion'; export const DELETE_CRITERION = 'Delete Criterion';
export const UPDATE_DEFAULT_OUTPUT_LIST = 'Update Default Output List';
export const UPDATE_OUTPUT_LIST = 'Update Output List'; export const UPDATE_OUTPUT_LIST = 'Update Output List';
export class ChangeStepAction implements Action { export class ChangeStepAction implements Action {
...@@ -21,6 +23,12 @@ export class SelectDatasetAction implements Action { ...@@ -21,6 +23,12 @@ export class SelectDatasetAction implements Action {
constructor(public payload: string) { } constructor(public payload: string) { }
} }
export class UpdateDefaultCriteriaListAction implements Action {
type = UPDATE_DEFAULT_CRITERIA_LIST;
constructor(public payload: Criterion[]) { }
}
export class UpdateCriteriaListAction implements Action { export class UpdateCriteriaListAction implements Action {
type = UPDATE_CRITERIA_LIST; type = UPDATE_CRITERIA_LIST;
...@@ -39,6 +47,12 @@ export class DeleteCriterionAction implements Action { ...@@ -39,6 +47,12 @@ export class DeleteCriterionAction implements Action {
constructor(public payload: number) { } constructor(public payload: number) { }
} }
export class UpdateDefaultOutputListAction implements Action {
type = UPDATE_DEFAULT_OUTPUT_LIST;
constructor(public payload: number[]) { }
}
export class UpdateOutputListAction implements Action { export class UpdateOutputListAction implements Action {
type = UPDATE_OUTPUT_LIST; type = UPDATE_OUTPUT_LIST;
...@@ -48,7 +62,9 @@ export class UpdateOutputListAction implements Action { ...@@ -48,7 +62,9 @@ export class UpdateOutputListAction implements Action {
export type Actions export type Actions
= ChangeStepAction = ChangeStepAction
| SelectDatasetAction | SelectDatasetAction
| UpdateDefaultCriteriaListAction
| UpdateCriteriaListAction | UpdateCriteriaListAction
| AddCriterionAction | AddCriterionAction
| DeleteCriterionAction | DeleteCriterionAction
| UpdateDefaultOutputListAction
| UpdateOutputListAction; | UpdateOutputListAction;
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { Effect, Actions, ofType } from '@ngrx/effects'; import { Effect, Actions, ofType } from '@ngrx/effects';
import { switchMap } from 'rxjs/operators'; import { Store } from '@ngrx/store';
import { of } from 'rxjs';
import { switchMap, withLatestFrom } from 'rxjs/operators';
import * as criteriaActions from '../../metamodel/action/criteria.action'; import * as criteriaActions from '../../metamodel/action/criteria.action';
import * as searchActions from './search.action'; import * as searchActions from './search.action';
import * as fromSearch from './search.reducer';
import { BetweenCriterion } from './model'; import { BetweenCriterion } from './model';
@Injectable() @Injectable()
export class SearchEffects { export class SearchEffects {
constructor( constructor(
private actions$: Actions private actions$: Actions,
private store$: Store<{search: fromSearch.State}>
) { } ) { }
@Effect() @Effect()
...@@ -30,9 +34,37 @@ export class SearchEffects { ...@@ -30,9 +34,37 @@ export class SearchEffects {
}); });
return [ return [
new searchActions.UpdateOutputListAction(outputList), new searchActions.UpdateDefaultOutputListAction(outputList),
new searchActions.UpdateCriteriaListAction(criteriaList) new searchActions.UpdateDefaultCriteriaListAction(criteriaList)
]; ];
}) })
); );
@Effect()
updateDefaultOutputListAction$ = this.actions$.pipe(
ofType(searchActions.UPDATE_DEFAULT_OUTPUT_LIST),
withLatestFrom(this.store$),
switchMap(([action, state]) => {
if (state.search.outputList.length > 0) {
return of({type: 'No Action'});
} else {
const updateDefaultOutputListAction = action as searchActions.UpdateDefaultOutputListAction;
return of(new searchActions.UpdateOutputListAction(updateDefaultOutputListAction.payload));
}
})
);
@Effect()
updateDefaultCriteriaListAction$ = this.actions$.pipe(
ofType(searchActions.UPDATE_DEFAULT_CRITERIA_LIST),
withLatestFrom(this.store$),
switchMap(([action, state]) => {
if (state.search.criteriaList.length > 0) {
return of({type: 'No Action'});
} else {
const updateDefaultCriteriaListAction = action as searchActions.UpdateDefaultCriteriaListAction;
return of(new searchActions.UpdateCriteriaListAction(updateDefaultCriteriaListAction.payload));
}
})
);
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment