From 225d49f59259c30511b27848dddec90a93fd131f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yi=C4=9Fit=20FINDIKLI?= Date: Tue, 4 May 2021 19:44:13 +0300 Subject: [PATCH] #9532 - empty template and I18N support for Dropdown --- src/app/components/dropdown/dropdown.ts | 36 ++++++++++++++++--- .../components/dropdown/dropdowndemo.html | 12 +++++++ 2 files changed, 43 insertions(+), 5 deletions(-) diff --git a/src/app/components/dropdown/dropdown.ts b/src/app/components/dropdown/dropdown.ts index 308dd882946..370a5cdb527 100755 --- a/src/app/components/dropdown/dropdown.ts +++ b/src/app/components/dropdown/dropdown.ts @@ -3,7 +3,7 @@ import {NgModule,Component,ElementRef,OnInit,AfterViewInit,AfterContentInit,Afte QueryList,ViewChild,TemplateRef,forwardRef,ChangeDetectorRef,NgZone,ViewRef,ChangeDetectionStrategy, ViewEncapsulation} from '@angular/core'; import {trigger,style,transition,animate,AnimationEvent} from '@angular/animations'; import {CommonModule} from '@angular/common'; -import {SelectItem} from 'primeng/api'; +import {PrimeNGConfig, SelectItem, TranslationKeys} from 'primeng/api'; import {SharedModule,PrimeTemplate, FilterService} from 'primeng/api'; import {DomHandler, ConnectedOverlayScrollHandler} from 'primeng/dom'; import {ObjectUtils} from 'primeng/utils'; @@ -118,12 +118,18 @@ export class DropdownItem { -
  • +
  • - {{emptyFilterMessage}} + {{emptyFilterMessageLabel}}
  • +
  • + + {{emptyMessageLabel}} + + +
  • @@ -212,7 +218,9 @@ export class Dropdown implements OnInit,AfterViewInit,AfterContentInit,AfterView @Input() showClear: boolean; - @Input() emptyFilterMessage: string = 'No results found'; + @Input() emptyFilterMessage: string = ''; + + @Input() emptyMessage: string = ''; @Input() virtualScroll: boolean; @@ -306,6 +314,8 @@ export class Dropdown implements OnInit,AfterViewInit,AfterContentInit,AfterView emptyFilterTemplate: TemplateRef; + emptyTemplate: TemplateRef; + selectedOption: any; _options: any[]; @@ -360,7 +370,7 @@ export class Dropdown implements OnInit,AfterViewInit,AfterContentInit,AfterView preventModelTouched: boolean; - constructor(public el: ElementRef, public renderer: Renderer2, public cd: ChangeDetectorRef, public zone: NgZone, public filterService: FilterService) {} + constructor(public el: ElementRef, public renderer: Renderer2, public cd: ChangeDetectorRef, public zone: NgZone, public filterService: FilterService, public config: PrimeNGConfig) {} ngAfterContentInit() { this.templates.forEach((item) => { @@ -385,6 +395,10 @@ export class Dropdown implements OnInit,AfterViewInit,AfterContentInit,AfterView this.emptyFilterTemplate = item.template; break; + case 'empty': + this.emptyTemplate = item.template; + break; + case 'group': this.groupTemplate = item.template; break; @@ -435,6 +449,14 @@ export class Dropdown implements OnInit,AfterViewInit,AfterContentInit,AfterView return this.selectedOption ? this.getOptionLabel(this.selectedOption) : null; } + get emptyMessageLabel(): string { + return this.emptyMessage || this.config.getTranslation(TranslationKeys.EMPTY_MESSAGE); + } + + get emptyFilterMessageLabel(): string { + return this.emptyFilterMessage || this.config.getTranslation(TranslationKeys.EMPTY_FILTER_MESSAGE); + } + updateEditableLabel(): void { if (this.editableInputViewChild && this.editableInputViewChild.nativeElement) { this.editableInputViewChild.nativeElement.value = (this.selectedOption ? this.getOptionLabel(this.selectedOption) : this.value||''); @@ -595,6 +617,10 @@ export class Dropdown implements OnInit,AfterViewInit,AfterContentInit,AfterView return !(this.el.nativeElement.isSameNode(event.target) || this.el.nativeElement.contains(event.target) || (this.overlay && this.overlay.contains( event.target))); } + isEmpty() { + return !this.optionsToDisplay || (this.optionsToDisplay && this.optionsToDisplay.length === 0); + } + onEditableInputClick() { this.bindDocumentClickListener(); } diff --git a/src/app/showcase/components/dropdown/dropdowndemo.html b/src/app/showcase/components/dropdown/dropdowndemo.html index 7ac41395003..57c0bea63b3 100755 --- a/src/app/showcase/components/dropdown/dropdowndemo.html +++ b/src/app/showcase/components/dropdown/dropdowndemo.html @@ -361,6 +361,18 @@
    Properties
    false When present, it specifies that the component cannot be edited. + + emptyMessage + string + No records found. + Text to display when there is no data. Defaults to global value in i18n translation configuration. + + + emptyFilterMessage + string + No results found + Text to display when filtering does not return any results. Defaults to global value in i18n translation configuration. + ariaLabelledBy string