UNPKG

@ssv/ngx.command

Version:

Command pattern implementation for angular. Command used to encapsulate information which is needed to perform an action.

57 lines 6.56 kB
import { Directive, Input } from "@angular/core"; import { isCommandCreator } from "./command.util"; import { Command } from "./command"; import * as i0 from "@angular/core"; const NAME_CAMEL = "ssvCommandRef"; /** * Command creator ref, directive which allows creating Command in the template * and associate it to a command (in order to share executions). * @example * ### Most common usage * ```html * <div #actionCmd="ssvCommandRef" [ssvCommandRef]="{host: this, execute: removeHero$, canExecute: isValid$}"> * <button [ssvCommand]="actionCmd.command" [ssvCommandParams]="hero"> * Remove * </button> * <button [ssvCommand]="actionCmd.command" [ssvCommandParams]="hero"> * Remove * </button> * </div> * ``` * */ export class CommandRefDirective { commandCreator; get command() { return this._command; } _command; ngOnInit() { if (isCommandCreator(this.commandCreator)) { const isAsync = this.commandCreator.isAsync || this.commandCreator.isAsync === undefined; const execFn = this.commandCreator.execute.bind(this.commandCreator.host); this._command = new Command(execFn, this.commandCreator.canExecute, isAsync); } else { throw new Error(`${NAME_CAMEL}: [${NAME_CAMEL}] is not defined properly!`); } } ngOnDestroy() { // console.log("[commandRef::destroy]"); if (this._command) { this._command.destroy(); } } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: CommandRefDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.9", type: CommandRefDirective, isStandalone: true, selector: "[ssvCommandRef]", inputs: { commandCreator: ["ssvCommandRef", "commandCreator"] }, exportAs: ["ssvCommandRef"], ngImport: i0 }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: CommandRefDirective, decorators: [{ type: Directive, args: [{ selector: `[${NAME_CAMEL}]`, exportAs: NAME_CAMEL, standalone: true, }] }], propDecorators: { commandCreator: [{ type: Input, args: [NAME_CAMEL] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZC1yZWYuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGlicy9uZ3guY29tbWFuZC9zcmMvY29tbWFuZC1yZWYuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUdwRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDOztBQUVwQyxNQUFNLFVBQVUsR0FBRyxlQUFlLENBQUM7QUFFbkM7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFNSCxNQUFNLE9BQU8sbUJBQW1CO0lBRVosY0FBYyxDQUE2QjtJQUU5RCxJQUFJLE9BQU8sS0FBZSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ3pDLFFBQVEsQ0FBWTtJQUU1QixRQUFRO1FBQ1AsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztZQUMzQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sS0FBSyxTQUFTLENBQUM7WUFFekYsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUE2QyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ2pILENBQUM7YUFBTSxDQUFDO1lBQ1AsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLFVBQVUsTUFBTSxVQUFVLDRCQUE0QixDQUFDLENBQUM7UUFDNUUsQ0FBQztJQUNGLENBQUM7SUFFRCxXQUFXO1FBQ1Ysd0NBQXdDO1FBQ3hDLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDekIsQ0FBQztJQUNGLENBQUM7dUdBdkJXLG1CQUFtQjsyRkFBbkIsbUJBQW1COzsyRkFBbkIsbUJBQW1CO2tCQUwvQixTQUFTO21CQUFDO29CQUNWLFFBQVEsRUFBRSxJQUFJLFVBQVUsR0FBRztvQkFDM0IsUUFBUSxFQUFFLFVBQVU7b0JBQ3BCLFVBQVUsRUFBRSxJQUFJO2lCQUNoQjs4QkFHbUIsY0FBYztzQkFBaEMsS0FBSzt1QkFBQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBEaXJlY3RpdmUsIE9uSW5pdCwgT25EZXN0cm95LCBJbnB1dCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5cbmltcG9ydCB7IElDb21tYW5kLCBDb21tYW5kQ3JlYXRvciB9IGZyb20gXCIuL2NvbW1hbmQubW9kZWxcIjtcbmltcG9ydCB7IGlzQ29tbWFuZENyZWF0b3IgfSBmcm9tIFwiLi9jb21tYW5kLnV0aWxcIjtcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tIFwiLi9jb21tYW5kXCI7XG5cbmNvbnN0IE5BTUVfQ0FNRUwgPSBcInNzdkNvbW1hbmRSZWZcIjtcblxuLyoqXG4gKiBDb21tYW5kIGNyZWF0b3IgcmVmLCBkaXJlY3RpdmUgd2hpY2ggYWxsb3dzIGNyZWF0aW5nIENvbW1hbmQgaW4gdGhlIHRlbXBsYXRlXG4gKiBhbmQgYXNzb2NpYXRlIGl0IHRvIGEgY29tbWFuZCAoaW4gb3JkZXIgdG8gc2hhcmUgZXhlY3V0aW9ucykuXG4gKiBAZXhhbXBsZVxuICogIyMjIE1vc3QgY29tbW9uIHVzYWdlXG4gKiBgYGBodG1sXG4gKiA8ZGl2ICNhY3Rpb25DbWQ9XCJzc3ZDb21tYW5kUmVmXCIgW3NzdkNvbW1hbmRSZWZdPVwie2hvc3Q6IHRoaXMsIGV4ZWN1dGU6IHJlbW92ZUhlcm8kLCBjYW5FeGVjdXRlOiBpc1ZhbGlkJH1cIj5cbiAqICAgIDxidXR0b24gW3NzdkNvbW1hbmRdPVwiYWN0aW9uQ21kLmNvbW1hbmRcIiBbc3N2Q29tbWFuZFBhcmFtc109XCJoZXJvXCI+XG4gKiAgICAgIFJlbW92ZVxuICogICAgPC9idXR0b24+XG4gKiAgICA8YnV0dG9uIFtzc3ZDb21tYW5kXT1cImFjdGlvbkNtZC5jb21tYW5kXCIgW3NzdkNvbW1hbmRQYXJhbXNdPVwiaGVyb1wiPlxuICogICAgICAgUmVtb3ZlXG4gKiAgICA8L2J1dHRvbj5cbiAqIDwvZGl2PlxuICogYGBgXG4gKlxuICovXG5ARGlyZWN0aXZlKHtcblx0c2VsZWN0b3I6IGBbJHtOQU1FX0NBTUVMfV1gLFxuXHRleHBvcnRBczogTkFNRV9DQU1FTCxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgQ29tbWFuZFJlZkRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuXHRASW5wdXQoTkFNRV9DQU1FTCkgY29tbWFuZENyZWF0b3I6IENvbW1hbmRDcmVhdG9yIHwgdW5kZWZpbmVkO1xuXG5cdGdldCBjb21tYW5kKCk6IElDb21tYW5kIHsgcmV0dXJuIHRoaXMuX2NvbW1hbmQ7IH1cblx0cHJpdmF0ZSBfY29tbWFuZCE6IElDb21tYW5kO1xuXG5cdG5nT25Jbml0KCk6IHZvaWQge1xuXHRcdGlmIChpc0NvbW1hbmRDcmVhdG9yKHRoaXMuY29tbWFuZENyZWF0b3IpKSB7XG5cdFx0XHRjb25zdCBpc0FzeW5jID0gdGhpcy5jb21tYW5kQ3JlYXRvci5pc0FzeW5jIHx8IHRoaXMuY29tbWFuZENyZWF0b3IuaXNBc3luYyA9PT0gdW5kZWZpbmVkO1xuXG5cdFx0XHRjb25zdCBleGVjRm4gPSB0aGlzLmNvbW1hbmRDcmVhdG9yLmV4ZWN1dGUuYmluZCh0aGlzLmNvbW1hbmRDcmVhdG9yLmhvc3QpO1xuXHRcdFx0dGhpcy5fY29tbWFuZCA9IG5ldyBDb21tYW5kKGV4ZWNGbiwgdGhpcy5jb21tYW5kQ3JlYXRvci5jYW5FeGVjdXRlIGFzIE9ic2VydmFibGU8Ym9vbGVhbj4gfCB1bmRlZmluZWQsIGlzQXN5bmMpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYCR7TkFNRV9DQU1FTH06IFske05BTUVfQ0FNRUx9XSBpcyBub3QgZGVmaW5lZCBwcm9wZXJseSFgKTtcblx0XHR9XG5cdH1cblxuXHRuZ09uRGVzdHJveSgpOiB2b2lkIHtcblx0XHQvLyBjb25zb2xlLmxvZyhcIltjb21tYW5kUmVmOjpkZXN0cm95XVwiKTtcblx0XHRpZiAodGhpcy5fY29tbWFuZCkge1xuXHRcdFx0dGhpcy5fY29tbWFuZC5kZXN0cm95KCk7XG5cdFx0fVxuXHR9XG5cbn1cbiJdfQ==