added cute features to select.
This commit is contained in:
parent
af5cdbb4bd
commit
3d02e19bd1
@ -1,6 +1,6 @@
|
|||||||
import { Component, OnInit, ContentChild, ViewChild, Input, Output, EventEmitter, ChangeDetectorRef, forwardRef, OnDestroy } from '@angular/core';
|
import { Component, OnInit, ContentChild, ViewChild, Input, Output, EventEmitter, ChangeDetectorRef, forwardRef, OnDestroy } from '@angular/core';
|
||||||
import { SelectLabelTemplateDirective } from '../directives/select-label-template.directive';
|
import { SelectLabelTemplateDirective } from '../directives/select-label-template.directive';
|
||||||
import { IDataSource, ISimpleFilter } from '@poweredsoft/data';
|
import { IDataSource, ISimpleFilter, ISort } from '@poweredsoft/data';
|
||||||
import { Observable, Subject, Subscription } from 'rxjs';
|
import { Observable, Subject, Subscription } from 'rxjs';
|
||||||
import { map, distinctUntilChanged, debounceTime } from 'rxjs/operators';
|
import { map, distinctUntilChanged, debounceTime } from 'rxjs/operators';
|
||||||
import { NgSelectComponent as SelectComponent } from '@ng-select/ng-select';
|
import { NgSelectComponent as SelectComponent } from '@ng-select/ng-select';
|
||||||
@ -27,9 +27,9 @@ export class MultiSelectComponent implements OnInit,OnDestroy {
|
|||||||
|
|
||||||
@ViewChild(SelectComponent, { static: true }) selectComponent: SelectComponent;
|
@ViewChild(SelectComponent, { static: true }) selectComponent: SelectComponent;
|
||||||
@Input() dataSource: IDataSource<any>;
|
@Input() dataSource: IDataSource<any>;
|
||||||
@Input() searchPath: string;
|
@Input() searchPath: string | string[];
|
||||||
@Input() searchType: string;
|
@Input() searchType: string;
|
||||||
@Input() sortingPath: string;
|
@Input() sortingPath: string | string[];
|
||||||
@Input() serverFiltering:boolean;
|
@Input() serverFiltering:boolean;
|
||||||
@Input() bindLabel:string;
|
@Input() bindLabel:string;
|
||||||
@Input() bindValue: string;
|
@Input() bindValue: string;
|
||||||
@ -116,21 +116,52 @@ export class MultiSelectComponent implements OnInit,OnDestroy {
|
|||||||
|
|
||||||
refreshDataSource(searchTerm:any = null, page:number = null, pageSize:number = null){
|
refreshDataSource(searchTerm:any = null, page:number = null, pageSize:number = null){
|
||||||
let searchfilters:ISimpleFilter[] = null;
|
let searchfilters:ISimpleFilter[] = null;
|
||||||
if(searchTerm){
|
if(searchTerm)
|
||||||
|
{
|
||||||
|
if (this.searchPath) {
|
||||||
|
if (Array.isArray(this.searchPath)) {
|
||||||
|
searchfilters = this.searchPath.map(path => {
|
||||||
|
return <ISimpleFilter>{
|
||||||
|
path: path,
|
||||||
|
type: 'Contains',
|
||||||
|
value: searchTerm,
|
||||||
|
and: false
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
searchfilters = [<ISimpleFilter>{
|
searchfilters = [<ISimpleFilter>{
|
||||||
path: this.searchPath || this.bindLabel,
|
path: this.searchPath,
|
||||||
type: this.searchType || 'Contains', // Default: Contains
|
type: 'Contains', // Default: Contains
|
||||||
value: searchTerm
|
value: searchTerm
|
||||||
}]
|
}]
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
searchfilters = [<ISimpleFilter>{
|
||||||
|
path: this.bindLabel,
|
||||||
|
type: 'Contains', // Default: Contains
|
||||||
|
value: searchTerm
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
let sorts: ISort[];
|
||||||
|
if (this.sortingPath && Array.isArray(this.sortingPath)) {
|
||||||
|
sorts = this.sortingPath.map(sortPath => (<ISort>{
|
||||||
|
path: sortPath,
|
||||||
|
ascending: true
|
||||||
|
}));
|
||||||
|
} else {
|
||||||
|
sorts = [<ISort>{path: this.sortingPath || this.bindLabel, ascending: true}];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
this.dataSource.query({
|
this.dataSource.query({
|
||||||
page: page,
|
page: page,
|
||||||
pageSize: pageSize,
|
pageSize: pageSize,
|
||||||
filters:searchfilters,
|
filters:searchfilters,
|
||||||
sorts:[
|
sorts:sorts
|
||||||
{path: this.sortingPath || this.bindLabel, ascending: true}
|
});
|
||||||
]
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
get hasOptionTemplate() {
|
get hasOptionTemplate() {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { Component, OnInit, ContentChild, ViewChild, Input, Output, EventEmitter, ChangeDetectorRef, forwardRef, OnDestroy } from '@angular/core';
|
import { Component, OnInit, ContentChild, ViewChild, Input, Output, EventEmitter, ChangeDetectorRef, forwardRef, OnDestroy } from '@angular/core';
|
||||||
import { SelectLabelTemplateDirective } from '../directives/select-label-template.directive';
|
import { SelectLabelTemplateDirective } from '../directives/select-label-template.directive';
|
||||||
import { IDataSource, ISimpleFilter } from '@poweredsoft/data';
|
import { IDataSource, ISimpleFilter, ISort } from '@poweredsoft/data';
|
||||||
import { Observable, Subject, Subscription } from 'rxjs';
|
import { Observable, Subject, Subscription } from 'rxjs';
|
||||||
import { map, distinctUntilChanged, debounceTime } from 'rxjs/operators';
|
import { map, distinctUntilChanged, debounceTime } from 'rxjs/operators';
|
||||||
import { NgSelectComponent as SelectComponent } from '@ng-select/ng-select';
|
import { NgSelectComponent as SelectComponent } from '@ng-select/ng-select';
|
||||||
@ -32,9 +32,9 @@ export class NgSelectComponent implements OnInit,OnDestroy {
|
|||||||
|
|
||||||
@ViewChild(SelectComponent, { static: true }) selectComponent: SelectComponent;
|
@ViewChild(SelectComponent, { static: true }) selectComponent: SelectComponent;
|
||||||
@Input() dataSource: IDataSource<any>;
|
@Input() dataSource: IDataSource<any>;
|
||||||
@Input() searchPath: string;
|
@Input() searchPath: string | string[];
|
||||||
@Input() searchType: string;
|
@Input() searchType: string;
|
||||||
@Input() sortingPath: string;
|
@Input() sortingPath: string | string[];
|
||||||
@Input() serverFiltering:boolean;
|
@Input() serverFiltering:boolean;
|
||||||
@Input() bindLabel:string;
|
@Input() bindLabel:string;
|
||||||
@Input() bindValue: string;
|
@Input() bindValue: string;
|
||||||
@ -125,21 +125,52 @@ export class NgSelectComponent implements OnInit,OnDestroy {
|
|||||||
|
|
||||||
refreshDataSource(searchTerm:any = null, page:number = null, pageSize:number = null){
|
refreshDataSource(searchTerm:any = null, page:number = null, pageSize:number = null){
|
||||||
let searchfilters:ISimpleFilter[] = null;
|
let searchfilters:ISimpleFilter[] = null;
|
||||||
if(searchTerm){
|
if(searchTerm)
|
||||||
|
{
|
||||||
|
if (this.searchPath) {
|
||||||
|
if (Array.isArray(this.searchPath)) {
|
||||||
|
searchfilters = this.searchPath.map(path => {
|
||||||
|
return <ISimpleFilter>{
|
||||||
|
path: path,
|
||||||
|
type: 'Contains',
|
||||||
|
value: searchTerm,
|
||||||
|
and: false
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
searchfilters = [<ISimpleFilter>{
|
searchfilters = [<ISimpleFilter>{
|
||||||
path: this.searchPath || this.bindLabel,
|
path: this.searchPath,
|
||||||
type: this.searchType || 'Contains', // Default: Contains
|
type: 'Contains', // Default: Contains
|
||||||
value: searchTerm
|
value: searchTerm
|
||||||
}]
|
}]
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
searchfilters = [<ISimpleFilter>{
|
||||||
|
path: this.bindLabel,
|
||||||
|
type: 'Contains', // Default: Contains
|
||||||
|
value: searchTerm
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
let sorts: ISort[];
|
||||||
|
if (this.sortingPath && Array.isArray(this.sortingPath)) {
|
||||||
|
sorts = this.sortingPath.map(sortPath => (<ISort>{
|
||||||
|
path: sortPath,
|
||||||
|
ascending: true
|
||||||
|
}));
|
||||||
|
} else {
|
||||||
|
sorts = [<ISort>{path: this.sortingPath || this.bindLabel, ascending: true}];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
this.dataSource.query({
|
this.dataSource.query({
|
||||||
page: page,
|
page: page,
|
||||||
pageSize: pageSize,
|
pageSize: pageSize,
|
||||||
filters:searchfilters,
|
filters:searchfilters,
|
||||||
sorts:[
|
sorts:sorts
|
||||||
{path: this.sortingPath || this.bindLabel, ascending: true}
|
});
|
||||||
]
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
get hasOptionTemplate() {
|
get hasOptionTemplate() {
|
||||||
|
@ -15,6 +15,32 @@ selected: {{ myValue | json }}
|
|||||||
</div>
|
</div>
|
||||||
</ps-ng-select>
|
</ps-ng-select>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
|
|
||||||
|
selected: {{ myForm.value | json }}
|
||||||
|
|
||||||
|
<h2>Single Select With Form | formGroup | option template (Making sure not breaking change single override path)</h2>
|
||||||
|
<form #form [formGroup]="myForm">
|
||||||
|
<ps-ng-select [dataSource]="merchantDataSource2" sortingPath="name" searchPath="name" bindLabel="name" bindValue="id" formControlName="merchantId" [serverFiltering]="true">
|
||||||
|
<div *psNgSelectOption="let item">
|
||||||
|
<span>Merchant:</span> {{ item.name }} - <span>Address: </span>{{ item.address }}
|
||||||
|
</div>
|
||||||
|
</ps-ng-select>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
|
||||||
|
selected: {{ myForm.value | json }}
|
||||||
|
|
||||||
|
<h2>Single Select With Form | formGroup | option template (multiple search paths)</h2>
|
||||||
|
<form #form [formGroup]="myForm">
|
||||||
|
<ps-ng-select [dataSource]="merchantDataSource2" [sortingPath]="['name', 'address']" [searchPath]="['name', 'address']" bindLabel="name" bindValue="id" formControlName="merchantId" [serverFiltering]="true">
|
||||||
|
<div *psNgSelectOption="let item">
|
||||||
|
<span>Merchant:</span> {{ item.name }} - <span>Address: </span>{{ item.address }}
|
||||||
|
</div>
|
||||||
|
</ps-ng-select>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
|
||||||
selected: {{ myForm.value | json }}
|
selected: {{ myForm.value | json }}
|
||||||
|
|
||||||
<h2>Single Select Demo | label Template</h2>
|
<h2>Single Select Demo | label Template</h2>
|
||||||
|
Loading…
Reference in New Issue
Block a user