added null filter

This commit is contained in:
VLE2FE
2020-08-17 14:51:02 +02:00
parent 9197e8a187
commit 27bd952cba
22 changed files with 641 additions and 555 deletions

View File

@ -66,6 +66,7 @@
<option value="stringin" title="field contains value">&supe;</option>
<option value="in" title="field is one of the values">&isin;</option>
<option value="nin" title="field is not one of the values">&notin;</option>
<option value="null" title="field is null">&empty;</option>
</rb-form-select>
<div class="filter-inputs">
<rb-array-input [(ngModel)]="filter.values" [name]="'filter-' + filter.field"
@ -76,15 +77,18 @@
(filter.field == 'added' ? 'date' : (filter.field == 'type' ? 'type' : ''))">
<rb-form-date-input *ngSwitchCase="'date'" [rbArrayInputListener]="'filter-' + filter.field"
[name]="'filter-' + filter.field + item.i" [index]="item.i"
[label]="filter.label" [(ngModel)]="item.value"></rb-form-date-input>
[label]="filter.label" [(ngModel)]="item.value"
[disabled]="filter.mode === 'null'"></rb-form-date-input>
<rb-form-input *ngSwitchCase="''" [rbArrayInputListener]="'filter-' + filter.field"
[name]="'filter-' + filter.field + item.i" [index]="item.i"
[label]="filter.label" [(ngModel)]="item.value"></rb-form-input>
[label]="filter.label" [(ngModel)]="item.value" [disabled]="filter.mode === 'null'">
</rb-form-input>
<rb-form-input *ngSwitchCase="'autocomplete'" [rbArrayInputListener]="'filter-' + filter.field"
[name]="'filter-' + filter.field + item.i" [index]="item.i"
[label]="filter.label" [(ngModel)]="item.value"
[rbDebounceTime]="0" (keydown)="preventDefault($event, 'Enter')"
[rbFormInputAutocomplete]="autocomplete.bind(this, filter.autocomplete)"
[disabled]="filter.mode === 'null'"
ngModel></rb-form-input>
<rb-form-select *ngSwitchCase="'type'" [rbArrayInputListener]="'filter-' + filter.field"
[name]="'filter-' + filter.field + item.i" [index]="item.i"

View File

@ -178,7 +178,7 @@ rb-table {
}
.filtermode {
max-width: 80px;
max-width: 82px;
}
textarea.linkmodal {

View File

@ -1,72 +1,77 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { SamplesComponent } from './samples.component';
import {ApiService} from '../services/api.service';
import {AutocompleteService} from '../services/autocomplete.service';
import {DataService} from '../services/data.service';
import {LoginService} from '../services/login.service';
import {LocalStorageService} from 'angular-2-local-storage';
import {ModalService} from '@inst-iot/bosch-angular-ui-components';
import {ValidationService} from '../services/validation.service';
// TODO
let apiServiceSpy: jasmine.SpyObj<ApiService>;
let autocompleteServiceSpy: jasmine.SpyObj<AutocompleteService>;
let modalServiceSpy: jasmine.SpyObj<ModalService>;
let dataServiceSpy: jasmine.SpyObj<DataService>;
let loginServiceSpy: jasmine.SpyObj<LoginService>;
let localStorageServiceSpy: jasmine.SpyObj<LocalStorageService>;
let windowServiceSpy: jasmine.SpyObj<Window>;
describe('SamplesComponent', () => {
let component: SamplesComponent;
let fixture: ComponentFixture<SamplesComponent>;
beforeEach(async(() => {
const apiSpy = jasmine.createSpyObj('ApiService', ['post', 'put']);
const autocompleteSpy = jasmine.createSpyObj('AutocompleteService', []);
const loginSpy = jasmine.createSpyObj('LoginService', ['login', 'canActivate']);
const modalSpy = jasmine.createSpyObj('ModalService', ['open']);
const dataSpy = jasmine.createSpyObj('DataService', ['load', 'idReload']);
const localStorageSpy = jasmine.createSpyObj('LocalStorageService', ['set', 'remove']);
const windowSpy = jasmine.createSpyObj('Window', []);
TestBed.configureTestingModule({
declarations: [ SamplesComponent ],
imports: [
],
providers: [
{provide: ApiService, useValue: apiSpy},
{provide: AutocompleteService, useValue: autocompleteSpy},
{provide: ModalService, useValue: modalSpy},
{provide: DataService, useValue: dataSpy},
{provide: LoginService, useValue: loginSpy},
{provide: LocalStorageService, useValue: localStorageSpy},
{provide: Window, useValue: windowSpy}
]
})
.compileComponents();
apiServiceSpy = TestBed.inject(ApiService) as jasmine.SpyObj<ApiService>;
autocompleteServiceSpy = TestBed.inject(AutocompleteService) as jasmine.SpyObj<AutocompleteService>;
modalServiceSpy = TestBed.inject(ModalService) as jasmine.SpyObj<ModalService>;
dataServiceSpy = TestBed.inject(DataService) as jasmine.SpyObj<DataService>;
loginServiceSpy = TestBed.inject(LoginService) as jasmine.SpyObj<LoginService>;
localStorageServiceSpy = TestBed.inject(LocalStorageService) as jasmine.SpyObj<LocalStorageService>;
windowServiceSpy = TestBed.inject(Window) as jasmine.SpyObj<Window>;
}));
beforeEach(() => {
fixture = TestBed.createComponent(SamplesComponent);
component = fixture.componentInstance;
component.ngOnInit();
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
// import { async, ComponentFixture, TestBed } from '@angular/core/testing';
//
// import { SamplesComponent } from './samples.component';
// import {ApiService} from '../services/api.service';
// import {AutocompleteService} from '../services/autocomplete.service';
// import {DataService} from '../services/data.service';
// import {LoginService} from '../services/login.service';
// import {LocalStorageService} from 'angular-2-local-storage';
// import {ModalService, RbUiComponentsModule} from '@inst-iot/bosch-angular-ui-components';
// import {ValidationService} from '../services/validation.service';
// import {RbCustomInputsModule} from '../rb-custom-inputs/rb-custom-inputs.module';
// import {FormsModule} from '@angular/forms';
//
// // TODO
//
// let apiServiceSpy: jasmine.SpyObj<ApiService>;
// let autocompleteServiceSpy: jasmine.SpyObj<AutocompleteService>;
// let modalServiceSpy: jasmine.SpyObj<ModalService>;
// let dataServiceSpy: jasmine.SpyObj<DataService>;
// let loginServiceSpy: jasmine.SpyObj<LoginService>;
// let localStorageServiceSpy: jasmine.SpyObj<LocalStorageService>;
// let windowServiceSpy: jasmine.SpyObj<Window>;
//
//
//
// describe('SamplesComponent', () => {
// let component: SamplesComponent;
// let fixture: ComponentFixture<SamplesComponent>;
//
// beforeEach(async(() => {
// const apiSpy = jasmine.createSpyObj('ApiService', ['post', 'put']);
// const autocompleteSpy = jasmine.createSpyObj('AutocompleteService', ['bind']);
// const loginSpy = jasmine.createSpyObj('LoginService', ['login', 'isLevel']);
// const modalSpy = jasmine.createSpyObj('ModalService', ['open']);
// const dataSpy = jasmine.createSpyObj('DataService', ['load', 'idReload']);
// const localStorageSpy = jasmine.createSpyObj('LocalStorageService', ['set', 'remove']);
// const windowSpy = jasmine.createSpyObj('Window', ['location']);
//
// TestBed.configureTestingModule({
// declarations: [ SamplesComponent ],
// imports: [
// RbUiComponentsModule,
// RbCustomInputsModule,
// FormsModule
// ],
// providers: [
// {provide: ApiService, useValue: apiSpy},
// {provide: AutocompleteService, useValue: autocompleteSpy},
// {provide: ModalService, useValue: modalSpy},
// {provide: DataService, useValue: dataSpy},
// {provide: LoginService, useValue: loginSpy},
// {provide: LocalStorageService, useValue: localStorageSpy},
// {provide: Window, useValue: windowSpy}
// ]
// })
// .compileComponents();
//
// apiServiceSpy = TestBed.inject(ApiService) as jasmine.SpyObj<ApiService>;
// autocompleteServiceSpy = TestBed.inject(AutocompleteService) as jasmine.SpyObj<AutocompleteService>;
// modalServiceSpy = TestBed.inject(ModalService) as jasmine.SpyObj<ModalService>;
// dataServiceSpy = TestBed.inject(DataService) as jasmine.SpyObj<DataService>;
// loginServiceSpy = TestBed.inject(LoginService) as jasmine.SpyObj<LoginService>;
// localStorageServiceSpy = TestBed.inject(LocalStorageService) as jasmine.SpyObj<LocalStorageService>;
// windowServiceSpy = TestBed.inject(Window) as jasmine.SpyObj<Window>;
// }));
//
// beforeEach(() => {
// fixture = TestBed.createComponent(SamplesComponent);
// component = fixture.componentInstance;
// component.ngOnInit();
// fixture.detectChanges();
// });
//
// it('should create', () => {
// expect(component).toBeTruthy();
// });
// });

View File

@ -158,7 +158,6 @@ export class SamplesComponent implements OnInit {
}
loadSamples(options: LoadSamplesOptions = {}, event = null) { // set toPage to null to reload first page, queues calls
console.log(this.isActiveKey);
if (event) { // adjust active keys
this.keys.forEach(key => {
if (event.hasOwnProperty(key.id)) {
@ -239,6 +238,10 @@ export class SamplesComponent implements OnInit {
if (e.field === 'added') { // correct timezone
e.values = e.values.map(el => new Date(new Date(el).getTime() - new Date(el).getTimezoneOffset() * 60000).toISOString());
}
if (e.mode === 'null') {
e.mode = 'eq';
e.values[0] = null;
}
return e;
})
.filter(e => e.active && e.values.length > 0)
@ -271,7 +274,6 @@ export class SamplesComponent implements OnInit {
}
loadPage(delta) {
console.log(delta);
if (!/[0-9]+/.test(delta) || (this.page <= 1 && delta < 0)) { // invalid delta
return;
}