@junte/ui
Version:
Quality Angular UI components kit
170 lines • 17.2 kB
JavaScript
var SelectableDirective_1;
import { __decorate, __metadata, __param } from "tslib";
import { CommonModule } from '@angular/common';
import { Directive, EventEmitter, forwardRef, HostBinding, HostListener, Inject, InjectionToken, Input, NgModule, OnInit } from '@angular/core';
import { NG_VALUE_ACCESSOR } from '@angular/forms';
import { NGXLogger } from 'ngx-logger';
import { PropertyApi } from '../decorators/api';
import { UI } from '../enums/ui';
var SelectMode;
(function (SelectMode) {
SelectMode["single"] = "single";
SelectMode["multiple"] = "multiple";
})(SelectMode || (SelectMode = {}));
function isEqual(a, b) {
return JSON.stringify(a) === JSON.stringify(b);
}
class Config {
constructor(defs = null) {
if (!!defs) {
Object.assign(this, defs);
}
}
}
const SELECTABLE_SIGNALS = new InjectionToken('selectable_signals');
const hub = new EventEmitter();
export function eventEmitterFactory() {
return hub;
}
let SelectableDirective = SelectableDirective_1 = class SelectableDirective {
constructor(signals, logger) {
this.signals = signals;
this.logger = logger;
this.config = new Config({
mode: SelectMode.single,
enabled: true,
features: []
});
this.disabled = false;
this._mode = SelectMode.single;
this.onChange = () => this.logger.error('value accessor is not registered');
this.onTouched = () => this.logger.error('value accessor is not registered');
this.registerOnChange = fn => this.onChange = fn;
this.registerOnTouched = fn => this.onTouched = fn;
this.onBlur = () => this.onTouched();
}
get selected() {
const { value } = this.config;
return this.state.findIndex(e => isEqual(e, value)) !== -1;
}
set configure(config) {
Object.assign(this.config, config);
}
ngOnInit() {
this.signals.subscribe(state => this.state = state);
}
writeValue(value) {
this.state = !!value ? Array.isArray(value) ? value : [value] : [];
}
setDisabledState(disabled) {
this.disabled = disabled;
}
select() {
const { mode, value, enabled, features } = this.config;
if (!enabled) {
return;
}
switch (mode) {
case SelectMode.single:
const current = this.state.length > 0 ? this.state[0] : null;
if (!!current) {
const same = isEqual(current, value);
if (same && !features.includes(UI.feature.allowEmpty)) {
return;
}
this.state = same ? [] : [value];
this.onChange(same ? null : value);
}
else {
this.state = [value];
this.onChange(value);
}
break;
case SelectMode.multiple:
const index = this.state.findIndex(e => isEqual(e, value));
if (index !== -1) {
this.state.splice(index, 1);
}
else {
this.state.push(value);
}
this.onChange(this.state);
break;
}
this.signals.emit(this.state);
}
};
SelectableDirective.ctorParameters = () => [
{ type: EventEmitter, decorators: [{ type: Inject, args: [SELECTABLE_SIGNALS,] }] },
{ type: NGXLogger }
];
__decorate([
HostBinding('attr.data-disabled'),
__metadata("design:type", Object)
], SelectableDirective.prototype, "disabled", void 0);
__decorate([
HostBinding('attr.data-selected'),
__metadata("design:type", Object),
__metadata("design:paramtypes", [])
], SelectableDirective.prototype, "selected", null);
__decorate([
HostBinding('attr.data-mode'),
__metadata("design:type", String)
], SelectableDirective.prototype, "_mode", void 0);
__decorate([
PropertyApi({
description: 'Selectable configuration',
type: '{mode?: SelectMode, value: any, enabled?: boolean, features?: Feature[]}',
default: '{}'
}),
Input('jntSelectable'),
__metadata("design:type", Object),
__metadata("design:paramtypes", [Object])
], SelectableDirective.prototype, "configure", null);
__decorate([
HostListener('blur'),
__metadata("design:type", Object)
], SelectableDirective.prototype, "onBlur", void 0);
__decorate([
HostListener('click'),
__metadata("design:type", Function),
__metadata("design:paramtypes", []),
__metadata("design:returntype", void 0)
], SelectableDirective.prototype, "select", null);
SelectableDirective = SelectableDirective_1 = __decorate([
Directive({
selector: '[jntSelectable]',
providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => SelectableDirective_1),
multi: true
},
{
provide: SELECTABLE_SIGNALS,
useFactory: eventEmitterFactory
}
]
}),
__param(0, Inject(SELECTABLE_SIGNALS)),
__metadata("design:paramtypes", [EventEmitter,
NGXLogger])
], SelectableDirective);
export { SelectableDirective };
let SelectableModule = class SelectableModule {
};
SelectableModule = __decorate([
NgModule({
declarations: [
SelectableDirective
],
imports: [
CommonModule
],
exports: [
SelectableDirective
]
})
], SelectableModule);
export { SelectableModule };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0YWJsZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BqdW50ZS91aS8iLCJzb3VyY2VzIjpbImxpYi9jb3JlL2RpcmVjdGl2ZXMvc2VsZWN0YWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUNYLFlBQVksRUFDWixNQUFNLEVBQ04sY0FBYyxFQUNkLEtBQUssRUFDTCxRQUFRLEVBQ1IsTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVoRCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRWpDLElBQUssVUFHSjtBQUhELFdBQUssVUFBVTtJQUNiLCtCQUFpQixDQUFBO0lBQ2pCLG1DQUFxQixDQUFBO0FBQ3ZCLENBQUMsRUFISSxVQUFVLEtBQVYsVUFBVSxRQUdkO0FBRUQsU0FBUyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDbkIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakQsQ0FBQztBQUVELE1BQU0sTUFBTTtJQU1WLFlBQVksT0FBWSxJQUFJO1FBQzFCLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRTtZQUNWLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQzNCO0lBQ0gsQ0FBQztDQUNGO0FBRUQsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxD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b3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgRGlyZWN0aXZlLFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIEhvc3RCaW5kaW5nLFxuICBIb3N0TGlzdGVuZXIsXG4gIEluamVjdCxcbiAgSW5qZWN0aW9uVG9rZW4sXG4gIElucHV0LFxuICBOZ01vZHVsZSxcbiAgT25Jbml0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTkdYTG9nZ2VyIH0gZnJvbSAnbmd4LWxvZ2dlcic7XG5pbXBvcnQgeyBQcm9wZXJ0eUFwaSB9IGZyb20gJy4uL2RlY29yYXRvcnMvYXBpJztcbmltcG9ydCB7IEZlYXR1cmUgfSBmcm9tICcuLi9lbnVtcy9mZWF0dXJlJztcbmltcG9ydCB7IFVJIH0gZnJvbSAnLi4vZW51bXMvdWknO1xuXG5lbnVtIFNlbGVjdE1vZGUge1xuICBzaW5nbGUgPSAnc2luZ2xlJyxcbiAgbXVsdGlwbGUgPSAnbXVsdGlwbGUnXG59XG5cbmZ1bmN0aW9uIGlzRXF1YWwoYSwgYikge1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoYSkgPT09IEpTT04uc3RyaW5naWZ5KGIpO1xufVxuXG5jbGFzcyBDb25maWcge1xuICBtb2RlOiBTZWxlY3RNb2RlO1xuICB2YWx1ZTogYW55O1xuICBlbmFibGVkOiB0cnVlO1xuICBmZWF0dXJlczogRmVhdHVyZVtdO1xuXG4gIGNvbnN0cnVjdG9yKGRlZnM6IGFueSA9IG51bGwpIHtcbiAgICBpZiAoISFkZWZzKSB7XG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGRlZnMpO1xuICAgIH1cbiAgfVxufVxuXG5jb25zdCBTRUxFQ1RBQkxFX1NJR05BTFMgPSBuZXcgSW5qZWN0aW9uVG9rZW4oJ3NlbGVjdGFibGVfc2lnbmFscycpO1xuXG5jb25zdCBodWIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBldmVudEVtaXR0ZXJGYWN0b3J5KCkge1xuICByZXR1cm4gaHViO1xufVxuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbam50U2VsZWN0YWJsZV0nLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNlbGVjdGFibGVEaXJlY3RpdmUpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IFNFTEVDVEFCTEVfU0lHTkFMUyxcbiAgICAgIHVzZUZhY3Rvcnk6IGV2ZW50RW1pdHRlckZhY3RvcnlcbiAgICB9XVxufSlcbmV4cG9ydCBjbGFzcyBTZWxlY3RhYmxlRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG5cbiAgY29uZmlnOiBDb25maWcgPSBuZXcgQ29uZmlnKHtcbiAgICBtb2RlOiBTZWxlY3RNb2RlLnNpbmdsZSxcbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIGZlYXR1cmVzOiBbXVxuICB9KTtcblxuICBASG9zdEJpbmRpbmcoJ2F0dHIuZGF0YS1kaXNhYmxlZCcpXG4gIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtc2VsZWN0ZWQnKVxuICBnZXQgc2VsZWN0ZWQoKSB7XG4gICAgY29uc3Qge3ZhbHVlfSA9IHRoaXMuY29uZmlnO1xuICAgIHJldHVybiB0aGlzLnN0YXRlLmZpbmRJbmRleChlID0+IGlzRXF1YWwoZSwgdmFsdWUpKSAhPT0gLTE7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2F0dHIuZGF0YS1tb2RlJylcbiAgX21vZGU6IFNlbGVjdE1vZGUgPSBTZWxlY3RNb2RlLnNpbmdsZTtcblxuICBAUHJvcGVydHlBcGkoe1xuICAgIGRlc2NyaXB0aW9uOiAnU2VsZWN0YWJsZSBjb25maWd1cmF0aW9uJyxcbiAgICB0eXBlOiAne21vZGU/OiBTZWxlY3RNb2RlLCB2YWx1ZTogYW55LCBlbmFibGVkPzogYm9vbGVhbiwgZmVhdHVyZXM/OiBGZWF0dXJlW119JyxcbiAgICBkZWZhdWx0OiAne30nXG4gIH0pXG4gIEBJbnB1dCgnam50U2VsZWN0YWJsZScpXG4gIHNldCBjb25maWd1cmUoY29uZmlnOiB7XG4gICAgbW9kZT86IFNlbGVjdE1vZGUsXG4gICAgdmFsdWU6IGFueSxcbiAgICBlbmFibGVkPzogYm9vbGVhbixcbiAgICBmZWF0dXJlcz86IEZlYXR1cmVbXVxuICB9KSB7XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLmNvbmZpZywgY29uZmlnKTtcbiAgfVxuXG4gIHN0YXRlOiBhbnlbXTtcblxuICBvbkNoYW5nZTogKHZhbHVlOiBhbnkpID0+IHZvaWQgPSAoKSA9PiB0aGlzLmxvZ2dlci5lcnJvcigndmFsdWUgYWNjZXNzb3IgaXMgbm90IHJlZ2lzdGVyZWQnKTtcbiAgb25Ub3VjaGVkOiAoKSA9PiB2b2lkID0gKCkgPT4gdGhpcy5sb2dnZXIuZXJyb3IoJ3ZhbHVlIGFjY2Vzc29yIGlzIG5vdCByZWdpc3RlcmVkJyk7XG4gIHJlZ2lzdGVyT25DaGFuZ2UgPSBmbiA9PiB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIHJlZ2lzdGVyT25Ub3VjaGVkID0gZm4gPT4gdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgQEhvc3RMaXN0ZW5lcignYmx1cicpIG9uQmx1ciA9ICgpID0+IHRoaXMub25Ub3VjaGVkKCk7XG5cbiAgY29uc3RydWN0b3IoQEluamVjdChTRUxFQ1RBQkxFX1NJR05BTFMpIHByaXZhdGUgc2lnbmFsczogRXZlbnRFbWl0dGVyPGFueT4sXG4gICAgICAgICAgICAgIHByaXZhdGUgbG9nZ2VyOiBOR1hMb2dnZXIpIHtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuc2lnbmFscy5zdWJzY3JpYmUoc3RhdGUgPT4gdGhpcy5zdGF0ZSA9IHN0YXRlKTtcbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSB8IGFueVtdKSB7XG4gICAgdGhpcy5zdGF0ZSA9ICEhdmFsdWUgPyBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXSA6IFtdO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShkaXNhYmxlZDogYm9vbGVhbikge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBkaXNhYmxlZDtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJylcbiAgc2VsZWN0KCkge1xuICAgIGNvbnN0IHttb2RlLCB2YWx1ZSwgZW5hYmxlZCwgZmVhdHVyZXN9ID0gdGhpcy5jb25maWc7XG4gICAgaWYgKCFlbmFibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3dpdGNoIChtb2RlKSB7XG4gICAgICBjYXNlIFNlbGVjdE1vZGUuc2luZ2xlOlxuICAgICAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5zdGF0ZS5sZW5ndGggPiAwID8gdGhpcy5zdGF0ZVswXSA6IG51bGw7XG4gICAgICAgIGlmICghIWN1cnJlbnQpIHtcbiAgICAgICAgICBjb25zdCBzYW1lID0gaXNFcXVhbChjdXJyZW50LCB2YWx1ZSk7XG4gICAgICAgICAgaWYgKHNhbWUgJiYgIWZlYXR1cmVzLmluY2x1ZGVzKFVJLmZlYXR1cmUuYWxsb3dFbXB0eSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5zdGF0ZSA9IHNhbWUgPyBbXSA6IFt2YWx1ZV07XG4gICAgICAgICAgdGhpcy5vbkNoYW5nZShzYW1lID8gbnVsbCA6IHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnN0YXRlID0gW3ZhbHVlXTtcbiAgICAgICAgICB0aGlzLm9uQ2hhbmdlKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgU2VsZWN0TW9kZS5tdWx0aXBsZTpcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnN0YXRlLmZpbmRJbmRleChlID0+IGlzRXF1YWwoZSwgdmFsdWUpKTtcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgIHRoaXMuc3RhdGUuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnN0YXRlLnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5zdGF0ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB0aGlzLnNpZ25hbHMuZW1pdCh0aGlzLnN0YXRlKTtcbiAgfVxuXG59XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1xuICAgIFNlbGVjdGFibGVEaXJlY3RpdmVcbiAgXSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZVxuICBdLFxuICBleHBvcnRzOiBbXG4gICAgU2VsZWN0YWJsZURpcmVjdGl2ZVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIFNlbGVjdGFibGVNb2R1bGUge1xufVxuIl19