@ssv/ngx.command
Version:
Command pattern implementation for angular. Command used to encapsulate information which is needed to perform an action.
1 lines • 30.9 kB
Source Map (JSON)
{"version":3,"file":"ssv-ngx.command.mjs","sources":["../../../../libs/ngx.command/src/command.options.ts","../../../../libs/ngx.command/src/command.ts","../../../../libs/ngx.command/src/command.util.ts","../../../../libs/ngx.command/src/command.directive.ts","../../../../libs/ngx.command/src/command-ref.directive.ts","../../../../libs/ngx.command/src/command.module.ts","../../../../libs/ngx.command/src/version.ts","../../../../libs/ngx.command/src/ssv-ngx.command.ts"],"sourcesContent":["import { InjectionToken, type Provider } from \"@angular/core\";\n\nexport interface CommandOptions {\n\t/**\n\t * Css Class which gets added/removed on the Command element's host while Command `isExecuting$`.\n\t */\n\texecutingCssClass: string;\n\n\t/** Determines whether the disabled will be handled by the directive or not.\n\t * Disable handled by directive's doesn't always play nice when used with other component/pipe/directive and they also handle disabled.\n\t * This disables the handling manually and need to pass explicitly `[disabled]=\"!saveCmd.canExecute\"`.\n\t */\n\thandleDisabled: boolean;\n}\n\nconst DEFAULT_OPTIONS = Object.freeze<CommandOptions>({\n\texecutingCssClass: \"executing\",\n\thandleDisabled: true,\n});\n\nexport const COMMAND_OPTIONS = new InjectionToken<CommandOptions>(\"SSV_COMMAND_OPTIONS\", {\n\tfactory: () => DEFAULT_OPTIONS,\n});\n\nexport function provideSsvCommandOptions(\n\toptions: Partial<CommandOptions> | ((defaults: Readonly<CommandOptions>) => Partial<CommandOptions>)\n): Provider[] {\n\treturn [\n\t\t{\n\t\t\tprovide: COMMAND_OPTIONS,\n\t\t\tuseFactory: () => {\n\t\t\t\tlet opts = typeof options === \"function\" ? options(DEFAULT_OPTIONS) : options;\n\t\t\t\topts = opts\n\t\t\t\t\t? {\n\t\t\t\t\t\t...DEFAULT_OPTIONS,\n\t\t\t\t\t\t...opts,\n\t\t\t\t\t}\n\t\t\t\t\t: DEFAULT_OPTIONS;\n\t\t\t\treturn opts;\n\t\t\t},\n\t\t},\n\t];\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n\tObservable, Subscription, Subject, of, EMPTY,\n\ttap, filter, switchMap, catchError, finalize, take,\n} from \"rxjs\";\nimport { toSignal } from \"@angular/core/rxjs-interop\";\nimport type { CanExecute, ExecuteAsyncFn, ExecuteFn, ICommand } from \"./command.model\";\nimport { assertInInjectionContext, computed, DestroyRef, inject, Injector, isSignal, signal, type Signal } from \"@angular/core\";\n\nexport interface CommandCreateOptions {\n\tisAsync: boolean,\n\tinjector?: Injector;\n}\n\nconst COMMAND_ASYNC_DEFAULT_OPTIONS: CommandCreateOptions = { isAsync: true };\n\n/** Creates an async {@link Command}. Must be used within an injection context.\n * NOTE: this auto injects `DestroyRef` and handles auto destroy. {@link ICommand.autoDestroy} should not be used.\n */\nexport function commandAsync(\n\texecute: ExecuteAsyncFn,\n\tcanExecute$?: CanExecute,\n\topts?: Omit<CommandCreateOptions, \"isAsync\">,\n): Command {\n\treturn command(execute, canExecute$, opts ? { ...opts, ...COMMAND_ASYNC_DEFAULT_OPTIONS } : COMMAND_ASYNC_DEFAULT_OPTIONS);\n}\n\n/** Creates a {@link Command}. Must be used within an injection context.\n * NOTE: this auto injects `DestroyRef` and handles auto destroy. {@link ICommand.autoDestroy} should not be used.\n */\nexport function command(\n\texecute: ExecuteFn,\n\tcanExecute$?: CanExecute,\n\topts?: CommandCreateOptions,\n): Command {\n\tif (!opts?.injector) {\n\t\tassertInInjectionContext(command);\n\t}\n\tconst injector = opts?.injector ?? inject(Injector);\n\tconst isAsync = opts?.isAsync ?? false;\n\tconst destroyRef = injector.get(DestroyRef);\n\tconst cmd = new Command(execute, canExecute$, isAsync, injector);\n\tcmd.autoDestroy = false;\n\n\tdestroyRef.onDestroy(() => {\n\t\t// console.warn(\"[command::destroy]\");\n\t\tcmd.destroy();\n\t});\n\treturn cmd;\n}\n\n/**\n * Command object used to encapsulate information which is needed to perform an action.\n *\n */\nexport class Command implements ICommand {\n\n\tget isExecuting(): boolean { return this.$isExecuting(); }\n\n\tget canExecute(): boolean { return this.$canExecute(); }\n\n\treadonly $isExecuting = signal(false);\n\treadonly $canExecute = computed(() => !this.$isExecuting() && this._$canExecute());\n\n\tprivate readonly _$canExecute: Signal<boolean>;\n\n\tautoDestroy = true;\n\n\tprivate executionPipe$ = new Subject<unknown[] | undefined>();\n\tprivate executionPipe$$ = Subscription.EMPTY;\n\tprivate subscribersCount = 0;\n\n\t/**\n\t * Creates an instance of Command.\n\t *\n\t * @param execute Execute function to invoke - use `isAsync: true` when `Observable<any>`.\n\t * @param canExecute Observable which determines whether it can execute or not.\n\t * @param isAsync Indicates that the execute function is async e.g. Observable.\n\t * @deprecated Use {@link command} or {@link commandAsync} instead for creating instances.\n\t */\n\tconstructor(\n\t\texecute: ExecuteFn,\n\t\tcanExecute$?: CanExecute,\n\t\tisAsync?: boolean,\n\t\tinjector?: Injector,\n\t) {\n\t\tif (canExecute$) {\n\t\t\tconst canExecute = typeof canExecute$ === \"function\"\n\t\t\t\t? computed(canExecute$)\n\t\t\t\t: canExecute$;\n\t\t\tthis._$canExecute = isSignal(canExecute)\n\t\t\t\t? canExecute\n\t\t\t\t: toSignal(canExecute, { initialValue: false, injector });\n\t\t} else {\n\t\t\tthis._$canExecute = signal(true);\n\t\t}\n\t\tthis.executionPipe$$ = this.buildExecutionPipe(execute, isAsync).subscribe();\n\t}\n\n\t/** Execute function to invoke. */\n\texecute(...args: unknown[]): void {\n\t\t// console.warn(\"[command::execute]\", args);\n\t\tthis.executionPipe$.next(args);\n\t}\n\n\t/** Disposes all resources held by subscriptions. */\n\tdestroy(): void {\n\t\t// console.warn(\"[command::destroy]\");\n\t\tthis.executionPipe$$.unsubscribe();\n\t}\n\n\tsubscribe(): void {\n\t\tthis.subscribersCount++;\n\t}\n\n\tunsubscribe(): void {\n\t\tthis.subscribersCount--;\n\t\t// console.log(\"[command::unsubscribe]\", { autoDestroy: this.autoDestroy, subscribersCount: this.subscribersCount });\n\t\tif (this.autoDestroy && this.subscribersCount <= 0) {\n\t\t\tthis.destroy();\n\t\t}\n\t}\n\n\tprivate buildExecutionPipe(execute: (...args: unknown[]) => any, isAsync?: boolean): Observable<unknown> {\n\t\tlet pipe$ = this.executionPipe$.pipe(\n\t\t\t// tap(x => console.warn(\">>>> executionPipe\", this._canExecute)),\n\t\t\tfilter(() => this.$canExecute()),\n\t\t\ttap(() => {\n\t\t\t\t// console.log(\"[command::executionPipe$] do#1 - set execute\", { args: x });\n\t\t\t\tthis.$isExecuting.set(true);\n\t\t\t})\n\t\t);\n\n\t\tconst execFn = isAsync\n\t\t\t? switchMap<unknown[] | undefined, any[]>(args => {\n\t\t\t\tif (args) {\n\t\t\t\t\treturn execute(...args);\n\t\t\t\t}\n\t\t\t\treturn execute();\n\t\t\t})\n\t\t\t: tap((args: unknown[] | undefined) => {\n\t\t\t\tif (args) {\n\t\t\t\t\texecute(...args);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\texecute();\n\t\t\t});\n\n\t\tpipe$ = pipe$.pipe(\n\t\t\tswitchMap(args => of(args).pipe(\n\t\t\t\texecFn,\n\t\t\t\tfinalize(() => {\n\t\t\t\t\t// console.log(\"[command::executionPipe$] finalize inner#1 - set idle\");\n\t\t\t\t\tthis.$isExecuting.set(false);\n\t\t\t\t}),\n\t\t\t\ttake(1),\n\t\t\t\tcatchError(error => {\n\t\t\t\t\tconsole.error(\"Unhandled execute error\", error);\n\t\t\t\t\treturn EMPTY;\n\t\t\t\t}),\n\t\t\t)),\n\t\t\ttap(() => {\n\t\t\t\t// console.log(\"[command::executionPipe$] tap#2 - set idle\");\n\t\t\t\t// this._isExecuting$.next(false);\n\t\t\t\tthis.$isExecuting.set(false);\n\t\t\t}),\n\t\t);\n\t\treturn pipe$;\n\t}\n\n}\n\n/**\n * Async Command object used to encapsulate information which is needed to perform an action,\n * which takes an execute function as Observable/Promise.\n * @deprecated Use {@link commandAsync} instead.\n */\nexport class CommandAsync extends Command {\n\n\t/**\n\t * @deprecated Use {@link commandAsync} instead to create an instance.\n\t */\n\tconstructor(\n\t\texecute: ExecuteAsyncFn,\n\t\tcanExecute$?: CanExecute,\n\t) {\n\t\tsuper(execute, canExecute$, true);\n\t}\n\n}\n","import { AbstractControl, PristineChangeEvent, StatusChangeEvent } from \"@angular/forms\";\nimport { Observable, map, distinctUntilChanged, filter, combineLatest, of, defer, concat } from \"rxjs\";\n\nimport { CommandCreator, ICommand } from \"./command.model\";\nimport { Command } from \"./command\";\nimport { type Signal, computed } from \"@angular/core\";\n\n/** Determines whether the arg object is of type `Command`. */\nexport function isCommand(arg: unknown): arg is ICommand {\n\treturn arg instanceof Command;\n}\n\n/** Determines whether the arg object is of type `CommandCreator`. */\nexport function isCommandCreator(arg: unknown): arg is CommandCreator {\n\tif (arg instanceof Command) {\n\t\treturn false;\n\t} else if (isAssumedType<CommandCreator>(arg) && arg.execute && arg.host) {\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nexport interface CanExecuteFormOptions {\n\t/** Determines whether to check for validity. (defaults: true) */\n\tvalidity?: boolean;\n\n\t/** Determines whether to check whether UI has been touched. (defaults: true) */\n\tdirty?: boolean;\n}\n\nconst CAN_EXECUTE_FORM_OPTIONS_DEFAULTS = Object.freeze<CanExecuteFormOptions>({\n\tvalidity: true,\n\tdirty: true,\n})\n\n/** Get can execute from form validity/pristine as an observable. */\nexport function canExecuteFromNgForm(\n\tform: AbstractControl,\n\toptions?: CanExecuteFormOptions\n): Observable<boolean> {\n\tconst opts: CanExecuteFormOptions = options ?\n\t\t{ ...CAN_EXECUTE_FORM_OPTIONS_DEFAULTS, ...options }\n\t\t: CAN_EXECUTE_FORM_OPTIONS_DEFAULTS;\n\n\tconst pristine$ = opts.dirty\n\t\t? concat(\n\t\t\tdefer(() => of(form.pristine)),\n\t\t\tform.events.pipe(\n\t\t\t\tfilter(x => x instanceof PristineChangeEvent),\n\t\t\t\tmap(x => x.pristine),\n\t\t\t)\n\t\t).pipe(distinctUntilChanged(),)\n\t\t: of(true);\n\n\tconst valid$ = opts.validity\n\t\t? concat(\n\t\t\tdefer(() => of(form.valid)),\n\t\t\tform.events.pipe(\n\t\t\t\tfilter(x => x instanceof StatusChangeEvent),\n\t\t\t\tmap(x => x.status === \"VALID\"),\n\t\t\t)\n\t\t).pipe(distinctUntilChanged(),)\n\t\t: of(true);\n\n\treturn combineLatest([pristine$, valid$]).pipe(\n\t\tmap(([pristine, valid]) => !!(!opts.validity || valid) && !!(!opts.dirty || !pristine)),\n\t\tdistinctUntilChanged(),\n\t);\n}\n\n/** Can executed based on valid/dirty signal inputs. */\nexport function canExecuteFromSignals(\n\tsignals: { valid: Signal<boolean>, dirty: Signal<boolean> },\n\toptions?: CanExecuteFormOptions\n): Signal<boolean> {\n\tconst opts: CanExecuteFormOptions = options ?\n\t\t{ ...CAN_EXECUTE_FORM_OPTIONS_DEFAULTS, ...options }\n\t\t: CAN_EXECUTE_FORM_OPTIONS_DEFAULTS;\n\treturn computed(() => !!(!opts.validity || signals.valid()) && !!(!opts.dirty || signals.dirty()));\n}\n\n\nfunction isAssumedType<T = Record<string, unknown>>(x: unknown): x is Partial<T> {\n\treturn x !== null && typeof x === \"object\";\n}\n","import {\n\tDirective,\n\tOnInit,\n\tElementRef,\n\tRenderer2,\n\tChangeDetectorRef,\n\tinject,\n\teffect,\n\tinput,\n\tInjector,\n\tcomputed,\n\tDestroyRef,\n} from \"@angular/core\";\n\nimport { type CommandOptions, COMMAND_OPTIONS } from \"./command.options\";\nimport { command } from \"./command\";\nimport { isCommand, isCommandCreator } from \"./command.util\";\nimport { CommandCreator, type ICommand } from \"./command.model\";\n\n/**\n * Controls the state of a component in sync with `Command`.\n *\n * @example\n * ### Most common usage\n * ```html\n * <button [ssvCommand]=\"saveCmd\">Save</button>\n * ```\n *\n *\n * ### Usage with options\n * ```html\n * <button [ssvCommand]=\"saveCmd\" [ssvCommandOptions]=\"{executingCssClass: 'in-progress'}\">Save</button>\n * ```\n *\n *\n * ### Usage with params\n * This is useful for collections (loops) or using multiple actions with different args.\n * *NOTE: This will share the `isExecuting` when used with multiple controls.*\n *\n * #### With single param\n *\n * ```html\n * <button [ssvCommand]=\"saveCmd\" [ssvCommandParams]=\"{id: 1}\">Save</button>\n * ```\n * *NOTE: if you have only 1 argument as an array, it should be enclosed within an array e.g. `[['apple', 'banana']]`,\n * else it will spread and you will `arg1: \"apple\", arg2: \"banana\"`*\n *\n * #### With multi params\n * ```html\n * <button [ssvCommand]=\"saveCmd\" [ssvCommandParams]=\"[{id: 1}, 'hello', hero]\">Save</button>\n * ```\n *\n * ### Usage with Command Creator\n * This is useful for collections (loops) or using multiple actions with different args, whilst not sharing `isExecuting`.\n *\n *\n * ```html\n * <button [ssvCommand]=\"{host: this, execute: removeHero$, canExecute: isValid$, params: [hero, 1337, 'xx']}\">Save</button>\n * ```\n *\n */\n\nconst NAME_CAMEL = \"ssvCommand\";\n\n// let nextUniqueId = 0;\n\n@Directive({\n\tselector: `[${NAME_CAMEL}]`,\n\thost: {\n\t\t\"[class]\": \"_hostClasses()\",\n\t\t\"(click)\": \"_handleClick()\",\n\t},\n\texportAs: NAME_CAMEL,\n\tstandalone: true,\n})\nexport class SsvCommand implements OnInit {\n\n\t// readonly id = `${NAME_CAMEL}-${nextUniqueId++}`;\n\treadonly #options = inject(COMMAND_OPTIONS);\n\treadonly #renderer = inject(Renderer2);\n\treadonly #element = inject(ElementRef);\n\treadonly #cdr = inject(ChangeDetectorRef);\n\treadonly #injector = inject(Injector);\n\n\treadonly commandOrCreator = input.required<ICommand | CommandCreator>({\n\t\talias: `ssvCommand`\n\t});\n\treadonly ssvCommandOptions = input<Partial<CommandOptions>>(this.#options);\n\treadonly commandOptions = computed<CommandOptions>(() => {\n\t\tconst value = this.ssvCommandOptions();\n\t\tif (value === this.#options) {\n\t\t\treturn this.#options;\n\t\t}\n\t\treturn {\n\t\t\t...this.#options,\n\t\t\t...value,\n\t\t};\n\t});\n\treadonly ssvCommandParams = input<unknown | unknown[]>(undefined);\n\treadonly commandParams = computed<unknown | unknown[]>(() => this.ssvCommandParams() || this.creatorParams);\n\treadonly _hostClasses = computed(() => [\"ssv-command\", this.#executingClass()]);\n\treadonly #executingClass = computed(() => this._command.$isExecuting() ? this.commandOptions().executingCssClass : \"\");\n\n\tprivate creatorParams: unknown | unknown[] = [];\n\n\tget command(): ICommand { return this._command; }\n\n\tprivate _command!: ICommand;\n\n\tconstructor() {\n\t\tconst destroyRef = inject(DestroyRef);\n\t\tdestroyRef.onDestroy(() => {\n\t\t\tthis._command?.unsubscribe();\n\t\t});\n\t\teffect(() => {\n\t\t\tconst canExecute = this._command.$canExecute();\n\t\t\tthis.trySetDisabled(!canExecute);\n\t\t\t// console.log(\"[ssvCommand::canExecute$]\", { canExecute: x });\n\t\t\tthis.#cdr.markForCheck();\n\t\t});\n\t}\n\n\tngOnInit(): void {\n\t\tconst commandOrCreator = this.commandOrCreator();\n\t\t// console.log(\"[ssvCommand::init]\", this.#options);\n\t\tif (isCommand(commandOrCreator)) {\n\t\t\tthis._command = commandOrCreator;\n\t\t} else if (isCommandCreator(commandOrCreator)) {\n\t\t\tconst isAsync = commandOrCreator.isAsync || commandOrCreator.isAsync === undefined;\n\t\t\tthis.creatorParams = commandOrCreator.params;\n\n\t\t\t// todo: find something like this for ivy (or angular10+)\n\t\t\t// const hostComponent = (this.viewContainer as any)._view.component;\n\n\t\t\tconst execFn = commandOrCreator.execute.bind(commandOrCreator.host);\n\t\t\tconst params = this.commandParams();\n\n\t\t\tconst canExec = commandOrCreator.canExecute instanceof Function\n\t\t\t\t? commandOrCreator.canExecute.bind(commandOrCreator.host, params)()\n\t\t\t\t: commandOrCreator.canExecute;\n\n\t\t\t// console.log(\"[ssvCommand::init] command creator\", {\n\t\t\t// \tfirstParam: params ? params[0] : null,\n\t\t\t// \tparams\n\t\t\t// });\n\n\t\t\tthis._command = command(execFn, canExec, { isAsync, injector: this.#injector });\n\t\t} else {\n\t\t\tthrow new Error(`${NAME_CAMEL}: [${NAME_CAMEL}] is not defined properly!`);\n\t\t}\n\n\t\tthis._command.subscribe();\n\t}\n\n\t_handleClick(): void {\n\t\tconst commandParams = this.commandParams();\n\t\t// console.log(\"[ssvCommand::onClick]\", commandParams);\n\t\tif (Array.isArray(commandParams)) {\n\t\t\tthis._command.execute(...commandParams);\n\t\t} else {\n\t\t\tthis._command.execute(commandParams);\n\t\t}\n\t}\n\n\tprivate trySetDisabled(disabled: boolean) {\n\t\tif (this.commandOptions().handleDisabled) {\n\t\t\t// console.warn(\">>>> disabled\", { id: this.id, disabled });\n\t\t\tthis.#renderer.setProperty(this.#element.nativeElement, \"disabled\", disabled);\n\t\t}\n\t}\n\n}\n\n","import { Directive, OnInit, inject, Injector, DestroyRef, input } from \"@angular/core\";\n\nimport type { ICommand, CommandCreator, CanExecute } from \"./command.model\";\nimport { isCommandCreator } from \"./command.util\";\nimport { command } from \"./command\";\n\nconst NAME_CAMEL = \"ssvCommandRef\";\n\n/**\n * Command creator ref, directive which allows creating Command in the template\n * and associate it to a command (in order to share executions).\n * @example\n * ### Most common usage\n * ```html\n * <div #actionCmd=\"ssvCommandRef\" [ssvCommandRef]=\"{host: this, execute: removeHero$, canExecute: isValid$}\">\n * <button [ssvCommand]=\"actionCmd.command\" [ssvCommandParams]=\"hero\">\n * Remove\n * </button>\n * <button [ssvCommand]=\"actionCmd.command\" [ssvCommandParams]=\"hero\">\n * Remove\n * </button>\n * </div>\n * ```\n *\n */\n@Directive({\n\tselector: `[${NAME_CAMEL}]`,\n\texportAs: NAME_CAMEL,\n\tstandalone: true,\n})\nexport class SsvCommandRef implements OnInit {\n\n\treadonly #injector = inject(Injector);\n\n\treadonly commandCreator = input.required<CommandCreator>({\n\t\talias: `ssvCommandRef`\n\t});\n\n\tget command(): ICommand { return this._command; }\n\tprivate _command!: ICommand;\n\n\tconstructor() {\n\t\tconst destroyRef = inject(DestroyRef);\n\t\tdestroyRef.onDestroy(() => {\n\t\t\tthis._command?.unsubscribe();\n\t\t});\n\t}\n\n\tngOnInit(): void {\n\t\tif (isCommandCreator(this.commandCreator())) {\n\t\t\tconst commandCreator = this.commandCreator();\n\t\t\tconst isAsync = commandCreator.isAsync || commandCreator.isAsync === undefined;\n\n\t\t\tconst execFn = commandCreator.execute.bind(commandCreator.host);\n\n\t\t\tthis._command = command(execFn, commandCreator.canExecute as CanExecute, { isAsync, injector: this.#injector });\n\t\t} else {\n\t\t\tthrow new Error(`${NAME_CAMEL}: [${NAME_CAMEL}] is not defined properly!`);\n\t\t}\n\t}\n\n}\n","import { NgModule } from \"@angular/core\";\n\nimport { SsvCommand } from \"./command.directive\";\nimport { SsvCommandRef } from \"./command-ref.directive\";\n\nconst EXPORTED_IMPORTS = [\n\tSsvCommand,\n\tSsvCommandRef\n];\n\n/** @deprecated Use standalone instead. */\n@NgModule({\n\timports: [EXPORTED_IMPORTS],\n\texports: [EXPORTED_IMPORTS]\n})\nexport class SsvCommandModule {\n\n}\n","export const VERSION = \"4.0.0-dev.83\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["NAME_CAMEL"],"mappings":"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"}