@engie-group/fluid-design-system-angular
Version:
Fluid Design System Angular
178 lines (151 loc) • 3.8 kB
text/typescript
import { CommonModule } from '@angular/common';
import { Component, Input, TemplateRef, ViewChild, ViewEncapsulation } from '@angular/core';
import { Utils } from '../../utils/utils.util';
import { BadgeComponent } from '../badge/badge.component';
import { BadgeEmphasis, BadgeSize, BadgeVariant } from '../badge/badge.model';
import { TooltipDirective } from '../tooltip/directives/tooltip.directive';
import { TooltipOptions } from '../tooltip/tooltip.model';
import { AvatarSize } from './avatar.model';
export class AvatarComponent {
private avatarClassName = 'nj-avatar';
/**
* Link href, if set avatar is a link <a>
*/
href: string;
/**
* Initials of avatar, max 3 characters if a string with a bigger length than 3 characters only 3 first characters are taken
*/
initials: string;
/**
* Text alternative for the avatar
*/
label: string;
/**
* Avatar size
*/
size: AvatarSize;
/**
* Whether avatar has a picture or not
*/
hasPicture: boolean;
/**
* Whether avatar is clickable or not
*/
isClickable: boolean;
/**
* Notifications number or string
*/
notification: number | string;
/**
* Max notification number
*/
notificationCapedValue: number;
/**
* Notification emphasis
*/
notificationEmphasis: BadgeEmphasis;
/**
* Notification color
*/
notificationVariant: BadgeVariant = 'information';
/**
* Unit label for `nj-badge`
*/
notificationUnitLabel?: string;
/**
* Used for NJAvatarGroup as the last tile of the group
**/
isRemainingCount?: boolean;
/**
* Tooltip's options
**/
tooltipOptions?: TooltipOptions;
/**
* @ignore
*/
avatarTemplate: TemplateRef<any>;
constructor() {}
/**
* @ignore
*/
getFormattedInitials(): string {
if (this.initials?.length > 3) {
return this?.initials.slice(0, 3);
} else {
return this.initials;
}
}
/**
* @ignore
*/
getBadgeSize(): BadgeSize {
switch (this.size) {
case 'xl':
return 'lg';
default:
return 'md';
}
}
/**
* @ignore
*/
getAvatarSizeClass(): string {
return this.size ? `${this.avatarClassName}--${this.size}` : '';
}
/**
* @ignore
*/
getAvatarDefaultIconClass(): string {
return !this.hasInitials() && !this.hasPicture ? `${this.avatarClassName}--default-icon` : '';
}
/**
* @ignore
*/
getAvatarInitialsClass(): string {
return this.hasInitials() && !this.hasPicture ? `${this.avatarClassName}--initials` : '';
}
/**
* @ignore
*/
getAvatarIsClickableClass(): string {
return this.isClickable ? `${this.avatarClassName}--clickable` : '';
}
/**
* @ignore
*/
getHasPictureClass(): string {
return this.hasPicture ? `${this.avatarClassName}--picture` : '';
}
/**
* @ignore
*/
getAvatarIsRemainingCountClass(): string {
return this.isRemainingCount ? `${this.avatarClassName}--remaining-count` : '';
}
/**
* @ignore
*/
hasInitials(): boolean {
return !Utils.isUndefinedOrNull(this.initials) && this.initials?.trim() !== '';
}
/**
* @ignore
*/
getAvatarClasses(): string[] {
return [
this.getAvatarDefaultIconClass(),
this.getAvatarSizeClass(),
this.getAvatarInitialsClass(),
this.getAvatarIsClickableClass(),
this.getAvatarIsRemainingCountClass(),
this.getHasPictureClass()
];
}
}