File

src/app/modules/shared/components/custom-multi-select/custom-multi-select.component.ts

Implements

OnInit

Metadata

Index

Properties
Methods
Inputs
Outputs

Constructor

constructor(cdr: ChangeDetectorRef, resourceService: ResourceService)
Parameters :
Name Type Optional
cdr ChangeDetectorRef No
resourceService ResourceService No

Inputs

field
Type : object
inputData
Type : Array<string>
valueField
Type : string
Default value : 'name'

Outputs

selectedValue
Type : EventEmitter

Methods

checkbox
checkbox(name)
Parameters :
Name Optional
name No
Returns : void
ngOnInit
ngOnInit()
Returns : void
selectAll
selectAll(code)
Parameters :
Name Optional
code No
Returns : void
selectedOption
selectedOption(event)
Parameters :
Name Optional
event No
Returns : void

Properties

checkBox
Type : object
refresh
Default value : true
Public resourceService
Type : ResourceService
selectAllCheckBox
Default value : false
import { ResourceService } from './../../services/resource/resource.service';
import { Component, OnInit, ChangeDetectorRef, Input,  EventEmitter, Output } from '@angular/core';
import * as _ from 'lodash-es';
@Component({
  selector: 'app-custom-multi-select',
  templateUrl: './custom-multi-select.component.html'
})
export class CustomMultiSelectComponent implements OnInit {
  @Input() inputData: Array<string>;
  @Input() field: object;
  @Input() valueField = 'name';
  checkBox: object;
  selectAllCheckBox = false;
  refresh = true;
  @Output() selectedValue = new EventEmitter<any>();

  constructor( private cdr: ChangeDetectorRef, public resourceService: ResourceService) { }
  checkbox(name) {
    if (this.checkBox[name]) {
      this.checkBox[name] = false;
      this.selectAllCheckBox = false;
    } else {
      this.checkBox[name] = true;
    }
  }
  selectAll(code) {
    this.inputData = [];
    this.selectAllCheckBox = !this.selectAllCheckBox;
    if (this.selectAllCheckBox) {
      _.forEach(this.field['range'], (value) => {
        this.inputData.push(value.name);
        this.checkBox[value.name] = true;
      });
    } else {
      this.inputData = [];
      _.forEach(this.field['range'], (value) => {
        this.checkBox[value.name] = false;
      });
    }
    this.selectedValue.emit( this.inputData);
    this.refresh = false;
    this.cdr.detectChanges();
    this.refresh = true;
  }
  selectedOption(event) {
    const fieldName = [];
    _.forEach(this.field['range'], (value, key) => {
      fieldName.push(value.name);
    });
    if (fieldName.length === event.length) {
      this.selectAllCheckBox = true;
    }
    this.selectedValue.emit(event);
  }
  ngOnInit() {
    this.checkBox = {};
    const name = [];
    if (this.inputData) {
      _.forEach(this.field['range'], (value, key) => {
        name.push(value.name);
      });
      if (name.length === this.inputData.length) {
        this.selectAllCheckBox = true;
      }
      _.forEach(this.inputData, (value) => {
        this.checkBox[value] = true;
      });
    }
  }
}
<ng-container *ngIf="refresh">

  <ng-template let-option #optionTemplate >
    <div>
      {{option.name}}
    </div>
    <div class="ml-auto">
      <i class="square outline medium icon m-0" [ngClass]="{'check': checkBox[option.name] }"></i>
    </div>
  </ng-template>

  <!-- If valueField is name it will select name as the valuefield in selected checkboxes -->
  <sui-multi-select *ngIf="valueField === 'name' && field.code !== 'gradeLevel'" [(ngModel)]="inputData" [optionTemplate]="optionTemplate" id={{field.code}} name={{field.code}} defaultSelectionText={{field.label}} zeroSelectionText={{resourceService.frmelmnts.lbl.Select}} class="ui selection" [options]="field.range" [hasLabels]="false"
    valueField="name" (ngModelChange)="selectedOption($event)" #multiSelect>
    <div class="header item" tabindex="0" (click)="selectAll(field.code)" [ngClass]="{'active': selectAllCheckBox }">
      <div>
        {{resourceService.frmelmnts.lbl.selectAll}}
      </div>
      <div class="ml-auto">
        <i class="square outline medium icon m-0" [ngClass]="{'check': selectAllCheckBox}"></i>
      </div>
    </div>
    <div class="divider"></div>
    <sui-select-option *ngFor="let option of multiSelect.filteredOptions | sortBy:'name':'asc'" [value]="option" tabindex="0" (click)="checkbox(option.name)" [ngClass]="{'sb-color-primary': checkBox[option.name] }" title="{{option.name}}"></sui-select-option>
  </sui-multi-select>

  <sui-multi-select *ngIf="valueField === 'name' && field.code === 'gradeLevel'" [(ngModel)]="inputData" [optionTemplate]="optionTemplate" id={{field.code}} name={{field.code}} defaultSelectionText={{field.label}} zeroSelectionText={{resourceService.frmelmnts.lbl.Select}} class="ui selection" [options]="field.range" [hasLabels]="false"
    valueField="name" (ngModelChange)="selectedOption($event)" #multiSelect>
    <div class="header item" tabindex="0" (click)="selectAll(field.code)" [ngClass]="{'active': selectAllCheckBox }">
      <div>
        {{resourceService.frmelmnts.lbl.selectAll}}
      </div>
      <div class="ml-auto">
        <i class="square outline medium icon m-0" [ngClass]="{'check': selectAllCheckBox}"></i>
      </div>
    </div>
    <div class="divider"></div>
    <sui-select-option *ngFor="let option of multiSelect.filteredOptions" [value]="option" tabindex="0" (click)="checkbox(option.name)" [ngClass]="{'sb-color-primary': checkBox[option.name] }" title="{{option.name}}"></sui-select-option>
  </sui-multi-select>
  
  <!-- If valueField is code it will select code as the valuefield in selected checkboxes -->
  <sui-multi-select *ngIf="valueField === 'code'" [(ngModel)]="inputData" [optionTemplate]="optionTemplate" id={{field.code}} name={{field.code}} defaultSelectionText={{field.label}} zeroSelectionText={{resourceService.frmelmnts.lbl.Select}} class="ui selection" [options]="field.range" [hasLabels]="false"
    valueField="code" (ngModelChange)="selectedOption($event)" #multiSelect>
    <div class="header item" tabindex="0" (click)="selectAll(field.code)" [ngClass]="{'active': selectAllCheckBox }">
      <div>
        {{resourceService.frmelmnts.lbl.selectAll}}
      </div>
      <div class="ml-auto">
        <i class="square outline medium icon m-0" [ngClass]="{'check': selectAllCheckBox}"></i>
      </div>
    </div>
    <div class="divider"></div>
    <sui-select-option *ngFor="let option of multiSelect.filteredOptions" [value]="option" tabindex="0" (click)="checkbox(option.name)" [ngClass]="{'active': checkBox[option.name] }" title="{{option.name}}"></sui-select-option>
  </sui-multi-select>

</ng-container>
Legend
Html element
Component
Html element with directive

results matching ""

    No results matching ""