@sedeh/into-pipes
Version:
Have you ever wanted to transform data in different parts of your application into interactive objects without writing a single line of code?
105 lines • 15.3 kB
JavaScript
import { Component, EventEmitter } from '@angular/core';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common";
export class PhoneComponent {
constructor() {
this.disabled = false;
this.active = true;
this.validate = (item, newValue) => true;
this.onIntoComponentChange = new EventEmitter();
}
static settingsPatterns() {
return ['phone:true:true']; //islink, format
}
transform(source, data, args) {
this.source = source;
this.isLink = (args?.length && args[0].length) ? (args[0] === 'true') : false;
this.formatting = (args?.length > 1 && args[1].length) ? (args[1] === 'true') : false;
}
normalizeSource() {
let result = this.source.replace(/[\ \-\.\(\)\+]/g, '');
result = result[0] === '1' ? result.substring(1) : result;
if (result.length === 10) {
result = '+1 ' + result + ';ext=' + result;
}
else if (result.length > 10) {
const b = result.slice(0, 10);
const e = result.slice(10);
result = '+1' + b + ';ext=' + e;
}
return result;
}
formattedSource() {
let result = this.source;
if (this.formatting) {
result = this.source.replace(/[\ \-\.\(\)\+]/g, '');
result = result[0] === '1' ? result.substring(1) : result;
if (result.length === 10) {
result = '+1 ' + result.replace(/(\d{3})(\d{3})(\d{4})/, "($1)$2-$3");
}
else if (result.length > 10) {
const b = result.slice(0, 10);
const e = result.slice(10);
result = '+1 ' + b.replace(/(\d{3})(\d{3})(\d{4})/, "($1)$2-$3");
result += (' ext. ' + e);
}
}
return result;
}
keyup(event) {
const code = event.which;
event.stopPropagation();
event.preventDefault();
if (code === 13 && !this.disabled) {
event.target.click();
}
}
change(event) {
if (!this.disabled) {
this.onIntoComponentChange.emit({
id: this.id,
name: this.name,
value: this.source,
type: 'click',
item: event.type
});
}
}
}
PhoneComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: PhoneComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
PhoneComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: PhoneComponent, selector: "phone", ngImport: i0, template: `
<a
*ngIf="isLink"
tabindex="{{active ? 0 : -1}}"
class="phone {{disabled ? 'disabled' : ''}}"
[href]="disabled ? null : 'tel:' + normalizeSource()"
(keyup)='keyup($event)'
(click)="change($event)">
<span class='fa fa-phone' aria-hidden='true'></span>
<span [textContent]="formattedSource()"></span>
</a>
<span *ngIf="!isLink phone">
<span class='fa fa-phone' aria-hidden='true'></span>
<span [textContent]="formattedSource()"></span>
</span>
`, isInline: true, styles: [":host{display:table;float:left;min-height:var(--sedeh-min-height, 25px)}:host .phone{text-decoration:none}:host .phone:focus{outline:none}:host .phone:focus .fa{zoom:1.1;right:var(--sedeh-shift-right, 0);position:relative;color:var(--sedeh-focus-color, darkblue)}:host .phone:hover{opacity:var(--sedeh-hover-opacity , .5)}:host .phone.disabled .fa-phone{color:var(--sedeh-disabled-color, #888)}:host .phone.disabled:hover .fa-phone{color:var(--sedeh-disabled-color, #888)}:host .phone.disabled{color:var(--sedeh-disabled-color, #888);cursor:default;pointer-events:none;text-decoration:none}:host .fa{margin:var(--sedeh-margin , 0 5px)}@media print{:host a{text-decoration:none}:host .fa-phone{display:none}:host a .fa-phone{display:none}}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: PhoneComponent, decorators: [{
type: Component,
args: [{ selector: 'phone', template: `
<a
*ngIf="isLink"
tabindex="{{active ? 0 : -1}}"
class="phone {{disabled ? 'disabled' : ''}}"
[href]="disabled ? null : 'tel:' + normalizeSource()"
(keyup)='keyup($event)'
(click)="change($event)">
<span class='fa fa-phone' aria-hidden='true'></span>
<span [textContent]="formattedSource()"></span>
</a>
<span *ngIf="!isLink phone">
<span class='fa fa-phone' aria-hidden='true'></span>
<span [textContent]="formattedSource()"></span>
</span>
`, styles: [":host{display:table;float:left;min-height:var(--sedeh-min-height, 25px)}:host .phone{text-decoration:none}:host .phone:focus{outline:none}:host .phone:focus .fa{zoom:1.1;right:var(--sedeh-shift-right, 0);position:relative;color:var(--sedeh-focus-color, darkblue)}:host .phone:hover{opacity:var(--sedeh-hover-opacity , .5)}:host .phone.disabled .fa-phone{color:var(--sedeh-disabled-color, #888)}:host .phone.disabled:hover .fa-phone{color:var(--sedeh-disabled-color, #888)}:host .phone.disabled{color:var(--sedeh-disabled-color, #888);cursor:default;pointer-events:none;text-decoration:none}:host .fa{margin:var(--sedeh-margin , 0 5px)}@media print{:host a{text-decoration:none}:host .fa-phone{display:none}:host a .fa-phone{display:none}}\n"] }]
}] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhvbmUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaW50by1waXBlcy9zcmMvbGliL3Bob25lL3Bob25lLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBd0N4RCxNQUFNLE9BQU8sY0FBYztJQXJDM0I7UUEwQzJCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDeEMsV0FBTSxHQUFHLElBQUksQ0FBQztRQUNkLGFBQVEsR0FBRyxDQUFDLElBQVMsRUFBRSxRQUFhLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQztRQUVqRCwwQkFBcUIsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0tBNkQzQztJQTNERyxNQUFNLENBQUMsZ0JBQWdCO1FBQ25CLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCO0lBQ2hELENBQUM7SUFDRCxTQUFTLENBQUMsTUFBVyxFQUFFLElBQVMsRUFBRSxJQUFXO1FBQ3pDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxNQUFNLEdBQUUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUM3RSxJQUFJLENBQUMsVUFBVSxHQUFFLENBQUMsSUFBSSxFQUFFLE1BQU0sR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lB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RVEsY0FBYztnR0FBZCxjQUFjLDZDQW5DYjs7Ozs7Ozs7Ozs7Ozs7O0tBZVQ7NEZBb0JRLGNBQWM7a0JBckMxQixTQUFTOytCQUNJLE9BQU8sWUFDUDs7Ozs7Ozs7Ozs7Ozs7O0tBZVQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBQaXBlQ29tcG9uZW50SW50ZXJmYWNlIH0gZnJvbSAnLi4vY29tbW9uL3BpcGUuY29tcG9uZW50LmludGVyZmFjZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAncGhvbmUnLFxyXG4gICAgdGVtcGxhdGU6IGBcclxuICAgIDxhICBcclxuICAgICAgICAqbmdJZj1cImlzTGlua1wiIFxyXG4gICAgICAgIHRhYmluZGV4PVwie3thY3RpdmUgPyAwIDogLTF9fVwiXHJcbiAgICAgICAgY2xhc3M9XCJwaG9uZSB7e2Rpc2FibGVkID8gJ2Rpc2FibGVkJyA6ICcnfX1cIlxyXG4gICAgICAgIFtocmVmXT1cImRpc2FibGVkID8gbnVsbCA6ICd0ZWw6JyArIG5vcm1hbGl6ZVNvdXJjZSgpXCIgXHJcbiAgICAgICAgKGtleXVwKT0na2V5dXAoJGV2ZW50KScgXHJcbiAgICAgICAgKGNsaWNrKT1cImNoYW5nZSgkZXZlbnQpXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9J2ZhIGZhLXBob25lJyBhcmlhLWhpZGRlbj0ndHJ1ZSc+PC9zcGFuPlxyXG4gICAgICAgIDxzcGFuIFt0ZXh0Q29udGVudF09XCJmb3JtYXR0ZWRTb3VyY2UoKVwiPjwvc3Bhbj5cclxuICAgIDwvYT5cclxuICAgIDxzcGFuICpuZ0lmPVwiIWlzTGluayBwaG9uZVwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPSdmYSBmYS1waG9uZScgYXJpYS1oaWRkZW49J3RydWUnPjwvc3Bhbj5cclxuICAgICAgICA8c3BhbiBbdGV4dENvbnRlbnRdPVwiZm9ybWF0dGVkU291cmNlKClcIj48L3NwYW4+XHJcbiAgICA8L3NwYW4+XHJcbiAgICBgLFxyXG4gICAgc3R5bGVzOiBbXHJcbiAgICAgICAgYFxyXG4gICAgICAgIDpob3N0IHtkaXNwbGF5OnRhYmxlO2Zsb2F0OmxlZnQ7bWluLWhlaWdodDogdmFyKC0tc2VkZWgtbWluLWhlaWdodCwgMjVweCl9XHJcbiAgICAgICAgOmhvc3QgLnBob25lIHt0ZXh0LWRlY29yYXRpb246IG5vbmU7fVxyXG4gICAgICAgIDpob3N0IC5waG9uZTpmb2N1c3tvdXRsaW5lOiBub25lO31cclxuICAgICAgICA6aG9zdCAucGhvbmU6Zm9jdXMgLmZhe3pvb206IDEuMTtyaWdodDogdmFyKC0tc2VkZWgtc2hpZnQtcmlnaHQsIDApO3Bvc2l0aW9uOiByZWxhdGl2ZTtjb2xvcjogdmFyKC0tc2VkZWgtZm9jdXMtY29sb3IsIGRhcmtibHVlKTt9XHJcbiAgICAgICAgOmhvc3QgLnBob25lOmhvdmVyIHtvcGFjaXR5OiB2YXIoLS1zZWRlaC1ob3Zlci1vcGFjaXR5ICwgMC41KTt9XHJcbiAgICAgICAgOmhvc3QgLnBob25lLmRpc2FibGVkIC5mYS1waG9uZXtjb2xvcjogdmFyKC0tc2VkZWgtZGlzYWJsZWQtY29sb3IsICM4ODgpO31cclxuICAgICAgICA6aG9zdCAucGhvbmUuZGlzYWJsZWQ6aG92ZXIgLmZhLXBob25le2NvbG9yOiB2YXIoLS1zZWRlaC1kaXNhYmxlZC1jb2xvciwgIzg4OCk7fVxyXG4gICAgICAgIDpob3N0IC5waG9uZS5kaXNhYmxlZHtjb2xvcjogdmFyKC0tc2VkZWgtZGlzYWJsZWQtY29sb3IsICM4ODgpO2N1cnNvcjpkZWZhdWx0O3BvaW50ZXItZXZlbnRzOiBub25lO3RleHQtZGVjb3JhdGlvbjogbm9uZTt9XHJcbiAgICAgICAgOmhvc3QgLmZhe21hcmdpbjogdmFyKC0tc2VkZWgtbWFyZ2luICwgMCA1cHgpO31cclxuICAgICAgICBAbWVkaWEgcHJpbnQge1xyXG4gICAgICAgICAgICA6aG9zdCBhIHsgdGV4dC1kZWNvcmF0aW9uOiBub25lIH1cclxuICAgICAgICAgICAgOmhvc3QgLmZhLXBob25lIHtkaXNwbGF5OiBub25lO31cclxuICAgICAgICAgICAgOmhvc3QgYSAuZmEtcGhvbmUge2Rpc3BsYXk6IG5vbmU7fVxyXG4gICAgICAgIH1cclxuICAgICAgICBgXHJcbiAgICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQaG9uZUNvbXBvbmVudCBpbXBsZW1lbnRzIFBpcGVDb21wb25lbnRJbnRlcmZhY2Uge1xyXG4gICAgc291cmNlITogc3RyaW5nO1xyXG5cdGlkITogc3RyaW5nO1xyXG4gICAgbmFtZSE6IHN0cmluZztcclxuICAgIGlzTGluayE6IGJvb2xlYW47XHJcbiAgICBmb3JtYXR0aW5nITogYm9vbGVhbjsgIGRpc2FibGVkID0gZmFsc2U7XHJcbiAgICBhY3RpdmUgPSB0cnVlO1xyXG4gICAgdmFsaWRhdGUgPSAoaXRlbTogYW55LCBuZXdWYWx1ZTogYW55KSA9PiB0cnVlO1xyXG5cclxuXHRvbkludG9Db21wb25lbnRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gICAgc3RhdGljIHNldHRpbmdzUGF0dGVybnMoKSB7XHJcbiAgICAgICAgcmV0dXJuIFsncGhvbmU6dHJ1ZTp0cnVlJ107IC8vaXNsaW5rLCBmb3JtYXRcclxuICAgIH1cclxuICAgIHRyYW5zZm9ybShzb3VyY2U6IGFueSwgZGF0YTogYW55LCBhcmdzOiBhbnlbXSkge1xyXG4gICAgICAgIHRoaXMuc291cmNlID0gc291cmNlO1xyXG4gICAgICAgIHRoaXMuaXNMaW5rPSAoYXJncz8ubGVuZ3RoICYmIGFyZ3NbMF0ubGVuZ3RoKSA/IChhcmdzWzBdID09PSAndHJ1ZScpIDogZmFsc2U7XHJcbiAgICAgICAgdGhpcy5mb3JtYXR0aW5nPSAoYXJncz8ubGVuZ3RoID4gMSAmJiBhcmdzWzFdLmxlbmd0aCkgPyAoYXJnc1sxXSA9PT0gJ3RydWUnKSA6IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgbm9ybWFsaXplU291cmNlKCkge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSB0aGlzLnNvdXJjZS5yZXBsYWNlKC9bXFwgXFwtXFwuXFwoXFwpXFwrXS9nLCAnJyk7XHJcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0WzBdID09PSAnMScgPyByZXN1bHQuc3Vic3RyaW5nKDEpIDogcmVzdWx0O1xyXG5cclxuICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCA9PT0gMTApIHtcclxuICAgICAgICAgICAgcmVzdWx0ID0gJysxICcgKyByZXN1bHQgKyAnO2V4dD0nICsgcmVzdWx0O1xyXG4gICAgICAgIH0gZWxzZSBpZiAocmVzdWx0Lmxlbmd0aCA+IDEwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGIgPSByZXN1bHQuc2xpY2UoMCwgMTApO1xyXG4gICAgICAgICAgICBjb25zdCBlID0gcmVzdWx0LnNsaWNlKDEwKTtcclxuICAgICAgICAgICAgcmVzdWx0ID0gJysxJyArIGIgKyAnO2V4dD0nICsgZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIGZvcm1hdHRlZFNvdXJjZSgpIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gdGhpcy5zb3VyY2U7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKHRoaXMuZm9ybWF0dGluZykge1xyXG4gICAgICAgICAgICByZXN1bHQgPSB0aGlzLnNvdXJjZS5yZXBsYWNlKC9bXFwgXFwtXFwuXFwoXFwpXFwrXS9nLCAnJyk7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdFswXSA9PT0gJzEnID8gcmVzdWx0LnN1YnN0cmluZygxKSA6IHJlc3VsdDtcclxuXHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQubGVuZ3RoID09PSAxMCkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gJysxICcgKyByZXN1bHQucmVwbGFjZSgvKFxcZHszfSkoXFxkezN9KShcXGR7NH0pLywgXCIoJDEpJDItJDNcIik7IFxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdC5sZW5ndGggPiAxMCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYiA9IHJlc3VsdC5zbGljZSgwLCAxMCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlID0gcmVzdWx0LnNsaWNlKDEwKTtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9ICcrMSAnICsgYi5yZXBsYWNlKC8oXFxkezN9KShcXGR7M30pKFxcZHs0fSkvLCBcIigkMSkkMi0kM1wiKTsgXHJcbiAgICAgICAgICAgICAgICByZXN1bHQrPSAoJyBleHQuICcgKyBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAga2V5dXAoZXZlbnQ6IGFueSkge1xyXG4gICAgICAgIGNvbnN0IGNvZGUgPSBldmVudC53aGljaDtcclxuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgXHJcbiAgICAgICAgaWYgKGNvZGUgPT09IDEzICYmICF0aGlzLmRpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnRhcmdldC5jbGljaygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGNoYW5nZShldmVudDogYW55KSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25JbnRvQ29tcG9uZW50Q2hhbmdlLmVtaXQoe1xyXG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMuaWQsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5zb3VyY2UsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnY2xpY2snLFxyXG4gICAgICAgICAgICAgICAgaXRlbTogZXZlbnQudHlwZVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl19