@bnsights/bbsf-controls 1.0.45 → 1.0.48

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.
Files changed (36) hide show
  1. package/README.md +17 -0
  2. package/bnsights-bbsf-controls-1.0.48.tgz +0 -0
  3. package/bnsights-bbsf-controls.d.ts +1 -0
  4. package/bnsights-bbsf-controls.metadata.json +1 -1
  5. package/bundles/bnsights-bbsf-controls.umd.js +768 -531
  6. package/bundles/bnsights-bbsf-controls.umd.js.map +1 -1
  7. package/esm2015/bnsights-bbsf-controls.js +2 -1
  8. package/esm2015/lib/Shared/Enums/TagInputView.js +7 -0
  9. package/esm2015/lib/Shared/Models/AutocompleteDTO.js +2 -1
  10. package/esm2015/lib/Shared/Models/AutocompleteOptions.js +2 -1
  11. package/esm2015/lib/Shared/Models/PagingOptions.js +5 -1
  12. package/esm2015/lib/Shared/Models/TagsInputDTO.js +1 -1
  13. package/esm2015/lib/Shared/Models/TagsInputOptions.js +9 -5
  14. package/esm2015/lib/Shared/components/ng-tag-input.js +292 -0
  15. package/esm2015/lib/Shared/default_intl.js +21 -0
  16. package/esm2015/lib/controls/AutocompleteTextBox/AutocompleteTextBox.component.js +3 -2
  17. package/esm2015/lib/controls/DateTimePicker/DateTimePicker.component.js +6 -1
  18. package/esm2015/lib/controls/Paging/Paging.component.js +81 -41
  19. package/esm2015/lib/controls/TagsInput/TagsInput.component.js +2 -2
  20. package/esm2015/lib/controls/bbsf-controls.module.js +4 -2
  21. package/esm2015/public-api.js +3 -1
  22. package/fesm2015/bnsights-bbsf-controls.js +418 -52
  23. package/fesm2015/bnsights-bbsf-controls.js.map +1 -1
  24. package/lib/Shared/Enums/TagInputView.d.ts +5 -0
  25. package/lib/Shared/Models/AutocompleteDTO.d.ts +1 -0
  26. package/lib/Shared/Models/AutocompleteOptions.d.ts +1 -0
  27. package/lib/Shared/Models/PagingOptions.d.ts +4 -0
  28. package/lib/Shared/Models/TagsInputDTO.d.ts +4 -2
  29. package/lib/Shared/Models/TagsInputOptions.d.ts +3 -0
  30. package/lib/Shared/components/ng-tag-input.d.ts +45 -0
  31. package/lib/Shared/default_intl.d.ts +10 -0
  32. package/lib/controls/AutocompleteTextBox/AutocompleteTextBox.component.d.ts +1 -0
  33. package/lib/controls/Paging/Paging.component.d.ts +7 -2
  34. package/package.json +2 -2
  35. package/public-api.d.ts +2 -0
  36. package/bnsights-bbsf-controls-1.0.45.tgz +0 -0
@@ -4,9 +4,9 @@ import timeGridPlugin from '@fullcalendar/timegrid';
4
4
  import listPlugin from '@fullcalendar/list';
5
5
  import interactionPlugin from '@fullcalendar/interaction';
6
6
  import * as i0 from '@angular/core';
7
- import { Injectable, Optional, EventEmitter, Component, Input, Output, ViewChild, NgZone, Directive, TemplateRef, ViewChildren, ComponentFactoryResolver, ViewContainerRef, Pipe, NgModule, NO_ERRORS_SCHEMA, Injector } from '@angular/core';
7
+ import { Injectable, Optional, EventEmitter, Component, Input, Output, ViewChild, NgZone, Directive, TemplateRef, ViewChildren, ComponentFactoryResolver, ViewContainerRef, Pipe, forwardRef, NgModule, NO_ERRORS_SCHEMA, Injector } from '@angular/core';
8
8
  import { BlockUIModule } from 'ng-block-ui';
9
- import { ControlContainer, Validators, FormControl, FormGroupDirective, FormGroup, ReactiveFormsModule, FormsModule } from '@angular/forms';
9
+ import { ControlContainer, Validators, FormControl, FormGroupDirective, FormGroup, NG_VALUE_ACCESSOR, ReactiveFormsModule, FormsModule } from '@angular/forms';
10
10
  import { Http, HttpModule } from '@angular/http';
11
11
  import { Router, RouterModule } from '@angular/router';
12
12
  import { ToastrModule } from 'ngx-toastr';
@@ -17,8 +17,8 @@ import { DatePipe, CommonModule } from '@angular/common';
17
17
  import { SearchCountryField, NgxIntlTelInputModule } from 'ngx-intl-tel-input';
18
18
  import { UtilityService, ControlValidationService, BBSFTranslateService, RequestOptionsModel, RequestHandlerService, BBSFUtilitiesModule } from '@bnsights/bbsf-utilities';
19
19
  import { BsDatepickerModule } from 'ngx-bootstrap/datepicker';
20
- import { Subject, Observable, noop, of } from 'rxjs';
21
- import { DateTimeAdapter, OwlDateTimeModule, OwlNativeDateTimeModule, OWL_DATE_TIME_LOCALE } from 'ng-pick-datetime';
20
+ import { Subject, Observable, noop as noop$1, of, Subscription } from 'rxjs';
21
+ import { OwlDateTimeIntl, DateTimeAdapter, OwlDateTimeModule, OwlNativeDateTimeModule, OWL_DATE_TIME_LOCALE } from 'ng-pick-datetime';
22
22
  import { FileUploader, FileLikeObject, FileUploadModule } from 'ng2-file-upload';
23
23
  import { __decorate, __awaiter } from 'tslib';
24
24
  import { Expose, plainToClass } from 'class-transformer';
@@ -390,6 +390,24 @@ OnPagingFiltersChangeService.decorators = [
390
390
  { type: Injectable, args: [{ providedIn: 'root' },] }
391
391
  ];
392
392
 
393
+ // here is the default text string - just adjust the strings to reflect your preferred language
394
+ class DefaultIntl extends OwlDateTimeIntl {
395
+ constructor(utilityService) {
396
+ super();
397
+ this.utilityService = utilityService;
398
+ /** A label for the range 'from' in picker info */
399
+ this.rangeFromLabel = this.utilityService.getResourceValue("From");
400
+ /** A label for the range 'to' in picker info */
401
+ this.rangeToLabel = this.utilityService.getResourceValue("To");
402
+ }
403
+ }
404
+ DefaultIntl.decorators = [
405
+ { type: Injectable }
406
+ ];
407
+ DefaultIntl.ctorParameters = () => [
408
+ { type: UtilityService }
409
+ ];
410
+
393
411
  class DateInputComponent {
394
412
  // tslint:disable-next-line: max-line-length
395
413
  constructor(datepipe, onChangeService, ErrorHandler, controlUtility, controlContainer, DateInputControlHost, UtilityService, translate, controlValidationService, dateTimeAdapter) {
@@ -565,6 +583,9 @@ DateInputComponent.decorators = [
565
583
  { type: Component, args: [{
566
584
  selector: 'BBSF-DateTimePicker',
567
585
  template: "<div class=\"b-control b-date-picker\">\r\n <div class=\"form-group row validate is-invalid\" [formGroup]=\"group\">\r\n <label class=\"b-label col-form-label col-sm-12 \" [ngClass]=\"(options.ViewType==1)?'col-md-12':'col-md-3'\"\r\n [hidden]=\"options.HideLabel\">\r\n {{options.LabelValue}}\r\n <span *ngIf=\"(options.ShowAsterisk&&options.IsRequired)||(options.IsRequired)\" class=\"text-danger Required-text\"\r\n aria-required=\"true\">*</span>\r\n </label>\r\n\r\n <div class=\"col-sm-12\" [ngClass]=\"(options.ViewType==1)?'':'col-md-9'\">\r\n <div class=\"input-group\">\r\n <input autocomplete=\"off\" (dateTimeChange)=\"onDateSelect($event)\"\r\n dir=\"{{options.ForceDirection==2?'rtl':''}}\"\r\n class=\"form-control bnsights-control {{options.ExtraClasses}} \"\r\n [ngClass]=\"(options.ViewType==1)?'':'col-md-9'\" aria-describedby=\"email-error\" aria-invalid=\"true\"\r\n formControlName=\"{{options.Name}}\" [owlDateTime]=\"dt1\" [owlDateTimeTrigger]=\"dt1\"\r\n [class.is-invalid]=\"DatePickerFormControl.invalid && DatePickerFormControl.touched\"\r\n [min]=\"options.StartDate\" [max]=\"options.EndDate\" [hour12Timer]=\"options.Hour12Timer\" [selectMode]=\"getSelectMode(options.SelectMode)\"\r\n placeholder=\"{{options.Placeholder}}\" id=\"{{options.Name}}\" #Dateinput>\r\n\r\n <owl-date-time [pickerType]=\"getPickerType(options.PickerType)\"\r\n [startView]=\"getStartView(options.StartView)\" [firstDayOfWeek]=\"options.FirstDayOfWeek\"\r\n [hour12Timer]=\"options.Hour12Timer\" #dt1></owl-date-time>\r\n \r\n <div class=\"input-group-append\">\r\n <span class=\"input-group-text\" [owlDateTimeTrigger]=\"dt1\">\r\n <span class=\"svg-icon\">\r\n <svg id=\"Group_356\" data-name=\"Group 356\" xmlns=\"http://www.w3.org/2000/svg\" width=\"15\" height=\"15\" viewBox=\"0 0 48 48\">\r\n <path id=\"Path_6737\" data-name=\"Path 6737\" d=\"M11.583,1a1,1,0,0,0-2,0V5.7h2Z\" style=\"\"></path>\r\n <path id=\"Path_6738\" data-name=\"Path 6738\" d=\"M38.417,1a1,1,0,0,0-2,0V5.7h2Z\"></path>\r\n <path id=\"Path_6739\" data-name=\"Path 6739\" d=\"M0,43.146C0,45.822,1.826,48,4.07,48H43.928C46.174,48,48,45.822,48,43.146V17.121H0Z\" fill=\"#d5d5d5\"></path>\r\n <path id=\"Path_6740\" data-name=\"Path 6740\" d=\"M43.929,5.7H38.417v5.512a1,1,0,1,1-2,0V5.7H11.583v5.512a1,1,0,1,1-2,0V5.7H4.07C1.826,5.7,0,7.877,0,10.555v4.566H48V10.555C48,7.877,46.174,5.7,43.929,5.7Z\" fill=\"#595959\"></path>\r\n </svg>\r\n </span>\r\n </span>\r\n <!--<span class=\"input-group-text\" *ngIf=\"options.EnableCopyToClipboard\"\r\n (click)=\"copyInputMessage(Dateinput)\">\r\n <i class=\"fas fa-copy\"></i>\r\n </span>-->\r\n </div>\r\n </div>\r\n\r\n <div class=\"text-danger Required-text\"\r\n *ngIf=\"(DatePickerFormControl.invalid && DatePickerFormControl.touched)\">\r\n {{getErrorValidation(DatePickerFormControl.errors|keyvalue)}}\r\n </div>\r\n\r\n <div class=\"control-desc\"*ngIf=\"options.LabelDescription!=null\">{{options.LabelDescription}}</div>\r\n \r\n <div *ngIf=\"(group.valid&&group.dirty&&group.touched )||(group.untouched&&group.invalid&&group.dirty) \">{{resetError()}}</div>\r\n\r\n\r\n\r\n </div>\r\n\r\n </div>\r\n</div>\r\n",
586
+ providers: [
587
+ { provide: OwlDateTimeIntl, useClass: DefaultIntl }
588
+ ],
568
589
  styles: [".example-form{min-width:150px;max-width:500px;width:100%}.example-full-width{width:100%}\n"]
569
590
  },] }
570
591
  ];
@@ -3703,6 +3724,7 @@ class AutocompleteDTO {
3703
3724
  constructor() {
3704
3725
  this.key = "";
3705
3726
  this.value = "";
3727
+ this.image = "";
3706
3728
  }
3707
3729
  }
3708
3730
 
@@ -3730,6 +3752,7 @@ class AutocompleteTextBoxComponent {
3730
3752
  this.validationRulesasync = [];
3731
3753
  this.dataList = [];
3732
3754
  this.SelectedValue = "";
3755
+ this.avatarImage = "https://upload.wikimedia.org/wikipedia/commons/7/7c/Profile_avatar_placeholder_large.png?20150327203541";
3733
3756
  this.resetError = () => {
3734
3757
  this.controlValidationService.RemoveGlobalError();
3735
3758
  };
@@ -3840,7 +3863,7 @@ class AutocompleteTextBoxComponent {
3840
3863
  requestOptionsModel.disableSuccessNotification = true;
3841
3864
  // using github public api to get users by name
3842
3865
  return this.requestHandlerService.get(this.options.ActionURL, params, null, requestOptionsModel)
3843
- .pipe(map((data) => data || []), tap(() => noop, err => {
3866
+ .pipe(map((data) => data || []), tap(() => noop$1, err => {
3844
3867
  // in case of http error
3845
3868
  this.errorMessage = err && err.message || 'Something goes wrong';
3846
3869
  }));
@@ -3920,7 +3943,7 @@ AutocompleteTextBoxComponent.decorators = [
3920
3943
  { type: Component, args: [{
3921
3944
  // tslint:disable-next-line: component-selector
3922
3945
  selector: 'BBSF-AutocompleteTextBox',
3923
- template: "<div class=\"b-control b-auto-complete-textbox\">\r\n <div class=\"form-group row validate is-invalid\" [formGroup]=\"group\">\r\n\r\n <label class=\"b-label col-form-label col-sm-12 \" [ngClass]=\"(options.ViewType==1)?'col-md-12':'col-md-3'\"\r\n [hidden]=\"options.HideLabel\">\r\n {{options.LabelValue}}\r\n <span *ngIf=\"(options.ShowAsterisk&&options.IsRequired)||(options.IsRequired)\" class=\"text-danger Required-text\"\r\n aria-required=\"true\">*</span>\r\n </label>\r\n\r\n <div class=\"col-sm-12\" [ngClass]=\"(options.ViewType==1)?'':'col-md-9'\">\r\n\r\n <!-- <input \r\n[(ngModel)]=\"Search\"\r\n value=\"{{Search}}\" \r\n autocomplete=\"off\"\r\n class=\"form-control bnsights-control {{options.ExtraClasses}}\"\r\n dir=\"{{options.ForceDirection==2?'rtl':''}}\"\r\n aria-describedby=\"email-error\" aria-invalid=\"true\" formControlName=\"{{options.Name}}\"\r\n [class.is-invalid]=\"AutocompleteTextBoxControl.invalid && AutocompleteTextBoxControl.touched\"\r\n typeaheadOptionField=\"{{Value}}\"\r\n [typeahead]=\"suggestions$\"\r\n [typeaheadAsync]=\"true\"\r\n placeholder=\"{{options.Placeholder}}\" id=\"{{options.Name}}\" (typeaheadOnSelect)=\"handleResultSelected($event)\" (blur)=\"onBlur($event.target.value)\" /> -->\r\n <!-- \r\n <input ngxTypeahead autocomplete=\"off\"\r\n value=\"{{Search}}\"\r\n class=\"form-control bnsights-control {{options.ExtraClasses}}\"\r\n dir=\"{{options.ForceDirection==2?'rtl':''}}\"\r\n aria-describedby=\"email-error\" aria-invalid=\"true\" formControlName=\"{{options.Name}}\"\r\n [class.is-invalid]=\"AutocompleteTextBoxControl.invalid && AutocompleteTextBoxControl.touched\"\r\n placeholder=\"{{options.Placeholder}}\" id=\"{{options.Name}}\" [taUrl]=\"options.ActionURL\"\r\n [taParams]=\"options.Params\" taQueryParam=\"{{QueryParam}}\" taApi=\"{{Api}}\" taListItemLabel=\"{{Value}}\" (taSelected)=\"handleResultSelected($event)\"> -->\r\n\r\n\r\n\r\n <ng-autocomplete *ngIf=\"!options.AllowNewSelection\" [data]=\"dataList\" [initialValue]=\"SelectedValue\"\r\n [searchKeyword]=\"keyword\" placeholder=\"{{options.Placeholder}}\" (selected)='selectEvent($event)'\r\n (inputChanged)='onChangeSearch($event)' historyIdentifier=\"dataList\" [itemTemplate]=\"itemTemplate\"\r\n [notFoundTemplate]=\"notFoundTemplate\" class=\"form-control bnsights-control {{options.ExtraClasses}}\"\r\n dir=\"{{options.ForceDirection==2?'rtl':''}}\" formControlName=\"{{options.Name}}\" aria-describedby=\"email-error\"\r\n aria-invalid=\"true\"\r\n [class.is-invalid]=\"AutocompleteTextBoxControl.invalid && AutocompleteTextBoxControl.touched\">\r\n </ng-autocomplete>\r\n\r\n <ng-autocomplete *ngIf=\"options.AllowNewSelection\" [data]=\"dataList\" [initialValue]=\"SelectedValue\"\r\n [searchKeyword]=\"keyword\" placeholder=\"{{options.Placeholder}}\" (selected)='selectEvent($event)'\r\n (inputChanged)='onChangeSearch($event)' historyIdentifier=\"dataList\" [itemTemplate]=\"itemTemplate\"\r\n class=\"form-control bnsights-control {{options.ExtraClasses}}\" dir=\"{{options.ForceDirection==2?'rtl':''}}\"\r\n formControlName=\"{{options.Name}}\" aria-describedby=\"email-error\" aria-invalid=\"true\"\r\n [class.is-invalid]=\"AutocompleteTextBoxControl.invalid && AutocompleteTextBoxControl.touched\">\r\n </ng-autocomplete>\r\n\r\n\r\n\r\n <ng-template #itemTemplate let-item>\r\n <a [innerHTML]=\"item.value\"></a>\r\n </ng-template>\r\n\r\n <ng-template #notFoundTemplate let-notFound>\r\n <div [innerHTML]=\"notFound\"></div>\r\n </ng-template>\r\n\r\n <div class=\"text-danger Required-text\"\r\n *ngIf=\"(AutocompleteTextBoxControl.invalid && AutocompleteTextBoxControl.touched)\">\r\n {{getErrorValidation(AutocompleteTextBoxControl.errors|keyvalue)}}\r\n </div>\r\n\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n <div class=\"control-desc text-dark\">{{options.LabelDescription}}</div>\r\n </div>\r\n\r\n <div *ngIf=\"(group.valid&&group.dirty&&group.touched )||(group.untouched&&group.invalid&&group.dirty) \">\r\n {{resetError()}}</div>\r\n\r\n </div>\r\n </div>\r\n</div>",
3946
+ template: "<div class=\"b-control b-auto-complete-textbox\">\r\n <div class=\"form-group row validate is-invalid\" [formGroup]=\"group\">\r\n\r\n <label class=\"b-label col-form-label col-sm-12 \" [ngClass]=\"(options.ViewType==1)?'col-md-12':'col-md-3'\"\r\n [hidden]=\"options.HideLabel\">\r\n {{options.LabelValue}}\r\n <span *ngIf=\"(options.ShowAsterisk&&options.IsRequired)||(options.IsRequired)\" class=\"text-danger Required-text\"\r\n aria-required=\"true\">*</span>\r\n </label>\r\n\r\n <div class=\"col-sm-12\" [ngClass]=\"(options.ViewType==1)?'':'col-md-9'\">\r\n\r\n <!-- <input \r\n[(ngModel)]=\"Search\"\r\n value=\"{{Search}}\" \r\n autocomplete=\"off\"\r\n class=\"form-control bnsights-control {{options.ExtraClasses}}\"\r\n dir=\"{{options.ForceDirection==2?'rtl':''}}\"\r\n aria-describedby=\"email-error\" aria-invalid=\"true\" formControlName=\"{{options.Name}}\"\r\n [class.is-invalid]=\"AutocompleteTextBoxControl.invalid && AutocompleteTextBoxControl.touched\"\r\n typeaheadOptionField=\"{{Value}}\"\r\n [typeahead]=\"suggestions$\"\r\n [typeaheadAsync]=\"true\"\r\n placeholder=\"{{options.Placeholder}}\" id=\"{{options.Name}}\" (typeaheadOnSelect)=\"handleResultSelected($event)\" (blur)=\"onBlur($event.target.value)\" /> -->\r\n <!-- \r\n <input ngxTypeahead autocomplete=\"off\"\r\n value=\"{{Search}}\"\r\n class=\"form-control bnsights-control {{options.ExtraClasses}}\"\r\n dir=\"{{options.ForceDirection==2?'rtl':''}}\"\r\n aria-describedby=\"email-error\" aria-invalid=\"true\" formControlName=\"{{options.Name}}\"\r\n [class.is-invalid]=\"AutocompleteTextBoxControl.invalid && AutocompleteTextBoxControl.touched\"\r\n placeholder=\"{{options.Placeholder}}\" id=\"{{options.Name}}\" [taUrl]=\"options.ActionURL\"\r\n [taParams]=\"options.Params\" taQueryParam=\"{{QueryParam}}\" taApi=\"{{Api}}\" taListItemLabel=\"{{Value}}\" (taSelected)=\"handleResultSelected($event)\"> -->\r\n\r\n\r\n\r\n <ng-autocomplete *ngIf=\"!options.AllowNewSelection\" [data]=\"dataList\" [initialValue]=\"SelectedValue\"\r\n [searchKeyword]=\"keyword\" placeholder=\"{{options.Placeholder}}\" (selected)='selectEvent($event)'\r\n (inputChanged)='onChangeSearch($event)' historyIdentifier=\"dataList\" [itemTemplate]=\"itemTemplate\"\r\n [notFoundTemplate]=\"notFoundTemplate\" class=\"form-control bnsights-control {{options.ExtraClasses}}\"\r\n dir=\"{{options.ForceDirection==2?'rtl':''}}\" formControlName=\"{{options.Name}}\" aria-describedby=\"email-error\"\r\n aria-invalid=\"true\"\r\n [class.is-invalid]=\"AutocompleteTextBoxControl.invalid && AutocompleteTextBoxControl.touched\">\r\n </ng-autocomplete>\r\n\r\n <ng-autocomplete *ngIf=\"options.AllowNewSelection\" [data]=\"dataList\" [initialValue]=\"SelectedValue\"\r\n [searchKeyword]=\"keyword\" placeholder=\"{{options.Placeholder}}\" (selected)='selectEvent($event)'\r\n (inputChanged)='onChangeSearch($event)' historyIdentifier=\"dataList\" [itemTemplate]=\"itemTemplate\"\r\n class=\"form-control bnsights-control {{options.ExtraClasses}}\" dir=\"{{options.ForceDirection==2?'rtl':''}}\"\r\n formControlName=\"{{options.Name}}\" aria-describedby=\"email-error\" aria-invalid=\"true\"\r\n [class.is-invalid]=\"AutocompleteTextBoxControl.invalid && AutocompleteTextBoxControl.touched\">\r\n </ng-autocomplete>\r\n\r\n\r\n\r\n <ng-template #itemTemplate let-item>\r\n <img *ngIf=\"options.ItemWithImage\" style=\"border-radius:50%; height:40px; width: 40px; float:left; margin-left:5px ; margin-top: 5px;margin-right: 5px;\" src=\"{{(item.image?item.image:avatarImage)}}\" />\r\n <a [innerHTML]=\"item.value\"></a>\r\n </ng-template>\r\n\r\n <ng-template #notFoundTemplate let-notFound>\r\n <div [innerHTML]=\"notFound\"></div>\r\n </ng-template>\r\n\r\n <div class=\"text-danger Required-text\"\r\n *ngIf=\"(AutocompleteTextBoxControl.invalid && AutocompleteTextBoxControl.touched)\">\r\n {{getErrorValidation(AutocompleteTextBoxControl.errors|keyvalue)}}\r\n </div>\r\n\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n <div class=\"control-desc text-dark\">{{options.LabelDescription}}</div>\r\n </div>\r\n\r\n <div *ngIf=\"(group.valid&&group.dirty&&group.touched )||(group.untouched&&group.invalid&&group.dirty) \">\r\n {{resetError()}}</div>\r\n\r\n </div>\r\n </div>\r\n</div>\r\n",
3924
3947
  styles: [""]
3925
3948
  },] }
3926
3949
  ];
@@ -4122,7 +4145,7 @@ TagsInputComponent.decorators = [
4122
4145
  { type: Component, args: [{
4123
4146
  // tslint:disable-next-line: component-selector
4124
4147
  selector: 'BBSF-TagsInput',
4125
- template: "<div class=\"b-control b-tags-input\">\r\n <div class=\"form-group validate is-invalid\" [formGroup]=\"group\">\r\n <div class=\"form-group row\" [formGroup]=\"TagsFormGroup\">\r\n\r\n <label class=\"b-label col-form-label col-sm-12 \" [ngClass]=\"(options.ViewType==1)?'col-md-12':'col-md-3'\"\r\n [hidden]=\"options.HideLabel\">\r\n {{options.LabelValue}}\r\n <span *ngIf=\"(options.ShowAsterisk&&options.IsRequired)||(options.IsRequired)\" class=\"text-danger Required-text\"\r\n aria-required=\"true\">*</span>\r\n </label>\r\n\r\n <div class=\"col-sm-12\" [ngClass]=\"(options.ViewType==1)?'':'col-md-9'\">\r\n <ngx-tags-input id=\"typeahead-http\" type=\"text\" class=\"form-control bnsights-control {{options.ExtraClasses}}\"\r\n dir=\"{{options.ForceDirection==2?'rtl':''}}\" [disabled]=\"options.IsDisabled\"\r\n aria-describedby=\"email-error\" aria-invalid=\"true\" formControlName=\"tags\"\r\n [class.is-invalid]=\"TagsFormControl.invalid && TagsFormControl.touched\"\r\n placeholder=\"{{options.Placeholder}}\" id=\"{{options.Name}}\"\r\n (onTagsChanged)=\"onTagsChanged($event)\" [(ngModel)]=\"tags\" removeLastOnBackspace=\"{{options.RemoveLastOnBackspace}}\" (onNoOptionsMatch)=\"onNoOptionsMatch($event)\" [options]=\"searchFunctionFactory(SearchKey.selected)\" #SearchKey scrollableOptions=\"{{options.ScrollableOptions}}\" scrollableOptionsInView=\"{{options.MaxSearchResultsCount}}\" (keypress)=\"AddTag($event.key,SearchKey)\" maxTags=\"{{options.MaxNumberTags}}\" minLengthBeforeOptions=\"{{options.MinSearchLength}}\" displayField=\"{{options.DatasourceItemText}}\" name=\"tags\">\r\n </ngx-tags-input>\r\n\r\n <div class=\"text-danger Required-text\"\r\n *ngIf=\"(TagsFormControl.invalid && TagsFormControl.touched)\">\r\n {{getErrorValidation(TagsFormControl.errors|keyvalue)}}\r\n </div>\r\n\r\n \r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n <div class=\"control-desc text-dark\">{{options.LabelDescription}}</div>\r\n </div>\r\n\r\n <div *ngIf=\"(group.valid&&group.dirty&&group.touched )||(group.untouched&&group.invalid&&group.dirty) \">{{resetError()}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n",
4148
+ template: "<div class=\"b-control b-tags-input\">\r\n <div class=\"form-group validate is-invalid\" [formGroup]=\"group\">\r\n <div class=\"form-group row\" [formGroup]=\"TagsFormGroup\">\r\n\r\n <label class=\"b-label col-form-label col-sm-12 \" [ngClass]=\"(options.ViewType==1)?'col-md-12':'col-md-3'\"\r\n [hidden]=\"options.HideLabel\">\r\n {{options.LabelValue}}\r\n <span *ngIf=\"(options.ShowAsterisk&&options.IsRequired)||(options.IsRequired)\" class=\"text-danger Required-text\"\r\n aria-required=\"true\">*</span>\r\n </label>\r\n\r\n <div class=\"col-sm-12\" [ngClass]=\"(options.ViewType==1)?'':'col-md-9'\">\r\n <b-tags-input id=\"typeahead-http\" type=\"text\" class=\"form-control bnsights-control {{options.ExtraClasses}}\"\r\n dir=\"{{options.ForceDirection==2?'rtl':''}}\" [disabled]=\"options.IsDisabled\" aria-describedby=\"email-error\"\r\n aria-invalid=\"true\" formControlName=\"tags\"\r\n [class.is-invalid]=\"TagsFormControl.invalid && TagsFormControl.touched\" placeholder=\"{{options.Placeholder}}\"\r\n id=\"{{options.Name}}\" (onTagsChanged)=\"onTagsChanged($event)\" [(ngModel)]=\"tags\"\r\n removeLastOnBackspace=\"{{options.RemoveLastOnBackspace}}\" (onNoOptionsMatch)=\"onNoOptionsMatch($event)\"\r\n [options]=\"searchFunctionFactory(SearchKey.selected)\" #SearchKey\r\n scrollableOptions=\"{{options.ScrollableOptions}}\" scrollableOptionsInView=\"{{options.MaxSearchResultsCount}}\"\r\n (keypress)=\"AddTag($event.key,SearchKey)\" [ViewMode]=\"options.TagInputMode\"\r\n maxTags=\"{{options.MaxNumberTags}}\" minLengthBeforeOptions=\"{{options.MinSearchLength}}\"\r\n [showDescription]=\"options.ShowDescription\" [defaultImageURL]=\"options.DefaultImgUrl\" name=\"tags\">\r\n </b-tags-input>\r\n\r\n <div class=\"text-danger Required-text\" *ngIf=\"(TagsFormControl.invalid && TagsFormControl.touched)\">\r\n {{getErrorValidation(TagsFormControl.errors|keyvalue)}}\r\n </div>\r\n\r\n\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n <div class=\"control-desc text-dark\">{{options.LabelDescription}}</div>\r\n </div>\r\n\r\n <div *ngIf=\"(group.valid&&group.dirty&&group.touched )||(group.untouched&&group.invalid&&group.dirty) \">\r\n {{resetError()}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n\r\n\r\n",
4126
4149
  styles: [".example-form{min-width:150px;max-width:500px;width:100%}.example-full-width{width:100%}.flip_V{transform:scaleY(-1)}\n"]
4127
4150
  },] }
4128
4151
  ];
@@ -4191,6 +4214,7 @@ class PagingComponent {
4191
4214
  this.direction = '';
4192
4215
  this.IsFirstCall = true;
4193
4216
  this.Items = new EventEmitter();
4217
+ this.subscriptions = new Subscription();
4194
4218
  this.ReinitializePaging = () => {
4195
4219
  this.IsFirstCall = true;
4196
4220
  this.getItemList(1, true);
@@ -4200,30 +4224,33 @@ class PagingComponent {
4200
4224
  this.getItemList(this.CurrentPage);
4201
4225
  };
4202
4226
  }
4227
+ ngOnDestroy() {
4228
+ this.subscriptions.unsubscribe();
4229
+ }
4203
4230
  ngOnInit() {
4204
4231
  if (this.options.IsLoadMoreControl)
4205
4232
  this.Sum = this.options.PageSize;
4206
4233
  if (this.options.DropdownFiltersControlNames != null && this.options.DropdownFiltersControlNames.length > 0) {
4207
4234
  const DropdownFiltersControlNames = this.options.DropdownFiltersControlNames;
4208
- this.onChangeService.GetValue().subscribe((value) => {
4235
+ this.subscriptions.add(this.onChangeService.GetValue().subscribe((value) => {
4209
4236
  let result = this.options.DropdownFiltersControlNames.filter((item) => item == value);
4210
4237
  if (result.length > 0) {
4211
4238
  this.IsFirstCall = true;
4212
4239
  this.CurrentPage = 1;
4213
4240
  this.getItemList(this.CurrentPage, true);
4214
4241
  }
4215
- });
4242
+ }));
4216
4243
  }
4217
4244
  if (this.options.BootstrapDatePickersFiltersControlNames != null && this.options.BootstrapDatePickersFiltersControlNames.length > 0) {
4218
4245
  const BootstrapDatePickersFiltersControlNames = this.options.BootstrapDatePickersFiltersControlNames;
4219
- this.onChangeService.GetValue().subscribe((value) => {
4246
+ this.subscriptions.add(this.onChangeService.GetValue().subscribe((value) => {
4220
4247
  let result = this.options.BootstrapDatePickersFiltersControlNames.filter((item) => item == value);
4221
4248
  if (result.length > 0) {
4222
4249
  this.IsFirstCall = true;
4223
4250
  this.CurrentPage = 1;
4224
4251
  this.getItemList(this.CurrentPage, true);
4225
4252
  }
4226
- });
4253
+ }));
4227
4254
  }
4228
4255
  this.IsFirstCall = true;
4229
4256
  this.getItemList(this.CurrentPage, true);
@@ -4254,6 +4281,16 @@ class PagingComponent {
4254
4281
  }, false);
4255
4282
  }
4256
4283
  }
4284
+ //Add click event on Reset Filter button
4285
+ if (this.options.ResetFilterButtonName != null) {
4286
+ const button = document.getElementsByName(this.options.ResetFilterButtonName)[0];
4287
+ if (button != undefined) {
4288
+ let element = button;
4289
+ element.addEventListener("click", (e) => {
4290
+ this.clearFilters();
4291
+ }, false);
4292
+ }
4293
+ }
4257
4294
  if (this.options.TypeaheadSearchControlNames != null && this.options.TypeaheadSearchControlNames.length > 0) {
4258
4295
  const TypeaheadSearchControlNames = this.options.TypeaheadSearchControlNames;
4259
4296
  for (let index = 0; index < TypeaheadSearchControlNames.length; index++) {
@@ -4301,6 +4338,8 @@ class PagingComponent {
4301
4338
  this.getItemList(this.CurrentPage, true);
4302
4339
  }
4303
4340
  getItemList(page, IsFilterUpdated = false) {
4341
+ if (this.options.StartPagingCallback)
4342
+ this.options.StartPagingCallback.call(null);
4304
4343
  let pagingDTO = new PagingDTO();
4305
4344
  let size = Number.parseInt(this.options.PageSize.toString());
4306
4345
  if (this.options.IsLoadMoreControl)
@@ -4311,46 +4350,15 @@ class PagingComponent {
4311
4350
  pagingDTO.TotalCount = this.totalRow;
4312
4351
  pagingDTO.IsFilterUpdated = IsFilterUpdated;
4313
4352
  let filters = {};
4314
- if (this.options.Filters != null && this.options.Filters != []) {
4315
- for (let index = 0; index < this.options.Filters.length; index++) {
4316
- if (this.options.Filters[index].FormControlName != null && this.options.Filters[index].FormControlName != "") {
4317
- const FormControlName = this.options.Filters[index].FormControlName;
4318
- let ControlValue = this.group.controls[FormControlName].value;
4319
- if (ControlValue != undefined && ControlValue != null) {
4320
- if (this.options.Filters[index].FilterType == FilterType.DatePicker) {
4321
- if (Array.isArray(ControlValue)) {
4322
- for (let element = 0; element < ControlValue.length; element++) {
4323
- const value = ControlValue[element];
4324
- filters[this.options.Filters[index].ActionParameterName] = value;
4325
- }
4326
- }
4327
- else {
4328
- filters[this.options.Filters[index].ActionParameterName] = ControlValue;
4329
- }
4330
- }
4331
- else {
4332
- if (this.options.Filters[index].FilterType == FilterType.AutocompleteTextBox)
4333
- ControlValue = JSON.stringify(ControlValue);
4334
- if (this.options.Filters[index].FilterType == FilterType.TagInput)
4335
- ControlValue = JSON.stringify(ControlValue);
4336
- filters[this.options.Filters[index].ActionParameterName] = ControlValue;
4337
- }
4338
- }
4339
- }
4340
- else {
4341
- const ElementjQuerySelector = this.options.Filters[index].jQuerySelector;
4342
- let ElementValue = document.querySelector(ElementjQuerySelector).value;
4343
- if (ElementValue != undefined && ElementValue != null)
4344
- filters[this.options.Filters[index].ActionParameterName] = ElementValue;
4345
- }
4346
- }
4347
- }
4353
+ filters = this.getFiltersValue();
4348
4354
  //Set Filters object that sent to action URL
4349
4355
  let filtersDTO = {
4350
4356
  PagingDTO: pagingDTO,
4351
4357
  Filters: filters
4352
4358
  };
4353
- this.requestHandlerService.post(this.options.ActionPostURL, this.options.Filters && this.options.Filters.length > 0 ? filtersDTO : pagingDTO)
4359
+ let requestOptions = new RequestOptionsModel();
4360
+ requestOptions.disableBlockUI = this.options.DisableBlockUI;
4361
+ this.requestHandlerService.post(this.options.ActionPostURL, this.options.Filters && this.options.Filters.length > 0 ? filtersDTO : pagingDTO, null, null, requestOptions)
4354
4362
  .subscribe((responseData) => {
4355
4363
  this.result = responseData.items; //this.castItems(responseData.items);
4356
4364
  let castedResult = plainToClass(this.options.TypeOfResponse, this.result, { excludeExtraneousValues: true });
@@ -4410,6 +4418,60 @@ class PagingComponent {
4410
4418
  this.itemsText = this.utilityService.getResourceValue("Item");
4411
4419
  }
4412
4420
  }
4421
+ clearFilters() {
4422
+ if (this.options.Filters != null && this.options.Filters != []) {
4423
+ for (let index = 0; index < this.options.Filters.length; index++) {
4424
+ if (this.options.Filters[index].FormControlName != null && this.options.Filters[index].FormControlName != "") {
4425
+ const FormControlName = this.options.Filters[index].FormControlName;
4426
+ this.group.controls[FormControlName].setValue(null);
4427
+ }
4428
+ }
4429
+ this.ReinitializePaging();
4430
+ }
4431
+ }
4432
+ getFiltersValue() {
4433
+ let filters = {};
4434
+ if (this.options.Filters != null && this.options.Filters != []) {
4435
+ for (let index = 0; index < this.options.Filters.length; index++) {
4436
+ if (this.options.Filters[index].FormControlName != null && this.options.Filters[index].FormControlName != "") {
4437
+ const FormControlName = this.options.Filters[index].FormControlName;
4438
+ let ControlValue = this.group.controls[FormControlName].value;
4439
+ if (ControlValue != undefined && ControlValue != null && ControlValue != "") {
4440
+ if (this.options.Filters[index].FilterType == FilterType.DatePicker) {
4441
+ //if (Array.isArray(ControlValue)) {
4442
+ // for (let element = 0; element < ControlValue.length; element++) {
4443
+ // const value = ControlValue[element];
4444
+ // filters[this.options.Filters[index].ActionParameterName] = value;
4445
+ // }
4446
+ //}
4447
+ //else {
4448
+ filters[this.options.Filters[index].ActionParameterName] = ControlValue;
4449
+ //}
4450
+ }
4451
+ else {
4452
+ if (this.options.Filters[index].FilterType == FilterType.AutocompleteTextBox)
4453
+ ControlValue = ControlValue;
4454
+ if (this.options.Filters[index].FilterType == FilterType.TagInput)
4455
+ ControlValue = ControlValue;
4456
+ filters[this.options.Filters[index].ActionParameterName] = ControlValue;
4457
+ }
4458
+ }
4459
+ else {
4460
+ filters[this.options.Filters[index].ActionParameterName] = null;
4461
+ }
4462
+ }
4463
+ else {
4464
+ const ElementjQuerySelector = this.options.Filters[index].jQuerySelector;
4465
+ let ElementValue = document.querySelector(ElementjQuerySelector).value;
4466
+ if (ElementValue != undefined && ElementValue != null)
4467
+ filters[this.options.Filters[index].ActionParameterName] = ElementValue;
4468
+ else
4469
+ filters[this.options.Filters[index].ActionParameterName] = null;
4470
+ }
4471
+ }
4472
+ }
4473
+ return filters;
4474
+ }
4413
4475
  }
4414
4476
  PagingComponent.decorators = [
4415
4477
  { type: Component, args: [{
@@ -6822,6 +6884,301 @@ BBSFDatePipe.ctorParameters = () => [
6822
6884
  { type: DatePipe }
6823
6885
  ];
6824
6886
 
6887
+ var TagInputView;
6888
+ (function (TagInputView) {
6889
+ TagInputView[TagInputView["WithImage"] = 1] = "WithImage";
6890
+ TagInputView[TagInputView["WithoutImage"] = 2] = "WithoutImage";
6891
+ TagInputView[TagInputView["WithInitial"] = 3] = "WithInitial";
6892
+ })(TagInputView || (TagInputView = {}));
6893
+
6894
+ const noop = () => { };
6895
+ const ɵ0$1 = noop;
6896
+ const TAGS_INPUT_TEMPLATE = `
6897
+
6898
+ <div class="tags-input">
6899
+ <span class="tags-input__tag label label-primary badge badge-primary" *ngFor="let tag of tags">
6900
+ {{tag[displayField]}}
6901
+ <span *ngIf="isDeleteable(tag)" role="button" class="tags-input__tag-remove-btn" (click)="removeTag(tag)"
6902
+ (touch)="removeTag(tag)">
6903
+ <span aria-hidden="true">&times;</span>
6904
+ <span class="sr-only">Close</span>
6905
+ </span>
6906
+ </span>
6907
+
6908
+ <input *ngIf="options === null; else withTypeahead" class="tags-input__input-field" type="text"
6909
+ [placeholder]="getPlaceholder()" name="tags" (keyup.enter)="addTag(tagInput)"
6910
+ (keydown.backspace)="removeLastTag(tagInput)" [disabled]="!canAddTags || maximumOfTagsReached()"
6911
+ [hidden]="!canAddTags || maximumOfTagsReached()" #tagInput />
6912
+
6913
+ <ng-template #withTypeahead>
6914
+ <span [ngSwitch]="ViewMode">
6915
+
6916
+ <span *ngSwitchCase="tagInputViewEnum.WithImage">
6917
+ <input *ngIf="(options !== null)" class="tags-input__input-field" type="text" [placeholder]="getPlaceholder()"
6918
+ name="tags" (keydown.backspace)="removeLastTag(tagInput)" [(ngModel)]="selected" [typeahead]="options"
6919
+ [typeaheadOptionField]="displayField" (typeaheadOnSelect)="typeaheadOnSelect($event)"
6920
+ (typeaheadNoResults)="typeaheadOnNoMatch($event)" [typeaheadMinLength]="minLengthBeforeOptions"
6921
+ [typeaheadScrollable]="scrollableOptions" [typeaheadLatinize]="true"
6922
+ [typeaheadItemTemplate]="itemTemplateWithImage" [typeaheadOptionsInScrollableView]="scrollableOptionsInView"
6923
+ [disabled]="!canAddTags || maximumOfTagsReached()" [hidden]="!canAddTags || maximumOfTagsReached()"
6924
+ #tagInput />
6925
+ </span>
6926
+
6927
+ <span *ngSwitchCase="tagInputViewEnum.WithoutImage">
6928
+ <input *ngIf="(options !== null)" class="tags-input__input-field" type="text" [placeholder]="getPlaceholder()"
6929
+ name="tags" (keydown.backspace)="removeLastTag(tagInput)" [(ngModel)]="selected" [typeahead]="options"
6930
+ [typeaheadOptionField]="displayField" (typeaheadOnSelect)="typeaheadOnSelect($event)"
6931
+ (typeaheadNoResults)="typeaheadOnNoMatch($event)" [typeaheadMinLength]="minLengthBeforeOptions"
6932
+ [typeaheadScrollable]="scrollableOptions" [typeaheadLatinize]="true"
6933
+ [typeaheadItemTemplate]="itemTemplateWithoutImage"
6934
+ [typeaheadOptionsInScrollableView]="scrollableOptionsInView"
6935
+ [disabled]="!canAddTags || maximumOfTagsReached()" [hidden]="!canAddTags || maximumOfTagsReached()"
6936
+ #tagInput />
6937
+ </span>
6938
+
6939
+ <span *ngSwitchCase="tagInputViewEnum.WithInitial">
6940
+ <input *ngIf="(options !== null)" class="tags-input__input-field" type="text" [placeholder]="getPlaceholder()"
6941
+ name="tags" (keydown.backspace)="removeLastTag(tagInput)" [(ngModel)]="selected" [typeahead]="options"
6942
+ [typeaheadOptionField]="displayField" (typeaheadOnSelect)="typeaheadOnSelect($event)"
6943
+ (typeaheadNoResults)="typeaheadOnNoMatch($event)" [typeaheadMinLength]="minLengthBeforeOptions"
6944
+ [typeaheadScrollable]="scrollableOptions" [typeaheadLatinize]="true"
6945
+ [typeaheadItemTemplate]="itemTemplateWithoutInitial"
6946
+ [typeaheadOptionsInScrollableView]="scrollableOptionsInView"
6947
+ [disabled]="!canAddTags || maximumOfTagsReached()" [hidden]="!canAddTags || maximumOfTagsReached()"
6948
+ #tagInput />
6949
+ </span>
6950
+
6951
+ <span *ngSwitchDefault>
6952
+ <input *ngIf="(options !== null)" class="tags-input__input-field" type="text" [placeholder]="getPlaceholder()"
6953
+ name="tags" (keydown.backspace)="removeLastTag(tagInput)" [(ngModel)]="selected" [typeahead]="options"
6954
+ [typeaheadOptionField]="displayField" (typeaheadOnSelect)="typeaheadOnSelect($event)"
6955
+ (typeaheadNoResults)="typeaheadOnNoMatch($event)" [typeaheadMinLength]="minLengthBeforeOptions"
6956
+ [typeaheadScrollable]="scrollableOptions" [typeaheadLatinize]="true"
6957
+ [typeaheadItemTemplate]="itemTemplateWithoutImage"
6958
+ [typeaheadOptionsInScrollableView]="scrollableOptionsInView"
6959
+ [disabled]="!canAddTags || maximumOfTagsReached()" [hidden]="!canAddTags || maximumOfTagsReached()"
6960
+ #tagInput />
6961
+ </span>
6962
+
6963
+ </span>
6964
+
6965
+ </ng-template>
6966
+
6967
+ <ng-template #itemTemplateWithImage let-model="item" let-index="index">
6968
+ <img
6969
+ style="border-radius:50%; height:40px; width: 40px; float:left; margin-left:5px ; margin-top: 5px;margin-right: 5px;"
6970
+ src="{{(model.imageURL?model.imageURL:defaultImageURL)}}" />
6971
+ <div>
6972
+ <a [innerHTML]="model.name"></a>
6973
+ <p *ngIf="showDescription">
6974
+ {{model.description}}
6975
+ </p>
6976
+ </div>
6977
+ </ng-template>
6978
+
6979
+ <ng-template #itemTemplateWithoutImage let-model="item" let-index="index">
6980
+ <div>
6981
+ <a [innerHTML]="model.name"></a>
6982
+ <p *ngIf="showDescription">
6983
+ {{model.description}}
6984
+ </p>
6985
+ </div>
6986
+ </ng-template>
6987
+
6988
+ <ng-template #itemTemplateWithoutInitial let-model="item" let-index="index">
6989
+ <div class="user-image">
6990
+ <div class="user-initials">{{calculateInitials(model.name)}}</div>
6991
+ </div>
6992
+ <div>
6993
+ <a [innerHTML]="model.name"></a>
6994
+ <p *ngIf="showDescription">
6995
+ {{model.description}}
6996
+ </p>
6997
+ </div>
6998
+ </ng-template>
6999
+ </div>
7000
+ `;
7001
+ const TAGS_INPUT_STYLE = `
7002
+ :host {
7003
+ overflow: auto;
7004
+ white-space: nowrap;
7005
+ }
7006
+
7007
+ .tags-input {
7008
+ align-items: center;
7009
+ display: flex;
7010
+ flex-wrap: wrap;
7011
+ }
7012
+
7013
+ .tags-input__tag {
7014
+ display: inline-block;
7015
+ margin-bottom: 2px;
7016
+ margin-right: 5px;
7017
+ padding-right: 0.3em;
7018
+ }
7019
+
7020
+ .tags-input__tag-remove-btn {
7021
+ cursor: pointer;
7022
+ display: inline-block;
7023
+ font-size: 12px;
7024
+ margin: -3px 0 0 3px;
7025
+ padding: 0;
7026
+ vertical-align: top;
7027
+ }
7028
+
7029
+ .tags-input__input-field {
7030
+ border: none;
7031
+ flex-grow: 1;
7032
+ outline: none;
7033
+ }
7034
+ `;
7035
+ const CUSTOM_INPUT_CONTROL_VALUE_ACCESSOR = {
7036
+ provide: NG_VALUE_ACCESSOR,
7037
+ useExisting: forwardRef(() => BTagsInputComponent),
7038
+ multi: true
7039
+ };
7040
+ class BTagsInputComponent {
7041
+ constructor() {
7042
+ this.selected = '';
7043
+ this.tags = [];
7044
+ this.onTouchedCallback = noop;
7045
+ this.onChangeCallback = noop;
7046
+ this.tagInputViewEnum = TagInputView;
7047
+ this.removeLastOnBackspace = false;
7048
+ this.canDeleteTags = true;
7049
+ this.canAddTags = true;
7050
+ this.ViewMode = TagInputView.WithoutImage;
7051
+ this.placeholder = '';
7052
+ this.showDescription = true;
7053
+ this.options = null;
7054
+ this.defaultImageURL = null;
7055
+ this.displayField = 'name';
7056
+ this.minLengthBeforeOptions = 1;
7057
+ this.scrollableOptions = false;
7058
+ this.scrollableOptionsInView = 5;
7059
+ this.onTagsChanged = new EventEmitter();
7060
+ this.onMaxTagsReached = new EventEmitter();
7061
+ this.onNoOptionsMatch = new EventEmitter();
7062
+ }
7063
+ getPlaceholder() {
7064
+ if (this.tags && this.tags.length > 0) {
7065
+ return '';
7066
+ }
7067
+ return this.placeholder;
7068
+ }
7069
+ tagsChanged(type, tag) {
7070
+ this.onChangeCallback(this.tags);
7071
+ this.onTagsChanged.emit({
7072
+ change: type,
7073
+ tag: tag
7074
+ });
7075
+ if (this.maximumOfTagsReached()) {
7076
+ this.onMaxTagsReached.emit();
7077
+ }
7078
+ }
7079
+ removeLastTag(tagInput) {
7080
+ if (!this.removeLastOnBackspace || !this.tags.length) {
7081
+ return;
7082
+ }
7083
+ if (tagInput.value === '') {
7084
+ this.removeTag(this.tags[this.tags.length - 1]);
7085
+ }
7086
+ }
7087
+ addTag(tagInput) {
7088
+ if (tagInput.value.trim() !== '') {
7089
+ let tag = {
7090
+ [this.displayField]: tagInput.value
7091
+ };
7092
+ this.addPredefinedTag(tag);
7093
+ }
7094
+ tagInput.value = '';
7095
+ }
7096
+ addPredefinedTag(tag) {
7097
+ if (!this.maximumOfTagsReached()) {
7098
+ this.tags.push(tag);
7099
+ this.tagsChanged('add', tag);
7100
+ }
7101
+ }
7102
+ removeTag(tagToRemove) {
7103
+ if (!this.isDeleteable(tagToRemove)) {
7104
+ return;
7105
+ }
7106
+ this.tags = this.tags.filter(tag => tagToRemove !== tag);
7107
+ this.tagsChanged('remove', tagToRemove);
7108
+ }
7109
+ maximumOfTagsReached() {
7110
+ return typeof this.maxTags !== 'undefined' && this.tags && this.tags.length >= this.maxTags;
7111
+ }
7112
+ isDeleteable(tag) {
7113
+ if (typeof tag.deleteable !== "undefined" && !tag.deleteable) {
7114
+ return false;
7115
+ }
7116
+ return this.canDeleteTags;
7117
+ }
7118
+ typeaheadOnSelect(e) {
7119
+ if (typeof e.item === 'string') {
7120
+ this.addPredefinedTag({
7121
+ [this.displayField]: e.value
7122
+ });
7123
+ }
7124
+ else {
7125
+ this.addPredefinedTag(e.item);
7126
+ }
7127
+ this.selected = '';
7128
+ }
7129
+ typeaheadOnNoMatch(e) {
7130
+ if (typeof this.onNoOptionsMatch !== 'undefined') {
7131
+ this.onNoOptionsMatch.emit(e);
7132
+ }
7133
+ }
7134
+ writeValue(value) {
7135
+ if (value !== this.tags) {
7136
+ this.tags = value;
7137
+ }
7138
+ }
7139
+ registerOnChange(fn) {
7140
+ this.onChangeCallback = fn;
7141
+ }
7142
+ registerOnTouched(fn) {
7143
+ this.onTouchedCallback = fn;
7144
+ }
7145
+ calculateInitials(name) {
7146
+ debugger;
7147
+ var fullName = name.split(' ');
7148
+ var initials = "";
7149
+ if (fullName.length > 1)
7150
+ initials = fullName.shift().charAt(0) + fullName.pop().charAt(0);
7151
+ else
7152
+ initials = fullName.shift().charAt(0);
7153
+ return initials.toUpperCase();
7154
+ }
7155
+ }
7156
+ BTagsInputComponent.decorators = [
7157
+ { type: Component, args: [{
7158
+ selector: 'b-tags-input',
7159
+ template: TAGS_INPUT_TEMPLATE,
7160
+ providers: [CUSTOM_INPUT_CONTROL_VALUE_ACCESSOR],
7161
+ styles: [TAGS_INPUT_STYLE]
7162
+ },] }
7163
+ ];
7164
+ BTagsInputComponent.propDecorators = {
7165
+ maxTags: [{ type: Input }],
7166
+ removeLastOnBackspace: [{ type: Input }],
7167
+ canDeleteTags: [{ type: Input }],
7168
+ canAddTags: [{ type: Input }],
7169
+ ViewMode: [{ type: Input }],
7170
+ placeholder: [{ type: Input }],
7171
+ showDescription: [{ type: Input }],
7172
+ options: [{ type: Input }],
7173
+ defaultImageURL: [{ type: Input }],
7174
+ minLengthBeforeOptions: [{ type: Input }],
7175
+ scrollableOptions: [{ type: Input }],
7176
+ scrollableOptionsInView: [{ type: Input }],
7177
+ onTagsChanged: [{ type: Output }],
7178
+ onMaxTagsReached: [{ type: Output }],
7179
+ onNoOptionsMatch: [{ type: Output }]
7180
+ };
7181
+
6825
7182
  let options;
6826
7183
  let AppInjector;
6827
7184
  FullCalendarModule.registerPlugins([
@@ -6871,7 +7228,8 @@ BBSFControlsModule.decorators = [
6871
7228
  RepeaterItemFieldComponent,
6872
7229
  RepeaterTableComponent,
6873
7230
  BBSFDateTimePipe,
6874
- BBSFDatePipe
7231
+ BBSFDatePipe,
7232
+ BTagsInputComponent
6875
7233
  ],
6876
7234
  imports: [
6877
7235
  CommonModule,
@@ -7135,6 +7493,7 @@ class AutocompleteOptions extends ControlOptionsBase {
7135
7493
  // Params: object={};
7136
7494
  this.QueryParam = 'query';
7137
7495
  this.SelectedValue = null;
7496
+ this.ItemWithImage = false;
7138
7497
  }
7139
7498
  }
7140
7499
 
@@ -7153,26 +7512,29 @@ class TagsInputOptions extends ControlOptionsBase {
7153
7512
  /** Allow User To Add Tags */
7154
7513
  this.CanAddTags = true;
7155
7514
  /** Set Max Number Of Tags That User Can Be Select */
7156
- this.MaxNumberTags = 100;
7515
+ this.MaxNumberTags = 5;
7157
7516
  /** Set Min Length Of Char To Call Search Function */
7158
7517
  this.MinSearchLength = 1;
7159
7518
  /**Allow Scrolle Option In Dropdown */
7160
7519
  this.ScrollableOptions = true;
7161
7520
  /** Set Max Number Of Tags That will Be Appear ON Dropdown */
7162
- this.MaxSearchResultsCount = 5;
7521
+ this.MaxSearchResultsCount = 10;
7163
7522
  /**Value Name Of Tag Option In Dropdown */
7164
- this.DatasourceItemValue = "key";
7523
+ this.DatasourceItemValue = "id";
7165
7524
  /**Text Of Tag That Will Show In Dropdown */
7166
- this.DatasourceItemText = "value";
7525
+ this.DatasourceItemText = "name";
7167
7526
  /**Set Query Param Name By Default It's 'query'*/
7168
7527
  this.QueryParamName = "query";
7169
7528
  /**Set Query Param Name By Default It's 'query'*/
7170
7529
  this.SelectedItemsParamName = "SelectedItems";
7171
7530
  /**Set Filter Param Name By Default It's 'query'*/
7172
7531
  this.FilterParamName = "";
7532
+ this.DefaultImgUrl = "";
7173
7533
  /** allow add value of TagInput dosn't exist in list*/
7174
7534
  this.AllowNewSelection = false;
7175
7535
  this.ValidationToken = null;
7536
+ this.TagInputMode = TagInputView.WithoutImage;
7537
+ this.ShowDescription = true;
7176
7538
  }
7177
7539
  }
7178
7540
 
@@ -7223,6 +7585,10 @@ class PagingOptions {
7223
7585
  /**listens to the window scroll instead of the actual element scroll. this allows to invoke a callback function in the scope of the element while listenning to the window scroll. */
7224
7586
  this.ScrollWindow = true;
7225
7587
  this.ForceDirection = ForceDirection.English;
7588
+ /** Clear Filter button selector */
7589
+ this.ResetFilterButtonName = null;
7590
+ this.DisableBlockUI = false;
7591
+ this.StartPagingCallback = null;
7226
7592
  }
7227
7593
  }
7228
7594
 
@@ -7631,5 +7997,5 @@ var FileType;
7631
7997
  * Generated bundle index. Do not edit.
7632
7998
  */
7633
7999
 
7634
- export { AppInjector, Attribute, AutocompleteDTO, AutocompleteOptions, AutocompleteTextBoxComponent, BBSFControlsModule, BBSFDatePipe, BBSFDateTimePipe, CalendarComponent, CalendarEventDTO, CalendarOptions, CalendarView, CancelDTO, CheckBoxComponent, CheckBoxOptions, ConfirmationModalComponent, ConfirmationModalOptions, ControlLayout, ControlOptionsBase, ControlUtility, Country, CustomValidation, CustomValidator, DataType, DateInputComponent, DatePickerOptions, DropdownListComponent, DropdownListItem, DropdownOptions, EditPersonalImage, EnglishArabicDTO, ErrorMassageValidation, FileType, FileUploadComponent, FileUploadModel, FileUploadOptions, FilterItem, FilterType, FontSize, ForceDirection, FormComponent, FormOptions, GlobalSettings, HtmlEditorComponent, HtmlEditorOptions, IconPosition, ImageType, ImageUploadOptions, ImageUploaderComponent, InputType, Insert, JwPaginationComponent, LanguageMode, LanguageValidation, MapAutoCompleteComponent, MapAutoCompleteOptions, MapAutocompleteDTO, MenuListType, Misc, MultiLingualHtmlEditorComponent, MultiLingualHtmlEditorOptions, MultiLingualTextAreaComponent, MultiLingualTextAreaOptions, MultiLingualTextBoxComponent, MultiLingualTextBoxOptions, MultilingualControlOptionsBase, MultipleFileUploadModel, NgTemplateNameDirective, OnPagingFiltersChangeService, PagingActionMode, PagingComponent, PagingDTO, PagingOptions, Para, PermissionSets, PhoneComponent, PhoneOptions, PickerType, ProfileImageUploadOptions, ProfileImageUploaderComponent, ProfilePictureDTO, RadioButtonComponent, RadioButtonItem, RadioButtonOptions, RangeNumber, RenderComponentService, RepeaterComponent, RepeaterField, RepeaterFieldBuilderComponent, RepeaterItemFieldComponent, RepeaterOptions, RepeaterTableComponent, SaveDTO, SelectMode, StartView, Style, StyleConfirmationMode, TagsInputComponent, TagsInputDTO, TagsInputOptions, TextAreaComponent, TextAreaOptions, TextBoxOptions, TextboxComponent, ToggleSlideOptions, ToggleslideComponent, UploadPersonalImage, environment, options, ɵ0 };
8000
+ export { AppInjector, Attribute, AutocompleteDTO, AutocompleteOptions, AutocompleteTextBoxComponent, BBSFControlsModule, BBSFDatePipe, BBSFDateTimePipe, CalendarComponent, CalendarEventDTO, CalendarOptions, CalendarView, CancelDTO, CheckBoxComponent, CheckBoxOptions, ConfirmationModalComponent, ConfirmationModalOptions, ControlLayout, ControlOptionsBase, ControlUtility, Country, CustomValidation, CustomValidator, DataType, DateInputComponent, DatePickerOptions, DefaultIntl, DropdownListComponent, DropdownListItem, DropdownOptions, EditPersonalImage, EnglishArabicDTO, ErrorMassageValidation, FileType, FileUploadComponent, FileUploadModel, FileUploadOptions, FilterItem, FilterType, FontSize, ForceDirection, FormComponent, FormOptions, GlobalSettings, HtmlEditorComponent, HtmlEditorOptions, IconPosition, ImageType, ImageUploadOptions, ImageUploaderComponent, InputType, Insert, JwPaginationComponent, LanguageMode, LanguageValidation, MapAutoCompleteComponent, MapAutoCompleteOptions, MapAutocompleteDTO, MenuListType, Misc, MultiLingualHtmlEditorComponent, MultiLingualHtmlEditorOptions, MultiLingualTextAreaComponent, MultiLingualTextAreaOptions, MultiLingualTextBoxComponent, MultiLingualTextBoxOptions, MultilingualControlOptionsBase, MultipleFileUploadModel, NgTemplateNameDirective, OnPagingFiltersChangeService, PagingActionMode, PagingComponent, PagingDTO, PagingOptions, Para, PermissionSets, PhoneComponent, PhoneOptions, PickerType, ProfileImageUploadOptions, ProfileImageUploaderComponent, ProfilePictureDTO, RadioButtonComponent, RadioButtonItem, RadioButtonOptions, RangeNumber, RenderComponentService, RepeaterComponent, RepeaterField, RepeaterFieldBuilderComponent, RepeaterItemFieldComponent, RepeaterOptions, RepeaterTableComponent, SaveDTO, SelectMode, StartView, Style, StyleConfirmationMode, TagInputView, TagsInputComponent, TagsInputDTO, TagsInputOptions, TextAreaComponent, TextAreaOptions, TextBoxOptions, TextboxComponent, ToggleSlideOptions, ToggleslideComponent, UploadPersonalImage, environment, options, ɵ0, BTagsInputComponent as ɵa };
7635
8001
  //# sourceMappingURL=bnsights-bbsf-controls.js.map