@taiga-ui/core
Version:
Core library for creating Angular components and applications using Taiga UI
120 lines (114 loc) • 6.33 kB
JavaScript
import * as i0 from '@angular/core';
import { signal, InjectionToken, Optional, SkipSelf, inject, Directive, Input, effect } from '@angular/core';
import { tuiProvide } from '@taiga-ui/cdk/utils/miscellaneous';
import { TUI_DEFAULT_IDENTITY_MATCHER, TUI_FALSE_HANDLER, TUI_ALLOW_SIGNAL_WRITES } from '@taiga-ui/cdk/constants';
import { NG_VALIDATORS } from '@angular/forms';
import { TuiValidator } from '@taiga-ui/cdk/directives/validator';
const TUI_DEFAULT_ITEMS_HANDLERS = {
stringify: signal(String),
identityMatcher: signal(TUI_DEFAULT_IDENTITY_MATCHER),
disabledItemHandler: signal(TUI_FALSE_HANDLER),
};
/**
* Default items handlers for components
*/
const TUI_ITEMS_HANDLERS = new InjectionToken(ngDevMode ? 'TUI_ITEMS_HANDLERS' : '', {
factory: () => TUI_DEFAULT_ITEMS_HANDLERS,
});
function tuiItemsHandlersProvider(options) {
return {
provide: TUI_ITEMS_HANDLERS,
deps: [[new Optional(), new SkipSelf(), TUI_ITEMS_HANDLERS]],
useFactory: (parent) => ({
stringify: signal(parent?.stringify() ?? TUI_DEFAULT_ITEMS_HANDLERS.stringify()),
identityMatcher: signal(parent?.identityMatcher() ?? TUI_DEFAULT_ITEMS_HANDLERS.identityMatcher()),
disabledItemHandler: signal(parent?.disabledItemHandler() ??
TUI_DEFAULT_ITEMS_HANDLERS.disabledItemHandler()),
...options,
}),
};
}
class TuiItemsHandlersDirective {
constructor() {
this.defaultHandlers = inject(TUI_ITEMS_HANDLERS, {
skipSelf: true,
});
this.stringify = signal(this.defaultHandlers.stringify());
this.identityMatcher = signal(this.defaultHandlers.identityMatcher());
this.disabledItemHandler = signal(this.defaultHandlers.disabledItemHandler());
}
// TODO(v5): use signal inputs
set stringifySetter(x) {
this.stringify.set(x);
}
// TODO(v5): use signal inputs
set identityMatcherSetter(x) {
this.identityMatcher.set(x);
}
// TODO(v5): use signal inputs
set disabledItemHandlerSetter(x) {
this.disabledItemHandler.set(x);
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiItemsHandlersDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: TuiItemsHandlersDirective, isStandalone: true, inputs: { stringifySetter: ["stringify", "stringifySetter"], identityMatcherSetter: ["identityMatcher", "identityMatcherSetter"], disabledItemHandlerSetter: ["disabledItemHandler", "disabledItemHandlerSetter"] }, providers: [tuiProvide(TUI_ITEMS_HANDLERS, TuiItemsHandlersDirective)], ngImport: i0 }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiItemsHandlersDirective, decorators: [{
type: Directive,
args: [{
standalone: true,
providers: [tuiProvide(TUI_ITEMS_HANDLERS, TuiItemsHandlersDirective)],
}]
}], propDecorators: { stringifySetter: [{
type: Input,
args: ['stringify']
}], identityMatcherSetter: [{
type: Input,
args: ['identityMatcher']
}], disabledItemHandlerSetter: [{
type: Input,
args: ['disabledItemHandler']
}] } });
class TuiWithItemsHandlers {
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiWithItemsHandlers, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: TuiWithItemsHandlers, isStandalone: true, hostDirectives: [{ directive: TuiItemsHandlersDirective, inputs: ["stringify", "stringify", "identityMatcher", "identityMatcher", "disabledItemHandler", "disabledItemHandler"] }], ngImport: i0 }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiWithItemsHandlers, decorators: [{
type: Directive,
args: [{
standalone: true,
hostDirectives: [
{
directive: TuiItemsHandlersDirective,
inputs: ['stringify', 'identityMatcher', 'disabledItemHandler'],
},
],
}]
}] });
class TuiItemsHandlersValidator extends TuiValidator {
constructor() {
super(...arguments);
this.handlers = inject(TuiItemsHandlersDirective);
this.update = effect(() => {
this.handlers.disabledItemHandler();
this.onChange();
}, TUI_ALLOW_SIGNAL_WRITES);
this.disabledItemHandler = (value) => Array.isArray(value)
? value.some((item) => this.handlers.disabledItemHandler()(item))
: Boolean(value) && this.handlers.disabledItemHandler()(value);
this.validate = ({ value }) => this.disabledItemHandler(value) ? { tuiDisabledItem: value } : null;
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiItemsHandlersValidator, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: TuiItemsHandlersValidator, isStandalone: true, providers: [tuiProvide(NG_VALIDATORS, TuiItemsHandlersValidator, true)], usesInheritance: true, ngImport: i0 }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiItemsHandlersValidator, decorators: [{
type: Directive,
args: [{
standalone: true,
providers: [tuiProvide(NG_VALIDATORS, TuiItemsHandlersValidator, true)],
}]
}] });
/**
* Generated bundle index. Do not edit.
*/
export { TUI_DEFAULT_ITEMS_HANDLERS, TUI_ITEMS_HANDLERS, TuiItemsHandlersDirective, TuiItemsHandlersValidator, TuiWithItemsHandlers, tuiItemsHandlersProvider };
//# sourceMappingURL=taiga-ui-core-directives-items-handlers.mjs.map