Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions src/ng-multiselect-dropdown/src/multi-select.component.html
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
</span>
</span>
</div>
<<<<<<< Updated upstream

<div class="dropdown-list" [hidden]="!isDropdownOpen">
<ul *ngIf="_settings.enableCheckAll && !_settings.limitSelection">
Expand All @@ -33,6 +34,28 @@
</li>
<li *ngIf="_data.length == 0">
<h5>No data available</h5>
=======
<div class="dropdown-list" [hidden]="!_settings.defaultOpen">
<ul class="item1">
<li (click)="toggleSelectAll()" *ngIf="(datarr.length > 0 || _settings.allowRemoteDataSearch) && !_settings.singleSelection && _settings.enableCheckAll && _settings.limitSelection===-1" class="multiselect-item-checkbox" style="border-bottom: 1px solid #ccc;padding:10px">
<input type="checkbox" aria-label="multiselect-select-all" [checked]="isAllItemsSelected()" [disabled]="disabled || isLimitSelectionReached()" />
<div>{{!isAllItemsSelected() ? _settings.selectAllText : _settings.unSelectAllText}}</div>
</li>
<li class="filter-textbox" *ngIf="(datarr.length>0 || _settings.allowRemoteDataSearch) && _settings.allowSearchFilter">
<input type="text" aria-label="multiselect-search" [readOnly]="disabled" [placeholder]="_settings.searchPlaceholderText" [(ngModel)]="filter.text" (ngModelChange)="onFilterTextChange($event)">
</li>
</ul>
<ul class="item2" [style.maxHeight]="_settings.maxHeight+'px'">
<li *ngFor="let item of datarr | multiSelectFilter:filter; let i = index;" (click)="onItemClick($event,item)" class="multiselect-item-checkbox" [attr.title]="item.tooltip">
<input type="checkbox" [attr.aria-label]="item.text" [checked]="isSelected(item)" [disabled]="disabled || (isLimitSelectionReached() && !isSelected(item)) || item.isDisabled" />
<div>{{item.text}}</div>
</li>
<li class='no-filtered-data' *ngIf="datarr.length != 0 && (datarr | multiSelectFilter:filter).length == 0 && !_settings.allowRemoteDataSearch">
<h5>{{_settings.noFilteredDataAvailablePlaceholderText}}</h5>
</li>
<li class='no-data' *ngIf="datarr.length == 0 && !_settings.allowRemoteDataSearch">
<h5>{{_settings.noDataAvailablePlaceholderText}}</h5>
>>>>>>> Stashed changes
</li>
</ul>
</div>
Expand Down
57 changes: 56 additions & 1 deletion src/ng-multiselect-dropdown/src/multiselect.component.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
<<<<<<< Updated upstream
import {
Component,
OnInit,
Expand Down Expand Up @@ -35,6 +36,13 @@ export interface DropdownSettings {
searchPlaceholderText?: String;
closeDropDownOnSelection?: Boolean;
}
=======
import { Component, HostListener, forwardRef, Input, Output, EventEmitter, ChangeDetectionStrategy, ChangeDetectorRef } from "@angular/core";
import { NG_VALUE_ACCESSOR, ControlValueAccessor } from "@angular/forms";
import { ListItem, IDropdownSettings } from "./multiselect.model";
import { ListFilterPipe } from "./list-filter.pipe";
import { BehaviorSubject } from "rxjs";
>>>>>>> Stashed changes

export const DROPDOWN_CONTROL_VALUE_ACCESSOR: any = {
provide: NG_VALUE_ACCESSOR,
Expand All @@ -50,9 +58,16 @@ const noop = () => {};
providers: [DROPDOWN_CONTROL_VALUE_ACCESSOR],
changeDetection:ChangeDetectionStrategy.OnPush
})
<<<<<<< Updated upstream
export class MultiSelectComponent implements OnInit, ControlValueAccessor {
public _settings: DropdownSettings;
public _data: Array<ListItem> = [];
=======
export class MultiSelectComponent implements ControlValueAccessor {
public datarr:any = [];
public _settings: IDropdownSettings;
public _data: BehaviorSubject<any> = new BehaviorSubject<any>([]);
>>>>>>> Stashed changes
public selectedItems: Array<ListItem> = [];
public isDropdownOpen = false;

Expand Down Expand Up @@ -86,8 +101,9 @@ export class MultiSelectComponent implements OnInit, ControlValueAccessor {
@Input()
public set data(value: Array<any>) {
if (!value) {
this._data = [];
this._data.next([]);
} else {
<<<<<<< Updated upstream
const _items = value.filter((item: any) => {
if (
typeof item === 'string' ||
Expand All @@ -108,6 +124,12 @@ export class MultiSelectComponent implements OnInit, ControlValueAccessor {
text: item[this._settings.textField]
})
);
=======
const firstItem = value[0];
this._sourceDataType = typeof firstItem;
this._sourceDataFields = this.getFields(firstItem);
this._data.next(value.map(item => this.deobjectify(item)));
>>>>>>> Stashed changes
}
}

Expand All @@ -124,8 +146,24 @@ export class MultiSelectComponent implements OnInit, ControlValueAccessor {
private onTouchedCallback: () => void = noop;
private onChangeCallback: (_: any) => void = noop;

<<<<<<< Updated upstream
constructor() {}
ngOnInit() {}
=======
onFilterTextChange($event) {
this.onFilterChange.emit($event);
}

constructor(
private listFilterPipe:ListFilterPipe,
private cdr: ChangeDetectorRef
) {
this._data.subscribe((res:any)=>{
this.datarr = res;
});
}

>>>>>>> Stashed changes
onItemClick($event: any, item: ListItem) {
if (this.disabled) {
return false;
Expand Down Expand Up @@ -223,7 +261,19 @@ export class MultiSelectComponent implements OnInit, ControlValueAccessor {
}

isAllItemsSelected(): boolean {
<<<<<<< Updated upstream
return this._data.length === this.selectedItems.length;
=======
// get disabld item count

let filteredItems = this.listFilterPipe.transform(this.datarr,this.filter);
const itemDisabledCount = filteredItems.filter(item => item.isDisabled).length;
// take disabled items into consideration when checking
if ((!this.data || this.data.length === 0) && this._settings.allowRemoteDataSearch) {
return false;
}
return filteredItems.length === this.selectedItems.length + itemDisabledCount;
>>>>>>> Stashed changes
}

itemShowRemaining(): Number {
Expand Down Expand Up @@ -297,7 +347,12 @@ export class MultiSelectComponent implements OnInit, ControlValueAccessor {
return false;
}
if (!this.isAllItemsSelected()) {
<<<<<<< Updated upstream
this.selectedItems = this._data.slice();
=======
// filter out disabled item first before slicing
this.selectedItems = this.listFilterPipe.transform(this.datarr,this.filter).filter(item => !item.isDisabled).slice();
>>>>>>> Stashed changes
this.onSelectAll.emit(this.emittedValue(this.selectedItems));
} else {
this.selectedItems = [];
Expand Down