UNPKG

truly-ui

Version:

Web Components for Desktop Applications.

123 lines 15.6 kB
import { Directive, HostListener, Inject, Input, Optional, ContentChild } from '@angular/core'; import { CURRENCY_MASK_CONFIG } from './currency-mask.config'; import { CurrencyHandler } from './currency.handler'; import { NgModel } from '@angular/forms'; import { Subscription } from 'rxjs'; import * as i0 from "@angular/core"; import * as i1 from "../../input"; export class CurrencyDirective { constructor(currencyConfig, inputCurrency, keyValueDiffers) { this.currencyConfig = currencyConfig; this.inputCurrency = inputCurrency; this.keyValueDiffers = keyValueDiffers; this.currencyOptions = {}; this.subscription = new Subscription(); this.optionsTemplate = { align: 'right', allowNegative: true, allowZero: true, decimal: '.', precision: 2, prefix: '$ ', suffix: '', thousands: ',', nullable: false }; if (currencyConfig) { this.optionsTemplate = currencyConfig; } this.keyValueDiffer = keyValueDiffers.find({}).create(); } ngAfterContentInit() { this.inputCurrency.textAlign = this.currencyOptions.align ? this.currencyOptions.align : this.optionsTemplate.align; this.inputHandler.setOnModelChange(this.inputCurrency.propagateChange); this.inputHandler.setOnModelTouched(this.inputCurrency.propagateTouched); } ngAfterViewInit() { setTimeout(() => { if (this.inputHandler.inputService.rawValue) { this.inputHandler.inputService.rawValue = this.inputHandler.inputService.applyMask(true, this.inputHandler.inputService.rawValue); } }); } ngDoCheck() { if (this.keyValueDiffer.diff(this.currencyOptions)) { this.inputCurrency.textAlign = this.currencyOptions.align ? this.currencyOptions.align : this.optionsTemplate.align; this.inputHandler.updateOptions(Object.assign({}, this.optionsTemplate, this.currencyOptions)); } } ngOnInit() { this.inputHandler = new CurrencyHandler(this.inputCurrency.input.nativeElement, Object.assign({}, this.optionsTemplate, this.currencyOptions)); } handleBlur(event) { this.inputHandler.getOnModelTouched().apply(event); } handleCut(event) { if (!this.isChromeAndroid()) { this.inputHandler.handleCut(event); } } handleInput(event) { if (this.isChromeAndroid()) { this.inputHandler.handleInput(event); } } handleKeydown(event) { if (!this.isChromeAndroid()) { this.inputHandler.handleKeydown(event); } } handleKeypress(event) { if (!this.isChromeAndroid()) { this.inputHandler.handleKeypress(event); } } handlePaste(event) { if (!this.isChromeAndroid()) { this.inputHandler.handlePaste(event); } } isChromeAndroid() { return /chrome/i.test(navigator.userAgent) && /android/i.test(navigator.userAgent); } ngOnDestroy() { this.subscription.unsubscribe(); } } /** @nocollapse */ CurrencyDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CurrencyDirective, deps: [{ token: CURRENCY_MASK_CONFIG, optional: true }, { token: i1.TlInput }, { token: i0.KeyValueDiffers }], target: i0.ɵɵFactoryTarget.Directive }); /** @nocollapse */ CurrencyDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: CurrencyDirective, selector: "[currency][ngModel],[currency][formControlName]", inputs: { currencyOptions: "currencyOptions" }, host: { listeners: { "blur": "handleBlur($event)", "cut": "handleCut($event)", "input": "handleInput($event)", "keydown": "handleKeydown($event)", "keypress": "handleKeypress($event)", "paste": "handlePaste($event)" } }, queries: [{ propertyName: "model", first: true, predicate: NgModel, descendants: true, static: true }], ngImport: i0 }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CurrencyDirective, decorators: [{ type: Directive, args: [{ selector: '[currency][ngModel],[currency][formControlName]', }] }], ctorParameters: function () { return [{ type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [CURRENCY_MASK_CONFIG] }] }, { type: i1.TlInput }, { type: i0.KeyValueDiffers }]; }, propDecorators: { currencyOptions: [{ type: Input }], model: [{ type: ContentChild, args: [NgModel, { static: true }] }], handleBlur: [{ type: HostListener, args: ['blur', ['$event']] }], handleCut: [{ type: HostListener, args: ['cut', ['$event']] }], handleInput: [{ type: HostListener, args: ['input', ['$event']] }], handleKeydown: [{ type: HostListener, args: ['keydown', ['$event']] }], handleKeypress: [{ type: HostListener, args: ['keypress', ['$event']] }], handlePaste: [{ type: HostListener, args: ['paste', ['$event']] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VycmVuY3kuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHJ1bHktdWkvc3JjL2NvbXBvbmVudHMvaW5wdXQvZGlyZWN0aXZlcy9jdXJyZW5jeS9jdXJyZW5jeS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFFVCxZQUFZLEVBQ1osTUFBTSxFQUdOLEtBQUssRUFFTCxRQUFRLEVBQUUsWUFBWSxFQUN2QixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQWtCLG9CQUFvQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDOUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXJELE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2QyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sTUFBTSxDQUFDOzs7QUFLbEMsTUFBTSxPQUFPLGlCQUFpQjtJQXdCNUIsWUFBaUUsY0FBOEIsRUFDMUUsYUFBc0IsRUFDdEIsZUFBZ0M7UUFGWSxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDMUUsa0JBQWEsR0FBYixhQUFhLENBQVM7UUFDdEIsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBeEI1QyxvQkFBZSxHQUFRLEVBQUUsQ0FBQztRQU0zQixpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFJbkMsb0JBQWUsR0FBRztZQUN2QixLQUFLLEVBQUUsT0FBTztZQUNkLGFBQWEsRUFBRSxJQUFJO1lBQ25CLFNBQVMsRUFBRSxJQUFJO1lBQ2YsT0FBTyxFQUFFLEdBQUc7WUFDWixTQUFTLEVBQUUsQ0FBQztZQUNaLE1BQU0sRUFBRSxJQUFJO1lBQ1osTUFBTSxFQUFFLEVBQUU7WUFDVixTQUFTLEVBQUUsR0FBRztZQUNkLFFBQVEsRUFBRSxLQUFLO1NBQ2hCLENBQUM7UUFLQSxJQUFLLGNBQWMs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WTt1QkFBRSxPQUFPLEVBQUUsQ0FBRSxRQUFRLENBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBEaXJlY3RpdmUsXG4gIERvQ2hlY2ssXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5qZWN0LFxuICBLZXlWYWx1ZURpZmZlcixcbiAgS2V5VmFsdWVEaWZmZXJzLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPcHRpb25hbCwgQ29udGVudENoaWxkLCBBZnRlckNvbnRlbnRJbml0LCBPbkRlc3Ryb3lcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEN1cnJlbmN5Q29uZmlnLCBDVVJSRU5DWV9NQVNLX0NPTkZJRyB9IGZyb20gJy4vY3VycmVuY3ktbWFzay5jb25maWcnO1xuaW1wb3J0IHsgQ3VycmVuY3lIYW5kbGVyIH0gZnJvbSAnLi9jdXJyZW5jeS5oYW5kbGVyJztcbmltcG9ydCB7IFRsSW5wdXQgfSBmcm9tICcuLi8uLi9pbnB1dCc7XG5pbXBvcnQge05nTW9kZWx9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcblxuQERpcmVjdGl2ZSgge1xuICBzZWxlY3RvcjogJ1tjdXJyZW5jeV1bbmdNb2RlbF0sW2N1cnJlbmN5XVtmb3JtQ29udHJvbE5hbWVdJyxcbn0gKVxuZXhwb3J0IGNsYXNzIEN1cnJlbmN5RGlyZWN0aXZlIGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdCwgRG9DaGVjaywgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIEBJbnB1dCgpIGN1cnJlbmN5T3B0aW9uczogYW55ID0ge307XG5cbiAgQENvbnRlbnRDaGlsZCggTmdNb2RlbCwge3N0YXRpYzogdHJ1ZX0gICkgbW9kZWw6IE5nTW9kZWw7XG5cbiAgcHVibGljIGlucHV0SGFuZGxlcjogQ3VycmVuY3lIYW5kbGVyO1xuXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIHB1YmxpYyBrZXlWYWx1ZURpZmZlcjogS2V5VmFsdWVEaWZmZXI8YW55LCBhbnk+O1xuXG4gIHB1YmxpYyBvcHRpb25zVGVtcGxhdGUgPSB7XG4gICAgYWxpZ246ICdyaWdodCcsXG4gICAgYWxsb3dOZWdhdGl2ZTogdHJ1ZSxcbiAgICBhbGxvd1plcm86IHRydWUsXG4gICAgZGVjaW1hbDogJy4nLFxuICAgIHByZWNpc2lvbjogMixcbiAgICBwcmVmaXg6ICckICcsXG4gICAgc3VmZml4OiAnJyxcbiAgICB0aG91c2FuZHM6ICcsJyxcbiAgICBudWxsYWJsZTogZmFsc2VcbiAgfTtcblxuICBjb25zdHJ1Y3RvciggQE9wdGlvbmFsKCkgQEluamVjdCggQ1VSUkVOQ1lfTUFTS19DT05GSUcgKSBwcml2YXRlIGN1cnJlbmN5Q29uZmlnOiBDdXJyZW5jeUNvbmZpZyxcbiAgICAgICAgICAgICAgIHByaXZhdGUgaW5wdXRDdXJyZW5jeTogVGxJbnB1dCxcbiAgICAgICAgICAgICAgIHByaXZhdGUga2V5VmFsdWVEaWZmZXJzOiBLZXlWYWx1ZURpZmZlcnMgKSB7XG4gICAgaWYgKCBjdXJyZW5jeUNvbmZpZyApIHtcbiAgICAgIHRoaXMub3B0aW9uc1RlbXBsYXRlID0gY3VycmVuY3lDb25maWc7XG4gICAgfVxuICAgIHRoaXMua2V5VmFsdWVEaWZmZXIgPSBrZXlWYWx1ZURpZmZlcnMuZmluZCgge30gKS5jcmVhdGUoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICB0aGlzLmlucHV0Q3VycmVuY3kudGV4dEFsaWduID0gdGhpcy5jdXJyZW5jeU9wdGlvbnMuYWxpZ24gPyB0aGlzLmN1cnJlbmN5T3B0aW9ucy5hbGlnbiA6IHRoaXMub3B0aW9uc1RlbXBsYXRlLmFsaWduO1xuICAgIHRoaXMuaW5wdXRIYW5kbGVyLnNldE9uTW9kZWxDaGFuZ2UoIHRoaXMuaW5wdXRDdXJyZW5jeS5wcm9wYWdhdGVDaGFuZ2UgKTtcbiAgICB0aGlzLmlucHV0SGFuZGxlci5zZXRPbk1vZGVsVG91Y2hlZCggdGhpcy5pbnB1dEN1cnJlbmN5LnByb3BhZ2F0ZVRvdWNoZWQgKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICggdGhpcy5pbnB1dEhhbmRsZXIuaW5wdXRTZXJ2aWNlLnJhd1ZhbHVlICkge1xuICAgICAgICB0aGlzLmlucHV0SGFuZGxlci5pbnB1dFNlcnZpY2UucmF3VmFsdWUgPSB0aGlzLmlucHV0SGFuZGxlci5pbnB1dFNlcnZpY2UuYXBwbHlNYXNrKCB0cnVlLCB0aGlzLmlucHV0SGFuZGxlci5pbnB1dFNlcnZpY2UucmF3VmFsdWUgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG5nRG9DaGVjaygpIHtcbiAgICBpZiAoIHRoaXMua2V5VmFsdWVEaWZmZXIuZGlmZiggdGhpcy5jdXJyZW5jeU9wdGlvbnMgKSApIHtcbiAgICAgIHRoaXMuaW5wdXRDdXJyZW5jeS50ZXh0QWxpZ24gPSB0aGlzLmN1cnJlbmN5T3B0aW9ucy5hbGlnbiA/IHRoaXMuY3VycmVuY3lPcHRpb25zLmFsaWduIDogdGhpcy5vcHRpb25zVGVtcGxhdGUuYWxpZ247XG4gICAgICB0aGlzLmlucHV0SGFuZGxlci51cGRhdGVPcHRpb25zKCAoPGFueT5PYmplY3QpLmFzc2lnbigge30sIHRoaXMub3B0aW9uc1RlbXBsYXRlLCB0aGlzLmN1cnJlbmN5T3B0aW9ucyApICk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5pbnB1dEhhbmRsZXIgPSBuZXcgQ3VycmVuY3lIYW5kbGVyKCB0aGlzLmlucHV0Q3VycmVuY3kuaW5wdXQubmF0aXZlRWxlbWVudCxcbiAgICAgICg8YW55Pk9iamVjdCkuYXNzaWduKCB7fSwgdGhpcy5vcHRpb25zVGVtcGxhdGUsIHRoaXMuY3VycmVuY3lPcHRpb25zICkgKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoICdibHVyJywgWyAnJGV2ZW50JyBdIClcbiAgaGFuZGxlQmx1ciggZXZlbnQ6IGFueSApIHtcbiAgICB0aGlzLmlucHV0SGFuZGxlci5nZXRPbk1vZGVsVG91Y2hlZCgpLmFwcGx5KCBldmVudCApO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lciggJ2N1dCcsIFsgJyRldmVudCcgXSApXG4gIGhhbmRsZUN1dCggZXZlbnQ6IGFueSApIHtcbiAgICBpZiAoICF0aGlzLmlzQ2hyb21lQW5kcm9pZCgpICkge1xuICAgICAgdGhpcy5pbnB1dEhhbmRsZXIuaGFuZGxlQ3V0KCBldmVudCApO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoICdpbnB1dCcsIFsgJyRldmVudCcgXSApXG4gIGhhbmRsZUlucHV0KCBldmVudDogYW55ICkge1xuICAgIGlmICggdGhpcy5pc0Nocm9tZUFuZHJvaWQoKSApIHtcbiAgICAgIHRoaXMuaW5wdXRIYW5kbGVyLmhhbmRsZUlucHV0KCBldmVudCApO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoICdrZXlkb3duJywgWyAnJGV2ZW50JyBdIClcbiAgaGFuZGxlS2V5ZG93biggZXZlbnQ6IGFueSApIHtcbiAgICBpZiAoICF0aGlzLmlzQ2hyb21lQW5kcm9pZCgpICkge1xuICAgICAgdGhpcy5pbnB1dEhhbmRsZXIuaGFuZGxlS2V5ZG93biggZXZlbnQgKTtcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCAna2V5cHJlc3MnLCBbICckZXZlbnQnIF0gKVxuICBoYW5kbGVLZXlwcmVzcyggZXZlbnQ6IGFueSApIHtcbiAgICBpZiAoICF0aGlzLmlzQ2hyb21lQW5kcm9pZCgpICkge1xuICAgICAgdGhpcy5pbnB1dEhhbmRsZXIuaGFuZGxlS2V5cHJlc3MoIGV2ZW50ICk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lciggJ3Bhc3RlJywgWyAnJGV2ZW50JyBdIClcbiAgaGFuZGxlUGFzdGUoIGV2ZW50OiBhbnkgKSB7XG4gICAgaWYgKCAhdGhpcy5pc0Nocm9tZUFuZHJvaWQoKSApIHtcbiAgICAgIHRoaXMuaW5wdXRIYW5kbGVyLmhhbmRsZVBhc3RlKCBldmVudCApO1xuICAgIH1cbiAgfVxuXG4gIGlzQ2hyb21lQW5kcm9pZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gL2Nocm9tZS9pLnRlc3QoIG5hdmlnYXRvci51c2VyQWdlbnQgKSAmJiAvYW5kcm9pZC9pLnRlc3QoIG5hdmlnYXRvci51c2VyQWdlbnQgKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxufVxuIl19