@ssv/ngx.command 2.2.0 → 2.3.0-dev.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -7
- package/command-ref.directive.d.ts +3 -0
- package/command.directive.d.ts +3 -0
- package/esm2020/command-ref.directive.mjs +54 -0
- package/esm2020/command.directive.mjs +166 -0
- package/esm2020/command.mjs +127 -0
- package/esm2020/command.model.mjs +2 -0
- package/esm2020/command.util.mjs +29 -0
- package/esm2020/config.mjs +8 -0
- package/esm2020/index.mjs +8 -0
- package/esm2020/module.mjs +49 -0
- package/esm2020/ssv-ngx.command.mjs +5 -0
- package/esm2020/version.mjs +2 -0
- package/fesm2015/{ssv-ngx.command.js → ssv-ngx.command.mjs} +66 -45
- package/fesm2015/ssv-ngx.command.mjs.map +1 -0
- package/fesm2020/ssv-ngx.command.mjs +424 -0
- package/fesm2020/ssv-ngx.command.mjs.map +1 -0
- package/module.d.ts +6 -0
- package/package.json +23 -13
- package/version.d.ts +1 -1
- package/CHANGELOG.md +0 -216
- package/bundles/ssv-ngx.command.umd.js +0 -759
- package/bundles/ssv-ngx.command.umd.js.map +0 -1
- package/bundles/ssv-ngx.command.umd.min.js +0 -16
- package/bundles/ssv-ngx.command.umd.min.js.map +0 -1
- package/esm2015/command-ref.directive.js +0 -50
- package/esm2015/command.directive.js +0 -156
- package/esm2015/command.js +0 -127
- package/esm2015/command.model.js +0 -2
- package/esm2015/command.util.js +0 -28
- package/esm2015/config.js +0 -8
- package/esm2015/index.js +0 -8
- package/esm2015/module.js +0 -36
- package/esm2015/ssv-ngx.command.js +0 -5
- package/esm2015/version.js +0 -2
- package/fesm2015/ssv-ngx.command.js.map +0 -1
- package/ssv-ngx.command.d.ts +0 -4
- package/ssv-ngx.command.metadata.json +0 -1
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { BehaviorSubject, Subject, Subscription, combineLatest, of, EMPTY } from 'rxjs';
|
|
2
2
|
import { map, tap, filter, switchMap, finalize, take, catchError, delay, startWith, distinctUntilChanged, takeUntil } from 'rxjs/operators';
|
|
3
|
-
import
|
|
3
|
+
import * as i0 from '@angular/core';
|
|
4
|
+
import { InjectionToken, Directive, Inject, Input, HostListener, Optional, NgModule } from '@angular/core';
|
|
4
5
|
|
|
5
6
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
6
7
|
/**
|
|
@@ -152,7 +153,8 @@ function isCommandCreator(arg) {
|
|
|
152
153
|
function canExecuteFromNgForm(form, options) {
|
|
153
154
|
const opts = Object.assign({ validity: true, dirty: true }, options);
|
|
154
155
|
return form.statusChanges
|
|
155
|
-
? form.statusChanges.pipe(
|
|
156
|
+
? form.statusChanges.pipe(// todo: remove cast when working correctly
|
|
157
|
+
delay(0), startWith(form.valid), map(() => !!(!opts.validity || form.valid) && !!(!opts.dirty || form.dirty)), distinctUntilChanged())
|
|
156
158
|
: of(true);
|
|
157
159
|
}
|
|
158
160
|
function isAssumedType(x) {
|
|
@@ -201,7 +203,7 @@ function isAssumedType(x) {
|
|
|
201
203
|
* ```
|
|
202
204
|
*
|
|
203
205
|
*/
|
|
204
|
-
const NAME_CAMEL = "ssvCommand";
|
|
206
|
+
const NAME_CAMEL$1 = "ssvCommand";
|
|
205
207
|
// let nextUniqueId = 0;
|
|
206
208
|
class CommandDirective {
|
|
207
209
|
constructor(config, renderer, element, cdr) {
|
|
@@ -223,7 +225,7 @@ class CommandDirective {
|
|
|
223
225
|
ngOnInit() {
|
|
224
226
|
// console.log("[ssvCommand::init]", this.config);
|
|
225
227
|
if (!this.commandOrCreator) {
|
|
226
|
-
throw new Error(`${NAME_CAMEL}: [${NAME_CAMEL}] should be defined!`);
|
|
228
|
+
throw new Error(`${NAME_CAMEL$1}: [${NAME_CAMEL$1}] should be defined!`);
|
|
227
229
|
}
|
|
228
230
|
else if (isCommand(this.commandOrCreator)) {
|
|
229
231
|
this._command = this.commandOrCreator;
|
|
@@ -244,7 +246,7 @@ class CommandDirective {
|
|
|
244
246
|
this._command = new Command(execFn, canExec, isAsync);
|
|
245
247
|
}
|
|
246
248
|
else {
|
|
247
|
-
throw new Error(`${NAME_CAMEL}: [${NAME_CAMEL}] is not defined properly!`);
|
|
249
|
+
throw new Error(`${NAME_CAMEL$1}: [${NAME_CAMEL$1}] is not defined properly!`);
|
|
248
250
|
}
|
|
249
251
|
this._command.subscribe();
|
|
250
252
|
this._command.canExecute$.pipe(this.commandOptions.hasDisabledDelay
|
|
@@ -290,26 +292,34 @@ class CommandDirective {
|
|
|
290
292
|
}
|
|
291
293
|
}
|
|
292
294
|
}
|
|
293
|
-
CommandDirective
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
]
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
]
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
295
|
+
CommandDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: CommandDirective, deps: [{ token: COMMAND_CONFIG }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
296
|
+
CommandDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.9", type: CommandDirective, selector: "[ssvCommand]", inputs: { commandOrCreator: ["ssvCommand", "commandOrCreator"], commandOptions: ["ssvCommandOptions", "commandOptions"], commandParams: ["ssvCommandParams", "commandParams"] }, host: { listeners: { "click": "onClick()" } }, exportAs: ["ssvCommand"], ngImport: i0 });
|
|
297
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: CommandDirective, decorators: [{
|
|
298
|
+
type: Directive,
|
|
299
|
+
args: [{
|
|
300
|
+
selector: `[${NAME_CAMEL$1}]`,
|
|
301
|
+
exportAs: NAME_CAMEL$1
|
|
302
|
+
}]
|
|
303
|
+
}], ctorParameters: function () {
|
|
304
|
+
return [{ type: undefined, decorators: [{
|
|
305
|
+
type: Inject,
|
|
306
|
+
args: [COMMAND_CONFIG]
|
|
307
|
+
}] }, { type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }];
|
|
308
|
+
}, propDecorators: { commandOrCreator: [{
|
|
309
|
+
type: Input,
|
|
310
|
+
args: [NAME_CAMEL$1]
|
|
311
|
+
}], commandOptions: [{
|
|
312
|
+
type: Input,
|
|
313
|
+
args: [`${NAME_CAMEL$1}Options`]
|
|
314
|
+
}], commandParams: [{
|
|
315
|
+
type: Input,
|
|
316
|
+
args: [`${NAME_CAMEL$1}Params`]
|
|
317
|
+
}], onClick: [{
|
|
318
|
+
type: HostListener,
|
|
319
|
+
args: ["click"]
|
|
320
|
+
}] } });
|
|
311
321
|
|
|
312
|
-
const NAME_CAMEL
|
|
322
|
+
const NAME_CAMEL = "ssvCommandRef";
|
|
313
323
|
/**
|
|
314
324
|
* Command creator ref, directive which allows creating Command in the template
|
|
315
325
|
* and associate it to a command (in order to share executions).
|
|
@@ -336,7 +346,7 @@ class CommandRefDirective {
|
|
|
336
346
|
this._command = new Command(execFn, this.commandCreator.canExecute, isAsync);
|
|
337
347
|
}
|
|
338
348
|
else {
|
|
339
|
-
throw new Error(`${NAME_CAMEL
|
|
349
|
+
throw new Error(`${NAME_CAMEL}: [${NAME_CAMEL}] is not defined properly!`);
|
|
340
350
|
}
|
|
341
351
|
}
|
|
342
352
|
ngOnDestroy() {
|
|
@@ -346,15 +356,18 @@ class CommandRefDirective {
|
|
|
346
356
|
}
|
|
347
357
|
}
|
|
348
358
|
}
|
|
349
|
-
CommandRefDirective
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
]
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
}
|
|
359
|
+
CommandRefDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: CommandRefDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
360
|
+
CommandRefDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.9", type: CommandRefDirective, selector: "[ssvCommandRef]", inputs: { commandCreator: ["ssvCommandRef", "commandCreator"] }, exportAs: ["ssvCommandRef"], ngImport: i0 });
|
|
361
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: CommandRefDirective, decorators: [{
|
|
362
|
+
type: Directive,
|
|
363
|
+
args: [{
|
|
364
|
+
selector: `[${NAME_CAMEL}]`,
|
|
365
|
+
exportAs: NAME_CAMEL
|
|
366
|
+
}]
|
|
367
|
+
}], propDecorators: { commandCreator: [{
|
|
368
|
+
type: Input,
|
|
369
|
+
args: [NAME_CAMEL]
|
|
370
|
+
}] } });
|
|
358
371
|
|
|
359
372
|
/** @internal */
|
|
360
373
|
const MODULE_CONFIG_DATA = new InjectionToken("@ssv/ngx.command/configData");
|
|
@@ -372,15 +385,23 @@ class SsvCommandModule {
|
|
|
372
385
|
};
|
|
373
386
|
}
|
|
374
387
|
}
|
|
375
|
-
SsvCommandModule
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
388
|
+
SsvCommandModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SsvCommandModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
389
|
+
SsvCommandModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: SsvCommandModule, declarations: [CommandDirective,
|
|
390
|
+
CommandRefDirective], exports: [CommandDirective,
|
|
391
|
+
CommandRefDirective] });
|
|
392
|
+
SsvCommandModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SsvCommandModule, providers: [
|
|
393
|
+
{ provide: COMMAND_CONFIG, useFactory: _moduleConfigFactory, deps: [[MODULE_CONFIG_DATA, new Optional()]] },
|
|
394
|
+
] });
|
|
395
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SsvCommandModule, decorators: [{
|
|
396
|
+
type: NgModule,
|
|
397
|
+
args: [{
|
|
398
|
+
declarations: components,
|
|
399
|
+
providers: [
|
|
400
|
+
{ provide: COMMAND_CONFIG, useFactory: _moduleConfigFactory, deps: [[MODULE_CONFIG_DATA, new Optional()]] },
|
|
401
|
+
],
|
|
402
|
+
exports: [...components],
|
|
403
|
+
}]
|
|
404
|
+
}] });
|
|
384
405
|
/** @internal */
|
|
385
406
|
function _moduleConfigFactory(config) {
|
|
386
407
|
const cfg = typeof config === "function" ? config() : config;
|
|
@@ -388,11 +409,11 @@ function _moduleConfigFactory(config) {
|
|
|
388
409
|
? Object.assign(Object.assign({}, COMMAND_DEFAULT_CONFIG), cfg) : COMMAND_DEFAULT_CONFIG;
|
|
389
410
|
}
|
|
390
411
|
|
|
391
|
-
const VERSION = "
|
|
412
|
+
const VERSION = "0.0.0-PLACEHOLDER";
|
|
392
413
|
|
|
393
414
|
/**
|
|
394
415
|
* Generated bundle index. Do not edit.
|
|
395
416
|
*/
|
|
396
417
|
|
|
397
418
|
export { COMMAND_CONFIG, COMMAND_DEFAULT_CONFIG, Command, CommandAsync, CommandDirective, CommandRefDirective, MODULE_CONFIG_DATA, SsvCommandModule, VERSION, _moduleConfigFactory, canExecuteFromNgForm, isCommand, isCommandCreator };
|
|
398
|
-
//# sourceMappingURL=ssv-ngx.command.
|
|
419
|
+
//# sourceMappingURL=ssv-ngx.command.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ssv-ngx.command.mjs","sources":["../../src/command.ts","../../src/config.ts","../../src/command.util.ts","../../src/command.directive.ts","../../src/command-ref.directive.ts","../../src/module.ts","../../src/version.ts","../../src/ssv-ngx.command.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Observable, combineLatest, Subscription, Subject, BehaviorSubject, of, EMPTY } from \"rxjs\";\nimport { tap, map, filter, switchMap, catchError, finalize, take } from \"rxjs/operators\";\nimport { ICommand } from \"./command.model\";\n\n/**\n * Command object used to encapsulate information which is needed to perform an action.\n */\nexport class Command implements ICommand {\n\n\t/** Determines whether the command is currently executing, as a snapshot value. */\n\tget isExecuting(): boolean {\n\t\treturn this._isExecuting;\n\t}\n\n\t/** Determines whether the command can execute or not, as a snapshot value. */\n\tget canExecute(): boolean {\n\t\treturn this._canExecute;\n\t}\n\n\t/** Determines whether the command is currently executing, as an observable. */\n\tget isExecuting$(): Observable<boolean> {\n\t\treturn this._isExecuting$.asObservable();\n\t}\n\n\t/** Determines whether to auto destroy when having 0 subscribers. */\n\tautoDestroy = true;\n\n\t/** Determines whether the command can execute or not, as an observable. */\n\treadonly canExecute$: Observable<boolean>;\n\n\tprivate _isExecuting$ = new BehaviorSubject<boolean>(false);\n\tprivate _isExecuting = false;\n\tprivate _canExecute = true;\n\tprivate executionPipe$ = new Subject<unknown[] | undefined>();\n\tprivate isExecuting$$ = Subscription.EMPTY;\n\tprivate canExecute$$ = Subscription.EMPTY;\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 */\n\tconstructor(\n\t\texecute: (...args: unknown[]) => unknown,\n\t\tcanExecute$?: Observable<boolean>,\n\t\tisAsync?: boolean,\n\t) {\n\t\tif (canExecute$) {\n\t\t\tthis.canExecute$ = combineLatest([\n\t\t\t\tthis._isExecuting$,\n\t\t\t\tcanExecute$\n\t\t\t]).pipe(\n\t\t\t\tmap(([isExecuting, canExecuteResult]) => {\n\t\t\t\t\t// console.log(\"[command::combineLatest$] update!\", { isExecuting, canExecuteResult });\n\t\t\t\t\tthis._isExecuting = isExecuting;\n\t\t\t\t\tthis._canExecute = !isExecuting && !!canExecuteResult;\n\t\t\t\t\treturn this._canExecute;\n\t\t\t\t}),\n\t\t\t);\n\t\t\tthis.canExecute$$ = this.canExecute$.subscribe();\n\t\t} else {\n\t\t\tthis.canExecute$ = this._isExecuting$.pipe(\n\t\t\t\tmap(x => {\n\t\t\t\t\tconst canExecute = !x;\n\t\t\t\t\tthis._canExecute = canExecute;\n\t\t\t\t\treturn canExecute;\n\t\t\t\t})\n\t\t\t);\n\t\t\tthis.isExecuting$$ = this._isExecuting$\n\t\t\t\t.pipe(tap(x => this._isExecuting = x))\n\t\t\t\t.subscribe();\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\tthis.canExecute$$.unsubscribe();\n\t\tthis.isExecuting$$.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$.next(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$.next(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() => {\n\t\t\t\t\t// console.log(\"[command::executionPipe$] tap#2 - set idle\");\n\t\t\t\t\tthis._isExecuting$.next(false);\n\t\t\t\t},\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 */\nexport class CommandAsync extends Command {\n\n\tconstructor(\n\t\texecute: (...args: unknown[]) => Observable<unknown> | Promise<unknown>,\n\t\tcanExecute$?: Observable<boolean>,\n\t) {\n\t\tsuper(execute, canExecute$, true);\n\t}\n\n}\n","import { InjectionToken } 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\t/** Determine whether to set a `delay(1)` when setting the disabled. Which might be needed when working with external\n\t * components/directives (such as material button)\n\t */\n\thasDisabledDelay: boolean;\n}\n\nexport const COMMAND_DEFAULT_CONFIG = Object.freeze({\n\texecutingCssClass: \"executing\",\n\thandleDisabled: true,\n\thasDisabledDelay: false,\n} as CommandOptions);\n\nexport const COMMAND_CONFIG = new InjectionToken<CommandOptions>(\"command-config\");\n","import { AbstractControl, AbstractControlDirective, FormControlStatus } from \"@angular/forms\";\nimport { Observable, of } from \"rxjs\";\nimport { map, distinctUntilChanged, startWith, delay } from \"rxjs/operators\";\n\nimport { CommandCreator, ICommand } from \"./command.model\";\nimport { Command } from \"./command\";\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\n/** Get form is valid as an observable. */\nexport function canExecuteFromNgForm(\n\tform: AbstractControl | AbstractControlDirective,\n\toptions?: CanExecuteFormOptions\n): Observable<boolean> {\n\tconst opts: CanExecuteFormOptions = { validity: true, dirty: true, ...options };\n\n\treturn form.statusChanges\n\t\t? (form.statusChanges as Observable<FormControlStatus>).pipe( // todo: remove cast when working correctly\n\t\t\tdelay(0),\n\t\t\tstartWith(form.valid),\n\t\t\tmap(() => !!(!opts.validity || form.valid) && !!(!opts.dirty || form.dirty)),\n\t\t\tdistinctUntilChanged(),\n\t\t)\n\t\t: of(true);\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\tOnDestroy,\n\tInput,\n\tHostListener,\n\tElementRef,\n\tInject,\n\tRenderer2,\n\tChangeDetectorRef,\n} from \"@angular/core\";\nimport { Subject } from \"rxjs\";\nimport { tap, delay, takeUntil } from \"rxjs/operators\";\n\nimport { CommandOptions, COMMAND_CONFIG } from \"./config\";\nimport { Command } from \"./command\";\nimport { isCommand, isCommandCreator } from \"./command.util\";\nimport { CommandCreator, 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\texportAs: NAME_CAMEL\n})\nexport class CommandDirective implements OnInit, OnDestroy {\n\n\t// readonly id = `${NAME_CAMEL}-${nextUniqueId++}`;\n\n\t@Input(NAME_CAMEL) commandOrCreator: ICommand | CommandCreator | undefined;\n\n\t@Input(`${NAME_CAMEL}Options`)\n\tget commandOptions(): CommandOptions { return this._commandOptions; }\n\tset commandOptions(value: CommandOptions) {\n\t\tif (value === this._commandOptions) {\n\t\t\treturn;\n\t\t}\n\t\tthis._commandOptions = {\n\t\t\t...this.config,\n\t\t\t...value,\n\t\t};\n\t}\n\n\t@Input(`${NAME_CAMEL}Params`) commandParams: unknown | unknown[];\n\n\tget command(): ICommand { return this._command; }\n\tprivate _command!: ICommand;\n\tprivate _commandOptions: CommandOptions = this.config;\n\tprivate _destroy$ = new Subject<void>();\n\n\tconstructor(\n\t\t@Inject(COMMAND_CONFIG) private config: CommandOptions,\n\t\tprivate renderer: Renderer2,\n\t\tprivate element: ElementRef,\n\t\tprivate cdr: ChangeDetectorRef,\n\t) { }\n\n\tngOnInit(): void {\n\t\t// console.log(\"[ssvCommand::init]\", this.config);\n\t\tif (!this.commandOrCreator) {\n\t\t\tthrow new Error(`${NAME_CAMEL}: [${NAME_CAMEL}] should be defined!`);\n\t\t} else if (isCommand(this.commandOrCreator)) {\n\t\t\tthis._command = this.commandOrCreator;\n\t\t} else if (isCommandCreator(this.commandOrCreator)) {\n\t\t\tconst isAsync = this.commandOrCreator.isAsync || this.commandOrCreator.isAsync === undefined;\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 = this.commandOrCreator.execute.bind(this.commandOrCreator.host);\n\t\t\tthis.commandParams = this.commandParams || this.commandOrCreator.params;\n\n\t\t\tconst canExec = this.commandOrCreator.canExecute instanceof Function\n\t\t\t\t? this.commandOrCreator.canExecute.bind(this.commandOrCreator.host, this.commandParams)()\n\t\t\t\t: this.commandOrCreator.canExecute;\n\n\t\t\t// console.log(\"[ssvCommand::init] command creator\", {\n\t\t\t// \tfirstParam: this.commandParams ? this.commandParams[0] : null,\n\t\t\t// \tparams: this.commandParams\n\t\t\t// });\n\t\t\tthis._command = new Command(execFn, canExec, isAsync);\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\tthis._command.canExecute$.pipe(\n\t\t\tthis.commandOptions.hasDisabledDelay\n\t\t\t\t? delay(1)\n\t\t\t\t: tap(() => { /* stub */ }),\n\t\t\ttap(x => {\n\t\t\t\tthis.trySetDisabled(!x);\n\t\t\t\t// console.log(\"[ssvCommand::canExecute$]\", { canExecute: x });\n\t\t\t\tthis.cdr.markForCheck();\n\t\t\t}),\n\t\t\ttakeUntil(this._destroy$),\n\t\t).subscribe();\n\n\t\tif (this._command.isExecuting$) {\n\t\t\tthis._command.isExecuting$.pipe(\n\t\t\t\ttap(x => {\n\t\t\t\t\t// console.log(\"[ssvCommand::isExecuting$]\", x, this.commandOptions);\n\t\t\t\t\tif (x) {\n\t\t\t\t\t\tthis.renderer.addClass(\n\t\t\t\t\t\t\tthis.element.nativeElement,\n\t\t\t\t\t\t\tthis.commandOptions.executingCssClass\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.renderer.removeClass(\n\t\t\t\t\t\t\tthis.element.nativeElement,\n\t\t\t\t\t\t\tthis.commandOptions.executingCssClass\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\ttakeUntil(this._destroy$),\n\t\t\t).subscribe();\n\t\t}\n\t}\n\n\t@HostListener(\"click\")\n\tonClick(): void {\n\t\t// console.log(\"[ssvCommand::onClick]\", this.commandParams);\n\t\tif (Array.isArray(this.commandParams)) {\n\t\t\tthis._command.execute(...this.commandParams);\n\t\t} else {\n\t\t\tthis._command.execute(this.commandParams);\n\t\t}\n\t}\n\n\tngOnDestroy(): void {\n\t\t// console.log(\"[ssvCommand::destroy]\");\n\t\tthis._destroy$.next();\n\t\tthis._destroy$.complete();\n\t\tif (this._command) {\n\t\t\tthis._command.unsubscribe();\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 { Observable } from \"rxjs\";\nimport { Directive, OnInit, OnDestroy, Input } from \"@angular/core\";\n\nimport { ICommand, CommandCreator } 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})\nexport class CommandRefDirective implements OnInit, OnDestroy {\n\n\t@Input(NAME_CAMEL) commandCreator: CommandCreator | undefined;\n\n\tget command(): ICommand { return this._command; }\n\tprivate _command!: ICommand;\n\n\tngOnInit(): void {\n\t\tif (isCommandCreator(this.commandCreator)) {\n\t\t\tconst isAsync = this.commandCreator.isAsync || this.commandCreator.isAsync === undefined;\n\n\t\t\tconst execFn = this.commandCreator.execute.bind(this.commandCreator.host);\n\t\t\tthis._command = new Command(execFn, this.commandCreator.canExecute as Observable<boolean> | undefined, isAsync);\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\tngOnDestroy(): void {\n\t\t// console.log(\"[commandRef::destroy]\");\n\t\tif (this._command) {\n\t\t\tthis._command.destroy();\n\t\t}\n\t}\n\n}\n","import { NgModule, ModuleWithProviders, InjectionToken, Optional } from \"@angular/core\";\n\nimport { CommandDirective } from \"./command.directive\";\nimport { CommandRefDirective } from \"./command-ref.directive\";\nimport { CommandOptions, COMMAND_DEFAULT_CONFIG, COMMAND_CONFIG } from \"./config\";\n\n/** @internal */\nexport const MODULE_CONFIG_DATA = new InjectionToken<CommandOptions>(\"@ssv/ngx.command/configData\");\n\nconst components = [\n\tCommandDirective,\n\tCommandRefDirective\n];\n\n@NgModule({\n\tdeclarations: components,\n\tproviders: [\n\t\t{ provide: COMMAND_CONFIG, useFactory: _moduleConfigFactory, deps: [[MODULE_CONFIG_DATA, new Optional()]] },\n\t],\n\texports: [...components],\n})\nexport class SsvCommandModule {\n\n\tstatic forRoot(config?: Partial<CommandOptions> | (() => Partial<CommandOptions>)): ModuleWithProviders<SsvCommandModule> {\n\t\treturn {\n\t\t\tngModule: SsvCommandModule,\n\t\t\tproviders: [\n\t\t\t\t{ provide: MODULE_CONFIG_DATA, useValue: config },\n\t\t\t],\n\t\t};\n\t}\n\n}\n\n/** @internal */\nexport function _moduleConfigFactory(config: CommandOptions | (() => CommandOptions)): CommandOptions {\n\tconst cfg = typeof config === \"function\" ? config() : config;\n\treturn cfg\n\t\t? {\n\t\t\t...COMMAND_DEFAULT_CONFIG,\n\t\t\t...cfg,\n\t\t}\n\t\t: COMMAND_DEFAULT_CONFIG;\n}\n","export const VERSION = \"0.0.0-PLACEHOLDER\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["NAME_CAMEL"],"mappings":"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"}
|