ng-units
Version:
Angular component library for units of measurement.
73 lines • 9.67 kB
JavaScript
import { Output, EventEmitter } from '@angular/core';
import { Component, Input, HostListener } from '@angular/core';
import * as i0 from "@angular/core";
import * as i1 from "./system-of-units.service";
import * as i2 from "@angular/common";
export class UnitSelectComponent {
system;
// tslint:disable-next-line:no-input-rename
set quantityAttr(value) {
this.initQuantity(value);
setTimeout(() => this.selectUnit(), 0);
if (this.subscription) {
this.subscription.unsubscribe();
}
this.subscription = this.system.changes$.subscribe((msg) => {
if (msg.quantity === this.quantity) {
this.selectUnit();
}
});
}
changeUnit = new EventEmitter();
quantity;
currentUnit;
select;
subscription;
constructor(elementRef, system) {
this.system = system;
this.select = elementRef.nativeElement;
}
ngAfterViewInit() {
this.selectUnit();
}
ngOnDestroy() {
this.subscription?.unsubscribe();
}
initQuantity(quantity) {
this.quantity = typeof quantity === 'string' ? this.system.get(quantity) : quantity;
}
selectUnit() {
const quantity = this.quantity;
this.currentUnit = quantity ? quantity.unit : null;
this.select.selectedIndex = (this.currentUnit && quantity) ? quantity.units.indexOf(this.currentUnit) : -1;
}
change() {
if (!this.quantity) {
return;
}
const index = this.select.selectedIndex;
const unit = this.quantity.units[index];
this.currentUnit = unit;
this.system.selectUnit(this.quantity, unit);
this.changeUnit.emit(unit);
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: UnitSelectComponent, deps: [{ token: i0.ElementRef }, { token: i1.SystemOfUnits }], target: i0.ɵɵFactoryTarget.Component });
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.2", type: UnitSelectComponent, selector: "[ngUnitSelect]", inputs: { quantityAttr: ["ngUnitSelect", "quantityAttr"] }, outputs: { changeUnit: "changeUnit" }, host: { listeners: { "change": "change($event)" } }, ngImport: i0, template: `<option *ngFor="let u of quantity?.units">{{u.symbol}}</option>`, isInline: true, dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: UnitSelectComponent, decorators: [{
type: Component,
args: [{
// eslint-disable-next-line @angular-eslint/component-selector
selector: '[ngUnitSelect]',
template: `<option *ngFor="let u of quantity?.units">{{u.symbol}}</option>`,
}]
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.SystemOfUnits }]; }, propDecorators: { quantityAttr: [{
type: Input,
args: ['ngUnitSelect']
}], changeUnit: [{
type: Output
}], change: [{
type: HostListener,
args: ['change', ['$event']]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pdC1zZWxlY3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdW5pdHMvc3JjL2xpYi91bml0LXNlbGVjdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUE0QixNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBYyxTQUFTLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQzs7OztBQVczRSxNQUFNLE9BQU8sbUJBQW1CO0lBd0JnQjtJQXRCNUMsMkNBQTJDO0lBQzNDLElBQTJCLFlBQVksQ0FBQyxLQUF3QjtRQUU1RCxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pCLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdkMsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ25CLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDbkM7UUFDRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ3ZELElBQUksR0FBRyxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUNoQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7YUFDckI7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFDUyxVQUFVLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztJQUVoRCxRQUFRLENBQVk7SUFFWixXQUFXLENBQWE7SUFDeEIsTUFBTSxDQUFvQjtJQUMxQixZQUFZLENBQWdCO0lBRXBDLFlBQVksVUFBc0IsRUFBVSxNQUFxQjtRQUFyQixXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQzdELElBQUksQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDLGFBQWEsQ0FBQztJQUMzQyxDQUFDO0lBRUQsZUFBZTtRQUNYLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVPLFlBQVksQ0FBQyxRQUEyQjtRQUM1QyxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sUUFBUSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztJQUN4RixDQUFDO0lBRU8sVUFBVTtRQUNkLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDL0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNuRCxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0csQ0FBQztJQUdELE1BQU07UUFDRixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNoQixPQUFPO1NBQ1Y7UUFDRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQztRQUN4QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUN4QixJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9CLENBQUM7dUdBeERRLG1CQUFtQjsyRkFBbkIsbUJBQW1CLDhNQUZsQixpRUFBaUU7OzJGQUVsRSxtQkFBbUI7a0JBTC9CLFNBQVM7bUJBQUM7b0JBQ1AsOERBQThEO29CQUM5RCxRQUFRLEVBQUUsZ0JBQWdCO29CQUMxQixRQUFRLEVBQUUsaUVBQWlFO2lCQUM5RTs2SEFJOEIsWUFBWTtzQkFBdEMsS0FBSzt1QkFBQyxjQUFjO2dCQWFYLFVBQVU7c0JBQW5CLE1BQU07Z0JBK0JQLE1BQU07c0JBREwsWUFBWTt1QkFBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEVsZW1lbnRSZWYsIENvbXBvbmVudCwgSW5wdXQsIEhvc3RMaXN0ZW5lciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBRdWFudGl0eSB9IGZyb20gJy4vcXVhbnRpdHknO1xyXG5pbXBvcnQgeyBVbml0IH0gZnJvbSAnLi91bml0JztcclxuaW1wb3J0IHsgU3lzdGVtT2ZVbml0cyB9IGZyb20gJy4vc3lzdGVtLW9mLXVuaXRzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcclxuICAgIHNlbGVjdG9yOiAnW25nVW5pdFNlbGVjdF0nLFxyXG4gICAgdGVtcGxhdGU6IGA8b3B0aW9uICpuZ0Zvcj1cImxldCB1IG9mIHF1YW50aXR5Py51bml0c1wiPnt7dS5zeW1ib2x9fTwvb3B0aW9uPmAsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVbml0U2VsZWN0Q29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcclxuXHJcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8taW5wdXQtcmVuYW1lXHJcbiAgICBASW5wdXQoJ25nVW5pdFNlbGVjdCcpIHNldCBxdWFudGl0eUF0dHIodmFsdWU6IHN0cmluZyB8IFF1YW50aXR5KSB7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdFF1YW50aXR5KHZhbHVlKTtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2VsZWN0VW5pdCgpLCAwKTtcclxuICAgICAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcclxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLnN5c3RlbS5jaGFuZ2VzJC5zdWJzY3JpYmUoKG1zZykgPT4ge1xyXG4gICAgICAgICAgICBpZiAobXNnLnF1YW50aXR5ID09PSB0aGlzLnF1YW50aXR5KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFVuaXQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgQE91dHB1dCgpIGNoYW5nZVVuaXQgPSBuZXcgRXZlbnRFbWl0dGVyPFVuaXQ+KCk7XHJcblxyXG4gICAgcXVhbnRpdHk/OiBRdWFudGl0eTtcclxuXHJcbiAgICBwcml2YXRlIGN1cnJlbnRVbml0PzogVW5pdHxudWxsO1xyXG4gICAgcHJpdmF0ZSBzZWxlY3Q6IEhUTUxTZWxlY3RFbGVtZW50O1xyXG4gICAgcHJpdmF0ZSBzdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XHJcblxyXG4gICAgY29uc3RydWN0b3IoZWxlbWVudFJlZjogRWxlbWVudFJlZiwgcHJpdmF0ZSBzeXN0ZW06IFN5c3RlbU9mVW5pdHMpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdCA9IGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcclxuICAgIH1cclxuXHJcbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RVbml0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpbml0UXVhbnRpdHkocXVhbnRpdHk6IHN0cmluZyB8IFF1YW50aXR5KSB7XHJcbiAgICAgICAgdGhpcy5xdWFudGl0eSA9IHR5cGVvZiBxdWFudGl0eSA9PT0gJ3N0cmluZycgPyB0aGlzLnN5c3RlbS5nZXQocXVhbnRpdHkpIDogcXVhbnRpdHk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZWxlY3RVbml0KCkge1xyXG4gICAgICAgIGNvbnN0IHF1YW50aXR5ID0gdGhpcy5xdWFudGl0eTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRVbml0ID0gcXVhbnRpdHkgPyBxdWFudGl0eS51bml0IDogbnVsbDtcclxuICAgICAgICB0aGlzLnNlbGVjdC5zZWxlY3RlZEluZGV4ID0gKHRoaXMuY3VycmVudFVuaXQgJiYgcXVhbnRpdHkpID8gcXVhbnRpdHkudW5pdHMuaW5kZXhPZih0aGlzLmN1cnJlbnRVbml0KSA6IC0xO1xyXG4gICAgfVxyXG5cclxuICAgIEBIb3N0TGlzdGVuZXIoJ2NoYW5nZScsIFsnJGV2ZW50J10pXHJcbiAgICBjaGFuZ2UoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnF1YW50aXR5KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnNlbGVjdC5zZWxlY3RlZEluZGV4O1xyXG4gICAgICAgIGNvbnN0IHVuaXQgPSB0aGlzLnF1YW50aXR5LnVuaXRzW2luZGV4XTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRVbml0ID0gdW5pdDtcclxuICAgICAgICB0aGlzLnN5c3RlbS5zZWxlY3RVbml0KHRoaXMucXVhbnRpdHksIHVuaXQpO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlVW5pdC5lbWl0KHVuaXQpO1xyXG4gICAgfVxyXG59XHJcblxyXG4iXX0=