src/lib/directives/htmlControlDirective/htmlControl.directive.ts
Angular directive to set properties, styles and attributes to HTML Controls.
Selector | [wmHtmlControl] |
Properties |
Methods |
Inputs |
Outputs |
HostListeners |
Accessors |
constructor(element: ElementRef, renderer: Renderer2, wmService: WebMapService)
|
||||||||||||
Creates an instance of HtmlControlDirective.
Parameters :
|
model | |
Type : any
|
|
Property used to save the model. |
OnClick | |
Type : EventEmitter<EventData>
|
|
OnClick event emitter. |
change | ||||
Arguments : '$event'
|
||||
Listener for the change event.
Parameters :
|
click | ||||
Arguments : '$event'
|
||||
Listener for the click event.
Parameters :
|
applyAtributes |
applyAtributes()
|
Apply WebForms HTML attributes.
Returns :
void
|
applyProperties |
applyProperties()
|
Apply WebForms properties.
Returns :
void
|
changeInputFileHandler | ||||||
changeInputFileHandler(event: any)
|
||||||
Handles the change event for the input file. Posts the selected file to the server.
Parameters :
Returns :
void
|
changeListener | ||||||
changeListener(event: any)
|
||||||
Decorators :
@HostListener('change', ['$event'])
|
||||||
Listener for the change event.
Parameters :
Returns :
void
|
click | ||||||
click(event: any)
|
||||||
Decorators :
@serverEvent('Click')
|
||||||
Triggers the OnClick emitter.
Parameters :
Returns :
void
|
clickListener | ||||||
clickListener(event: any)
|
||||||
Decorators :
@HostListener('click', ['$event'])
|
||||||
Listener for the click event.
Parameters :
Returns :
void
|
detectChanges |
detectChanges()
|
Empty detectChanges method. Added in the directive to use the events mechanism.
Returns :
void
|
isBindedEvent | ||||||
isBindedEvent(event: string)
|
||||||
Indicates if an event is binded in the server or not. Added in the directive to validate and use the events mechanism.
Parameters :
Returns :
boolean
{boolean} |
isInputFile | ||||||
isInputFile(event: any)
|
||||||
Validates if the event is coming from an input file element.
Parameters :
Returns :
boolean
{boolean} |
ngOnInit |
ngOnInit()
|
OnInit lifecycle hook.
Returns :
void
|
uploadFileUrl |
Type : string
|
Default value : 'api/inputfile/UploadFile'
|
Url to upload the file. |
id |
getid()
|
Gets the Id property.
Returns :
string
|
name |
getname()
|
Gets the name property.
Returns :
string
|
import {
Directive,
ElementRef,
EventEmitter,
HostListener,
Input,
OnInit,
Output,
Renderer2
} from '@angular/core';
import { EventData, serverEvent } from '@mobilize/base-components';
import { WebMapService } from '@mobilize/angularclient';
/**
* Angular directive to set properties, styles and attributes to HTML Controls.
*
* @export
* @class HtmlControlDirective
* @implements {OnInit}
*/
@Directive({
selector: '[wmHtmlControl]'
})
export class HtmlControlDirective implements OnInit {
/**
* Property used to save the model.
*
* @type {*}
* @memberof HtmlControlDirective
*/
@Input()
model: any;
/**
* OnClick event emitter.
*
* @type {EventEmitter<EventData>}
* @memberof HtmlControlDirective
*/
@Output()
OnClick: EventEmitter<EventData> = new EventEmitter<EventData>();
/**
* Url to upload the file.
*
* @memberof HtmlControlDirective
*/
uploadFileUrl = 'api/inputfile/UploadFile';
/**
* Creates an instance of HtmlControlDirective.
*
* @param {ElementRef} element
* @param {Renderer2} renderer
* @param {WebMapService} wmService
* @memberof HtmlControlDirective
*/
constructor(
private element: ElementRef,
private renderer: Renderer2,
private wmService: WebMapService
) {}
/**
* OnInit lifecycle hook.
*
* @memberof HtmlControlDirective
*/
ngOnInit() {
this.applyProperties();
this.applyAtributes();
}
/**
* Gets the Id property.
*
* @readonly
* @type {string}
* @memberof HtmlControlDirective
*/
get id(): string {
return this.model?.id ?? '';
}
/**
* Gets the name property.
*
* @readonly
* @type {string}
* @memberof HtmlControlDirective
*/
get name(): string {
return this.model?.Name ?? '';
}
/**
* Apply WebForms properties.
*
* @memberof HtmlControlDirective
*/
applyProperties(): void {
/* c8 ignore else*/
if (this.model) {
/* c8 ignore else*/
if (this.model.InnerText) {
this.renderer.setProperty(
this.element.nativeElement,
'innerText',
this.model.InnerText
);
}
if (this.model.Visible === false) {
this.renderer.setStyle(this.element.nativeElement, 'display', 'none');
} else {
this.renderer.setStyle(this.element.nativeElement, 'display', '');
}
}
}
/**
* Apply WebForms HTML attributes.
*
* @memberof HtmlControlDirective
*/
applyAtributes(): void {
/* c8 ignore else*/
if (this.model?.Attributes) {
for (const entry of Object.entries<string>(this.model.Attributes)) {
const attribute: string = entry[0];
const value: string = entry[1];
this.renderer.setAttribute(
this.element.nativeElement,
attribute,
value
);
}
}
}
/**
* Indicates if an event is binded in the server or not.
* Added in the directive to validate and use the events mechanism.
*
* @param {string} event
* @return {*} {boolean}
* @memberof HtmlControlDirective
*/
isBindedEvent(event: string): boolean {
return this.model?.events && this.model.events[event];
}
/**
* Empty detectChanges method.
* Added in the directive to use the events mechanism.
*
* @memberof HtmlControlDirective
*/
detectChanges(): void {}
/**
* Listener for the click event.
*
* @param {*} event
* @memberof HtmlControlDirective
*/
@HostListener('click', ['$event'])
clickListener(event: any): void {
this.click(event);
}
/**
* Triggers the OnClick emitter.
*
* @param {*} event
* @memberof HtmlControlDirective
*/
@serverEvent('Click')
click(event: any): void {
this.OnClick.emit(new EventData(event, this.id));
}
/**
* Listener for the change event.
*
* @param {*} event
* @memberof HtmlControlDirective
*/
@HostListener('change', ['$event'])
changeListener(event: any): void {
/* c8 ignore else*/
if (this.isInputFile(event)) {
this.changeInputFileHandler(event);
}
}
/**
* Validates if the event is coming from an input file element.
*
* @param {*} event
* @return {*} {boolean}
* @memberof HtmlControlDirective
*/
isInputFile(event: any): boolean {
return (
event?.currentTarget?.localName === 'input' &&
event.currentTarget.type === 'file'
);
}
/**
* Handles the change event for the input file.
* Posts the selected file to the server.
*
* @param {*} event
* @memberof HtmlControlDirective
*/
changeInputFileHandler(event: any): void {
const fileList = event.target.files;
const formData: FormData = new FormData();
const url = `${this.uploadFileUrl}?id=${this.id}`;
/* c8 ignore else*/
if (fileList?.length > 0) {
formData.append('fileKey', fileList[0], fileList[0].name);
this.wmService.post(url, formData).subscribe();
}
}
}