@stackline/angular-multiselect-dropdown 2.0.5 → 4.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +68 -26
- package/angular2-multiselect-dropdown.ts +1 -0
- package/gulpfile.js +68 -0
- package/inline-resources.js +119 -0
- package/multiselect.component.css +733 -0
- package/package.json +101 -74
- package/src/app/angular2-multiselect-dropdown/angular2-multiselect-dropdown.ts +6 -0
- package/src/app/angular2-multiselect-dropdown/clickOutside.ts +60 -0
- package/src/app/angular2-multiselect-dropdown/index.ts +6 -0
- package/src/app/angular2-multiselect-dropdown/list-filter.ts +29 -0
- package/src/app/angular2-multiselect-dropdown/menu-item.ts +55 -0
- package/src/app/angular2-multiselect-dropdown/multiselect.component.html +88 -0
- package/src/app/angular2-multiselect-dropdown/multiselect.component.scss +710 -0
- package/src/app/angular2-multiselect-dropdown/multiselect.component.ts +405 -0
- package/src/app/angular2-multiselect-dropdown/multiselect.interface.ts +22 -0
- package/src/app/angular2-multiselect-dropdown/multiselect.model.ts +13 -0
- package/themes/custom.theme.css +1 -0
- package/themes/default.theme.css +1 -0
- package/tsconfig-aot.json +32 -0
- package/tsconfig.json +36 -0
- package/webpack-test.config.ts +70 -0
- package/webpack-umd.config.ts +98 -0
- package/fesm2022/stackline-angular-multiselect-dropdown.mjs +0 -2468
- package/themes/dark.theme.scss +0 -113
- package/types/stackline-angular-multiselect-dropdown.d.ts +0 -431
package/package.json
CHANGED
|
@@ -1,69 +1,104 @@
|
|
|
1
1
|
{
|
|
2
|
-
"$schema": "../../../node_modules/ng-packagr/package.schema.json",
|
|
3
2
|
"name": "@stackline/angular-multiselect-dropdown",
|
|
4
|
-
"version": "
|
|
5
|
-
"
|
|
6
|
-
"author": "Pradeep Terli (Original), Alexandro Paixao Marques (Maintainer)",
|
|
7
|
-
"description": "Angular multiselect dropdown for maintained release lines from Angular 2 through Angular 21, with search, grouping, custom templates, checkbox selection, reactive and template-driven forms support, and Material-inspired theming from Angular 14 onward.",
|
|
3
|
+
"version": "4.0.1",
|
|
4
|
+
"description": "Angular 4 compatible multiselect dropdown package for the Stackline Angular 4 release line.",
|
|
8
5
|
"keywords": [
|
|
9
|
-
"angular",
|
|
10
|
-
"angular
|
|
11
|
-
"angular-component",
|
|
12
|
-
"angular-multiselect-dropdown",
|
|
13
|
-
"angular multiselect dropdown",
|
|
14
|
-
"angular-multiselect",
|
|
6
|
+
"angular 2 multiselect dropdown",
|
|
7
|
+
"angular 4 multiselect dropdown",
|
|
15
8
|
"angular multiselect",
|
|
16
|
-
"angular
|
|
17
|
-
"angular multi select",
|
|
18
|
-
"multiselect",
|
|
19
|
-
"multiselect-dropdown",
|
|
20
|
-
"multi-select",
|
|
21
|
-
"dropdown",
|
|
22
|
-
"select",
|
|
23
|
-
"dropdown-search",
|
|
24
|
-
"checkbox-dropdown",
|
|
25
|
-
"checkbox multiselect",
|
|
26
|
-
"searchable-dropdown",
|
|
27
|
-
"select-all",
|
|
28
|
-
"dropdown-with-search",
|
|
29
|
-
"search-filter",
|
|
30
|
-
"group-by",
|
|
31
|
-
"grouped-dropdown",
|
|
32
|
-
"custom-templates",
|
|
33
|
-
"template-driven-forms",
|
|
34
|
-
"reactive-forms",
|
|
35
|
-
"ngmodel",
|
|
36
|
-
"formcontrolname",
|
|
37
|
-
"forms",
|
|
38
|
-
"ui-component",
|
|
39
|
-
"material-inspired",
|
|
40
|
-
"material-like",
|
|
41
|
-
"theming",
|
|
42
|
-
"scss-theme",
|
|
43
|
-
"css-theme",
|
|
44
|
-
"legacy-angular",
|
|
45
|
-
"angular-compatibility",
|
|
46
|
-
"angular21",
|
|
47
|
-
"angular20",
|
|
48
|
-
"angular19",
|
|
49
|
-
"angular14",
|
|
50
|
-
"angular2-multiselect",
|
|
51
|
-
"angular2-multiselect-dropdown",
|
|
52
|
-
"migration-friendly",
|
|
53
|
-
"maintained",
|
|
54
|
-
"ngx",
|
|
55
|
-
"ngx-multiselect",
|
|
56
|
-
"virtual-scroll"
|
|
9
|
+
"angular dropdown"
|
|
57
10
|
],
|
|
58
|
-
"
|
|
59
|
-
"
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
"
|
|
11
|
+
"license": "MIT",
|
|
12
|
+
"angular-cli": {},
|
|
13
|
+
"author": "Pradeep Terli",
|
|
14
|
+
"scripts": {
|
|
15
|
+
"ng": "ng",
|
|
16
|
+
"start": "ng serve",
|
|
17
|
+
"e2e": "ng e2e",
|
|
18
|
+
"build": "npm run build:esm && npm run build:umd && gulp copy",
|
|
19
|
+
"build:esm": "gulp inline-templates && npm run ngcompile",
|
|
20
|
+
"build:esm:watch": "gulp build:esm:watch",
|
|
21
|
+
"build:umd": "webpack --config webpack-umd.config.ts",
|
|
22
|
+
"build:umd:watch": "npm run build:umd -- --watch",
|
|
23
|
+
"build:watch": "concurrently --raw \"npm run build:umd:watch\" \"npm run build:esm:watch\"",
|
|
24
|
+
"ci": "npm run lint && npm run test && npm run build && npm run docs",
|
|
25
|
+
"clean:all": "npm run clean:tmp && rimraf node_modules",
|
|
26
|
+
"clean:tmp": "rimraf coverage dist tmp docs",
|
|
27
|
+
"codecov": "cat coverage/lcov.info | codecov",
|
|
28
|
+
"docs": "compodoc -p tsconfig.json -d docs --disableCoverage --disablePrivateOrInternalSupport",
|
|
29
|
+
"explorer": "source-map-explorer ./dist/index.umd.js",
|
|
30
|
+
"gh-pages": "rimraf docs && npm run docs && gh-pages -d docs",
|
|
31
|
+
"lint": "npm run tslint 'src/**/*.ts'",
|
|
32
|
+
"ngcompile": "ngc -p tsconfig-aot.json",
|
|
33
|
+
"postversion": "git push && git push --tags",
|
|
34
|
+
"prebuild": "rimraf dist tmp",
|
|
35
|
+
"prebuild:watch": "rimraf dist tmp",
|
|
36
|
+
"preversion": "npm run ci",
|
|
37
|
+
"test": "karma start",
|
|
38
|
+
"test:watch": "karma start --auto-watch --no-single-run",
|
|
39
|
+
"tslint": "tslint",
|
|
40
|
+
"github-pages": "ng build --base-href /angular2-multiselect-dropdown/"
|
|
63
41
|
},
|
|
42
|
+
"private": false,
|
|
64
43
|
"dependencies": {
|
|
65
|
-
"
|
|
66
|
-
|
|
44
|
+
"font-awesome": "*"
|
|
45
|
+
},
|
|
46
|
+
"devDependencies": {
|
|
47
|
+
"@angular/common": "^4.0.0",
|
|
48
|
+
"@angular/compiler": "^4.0.0",
|
|
49
|
+
"@angular/compiler-cli": "^4.0.0",
|
|
50
|
+
"@angular/animations": "^4.0.0",
|
|
51
|
+
"@angular/cli": "^1.3.2",
|
|
52
|
+
"@angular/core": "^4.0.0",
|
|
53
|
+
"@angular/forms": "^4.0.0",
|
|
54
|
+
"@angular/http": "^4.0.0",
|
|
55
|
+
"@angular/platform-browser": "^4.0.0",
|
|
56
|
+
"@angular/platform-browser-dynamic": "^4.0.0",
|
|
57
|
+
"@angular/router": "^4.0.0",
|
|
58
|
+
"@compodoc/compodoc": "^1.0.0-beta.9",
|
|
59
|
+
"@types/jasmine": "^2.5.47",
|
|
60
|
+
"@types/karma": "^0.13.35",
|
|
61
|
+
"@types/node": "^7.0.18",
|
|
62
|
+
"@types/webpack": "^2.2.15",
|
|
63
|
+
"@types/webpack-env": "^1.13.0",
|
|
64
|
+
"angular2-template-loader": "^0.6.2",
|
|
65
|
+
"awesome-typescript-loader": "^3.1.3",
|
|
66
|
+
"codecov": "^2.2.0",
|
|
67
|
+
"codelyzer": "^3.0.1",
|
|
68
|
+
"concurrently": "^3.4.0",
|
|
69
|
+
"css-loader": "^0.28.1",
|
|
70
|
+
"gh-pages": "^1.0.0",
|
|
71
|
+
"gulp": "^3.9.1",
|
|
72
|
+
"gulp-copy": "^1.0.1",
|
|
73
|
+
"gulp-inline-ng2-template": "^4.0.0",
|
|
74
|
+
"istanbul-instrumenter-loader": "^2.0.0",
|
|
75
|
+
"jasmine-core": "^2.6.1",
|
|
76
|
+
"json-loader": "^0.5.4",
|
|
77
|
+
"@types/log4js": "0.0.33",
|
|
78
|
+
"karma": "^1.7.0",
|
|
79
|
+
"karma-chrome-launcher": "^2.1.1",
|
|
80
|
+
"karma-coverage-istanbul-reporter": "^1.2.1",
|
|
81
|
+
"karma-jasmine": "^1.1.0",
|
|
82
|
+
"karma-mocha-reporter": "^2.2.3",
|
|
83
|
+
"karma-sourcemap-loader": "^0.3.7",
|
|
84
|
+
"karma-webpack": "^2.0.3",
|
|
85
|
+
"node-sass": "^4.5.2",
|
|
86
|
+
"raw-loader": "^0.5.1",
|
|
87
|
+
"rimraf": "2.6.1",
|
|
88
|
+
"rxjs": "^5.3.1",
|
|
89
|
+
"sass-loader": "^6.0.5",
|
|
90
|
+
"source-map-explorer": "^1.3.3",
|
|
91
|
+
"to-string-loader": "^1.1.5",
|
|
92
|
+
"ts-node": "^3.0.4",
|
|
93
|
+
"tslint": "^5.2.0",
|
|
94
|
+
"typescript": "^2.3.2",
|
|
95
|
+
"webpack": "^2.5.1",
|
|
96
|
+
"webpack-angular-externals": "^1.0.2",
|
|
97
|
+
"webpack-rxjs-externals": "^1.0.0",
|
|
98
|
+
"zone.js": "^0.8.10",
|
|
99
|
+
"ng2-gist": "*",
|
|
100
|
+
"primeng": "*",
|
|
101
|
+
"bootstrap": "^4.0.0-beta.2"
|
|
67
102
|
},
|
|
68
103
|
"repository": {
|
|
69
104
|
"type": "git",
|
|
@@ -72,20 +107,12 @@
|
|
|
72
107
|
"bugs": {
|
|
73
108
|
"url": "https://github.com/alexandroit/angular-multiselect-dropdown/issues"
|
|
74
109
|
},
|
|
75
|
-
"
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
"./package.json": {
|
|
82
|
-
"default": "./package.json"
|
|
83
|
-
},
|
|
84
|
-
".": {
|
|
85
|
-
"types": "./types/stackline-angular-multiselect-dropdown.d.ts",
|
|
86
|
-
"default": "./fesm2022/stackline-angular-multiselect-dropdown.mjs"
|
|
87
|
-
}
|
|
110
|
+
"main": "angular2-multiselect-dropdown.ts",
|
|
111
|
+
"types": "angular2-multiselect-dropdown.ts",
|
|
112
|
+
"peerDependencies": {
|
|
113
|
+
"@angular/common": ">=4.0.0 <5.0.0",
|
|
114
|
+
"@angular/core": ">=4.0.0 <5.0.0",
|
|
115
|
+
"@angular/forms": ">=4.0.0 <5.0.0"
|
|
88
116
|
},
|
|
89
|
-
"
|
|
90
|
-
"type": "module"
|
|
117
|
+
"homepage": "https://alexandro.net/docs/angular/multiselect/angular-4/"
|
|
91
118
|
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { AngularMultiSelect } from './multiselect.component';
|
|
2
|
+
export { ClickOutsideDirective } from './clickOutside';
|
|
3
|
+
export { ListFilterPipe } from './list-filter';
|
|
4
|
+
export { Item } from './menu-item';
|
|
5
|
+
export { TemplateRenderer } from './menu-item';
|
|
6
|
+
export { AngularMultiSelectModule } from './multiselect.component';
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import {Directive, ElementRef, Output, EventEmitter, HostListener, Input} from '@angular/core';
|
|
2
|
+
|
|
3
|
+
@Directive({
|
|
4
|
+
selector: '[clickOutside]'
|
|
5
|
+
})
|
|
6
|
+
export class ClickOutsideDirective {
|
|
7
|
+
constructor(private _elementRef: ElementRef) {
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
@Output()
|
|
11
|
+
public clickOutside = new EventEmitter<MouseEvent>();
|
|
12
|
+
|
|
13
|
+
@HostListener('document:click', ['$event', '$event.target'])
|
|
14
|
+
@HostListener('document:touchstart', ['$event', '$event.target'])
|
|
15
|
+
public onClick(event: MouseEvent, targetElement: HTMLElement): void {
|
|
16
|
+
if (!targetElement) {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
const clickedInside = this._elementRef.nativeElement.contains(targetElement);
|
|
21
|
+
if (!clickedInside) {
|
|
22
|
+
this.clickOutside.emit(event);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
@Directive({
|
|
28
|
+
selector: '[scroll]'
|
|
29
|
+
})
|
|
30
|
+
export class ScrollDirective {
|
|
31
|
+
constructor(private _elementRef: ElementRef) {
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
@Output()
|
|
35
|
+
public scroll = new EventEmitter<MouseEvent>();
|
|
36
|
+
|
|
37
|
+
@HostListener('scroll', ['$event'])
|
|
38
|
+
public onClick(event: MouseEvent, targetElement: HTMLElement): void {
|
|
39
|
+
this.scroll.emit(event);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
@Directive({
|
|
43
|
+
selector: '[styleProp]'
|
|
44
|
+
})
|
|
45
|
+
export class styleDirective {
|
|
46
|
+
|
|
47
|
+
constructor(private el: ElementRef) {
|
|
48
|
+
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
@Input('styleProp') styleVal: number;
|
|
52
|
+
|
|
53
|
+
ngOnInit() {
|
|
54
|
+
|
|
55
|
+
this.el.nativeElement.style.top = this.styleVal;
|
|
56
|
+
}
|
|
57
|
+
ngOnChanges(): void {
|
|
58
|
+
this.el.nativeElement.style.top = this.styleVal;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { AngularMultiSelect } from './multiselect.component';
|
|
2
|
+
export { ClickOutsideDirective } from './clickOutside';
|
|
3
|
+
export { ListFilterPipe } from './list-filter';
|
|
4
|
+
export { Item } from './menu-item';
|
|
5
|
+
export { TemplateRenderer } from './menu-item';
|
|
6
|
+
export { AngularMultiSelectModule } from './multiselect.component';
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Pipe, PipeTransform } from '@angular/core';
|
|
2
|
+
|
|
3
|
+
import { ListItem } from './multiselect.model';
|
|
4
|
+
|
|
5
|
+
@Pipe({
|
|
6
|
+
name: 'listFilter',
|
|
7
|
+
pure: false
|
|
8
|
+
})
|
|
9
|
+
export class ListFilterPipe implements PipeTransform {
|
|
10
|
+
transform(items: ListItem[], filter: any): ListItem[] {
|
|
11
|
+
if (!items || !filter) {
|
|
12
|
+
return items;
|
|
13
|
+
}
|
|
14
|
+
return items.filter((item: any) => this.applyFilter(item, filter));
|
|
15
|
+
}
|
|
16
|
+
applyFilter(item: any, filter: any): boolean {
|
|
17
|
+
let found = false;
|
|
18
|
+
for (var prop in item) {
|
|
19
|
+
if (filter) {
|
|
20
|
+
if (item[prop].toString().toLowerCase().indexOf(filter.toLowerCase()) >= 0) {
|
|
21
|
+
found = true;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
else
|
|
25
|
+
found = true;
|
|
26
|
+
}
|
|
27
|
+
return found;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { Component, OnInit, OnDestroy, NgModule, TemplateRef, AfterContentInit, ContentChild, EmbeddedViewRef, OnChanges, ViewContainerRef, ViewEncapsulation, Input, Output, EventEmitter, ElementRef, AfterViewInit, Pipe, PipeTransform } from '@angular/core';
|
|
2
|
+
import { SafeResourceUrl, DomSanitizer } from '@angular/platform-browser';
|
|
3
|
+
import { CommonModule } from '@angular/common';
|
|
4
|
+
|
|
5
|
+
@Component({
|
|
6
|
+
selector: 'c-item',
|
|
7
|
+
template: ``
|
|
8
|
+
})
|
|
9
|
+
|
|
10
|
+
export class Item {
|
|
11
|
+
|
|
12
|
+
@ContentChild(TemplateRef) template: TemplateRef<any>
|
|
13
|
+
constructor() {
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
@Component({
|
|
19
|
+
selector: 'c-badge',
|
|
20
|
+
template: ``
|
|
21
|
+
})
|
|
22
|
+
|
|
23
|
+
export class Badge {
|
|
24
|
+
|
|
25
|
+
@ContentChild(TemplateRef) template: TemplateRef<any>
|
|
26
|
+
constructor() {
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
@Component({
|
|
32
|
+
selector: 'c-templateRenderer',
|
|
33
|
+
template: ``
|
|
34
|
+
})
|
|
35
|
+
|
|
36
|
+
export class TemplateRenderer implements OnInit, OnDestroy {
|
|
37
|
+
|
|
38
|
+
@Input() data: any
|
|
39
|
+
@Input() item: any
|
|
40
|
+
view: EmbeddedViewRef<any>;
|
|
41
|
+
|
|
42
|
+
constructor(public viewContainer: ViewContainerRef) {
|
|
43
|
+
}
|
|
44
|
+
ngOnInit() {
|
|
45
|
+
this.view = this.viewContainer.createEmbeddedView(this.data.template, {
|
|
46
|
+
'\$implicit': this.data,
|
|
47
|
+
'item':this.item
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
ngOnDestroy() {
|
|
52
|
+
this.view.destroy();
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
<div class="stackline-dropdown" [ngClass]="getDropdownClasses()" (clickOutside)="closeDropdown()">
|
|
2
|
+
<div class="selected-list">
|
|
3
|
+
<div class="c-btn" (click)="toggleDropdown($event)" [ngClass]="{'disabled': settings.disabled}">
|
|
4
|
+
<span *ngIf="selectedItems?.length == 0">{{settings.text}}</span>
|
|
5
|
+
<span *ngIf="settings.singleSelection">
|
|
6
|
+
<span *ngFor="let item of selectedItems;trackBy: trackByFn;">
|
|
7
|
+
{{item[settings.labelKey]}}
|
|
8
|
+
</span>
|
|
9
|
+
</span>
|
|
10
|
+
<div class="c-list" *ngIf="selectedItems?.length > 0 && !settings.singleSelection">
|
|
11
|
+
<div class="c-token" *ngFor="let item of selectedItems;trackBy: trackByFn;let k = index" [hidden]="k > settings.badgeShowLimit-1">
|
|
12
|
+
<span *ngIf="!badgeTempl" class="c-label">{{item[settings.labelKey]}}</span>
|
|
13
|
+
<span *ngIf="badgeTempl" class="c-label">
|
|
14
|
+
<c-templateRenderer [data]="badgeTempl" [item]="item"></c-templateRenderer>
|
|
15
|
+
</span>
|
|
16
|
+
<span class="fa fa-remove" (click)="onItemClick(item,k,$event)"></span>
|
|
17
|
+
</div>
|
|
18
|
+
</div>
|
|
19
|
+
<span class="countplaceholder" *ngIf="selectedItems?.length > settings.badgeShowLimit">+{{selectedItems?.length - settings.badgeShowLimit }}</span>
|
|
20
|
+
<span class="fa" [ngClass]="{'fa-angle-down': !isActive,'fa-angle-up':isActive}"></span>
|
|
21
|
+
</div>
|
|
22
|
+
</div>
|
|
23
|
+
<div class="dropdown-list" [hidden]="!isActive">
|
|
24
|
+
<div class="arrow-up arrow-2"></div>
|
|
25
|
+
<div class="arrow-up"></div>
|
|
26
|
+
<div class="list-area">
|
|
27
|
+
<div class="pure-checkbox select-all" *ngIf="settings.enableCheckAll && !settings.singleSelection && !settings.limitSelection" (click)="toggleSelectAll()">
|
|
28
|
+
<input *ngIf="settings.showCheckbox" type="checkbox" [checked]="isSelectAll" [disabled]="settings.limitSelection == selectedItems?.length"/>
|
|
29
|
+
<label>
|
|
30
|
+
<span [hidden]="isSelectAll">{{settings.selectAllText}}</span>
|
|
31
|
+
<span [hidden]="!isSelectAll">{{settings.unSelectAllText}}</span>
|
|
32
|
+
</label>
|
|
33
|
+
</div>
|
|
34
|
+
<div class="list-filter" *ngIf="settings.enableSearchFilter && !settings.lazyLoading">
|
|
35
|
+
<span class="fa fa-search"></span>
|
|
36
|
+
<input #searchInput type="text" [placeholder]="settings.searchPlaceholderText" [(ngModel)]="filter">
|
|
37
|
+
</div>
|
|
38
|
+
<div class="list-filter" *ngIf="settings.enableSearchFilter && settings.lazyLoading">
|
|
39
|
+
<span class="fa fa-search"></span>
|
|
40
|
+
<input #searchInput type="text" [placeholder]="settings.searchPlaceholderText" (keyup)="filterInfiniteList($event)">
|
|
41
|
+
</div>
|
|
42
|
+
<ul *ngIf="!settings.groupBy" [style.maxHeight] = "settings.maxHeight+'px'" class="lazyContainer" >
|
|
43
|
+
<span *ngIf="itemTempl">
|
|
44
|
+
<li *ngFor="let item of data | listFilter:filter; let i = index;" (click)="onItemClick(item,i,$event)" class="pure-checkbox">
|
|
45
|
+
<input *ngIf="settings.showCheckbox" type="checkbox" [checked]="isSelected(item)" [disabled]="settings.limitSelection == selectedItems?.length && !isSelected(item)"/>
|
|
46
|
+
<label></label>
|
|
47
|
+
<c-templateRenderer [data]="itemTempl" [item]="item"></c-templateRenderer>
|
|
48
|
+
</li>
|
|
49
|
+
</span>
|
|
50
|
+
<span *ngIf="!itemTempl && !settings.lazyLoading" >
|
|
51
|
+
<li *ngFor="let item of data | listFilter:filter; let i = index;" (click)="onItemClick(item,i,$event)" class="pure-checkbox">
|
|
52
|
+
<input *ngIf="settings.showCheckbox" type="checkbox" [checked]="isSelected(item)" [disabled]="settings.limitSelection == selectedItems?.length && !isSelected(item)"/>
|
|
53
|
+
<label>{{item[settings.labelKey]}}</label>
|
|
54
|
+
</li>
|
|
55
|
+
</span>
|
|
56
|
+
<span *ngIf="!itemTempl && settings.lazyLoading" >
|
|
57
|
+
<div [ngStyle]="{'height':totalHeight+'px'}" style="position: relative;">
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
<li *ngFor="let item of chunkArray | listFilter:filter; let i = index;" (click)="onItemClick(item,i,$event)" style="position: absolute;width: 100%;" class="pure-checkbox" [styleProp]="chunkIndex[i]">
|
|
61
|
+
<input *ngIf="settings.showCheckbox" type="checkbox" [checked]="isSelected(item)" [disabled]="settings.limitSelection == selectedItems?.length && !isSelected(item)"/>
|
|
62
|
+
<label>{{item[settings.labelKey]}}</label>
|
|
63
|
+
</li>
|
|
64
|
+
</div>
|
|
65
|
+
</span>
|
|
66
|
+
</ul>
|
|
67
|
+
<div *ngIf="settings.groupBy" [style.maxHeight] = "settings.maxHeight+'px'" style="overflow: auto;">
|
|
68
|
+
<ul *ngFor="let obj of groupedData ; let i = index;" class="list-grp">
|
|
69
|
+
<h4 *ngIf="(obj.value | listFilter:filter ).length > 0">{{obj.key}}</h4>
|
|
70
|
+
<span *ngIf="itemTempl" >
|
|
71
|
+
<li *ngFor="let item of obj.value | listFilter:filter; let i = index;" (click)="onItemClick(item,i,$event)" class="pure-checkbox">
|
|
72
|
+
<input *ngIf="settings.showCheckbox" type="checkbox" [checked]="isSelected(item)" [disabled]="settings.limitSelection == selectedItems?.length && !isSelected(item)"/>
|
|
73
|
+
<label></label>
|
|
74
|
+
<c-templateRenderer [data]="itemTempl" [item]="item"></c-templateRenderer>
|
|
75
|
+
</li>
|
|
76
|
+
</span>
|
|
77
|
+
<span *ngIf="!itemTempl" >
|
|
78
|
+
<li *ngFor="let item of obj.value | listFilter:filter; let i = index;" (click)="onItemClick(item,i,$event)" class="pure-checkbox">
|
|
79
|
+
<input *ngIf="settings.showCheckbox" type="checkbox" [checked]="isSelected(item)" [disabled]="settings.limitSelection == selectedItems?.length && !isSelected(item)"/>
|
|
80
|
+
<label>{{item[settings.labelKey]}}</label>
|
|
81
|
+
</li>
|
|
82
|
+
</span>
|
|
83
|
+
</ul>
|
|
84
|
+
</div>
|
|
85
|
+
<h5 class="list-message" *ngIf="data?.length == 0">{{settings.noDataLabel}}</h5>
|
|
86
|
+
</div>
|
|
87
|
+
</div>
|
|
88
|
+
</div>
|