ngx-extra 20.0.2 → 20.1.0

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 CHANGED
@@ -37,3 +37,7 @@ Subscribe to observables with automatic cleanup on component destruction.
37
37
  ### `throwResourceError()`
38
38
 
39
39
  Throw errors from `HttpResourceRef` when the status is error.
40
+
41
+ ### `slimComponentState`
42
+
43
+ Function for managing component state using signals. Supports manipulation modes, selection states, and ui state with fluent API.
@@ -72,10 +72,10 @@ class ReactiveQueryParamGlobalHandler {
72
72
  this.navigationExtras.preserveFragment = preserveFragment;
73
73
  }
74
74
  }
75
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: ReactiveQueryParamGlobalHandler, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
76
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: ReactiveQueryParamGlobalHandler, providedIn: "root" });
75
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.13", ngImport: i0, type: ReactiveQueryParamGlobalHandler, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
76
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.13", ngImport: i0, type: ReactiveQueryParamGlobalHandler, providedIn: "root" });
77
77
  }
78
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: ReactiveQueryParamGlobalHandler, decorators: [{
78
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.13", ngImport: i0, type: ReactiveQueryParamGlobalHandler, decorators: [{
79
79
  type: Injectable,
80
80
  args: [{ providedIn: "root" }]
81
81
  }], ctorParameters: () => [] });
@@ -301,9 +301,92 @@ function abstractControlSignal(source, options = {}) {
301
301
  });
302
302
  }
303
303
 
304
+ function slimComponentState() {
305
+ const isCheckBoxSelectionEnabled = signal(false, ...(ngDevMode ? [{ debugName: "isCheckBoxSelectionEnabled" }] : []));
306
+ const canSelectRow = signal(false, ...(ngDevMode ? [{ debugName: "canSelectRow" }] : []));
307
+ const canSelectMultipleItem = signal(false, ...(ngDevMode ? [{ debugName: "canSelectMultipleItem" }] : []));
308
+ const manipulationMode = signal(null, ...(ngDevMode ? [{ debugName: "manipulationMode" }] : []));
309
+ const title = signal("", ...(ngDevMode ? [{ debugName: "title" }] : []));
310
+ const isAnyNetworkOperationRunning = signal(false, ...(ngDevMode ? [{ debugName: "isAnyNetworkOperationRunning" }] : []));
311
+ const isDataManipulationUiActive = signal(false, ...(ngDevMode ? [{ debugName: "isDataManipulationUiActive" }] : []));
312
+ const manipulationModeLabel = computed(() => {
313
+ switch (manipulationMode()) {
314
+ case "create":
315
+ return "Create";
316
+ case "update":
317
+ return "Update";
318
+ case "delete":
319
+ return "Delete";
320
+ case "create-child":
321
+ return "Create Child";
322
+ case "update-child":
323
+ return "Update Child";
324
+ case "delete-child":
325
+ return "Delete Child";
326
+ default:
327
+ return "";
328
+ }
329
+ }, ...(ngDevMode ? [{ debugName: "manipulationModeLabel" }] : []));
330
+ const titleWithManipulationMode = computed(() => {
331
+ return `${manipulationModeLabel()} ${title()}`;
332
+ }, ...(ngDevMode ? [{ debugName: "titleWithManipulationMode" }] : []));
333
+ const dataStates = Object.seal({
334
+ isCheckBoxSelectionEnabled,
335
+ canSelectRow,
336
+ canSelectMultipleItem,
337
+ manipulationMode,
338
+ title,
339
+ isAnyNetworkOperationRunning,
340
+ isDataManipulationUiActive,
341
+ manipulationModeLabel,
342
+ titleWithManipulationMode
343
+ });
344
+ const chainableMethods = Object.seal({
345
+ setTitle(newTitle) {
346
+ dataStates.title.set(newTitle);
347
+ return this;
348
+ },
349
+ setManipulationMode(mode) {
350
+ dataStates.manipulationMode.set(mode);
351
+ return this;
352
+ },
353
+ setIsCheckBoxSelectionEnabled(canSelect) {
354
+ dataStates.isCheckBoxSelectionEnabled.set(canSelect);
355
+ return this;
356
+ },
357
+ setCanSelectRow(canSelect) {
358
+ dataStates.canSelectRow.set(canSelect);
359
+ return this;
360
+ },
361
+ setCanSelectMultipleItem(canSelect) {
362
+ dataStates.canSelectMultipleItem.set(canSelect);
363
+ return this;
364
+ },
365
+ setIsAnyNetworkOperationRunning(status) {
366
+ dataStates.isAnyNetworkOperationRunning.set(status);
367
+ return this;
368
+ },
369
+ setIsDataManipulationUiActive(status) {
370
+ dataStates.isDataManipulationUiActive.set(status);
371
+ return this;
372
+ },
373
+ resetAll() {
374
+ dataStates.isCheckBoxSelectionEnabled.set(false);
375
+ dataStates.canSelectRow.set(false);
376
+ dataStates.canSelectMultipleItem.set(false);
377
+ dataStates.manipulationMode.set(null);
378
+ dataStates.title.set("");
379
+ dataStates.isAnyNetworkOperationRunning.set(false);
380
+ dataStates.isDataManipulationUiActive.set(false);
381
+ return this;
382
+ }
383
+ });
384
+ return Object.seal({ ...dataStates, ...chainableMethods });
385
+ }
386
+
304
387
  /**
305
388
  * Generated bundle index. Do not edit.
306
389
  */
307
390
 
308
- export { abstractControlSignal, createSignalChangeNotifier, debouncedSignal, duringDestroy, reactiveQueryParam, rxSubscriber, throwResourceError };
391
+ export { abstractControlSignal, createSignalChangeNotifier, debouncedSignal, duringDestroy, reactiveQueryParam, rxSubscriber, slimComponentState, throwResourceError };
309
392
  //# sourceMappingURL=ngx-extra.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-extra.mjs","sources":["../../../projects/ngx-extra/src/lib/create-signal-change-notifier.ts","../../../projects/ngx-extra/src/lib/helpers.ts","../../../projects/ngx-extra/src/lib/reactive-query-param.ts","../../../projects/ngx-extra/src/lib/debounced-signal.ts","../../../projects/ngx-extra/src/lib/during-destroy.ts","../../../projects/ngx-extra/src/lib/rx-subscriber.ts","../../../projects/ngx-extra/src/lib/throw-resource-error.ts","../../../projects/ngx-extra/src/lib/abstract-control-signal.ts","../../../projects/ngx-extra/src/ngx-extra.ts"],"sourcesContent":["import { signal } from \"@angular/core\";\n\nexport function createSignalChangeNotifier() {\n const sourceSignal = signal<number | null>(null);\n\n return {\n notify: () => {\n sourceSignal.update((v) => (v === null ? 1 : v + 1));\n },\n listen: sourceSignal.asReadonly()\n };\n}\n","export function cleanNullishFromObject(obj?: object): Record<string, any> {\n if (obj === undefined) {\n return {};\n }\n\n return Object.fromEntries(Object.entries(obj).filter(([, v]) => v != null));\n}\n\nexport function hasNullishInObject(obj: object): boolean {\n return Object.values(obj).some((val) => val === null || val === undefined);\n}\n","import {\n DestroyRef,\n Injectable,\n Injector,\n Signal,\n assertInInjectionContext,\n effect,\n inject,\n isDevMode,\n isSignal,\n runInInjectionContext,\n untracked\n} from \"@angular/core\";\nimport { takeUntilDestroyed, toObservable } from \"@angular/core/rxjs-interop\";\nimport { ActivatedRoute, NavigationExtras, Router } from \"@angular/router\";\nimport LzString from \"lz-string\";\nimport { Observable, filter, map } from \"rxjs\";\nimport { createSignalChangeNotifier } from \"./create-signal-change-notifier\";\nimport { cleanNullishFromObject } from \"./helpers\";\n\nexport type SlimNavigationExtras = Pick<\n NavigationExtras,\n | \"queryParamsHandling\"\n | \"onSameUrlNavigation\"\n | \"replaceUrl\"\n | \"skipLocationChange\"\n | \"preserveFragment\"\n>;\n\nexport type ReactiveQueryParamOptions<T> = {\n queryParamKey: string;\n source: Signal<T> | Observable<T>;\n parse?: (rawData: any) => T | null;\n handleInitialSnapshot?: (payload: T) => void;\n handleStream?: (payload: T) => void;\n injector?: Injector;\n routerOptions?: SlimNavigationExtras;\n base64EncodingOptions?: {\n disableEncoding?: boolean;\n disableJsonStringifyWhenNoEncoding?: boolean;\n };\n queryParamOptions?: {\n blackListedValues?: any[];\n preserveStaleOnBlacklistedValue?: boolean;\n };\n};\n\n@Injectable({ providedIn: \"root\" })\nclass ReactiveQueryParamGlobalHandler {\n private router = inject(Router);\n\n private schedulerNotifier = createSignalChangeNotifier();\n private currentKeys: Record<string, string | null> = {};\n private navigationExtras: SlimNavigationExtras = {};\n\n constructor() {\n effect(() => {\n if (!this.schedulerNotifier.listen()) {\n return;\n }\n untracked(() => {\n this.router\n .navigate([], {\n queryParams: this.currentKeys,\n ...this.navigationExtras\n })\n .then(() => {\n this.currentKeys = {};\n this.navigationExtras = {};\n });\n });\n });\n }\n\n scheduleNavigation(key: string, value: string | null, navOptions: SlimNavigationExtras) {\n this.currentKeys[key] = value;\n this.setCurrentNavigationExtras(navOptions);\n this.schedulerNotifier.notify();\n }\n\n private setCurrentNavigationExtras(config: Partial<SlimNavigationExtras> = {}) {\n const {\n queryParamsHandling,\n onSameUrlNavigation,\n replaceUrl,\n skipLocationChange,\n preserveFragment\n } = config;\n\n if (queryParamsHandling || queryParamsHandling === \"\") {\n this.navigationExtras.queryParamsHandling = queryParamsHandling;\n }\n if (onSameUrlNavigation) {\n this.navigationExtras.onSameUrlNavigation = onSameUrlNavigation;\n }\n if (replaceUrl) {\n this.navigationExtras.replaceUrl = replaceUrl;\n }\n if (skipLocationChange) {\n this.navigationExtras.skipLocationChange = skipLocationChange;\n }\n if (preserveFragment) {\n this.navigationExtras.preserveFragment = preserveFragment;\n }\n }\n}\n\nexport function reactiveQueryParam<T>(options: ReactiveQueryParamOptions<T>) {\n if (isDevMode() && !options?.injector) {\n assertInInjectionContext(reactiveQueryParam);\n }\n\n const assertedInjector = options.injector ?? inject(Injector);\n\n const blackList = options.queryParamOptions?.blackListedValues ?? [null, undefined, \"\"];\n\n const useEncoding = !options?.base64EncodingOptions?.disableEncoding;\n\n const useStringifyOnNoEncoding =\n !options?.base64EncodingOptions?.disableJsonStringifyWhenNoEncoding;\n\n const deserialize = (payload: string): T => {\n if (useEncoding) {\n const decoded = LzString.decompressFromEncodedURIComponent(payload);\n return JSON.parse(decoded);\n }\n\n if (!useEncoding && useStringifyOnNoEncoding) {\n return JSON.parse(payload);\n } else {\n try {\n return JSON.parse(payload);\n } catch {\n return payload as T;\n }\n }\n };\n\n const serialize = (value: T | null | undefined): string | null => {\n if (blackList.some((elem) => elem === value)) {\n return null;\n }\n if (useEncoding) {\n return LzString.compressToEncodedURIComponent(JSON.stringify(value));\n }\n\n if (!useEncoding && useStringifyOnNoEncoding) {\n return JSON.stringify(value);\n } else {\n if (typeof value === \"string\") {\n return value;\n } else {\n return JSON.stringify(value);\n }\n }\n };\n\n runInInjectionContext(assertedInjector, () => {\n const globalHandler = inject(ReactiveQueryParamGlobalHandler);\n const route = inject(ActivatedRoute);\n const destroyRef = inject(DestroyRef);\n\n // Handle initial snapshot\n const payloadFromSnapshot = route.snapshot.queryParamMap.get(options.queryParamKey);\n\n if (\n payloadFromSnapshot !== null &&\n payloadFromSnapshot !== \"\" &&\n options.handleInitialSnapshot\n ) {\n const deserialized = deserialize(payloadFromSnapshot);\n if (!options.parse) {\n options.handleInitialSnapshot(deserialized);\n } else {\n try {\n const parsedValue = options.parse(deserialized);\n if (parsedValue !== null) {\n options.handleInitialSnapshot(parsedValue);\n }\n } catch (error) {\n console.error(error);\n }\n }\n }\n\n // Handle query param stream\n route.queryParamMap\n .pipe(\n map((params) => params.get(options.queryParamKey)),\n filter((value) => value !== null),\n filter((value) => value !== \"\"),\n takeUntilDestroyed(destroyRef)\n )\n .subscribe((payloadFromStream) => {\n if (!options.handleStream) {\n return;\n }\n const deserialized = deserialize(payloadFromStream);\n if (!options.parse) {\n options.handleStream(deserialized);\n } else {\n try {\n const parsedValue = options.parse(deserialized);\n if (parsedValue !== null) {\n options.handleStream(parsedValue);\n }\n } catch (error) {\n console.error(error);\n }\n }\n });\n\n // Handle source changes\n let source$: Observable<T>;\n\n if (isSignal(options.source)) {\n source$ = toObservable(options.source);\n } else if (options.source instanceof Observable) {\n source$ = options.source;\n } else {\n throw new Error(\"Invalid source\");\n }\n\n source$.pipe(takeUntilDestroyed(destroyRef)).subscribe((value) => {\n const serializedValue = serialize(value);\n if (serializedValue === null && options?.queryParamOptions?.preserveStaleOnBlacklistedValue) {\n return;\n }\n\n globalHandler.scheduleNavigation(options.queryParamKey, serializedValue, {\n ...cleanNullishFromObject(options?.routerOptions),\n queryParamsHandling: options.routerOptions?.queryParamsHandling ?? \"merge\"\n });\n });\n });\n}\n","import {\n Signal,\n Injector,\n isDevMode,\n assertInInjectionContext,\n inject,\n runInInjectionContext,\n isSignal\n} from \"@angular/core\";\nimport { toSignal, toObservable, takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\nimport { debounceTime } from \"rxjs\";\n\nexport function debouncedSignal<T>(source: Signal<T>, ms: number, injector?: Injector) {\n if (isDevMode() && !injector) {\n assertInInjectionContext(debouncedSignal);\n }\n const assertedInjector = injector ?? inject(Injector);\n\n return runInInjectionContext(assertedInjector, () => {\n if (isSignal(source)) {\n return toSignal(toObservable(source).pipe(debounceTime(ms), takeUntilDestroyed()));\n } else {\n throw new Error(\"Invalid source\");\n }\n });\n}\n","import {\n Injector,\n isDevMode,\n assertInInjectionContext,\n inject,\n runInInjectionContext,\n DestroyRef\n} from \"@angular/core\";\n\nexport function duringDestroy(fn: () => void, injector?: Injector) {\n if (isDevMode() && !injector) {\n assertInInjectionContext(duringDestroy);\n }\n const assertedInjector = injector ?? inject(Injector);\n\n runInInjectionContext(assertedInjector, () => {\n inject(DestroyRef).onDestroy(fn);\n });\n}\n","import {\n assertInInjectionContext,\n inject,\n Injector,\n isDevMode,\n runInInjectionContext\n} from \"@angular/core\";\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\nimport { Observable } from \"rxjs\";\n\nexport type RxSubscriberOptions = {\n injector?: Injector;\n};\n\nexport function rxSubscriber<T>(\n source: Observable<T>,\n next: (payload: T) => void,\n options?: RxSubscriberOptions\n) {\n if (isDevMode() && !options?.injector) {\n assertInInjectionContext(rxSubscriber);\n }\n const assertedInjector = options?.injector ?? inject(Injector);\n\n runInInjectionContext(assertedInjector, () => {\n source.pipe(takeUntilDestroyed()).subscribe((payloadFromStream) => {\n next(payloadFromStream);\n });\n });\n}\n","import { HttpResourceRef } from \"@angular/common/http\";\nimport {\n Injector,\n assertInInjectionContext,\n inject,\n runInInjectionContext,\n effect,\n isDevMode\n} from \"@angular/core\";\n\nexport function throwResourceError<T = any>(resorce: HttpResourceRef<T>, injector?: Injector) {\n if (isDevMode() && !injector) {\n assertInInjectionContext(throwResourceError);\n }\n const assertedInjector = injector ?? inject(Injector);\n runInInjectionContext(assertedInjector, () => {\n effect(() => {\n if (resorce.status() === \"error\") {\n throw resorce.error();\n }\n });\n });\n}\n","import {\n assertInInjectionContext,\n computed,\n inject,\n Injector,\n isDevMode,\n runInInjectionContext,\n signal\n} from \"@angular/core\";\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\nimport {\n AbstractControl,\n FormControlStatus,\n PristineChangeEvent,\n StatusChangeEvent,\n TouchedChangeEvent,\n ValidationErrors,\n ValueChangeEvent\n} from \"@angular/forms\";\n\ntype AbstractControlSignalOptions = {\n injector?: Injector;\n};\n\nexport function abstractControlSignal<T>(\n source: AbstractControl<T>,\n options: AbstractControlSignalOptions = {}\n) {\n if (isDevMode() && !options.injector) {\n assertInInjectionContext(abstractControlSignal);\n }\n const assertedInjector = options.injector ?? inject(Injector);\n\n return runInInjectionContext(assertedInjector, () => {\n const internalState = Object.seal({\n value: signal<T>(source.getRawValue()),\n status: signal<FormControlStatus>(source.status),\n touched: signal<boolean>(source.touched),\n pristine: signal<boolean>(source.pristine),\n errors: signal<ValidationErrors | null>(source.errors)\n });\n\n source.events.pipe(takeUntilDestroyed()).subscribe((newEvent) => {\n if (newEvent instanceof ValueChangeEvent) {\n internalState.value.set(newEvent.value);\n }\n\n if (newEvent instanceof PristineChangeEvent) {\n internalState.pristine.set(newEvent.pristine);\n }\n\n if (newEvent instanceof TouchedChangeEvent) {\n internalState.touched.set(newEvent.touched);\n }\n\n if (newEvent instanceof StatusChangeEvent) {\n internalState.status.set(newEvent.status);\n internalState.errors.set(source.errors);\n }\n });\n\n return Object.seal({\n errors: internalState.errors.asReadonly(),\n value: internalState.value.asReadonly(),\n touched: internalState.touched.asReadonly(),\n untouched: computed(() => {\n return !internalState.touched();\n }),\n pristine: internalState.pristine.asReadonly(),\n dirty: computed(() => {\n return !internalState.pristine();\n }),\n valid: computed(() => {\n return internalState.status() === \"VALID\";\n }),\n invalid: computed(() => {\n return internalState.status() === \"INVALID\";\n }),\n pending: computed(() => {\n return internalState.status() === \"PENDING\";\n }),\n disabled: computed(() => {\n return internalState.status() === \"DISABLED\";\n })\n });\n });\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ngx-extra.mjs","sources":["../../../projects/ngx-extra/src/lib/reactive/create-signal-change-notifier.ts","../../../projects/ngx-extra/src/lib/helpers.ts","../../../projects/ngx-extra/src/lib/reactive/reactive-query-param.ts","../../../projects/ngx-extra/src/lib/reactive/debounced-signal.ts","../../../projects/ngx-extra/src/lib/reactive/during-destroy.ts","../../../projects/ngx-extra/src/lib/reactive/rx-subscriber.ts","../../../projects/ngx-extra/src/lib/reactive/throw-resource-error.ts","../../../projects/ngx-extra/src/lib/reactive/abstract-control-signal.ts","../../../projects/ngx-extra/src/lib/misc/slim-component-state.ts","../../../projects/ngx-extra/src/ngx-extra.ts"],"sourcesContent":["import { signal } from \"@angular/core\";\n\nexport function createSignalChangeNotifier() {\n const sourceSignal = signal<number | null>(null);\n\n return {\n notify: () => {\n sourceSignal.update((v) => (v === null ? 1 : v + 1));\n },\n listen: sourceSignal.asReadonly()\n };\n}\n","export function cleanNullishFromObject(obj?: object): Record<string, any> {\n if (obj === undefined) {\n return {};\n }\n\n return Object.fromEntries(Object.entries(obj).filter(([, v]) => v != null));\n}\n\nexport function hasNullishInObject(obj: object): boolean {\n return Object.values(obj).some((val) => val === null || val === undefined);\n}\n","import {\n DestroyRef,\n Injectable,\n Injector,\n Signal,\n assertInInjectionContext,\n effect,\n inject,\n isDevMode,\n isSignal,\n runInInjectionContext,\n untracked\n} from \"@angular/core\";\nimport { takeUntilDestroyed, toObservable } from \"@angular/core/rxjs-interop\";\nimport { ActivatedRoute, NavigationExtras, Router } from \"@angular/router\";\nimport LzString from \"lz-string\";\nimport { Observable, filter, map } from \"rxjs\";\nimport { createSignalChangeNotifier } from \"./create-signal-change-notifier\";\nimport { cleanNullishFromObject } from \"../helpers\";\n\nexport type SlimNavigationExtras = Pick<\n NavigationExtras,\n | \"queryParamsHandling\"\n | \"onSameUrlNavigation\"\n | \"replaceUrl\"\n | \"skipLocationChange\"\n | \"preserveFragment\"\n>;\n\nexport type ReactiveQueryParamOptions<T> = {\n queryParamKey: string;\n source: Signal<T> | Observable<T>;\n parse?: (rawData: any) => T | null;\n handleInitialSnapshot?: (payload: T) => void;\n handleStream?: (payload: T) => void;\n injector?: Injector;\n routerOptions?: SlimNavigationExtras;\n base64EncodingOptions?: {\n disableEncoding?: boolean;\n disableJsonStringifyWhenNoEncoding?: boolean;\n };\n queryParamOptions?: {\n blackListedValues?: any[];\n preserveStaleOnBlacklistedValue?: boolean;\n };\n};\n\n@Injectable({ providedIn: \"root\" })\nclass ReactiveQueryParamGlobalHandler {\n private router = inject(Router);\n\n private schedulerNotifier = createSignalChangeNotifier();\n private currentKeys: Record<string, string | null> = {};\n private navigationExtras: SlimNavigationExtras = {};\n\n constructor() {\n effect(() => {\n if (!this.schedulerNotifier.listen()) {\n return;\n }\n untracked(() => {\n this.router\n .navigate([], {\n queryParams: this.currentKeys,\n ...this.navigationExtras\n })\n .then(() => {\n this.currentKeys = {};\n this.navigationExtras = {};\n });\n });\n });\n }\n\n scheduleNavigation(key: string, value: string | null, navOptions: SlimNavigationExtras) {\n this.currentKeys[key] = value;\n this.setCurrentNavigationExtras(navOptions);\n this.schedulerNotifier.notify();\n }\n\n private setCurrentNavigationExtras(config: Partial<SlimNavigationExtras> = {}) {\n const {\n queryParamsHandling,\n onSameUrlNavigation,\n replaceUrl,\n skipLocationChange,\n preserveFragment\n } = config;\n\n if (queryParamsHandling || queryParamsHandling === \"\") {\n this.navigationExtras.queryParamsHandling = queryParamsHandling;\n }\n if (onSameUrlNavigation) {\n this.navigationExtras.onSameUrlNavigation = onSameUrlNavigation;\n }\n if (replaceUrl) {\n this.navigationExtras.replaceUrl = replaceUrl;\n }\n if (skipLocationChange) {\n this.navigationExtras.skipLocationChange = skipLocationChange;\n }\n if (preserveFragment) {\n this.navigationExtras.preserveFragment = preserveFragment;\n }\n }\n}\n\nexport function reactiveQueryParam<T>(options: ReactiveQueryParamOptions<T>) {\n if (isDevMode() && !options?.injector) {\n assertInInjectionContext(reactiveQueryParam);\n }\n\n const assertedInjector = options.injector ?? inject(Injector);\n\n const blackList = options.queryParamOptions?.blackListedValues ?? [null, undefined, \"\"];\n\n const useEncoding = !options?.base64EncodingOptions?.disableEncoding;\n\n const useStringifyOnNoEncoding =\n !options?.base64EncodingOptions?.disableJsonStringifyWhenNoEncoding;\n\n const deserialize = (payload: string): T => {\n if (useEncoding) {\n const decoded = LzString.decompressFromEncodedURIComponent(payload);\n return JSON.parse(decoded);\n }\n\n if (!useEncoding && useStringifyOnNoEncoding) {\n return JSON.parse(payload);\n } else {\n try {\n return JSON.parse(payload);\n } catch {\n return payload as T;\n }\n }\n };\n\n const serialize = (value: T | null | undefined): string | null => {\n if (blackList.some((elem) => elem === value)) {\n return null;\n }\n if (useEncoding) {\n return LzString.compressToEncodedURIComponent(JSON.stringify(value));\n }\n\n if (!useEncoding && useStringifyOnNoEncoding) {\n return JSON.stringify(value);\n } else {\n if (typeof value === \"string\") {\n return value;\n } else {\n return JSON.stringify(value);\n }\n }\n };\n\n runInInjectionContext(assertedInjector, () => {\n const globalHandler = inject(ReactiveQueryParamGlobalHandler);\n const route = inject(ActivatedRoute);\n const destroyRef = inject(DestroyRef);\n\n // Handle initial snapshot\n const payloadFromSnapshot = route.snapshot.queryParamMap.get(options.queryParamKey);\n\n if (\n payloadFromSnapshot !== null &&\n payloadFromSnapshot !== \"\" &&\n options.handleInitialSnapshot\n ) {\n const deserialized = deserialize(payloadFromSnapshot);\n if (!options.parse) {\n options.handleInitialSnapshot(deserialized);\n } else {\n try {\n const parsedValue = options.parse(deserialized);\n if (parsedValue !== null) {\n options.handleInitialSnapshot(parsedValue);\n }\n } catch (error) {\n console.error(error);\n }\n }\n }\n\n // Handle query param stream\n route.queryParamMap\n .pipe(\n map((params) => params.get(options.queryParamKey)),\n filter((value) => value !== null),\n filter((value) => value !== \"\"),\n takeUntilDestroyed(destroyRef)\n )\n .subscribe((payloadFromStream) => {\n if (!options.handleStream) {\n return;\n }\n const deserialized = deserialize(payloadFromStream);\n if (!options.parse) {\n options.handleStream(deserialized);\n } else {\n try {\n const parsedValue = options.parse(deserialized);\n if (parsedValue !== null) {\n options.handleStream(parsedValue);\n }\n } catch (error) {\n console.error(error);\n }\n }\n });\n\n // Handle source changes\n let source$: Observable<T>;\n\n if (isSignal(options.source)) {\n source$ = toObservable(options.source);\n } else if (options.source instanceof Observable) {\n source$ = options.source;\n } else {\n throw new Error(\"Invalid source\");\n }\n\n source$.pipe(takeUntilDestroyed(destroyRef)).subscribe((value) => {\n const serializedValue = serialize(value);\n if (serializedValue === null && options?.queryParamOptions?.preserveStaleOnBlacklistedValue) {\n return;\n }\n\n globalHandler.scheduleNavigation(options.queryParamKey, serializedValue, {\n ...cleanNullishFromObject(options?.routerOptions),\n queryParamsHandling: options.routerOptions?.queryParamsHandling ?? \"merge\"\n });\n });\n });\n}\n","import {\n Signal,\n Injector,\n isDevMode,\n assertInInjectionContext,\n inject,\n runInInjectionContext,\n isSignal\n} from \"@angular/core\";\nimport { toSignal, toObservable, takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\nimport { debounceTime } from \"rxjs\";\n\nexport function debouncedSignal<T>(source: Signal<T>, ms: number, injector?: Injector) {\n if (isDevMode() && !injector) {\n assertInInjectionContext(debouncedSignal);\n }\n const assertedInjector = injector ?? inject(Injector);\n\n return runInInjectionContext(assertedInjector, () => {\n if (isSignal(source)) {\n return toSignal(toObservable(source).pipe(debounceTime(ms), takeUntilDestroyed()));\n } else {\n throw new Error(\"Invalid source\");\n }\n });\n}\n","import {\n Injector,\n isDevMode,\n assertInInjectionContext,\n inject,\n runInInjectionContext,\n DestroyRef\n} from \"@angular/core\";\n\nexport function duringDestroy(fn: () => void, injector?: Injector) {\n if (isDevMode() && !injector) {\n assertInInjectionContext(duringDestroy);\n }\n const assertedInjector = injector ?? inject(Injector);\n\n runInInjectionContext(assertedInjector, () => {\n inject(DestroyRef).onDestroy(fn);\n });\n}\n","import {\n assertInInjectionContext,\n inject,\n Injector,\n isDevMode,\n runInInjectionContext\n} from \"@angular/core\";\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\nimport { Observable } from \"rxjs\";\n\nexport type RxSubscriberOptions = {\n injector?: Injector;\n};\n\nexport function rxSubscriber<T>(\n source: Observable<T>,\n next: (payload: T) => void,\n options?: RxSubscriberOptions\n) {\n if (isDevMode() && !options?.injector) {\n assertInInjectionContext(rxSubscriber);\n }\n const assertedInjector = options?.injector ?? inject(Injector);\n\n runInInjectionContext(assertedInjector, () => {\n source.pipe(takeUntilDestroyed()).subscribe((payloadFromStream) => {\n next(payloadFromStream);\n });\n });\n}\n","import { HttpResourceRef } from \"@angular/common/http\";\nimport {\n Injector,\n assertInInjectionContext,\n inject,\n runInInjectionContext,\n effect,\n isDevMode\n} from \"@angular/core\";\n\nexport function throwResourceError<T = any>(resorce: HttpResourceRef<T>, injector?: Injector) {\n if (isDevMode() && !injector) {\n assertInInjectionContext(throwResourceError);\n }\n const assertedInjector = injector ?? inject(Injector);\n runInInjectionContext(assertedInjector, () => {\n effect(() => {\n if (resorce.status() === \"error\") {\n throw resorce.error();\n }\n });\n });\n}\n","import {\n assertInInjectionContext,\n computed,\n inject,\n Injector,\n isDevMode,\n runInInjectionContext,\n signal\n} from \"@angular/core\";\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\nimport {\n AbstractControl,\n FormControlStatus,\n PristineChangeEvent,\n StatusChangeEvent,\n TouchedChangeEvent,\n ValidationErrors,\n ValueChangeEvent\n} from \"@angular/forms\";\n\ntype AbstractControlSignalOptions = {\n injector?: Injector;\n};\n\nexport function abstractControlSignal<T>(\n source: AbstractControl<T>,\n options: AbstractControlSignalOptions = {}\n) {\n if (isDevMode() && !options.injector) {\n assertInInjectionContext(abstractControlSignal);\n }\n const assertedInjector = options.injector ?? inject(Injector);\n\n return runInInjectionContext(assertedInjector, () => {\n const internalState = Object.seal({\n value: signal<T>(source.getRawValue()),\n status: signal<FormControlStatus>(source.status),\n touched: signal<boolean>(source.touched),\n pristine: signal<boolean>(source.pristine),\n errors: signal<ValidationErrors | null>(source.errors)\n });\n\n source.events.pipe(takeUntilDestroyed()).subscribe((newEvent) => {\n if (newEvent instanceof ValueChangeEvent) {\n internalState.value.set(newEvent.value);\n }\n\n if (newEvent instanceof PristineChangeEvent) {\n internalState.pristine.set(newEvent.pristine);\n }\n\n if (newEvent instanceof TouchedChangeEvent) {\n internalState.touched.set(newEvent.touched);\n }\n\n if (newEvent instanceof StatusChangeEvent) {\n internalState.status.set(newEvent.status);\n internalState.errors.set(source.errors);\n }\n });\n\n return Object.seal({\n errors: internalState.errors.asReadonly(),\n value: internalState.value.asReadonly(),\n touched: internalState.touched.asReadonly(),\n untouched: computed(() => {\n return !internalState.touched();\n }),\n pristine: internalState.pristine.asReadonly(),\n dirty: computed(() => {\n return !internalState.pristine();\n }),\n valid: computed(() => {\n return internalState.status() === \"VALID\";\n }),\n invalid: computed(() => {\n return internalState.status() === \"INVALID\";\n }),\n pending: computed(() => {\n return internalState.status() === \"PENDING\";\n }),\n disabled: computed(() => {\n return internalState.status() === \"DISABLED\";\n })\n });\n });\n}\n","import { signal, computed } from \"@angular/core\";\nimport { ManipulationMode } from \"../types\";\n\nexport interface SlimComponentStateChainableMethods {\n setTitle(newTitle: string): this;\n setManipulationMode(mode: ManipulationMode | null): this;\n setIsCheckBoxSelectionEnabled(canSelect: boolean): this;\n setCanSelectRow(canSelect: boolean): this;\n setCanSelectMultipleItem(canSelect: boolean): this;\n setIsAnyNetworkOperationRunning(status: boolean): this;\n setIsDataManipulationUiActive(status: boolean): this;\n resetAll(): this;\n}\n\nexport function slimComponentState() {\n const isCheckBoxSelectionEnabled = signal<boolean>(false);\n const canSelectRow = signal<boolean>(false);\n const canSelectMultipleItem = signal<boolean>(false);\n const manipulationMode = signal<ManipulationMode | null>(null);\n const title = signal<string>(\"\");\n const isAnyNetworkOperationRunning = signal<boolean>(false);\n const isDataManipulationUiActive = signal<boolean>(false);\n\n const manipulationModeLabel = computed(() => {\n switch (manipulationMode()) {\n case \"create\":\n return \"Create\";\n case \"update\":\n return \"Update\";\n case \"delete\":\n return \"Delete\";\n case \"create-child\":\n return \"Create Child\";\n case \"update-child\":\n return \"Update Child\";\n case \"delete-child\":\n return \"Delete Child\";\n default:\n return \"\";\n }\n });\n\n const titleWithManipulationMode = computed(() => {\n return `${manipulationModeLabel()} ${title()}`;\n });\n\n const dataStates = Object.seal({\n isCheckBoxSelectionEnabled,\n canSelectRow,\n canSelectMultipleItem,\n manipulationMode,\n title,\n isAnyNetworkOperationRunning,\n isDataManipulationUiActive,\n manipulationModeLabel,\n titleWithManipulationMode\n });\n\n const chainableMethods: SlimComponentStateChainableMethods = Object.seal({\n setTitle(newTitle: string) {\n dataStates.title.set(newTitle);\n return this;\n },\n\n setManipulationMode(mode: ManipulationMode | null) {\n dataStates.manipulationMode.set(mode);\n return this;\n },\n setIsCheckBoxSelectionEnabled(canSelect: boolean) {\n dataStates.isCheckBoxSelectionEnabled.set(canSelect);\n return this;\n },\n\n setCanSelectRow(canSelect: boolean) {\n dataStates.canSelectRow.set(canSelect);\n return this;\n },\n\n setCanSelectMultipleItem(canSelect: boolean) {\n dataStates.canSelectMultipleItem.set(canSelect);\n return this;\n },\n\n setIsAnyNetworkOperationRunning(status: boolean) {\n dataStates.isAnyNetworkOperationRunning.set(status);\n return this;\n },\n\n setIsDataManipulationUiActive(status: boolean) {\n dataStates.isDataManipulationUiActive.set(status);\n return this;\n },\n\n resetAll() {\n dataStates.isCheckBoxSelectionEnabled.set(false);\n dataStates.canSelectRow.set(false);\n dataStates.canSelectMultipleItem.set(false);\n dataStates.manipulationMode.set(null);\n dataStates.title.set(\"\");\n dataStates.isAnyNetworkOperationRunning.set(false);\n dataStates.isDataManipulationUiActive.set(false);\n return this;\n }\n });\n\n return Object.seal({ ...dataStates, ...chainableMethods });\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/index.d.ts CHANGED
@@ -57,5 +57,37 @@ declare function abstractControlSignal<T>(source: AbstractControl<T>, options?:
57
57
  disabled: _angular_core.Signal<boolean>;
58
58
  };
59
59
 
60
- export { abstractControlSignal, createSignalChangeNotifier, debouncedSignal, duringDestroy, reactiveQueryParam, rxSubscriber, throwResourceError };
61
- export type { ReactiveQueryParamOptions, RxSubscriberOptions, SlimNavigationExtras };
60
+ type ManipulationMode = "create" | "update" | "delete" | "create-child" | "update-child" | "delete-child";
61
+
62
+ interface SlimComponentStateChainableMethods {
63
+ setTitle(newTitle: string): this;
64
+ setManipulationMode(mode: ManipulationMode | null): this;
65
+ setIsCheckBoxSelectionEnabled(canSelect: boolean): this;
66
+ setCanSelectRow(canSelect: boolean): this;
67
+ setCanSelectMultipleItem(canSelect: boolean): this;
68
+ setIsAnyNetworkOperationRunning(status: boolean): this;
69
+ setIsDataManipulationUiActive(status: boolean): this;
70
+ resetAll(): this;
71
+ }
72
+ declare function slimComponentState(): {
73
+ setTitle(newTitle: string): SlimComponentStateChainableMethods;
74
+ setManipulationMode(mode: ManipulationMode | null): SlimComponentStateChainableMethods;
75
+ setIsCheckBoxSelectionEnabled(canSelect: boolean): SlimComponentStateChainableMethods;
76
+ setCanSelectRow(canSelect: boolean): SlimComponentStateChainableMethods;
77
+ setCanSelectMultipleItem(canSelect: boolean): SlimComponentStateChainableMethods;
78
+ setIsAnyNetworkOperationRunning(status: boolean): SlimComponentStateChainableMethods;
79
+ setIsDataManipulationUiActive(status: boolean): SlimComponentStateChainableMethods;
80
+ resetAll(): SlimComponentStateChainableMethods;
81
+ isCheckBoxSelectionEnabled: _angular_core.WritableSignal<boolean>;
82
+ canSelectRow: _angular_core.WritableSignal<boolean>;
83
+ canSelectMultipleItem: _angular_core.WritableSignal<boolean>;
84
+ manipulationMode: _angular_core.WritableSignal<ManipulationMode | null>;
85
+ title: _angular_core.WritableSignal<string>;
86
+ isAnyNetworkOperationRunning: _angular_core.WritableSignal<boolean>;
87
+ isDataManipulationUiActive: _angular_core.WritableSignal<boolean>;
88
+ manipulationModeLabel: _angular_core.Signal<"" | "Create" | "Update" | "Delete" | "Create Child" | "Update Child" | "Delete Child">;
89
+ titleWithManipulationMode: _angular_core.Signal<string>;
90
+ };
91
+
92
+ export { abstractControlSignal, createSignalChangeNotifier, debouncedSignal, duringDestroy, reactiveQueryParam, rxSubscriber, slimComponentState, throwResourceError };
93
+ export type { ManipulationMode, ReactiveQueryParamOptions, RxSubscriberOptions, SlimComponentStateChainableMethods, SlimNavigationExtras };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ngx-extra",
3
- "version": "20.0.2",
3
+ "version": "20.1.0",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^20.3.12",
6
6
  "@angular/core": "^20.3.0",