diff --git a/src/app/metamodel/reducers/attribute.reducer.ts b/src/app/metamodel/reducers/attribute.reducer.ts index 370b61f6caa5837b216ba65612156a48fa01418d..535acbbbb2271ce74aa564d030d63e7f5b44c929 100644 --- a/src/app/metamodel/reducers/attribute.reducer.ts +++ b/src/app/metamodel/reducers/attribute.reducer.ts @@ -18,7 +18,8 @@ export function reducer(state: State = initialState, action: actions.Actions): S case actions.LOAD_ATTRIBUTE_SEARCH_META: return { ...state, - attributeSearchMetaIsLoading: true + attributeSearchMetaIsLoading: true, + attributeSearchMetaIsLoaded: false }; case actions.LOAD_ATTRIBUTE_SEARCH_META_SUCCESS: diff --git a/src/app/search/components/criteria/criteria-by-family.component.html b/src/app/search/components/criteria/criteria-by-family.component.html index b23601abb4105e1f376d720e12469a7108ef9485..8f59c8821e3456ea1d5533d74472eadd96702ce9 100644 --- a/src/app/search/components/criteria/criteria-by-family.component.html +++ b/src/app/search/components/criteria/criteria-by-family.component.html @@ -1,71 +1,71 @@ <div *ngFor="let attribute of getAttributeByFamily(criteriaFamily.id)"> <div [ngSwitch]="attribute.search_type"> - <div *ngSwitchCase="'fd'"> + <div *ngSwitchCase="'field'"> <app-field class="criteria" [id]="attribute.id" [operator]="attribute.operator" [label]="attribute.form_label" [placeholder]="attribute.placeholder_min" - [attributeType]="attribute.type" [criterion]="getCriterion(attribute.id)" (add)="add($event)"> + [attributeType]="attribute.type" [criterion]="getCriterion(attribute.id)" (add)="add($event)" (delete)="delete($event)"> </app-field> </div> - <div *ngSwitchCase="'bw'"> + <div *ngSwitchCase="'between'"> <app-between class="criteria" [id]="attribute.id" [label]="attribute.form_label" [placeholderMin]="attribute.placeholder_min" [placeholderMax]="attribute.placeholder_max" - [criterion]="getCriterion(attribute.id)" (add)="add($event)"> + [criterion]="getCriterion(attribute.id)" (add)="add($event)" (delete)="delete($event)"> </app-between> </div> - <div *ngSwitchCase="'se'"> + <div *ngSwitchCase="'select'"> <app-select class="criteria" [id]="attribute.id" [operator]="attribute.operator" [label]="attribute.form_label" [options]="getOptions(attribute.id)" - [criterion]="getCriterion(attribute.id)" (add)="add($event)"> + [criterion]="getCriterion(attribute.id)" (add)="add($event)" (delete)="delete($event)"> </app-select> </div> - <div *ngSwitchCase="'ms'"> + <div *ngSwitchCase="'select-multiple'"> <app-select-multiple class="criteria" [id]="attribute.id" [operator]="attribute.operator" [label]="attribute.form_label" [options]="getOptions(attribute.id)" - [criterion]="getCriterion(attribute.id)" (add)="add($event)"> + [criterion]="getCriterion(attribute.id)" (add)="add($event)" (delete)="delete($event)"> </app-select-multiple> </div> - <div *ngSwitchCase="'dl'"> + <div *ngSwitchCase="'datalist'"> <app-datalist class="criteria" [id]="attribute.id" [operator]="attribute.operator" [label]="attribute.form_label" [placeholder]="attribute.placeholder_min" - [options]="getOptions(attribute.id)" [criterion]="getCriterion(attribute.id)" (add)="add($event)"> + [options]="getOptions(attribute.id)" [criterion]="getCriterion(attribute.id)" (add)="add($event)" (delete)="delete($event)"> </app-datalist> </div> - <div *ngSwitchCase="'rd'"> + <div *ngSwitchCase="'radio'"> <app-radio class="criteria" [id]="attribute.id" [operator]="attribute.operator" [label]="attribute.form_label" [options]="getOptions(attribute.id)" - [criterion]="getCriterion(attribute.id)" (add)="add($event)"> + [criterion]="getCriterion(attribute.id)" (add)="add($event)" (delete)="delete($event)"> </app-radio> </div> - <div *ngSwitchCase="'cb'"> + <div *ngSwitchCase="'checkbox'"> <app-checkbox class="criteria" [id]="attribute.id" [operator]="attribute.operator" [label]="attribute.form_label" [options]="getOptions(attribute.id)" - [criterion]="getCriterion(attribute.id)" (add)="add($event)"> + [criterion]="getCriterion(attribute.id)" (add)="add($event)" (delete)="delete($event)"> </app-checkbox> </div> - <div *ngSwitchCase="'dt'"> + <div *ngSwitchCase="'date'"> <app-date class="criteria" [id]="attribute.id" [operator]="attribute.operator" [label]="attribute.form_label" [placeholder]="attribute.placeholder_min" - [criterion]="getCriterion(attribute.id)" (add)="add($event)"> + [criterion]="getCriterion(attribute.id)" (add)="add($event)" (delete)="delete($event)"> </app-date> </div> - <div *ngSwitchCase="'bd'"> + <div *ngSwitchCase="'between-date'"> <app-between-date class="criteria" [id]="attribute.id" [operator]="attribute.operator" - [label]="attribute.form_label" [criterion]="getCriterion(attribute.id)" (add)="add($event)"> + [label]="attribute.form_label" [criterion]="getCriterion(attribute.id)" (add)="add($event)" (delete)="delete($event)"> </app-between-date> </div> - <div *ngSwitchCase="'tm'"> + <div *ngSwitchCase="'time'"> <app-time class="criteria" [id]="attribute.id" [label]="attribute.form_label" - [operator]="attribute.operator" [criterion]="getCriterion(attribute.id)" (add)="add($event)"> + [operator]="attribute.operator" [criterion]="getCriterion(attribute.id)" (add)="add($event)" (delete)="delete($event)"> </app-time> </div> - <div *ngSwitchCase="'ts'"> - <app-datetime class="criteria" [id]="attribute.id" [label]="attribute.form_label" - [criterion]="getCriterion(attribute.id)" (add)="add($event)"> + <div *ngSwitchCase="'date-time'"> + <app-datetime class="criteria" [id]="attribute.id" [label]="attribute.form_label" [operator]="attribute.operator" + [criterion]="getCriterion(attribute.id)" (add)="add($event)" (delete)="delete($event)"> </app-datetime> </div> - <div *ngSwitchCase="'js'"> + <div *ngSwitchCase="'json'"> <app-json class="criteria" [id]="attribute.id" [label]="attribute.form_label" - [criterion]="getCriterion(attribute.id)" (add)="add($event)"> + [criterion]="getCriterion(attribute.id)" (add)="add($event)" (delete)="delete($event)"> </app-json> </div> <div *ngSwitchDefault> diff --git a/src/app/search/components/criteria/criteria-by-family.component.ts b/src/app/search/components/criteria/criteria-by-family.component.ts index 21ea9fb3ea792e59cdbb5ace1b82c4305a8b6f8f..23fdd077b06e5c04c64d5d2c16e8f28d5a3bef86 100644 --- a/src/app/search/components/criteria/criteria-by-family.component.ts +++ b/src/app/search/components/criteria/criteria-by-family.component.ts @@ -33,4 +33,8 @@ export class CriteriaByFamilyComponent { add(criterion: Criterion): void { this.addCriterion.emit(criterion); } + + delete(id: number): void { + this.deleteCriterion.emit(id); + } } diff --git a/src/app/search/components/criteria/criteria-tabs.component.html b/src/app/search/components/criteria/criteria-tabs.component.html index b3d89a1aef7095f5f4f2fefa099d91669115e706..4e3e8e7ae3ebbe0881d548fdc84f6ba996cbd9ab 100644 --- a/src/app/search/components/criteria/criteria-tabs.component.html +++ b/src/app/search/components/criteria/criteria-tabs.component.html @@ -2,9 +2,12 @@ <div class="border rounded my-2"> <p class="border-bottom bg-light text-primary py-4 pl-4">{{ criteriaFamilyList[0].label }}</p> <div class="px-3"> - <app-criteria-by-family [criteriaFamily]="criteriaFamilyList[0]" - [datasetAttributeList]="datasetAttributeList" [criteriaList]="criteriaList" - (addCriterion)="add($event)"> + <app-criteria-by-family + [criteriaFamily]="criteriaFamilyList[0]" + [datasetAttributeList]="datasetAttributeList" + [criteriaList]="criteriaList" + (addCriterion)="add($event)" + (deleteCriterion)="delCriterion($event)"> </app-criteria-by-family> </div> </div> @@ -22,8 +25,12 @@ <span *ngIf="!ag.isOpen"><i class="fas fa-chevron-down"></i></span> </div> </button> - <app-criteria-by-family [criteriaFamily]="family" [datasetAttributeList]="datasetAttributeList" - [criteriaList]="criteriaList" (addCriterion)="add($event)"> + <app-criteria-by-family + [criteriaFamily]="family" + [datasetAttributeList]="datasetAttributeList" + [criteriaList]="criteriaList" + (addCriterion)="add($event)" + (deleteCriterion)="delCriterion($event)"> </app-criteria-by-family> </accordion-group> </ng-container> diff --git a/src/app/search/components/criteria/criteria-tabs.component.ts b/src/app/search/components/criteria/criteria-tabs.component.ts index 9051314a85260ee6a6a4d48564d8501a309a6073..142185a653eca27f6db182284332f177053d7f3a 100644 --- a/src/app/search/components/criteria/criteria-tabs.component.ts +++ b/src/app/search/components/criteria/criteria-tabs.component.ts @@ -14,6 +14,7 @@ export class CriteriaTabsComponent { @Input() datasetAttributeList: Attribute[]; @Input() criteriaList: Criterion[]; @Output() addCriterion: EventEmitter<Criterion> = new EventEmitter(); + @Output() deleteCriterion: EventEmitter<number> = new EventEmitter(); getAttributeByFamily(idFamily: number): Attribute[] { return this.datasetAttributeList @@ -23,4 +24,8 @@ export class CriteriaTabsComponent { add(criterion: Criterion): void { this.addCriterion.emit(criterion); } + + delCriterion(id: number): void { + this.deleteCriterion.emit(id); + } } diff --git a/src/app/search/components/criteria/search-type/between-date.component.html b/src/app/search/components/criteria/search-type/between-date.component.html index 2970dd73f7cc21e1aed6b80b6285021098d39c48..ae6266d7c58add9e25c2489f54a68f699d17f90f 100644 --- a/src/app/search/components/criteria/search-type/between-date.component.html +++ b/src/app/search/components/criteria/search-type/between-date.component.html @@ -6,7 +6,11 @@ bsDaterangepicker> </div> <div class="col-2 text-center"> - <button class="btn btn-outline-success" *ngIf="!field.disabled" [hidden]="!field.value" - (click)="addCriterion()"><i class="fas fa-plus-circle"></i></button> + <button class="btn btn-outline-success" *ngIf="!field.disabled" [hidden]="!field.value" (click)="addCriterion()"> + <i class="fas fa-plus fa-fw"></i> + </button> + <button class="btn btn-outline-danger" *ngIf="field.disabled" (click)="deleteCriterion()"> + <i class="fa fa-times fa-fw"></i> + </button> </div> </div> \ No newline at end of file diff --git a/src/app/search/components/criteria/search-type/between-date.component.ts b/src/app/search/components/criteria/search-type/between-date.component.ts index c519625061e30c983d57b5187b45704926193cdf..b44a764046e5e73e93f3864f22bcfc356e328b3b 100644 --- a/src/app/search/components/criteria/search-type/between-date.component.ts +++ b/src/app/search/components/criteria/search-type/between-date.component.ts @@ -1,7 +1,7 @@ import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core'; import { FormControl } from '@angular/forms'; -import { Criterion, BetweenDateCriterion } from '../../../store/model'; +import { Criterion, BetweenCriterion } from '../../../store/model'; @Component({ selector: 'app-between-date', @@ -16,23 +16,28 @@ export class BetweenDateComponent { set criterion(criterion: Criterion) { this.getDefault(criterion); } - @Output() add: EventEmitter<BetweenDateCriterion> = new EventEmitter(); + @Output() add: EventEmitter<BetweenCriterion> = new EventEmitter(); + @Output() delete: EventEmitter<number> = new EventEmitter(); field = new FormControl(''); addCriterion(): void { const dateMin = this.getDateString(this.field.value[0]); const dateMax = this.getDateString(this.field.value[1]); - const fd = new BetweenDateCriterion(this.id, dateMin, dateMax); + const fd = new BetweenCriterion(this.id, dateMin, dateMax); this.add.emit(fd); } + deleteCriterion() { + this.delete.emit(this.id); + } + getDefault(criterion: Criterion): void { if (!criterion) { this.field.setValue(''); this.field.enable(); } else { - const c = criterion as BetweenDateCriterion; + const c = criterion as BetweenCriterion; this.field.setValue([new Date(c.min), new Date(c.max)]); this.field.disable(); } diff --git a/src/app/search/components/criteria/search-type/between.component.html b/src/app/search/components/criteria/search-type/between.component.html index e494e74353eca3f2642f452caa48d6fdf43c9a8a..c838c741f85dc40185dad0a0d73982eb8f3d10c7 100644 --- a/src/app/search/components/criteria/search-type/between.component.html +++ b/src/app/search/components/criteria/search-type/between.component.html @@ -10,6 +10,8 @@ </div> <div class="col-2 text-center"> <button class="btn btn-outline-success" *ngIf="!fieldMin.disabled" [hidden]="!fieldMin.value && !fieldMax.value" - (click)="addCriterion()"><i class="fas fa-plus-circle"></i></button> + (click)="addCriterion()"><i class="fas fa-plus fa-fw"></i></button> + <button class="btn btn-outline-danger" *ngIf="fieldMin.disabled" + (click)="deleteCriterion()"><i class="fa fa-times fa-fw"></i></button> </div> </div> \ No newline at end of file diff --git a/src/app/search/components/criteria/search-type/between.component.ts b/src/app/search/components/criteria/search-type/between.component.ts index d95e0dc246b04b00aaa6771d8b5040c19585f1fc..87db07aa0a04c2e2fcdfc444be035281010fc69d 100644 --- a/src/app/search/components/criteria/search-type/between.component.ts +++ b/src/app/search/components/criteria/search-type/between.component.ts @@ -18,6 +18,7 @@ export class BetweenComponent { this.getDefault(criterion); } @Output() add: EventEmitter<BetweenCriterion> = new EventEmitter(); + @Output() delete: EventEmitter<number> = new EventEmitter(); fieldMin = new FormControl(''); fieldMax = new FormControl(''); @@ -27,6 +28,10 @@ export class BetweenComponent { this.add.emit(fd); } + deleteCriterion() { + this.delete.emit(this.id); + } + getDefault(criterion: Criterion): void { if (!criterion) { this.fieldMin.setValue(''); diff --git a/src/app/search/components/criteria/search-type/checkbox.component.html b/src/app/search/components/criteria/search-type/checkbox.component.html index 10b9c94ee929cb36e4b3ca51137b85a3d02782ce..c92ec046a7565253c90432ce4348e7c769f599cf 100644 --- a/src/app/search/components/criteria/search-type/checkbox.component.html +++ b/src/app/search/components/criteria/search-type/checkbox.component.html @@ -7,7 +7,11 @@ </div> </div> <div class="col-2 text-center"> - <button class="btn btn-outline-success" *ngIf="!checkboxes.disabled" [hidden]="!isChecked()" - (click)="addCriterion()"><i class="fas fa-plus-circle"></i></button> + <button class="btn btn-outline-success" *ngIf="!checkboxes.disabled" [hidden]="!isChecked()" (click)="addCriterion()"> + <i class="fas fa-plus fa-fw"></i> + </button> + <button class="btn btn-outline-danger" *ngIf="checkboxes.disabled" (click)="deleteCriterion()"> + <i class="fa fa-times fa-fw"></i> + </button> </div> </div> \ No newline at end of file diff --git a/src/app/search/components/criteria/search-type/checkbox.component.ts b/src/app/search/components/criteria/search-type/checkbox.component.ts index 3627cbe84b668cea19bfdbfc38530b130d2db8f9..45a4e30f92ef70649b440f0c334959260a11f890 100644 --- a/src/app/search/components/criteria/search-type/checkbox.component.ts +++ b/src/app/search/components/criteria/search-type/checkbox.component.ts @@ -23,6 +23,7 @@ export class CheckboxComponent { this.getDefault(criterion); } @Output() add: EventEmitter<SelectMultipleCriterion> = new EventEmitter(); + @Output() delete: EventEmitter<number> = new EventEmitter(); checkboxes: FormArray; checkboxesFormControls: {value: string, control: FormControl}[]; @@ -39,6 +40,10 @@ export class CheckboxComponent { this.add.emit(cb); } + deleteCriterion() { + this.delete.emit(this.id); + } + setCheckboxes(options: Option[]) { this.checkboxesFormControls = []; this.checkboxes = new FormArray(options.map((option: Option) => { diff --git a/src/app/search/components/criteria/search-type/datalist.component.html b/src/app/search/components/criteria/search-type/datalist.component.html index 2a2d7b067e892bb3111f0376678dd2a23c32980d..85785cf714581700068dc61a82bcb1eb5c75553b 100644 --- a/src/app/search/components/criteria/search-type/datalist.component.html +++ b/src/app/search/components/criteria/search-type/datalist.component.html @@ -8,7 +8,11 @@ </datalist> </div> <div class="col-2 text-center"> - <button class="btn btn-outline-success" *ngIf="!field.disabled" [hidden]="!field.value" - (click)="addCriterion()"><i class="fas fa-plus-circle"></i></button> + <button class="btn btn-outline-success" *ngIf="!field.disabled" [hidden]="!field.value" (click)="addCriterion()"> + <i class="fas fa-plus fa-fw"></i> + </button> + <button class="btn btn-outline-danger" *ngIf="field.disabled" (click)="deleteCriterion()"> + <i class="fa fa-times fa-fw"></i> + </button> </div> </div> \ No newline at end of file diff --git a/src/app/search/components/criteria/search-type/datalist.component.ts b/src/app/search/components/criteria/search-type/datalist.component.ts index 4868a541b534426fc4b38390160458888727d670..2128ddc3f7e76cbef80320033eb01c6a16d29cd0 100644 --- a/src/app/search/components/criteria/search-type/datalist.component.ts +++ b/src/app/search/components/criteria/search-type/datalist.component.ts @@ -20,6 +20,7 @@ export class DatalistComponent { this.getDefault(criterion); } @Output() add: EventEmitter<FieldCriterion> = new EventEmitter(); + @Output() delete: EventEmitter<number> = new EventEmitter(); field = new FormControl(''); @@ -28,6 +29,10 @@ export class DatalistComponent { this.add.emit(fd); } + deleteCriterion() { + this.delete.emit(this.id); + } + getDefault(criterion: Criterion): void { if (!criterion) { this.field.setValue(''); diff --git a/src/app/search/components/criteria/search-type/date.component.html b/src/app/search/components/criteria/search-type/date.component.html index 36336ae3929e15ecc4edd6490d53d61341c4393d..fd151063560adb65a4b0500f4a0d11a43facba0c 100644 --- a/src/app/search/components/criteria/search-type/date.component.html +++ b/src/app/search/components/criteria/search-type/date.component.html @@ -5,7 +5,11 @@ [bsValue]="field.value" [bsConfig]="{ dateInputFormat: 'YYYY-MM-DD' }" bsDatepicker> </div> <div class="col-2 text-center"> - <button class="btn btn-outline-success" *ngIf="!field.disabled" [hidden]="!field.value" - (click)="addCriterion()"><i class="fas fa-plus-circle"></i></button> + <button class="btn btn-outline-success" *ngIf="!field.disabled" [hidden]="!field.value" (click)="addCriterion()"> + <i class="fas fa-plus fa-fw"></i> + </button> + <button class="btn btn-outline-danger" *ngIf="field.disabled" (click)="deleteCriterion()"> + <i class="fa fa-times fa-fw"></i> + </button> </div> </div> \ No newline at end of file diff --git a/src/app/search/components/criteria/search-type/date.component.ts b/src/app/search/components/criteria/search-type/date.component.ts index c3f343bdde19e7a691ab2ba6bfde318a6904ecd0..62b98e0c4b068fbb13f0a9a4917ccdb9f6f8ad15 100644 --- a/src/app/search/components/criteria/search-type/date.component.ts +++ b/src/app/search/components/criteria/search-type/date.component.ts @@ -18,6 +18,7 @@ export class DateComponent { this.getDefault(criterion); } @Output() add: EventEmitter<FieldCriterion> = new EventEmitter(); + @Output() delete: EventEmitter<number> = new EventEmitter(); field = new FormControl(''); @@ -26,6 +27,10 @@ export class DateComponent { this.add.emit(fd); } + deleteCriterion() { + this.delete.emit(this.id); + } + getDefault(criterion: Criterion): void { if (!criterion) { this.field.setValue(''); diff --git a/src/app/search/components/criteria/search-type/datetime.component.html b/src/app/search/components/criteria/search-type/datetime.component.html index 7ef7bad6e755168d09360527df309b57c541048c..03bfd315d1f754ccbcd3da54da422a1eaf97361d 100644 --- a/src/app/search/components/criteria/search-type/datetime.component.html +++ b/src/app/search/components/criteria/search-type/datetime.component.html @@ -1,9 +1,8 @@ <div class="form-group row"> <label class="col-3 col-form-label">{{ label }}</label> <div class="col"> - <input type="text" placeholder="Pick a date..." class="form-control" [formControl]="date" - [bsValue]="date.value" [bsConfig]="{ dateInputFormat: 'YYYY-MM-DD' }" (change)="change()" - bsDatepicker> + <input type="text" placeholder="Pick a date..." class="form-control" [formControl]="date" [bsValue]="date.value" + [bsConfig]="{ dateInputFormat: 'YYYY-MM-DD' }" (change)="change()" bsDatepicker> </div> <div class="col"> <div class="row"> @@ -21,7 +20,12 @@ </div> </div> <div class="col-2 text-center"> - <button class="btn btn-outline-success" *ngIf="!date.disabled || !hh.disabled || !mm.disabled" [hidden]="!isValidFields" - (click)="addCriterion()"><i class="fas fa-plus-circle"></i></button> + <button class="btn btn-outline-success" *ngIf="!date.disabled || !hh.disabled || !mm.disabled" + [hidden]="!isValidFields" (click)="addCriterion()"> + <i class="fas fa-plus fa-fw"></i> + </button> + <button class="btn btn-outline-danger" *ngIf="date.disabled && hh.disabled && mm.disabled" (click)="deleteCriterion()"> + <i class="fa fa-times fa-fw"></i> + </button> </div> </div> \ No newline at end of file diff --git a/src/app/search/components/criteria/search-type/datetime.component.ts b/src/app/search/components/criteria/search-type/datetime.component.ts index 3d37b18cbfb0a65e00a74ea649ab2d0050aa1ac1..bd5f4c198e7df4de8a4c658cadc1e5daa7a210f3 100644 --- a/src/app/search/components/criteria/search-type/datetime.component.ts +++ b/src/app/search/components/criteria/search-type/datetime.component.ts @@ -1,7 +1,7 @@ import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core'; import { FormControl } from '@angular/forms'; -import { Criterion, DatetimeCriterion } from '../../../store/model'; +import { Criterion, FieldCriterion } from '../../../store/model'; @Component({ selector: 'app-datetime', @@ -11,13 +11,15 @@ import { Criterion, DatetimeCriterion } from '../../../store/model'; }) export class DatetimeComponent { @Input() id: number; + @Input() operator: string; @Input() label: string; @Input() placeholder: string; @Input() set criterion(criterion: Criterion) { this.getDefault(criterion); } - @Output() add: EventEmitter<DatetimeCriterion> = new EventEmitter(); + @Output() add: EventEmitter<FieldCriterion> = new EventEmitter(); + @Output() delete: EventEmitter<number> = new EventEmitter(); hours: string[] = []; minutes: string[] = []; @@ -34,10 +36,18 @@ export class DatetimeComponent { } addCriterion() { - const fd = new DatetimeCriterion(this.id, this.datetime); + const month = ('0' + (this.datetime.getMonth() + 1)).slice(-2); + const day = ('0' + (this.datetime.getDate())).slice(-2); + const date = this.datetime.getFullYear() + '-' + month + '-' + day; + const time = this.hh.value + ':' + this.mm.value; + const fd = new FieldCriterion(this.id, this.operator, date + ' ' + time); this.add.emit(fd); } + deleteCriterion() { + this.delete.emit(this.id); + } + getDefault(criterion: Criterion): void { if (!criterion) { this.date.setValue(''); @@ -48,14 +58,14 @@ export class DatetimeComponent { this.mm.enable(); this.isValidFields = false; } else { - const c = criterion as DatetimeCriterion; - const hour = ('0' + (c.value.getHours())).slice(-2); - const minute = ('0' + (c.value.getMinutes())).slice(-2); - this.date.setValue(c.value); + const c = criterion as FieldCriterion; + const [d, t] = c.value.split(' '); + const [h, m] = t.split(':'); + this.date.setValue(new Date(d)); this.date.disable(); - this.hh.setValue(hour); + this.hh.setValue(h); this.hh.disable(); - this.mm.setValue(minute); + this.mm.setValue(m); this.mm.disable(); this.isValidFields = true; } diff --git a/src/app/search/components/criteria/search-type/field.component.html b/src/app/search/components/criteria/search-type/field.component.html index 951c030c5fce0743299de23d2a09563f2aa1f9c1..e0d9d60ddeac191194605f5ea52eb71d5f2ffc2f 100644 --- a/src/app/search/components/criteria/search-type/field.component.html +++ b/src/app/search/components/criteria/search-type/field.component.html @@ -5,7 +5,11 @@ autocomplete="off"> </div> <div class="col-2 text-center"> - <button class="btn btn-outline-success" *ngIf="!field.disabled" [hidden]="!field.value" - (click)="addCriterion()"><i class="fas fa-plus-circle"></i></button> + <button class="btn btn-outline-success" *ngIf="!field.disabled" [hidden]="!field.value" (click)="addCriterion()"> + <i class="fas fa-plus fa-fw"></i> + </button> + <button class="btn btn-outline-danger" *ngIf="field.disabled" (click)="deleteCriterion()"> + <i class="fa fa-times fa-fw"></i> + </button> </div> </div> \ No newline at end of file diff --git a/src/app/search/components/criteria/search-type/field.component.ts b/src/app/search/components/criteria/search-type/field.component.ts index 6f3b8f9652e7dbe2e89d0808d59ad242988590f3..74bb66cf9309e83bfd7baa198fc7dbe19258810a 100644 --- a/src/app/search/components/criteria/search-type/field.component.ts +++ b/src/app/search/components/criteria/search-type/field.component.ts @@ -19,6 +19,7 @@ export class FieldComponent { this.getDefault(criterion); } @Output() add: EventEmitter<FieldCriterion> = new EventEmitter(); + @Output() delete: EventEmitter<number> = new EventEmitter(); field = new FormControl(''); @@ -27,6 +28,10 @@ export class FieldComponent { this.add.emit(fd); } + deleteCriterion() { + this.delete.emit(this.id); + } + getDefault(criterion: Criterion): void { if (!criterion) { this.field.setValue(''); diff --git a/src/app/search/components/criteria/search-type/json.component.html b/src/app/search/components/criteria/search-type/json.component.html index 3d7eb09fc2d78e1438fa80771086eba3adc2dec8..708c3a2c39ebc085fd798ec633ca135be1bff806 100644 --- a/src/app/search/components/criteria/search-type/json.component.html +++ b/src/app/search/components/criteria/search-type/json.component.html @@ -26,7 +26,10 @@ <button class="btn btn-outline-success" *ngIf="!jsonForm.disabled" [hidden]="!jsonForm.value.path || !jsonForm.value.operator || !jsonForm.value.value" (click)="addCriterion()"> - <i class="fas fa-plus-circle"></i> + <i class="fas fa-plus fa-fw"></i> + </button> + <button class="btn btn-outline-danger" *ngIf="jsonForm.disabled" (click)="deleteCriterion()"> + <i class="fa fa-times fa-fw"></i> </button> </div> </div> \ No newline at end of file diff --git a/src/app/search/components/criteria/search-type/json.component.ts b/src/app/search/components/criteria/search-type/json.component.ts index 46c48030fcac31e020e7a62c6267b22b7381c283..bad7a769213d88097bb3d15d46357dfeb1b5bcc1 100644 --- a/src/app/search/components/criteria/search-type/json.component.ts +++ b/src/app/search/components/criteria/search-type/json.component.ts @@ -16,6 +16,7 @@ export class JsonComponent { this.getDefault(criterion); } @Output() add: EventEmitter<JsonCriterion> = new EventEmitter(); + @Output() delete: EventEmitter<number> = new EventEmitter(); jsonForm = new FormGroup({ path: new FormControl(), @@ -28,6 +29,10 @@ export class JsonComponent { this.add.emit(js); } + deleteCriterion() { + this.delete.emit(this.id); + } + getDefault(criterion: Criterion): void { if (!criterion) { this.jsonForm.reset(); diff --git a/src/app/search/components/criteria/search-type/radio.component.html b/src/app/search/components/criteria/search-type/radio.component.html index ce891487027d2e35846006937ce46c6eda6cac5b..fa47b4c5db1560d9d1461ebd84c0719c75bd1e4f 100644 --- a/src/app/search/components/criteria/search-type/radio.component.html +++ b/src/app/search/components/criteria/search-type/radio.component.html @@ -8,7 +8,11 @@ </div> </div> <div class="col-2 text-center"> - <button class="btn btn-outline-success" *ngIf="!radio.disabled" [hidden]="!radio.value" - (click)="addCriterion()"><i class="fas fa-plus-circle"></i></button> + <button class="btn btn-outline-success" *ngIf="!radio.disabled" [hidden]="!radio.value" (click)="addCriterion()"> + <i class="fas fa-plus fa-fw"></i> + </button> + <button class="btn btn-outline-danger" *ngIf="radio.disabled" (click)="deleteCriterion()"> + <i class="fa fa-times fa-fw"></i> + </button> </div> </div> \ No newline at end of file diff --git a/src/app/search/components/criteria/search-type/radio.component.ts b/src/app/search/components/criteria/search-type/radio.component.ts index 085156e4bb371373283348d06c1999b8e5be2558..0f41461a3489ffddad6b6ea53f2f3e6d2e828fed 100644 --- a/src/app/search/components/criteria/search-type/radio.component.ts +++ b/src/app/search/components/criteria/search-type/radio.component.ts @@ -19,6 +19,7 @@ export class RadioComponent { this.getDefault(criterion); } @Output() add: EventEmitter<FieldCriterion> = new EventEmitter(); + @Output() delete: EventEmitter<number> = new EventEmitter(); radio = new FormControl(''); @@ -28,6 +29,10 @@ export class RadioComponent { this.add.emit(cb); } + deleteCriterion() { + this.delete.emit(this.id); + } + getDefault(criterion: Criterion): void { if (!criterion) { this.radio.setValue(''); diff --git a/src/app/search/components/criteria/search-type/select-multiple.component.html b/src/app/search/components/criteria/search-type/select-multiple.component.html index a8912596ee5336a5902fca7c1217604e5878fbce..628fc486d4cd902bb0ead407d4e19ccc4f8e5ab2 100644 --- a/src/app/search/components/criteria/search-type/select-multiple.component.html +++ b/src/app/search/components/criteria/search-type/select-multiple.component.html @@ -6,7 +6,11 @@ </ng-select> </div> <div class="col-2 text-center"> - <button class="btn btn-outline-success" *ngIf="!ms.disabled" [hidden]="!ms.value" (click)="addCriterion()"><i - class="fas fa-plus-circle"></i></button> + <button class="btn btn-outline-success" *ngIf="!ms.disabled" [hidden]="!ms.value" (click)="addCriterion()"> + <i class="fas fa-plus fa-fw"></i> + </button> + <button class="btn btn-outline-danger" *ngIf="ms.disabled" (click)="deleteCriterion()"> + <i class="fa fa-times fa-fw"></i> + </button> </div> </div> \ No newline at end of file diff --git a/src/app/search/components/criteria/search-type/select-multiple.component.ts b/src/app/search/components/criteria/search-type/select-multiple.component.ts index be9f8861825d7c9f2c40b641752bc500deb4c73d..2fbc10c86ed2d3830c268902d98c1ef2782fef3d 100644 --- a/src/app/search/components/criteria/search-type/select-multiple.component.ts +++ b/src/app/search/components/criteria/search-type/select-multiple.component.ts @@ -19,6 +19,7 @@ export class SelectMultipleComponent { this.getDefault(criterion); } @Output() add: EventEmitter<SelectMultipleCriterion> = new EventEmitter(); + @Output() delete: EventEmitter<number> = new EventEmitter(); ms = new FormControl(); @@ -28,6 +29,10 @@ export class SelectMultipleComponent { this.add.emit(ms); } + deleteCriterion() { + this.delete.emit(this.id); + } + getDefault(criterion: Criterion): void { if (!criterion) { this.ms.reset(); diff --git a/src/app/search/components/criteria/search-type/select.component.html b/src/app/search/components/criteria/search-type/select.component.html index 20f4f2c712355681e5201e8e4303b16e06090926..92a18580cb398a22cc7c04cefc92623475f0eabb 100644 --- a/src/app/search/components/criteria/search-type/select.component.html +++ b/src/app/search/components/criteria/search-type/select.component.html @@ -6,7 +6,11 @@ </ng-select> </div> <div class="col-2 text-center"> - <button class="btn btn-outline-success" *ngIf="!se.disabled" [hidden]="!se.value" (click)="addCriterion()"><i - class="fas fa-plus-circle"></i></button> + <button class="btn btn-outline-success" *ngIf="!se.disabled" [hidden]="!se.value" (click)="addCriterion()"> + <i class="fas fa-plus fa-fw"></i> + </button> + <button class="btn btn-outline-danger" *ngIf="se.disabled" (click)="deleteCriterion()"> + <i class="fa fa-times fa-fw"></i> + </button> </div> </div> \ No newline at end of file diff --git a/src/app/search/components/criteria/search-type/select.component.ts b/src/app/search/components/criteria/search-type/select.component.ts index 3a9a8b303a78e63bd6f0256054bb3dc628e8ee94..d4ed6f90d78a9c47347da4613e607abfad5d756e 100644 --- a/src/app/search/components/criteria/search-type/select.component.ts +++ b/src/app/search/components/criteria/search-type/select.component.ts @@ -19,6 +19,7 @@ export class SelectComponent { this.getDefault(criterion); } @Output() add: EventEmitter<FieldCriterion> = new EventEmitter(); + @Output() delete: EventEmitter<number> = new EventEmitter(); se = new FormControl(); @@ -28,6 +29,10 @@ export class SelectComponent { this.add.emit(se); } + deleteCriterion() { + this.delete.emit(this.id); + } + getDefault(criterion: Criterion): void { if (!criterion) { this.se.reset(); diff --git a/src/app/search/components/criteria/search-type/time.component.html b/src/app/search/components/criteria/search-type/time.component.html index defd946d229bb2c5a43445238b2c437c6c728233..1680a89f4dd826eeb9393a8fbbd5b1872c3a866c 100644 --- a/src/app/search/components/criteria/search-type/time.component.html +++ b/src/app/search/components/criteria/search-type/time.component.html @@ -18,7 +18,10 @@ <div class="col-2 text-center"> <button class="btn btn-outline-success" *ngIf="!hh.disabled || !mm.disabled" [hidden]="!hh.value || !mm.value" (click)="addCriterion()"> - <i class="fas fa-plus-circle"></i> + <i class="fas fa-plus fa-fw"></i> + </button> + <button class="btn btn-outline-danger" *ngIf="hh.disabled && mm.disabled" (click)="deleteCriterion()"> + <i class="fa fa-times fa-fw"></i> </button> </div> </div> \ No newline at end of file diff --git a/src/app/search/components/criteria/search-type/time.component.ts b/src/app/search/components/criteria/search-type/time.component.ts index 20b2309ea502be45f134074b68a5aef7d02e19f8..2852b909f9d96eab84eb43dcafece80e27876855 100644 --- a/src/app/search/components/criteria/search-type/time.component.ts +++ b/src/app/search/components/criteria/search-type/time.component.ts @@ -18,6 +18,7 @@ export class TimeComponent { this.getDefault(criterion); } @Output() add: EventEmitter<FieldCriterion> = new EventEmitter(); + @Output() delete: EventEmitter<number> = new EventEmitter(); public hours: string[] = []; public minutes: string[] = []; @@ -35,6 +36,10 @@ export class TimeComponent { this.add.emit(time); } + deleteCriterion() { + this.delete.emit(this.id); + } + getDefault(criterion: Criterion): void { if (!criterion) { this.hh.reset(); diff --git a/src/app/search/components/result/datatable.component.html b/src/app/search/components/result/datatable.component.html index f5e70ca652969991fbaee89c8a0ced8474d0c528..defee3d60bc0e9d77628c915ff9331d8affb1b38 100644 --- a/src/app/search/components/result/datatable.component.html +++ b/src/app/search/components/result/datatable.component.html @@ -35,32 +35,26 @@ class="img-fluid"> </button> </div> - <div *ngSwitchCase="'ext-link'"> + <div *ngSwitchCase="'link'"> <a [href]="getAttributeUriAction(attribute.name, datum[attribute.label])" target="_blank"> {{ datum[attribute.name] }}</a> </div> - <div *ngSwitchCase="'int-link'"> - <a routerLink="/detail/{{ datasetName }}/{{ datum[attribute.label] }}"> - {{ datum[attribute.label] }} - </a> - </div> - <div *ngSwitchCase="'ext-btn'"> + <div *ngSwitchCase="'btn'"> <a [href]="getAttributeUriAction(attribute.name, datum[attribute.label])" target="_blank" class="btn btn-outline-primary btn-sm"> {{ datum[attribute.label] }}</a> </div> - <div *ngSwitchCase="'int-btn'"> - <a routerLink="/detail/{{ datasetName }}/{{ datum[attribute.label] }}" - class="btn btn-outline-primary btn-sm"> + <div *ngSwitchCase="'detail-link'"> + <a routerLink="/detail/{{ datasetName }}/{{ datum[attribute.label] }}"> {{ datum[attribute.label] }} </a> </div> - <div *ngSwitchCase="'fancybox'"> - <button class="btn btn-outline-primary btn-sm" - (click)="openModal('fancybox', attribute.name, datum[attribute.label])"> + <div *ngSwitchCase="'detail-btn'"> + <a routerLink="/detail/{{ datasetName }}/{{ datum[attribute.label] }}" + class="btn btn-outline-primary btn-sm"> {{ datum[attribute.label] }} - </button> + </a> </div> <div *ngSwitchCase="'download'"> <a [href]="getAttributeUriAction(attribute.name, datum[attribute.label])" diff --git a/src/app/search/components/result/modal.component.html b/src/app/search/components/result/modal.component.html index d0961b9c7e4ac46a4b2efab24889e94ad10f594a..38ff061ce861b7122f60a587ea64e201837a877d 100644 --- a/src/app/search/components/result/modal.component.html +++ b/src/app/search/components/result/modal.component.html @@ -14,16 +14,6 @@ <img [src]="data.srcImage" class="img-fluid"> </div> </div> - <div *ngSwitchCase="'fancybox'"> - <div class="modal-body"> - <!-- <app-detail - [datasetName]="data.datasetName" - [objectSelected]="data.objectSelected" - [searchMeta]="data.searchMeta" - [searchData]="data.searchData"> - </app-detail> --> - </div> - </div> <div *ngSwitchCase="'json'"> <div class="modal-body"> <ngx-json-viewer [json]="data.json"></ngx-json-viewer> diff --git a/src/app/search/components/result/url-display.component.html b/src/app/search/components/result/url-display.component.html index 3452a11b05ab7d49d6ae180b493628ed138a1638..138297bb16695cace967f7189109474cb6f2456f 100644 --- a/src/app/search/components/result/url-display.component.html +++ b/src/app/search/components/result/url-display.component.html @@ -15,7 +15,7 @@ </div> <div class="col-2 align-self-center text-center"> <button class="btn btn-sm btn-outline-primary" (click)="copyToClipboard()" title="Copy url to clipboard"> - <i class="far fa-copy"></i> + COPY </button> </div> </div> diff --git a/src/app/search/components/summary.component.html b/src/app/search/components/summary.component.html index d2f8d6931e208645c639bb43f83d23f9b1b19560..947a97b8973e597760dd1c71bbe8b0c0027b3f4f 100644 --- a/src/app/search/components/summary.component.html +++ b/src/app/search/components/summary.component.html @@ -13,8 +13,6 @@ </p> <ul *ngIf="criteriaList.length > 0" class="pl-5 list-unstyled"> <li *ngFor="let criterion of criteriaList"> - <span *ngIf="currentStep === 'criteria'" (click)="delCriterion(criterion.id)" class="pr-2 text-danger"><i - class="fas fa-times"></i></span> {{getAttribute(criterion.id).form_label}} {{criterion.printCriterion()}} </li> </ul> diff --git a/src/app/search/components/summary.component.ts b/src/app/search/components/summary.component.ts index a035bcde6c77df5eb41a1eaadff33dd10da75e08..a599b85761c12f836efc5af64951534eb3bf8b7d 100644 --- a/src/app/search/components/summary.component.ts +++ b/src/app/search/components/summary.component.ts @@ -17,7 +17,6 @@ export class SummaryComponent { @Input() datasetAttributeList: Attribute[]; @Input() outputList: number[]; @Input() queryParams: any; - @Output() deleteCriterion: EventEmitter<number> = new EventEmitter(); getDataset(): Dataset { return this.datasetList.find(dataset => dataset.name === this.datasetName); @@ -26,8 +25,4 @@ export class SummaryComponent { getAttribute(id: number): Attribute { return this.datasetAttributeList.find(attribute => attribute.id === id); } - - delCriterion(id: number): void { - this.deleteCriterion.emit(id); - } } diff --git a/src/app/search/containers/criteria.component.html b/src/app/search/containers/criteria.component.html index 3baf7c2def913e28c6df834e4ae436a6b3440826..a19f6fd386d99bb2c12fa8c4e64a07131da1a8e7 100644 --- a/src/app/search/containers/criteria.component.html +++ b/src/app/search/containers/criteria.component.html @@ -10,7 +10,8 @@ [criteriaFamilyList]="criteriaFamilyList | async" [datasetAttributeList]="datasetAttributeList | async" [criteriaList]="criteriaList | async" - (addCriterion)="addCriterion($event)"> + (addCriterion)="addCriterion($event)" + (deleteCriterion)="deleteCriterion($event)"> </app-criteria-tabs> </div> <div class="col-12 col-md-4 pt-2"> @@ -21,8 +22,7 @@ [criteriaList]="criteriaList | async" [datasetAttributeList]="datasetAttributeList | async" [outputList]="outputList | async" - [queryParams]="queryParams | async" - (deleteCriterion)="deleteCriterion($event)"> + [queryParams]="queryParams | async"> </app-summary> </div> </div> diff --git a/src/app/search/containers/dataset.component.html b/src/app/search/containers/dataset.component.html index a4cf31c0f58ecde954e39f8040e8f5c024c26124..2d3161c1bf1acb3105b9210d70bdb4fbdd047c73 100644 --- a/src/app/search/containers/dataset.component.html +++ b/src/app/search/containers/dataset.component.html @@ -13,7 +13,11 @@ </app-dataset-tabs> </div> <div class="col-12 col-md-4 pt-2"> - <app-summary *ngIf="(datasetName | async) as dname" + <div *ngIf="attributeSearchMetaIsLoading | async" class="row justify-content-center mt-5"> + <i class="fas fa-circle-notch fa-spin fa-3x"></i> + <span class="sr-only">Loading...</span> + </div> + <app-summary *ngIf="attributeSearchMetaIsLoaded | async" [datasetName]="datasetName | async" [currentStep]="currentStep | async" [datasetList]="datasetList | async" diff --git a/src/app/search/containers/dataset.component.ts b/src/app/search/containers/dataset.component.ts index 55a2dfdb5fedbe4a3946bd73d8ccd89b45f46c39..85e448d03f94f970b2c2705646b7fff8d2685891 100644 --- a/src/app/search/containers/dataset.component.ts +++ b/src/app/search/containers/dataset.component.ts @@ -25,6 +25,8 @@ interface StoreState { export class DatasetComponent implements OnInit { public datasetSearchMetaIsLoading: Observable<boolean>; public datasetSearchMetaIsLoaded: Observable<boolean>; + public attributeSearchMetaIsLoading: Observable<boolean>; + public attributeSearchMetaIsLoaded: Observable<boolean>; public projectList: Observable<Project[]>; public datasetList: Observable<Dataset[]>; public datasetFamilyList: Observable<Family[]>; @@ -38,6 +40,8 @@ export class DatasetComponent implements OnInit { constructor(private store: Store<StoreState>) { this.datasetSearchMetaIsLoading = store.select(metamodelSelector.getDatasetSearchMetaIsLoading); this.datasetSearchMetaIsLoaded = store.select(metamodelSelector.getDatasetSearchMetaIsLoaded); + this.attributeSearchMetaIsLoading = store.select(metamodelSelector.getAttributeSearchMetaIsLoading); + this.attributeSearchMetaIsLoaded = store.select(metamodelSelector.getAttributeSearchMetaIsLoaded); this.projectList = store.select(metamodelSelector.getProjectList); this.datasetList = store.select(metamodelSelector.getDatasetList); this.datasetFamilyList = store.select(metamodelSelector.getDatasetFamilyList); diff --git a/src/app/search/containers/result.component.ts b/src/app/search/containers/result.component.ts index 3b8acc7a01785ad8f0ef8cf3609291d4972d6f4f..9c17d53b1f8cce696fa32fb3963ed3bf508d3038 100644 --- a/src/app/search/containers/result.component.ts +++ b/src/app/search/containers/result.component.ts @@ -65,7 +65,7 @@ export class ResultComponent implements OnInit { } getSearchMeta(): void { - // this.store.dispatch(new searchActions.RetrieveMetaAction()); + this.store.dispatch(new searchActions.RetrieveMetaAction()); } getSearchData(page: number): void { diff --git a/src/app/search/store/model/between-date-criterion.model.ts b/src/app/search/store/model/between-date-criterion.model.ts deleted file mode 100644 index 6f6fc925a382838ba58241e03e4d1f4963a32afa..0000000000000000000000000000000000000000 --- a/src/app/search/store/model/between-date-criterion.model.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { Criterion } from './criterion.model'; - -export class BetweenDateCriterion extends Criterion { - min: string; - max: string; - - constructor(id: number, min: string, max: string) { - super(id); - this.min = min; - this.max = max; - } - - printCriterion(): string { - return '∈ [' + this.min + ';' + this.max + ']'; - } - - getCriterionStr() { - return this.id + '::bd::' + this.min + '|' + this.max; - } -} diff --git a/src/app/search/store/model/checkbox-criterion.model.ts b/src/app/search/store/model/checkbox-criterion.model.ts deleted file mode 100644 index e5098f9340f726b047bf5b066f8f5a57d31ebc94..0000000000000000000000000000000000000000 --- a/src/app/search/store/model/checkbox-criterion.model.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { Criterion } from './criterion.model'; -import { Option } from '../../../metamodel/model/option.model'; - -export class CheckboxCriterion extends Criterion { - values: Option[]; - operator: string; - - constructor(id: number, operator: string, values: Option[]) { - super(id); - this.operator = operator; - this.values = values; - } - - printCriterion(): string { - return '[' + this.values.map(option => option.label).join(',') + ']'; - } - - getCriterionStr(): string { - if (this.operator === 'eq') { - return this.id + '::in::' + this.values.map(option => option.value).join('|'); - } else { - return this.values.map(option => this.id + '::' + this.operator + '::' + option.value).join(';'); - } - } -} diff --git a/src/app/search/store/model/datetime-criterion.model.ts b/src/app/search/store/model/datetime-criterion.model.ts deleted file mode 100644 index 3f38736527dce10d01355ceaf5de401c99e1fed5..0000000000000000000000000000000000000000 --- a/src/app/search/store/model/datetime-criterion.model.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Criterion } from './criterion.model'; - -export class DatetimeCriterion extends Criterion { - value: Date; - - constructor(id: number, value: Date) { - super(id); - this.value = value; - } - - printCriterion(): string { - const month = ('0' + (this.value.getMonth() + 1)).slice(-2); - const day = ('0' + (this.value.getDate())).slice(-2); - const hour = ('0' + (this.value.getHours())).slice(-2); - const minute = ('0' + (this.value.getMinutes())).slice(-2); - const date = this.value.getFullYear() + '-' + month + '-' + day; - const time = hour + ':' + minute; - return date + ' ' + time; - } - - getCriterionStr(): string { - const month = ('0' + (this.value.getMonth() + 1)).slice(-2); - const day = ('0' + (this.value.getDate())).slice(-2); - const hour = ('0' + (this.value.getHours())).slice(-2); - const minute = ('0' + (this.value.getMinutes())).slice(-2); - const date = this.value.getFullYear() + '-' + month + '-' + day; - const time = hour + ':' + minute; - return this.id + '::eq::' + date + '.' + time; - } -} diff --git a/src/app/search/store/model/index.ts b/src/app/search/store/model/index.ts index 3bbc1ece3f61237ae89bbf53b058ea0c25fdc7d3..4141ea63d351d69b952546500af56a04175ed937 100644 --- a/src/app/search/store/model/index.ts +++ b/src/app/search/store/model/index.ts @@ -1,10 +1,7 @@ export * from './criterion.model'; export * from './between-criterion.model'; -export * from './between-date-criterion.model'; export * from './field-criterion.model'; -export * from './checkbox-criterion.model'; export * from './select-multiple-criterion.model'; export * from './search-meta.model'; -export * from './datetime-criterion.model'; export * from './search-query-params.model'; export * from './json-criterion.model'; diff --git a/src/app/search/store/model/select-multiple-criterion.model.ts b/src/app/search/store/model/select-multiple-criterion.model.ts index 1d4389519d44f2213d5d091d071839ee8c5b738e..4075f7faf22b5a4a9091c2e64b5ed7c1ed295f3f 100644 --- a/src/app/search/store/model/select-multiple-criterion.model.ts +++ b/src/app/search/store/model/select-multiple-criterion.model.ts @@ -16,10 +16,6 @@ export class SelectMultipleCriterion extends Criterion { } getCriterionStr(): string { - if (this.operator === 'eq') { - return this.id + '::in::' + this.options.map(option => option.value).join('|'); - } else { - return this.options.map(option => this.id + '::' + this.operator + '::' + option.value).join(';'); - } + return this.id + '::in::' + this.options.map(option => option.value).join('|'); } } diff --git a/src/app/search/store/search.effects.ts b/src/app/search/store/search.effects.ts index c7db3cd574b824367a5c488f6a556ba392be47f5..dec6b203c60bc5f100d6aecc590515a9da683d52 100644 --- a/src/app/search/store/search.effects.ts +++ b/src/app/search/store/search.effects.ts @@ -12,7 +12,7 @@ import * as fromRouter from '@ngrx/router-store'; import * as fromSearch from './search.reducer'; import * as utils from '../../shared/utils'; import { SearchService } from './search.service'; -import { BetweenCriterion, BetweenDateCriterion, SearchMeta, FieldCriterion, SelectMultipleCriterion, JsonCriterion } from './model'; +import { BetweenCriterion, SearchMeta, FieldCriterion, SelectMultipleCriterion, JsonCriterion } from './model'; @Injectable() export class SearchEffects { @@ -84,24 +84,24 @@ export class SearchEffects { const params = c.split('::'); const attribute = loadAttributeSearchMetaSuccessAction.payload.find(a => a.id === parseInt(params[0], 10)); switch (attribute.search_type) { - case 'fd': - case 'se': - case 'dl': - case 'rd': - case 'dt': + case 'field': + case 'select': + case 'datalist': + case 'radio': + case 'date': + case 'date-time': + case 'time': return new FieldCriterion(parseInt(params[0], 10), params[1], params[2]); - case 'bw': + case 'between': + case 'between-date': const bwValues = params[2].split('|'); return new BetweenCriterion(parseInt(params[0], 10), bwValues[0], bwValues[1]); - case 'bd': - const bwdValues = params[2].split('|'); - return new BetweenDateCriterion(parseInt(params[0], 10), bwdValues[0], bwdValues[1]); - case 'ms': - case 'cb': + case 'select-multiple': + case 'checkbox': const msValues = params[2].split('|'); const options = attribute.options.filter(option => msValues.includes(option.value)); return new SelectMultipleCriterion(parseInt(params[0], 10), params[1], options); - case 'js': + case 'json': const [path, operator, value] = params[2].split('|'); return new JsonCriterion(parseInt(params[0], 10), path, operator, value); @@ -113,8 +113,7 @@ export class SearchEffects { return [ new searchActions.UpdateOutputListAction(defaultOutputList), - new searchActions.UpdateCriteriaListAction(defaultCriteriaList), - new searchActions.RetrieveMetaAction() + new searchActions.UpdateCriteriaListAction(defaultCriteriaList) ]; }) );