@dereekb/dbx-core 0.0.1
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 -0
- package/dereekb-dbx-core.d.ts +5 -0
- package/esm2020/dereekb-dbx-core.mjs +5 -0
- package/esm2020/index.mjs +2 -0
- package/esm2020/lib/action/action.handler.mjs +140 -0
- package/esm2020/lib/action/action.holder.mjs +50 -0
- package/esm2020/lib/action/action.machine.mjs +37 -0
- package/esm2020/lib/action/action.mjs +51 -0
- package/esm2020/lib/action/action.module.mjs +38 -0
- package/esm2020/lib/action/action.store.mjs +188 -0
- package/esm2020/lib/action/action.store.source.mjs +149 -0
- package/esm2020/lib/action/directive/auto/action.automodify.directive.mjs +53 -0
- package/esm2020/lib/action/directive/auto/action.autotrigger.directive.mjs +131 -0
- package/esm2020/lib/action/directive/auto/action.autotrigger.value.directive.mjs +79 -0
- package/esm2020/lib/action/directive/auto/index.mjs +4 -0
- package/esm2020/lib/action/directive/context/action.component.mjs +18 -0
- package/esm2020/lib/action/directive/context/action.directive.mjs +33 -0
- package/esm2020/lib/action/directive/context/action.source.directive.mjs +40 -0
- package/esm2020/lib/action/directive/context/index.mjs +4 -0
- package/esm2020/lib/action/directive/debug/action.logger.directive.mjs +30 -0
- package/esm2020/lib/action/directive/debug/index.mjs +2 -0
- package/esm2020/lib/action/directive/index.mjs +6 -0
- package/esm2020/lib/action/directive/map/action.map.directive.mjs +74 -0
- package/esm2020/lib/action/directive/map/action.map.key.directive.mjs +40 -0
- package/esm2020/lib/action/directive/map/action.map.mjs +6 -0
- package/esm2020/lib/action/directive/map/action.map.source.directive.mjs +49 -0
- package/esm2020/lib/action/directive/map/action.map.working.disable.directive.mjs +41 -0
- package/esm2020/lib/action/directive/map/index.mjs +6 -0
- package/esm2020/lib/action/directive/state/action.disabled.directive.mjs +49 -0
- package/esm2020/lib/action/directive/state/action.disabled.modified.directive.mjs +35 -0
- package/esm2020/lib/action/directive/state/action.handler.directive.mjs +55 -0
- package/esm2020/lib/action/directive/state/action.success.component.mjs +50 -0
- package/esm2020/lib/action/directive/state/action.success.directive.mjs +48 -0
- package/esm2020/lib/action/directive/state/action.value.directive.mjs +52 -0
- package/esm2020/lib/action/directive/state/action.working.component.mjs +32 -0
- package/esm2020/lib/action/directive/state/index.mjs +8 -0
- package/esm2020/lib/action/index.mjs +10 -0
- package/esm2020/lib/action/snackbar/index.mjs +3 -0
- package/esm2020/lib/action/snackbar/snackbar.mjs +24 -0
- package/esm2020/lib/button/action/action.button.directive.mjs +46 -0
- package/esm2020/lib/button/action/action.button.trigger.directive.mjs +36 -0
- package/esm2020/lib/button/action/index.mjs +3 -0
- package/esm2020/lib/button/button.directive.mjs +109 -0
- package/esm2020/lib/button/button.loading.directive.mjs +43 -0
- package/esm2020/lib/button/button.mjs +9 -0
- package/esm2020/lib/button/button.module.mjs +40 -0
- package/esm2020/lib/button/index.mjs +7 -0
- package/esm2020/lib/button/router/button.segue.directive.mjs +43 -0
- package/esm2020/lib/button/router/index.mjs +2 -0
- package/esm2020/lib/index.mjs +9 -0
- package/esm2020/lib/injected/index.mjs +6 -0
- package/esm2020/lib/injected/injected.component.mjs +34 -0
- package/esm2020/lib/injected/injected.component.module.mjs +26 -0
- package/esm2020/lib/injected/injected.directive.mjs +32 -0
- package/esm2020/lib/injected/injected.instance.mjs +101 -0
- package/esm2020/lib/injected/injected.mjs +2 -0
- package/esm2020/lib/pipe/date/date.pipe.module.mjs +54 -0
- package/esm2020/lib/pipe/date/datedistance.pipe.mjs +42 -0
- package/esm2020/lib/pipe/date/dateformatdistance.pipe.mjs +37 -0
- package/esm2020/lib/pipe/date/datefromtoformat.pipe.mjs +35 -0
- package/esm2020/lib/pipe/date/index.mjs +9 -0
- package/esm2020/lib/pipe/date/minutesstring.pipe.mjs +32 -0
- package/esm2020/lib/pipe/date/timedistance.pipe.mjs +49 -0
- package/esm2020/lib/pipe/date/tojsdate.pipe.mjs +18 -0
- package/esm2020/lib/pipe/date/tominutes.pipe.mjs +17 -0
- package/esm2020/lib/pipe/index.mjs +2 -0
- package/esm2020/lib/router/anchor/anchor.directive.mjs +40 -0
- package/esm2020/lib/router/anchor/anchor.mjs +35 -0
- package/esm2020/lib/router/anchor/clickable.mjs +2 -0
- package/esm2020/lib/router/anchor/index.mjs +4 -0
- package/esm2020/lib/router/index.mjs +4 -0
- package/esm2020/lib/router/router/index.mjs +4 -0
- package/esm2020/lib/router/router/provider/angular/angular.router.service.mjs +51 -0
- package/esm2020/lib/router/router/provider/angular/angular.router.service.module.mjs +30 -0
- package/esm2020/lib/router/router/provider/angular/index.mjs +3 -0
- package/esm2020/lib/router/router/provider/index.mjs +3 -0
- package/esm2020/lib/router/router/provider/uirouter/index.mjs +3 -0
- package/esm2020/lib/router/router/provider/uirouter/uirouter.router.service.mjs +39 -0
- package/esm2020/lib/router/router/provider/uirouter/uirouter.router.service.module.mjs +31 -0
- package/esm2020/lib/router/router/service/index.mjs +3 -0
- package/esm2020/lib/router/router/service/router.service.mjs +6 -0
- package/esm2020/lib/router/router/service/router.transition.service.mjs +6 -0
- package/esm2020/lib/router/router/transition/index.mjs +3 -0
- package/esm2020/lib/router/router/transition/transition.mjs +12 -0
- package/esm2020/lib/router/router/transition/transition.watcher.directive.mjs +35 -0
- package/esm2020/lib/router/segue.mjs +8 -0
- package/esm2020/lib/storage/index.mjs +9 -0
- package/esm2020/lib/storage/storage.accessor.mjs +16 -0
- package/esm2020/lib/storage/storage.accessor.simple.factory.mjs +33 -0
- package/esm2020/lib/storage/storage.accessor.simple.mjs +161 -0
- package/esm2020/lib/storage/storage.accessor.string.mjs +50 -0
- package/esm2020/lib/storage/storage.di.mjs +4 -0
- package/esm2020/lib/storage/storage.module.mjs +37 -0
- package/esm2020/lib/storage/storage.object.localstorage.mjs +46 -0
- package/esm2020/lib/storage/storage.object.memory.mjs +17 -0
- package/esm2020/lib/subscription/index.mjs +2 -0
- package/esm2020/lib/subscription/subscription.directive.mjs +46 -0
- package/esm2020/lib/util/index.mjs +2 -0
- package/esm2020/lib/util/view.mjs +34 -0
- package/fesm2015/dereekb-dbx-core.mjs +2875 -0
- package/fesm2015/dereekb-dbx-core.mjs.map +1 -0
- package/fesm2020/dereekb-dbx-core.mjs +2856 -0
- package/fesm2020/dereekb-dbx-core.mjs.map +1 -0
- package/index.d.ts +1 -0
- package/lib/action/action.d.ts +43 -0
- package/lib/action/action.handler.d.ts +73 -0
- package/lib/action/action.holder.d.ts +28 -0
- package/lib/action/action.machine.d.ts +23 -0
- package/lib/action/action.module.d.ts +25 -0
- package/lib/action/action.store.d.ts +147 -0
- package/lib/action/action.store.source.d.ts +72 -0
- package/lib/action/directive/auto/action.automodify.directive.d.ts +15 -0
- package/lib/action/directive/auto/action.autotrigger.directive.d.ts +54 -0
- package/lib/action/directive/auto/action.autotrigger.value.directive.d.ts +25 -0
- package/lib/action/directive/auto/index.d.ts +3 -0
- package/lib/action/directive/context/action.component.d.ts +6 -0
- package/lib/action/directive/context/action.directive.d.ts +13 -0
- package/lib/action/directive/context/action.source.directive.d.ts +16 -0
- package/lib/action/directive/context/index.d.ts +3 -0
- package/lib/action/directive/debug/action.logger.directive.d.ts +14 -0
- package/lib/action/directive/debug/index.d.ts +1 -0
- package/lib/action/directive/index.d.ts +5 -0
- package/lib/action/directive/map/action.map.d.ts +13 -0
- package/lib/action/directive/map/action.map.directive.d.ts +35 -0
- package/lib/action/directive/map/action.map.key.directive.d.ts +20 -0
- package/lib/action/directive/map/action.map.source.directive.d.ts +20 -0
- package/lib/action/directive/map/action.map.working.disable.directive.d.ts +21 -0
- package/lib/action/directive/map/index.d.ts +5 -0
- package/lib/action/directive/state/action.disabled.directive.d.ts +20 -0
- package/lib/action/directive/state/action.disabled.modified.directive.d.ts +16 -0
- package/lib/action/directive/state/action.handler.directive.d.ts +22 -0
- package/lib/action/directive/state/action.success.component.d.ts +15 -0
- package/lib/action/directive/state/action.success.directive.d.ts +24 -0
- package/lib/action/directive/state/action.value.directive.d.ts +22 -0
- package/lib/action/directive/state/action.working.component.d.ts +12 -0
- package/lib/action/directive/state/index.d.ts +7 -0
- package/lib/action/index.d.ts +9 -0
- package/lib/action/snackbar/index.d.ts +1 -0
- package/lib/action/snackbar/snackbar.d.ts +50 -0
- package/lib/button/action/action.button.directive.d.ts +18 -0
- package/lib/button/action/action.button.trigger.directive.d.ts +17 -0
- package/lib/button/action/index.d.ts +2 -0
- package/lib/button/button.d.ts +26 -0
- package/lib/button/button.directive.d.ts +52 -0
- package/lib/button/button.loading.directive.d.ts +21 -0
- package/lib/button/button.module.d.ts +11 -0
- package/lib/button/index.d.ts +6 -0
- package/lib/button/router/button.segue.directive.d.ts +18 -0
- package/lib/button/router/index.d.ts +1 -0
- package/lib/index.d.ts +8 -0
- package/lib/injected/index.d.ts +5 -0
- package/lib/injected/injected.component.d.ts +15 -0
- package/lib/injected/injected.component.module.d.ts +8 -0
- package/lib/injected/injected.d.ts +26 -0
- package/lib/injected/injected.directive.d.ts +17 -0
- package/lib/injected/injected.instance.d.ts +29 -0
- package/lib/pipe/date/date.pipe.module.d.ts +13 -0
- package/lib/pipe/date/datedistance.pipe.d.ts +8 -0
- package/lib/pipe/date/dateformatdistance.pipe.d.ts +13 -0
- package/lib/pipe/date/datefromtoformat.pipe.d.ts +14 -0
- package/lib/pipe/date/index.d.ts +8 -0
- package/lib/pipe/date/minutesstring.pipe.d.ts +8 -0
- package/lib/pipe/date/timedistance.pipe.d.ts +13 -0
- package/lib/pipe/date/tojsdate.pipe.d.ts +9 -0
- package/lib/pipe/date/tominutes.pipe.d.ts +7 -0
- package/lib/pipe/index.d.ts +1 -0
- package/lib/router/anchor/anchor.d.ts +31 -0
- package/lib/router/anchor/anchor.directive.d.ts +20 -0
- package/lib/router/anchor/clickable.d.ts +17 -0
- package/lib/router/anchor/index.d.ts +3 -0
- package/lib/router/index.d.ts +3 -0
- package/lib/router/router/index.d.ts +3 -0
- package/lib/router/router/provider/angular/angular.router.service.d.ts +17 -0
- package/lib/router/router/provider/angular/angular.router.service.module.d.ts +8 -0
- package/lib/router/router/provider/angular/index.d.ts +2 -0
- package/lib/router/router/provider/index.d.ts +2 -0
- package/lib/router/router/provider/uirouter/index.d.ts +2 -0
- package/lib/router/router/provider/uirouter/uirouter.router.service.d.ts +19 -0
- package/lib/router/router/provider/uirouter/uirouter.router.service.module.d.ts +8 -0
- package/lib/router/router/service/index.d.ts +2 -0
- package/lib/router/router/service/router.service.d.ts +12 -0
- package/lib/router/router/service/router.transition.service.d.ts +11 -0
- package/lib/router/router/transition/index.d.ts +2 -0
- package/lib/router/router/transition/transition.d.ts +13 -0
- package/lib/router/router/transition/transition.watcher.directive.d.ts +18 -0
- package/lib/router/segue.d.ts +28 -0
- package/lib/storage/index.d.ts +8 -0
- package/lib/storage/storage.accessor.d.ts +35 -0
- package/lib/storage/storage.accessor.simple.d.ts +75 -0
- package/lib/storage/storage.accessor.simple.factory.d.ts +18 -0
- package/lib/storage/storage.accessor.string.d.ts +16 -0
- package/lib/storage/storage.di.d.ts +3 -0
- package/lib/storage/storage.module.d.ts +10 -0
- package/lib/storage/storage.object.localstorage.d.ts +16 -0
- package/lib/storage/storage.object.memory.d.ts +9 -0
- package/lib/subscription/index.d.ts +1 -0
- package/lib/subscription/subscription.directive.d.ts +25 -0
- package/lib/util/index.d.ts +1 -0
- package/lib/util/view.d.ts +22 -0
- package/package.json +52 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dereekb-dbx-core.mjs","sources":["../../../../packages/dbx-core/src/lib/subscription/subscription.directive.ts","../../../../packages/dbx-core/src/lib/action/action.store.source.ts","../../../../packages/dbx-core/src/lib/action/directive/auto/action.automodify.directive.ts","../../../../packages/dbx-core/src/lib/action/directive/auto/action.autotrigger.directive.ts","../../../../packages/dbx-core/src/lib/action/directive/auto/action.autotrigger.value.directive.ts","../../../../packages/dbx-core/src/lib/action/action.ts","../../../../packages/dbx-core/src/lib/action/action.store.ts","../../../../packages/dbx-core/src/lib/action/action.holder.ts","../../../../packages/dbx-core/src/lib/action/directive/context/action.directive.ts","../../../../packages/dbx-core/src/lib/action/directive/context/action.component.ts","../../../../packages/dbx-core/src/lib/action/directive/context/action.source.directive.ts","../../../../packages/dbx-core/src/lib/action/directive/debug/action.logger.directive.ts","../../../../packages/dbx-core/src/lib/action/directive/map/action.map.directive.ts","../../../../packages/dbx-core/src/lib/action/directive/map/action.map.key.directive.ts","../../../../packages/dbx-core/src/lib/action/directive/map/action.map.source.directive.ts","../../../../packages/dbx-core/src/lib/action/directive/map/action.map.ts","../../../../packages/dbx-core/src/lib/action/directive/map/action.map.working.disable.directive.ts","../../../../packages/dbx-core/src/lib/action/directive/state/action.disabled.directive.ts","../../../../packages/dbx-core/src/lib/action/directive/state/action.disabled.modified.directive.ts","../../../../packages/dbx-core/src/lib/action/action.handler.ts","../../../../packages/dbx-core/src/lib/action/directive/state/action.handler.directive.ts","../../../../packages/dbx-core/src/lib/action/directive/state/action.success.component.ts","../../../../packages/dbx-core/src/lib/action/directive/state/action.success.directive.ts","../../../../packages/dbx-core/src/lib/action/directive/state/action.value.directive.ts","../../../../packages/dbx-core/src/lib/action/directive/state/action.working.component.ts","../../../../packages/dbx-core/src/lib/action/snackbar/snackbar.ts","../../../../packages/dbx-core/src/lib/action/snackbar/index.ts","../../../../packages/dbx-core/src/lib/action/action.machine.ts","../../../../packages/dbx-core/src/lib/action/action.module.ts","../../../../packages/dbx-core/src/lib/button/button.ts","../../../../packages/dbx-core/src/lib/button/action/action.button.trigger.directive.ts","../../../../packages/dbx-core/src/lib/button/action/action.button.directive.ts","../../../../packages/dbx-core/src/lib/router/anchor/anchor.ts","../../../../packages/dbx-core/src/lib/router/anchor/anchor.directive.ts","../../../../packages/dbx-core/src/lib/router/router/transition/transition.ts","../../../../packages/dbx-core/src/lib/router/router/provider/angular/angular.router.service.ts","../../../../packages/dbx-core/src/lib/router/router/service/router.service.ts","../../../../packages/dbx-core/src/lib/router/router/service/router.transition.service.ts","../../../../packages/dbx-core/src/lib/router/router/provider/angular/angular.router.service.module.ts","../../../../packages/dbx-core/src/lib/router/router/provider/uirouter/uirouter.router.service.ts","../../../../packages/dbx-core/src/lib/router/router/provider/uirouter/uirouter.router.service.module.ts","../../../../packages/dbx-core/src/lib/router/router/transition/transition.watcher.directive.ts","../../../../packages/dbx-core/src/lib/router/segue.ts","../../../../packages/dbx-core/src/lib/button/router/button.segue.directive.ts","../../../../packages/dbx-core/src/lib/button/button.directive.ts","../../../../packages/dbx-core/src/lib/button/button.loading.directive.ts","../../../../packages/dbx-core/src/lib/button/button.module.ts","../../../../packages/dbx-core/src/lib/pipe/date/datefromtoformat.pipe.ts","../../../../packages/dbx-core/src/lib/pipe/date/minutesstring.pipe.ts","../../../../packages/dbx-core/src/lib/pipe/date/tojsdate.pipe.ts","../../../../packages/dbx-core/src/lib/pipe/date/timedistance.pipe.ts","../../../../packages/dbx-core/src/lib/pipe/date/tominutes.pipe.ts","../../../../packages/dbx-core/src/lib/pipe/date/dateformatdistance.pipe.ts","../../../../packages/dbx-core/src/lib/pipe/date/datedistance.pipe.ts","../../../../packages/dbx-core/src/lib/pipe/date/date.pipe.module.ts","../../../../packages/dbx-core/src/lib/injected/injected.instance.ts","../../../../packages/dbx-core/src/lib/injected/injected.directive.ts","../../../../packages/dbx-core/src/lib/injected/injected.component.ts","../../../../packages/dbx-core/src/lib/injected/injected.component.module.ts","../../../../packages/dbx-core/src/lib/storage/storage.accessor.simple.ts","../../../../packages/dbx-core/src/lib/storage/storage.accessor.string.ts","../../../../packages/dbx-core/src/lib/storage/storage.di.ts","../../../../packages/dbx-core/src/lib/storage/storage.accessor.simple.factory.ts","../../../../packages/dbx-core/src/lib/storage/storage.accessor.ts","../../../../packages/dbx-core/src/lib/storage/storage.object.localstorage.ts","../../../../packages/dbx-core/src/lib/storage/storage.object.memory.ts","../../../../packages/dbx-core/src/lib/storage/storage.module.ts","../../../../packages/dbx-core/src/lib/util/view.ts","../../../../packages/dbx-core/src/dereekb-dbx-core.ts"],"sourcesContent":["import { OnDestroy, Directive, Inject } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { SubscriptionObject, LockSet } from '@dereekb/rxjs';\n\n/**\n * Abstract component that contains a SubscriptionObject and will clean it up automatically.\n */\n@Directive()\nexport abstract class AbstractSubscriptionDirective implements OnDestroy {\n\n private _subscriptionObject = new SubscriptionObject();\n\n constructor(subscription?: Subscription) {\n this.sub = subscription;\n }\n\n ngOnDestroy(): void {\n this._subscriptionObject.destroy();\n }\n\n protected set sub(subscription: Subscription | undefined) {\n this._subscriptionObject.subscription = subscription;\n }\n\n}\n\n\n/**\n * AbstractSubscriptionDirective extension that prevents the OnDestroy from occuring until the lockset is unlocked.\n */\n@Directive()\nexport abstract class AbstractLockSetSubscriptionDirective extends AbstractSubscriptionDirective implements OnDestroy {\n\n readonly lockSet = new LockSet();\n\n override ngOnDestroy(): void {\n this.lockSet.onNextUnlock(() => this.onLockSetDestroy());\n }\n\n protected onLockSetDestroy(): void {\n super.ngOnDestroy();\n }\n\n}\n","import { first, switchMap } from 'rxjs/operators';\nimport { Observable, Subscription } from 'rxjs';\nimport { Directive, forwardRef, Provider, Type } from '@angular/core';\nimport { LockSet, filterMaybe } from '@dereekb/rxjs';\nimport { OnDestroy } from '@angular/core';\nimport { Maybe, ReadableError } from '@dereekb/util';\nimport { ActionContextState, ActionContextStore } from './action.store';\nimport { ActionDisabledKey, ActionState } from './action';\n\n/**\n * Source that provides a ActionContextStore observable.\n */\nexport abstract class ActionContextStoreSource<T = any, O = any> {\n /**\n * Observable referencing the ActionContextStore.\n *\n * This observable by design is pre-filtered to not return null values.\n */\n abstract readonly store$: Observable<ActionContextStore<T, O>>;\n}\n\n/**\n * Secondary source. Used by DbNgxActionContextComponent to find secondary sources.\n */\nexport abstract class SecondaryActionContextStoreSource<T = any, O = any> extends ActionContextStoreSource<T, O> { }\n\nexport function actionContextStoreSourcePipe<T, O>(obs: Observable<Maybe<ActionContextStore<T, O>>>): Observable<ActionContextStore<T, O>> {\n return obs.pipe(filterMaybe());\n}\n\nexport type PipeActionStoreFunction<R, T, O> = (store: ActionContextStore<T, O>) => Observable<R>;\n\nexport function pipeActionStore<R = any, T = any, O = any>(source: ActionContextStoreSource<T, O>, pipeFn: PipeActionStoreFunction<R, T, O>): Observable<R> {\n return source.store$.pipe(\n switchMap(pipeFn)\n );\n}\n\nexport type UseActionStoreFunction<T, O> = (store: ActionContextStore<T, O>) => void;\n\n/**\n * Convenience function for subscribing to the input source once and using the provided store.\n */\nexport function useActionStore<T = any, O = any>(source: ActionContextStoreSource<T, O>, useFn: UseActionStoreFunction<T, O>): Subscription {\n return source.store$.pipe(first()).subscribe(useFn);\n}\n\n@Directive()\n// tslint:disable-next-line: directive-class-suffix\nexport class ActionContextStoreSourceInstance<T = any, O = any> implements OnDestroy {\n\n readonly lockSet = new LockSet();\n\n constructor(readonly source: ActionContextStoreSource<T, O>) {\n if (!source) {\n throw new Error('Source is required.');\n }\n }\n\n public ngOnDestroy(): void {\n this.lockSet.destroyOnNextUnlock();\n }\n\n // MARK: Store\n get store$(): Observable<ActionContextStore<T, O>> {\n return this.source.store$;\n }\n\n pipeStore<R>(pipeFn: PipeActionStoreFunction<R, T, O>): Observable<R> {\n return pipeActionStore(this.source, pipeFn);\n }\n\n useStore(useFn: UseActionStoreFunction<T, O>): Subscription {\n return useActionStore(this.source, useFn);\n }\n\n get state$(): Observable<ActionContextState<T, O>> {\n return this.pipeStore(x => x.state$);\n }\n\n get triggered$(): Observable<boolean> {\n return this.pipeStore(x => x.triggered$);\n }\n\n get valueReady$(): Observable<T> {\n return this.pipeStore(x => x.valueReady$);\n }\n\n get success$(): Observable<O> {\n return this.pipeStore(x => x.success$);\n }\n\n get error$(): Observable<Maybe<ReadableError>> {\n return this.pipeStore(x => x.error$);\n }\n\n get rejected$(): Observable<Maybe<ReadableError>> {\n return this.pipeStore(x => x.rejected$);\n }\n\n get isModified$(): Observable<boolean> {\n return this.pipeStore(x => x.isModified$);\n }\n\n get isModifiedAndCanTriggerUpdates$(): Observable<boolean> {\n return this.pipeStore(x => x.isModifiedAndCanTriggerUpdates$);\n }\n\n get isModifiedAndCanTrigger$(): Observable<boolean> {\n return this.pipeStore(x => x.isModifiedAndCanTrigger$);\n }\n\n get actionState$(): Observable<ActionState> {\n return this.pipeStore(x => x.actionState$);\n }\n\n get isWorking$(): Observable<boolean> {\n return this.pipeStore(x => x.isWorking$);\n }\n\n get isSuccess$(): Observable<boolean> {\n return this.pipeStore(x => x.isSuccess$);\n }\n\n get isDisabled$(): Observable<boolean> {\n return this.pipeStore(x => x.isDisabled$);\n }\n\n get errorCountSinceLastSuccess$(): Observable<number> {\n return this.pipeStore(x => x.errorCountSinceLastSuccess$);\n }\n\n public enable(key?: ActionDisabledKey, enable = true): void {\n this.disable(key, !enable);\n }\n\n public disable(key?: ActionDisabledKey, disable = true): void {\n this.useStore((x) => (disable) ? x.disable(key) : x.enable(key));\n }\n\n public setIsModified(isModified?: boolean | Observable<boolean> | Observable<void>): void {\n this.useStore((x) => x.setIsModified(isModified));\n }\n\n public trigger(): void {\n this.useStore((x) => x.trigger());\n }\n\n public readyValue(value: Maybe<T | Observable<T>>): void {\n this.useStore((x) => x.readyValue(value));\n }\n\n public startWorking(): void {\n this.useStore((x) => x.startWorking());\n }\n\n public reject(error: Maybe<ReadableError | Observable<ReadableError>>): void {\n this.useStore((x) => x.reject(error));\n }\n\n public success(value: O | Observable<O>): void {\n this.useStore((x) => x.success(value));\n }\n\n public reset(): void {\n this.useStore((x) => x.reset());\n }\n\n}\n\nexport const actionContextStoreSourceInstanceFactory = (source: ActionContextStoreSource) => {\n return new ActionContextStoreSourceInstance(source);\n};\n\n/**\n * Provides an ActionContextStoreSource, as well as an ActionContextStoreSourceInstance.\n */\nexport function ProvideActionStoreSource<S>(sourceType: Type<S>): Provider[] {\n return [{\n provide: ActionContextStoreSource,\n useExisting: forwardRef(() => sourceType)\n },\n {\n provide: ActionContextStoreSourceInstance,\n useFactory: actionContextStoreSourceInstanceFactory,\n deps: [ActionContextStoreSource]\n }];\n}\n\nexport function ProvideSecondaryActionStoreSource<S>(sourceType: Type<S>): Provider[] {\n return [{\n provide: SecondaryActionContextStoreSource,\n useExisting: forwardRef(() => sourceType)\n },\n ...ProvideActionStoreSource(sourceType)\n ];\n}\n","import { Directive, Input, OnInit, OnDestroy } from '@angular/core';\nimport { AbstractSubscriptionDirective } from '../../../subscription';\nimport { distinctUntilChanged, filter } from 'rxjs/operators';\nimport { combineLatest } from 'rxjs';\nimport { ActionContextStoreSourceInstance } from '../../action.store.source';\nimport { Host } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\n@Directive({\n selector: '[dbxActionAutoModify]',\n})\nexport class DbNgxActionAutoModifyDirective<T, O> extends AbstractSubscriptionDirective implements OnInit, OnDestroy {\n\n private readonly _autoModifyEnabled = new BehaviorSubject<boolean>(true);\n\n @Input('dbxActionAutoModify')\n get autoModifyEnabled(): boolean {\n return this._autoModifyEnabled.value;\n }\n\n set autoModifyEnabled(autoModifyEnabled: boolean) {\n this._autoModifyEnabled.next(autoModifyEnabled as any !== 'false');\n }\n\n constructor(@Host() public readonly source: ActionContextStoreSourceInstance<T, O>) {\n super();\n }\n\n ngOnInit(): void {\n const obs = combineLatest([\n this._autoModifyEnabled.pipe(distinctUntilChanged()), // Don't change unless specified otherwise.\n this.source.isModified$.pipe(filter(x => !x)) // Only when not modified send a value.\n ]);\n\n this.sub = obs.subscribe(([autoModifyEnabled, isModified]) => {\n if (autoModifyEnabled && !isModified) {\n this.source.setIsModified(true);\n }\n });\n }\n\n override ngOnDestroy(): void {\n this.source.lockSet.onNextUnlock(() => {\n super.ngOnDestroy();\n this._autoModifyEnabled.complete();\n });\n }\n\n}\n","import { Directive, Input, OnInit, OnDestroy } from '@angular/core';\nimport { AbstractSubscriptionDirective } from '../../../subscription';\nimport { debounce, distinctUntilChanged, exhaustMap, filter, first, map, mergeMap, shareReplay, switchMap, throttle } from 'rxjs/operators';\nimport { EMPTY, interval, Subject, combineLatest } from 'rxjs';\nimport { Observable } from 'rxjs';\nimport { ActionContextStoreSourceInstance } from '../../action.store.source';\nimport { Host } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { Maybe } from '@dereekb/util';\n\nconst DEFAULT_DEBOUNCE_MS = 2 * 1000;\n\nconst DEFAULT_THROTTLE_MS = 10 * 1000;\n\nconst DEFAULT_ERROR_THROTTLE_MS = 3 * 1000;\n\nconst MAX_ERRORS_TO_THROTTLE_ON = 6;\n\n/**\n * Extension of DbNgxActionTransitionSafetyDirective that automatically triggers the action periodically when it is in a modified state.\n */\n@Directive({\n selector: '[dbxActionAutoTrigger]',\n})\nexport class DbNgxActionAutoTriggerDirective<T, O> extends AbstractSubscriptionDirective implements OnInit, OnDestroy {\n\n private _triggerEnabled = new BehaviorSubject<boolean>(true);\n\n /**\n * How much to throttle the auto-triggering.\n */\n @Input('dbxActionAutoTrigger')\n get triggerEnabled(): boolean {\n return this._triggerEnabled.value;\n }\n\n set triggerEnabled(triggerEnabled: boolean) {\n triggerEnabled = triggerEnabled !== false; // Default to true\n\n if (this.triggerEnabled !== triggerEnabled) {\n this._triggerEnabled.next(triggerEnabled);\n }\n }\n\n @Input()\n triggerDebounce = DEFAULT_DEBOUNCE_MS;\n\n @Input()\n triggerThrottle = DEFAULT_THROTTLE_MS;\n\n @Input()\n triggerErrorThrottle = DEFAULT_ERROR_THROTTLE_MS;\n\n maxErrorsForThrottle = MAX_ERRORS_TO_THROTTLE_ON;\n\n /**\n * Optional input to override both triggerDebounce and triggerThrottle.\n *\n * Used in forms that are simple.\n */\n @Input()\n set fastTrigger(fastTrigger: boolean) {\n if (fastTrigger) {\n this.triggerDebounce = 200;\n this.triggerThrottle = 500;\n }\n }\n\n /**\n * Optional input to override both triggerDebounce and triggerThrottle to be 0.\n *\n * Used in forms that generally return a single value.\n */\n @Input()\n set instantTrigger(instantTrigger: boolean) {\n if (instantTrigger) {\n this.triggerDebounce = 10;\n this.triggerThrottle = 0;\n }\n }\n\n @Input()\n get triggerLimit(): Maybe<number> {\n return this._triggerLimit.value;\n }\n\n set triggerLimit(triggerLimit: Maybe<number>) {\n triggerLimit = triggerLimit || 0;\n this._triggerLimit.next(triggerLimit);\n }\n\n private readonly _triggerLimit = new BehaviorSubject<number | undefined>(undefined);\n private readonly _trigger = new Subject<number>();\n private _triggerCount = 0;\n\n readonly _errorCount$ = this.source.errorCountSinceLastSuccess$;\n\n readonly _triggerCount$ = this.source.isModifiedAndCanTriggerUpdates$.pipe(\n filter(() => this.isEnabled),\n filter((x) => x),\n debounce(() => interval(this.triggerDebounce)),\n throttle(() => this._errorCount$.pipe(\n first(),\n exhaustMap((count) => interval(this.triggerThrottle + (Math.min(count, this.maxErrorsForThrottle) * this.triggerErrorThrottle)))\n ), { leading: true, trailing: true }),\n // Check again for the \"trailing\" piece.\n filter(() => this.isEnabled),\n mergeMap(() => this.source.isModifiedAndCanTrigger$.pipe(first())),\n filter((x) => x),\n map(() => this._triggerCount += 1),\n shareReplay(1)\n );\n\n /**\n * Observable for the trigger mechanism.\n */\n readonly triggerCount$ = this._triggerEnabled.pipe(\n switchMap((enabled) => {\n if (enabled) {\n return this._triggerCount$;\n } else {\n return EMPTY;\n }\n })\n );\n\n private readonly _isTriggerLimited$: Observable<[number, boolean]> =\n combineLatest([this.triggerCount$, this._triggerLimit]).pipe(\n map(([triggerCount, limit]) => [triggerCount, ((limit) ? (triggerCount > limit) : false)] as [number, boolean]),\n shareReplay(1)\n );\n\n readonly isTriggerLimited$ = this._isTriggerLimited$.pipe(map(x => x[1]));\n readonly trigger$: Observable<void> = this._isTriggerLimited$.pipe(\n filter(x => !x[1]),\n distinctUntilChanged((a, b) => a[0] === b[0]), // Only trigger when the count changes.\n map(() => undefined as void)\n );\n\n constructor(@Host() public readonly source: ActionContextStoreSourceInstance<T, O>) {\n super();\n }\n\n get isEnabled(): boolean {\n return this.triggerEnabled !== false;\n }\n\n ngOnInit(): void {\n this.sub = this.trigger$.subscribe(() => {\n this.source.trigger();\n });\n }\n\n override ngOnDestroy(): void {\n this.source.lockSet.onNextUnlock(() => {\n super.ngOnDestroy();\n this._trigger.complete();\n this._triggerLimit.complete();\n });\n }\n\n}\n","import { ActionContextStoreSourceInstance } from '../../action.store.source';\nimport { switchMap, mergeMap, map, withLatestFrom, shareReplay } from 'rxjs/operators';\nimport { Directive, Host, Input, OnInit } from '@angular/core';\nimport { BehaviorSubject, Observable, of, EMPTY } from 'rxjs';\nimport { OnDestroy } from '@angular/core';\nimport { hasValueOrNotEmpty, Maybe } from '@dereekb/util';\nimport { SubscriptionObject } from '@dereekb/rxjs';\n\nexport type DbNgxActionAutoTriggerIsModifiedFn<T> = (value: T) => Observable<boolean>;\n\n/**\n * Directive that watches an observable for changes and sets the new value and modified states as necessary.\n */\n@Directive({\n selector: '[dbxActionAutoTriggerValue]',\n})\nexport class DbNgxActionAutoTriggerValueDirective<T, O> implements OnInit, OnDestroy {\n\n private _valueObs = new BehaviorSubject<Observable<T>>(EMPTY);\n private _isModifiedFn = new BehaviorSubject<Maybe<DbNgxActionAutoTriggerIsModifiedFn<T>>>(undefined);\n\n private _modifiedSub = new SubscriptionObject();\n private _triggerSub = new SubscriptionObject();\n\n @Input('dbxActionAutoTriggerValue')\n set dbxActionAutoTriggerValue(dbxActionAutoTriggerValue: Observable<T>) {\n this._valueObs.next(dbxActionAutoTriggerValue);\n }\n\n @Input()\n set dbxActionAutoTriggerModifiedNonEmptyValue(requireNonEmpty: boolean) {\n if (requireNonEmpty) {\n this.dbxActionAutoTriggerModified = (value) => {\n return of(hasValueOrNotEmpty(value));\n };\n }\n }\n\n @Input()\n set dbxActionAutoTriggerModified(dbxActionAutoTriggerModified: DbNgxActionAutoTriggerIsModifiedFn<T>) {\n this._isModifiedFn.next(dbxActionAutoTriggerModified);\n }\n\n readonly modifiedValue$ = this._valueObs.pipe(\n switchMap((obs) => obs.pipe(\n withLatestFrom(this._isModifiedFn),\n mergeMap(([value, dbxActionAutoTriggerModified]) => {\n let result: Observable<[boolean, T]>;\n\n if (dbxActionAutoTriggerModified) {\n result = dbxActionAutoTriggerModified(value).pipe(\n map((isModified) => [isModified, value] as [boolean, T])\n );\n } else {\n result = of([true, value]);\n }\n\n return result;\n }),\n shareReplay(1)\n ))\n );\n\n constructor(@Host() public readonly source: ActionContextStoreSourceInstance<T, O>) { }\n\n ngOnInit(): void {\n // Update Modified value.\n this._modifiedSub.subscription = this.modifiedValue$.subscribe(([isModified, value]) => {\n this.source.setIsModified(isModified);\n });\n\n // Set the value on triggers.\n this._triggerSub.subscription = this.source.triggered$.pipe(\n mergeMap(x => this.modifiedValue$)\n ).subscribe(([isModified, value]) => {\n this.source.readyValue(value);\n });\n }\n\n ngOnDestroy(): void {\n this.source.lockSet.onNextUnlock(() => {\n this._isModifiedFn.complete();\n this._valueObs.complete();\n this._modifiedSub.destroy();\n this._triggerSub.destroy();\n });\n }\n\n}\n","\n/**\n * Used by ActionContextState to denote what state the action is in.\n */\n export enum ActionState {\n /**\n * No action in progress. Waiting for the trigger.\n */\n Idle = 'idle',\n /**\n * Idle state that can be set to show that the source is not yet ready.\n */\n Disabled = 'disabled',\n /**\n * The action was triggered. We wait (and allow) the value to be updated.\n */\n Triggered = 'triggered',\n /**\n * The trigger was accepted and the value is updated. It should begin working immediately.\n *\n * ValueReady cannot be set until triggered is set.\n */\n ValueReady = 'valueReady',\n /**\n * The action is in progress.\n */\n Working = 'working',\n /**\n * The trigger, action, or value was rejected due to an error or other issue.\n *\n * An error may be specified optionally.\n */\n Rejected = 'rejected',\n /**\n * The action was successful.\n */\n Success = 'success'\n}\n\n/**\n * Unique key for disabling/enabling.\n */\nexport type ActionDisabledKey = string;\n\nexport const DEFAULT_ACTION_DISABLED_KEY = 'default';\n\nexport function isIdleActionState(actionState: ActionState): boolean {\n switch (actionState) {\n case ActionState.Idle:\n case ActionState.Disabled:\n case ActionState.Rejected:\n case ActionState.Success:\n return true;\n default:\n return false;\n }\n}\n","import { Injectable, OnDestroy } from '@angular/core';\nimport { ComponentStore } from '@ngrx/component-store';\nimport { Observable } from 'rxjs';\nimport { distinctUntilChanged, filter, map, shareReplay, switchMap, startWith } from 'rxjs/operators';\nimport { BooleanStringKeyArray, BooleanStringKeyArrayUtilityInstance, Maybe, ReadableError } from '@dereekb/util';\nimport { filterMaybe, LockSet, scanCount } from '@dereekb/rxjs';\nimport { ActionDisabledKey, ActionState, DEFAULT_ACTION_DISABLED_KEY, isIdleActionState } from './action';\n\nexport function isActionContextEnabled(state: ActionContextState): boolean {\n return BooleanStringKeyArrayUtilityInstance.isFalse(state.disabled);\n}\n\nexport function isActionContextDisabled(state: ActionContextState): boolean {\n return BooleanStringKeyArrayUtilityInstance.isTrue(state.disabled);\n}\n\nexport function isDisabledActionContextState(state: ActionContextState): boolean {\n return isIdleActionState(state.actionState) && isActionContextDisabled(state);\n}\n\nexport function isWorkingActionState(actionState: ActionState): boolean {\n return !isIdleActionState(actionState);\n}\n\nexport function canTriggerActionState(actionState: ActionState): boolean {\n return actionState !== ActionState.Disabled && isIdleActionState(actionState);\n}\n\nexport function canTriggerAction(state: ActionContextState): boolean {\n return isActionContextEnabled(state) && isIdleActionState(state.actionState);\n}\n\nexport function canReadyValue(state: ActionContextState): boolean {\n return state.actionState === ActionState.Triggered;\n}\n\nexport function actionContextIsModifiedAndCanTrigger(state: ActionContextState): boolean {\n // console.log('check: ', state, state.isModified, canTriggerAction(state));\n return state.isModified && canTriggerAction(state);\n}\n\nexport function actionContextHasNoErrorAndIsModifiedAndCanTrigger(state: ActionContextState): boolean {\n return !state.error && actionContextIsModifiedAndCanTrigger(state);\n}\n\nexport interface ActionContextState<T = any, O = any> {\n actionState: ActionState;\n isModified: boolean;\n /**\n * Value that is set after a triggered action.\n */\n value?: Maybe<T>;\n result?: Maybe<O>;\n error?: Maybe<ReadableError>;\n /**\n * Current disabled state.\n */\n disabled?: BooleanStringKeyArray;\n /**\n * Number of consecutive errors that have occured.\n */\n errorCount?: number;\n}\n\nconst INITIAL_STATE: ActionContextState = {\n isModified: false,\n actionState: ActionState.Idle\n};\n\n@Injectable()\nexport class ActionContextStore<T = any, O = any> extends ComponentStore<ActionContextState<T, O>> implements OnDestroy {\n\n readonly lockSet = new LockSet();\n\n constructor() {\n super({ ...INITIAL_STATE });\n this.lockSet.addLock('working', this.isWorking$);\n }\n\n // MARK: Accessors\n readonly actionState$ = this.state$.pipe(map(x => isDisabledActionContextState(x) ? ActionState.Disabled : x.actionState), shareReplay(1));\n\n /**\n * Returns the current disabled reasons.\n */\n readonly disabled$ = this.state$.pipe(map(x => [...x.disabled ?? []]), distinctUntilChanged(), shareReplay(1));\n\n /**\n * Maps the current state to true or not when the action state changes to/from disabled.\n */\n readonly isDisabled$ = this.state$.pipe(map(isDisabledActionContextState), distinctUntilChanged(), shareReplay(1));\n\n /**\n * Pipes when idle but modified.\n */\n readonly isModified$ = this.afterDistinctBoolean(x => x.isModified);\n\n /**\n * Pipes true when triggered.\n */\n readonly triggered$ = this.afterDistinctActionState(ActionState.Triggered, () => true);\n\n /**\n * Pipes the readied value on ValueReady.\n */\n readonly valueReady$ = this.afterDistinctActionState(ActionState.ValueReady, x => x.value);\n\n /**\n * Pipes the error on the rejection state.\n */\n readonly rejected$ = this.afterDistinctActionState(ActionState.Rejected, x => x.error);\n\n /**\n * Pipes the result when the ActionState becomes working.\n */\n readonly working$ = this.afterDistinctActionState(ActionState.Working, () => true);\n\n /**\n * Whether or not it is currently in a working state.\n */\n readonly isWorking$ = this.afterDistinctBoolean(x => isWorkingActionState(x.actionState));\n\n /**\n * Pipes the current error.\n */\n readonly error$ = this.state$.pipe(map(x => x.error), distinctUntilChanged(), shareReplay(1));\n\n /**\n * Pipes the result when the ActionState becomes success.\n */\n readonly success$ = this.afterDistinctActionState(ActionState.Success, x => x.result);\n\n /**\n * Whether or not it is currently in a success state.\n */\n readonly isSuccess$ = this.afterDistinctBoolean(x => x.actionState === ActionState.Success);\n\n /**\n * Number of errors since last success.\n */\n readonly errorCountSinceLastSuccess$ = this.isSuccess$.pipe(\n startWith(false),\n distinctUntilChanged(),\n switchMap(() => this.error$.pipe(filterMaybe(), scanCount(), startWith(0))),\n shareReplay(1)\n );\n\n /**\n * Whether or not the state can be triggered.\n */\n readonly canTrigger$ = this.state$.pipe(\n map(canTriggerAction),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n /**\n * Pipe that maps whether or not this is modified and can be triggered.\n *\n * Updates every state update instead of when the value changes.\n */\n readonly isModifiedAndCanTriggerUpdates$ = this.state$.pipe(\n map((x) => actionContextIsModifiedAndCanTrigger(x), shareReplay(1))\n );\n\n /**\n * Whether or not it can be triggered and modified.\n */\n readonly isModifiedAndCanTrigger$ = this.isModifiedAndCanTriggerUpdates$.pipe(\n distinctUntilChanged()\n );\n\n readonly hasNoErrorAndIsModifiedAndCanTrigger$ = this.state$.pipe(\n map((x) => actionContextHasNoErrorAndIsModifiedAndCanTrigger(x)),\n distinctUntilChanged(), shareReplay(1)\n );\n\n // MARK: State Changes\n /**\n * Adds a disabled reason.\n */\n readonly disable = this.updater((state, key?: void | ActionDisabledKey) => ({\n ...state,\n disabled: BooleanStringKeyArrayUtilityInstance.insert(state.disabled, ((key as any) ?? DEFAULT_ACTION_DISABLED_KEY))\n }));\n\n /**\n * Removes a disabled reason.\n */\n readonly enable = this.updater((state, key?: void | ActionDisabledKey) => ({\n ...state,\n disabled: BooleanStringKeyArrayUtilityInstance.remove(state.disabled, ((key as any) ?? DEFAULT_ACTION_DISABLED_KEY))\n }));\n\n /**\n * Triggers the modified state, if not disabled.\n */\n readonly setIsModified = this.updater((state, isModified: void | boolean) => ({\n ...state,\n actionState: (state.actionState === ActionState.Success) ? ActionState.Idle : state.actionState, // Set to idle from success.\n isModified: (isModified as boolean) ?? true\n }));\n\n /**\n * Triggers the action if the state is currently not idle. The current state is cleared, but the error is retained (as we may need the error from the previous attempt).\n *\n * Will not fire if the action is disabled.\n */\n readonly trigger = this.updater((state) => canTriggerAction(state)\n ? ({ isModified: state.isModified, actionState: ActionState.Triggered, error: state.error, value: undefined })\n : state);\n\n /**\n * Updates the value, setting value ready. The current result is cleared.\n */\n readonly readyValue = this.updater((state, value: Maybe<T>) => canReadyValue(state)\n ? ({ ...state, actionState: ActionState.ValueReady, value, result: undefined })\n : state);\n\n /**\n * Notifys the context that the action is in progress.\n */\n readonly startWorking = this.updater((state) => ({ ...state, actionState: ActionState.Working }));\n\n /**\n * Triggers rejection of the action. The value is cleared.\n */\n readonly reject = this.updater((state, error?: Maybe<ReadableError>) => ({ isModified: state.isModified, actionState: ActionState.Rejected, error, errorCount: (state.errorCount ?? 0) + 1 }));\n\n /**\n * Updates the state to success, and optionally sets a result.\n *\n * Clears modified state, and any errors.\n */\n readonly success = this.updater((state, result?: O) => ({ isModified: false, actionState: ActionState.Success, value: state.value, result, error: undefined }));\n\n /**\n * Completely resets the store.\n */\n readonly reset = this.updater((state) => ({ ...INITIAL_STATE }));\n\n // MARK: Utility\n afterDistinctBoolean(fromState: (state: ActionContextState) => boolean): Observable<boolean> {\n return this.state$.pipe(\n map(x => fromState(x)),\n distinctUntilChanged(),\n shareReplay(1)\n );\n }\n\n afterDistinctActionState<X>(actionState: ActionState, fromState: (state: ActionContextState) => X): Observable<X> {\n return this.state$.pipe(\n map((x) => ([x, x.actionState]) as [ActionContextState, ActionState]),\n distinctUntilChanged((a, b) => a?.[1] === b?.[1]), // Filter out when the state remains the same.\n filter(([x, y]) => y === actionState), // Only pipe when the action state matches.\n map(x => fromState(x[0])),\n shareReplay(1)\n );\n }\n\n // MARK: Cleanup\n override ngOnDestroy(): void {\n // Wait for any actions to complete before destroying.\n this.lockSet.onNextUnlock(() => {\n super.ngOnDestroy();\n }, 2000);\n }\n\n}\n","import { Observable, of } from 'rxjs';\nimport { Destroyable } from '@dereekb/util';\nimport { LockSet } from '@dereekb/rxjs';\nimport { ActionContextStoreSource, ActionContextStoreSourceInstance, SecondaryActionContextStoreSource } from './action.store.source';\nimport { ActionContextStore } from './action.store';\n\n/**\n * Abstract class that can either use SecondaryActionContextStoreSource or create it's own.\n */\nexport class ActionContextBaseSource<T = any, O = any> implements ActionContextStoreSource, Destroyable {\n\n private readonly _store?: ActionContextStore;\n private readonly _store$: Observable<ActionContextStore<T, O>>;\n private readonly _instance: ActionContextStoreSourceInstance<T, O>;\n\n readonly isModified$: Observable<boolean>;\n readonly triggered$: Observable<boolean>;\n readonly success$: Observable<O>;\n\n constructor(readonly inputSource?: SecondaryActionContextStoreSource) {\n if (this.inputSource) {\n this._store$ = this.inputSource.store$;\n } else {\n this._store = new ActionContextStore();\n this._store$ = of(this._store);\n }\n\n this._instance = new ActionContextStoreSourceInstance(this);\n this.isModified$ = this._instance.isModified$;\n this.triggered$ = this._instance.triggered$;\n this.success$ = this._instance.success$;\n }\n\n destroy(): void {\n if (this._store) {\n this._store.ngOnDestroy();\n this._instance.ngOnDestroy();\n }\n }\n\n get lockSet(): LockSet {\n return this._instance.lockSet;\n }\n\n get sourceInstance(): ActionContextStoreSourceInstance<T, O> {\n return this._instance;\n }\n\n get store$(): Observable<ActionContextStore<T, O>> {\n return this._store$;\n }\n\n /**\n * Use to trigger the action directly.\n */\n public trigger(): void {\n this._instance.trigger();\n }\n\n public readyValue(value: T): void {\n this._instance.readyValue(value);\n }\n\n public reset(): void {\n this._instance.reset();\n }\n\n}\n","import { Directive, Optional, OnDestroy, Host } from '@angular/core';\nimport { ProvideActionStoreSource, SecondaryActionContextStoreSource } from '../../action.store.source';\nimport { ActionContextBaseSource } from '../../action.holder';\n\n/**\n * Provides an DbNgxActionContext.\n */\n@Directive({\n selector: '[dbxActionContext]',\n exportAs: 'action',\n providers: ProvideActionStoreSource(DbNgxActionContextDirective)\n})\nexport class DbNgxActionContextDirective<T = any, O = any> extends ActionContextBaseSource implements OnDestroy {\n\n constructor(@Optional() @Host() inputSource: SecondaryActionContextStoreSource) {\n super(inputSource);\n }\n\n ngOnDestroy(): void {\n this.lockSet.destroyOnNextUnlock(() => {\n this.destroy();\n });\n }\n\n}\n","import { Component } from '@angular/core';\nimport { ProvideActionStoreSource } from '../../action.store.source';\nimport { DbNgxActionContextDirective } from './action.directive';\n\n@Component({\n selector: 'dbx-action',\n exportAs: 'action',\n template: '<ng-content></ng-content>',\n \n providers: ProvideActionStoreSource(DbNgxActionComponent)\n})\nexport class DbNgxActionComponent<T = any, O = any> extends DbNgxActionContextDirective<T, O> { }\n","import { filterMaybe } from '@dereekb/rxjs';\nimport { Directive, Input, OnDestroy } from '@angular/core';\nimport { Maybe } from '@dereekb/util';\nimport { BehaviorSubject } from 'rxjs';\nimport { switchMap } from 'rxjs/operators';\nimport { ProvideSecondaryActionStoreSource, SecondaryActionContextStoreSource, ActionContextStoreSource, actionContextStoreSourcePipe } from '../../action.store.source';\n\n/**\n * Directive that provides a DbNgxActionSourceDirective that is passed in.\n */\n@Directive({\n selector: '[dbxActionSource]',\n providers: ProvideSecondaryActionStoreSource(DbNgxActionSourceDirective)\n})\nexport class DbNgxActionSourceDirective implements SecondaryActionContextStoreSource, OnDestroy {\n\n private _source = new BehaviorSubject<Maybe<ActionContextStoreSource>>(undefined);\n readonly store$ = this._source.pipe(filterMaybe(), switchMap((x) => actionContextStoreSourcePipe(x.store$)));\n\n ngOnDestroy(): void {\n this._source.complete();\n }\n\n @Input('dbxActionSource')\n get source(): Maybe<ActionContextStoreSource> {\n return this._source.value;\n }\n\n set source(source: Maybe<ActionContextStoreSource>) {\n if (source && !source.store$) {\n throw new Error('Invalid source passed to dbxActionSource.');\n }\n\n this._source.next(source);\n }\n\n}\n","import { Directive, OnInit, Host } from '@angular/core';\nimport { AbstractSubscriptionDirective } from '../../../subscription';\nimport { ActionContextStoreSourceInstance } from '../../action.store.source';\n\n/**\n * Prints out the current state to the console. Useful for debugging.\n */\n@Directive({\n selector: '[dbxActionContextLogger]'\n})\nexport class DbNgxActionContextLoggerDirective extends AbstractSubscriptionDirective implements OnInit {\n\n constructor(@Host() public readonly source: ActionContextStoreSourceInstance) {\n super();\n }\n\n ngOnInit(): void {\n this.sub = this.source.state$.subscribe((state) => {\n console.log('State: ', state);\n });\n }\n\n}\n","import { reduceBooleansWithOrFn } from '@dereekb/util';\nimport { Directive, OnDestroy } from '@angular/core';\nimport { BehaviorSubject, Observable, of } from 'rxjs';\nimport { distinctUntilChanged, map, shareReplay, switchMap } from 'rxjs/operators';\nimport { combineLatestFromMapValuesObsFn } from '@dereekb/rxjs';\nimport { ActionContextStoreSource, actionContextStoreSourcePipe } from '../../action.store.source';\nimport { ActionContextStore } from '../../action.store';\nimport { ActionContextStoreSourceMap, ActionKey } from './action.map';\n\n/**\n * Context used for providing actions based on the action key.\n *\n * This is useful for passing action contexts around via the providers instead of explicit injection.\n */\n@Directive({\n selector: '[dbxActionContextMap]',\n exportAs: 'actionMap',\n providers: [],\n})\nexport class DbNgxActionContextMapDirective implements ActionContextStoreSourceMap, OnDestroy {\n\n private readonly _map = new BehaviorSubject<Map<ActionKey, ActionContextStoreSource>>(new Map());\n readonly map$ = this._map.asObservable();\n\n readonly areAnyWorking$ = this.checkAnyAre(x => x.isWorking$, false);\n\n constructor() { }\n\n get map(): Map<ActionKey, ActionContextStoreSource> {\n return this._map.value;\n }\n\n sourceForKey(key: ActionKey): ActionContextStoreSource<any, any> {\n return new DbNgxActionContextMapDirectiveSourceInstance(this, key);\n }\n\n addStoreSource(key: ActionKey, source: ActionContextStoreSource): void {\n if (this.map.has(key)) {\n throw new Error(`Key already existed for \"${key}\" in map. Ensure the previous store is removed before setting another.`);\n } else if (!source) {\n throw new Error('addStoreSource requires a source.');\n }\n\n this.map.set(key, source);\n this._map.next(this.map);\n }\n\n removeStore(key: ActionKey): void {\n if (!this.map.delete(key)) {\n console.warn('removeStore called and no value was found.');\n }\n\n this._map.next(this.map);\n }\n\n ngOnDestroy(): void {\n this._map.complete();\n }\n\n // MARK: Utility\n checkAnyAre(mapFn: (input: ActionContextStore) => Observable<boolean>, emptyArrayValue = false): Observable<boolean> {\n return this.reduceFromAllSources(mapFn, reduceBooleansWithOrFn(emptyArrayValue));\n }\n\n reduceFromAllSources<O, R>(mapFn: (input: ActionContextStore) => Observable<O>, reduceFn: (values: O[]) => R): Observable<R> {\n return this.fromAllSources<O>(mapFn).pipe(map(reduceFn));\n }\n\n fromAllSources<O>(mapFn: (input: ActionContextStore) => Observable<O>): Observable<O[]> {\n return this.map$.pipe(switchMap(combineLatestFromMapValuesObsFn((x) => x.store$.pipe(switchMap(mapFn)))));\n }\n\n}\n\nexport class DbNgxActionContextMapDirectiveSourceInstance implements ActionContextStoreSource {\n\n readonly _source$ = this.parent.map$.pipe(map(x => x.get(this.key)), distinctUntilChanged());\n readonly _store$ = this._source$.pipe(switchMap((x) => x?.store$ ?? of(undefined)), shareReplay(1));\n readonly store$ = actionContextStoreSourcePipe(this._store$);\n\n constructor(private readonly parent: DbNgxActionContextMapDirective, readonly key: ActionKey) { }\n\n}\n","import { filterMaybe } from '@dereekb/rxjs';\nimport { Directive, Input, OnDestroy } from '@angular/core';\nimport { Maybe } from '@dereekb/util';\nimport { BehaviorSubject } from 'rxjs';\nimport { switchMap } from 'rxjs/operators';\nimport { ActionKey } from './action.map';\nimport { ProvideSecondaryActionStoreSource, SecondaryActionContextStoreSource } from '../../action.store.source';\nimport { DbNgxActionContextMapDirective } from './action.map.directive';\n\n/**\n * Directive that provides a ActionContextStoreSource using the input key and DbNgxActionContextMapDirective.\n */\n@Directive({\n selector: '[dbxActionFromMap]',\n providers: ProvideSecondaryActionStoreSource(DbNgxActionFromMapDirective)\n})\nexport class DbNgxActionFromMapDirective implements SecondaryActionContextStoreSource, OnDestroy {\n\n private _key = new BehaviorSubject<Maybe<ActionKey>>(undefined);\n readonly store$ = this._key.pipe(filterMaybe(), switchMap((x) => this._map.sourceForKey(x).store$));\n\n constructor(private readonly _map: DbNgxActionContextMapDirective) { }\n\n ngOnDestroy(): void {\n this._key.complete();\n }\n\n @Input('dbxActionFromMap')\n get key(): Maybe<ActionKey> {\n return this._key.value;\n }\n\n set key(key: Maybe<ActionKey>) {\n this._key.next(key);\n }\n\n}\n","import { Directive, Host, Input, OnDestroy } from '@angular/core';\nimport { Maybe } from '@dereekb/util';\nimport { ActionContextStoreSource } from '../../action.store.source';\nimport { DbNgxActionContextMapDirective } from './action.map.directive';\nimport { ActionKey } from './action.map';\n\n/**\n * Used to communicate with an dbxActionMap and set the ActionContextStore to the store based on the key.\n */\n@Directive({\n selector: '[dbxActionMapSource]'\n})\nexport class DbNgxActionMapSourceDirective implements OnDestroy {\n\n private _key: Maybe<ActionKey>;\n\n constructor(@Host() public readonly source: ActionContextStoreSource, private readonly _map: DbNgxActionContextMapDirective) { }\n\n ngOnDestroy(): void {\n this._removeFromToStore();\n }\n\n @Input('dbxActionMapSource')\n set key(key: ActionKey) {\n if (this._key !== key) {\n this._removeFromToStore();\n }\n\n this._key = key;\n this._addToStore();\n }\n\n private _addToStore(): void {\n if (this._key) {\n this._map.addStoreSource(this._key, this.source);\n }\n }\n\n private _removeFromToStore(): void {\n if (this._key) {\n this._map.removeStore(this._key);\n }\n }\n\n}\n","import { ActionContextStoreSource } from '../../action.store.source';\n\nexport type ActionKey = string;\n\n/**\n * Map that returns sources for ActionKey values.\n */\nexport abstract class ActionContextStoreSourceMap<T = any, O = any> {\n /**\n * Returns a ActionContextStoreSource for the input action key.\n *\n * @param key Action key to retrieve the source for.\n */\n abstract sourceForKey(key: ActionKey): ActionContextStoreSource<T, O>;\n}\n","import { Directive, Host, Input, OnInit, OnDestroy } from '@angular/core';\nimport { Maybe } from '@dereekb/util';\nimport { AbstractSubscriptionDirective } from '../../../subscription';\nimport { ActionContextStoreSourceInstance } from '../../action.store.source';\nimport { DbNgxActionContextMapDirective } from './action.map.directive';\nimport { ActionDisabledKey } from '../../action';\n\nexport const DEFAULT_ACTION_MAP_WORKING_DISABLED_KEY = '';\n\n/**\n * Used to communicate with an dbxActionMap and set the ActionContextStore to be disabled if any other element in the map is working.\n */\n@Directive({\n selector: '[dbxActionMapWorkingDisable]'\n})\nexport class DbNgxActionMapWorkingDisableDirective extends AbstractSubscriptionDirective implements OnInit, OnDestroy {\n\n @Input('dbxActionMapWorkingDisable')\n disabledKey: Maybe<ActionDisabledKey>;\n\n constructor(@Host() public readonly source: ActionContextStoreSourceInstance, private readonly _map: DbNgxActionContextMapDirective) {\n super();\n }\n\n ngOnInit(): void {\n this.sub = this._map.areAnyWorking$.subscribe((x) => {\n this.source.disable(this.disabledKey || DEFAULT_ACTION_MAP_WORKING_DISABLED_KEY, x);\n });\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this.source.enable(this.disabledKey || DEFAULT_ACTION_MAP_WORKING_DISABLED_KEY);\n }\n\n}\n","import { Directive, Host, Input, OnInit, OnDestroy } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { distinctUntilChanged } from 'rxjs/operators';\nimport { AbstractSubscriptionDirective } from '../../../subscription';\nimport { ActionContextStoreSourceInstance } from '../../action.store.source';\n\nexport const APP_ACTION_DISABLED_DIRECTIVE_KEY = 'dbx_action_disabled';\n\n/**\n * Directive that allows disabling an action using the inputs.\n */\n@Directive({\n selector: '[dbxActionDisabled]'\n})\nexport class DbNgxActionDisabledDirective<T, O> extends AbstractSubscriptionDirective implements OnInit, OnDestroy {\n\n private _disabled = new BehaviorSubject<boolean>(false);\n readonly disabled$ = this._disabled.pipe(distinctUntilChanged());\n\n constructor(@Host() public readonly source: ActionContextStoreSourceInstance<T, O>) {\n super();\n }\n\n ngOnInit(): void {\n this.sub = this.disabled$.subscribe((x) => {\n this.source.disable(APP_ACTION_DISABLED_DIRECTIVE_KEY, x);\n });\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this._disabled.complete();\n this.source.enable(APP_ACTION_DISABLED_DIRECTIVE_KEY);\n }\n\n @Input('dbxActionDisabled')\n get disabled(): boolean {\n return this._disabled.value;\n }\n\n set disabled(disabled: boolean) {\n this._disabled.next(disabled);\n }\n\n}\n","import { Directive, Host, OnInit, OnDestroy } from '@angular/core';\nimport { AbstractSubscriptionDirective } from '../../../subscription';\nimport { ActionContextStoreSourceInstance } from '../../action.store.source';\n\nexport const APP_ACTION_DISABLED_UNTIL_MODIFIED_DIRECTIVE_KEY = 'dbx_action_is_not_modified';\n\n/**\n * Directive that sets the disabled state based on the current isModified state.\n */\n@Directive({\n selector: '[dbxActionDisabledUntilModified]'\n})\nexport class DbNgxActionDisabledUntilModifiedDirective<T, O> extends AbstractSubscriptionDirective implements OnInit, OnDestroy {\n\n constructor(@Host() public readonly source: ActionContextStoreSourceInstance<T, O>) {\n super();\n }\n\n ngOnInit(): void {\n this.sub = this.source.isModified$.subscribe((x) => {\n this.source.disable(APP_ACTION_DISABLED_UNTIL_MODIFIED_DIRECTIVE_KEY, !x);\n });\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this.source.enable(APP_ACTION_DISABLED_UNTIL_MODIFIED_DIRECTIVE_KEY);\n }\n\n}\n","import { BehaviorSubject, isObservable, Observable, of } from 'rxjs';\nimport { first } from 'rxjs/operators';\nimport { ActionContextStoreSourceInstance } from './action.store.source';\nimport { Maybe, Destroyable } from '@dereekb/util';\n\nexport interface WorkHandlerContextDelegate<O = any> {\n startWorking(): void;\n success(result?: Maybe<O>): void;\n reject(error?: Maybe<any>): void;\n}\n\n/**\n * WorkHandlerContextDelegate implementation using an ActionContextStoreSourceInstance.\n */\nexport class WorkHandlerContextSourceDelegate<T = any, O = any> implements WorkHandlerContextDelegate<O> {\n\n constructor(readonly source: ActionContextStoreSourceInstance<T, O>) { }\n\n startWorking(): void {\n this.source.startWorking();\n }\n\n success(result: O): void {\n this.source.success(result);\n }\n\n reject(error: any): void {\n this.source.reject(error);\n }\n\n}\n\n/**\n * Used by DbNgxActionHandlerDirective when handling a function.\n */\nexport class WorkHandlerContext<T = any, O = any> implements Destroyable {\n\n private _done = false;\n private _doneActionBegan = false;\n\n private _actionBegan = new BehaviorSubject<boolean>(false);\n private _isComplete = new BehaviorSubject<boolean>(false);\n\n constructor(public readonly value: T, readonly delegate: WorkHandlerContextDelegate<O>) {\n // Schedule to cleanup self once isComplete is true.\n this._isComplete.subscribe((done) => {\n if (done) {\n this.destroy();\n }\n });\n }\n\n get actionBegan(): boolean {\n return this._doneActionBegan ?? this._actionBegan.value;\n }\n\n get actionBegan$(): Observable<boolean> {\n return this._done ? of(this._doneActionBegan) : this._actionBegan.asObservable();\n }\n\n get isComplete(): boolean {\n return this._done || this._isComplete.value;\n }\n\n get isComplete$(): Observable<boolean> {\n return this._done ? of(true) : this._isComplete.asObservable();\n }\n\n /**\n * Begins working using an observable.\n */\n startWorkingWithObservable(actionObs: Observable<O>): void {\n this.startWorking();\n actionObs.pipe(first()).subscribe((actionResult: O) => {\n this.success(actionResult);\n }, (error: any) => {\n const message = error.message ?? error.code ?? undefined;\n this.reject((message) ? ({ message }) : undefined);\n });\n }\n\n /**\n * Notifies the system that the action has begun.\n */\n startWorking(): void {\n this._setWorking();\n this.delegate.startWorking();\n }\n\n /**\n * Sets success on the action.\n */\n success(result?: O): void {\n this._setComplete();\n this.delegate.success(result);\n }\n\n /**\n * Sets rejected on the action.\n */\n reject(error?: any): void {\n this._setComplete();\n this.delegate.reject(error);\n }\n\n destroy(): void {\n this._doneActionBegan = this.actionBegan;\n this._done = true;\n\n // Delay to prevent error.\n setTimeout(() => {\n this._actionBegan.complete();\n this._isComplete.complete();\n });\n }\n\n private _setWorking(): void {\n if (this.actionBegan) {\n throw new Error('Action already has been triggered for this context.');\n }\n\n this._actionBegan.next(true);\n }\n\n private _setComplete(): void {\n if (this.isComplete) {\n throw new Error('Action has already been marked as completed.');\n }\n\n this._isComplete.next(true);\n }\n\n}\n\nexport type HandleActionFunctionConfigFn<T, O> = (value: T) => HandleWorkValueReadyConfig<T, O>;\n\n/**\n * Creates a function that uses a provider to always handle new values.\n */\nexport function handleWorkValueReadyWithConfigFn<T, O>(providerFn: HandleActionFunctionConfigFn<T, O>): (value: T) => Maybe<WorkHandlerContext<T, O>> {\n return (value) => {\n const config: HandleWorkValueReadyConfig<T, O> = providerFn(value);\n return handleWorkValueReadyFn(config)(value);\n };\n}\n\n/**\n * Config for handleWorkValueReadyFn().\n */\nexport interface HandleWorkValueReadyConfig<T, O> {\n handlerFunction: HandleActionFunction<T, O>;\n delegate: WorkHandlerContextDelegate<O>;\n}\n\n/**\n * Performs the action. Can either return an observable that will use the handler, or can use the handler itself.\n */\nexport type HandleActionFunction<T = any, O = any> = (value: T, context: WorkHandlerContext<T, O>) => Observable<O> | void;\n\n/**\n * Creates a function that handles the incoming value and creates a WorkHandlerContext.\n */\nexport function handleWorkValueReadyFn<T, O>({ handlerFunction, delegate }: HandleWorkValueReadyConfig<T, O>): (value: T) => Maybe<WorkHandlerContext<T, O>> {\n return (value: T) => {\n const handler = new WorkHandlerContext<T, O>(value, delegate);\n let fnResult: void | Observable<O>;\n\n try {\n fnResult = handlerFunction(value, handler);\n } catch (e: any) {\n console.error('Action encountered an unexpected error.', e);\n handler.reject(e);\n return;\n }\n\n if (!handler.isComplete) {\n if (fnResult && isObservable(fnResult)) {\n if (handler.actionBegan) {\n throw new Error('Action already marked as begun from handlerFunction result. Either return an observable or use the handler directly.');\n }\n\n handler.startWorkingWithObservable(fnResult);\n }\n }\n\n return handler;\n };\n}\n","import { Directive, Host, Input, OnDestroy, OnInit } from '@angular/core';\nimport { map, shareReplay, switchMap, tap } from 'rxjs/operators';\nimport { AbstractSubscriptionDirective } from '../../../subscription';\nimport { ActionContextStoreSourceInstance } from '../../action.store.source';\nimport { HandleActionFunction, WorkHandlerContextSourceDelegate, handleWorkValueReadyFn } from '../../action.handler';\nimport { Maybe } from '@dereekb/util';\nimport { filterMaybe } from '@dereekb/rxjs';\nimport { BehaviorSubject } from 'rxjs';\n\n\n/**\n * Context used for defining a function that performs an action using the input function on ValueReady.\n */\n@Directive({\n selector: '[dbxActionHandler]',\n})\nexport class DbNgxActionHandlerDirective<T, O> extends AbstractSubscriptionDirective implements OnInit, OnDestroy {\n\n private _handlerFunction = new BehaviorSubject<Maybe<HandleActionFunction<T, O>>>(undefined);\n readonly handlerFunction$ = this._handlerFunction.pipe(filterMaybe(), shareReplay(1));\n\n @Input('dbxActionHandler')\n get handlerFunction(): Maybe<HandleActionFunction<T, O>> {\n return this._handlerFunction.value;\n }\n\n set handlerFunction(handlerFunction: Maybe<HandleActionFunction<T, O>>) {\n this._handlerFunction.next(handlerFunction);\n }\n\n private _delegate = new WorkHandlerContextSourceDelegate<T, O>(this.source);\n\n constructor(@Host() public readonly source: ActionContextStoreSourceInstance<T, O>) {\n super();\n }\n\n ngOnInit(): void {\n this.sub = this.handlerFunction$.pipe(\n switchMap(handlerFunction => this.source.valueReady$.pipe(\n map((x: T) => ([handlerFunction, x] as [HandleActionFunction<T, O>, T])),\n tap(([handlerFunction, value]) => {\n const context = handleWorkValueReadyFn({ handlerFunction, delegate: this._delegate })(value);\n\n if (context) {\n\n // Add the action to the lockSet for the source to prevent it from being destroyed until the action completes.\n this.source.lockSet.addLock('actionhandler', context.isComplete$.pipe(map(x => !x)));\n }\n })\n ))\n ).subscribe();\n }\n\n override ngOnDestroy(): void {\n this.source.lockSet.onNextUnlock(() => {\n super.ngOnDestroy();\n });\n }\n\n}\n","import { Component, Input } from '@angular/core';\nimport { of } from 'rxjs';\nimport { delay, exhaustMap, shareReplay, startWith } from 'rxjs/operators';\nimport { ActionContextStoreSourceInstance } from '../../action.store.source';\n\n/**\n * Displays the input content when success is set.\n *\n * Can be configured to show for a limited time afterwards, etc.\n */\n@Component({\n selector: 'dbx-action-success',\n template: `\n <ng-container *ngIf=\"show$ | async\">\n <ng-content></ng-content>\n </ng-container>\n `\n})\nexport class DbNgxActionSuccessComponent {\n\n @Input()\n hideAfter?: number;\n\n readonly show$ = this.source.isSuccess$.pipe(\n exhaustMap((success) => {\n if (success) {\n if (this.hideAfter) {\n return of(false).pipe(\n delay(this.hideAfter),\n startWith(true)\n );\n } else {\n return of(true);\n }\n } else {\n return of(false);\n }\n }),\n shareReplay(1)\n );\n\n constructor(public readonly source: ActionContextStoreSourceInstance) { }\n\n}\n","import { map, tap, shareReplay, switchMap } from 'rxjs/operators';\nimport { filterMaybe } from '@dereekb/rxjs';\nimport { BehaviorSubject } from 'rxjs';\nimport { Directive, Host, Input, OnInit, OnDestroy } from '@angular/core';\nimport { Maybe } from '@dereekb/util';\nimport { AbstractSubscriptionDirective } from '../../../subscription';\nimport { ActionContextStoreSourceInstance } from '../../action.store.source';\n\n/**\n * Performs the action on success.\n */\nexport type SuccessActionFunction<O> = (value: O) => void;\n\n/**\n * Directive that executes a function on ActionContextStore Success.\n */\n@Directive({\n selector: '[dbxActionSuccess]',\n})\nexport class DbNgxActionSuccessDirective<T, O> extends AbstractSubscriptionDirective implements OnInit, OnDestroy {\n\n private _successFunction = new BehaviorSubject<Maybe<SuccessActionFunction<O>>>(undefined);\n readonly successFunction$ = this._successFunction.pipe(filterMaybe(), shareReplay(1));\n\n @Input('dbxActionSuccess')\n get successFunction(): Maybe<SuccessActionFunction<O>> {\n return this._successFunction.value;\n }\n\n set successFunction(successFunction: Maybe<SuccessActionFunction<O>>) {\n this._successFunction.next(successFunction);\n }\n\n constructor(@Host() public readonly source: ActionContextStoreSourceInstance) {\n super();\n }\n\n ngOnInit(): void {\n this.sub = this.successFunction$.pipe(\n switchMap(successFunction => this.source.success$.pipe(\n map(x => ([successFunction, x])),\n tap(([successFn, result]) => {\n successFn(result);\n })\n ))\n ).subscribe();\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this._successFunction.complete();\n }\n\n}\n","import { Directive, Host, Input, OnInit } from '@angular/core';\nimport { getValueFromObjectOrGetter, Maybe, ObjectOrGetter } from '@dereekb/util';\nimport { filterMaybe } from '@dereekb/rxjs';\nimport { BehaviorSubject } from 'rxjs';\nimport { shareReplay, switchMap, tap } from 'rxjs/operators';\nimport { AbstractSubscriptionDirective } from '../../../subscription';\nimport { ActionContextStoreSourceInstance } from '../../action.store.source';\n\n/**\n * Directive that provides a default value when triggered.\n *\n * No value is required, allowing the directive to automatically call readyValue with undefined.\n */\n@Directive({\n selector: '[dbxActionValue]',\n})\nexport class DbNgxActionValueDirective<T, O> extends AbstractSubscriptionDirective implements OnInit {\n\n private _valueOrFunction = new BehaviorSubject<Maybe<ObjectOrGetter<T>>>(undefined);\n readonly valueOrFunction$ = this._valueOrFunction.pipe(filterMaybe(), shareReplay(1));\n\n @Input('dbxActionValue')\n get valueOrFunction(): Maybe<ObjectOrGetter<T>> {\n return this._valueOrFunction.value;\n }\n\n set valueOrFunction(valueOrFunction: Maybe<ObjectOrGetter<T>>) {\n this._valueOrFunction.next(valueOrFunction);\n }\n\n constructor(@Host() public readonly source: ActionContextStoreSourceInstance<T, O>) {\n super();\n }\n\n ngOnInit(): void {\n this.sub = this.valueOrFunction$.pipe(\n switchMap(valueOrFunction => this.source.triggered$.pipe(\n tap(() => {\n const value: T = getValueFromObjectOrGetter(valueOrFunction);\n this.source.readyValue(value);\n })\n ))\n ).subscribe();\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this._valueOrFunction.complete();\n }\n\n}\n","import { Component } from '@angular/core';\nimport { ActionContextStoreSourceInstance } from '../../action.store.source';\n\n/**\n * Displays the input content when working is set.\n */\n@Component({\n selector: 'dbx-action-working',\n template: `\n <ng-container *ngIf=\"show$ | async\">\n <ng-content></ng-content>\n </ng-container>\n `\n})\nexport class DbNgxActionWorkingComponent {\n\n readonly show$ = this.source.isWorking$;\n\n constructor(public readonly source: ActionContextStoreSourceInstance) { }\n\n}\n","import { Type } from \"@angular/core\";\nimport { Maybe } from \"@dereekb/util\";\nimport ms from \"ms\";\nimport { ActionContextStoreSourceInstance } from \"../action.store.source\";\n\nexport const DEFAULT_SNACKBAR_DIRECTIVE_DURATION = ms('4s');\nexport const DEFAULT_SNACKBAR_UNDO_DIRECTIVE_DURATION = ms('30s');\n\nexport enum ActionSnackbarDefaultType {\n NONE = 'none',\n CREATE = 'create',\n SAVE = 'save',\n DELETE = 'delete',\n MERGE = 'merge',\n SEND = 'send',\n CANCEL = 'cancel',\n RESTORE = 'restore',\n REFRESH = 'refresh',\n MARK_READ = 'read',\n MARK_UNREAD = 'unread'\n}\n\nexport enum ActionSnackbarEventType {\n WORKING,\n SUCCESS,\n REJECTED\n}\n\nexport interface ActionSnackbarEvent<O = any> {\n type: ActionSnackbarEventType;\n value?: Maybe<O>;\n error?: Maybe<any>;\n}\n\nexport interface ActionSnackBarOpenConfig {\n message: string;\n action?: string;\n}\n\nexport interface ActionSnackbarPopupConfig<C = any> {\n open?: ActionSnackBarOpenConfig;\n component?: Maybe<Type<any>>;\n config?: C;\n}\n\n/**\n * Performs the action on success.\n */\nexport type ActionSnackbarFunction<O = any, C = any> = (event: ActionSnackbarEvent<O>) => ActionSnackbarPopupConfig<C>;\n\nexport interface DbNgxActionSnackbarGetUndoConfig extends Omit<DbNgxActionSnackbarComponentConfig, 'message' | 'action'>, Partial<Pick<DbNgxActionSnackbarComponentConfig, 'message' | 'action'>> {\n duration?: number; // Optional duration override for the popup to stay open.\n}\n\nexport type ActionSnackbarGetUndoConfigFunction = () => Maybe<DbNgxActionSnackbarGetUndoConfig>;\n\nexport interface DbNgxActionSnackbarComponentConfig {\n action: string;\n message?: Maybe<string>;\n actionSource: ActionContextStoreSourceInstance;\n}\n","export * from './snackbar';\n// export * from './snackbar.directive';\n","import { delay, first } from 'rxjs/operators';\nimport { ActionContextStoreSource } from './action.store.source';\nimport { HandleActionFunction, handleWorkValueReadyFn, WorkHandlerContextSourceDelegate } from './action.handler';\nimport { ActionContextBaseSource } from './action.holder';\nimport { Destroyable } from '@dereekb/util';\nimport { SubscriptionObject } from '@dereekb/rxjs';\n\nexport interface ActionContextMachineConfig<T = any, O = any> {\n /**\n * Whether or not the machine should clean itself up after being triggered.\n */\n oneTimeUse: boolean;\n handleValueReady: HandleActionFunction<T, O>;\n onSuccess?: (value: O) => void;\n}\n\n/**\n * Configurable machine that handles components of the ActionContextStore lifecycle.\n */\nexport class ActionContextMachine<T = any, O = any> extends ActionContextBaseSource<T, O> implements Destroyable {\n\n private _isShutdown = true;\n private _handleValueReadySub = new SubscriptionObject();\n\n constructor(readonly config: ActionContextMachineConfig<T, O>, source?: ActionContextStoreSource) {\n super(source);\n\n // Handle Value Ready\n this._handleValueReadySub.subscription = this.sourceInstance.valueReady$.subscribe((value) => {\n handleWorkValueReadyFn({ handlerFunction: config.handleValueReady, delegate: new WorkHandlerContextSourceDelegate<T, O>(this.sourceInstance) })(value);\n });\n\n // If this is a one-time use, then destroy it after the first success comes through.\n if (this.config.oneTimeUse) {\n this.sourceInstance.success$.pipe(first(), delay(1000)).subscribe(() => {\n this.destroy();\n });\n }\n\n if (this.config.onSuccess) {\n this.sourceInstance.success$.subscribe(this.config.onSuccess);\n }\n }\n\n override destroy(): void {\n super.destroy();\n this._handleValueReadySub.destroy();\n this._isShutdown = true;\n }\n\n get isShutdown(): boolean {\n return this._isShutdown;\n }\n\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport {\n DbNgxActionComponent, DbNgxActionContextDirective, DbNgxActionContextMapDirective, DbNgxActionFromMapDirective, DbNgxActionMapSourceDirective,\n DbNgxActionMapWorkingDisableDirective, DbNgxActionSourceDirective, DbNgxActionHandlerDirective, DbNgxActionDisabledDirective, DbNgxActionDisabledUntilModifiedDirective,\n DbNgxActionAutoTriggerDirective, DbNgxActionAutoTriggerValueDirective, DbNgxActionAutoModifyDirective, DbNgxActionValueDirective, DbNgxActionContextLoggerDirective,\n DbNgxActionSuccessComponent, DbNgxActionSuccessDirective, DbNgxActionWorkingComponent\n} from './directive';\n\n@NgModule({\n imports: [\n CommonModule\n ],\n declarations: [\n DbNgxActionComponent, DbNgxActionContextDirective, DbNgxActionContextMapDirective, DbNgxActionFromMapDirective, DbNgxActionMapSourceDirective,\n DbNgxActionMapWorkingDisableDirective, DbNgxActionSourceDirective, DbNgxActionHandlerDirective, DbNgxActionDisabledDirective, DbNgxActionDisabledUntilModifiedDirective,\n DbNgxActionAutoTriggerDirective, DbNgxActionAutoTriggerValueDirective, DbNgxActionAutoModifyDirective, DbNgxActionValueDirective, DbNgxActionContextLoggerDirective,\n DbNgxActionSuccessComponent, DbNgxActionSuccessDirective, DbNgxActionWorkingComponent\n ],\n exports: [\n DbNgxActionComponent, DbNgxActionContextDirective, DbNgxActionContextMapDirective, DbNgxActionFromMapDirective, DbNgxActionMapSourceDirective,\n DbNgxActionMapWorkingDisableDirective, DbNgxActionSourceDirective, DbNgxActionHandlerDirective, DbNgxActionDisabledDirective, DbNgxActionDisabledUntilModifiedDirective,\n DbNgxActionAutoTriggerDirective, DbNgxActionAutoTriggerValueDirective, DbNgxActionAutoModifyDirective, DbNgxActionValueDirective, DbNgxActionContextLoggerDirective,\n DbNgxActionSuccessComponent, DbNgxActionSuccessDirective, DbNgxActionWorkingComponent\n ]\n})\nexport class DbNgxCoreActionModule { }\n","import { Type, Provider } from '@angular/core';\nimport { Maybe } from '@dereekb/util';\nimport { Observable } from 'rxjs';\n\n/**\n * Used for intercepting button click events.\n *\n * Can be used to delay/modify trigger/click behaviors.\n */\nexport interface DbNgxButtonInterceptor {\n /**\n * Handles a button click event. Returns an observable that will say whether or not to continue the click event.\n */\n interceptButtonClick: () => Observable<boolean>;\n}\n\nexport abstract class DbNgxButton {\n abstract disabled$: Observable<boolean>;\n abstract working$: Observable<boolean>;\n abstract disabled: Maybe<boolean>;\n abstract working: Maybe<boolean>;\n abstract icon?: string;\n abstract text?: string;\n abstract clicked$: Observable<any>;\n abstract setButtonInterceptor(interceptor: DbNgxButtonInterceptor): void;\n abstract clickButton(): void;\n}\n\nexport function ProvideDbNgxButton<S extends DbNgxButton>(sourceType: Type<S>): Provider[] {\n return [{\n provide: DbNgxButton,\n useExisting: sourceType\n }];\n}\n","import { Directive, Host, OnInit } from '@angular/core';\nimport { AbstractSubscriptionDirective } from '../../subscription';\nimport { DbNgxButton } from '../button';\nimport { ActionContextStoreSourceInstance } from '../../action/action.store.source';\n\n/**\n * Context used for linking a button to an ActionContext and only look for triggers.\n */\n@Directive({\n selector: '[dbxActionButtonTrigger]'\n})\nexport class DbNgxActionButtonTriggerDirective extends AbstractSubscriptionDirective implements OnInit {\n\n constructor(@Host() public readonly button: DbNgxButton, public readonly source: ActionContextStoreSourceInstance) {\n super();\n }\n\n ngOnInit(): void {\n this.sub = this.button.clicked$.subscribe(() => {\n this._buttonClicked();\n });\n }\n\n protected _buttonClicked(): void {\n this.source.trigger();\n }\n\n}\n","import { Directive, Host, OnInit, OnDestroy, NgZone } from '@angular/core';\nimport { DbNgxButton } from '../button';\nimport { ActionContextStoreSourceInstance } from '../../action/action.store.source';\nimport { DbNgxActionButtonTriggerDirective } from './action.button.trigger.directive';\nimport { SubscriptionObject } from '@dereekb/rxjs';\n\n/**\n * Context used for linking a button to an ActionContext.\n */\n@Directive({\n selector: '[dbxActionButton]'\n})\nexport class DbNgxActionButtonDirective extends DbNgxActionButtonTriggerDirective implements OnInit, OnDestroy {\n\n private _workingSub = new SubscriptionObject();\n private _disabledSub = new SubscriptionObject();\n\n constructor(@Host() button: DbNgxButton, source: ActionContextStoreSourceInstance, private readonly ngZone: NgZone) {\n super(button, source);\n }\n\n override ngOnInit(): void {\n super.ngOnInit();\n\n this._workingSub.subscription = this.source.isWorking$.subscribe((working) => {\n // console.log('Working: ', working);\n this.ngZone.run(() => this.button.working = working);\n });\n\n this._disabledSub.subscription = this.source.isDisabled$.subscribe((disabled) => {\n // console.log('Disabled: ', disabled);\n this.ngZone.run(() => this.button.disabled = disabled);\n });\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this._workingSub.destroy();\n this._disabledSub.destroy();\n }\n\n}\n","import { ClickableFunction, ClickableUrl } from './clickable';\nimport { SegueRef } from '../segue';\nimport { Maybe } from '@dereekb/util';\nimport { Type, Provider } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nexport interface ClickableAnchor extends ClickableFunction, ClickableUrl, SegueRef {\n disabled?: boolean;\n}\n\nexport interface ClickableAnchorLink extends ClickableAnchor {\n title: string;\n icon?: string;\n}\n\nexport interface ClickableIconAnchorLink extends Omit<ClickableAnchorLink, 'title'> {\n icon: string;\n}\n\nexport enum AnchorType {\n None = 0,\n Clickable = 1,\n Sref = 2,\n Href = 3,\n Disabled = 4\n}\n\nexport function anchorTypeForAnchor(anchor: Maybe<ClickableAnchor>, disabled?: Maybe<boolean>): AnchorType {\n let type: AnchorType = AnchorType.Disabled;\n\n if (!disabled && anchor) {\n if (anchor.disabled) {\n type = AnchorType.Disabled;\n } else if (anchor.ref) {\n type = AnchorType.Sref;\n } else if (anchor.onClick) {\n type = AnchorType.Clickable;\n } else if (anchor.url) {\n type = AnchorType.Href;\n }\n }\n\n return type;\n}\n\nexport abstract class DbNgxAnchor<T extends ClickableAnchor = ClickableAnchor> {\n abstract disabled$: Observable<Maybe<boolean>>;\n abstract anchor$: Observable<Maybe<T>>;\n abstract disabled: Maybe<boolean>;\n abstract anchor: Maybe<T>;\n abstract type$: Observable<AnchorType>;\n}\n\nexport function ProvideDbNgxAnchor<S extends DbNgxAnchor>(sourceType: Type<S>): Provider[] {\n return [{\n provide: DbNgxAnchor,\n useExisting: sourceType\n }];\n}\n","import { filterMaybe, skipFirstMaybe } from '@dereekb/rxjs';\nimport { map, shareReplay, distinctUntilChanged } from 'rxjs/operators';\nimport { BehaviorSubject, combineLatest, Observable } from 'rxjs';\nimport { Directive, Input } from '@angular/core';\nimport { Maybe } from '@dereekb/util';\nimport { AnchorType, ClickableAnchor, anchorTypeForAnchor, DbNgxAnchor } from './anchor';\n\n/**\n * Abstract anchor directive.\n */\n@Directive()\nexport class AbstractDbNgxAnchorDirective<T extends ClickableAnchor = ClickableAnchor> implements DbNgxAnchor {\n\n private _disabled = new BehaviorSubject<Maybe<boolean>>(false);\n private _anchor = new BehaviorSubject<Maybe<T>>(undefined);\n\n readonly disabled$ = this._disabled.asObservable();\n readonly anchor$ = this._anchor.pipe(skipFirstMaybe(), distinctUntilChanged(), shareReplay(1));\n\n readonly type$: Observable<AnchorType> = combineLatest([this.disabled$, this.anchor$]).pipe(\n map(([disabled, anchor]) => anchorTypeForAnchor(anchor, disabled)),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n @Input()\n public get anchor(): Maybe<T> {\n return this._anchor.value;\n }\n\n public set anchor(anchor: Maybe<T>) {\n this._anchor.next(anchor);\n }\n\n @Input()\n public get disabled(): Maybe<boolean> {\n return this._disabled.value;\n }\n\n public set disabled(disabled: Maybe<boolean>) {\n this._disabled.next(disabled);\n }\n\n}\n","export enum DbNgxRouterTransitionEventType {\n /**\n * A transition started.\n */\n START = 'start',\n /**\n * A transition ended.\n */\n SUCCESS = 'ended'\n}\n\nexport interface DbNgxRouterTransitionEvent {\n type: DbNgxRouterTransitionEventType;\n}\n","import { filterMaybe } from '@dereekb/rxjs';\nimport { DbNgxRouterService, DbNgxRouterTransitionService } from '../../service';\nimport { SegueRef } from \"../../../segue\";\nimport { ActivatedRoute, NavigationBehaviorOptions, NavigationEnd, NavigationExtras, NavigationStart, Router } from '@angular/router';\nimport { Injectable } from \"@angular/core\";\nimport { isArray } from \"class-validator\";\nimport { DbNgxRouterTransitionEvent, DbNgxRouterTransitionEventType } from \"../../transition/transition\";\nimport { map } from \"rxjs/operators\";\nimport { Maybe } from '@dereekb/util';\n\n/**\n * AngularRouter implementation of DbNgxRouterService and DbNgxRouterTransitionService.\n */\n@Injectable()\nexport class DbNgxAngularRouterService implements DbNgxRouterService, DbNgxRouterTransitionService {\n\n readonly transitions$ = this.router.events.pipe(\n map((x) => {\n let event: Maybe<DbNgxRouterTransitionEvent>;\n\n if (x instanceof NavigationStart) {\n event = {\n type: DbNgxRouterTransitionEventType.START\n };\n } else if (x instanceof NavigationEnd) {\n event = {\n type: DbNgxRouterTransitionEventType.SUCCESS\n };\n }\n\n return event;\n }),\n filterMaybe()\n );\n\n constructor(readonly router: Router, readonly activatedRoute: ActivatedRoute) { }\n\n go(segueRef: SegueRef<NavigationExtras | NavigationBehaviorOptions>): Promise<boolean> {\n let ref = segueRef.ref;\n\n if (isArray(ref)) {\n return this.router.navigate(ref, {\n ...segueRef.refOptions,\n queryParams: segueRef.refParams\n })\n } else {\n return this.router.navigateByUrl(ref, {\n ...segueRef.refOptions\n });\n }\n }\n\n}\n","import { SegueRef } from \"../../segue\";\n\n/**\n * Router service definition that can route the app and provide routing details.\n */\nexport abstract class DbNgxRouterService {\n\n /**\n * Navigates to the target SegueRef.\n * \n * @param segueRef \n */\n abstract go(segueRef: SegueRef): Promise<boolean>;\n\n}\n","import { Observable } from 'rxjs';\nimport { DbNgxRouterTransitionEvent } from '../transition/transition';\n\n/**\n * Router service definition that provides high level information about router transitions.\n */\nexport abstract class DbNgxRouterTransitionService {\n\n /**\n * Observable that emits DbNgxRouterTransitionEvent values as transitions occur.\n */\n abstract readonly transitions$: Observable<DbNgxRouterTransitionEvent>;\n\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { DbNgxRouterService, DbNgxRouterTransitionService } from '../../service';\nimport { DbNgxAngularRouterService } from './angular.router.service';\n\n@NgModule({})\nexport class DbNgxCoreAngularRouterSegueModule {\n\n static forRoot(): ModuleWithProviders<DbNgxCoreAngularRouterSegueModule> {\n return {\n ngModule: DbNgxCoreAngularRouterSegueModule,\n providers: [\n DbNgxAngularRouterService,\n {\n provide: DbNgxRouterService,\n useExisting: DbNgxAngularRouterService\n },\n {\n provide: DbNgxRouterTransitionService,\n useExisting: DbNgxAngularRouterService\n }\n ]\n };\n }\n\n}\n","import { Subject } from 'rxjs';\nimport { DbNgxRouterService, DbNgxRouterTransitionService } from '../../service';\nimport { SegueRef } from \"../../../segue\";\nimport { StateService, UIRouterGlobals, TransitionOptions, TransitionService } from '@uirouter/core';\nimport { Injectable } from \"@angular/core\";\nimport { DbNgxRouterTransitionEvent, DbNgxRouterTransitionEventType } from '../../transition/transition';\n\n/**\n * UIRouter implementation of DbNgxRouterService and DbNgxRouterTransitionService.\n */\n@Injectable()\nexport class DbNgxUIRouterService implements DbNgxRouterService, DbNgxRouterTransitionService {\n\n private readonly _transitions = new Subject<DbNgxRouterTransitionEvent>();\n readonly transitions$ = this._transitions.asObservable();\n\n constructor(readonly state: StateService, readonly transitionService: TransitionService, readonly uiRouterGlobals: UIRouterGlobals) {\n\n const emitTransition = (type: DbNgxRouterTransitionEventType) => {\n this._transitions.next({\n type\n });\n }\n\n this.transitionService.onStart({}, () => {\n emitTransition(DbNgxRouterTransitionEventType.START);\n }) as any;\n\n this.transitionService.onSuccess({}, () => {\n emitTransition(DbNgxRouterTransitionEventType.SUCCESS);\n }) as any;\n\n }\n\n go(segueRef: SegueRef<TransitionOptions>): Promise<boolean> {\n const params = { ...this.uiRouterGlobals.current.params, ...segueRef.refParams };\n return this.state.go(segueRef.ref, params, segueRef.refOptions).then(_ => true).catch(_ => false);\n }\n\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { DbNgxRouterTransitionService } from '../../service/router.transition.service';\nimport { DbNgxRouterService } from '../../service/router.service';\nimport { DbNgxUIRouterService } from './uirouter.router.service';\n\n@NgModule({})\nexport class DbNgxCoreUIRouterSegueModule {\n\n static forRoot(): ModuleWithProviders<DbNgxCoreUIRouterSegueModule> {\n return {\n ngModule: DbNgxCoreUIRouterSegueModule,\n providers: [\n DbNgxUIRouterService,\n {\n provide: DbNgxRouterService,\n useExisting: DbNgxUIRouterService\n },\n {\n provide: DbNgxRouterTransitionService,\n useExisting: DbNgxUIRouterService\n }\n ]\n };\n }\n\n}\n","import { Directive, NgZone, OnDestroy, OnInit } from '@angular/core';\nimport { filter } from 'rxjs/operators';\nimport { DbNgxRouterTransitionEventType } from './transition';\nimport { DbNgxRouterTransitionService } from '../service/router.transition.service';\nimport { SubscriptionObject } from '@dereekb/rxjs';\n\n/**\n * Abstract directive that listens to onSuccess transition events and runs a function.\n */\n@Directive()\nexport abstract class AbstractTransitionWatcherDirective implements OnInit, OnDestroy {\n\n private _transitionSub = new SubscriptionObject();\n\n constructor(protected readonly dbNgxRouterTransitionService: DbNgxRouterTransitionService, protected readonly ngZone: NgZone) { }\n\n ngOnInit(): void {\n this._transitionSub.subscription = this.dbNgxRouterTransitionService.transitions$.pipe(\n filter(x => x.type === DbNgxRouterTransitionEventType.SUCCESS)\n ).subscribe(() => {\n this.updateForSuccessfulTransition();\n });\n }\n\n ngOnDestroy(): void {\n this._transitionSub.destroy();\n }\n\n // MARK: Action\n protected zoneUpdateForSuccessfulTransition(): void {\n this.ngZone.run(() => this.updateForSuccessfulTransition());\n }\n\n protected abstract updateForSuccessfulTransition(): void;\n\n}\n","import { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nexport type SegueRefRouterLink = string | any[] | any;\n\nexport interface SegueRefRawSegueParams {\n [key: string]: any;\n}\n\nexport interface SegueRefOptions<O = any> {\n\n /**\n * Raw parameters\n */\n refParams?: SegueRefRawSegueParams;\n\n /**\n * Custom Transition Options.\n * \n * For UIRouter, this is TransitionOptions.\n */\n refOptions?: O;\n\n}\n\n/**\n * Represents a segue ref\n */\nexport interface SegueRef<O = any> extends SegueRefOptions<O> {\n\n /**\n * UI Sref reference value.\n */\n ref?: SegueRefRouterLink;\n\n}\n\nexport function refStringToSegueRef<O = any>(ref: string, options?: SegueRefOptions<O>): SegueRef<O> {\n return { ...options, ref };\n}\n\nexport function mapRefStringObsToSegueRefObs<O = any>(obs: Observable<string>, options?: SegueRefOptions<O>): Observable<SegueRef<O>> {\n return obs.pipe(map(x => refStringToSegueRef(x, options)));\n}\n","import { filterMaybe } from '@dereekb/rxjs';\nimport { Directive, OnInit, OnDestroy, Input } from '@angular/core';\nimport { Maybe } from '@dereekb/util';\nimport { AbstractSubscriptionDirective } from '../../subscription';\nimport { shareReplay, distinctUntilChanged, switchMap, tap } from 'rxjs/operators';\nimport { DbNgxButton } from '../button';\nimport { BehaviorSubject } from 'rxjs';\nimport { SegueRef, DbNgxRouterService } from '../../router';\n\n// MARK: Button Directives\n@Directive({\n selector: '[dbxButtonSegue]'\n})\nexport class DbNgxButtonSegueDirective extends AbstractSubscriptionDirective implements OnInit, OnDestroy {\n\n private _segueRef = new BehaviorSubject<Maybe<SegueRef>>(undefined);\n readonly segueRef$ = this._segueRef.pipe(filterMaybe(), distinctUntilChanged(), shareReplay(1));\n\n @Input('dbxButtonSegue')\n get segueRef(): Maybe<SegueRef> {\n return this._segueRef.value;\n }\n\n set segueRef(segueRef: Maybe<SegueRef>) {\n this._segueRef.next(segueRef);\n }\n\n constructor(readonly dbxButton: DbNgxButton, readonly dbxRouterService: DbNgxRouterService) {\n super();\n }\n\n ngOnInit(): void {\n this.sub = this.segueRef$.pipe(\n switchMap(segueRef => this.dbxButton.clicked$.pipe(\n tap(() => {\n this.dbxRouterService.go(segueRef);\n })\n ))\n ).subscribe();\n }\n\n}\n","import { Directive, Input, Output, EventEmitter, OnDestroy, OnInit } from '@angular/core';\nimport { Maybe } from '@dereekb/util';\nimport { BehaviorSubject, of, Subject } from 'rxjs';\nimport { filter, first, switchMap } from 'rxjs/operators';\nimport { AbstractSubscriptionDirective } from '../subscription';\nimport { DbNgxButton, DbNgxButtonInterceptor, ProvideDbNgxButton } from './button';\n\n/**\n * Abstract button component.\n */\n@Directive()\nexport abstract class AbstractDbNgxButtonDirective extends AbstractSubscriptionDirective implements DbNgxButton, OnInit, OnDestroy {\n\n private _disabled = new BehaviorSubject<boolean>(false);\n private _working = new BehaviorSubject<boolean>(false);\n\n readonly disabled$ = this._disabled.asObservable();\n readonly working$ = this._working.asObservable();\n\n @Input()\n get disabled(): boolean {\n return this._disabled.value;\n }\n\n set disabled(disabled: boolean) {\n this._disabled.next(disabled);\n }\n\n @Input()\n get working(): boolean {\n return this._working.value;\n }\n\n set working(working: boolean) {\n this._working.next(working);\n }\n\n @Input()\n icon?: string;\n\n @Input()\n text?: string;\n\n @Output()\n readonly buttonClick = new EventEmitter();\n\n readonly clicked$ = this.buttonClick.asObservable();\n\n constructor() {\n super();\n }\n\n /**\n * Pre-interceptor button click.\n */\n protected _buttonClick = new Subject<void>();\n protected _buttonInterceptor = new BehaviorSubject<Maybe<DbNgxButtonInterceptor>>(undefined);\n\n ngOnInit(): void {\n this.sub = this._buttonClick.pipe(\n switchMap(() => this._buttonInterceptor.pipe(\n switchMap((x) => {\n if (x) {\n return x.interceptButtonClick().pipe(\n first()\n );\n } else {\n return of(true);\n }\n }),\n filter((x) => Boolean(x)) // Ignore false values.\n ))\n ).subscribe(() => {\n this._forceButtonClicked();\n });\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this._disabled.complete();\n this._working.complete();\n this._buttonClick.complete();\n this._buttonInterceptor.complete();\n }\n\n /**\n * Sets the button interceptor. If any interceptor is already set, it is replaced.\n */\n public setButtonInterceptor(interceptor: DbNgxButtonInterceptor): void {\n this._buttonInterceptor.next(interceptor);\n }\n\n /**\n * Main function to use for handling clicks on the button.\n */\n public clickButton(): void {\n if (!this.disabled) {\n this._buttonClick.next();\n }\n }\n\n /**\n * Forces a button click. Skips the interceptors if any are configured.\n */\n protected _forceButtonClicked(): void {\n this.buttonClick.emit();\n }\n\n}\n\n// MARK: Implementation\n/**\n * Provides an DbNgxButton directive.\n */\n@Directive({\n selector: '[dbxButton]',\n exportAs: 'dbxButton',\n providers: ProvideDbNgxButton(DbNgxButtonDirective)\n})\nexport class DbNgxButtonDirective extends AbstractDbNgxButtonDirective { }\n","import { Directive, Host, Input, NgZone } from '@angular/core';\nimport { LoadingContext } from '@dereekb/rxjs';\nimport { AbstractSubscriptionDirective } from '../subscription';\nimport { DbNgxButton } from './button';\n\n/**\n * Context used for linking a button to a LoadingContext.\n *\n * It will be set working when the context is set loading.\n */\n@Directive({\n selector: '[dbxLoadingButton]'\n})\nexport class DbNgxLoadingButtonDirective extends AbstractSubscriptionDirective {\n\n constructor(@Host() public readonly button: DbNgxButton, readonly ngZone: NgZone) {\n super();\n }\n\n /**\n * Sets a LoadingContext that is watched for the loading state.\n */\n @Input('dbxLoadingButton')\n set context(context: LoadingContext) {\n let subscription;\n\n if (context) {\n subscription = context.stream$.subscribe((x) => {\n this.ngZone.run(() => this.button.working = x.loading);\n });\n }\n\n this.sub = subscription;\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { DbNgxActionButtonTriggerDirective, DbNgxActionButtonDirective } from './action';\nimport { DbNgxButtonDirective } from './button.directive';\nimport { DbNgxLoadingButtonDirective } from './button.loading.directive';\nimport { DbNgxButtonSegueDirective } from './router/button.segue.directive';\n\n@NgModule({\n imports: [],\n declarations: [\n DbNgxButtonDirective,\n DbNgxLoadingButtonDirective,\n DbNgxActionButtonTriggerDirective,\n DbNgxActionButtonDirective,\n DbNgxButtonSegueDirective\n ],\n exports: [\n DbNgxButtonDirective,\n DbNgxLoadingButtonDirective,\n DbNgxActionButtonTriggerDirective,\n DbNgxActionButtonDirective,\n DbNgxButtonSegueDirective\n ],\n})\nexport class DbNgxCoreButtonModule { }\n","import { addMinutes } from 'date-fns';\nimport { Pipe, PipeTransform, Inject, LOCALE_ID } from '@angular/core';\nimport { formatDate } from '@angular/common';\nimport { Maybe, DateOrDateString } from '@dereekb/util';\nimport { formatToTimeString, toJsDate } from '@dereekb/date';\n\n/**\n * Pipe that takes in a date and number of minutes and outputs a formatted date.\n */\n@Pipe({ name: 'dateFromPlusTo' })\nexport class DateFromToTimePipe implements PipeTransform {\n\n constructor(@Inject(LOCALE_ID) private locale: string) { }\n\n transform(input: Maybe<DateOrDateString>, format: string, minutes: number): Maybe<string> {\n return DateFromToTimePipe.formatFromTo(input, format, minutes, this.locale);\n }\n\n static formatFromTo(input: Maybe<DateOrDateString>, format: string, minutes: number, locale: string): Maybe<string> {\n if (input) {\n const date = toJsDate(input);\n const endDate = addMinutes(date, minutes);\n const dateString = formatDate(date, format, locale);\n return dateString + ' - ' + formatToTimeString(endDate);\n }\n\n return undefined;\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Maybe } from '@dereekb/util';\n\n@Pipe({ name: 'minutesString', pure: false })\nexport class MinutesStringPipe implements PipeTransform {\n\n transform(input: Maybe<number | string>): Maybe<string> {\n const minutes = Number(input);\n\n if (input != null && !isNaN(minutes)) {\n if (minutes > 3600) {\n const unrounded = minutes / 3600;\n const days = Math.ceil(unrounded);\n return ((unrounded !== days) ? '~' : '') + days + ' days';\n } else if (minutes > 180) {\n const unrounded = minutes / 60;\n const hours = Math.ceil(unrounded);\n return ((unrounded !== hours) ? '~' : '') + hours + ' hours';\n } else {\n return minutes + ' minutes';\n }\n } else {\n return undefined;\n }\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { toJsDate } from '@dereekb/date';\nimport { DateOrDateString, Maybe } from '@dereekb/util';\n\n@Pipe({ name: 'toJsDate' })\nexport class ToJsDatePipe implements PipeTransform {\n\n public static toJsDate(input: Maybe<DateOrDateString>): Maybe<Date> {\n return (input) ? toJsDate(input) : undefined;\n }\n\n transform(input: Maybe<DateOrDateString>): Maybe<Date> {\n return ToJsDatePipe.toJsDate(input);\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Maybe, DateOrDateString } from '@dereekb/util';\nimport { formatDistance, isPast } from 'date-fns';\nimport { ToJsDatePipe } from './tojsdate.pipe';\n\n@Pipe({ name: 'timeCountdownDistance', pure: false })\nexport class TimeDistanceCountdownPipe implements PipeTransform {\n\n transform(input: Maybe<DateOrDateString>, soonString: string = 'Soon', unavailable: string = 'Not Available'): string {\n if (input) {\n const from = ToJsDatePipe.toJsDate(input)!;\n\n if (isPast(from)) {\n return soonString;\n } else {\n const to = new Date();\n return formatDistance(from, to, {\n addSuffix: true\n });\n }\n } else {\n return unavailable;\n }\n }\n\n}\n\n@Pipe({ name: 'timeDistance', pure: false })\nexport class TimeDistancePipe implements PipeTransform {\n\n transform(input: Maybe<DateOrDateString>, to: Date = new Date(), unavailable: string = 'Not Available'): string {\n if (input) {\n const from = ToJsDatePipe.toJsDate(input)!;\n return formatDistance(from, to, {\n addSuffix: true\n });\n } else {\n return unavailable;\n }\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ name: 'toMinutes' })\nexport class ToMinutesPipe implements PipeTransform {\n\n transform(milliseconds: number): number {\n if (milliseconds) {\n return Math.floor(milliseconds / (60 * 1000));\n }\n\n return milliseconds;\n }\n\n}\n","import { Pipe, PipeTransform, Inject, LOCALE_ID } from '@angular/core';\nimport { formatDate } from '@angular/common';\nimport { formatDistanceToNow, isValid } from 'date-fns';\nimport { DateOrDateString, Maybe } from '@dereekb/util';\nimport { toJsDate } from '@dereekb/date';\n\n/**\n * Pipe that takes in a date and appends the distance to it in parenthesis.\n */\n@Pipe({ name: 'dateFormatDistance', pure: false })\nexport class DateFormatDistancePipe implements PipeTransform {\n\n constructor(@Inject(LOCALE_ID) private locale: string) { }\n\n transform(input: Maybe<DateOrDateString>, format: string, includeSeconds = false): Maybe<string> {\n if (input) {\n const date = toJsDate(input)!;\n\n if (isValid(date)) {\n\n const dateString = formatDate(date, format, this.locale);\n\n const distance = formatDistanceToNow(date, {\n includeSeconds,\n addSuffix: true\n });\n\n return `${dateString} (${distance})`;\n }\n }\n\n return undefined;\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { formatDistance, isPast, isSameDay, startOfDay } from 'date-fns';\nimport { DateOrDateString } from '@dereekb/util';\nimport { ToJsDatePipe } from './tojsdate.pipe';\n\n@Pipe({ name: 'dateDistance', pure: false })\nexport class DateDistancePipe implements PipeTransform {\n\n transform(input: DateOrDateString | undefined, to: Date, unavailable: string = 'Not Available'): string {\n if (input) {\n const defaultTo = !to;\n\n if (defaultTo) {\n to = new Date();\n }\n\n const from = ToJsDatePipe.toJsDate(input)!;\n\n const fromStart = startOfDay(from);\n const toStart = startOfDay(to);\n\n if (isSameDay(fromStart, toStart)) {\n let text;\n\n if (defaultTo || isSameDay(from, new Date())) {\n text = 'Today';\n } else {\n text = 'Same Day';\n }\n\n return text;\n } else {\n return formatDistance(fromStart, toStart, {\n addSuffix: true\n });\n }\n } else {\n return unavailable;\n }\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { DateFromToTimePipe } from './datefromtoformat.pipe';\nimport { MinutesStringPipe } from './minutesstring.pipe';\nimport { TimeDistanceCountdownPipe, TimeDistancePipe } from './timedistance.pipe';\nimport { ToJsDatePipe } from './tojsdate.pipe';\nimport { ToMinutesPipe } from './tominutes.pipe';\nimport { DateFormatDistancePipe } from './dateformatdistance.pipe';\nimport { DateDistancePipe } from './datedistance.pipe';\n\n@NgModule({\n exports: [\n DateFromToTimePipe,\n DateFormatDistancePipe,\n MinutesStringPipe,\n TimeDistanceCountdownPipe,\n TimeDistancePipe,\n DateDistancePipe,\n ToJsDatePipe,\n ToMinutesPipe\n ],\n declarations: [\n DateFromToTimePipe,\n DateFormatDistancePipe,\n MinutesStringPipe,\n TimeDistanceCountdownPipe,\n TimeDistancePipe,\n DateDistancePipe,\n ToJsDatePipe,\n ToMinutesPipe\n ]\n})\nexport class DbNgxDatePipeModule { }\n","import { ComponentRef, ViewContainerRef } from '@angular/core';\nimport { distinctUntilChanged, map, shareReplay } from 'rxjs/operators';\nimport { BehaviorSubject, combineLatest } from 'rxjs';\nimport { DbNgxInjectedComponentConfig, DbNgxInjectedTemplateConfig } from './injected';\nimport { Initialized, Destroyable, Maybe } from '@dereekb/util';\nimport { SubscriptionObject, filterMaybe, skipFirstMaybe } from '@dereekb/rxjs';\n\n/**\n * Instance used by components to inject content based on the configuration into the view.\n */\nexport class DbNgxInjectedComponentInstance<T> implements Initialized, Destroyable {\n\n private _subscriptionObject = new SubscriptionObject();\n\n private _config = new BehaviorSubject<Maybe<DbNgxInjectedComponentConfig<T>>>(undefined);\n private _template = new BehaviorSubject<Maybe<DbNgxInjectedTemplateConfig<T>>>(undefined);\n\n private _content = new BehaviorSubject<Maybe<ViewContainerRef>>(undefined);\n private _componentRef = new BehaviorSubject<Maybe<ComponentRef<T>>>(undefined);\n\n readonly config$ = this._config.pipe(distinctUntilChanged());\n readonly template$ = this._template.pipe(distinctUntilChanged());\n readonly content$ = this._content.pipe(filterMaybe(), distinctUntilChanged(), shareReplay(1));\n\n get config(): Maybe<DbNgxInjectedComponentConfig<T>> {\n return this._config.value;\n }\n\n set config(config: Maybe<DbNgxInjectedComponentConfig<T>>) {\n this._config.next(config);\n }\n\n get template(): Maybe<DbNgxInjectedTemplateConfig<T>> {\n return this._template.value;\n }\n\n set template(template: Maybe<DbNgxInjectedTemplateConfig<T>>) {\n this._template.next(template);\n }\n\n get content(): Maybe<Maybe<ViewContainerRef>> {\n return this._content.value;\n }\n\n set content(content: Maybe<Maybe<ViewContainerRef>>) {\n this._content.next(content);\n }\n\n get componentRef(): Maybe<ComponentRef<T>> {\n return this._componentRef.value;\n }\n\n set componentRef(componentRef: Maybe<ComponentRef<T>>) {\n this._componentRef.next(componentRef);\n }\n\n init(): void {\n\n // Wait until the first of either of the two inputs comes in as not defined, and then emit.\n // We filter the first maybe here between the two items.\n const configTemplateObs = combineLatest([this.config$, this.template$]).pipe(\n map(([config, template]) => {\n if (config || template) {\n return {\n config,\n template\n };\n } else {\n return undefined;\n }\n }),\n skipFirstMaybe()\n );\n\n this._subscriptionObject.subscription = combineLatest([configTemplateObs, this.content$]).subscribe(([inputConfig, content]) => {\n const { config, template } = inputConfig ?? {};\n this._reset(content);\n\n if (config) {\n this._initComponent(config, content);\n } else if (template) {\n this._initTemplate(template, content);\n }\n });\n }\n\n destroy(): void {\n this._config.complete();\n this._template.complete();\n this._content.complete();\n this._componentRef.complete();\n }\n\n private _initComponent(config: DbNgxInjectedComponentConfig<T>, content: ViewContainerRef): void {\n content.clear();\n\n const { init, injector, componentClass } = config;\n\n const componentRef: ComponentRef<T> = content.createComponent(componentClass, { injector });\n\n const instance = componentRef.instance;\n\n if (init) {\n init(instance);\n }\n\n this.componentRef = componentRef;\n }\n\n private _initTemplate(config: DbNgxInjectedTemplateConfig<T>, content: ViewContainerRef): void {\n content.clear();\n\n const { templateRef, viewRef } = config;\n\n if (templateRef) {\n content.createEmbeddedView(templateRef);\n\n // TODO: Figure out if these items need to be destroyed or not when this item is destroyed. If so, we need a reference to destroy.\n\n } else if (viewRef) {\n content.insert(viewRef)\n }\n }\n\n private _reset(content: ViewContainerRef): void {\n if (this.componentRef) {\n content.clear();\n this.componentRef = undefined;\n }\n }\n\n}\n","import { ViewContainerRef, OnInit, OnDestroy, Directive } from '@angular/core';\nimport { Maybe } from '@dereekb/util';\nimport { DbNgxInjectedComponentConfig, DbNgxInjectedTemplateConfig } from './injected';\nimport { DbNgxInjectedComponentInstance } from './injected.instance';\n\n/**\n * Abstract directive that injects content based on the configuration into the view.\n */\n@Directive()\nexport abstract class AbstractDbNgxInjectedDirective<T> implements OnInit, OnDestroy {\n\n private _instance = new DbNgxInjectedComponentInstance<T>();\n\n ngOnInit(): void {\n this._instance.init();\n }\n\n ngOnDestroy(): void {\n this._instance.destroy();\n }\n\n setConfig(config: Maybe<DbNgxInjectedComponentConfig>) {\n this._instance.config = config;\n }\n\n setTemplate(template: Maybe<DbNgxInjectedTemplateConfig>) {\n this._instance.template = template;\n }\n\n setContent(content: Maybe<ViewContainerRef>) {\n this._instance.content = content;\n }\n\n}\n","import { Component, ViewChild, ViewContainerRef, Input } from '@angular/core';\nimport { DbNgxInjectedComponentConfig, DbNgxInjectedTemplateConfig } from './injected';\nimport { AbstractDbNgxInjectedDirective } from './injected.directive';\nimport { Maybe } from '@dereekb/util';\n\n/**\n * Component that injects content based on the configuration into the view.\n */\n@Component({\n selector: 'dbx-injected-content, [dbx-injected-content]',\n template: `<ng-template #content></ng-template>`\n})\nexport class DbNgxInjectedComponent<T> extends AbstractDbNgxInjectedDirective<T> {\n\n @Input()\n set config(config: Maybe<DbNgxInjectedComponentConfig<T>>) {\n this.setConfig(config);\n }\n\n @Input()\n set template(template: Maybe<DbNgxInjectedTemplateConfig<T>>) {\n this.setTemplate(template);\n }\n\n @ViewChild('content', { static: true, read: ViewContainerRef })\n set content(content: Maybe<ViewContainerRef>) {\n this.setContent(content);\n }\n\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { DbNgxInjectedComponent } from './injected.component';\n\n@NgModule({\n imports: [\n CommonModule\n ],\n declarations: [\n DbNgxInjectedComponent\n ],\n exports: [\n DbNgxInjectedComponent\n ],\n})\nexport class DbNgxInjectedComponentModule { }\n","import { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { timeNumberHasExpired, unixTimeNumberForNow } from '@dereekb/date';\nimport { filterMaybeValuesFn, DataDoesNotExistError, DataIsExpiredError, ReadStoredData, StoredData, StoredDataStorageKey, StoredDataString, Maybe } from '@dereekb/util';\nimport { StorageAccessor } from './storage.accessor';\n\n// MARK: SimpleStorageAccessor\nexport interface SimpleStorageAccessorConverter<T> {\n /**\n * Converts the input value to a string.\n */\n stringifyValue(value: T): StoredDataString;\n /**\n * Converts the data string into a value.\n */\n parseValue(data: StoredDataString): T;\n}\n\n/**\n * SimpleStorageAccessor delegate.\n */\nexport interface SimpleStorageAccessorDelegate<T> extends SimpleStorageAccessorConverter<T>, StorageAccessor<StoredDataString> {\n\n\n}\n\nexport class StringifySimpleStorageAccessorConverter<T> implements SimpleStorageAccessorConverter<T> {\n\n stringifyValue(value: T): StoredDataString {\n return JSON.stringify(value);\n }\n\n parseValue(data: StoredDataString): T {\n return JSON.parse(data);\n }\n\n}\n\nexport class WrapperSimpleStorageAccessorDelegate<T> implements SimpleStorageAccessorDelegate<T> {\n\n constructor(\n private _delegate: StorageAccessor<StoredDataString>,\n private _converter: SimpleStorageAccessorConverter<T>\n ) { }\n\n get(key: string): Observable<Maybe<StoredDataString>> {\n return this._delegate.get(key);\n }\n\n set(key: string, value: StoredDataString): Observable<void> {\n return this._delegate.set(key, value);\n }\n\n remove(key: string): Observable<void> {\n return this._delegate.remove(key);\n }\n\n clear(): Observable<{}> {\n return this._delegate.clear();\n }\n\n all(prefix?: string): Observable<string[]> {\n return this._delegate.all(prefix);\n }\n\n allKeys(prefix?: string): Observable<string[]> {\n return this._delegate.allKeys(prefix);\n }\n\n stringifyValue(value: T): StoredDataString {\n return this._converter.stringifyValue(value);\n }\n\n parseValue(data: StoredDataString): T {\n return this._converter.parseValue(data);\n }\n\n}\n\nexport interface SimpleStorageAccessorConfig {\n /**\n * Storage Key Prefix\n */\n readonly prefix: string;\n /**\n * Optional prefix/value splitter.\n */\n readonly prefixSplitter?: string;\n /**\n * Number in milliseconds that objects stored will expire in.\n */\n readonly expiresIn?: number;\n}\n\n/**\n * LimitedStorageAccessor implementation that uses a Delegate\n */\nexport class SimpleStorageAccessor<T> implements StorageAccessor<T> {\n\n static readonly PREFIX_SPLITTER = '::';\n\n protected readonly _config: SimpleStorageAccessorConfig & {\n fullPrefix: string;\n };\n\n constructor(private readonly _delegate: SimpleStorageAccessorDelegate<T>, config: SimpleStorageAccessorConfig) {\n const prefix = config.prefix;\n const prefixSplitter = config.prefixSplitter ?? SimpleStorageAccessor.PREFIX_SPLITTER;\n\n this.assertValidStorageKeyPrefix(prefix, prefixSplitter);\n\n const fullPrefix = `${prefix}${prefixSplitter}`;\n this._config = {\n ...config,\n prefixSplitter,\n fullPrefix\n };\n }\n\n // MARK: LimitedStorageAccessor\n get(inputKey: string): Observable<T> {\n const storeKey = this.makeStorageKey(inputKey);\n return this._delegate.get(storeKey).pipe(\n map((storedData: Maybe<string>) => {\n if (storedData) {\n const readStoredData = this.readStoredData(storedData);\n\n if (!readStoredData.expired) {\n return readStoredData.convertedData;\n } else {\n throw new DataIsExpiredError<T>(readStoredData);\n }\n } else {\n throw new DataDoesNotExistError();\n }\n })\n );\n }\n\n set(inputKey: string, inputValue: T): Observable<void> {\n const storeKey = this.makeStorageKey(inputKey);\n const storeData: StoredData = this.buildStoredData(inputValue);\n const data = JSON.stringify(storeData);\n return this._delegate.set(storeKey, data);\n }\n\n remove(key: string): Observable<void> {\n const storeKey = this.makeStorageKey(key);\n return this._delegate.remove(storeKey);\n }\n\n all(): Observable<T[]> {\n return this._delegate.all(this._config.fullPrefix).pipe(\n map((allStoredData) => {\n return allStoredData.map((storedData) => {\n const readStoredData = this.readStoredData(storedData);\n\n if (!readStoredData.expired) {\n return readStoredData.convertedData;\n } else {\n return null;\n }\n }).filter(filterMaybeValuesFn)\n })\n );\n }\n\n allKeys(): Observable<string[]> {\n return this._delegate.allKeys(this._config.fullPrefix).pipe(\n map((keys) => keys.map(x => this.decodeStorageKey(x)))\n );\n }\n\n clear(): Observable<{}> {\n return this._delegate.clear();\n }\n\n // MARK: Stored Values\n protected readStoredData(storedDataString: StoredDataString): ReadStoredData<T> {\n const storedData: StoredData = JSON.parse(storedDataString);\n const expired = this.isExpiredStoredData(storedData);\n const convertedData = this._delegate.parseValue(storedData.data);\n\n return {\n ...storedData,\n expired,\n convertedData\n };\n }\n\n protected buildStoredData(value: T): StoredData {\n return {\n storedAt: unixTimeNumberForNow(),\n data: this.stringifyValue(value)\n };\n }\n\n protected isExpiredStoredData(storeData: StoredData): boolean {\n const expiresIn = this._config.expiresIn;\n if (expiresIn) {\n if (storeData.storedAt) {\n return timeNumberHasExpired(storeData.storedAt, expiresIn);\n }\n\n return true;\n } else {\n return false;\n }\n }\n\n // MARK: Internal\n protected assertValidStorageKeyPrefix(prefix: string, prefixSplitter: string): void {\n if (!prefixSplitter) {\n throw new Error('Invalid storage key prefix splitter. Must be defined and not empty.');\n }\n\n if (!this.isValidStorageKeyPrefix(prefix, prefixSplitter)) {\n throw new Error('Invalid storage key prefix.');\n }\n }\n\n protected isValidStorageKeyPrefix(prefix: string, prefixSpltter: string): boolean {\n return Boolean(prefix && prefix.indexOf(prefixSpltter) === -1);\n }\n\n protected makeStorageKey(key: string): StoredDataStorageKey {\n return `${this._config.prefix}${this._config.prefixSplitter}${String(key)}`;\n }\n\n protected isKeyOfAccessor(storageKey: StoredDataStorageKey): boolean {\n return storageKey.startsWith(this._config.fullPrefix);\n }\n\n protected decodeStorageKey(storageKey: StoredDataStorageKey): string {\n const split = storageKey.split(this._config.prefixSplitter!, 2);\n return split[1];\n }\n\n protected stringifyValue(value: T): string {\n return this._delegate.stringifyValue(value);\n }\n\n}\n","import { Observable } from 'rxjs';\nimport { map, shareReplay } from 'rxjs/operators';\nimport { StorageAccessor } from './storage.accessor';\nimport { StoredDataString, FullStorageObject, StorageObjectUtility, Maybe } from '@dereekb/util';\n\n/**\n * Simple StorageAccessor implementation that wraps a FullStorageObject.\n */\nexport class StringStorageAccessor implements StorageAccessor<StoredDataString> {\n\n constructor(private readonly _storage: FullStorageObject) { }\n\n get(key: string): Observable<Maybe<StoredDataString>> {\n return new Observable((x) => {\n const value = this._storage.getItem(key);\n x.next(value);\n x.complete();\n });\n }\n\n set(key: string, value: StoredDataString): Observable<void> {\n return new Observable<void>((x) => {\n this._storage.setItem(key, value);\n x.next();\n x.complete();\n });\n }\n\n remove(key: string): Observable<void> {\n return new Observable<void>((x) => {\n this._storage.removeItem(key);\n x.next();\n x.complete();\n });\n }\n\n clear(): Observable<StoredDataString[]> {\n const removed = this._storage.removeAll();\n return new Observable((x) => {\n x.next(removed);\n x.complete();\n });\n }\n\n all(): Observable<StoredDataString[]> {\n return this.allKeys().pipe(\n map(x => x.map(y => this._storage.getItem(y)!)),\n shareReplay(1)\n );\n }\n\n allKeys(): Observable<string[]> {\n return new Observable((x) => {\n const result = StorageObjectUtility.allKeysFromStorageObject(this._storage);\n x.next(result);\n x.complete();\n });\n }\n\n}\n","import { InjectionToken } from '@angular/core';\n\nexport const DEFAULT_STORAGE_OBJECT_TOKEN = new InjectionToken('DEFAULT_STORAGE_OBJECT');\nexport const DEFAULT_STORAGE_ACCESSOR_FACTORY_TOKEN = new InjectionToken('DEFAULT_STORAGE_ACCESSOR_FACTORY');\n","import { Inject, Injectable } from '@angular/core';\nimport { StorageAccessor } from './storage.accessor';\nimport { SimpleStorageAccessorConfig, SimpleStorageAccessor, SimpleStorageAccessorConverter, StringifySimpleStorageAccessorConverter, WrapperSimpleStorageAccessorDelegate } from './storage.accessor.simple';\nimport { StringStorageAccessor } from './storage.accessor.string';\nimport { DEFAULT_STORAGE_OBJECT_TOKEN } from './storage.di';\nimport { FullStorageObject, StoredDataString } from '@dereekb/util';\n\nexport interface StorageAccessorFactoryConfig<T> extends SimpleStorageAccessorConfig {\n storage?: StorageAccessor<StoredDataString>;\n converter?: SimpleStorageAccessorConverter<T>;\n}\n\n/**\n * Used for building SimpleStorageAccessor instances from SimpleStorageAccessorConfig.\n */\n@Injectable()\nexport class SimpleStorageAccessorFactory {\n\n constructor(@Inject(DEFAULT_STORAGE_OBJECT_TOKEN) readonly storageObject: FullStorageObject) { }\n\n createStorageAccessor<T>(config: StorageAccessorFactoryConfig<T>): SimpleStorageAccessor<T> {\n const storage = config.storage ?? new StringStorageAccessor(this.storageObject);\n const converter = config.converter ?? new StringifySimpleStorageAccessorConverter<T>();\n const delegate = new WrapperSimpleStorageAccessorDelegate<T>(storage, converter);\n\n const accessorConfig = {\n prefix: config.prefix\n };\n\n return new SimpleStorageAccessor<T>(delegate, accessorConfig);\n }\n\n}\n","import { Maybe } from '@dereekb/util';\nimport { Observable } from 'rxjs';\n\n/**\n * Stored object accessor that can get/set/remove via a key, or be cleared entirely.\n */\nexport abstract class LimitedStorageAccessor<T> {\n\n /**\n * Attempts to get the value. Throws a DataDoesNotExistError if not available.\n */\n abstract get(key: string): Observable<Maybe<T>>;\n\n abstract set(key: string, value: Maybe<T>): Observable<void>;\n\n abstract remove(key: string): Observable<void>;\n\n abstract clear(): Observable<{}>;\n\n}\n\n/**\n * LimitedStorageAccessor extension that has knowledge of all stored keys.\n */\nexport abstract class StorageAccessor<T> extends LimitedStorageAccessor<T> {\n\n /**\n * Returns all values. Filtered by keys of a given prefix.\n */\n abstract all(prefix?: string): Observable<T[]>;\n\n /**\n * Returns all keys. Filtered by keys of a given prefix.\n */\n abstract allKeys(prefix?: string): Observable<string[]>;\n\n}\n\n/**\n * StorageAccessor-like object that has immediate/synchronous functionality for get/set.\n */\nexport abstract class InstantStorageAccessor<T> {\n\n abstract getNow(key: string): T | undefined;\n\n abstract setNow(key: string, value: T): void;\n\n abstract removeNow(key: string): void;\n\n}\n","import { FullStorageObject, Maybe, StorageObject, StorageObjectUtility, StoredDataStorageKey } from '@dereekb/util';\n\n/**\n * StorageObject using LocalStorage.\n */\nexport class FullLocalStorageObject implements FullStorageObject {\n\n constructor(private _localStorage: StorageObject) { }\n\n get isPersistant(): boolean {\n return true;\n }\n\n get isAvailable(): boolean {\n const test = '_T_E_S_T_';\n\n try {\n // Tests setting and removing an item. These will throw an\n // exception if the localstorage is not available\n this._localStorage.setItem(test, test);\n this._localStorage.removeItem(test);\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get length(): number {\n return this._localStorage.length;\n }\n\n getItem(key: StoredDataStorageKey): Maybe<string> {\n return this._localStorage.getItem(key);\n }\n\n setItem(key: StoredDataStorageKey, item: string): void {\n this._localStorage.setItem(key, item);\n }\n\n removeItem(key: StoredDataStorageKey): void {\n this._localStorage.removeItem(key);\n }\n\n key(index: number): string | null {\n return this._localStorage.key(index);\n }\n\n removeAll(): string[] {\n const keys = StorageObjectUtility.allKeysFromStorageObject(this);\n keys.forEach(x => this.removeItem(x));\n return keys;\n }\n\n}\n","import { SHARED_MEMORY_STORAGE } from '@dereekb/util';\nimport { FullLocalStorageObject } from './storage.object.localstorage';\n\n/**\n * FullStorageObject implementation that uses a localstorage that entirely resides in memory.\n */\nexport class MemoryStorageObject extends FullLocalStorageObject {\n\n get isLastingStorage(): boolean {\n return false;\n }\n\n override get isAvailable(): boolean {\n return true;\n }\n\n constructor() {\n super(SHARED_MEMORY_STORAGE);\n }\n\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { FullStorageObject } from '@dereekb/util';\nimport { SimpleStorageAccessorFactory } from './storage.accessor.simple.factory';\nimport { DEFAULT_STORAGE_OBJECT_TOKEN, DEFAULT_STORAGE_ACCESSOR_FACTORY_TOKEN } from './storage.di';\nimport { FullLocalStorageObject } from './storage.object.localstorage';\nimport { MemoryStorageObject } from './storage.object.memory';\n\nexport function defaultStorageObjectFactory(): FullStorageObject {\n let storageObject: FullStorageObject = new FullLocalStorageObject(localStorage);\n\n if (!storageObject.isAvailable) {\n storageObject = new MemoryStorageObject();\n }\n\n return storageObject;\n}\n\n@NgModule()\nexport class AppStorageModule {\n\n static forRoot(): ModuleWithProviders<AppStorageModule> {\n return {\n ngModule: AppStorageModule,\n providers: [{\n provide: DEFAULT_STORAGE_OBJECT_TOKEN,\n useFactory: defaultStorageObjectFactory\n }, {\n provide: DEFAULT_STORAGE_ACCESSOR_FACTORY_TOKEN,\n useClass: SimpleStorageAccessorFactory\n }, {\n provide: SimpleStorageAccessorFactory,\n useExisting: DEFAULT_STORAGE_ACCESSOR_FACTORY_TOKEN\n }]\n };\n }\n\n}\n","import { ChangeDetectorRef, ViewRef, ElementRef } from \"@angular/core\";\nimport { Maybe } from \"@dereekb/util\";\n\n/**\n * Triggers a detection change on the input view as long as the view has not been destroyed.\n * \n * @param cdRef \n */\nexport function safeDetectChanges(cdRef: ChangeDetectorRef): void {\n if (!(cdRef as ViewRef).destroyed) {\n cdRef.detectChanges();\n }\n}\n\n/**\n * Used to check an injected ElementRef that wraps an ng-content injection point whether or not any content was injected,\n * or more specifically if the parent component passed any target content to the child. This will still return true if\n * passed content is empty.\n *\n * TS:\n * @ViewChild('customLoading', { static: false }) customCustom: ElementRef;\n *\n * HTML:\n * <div #customContent>\n * <ng-content select=\"[content]\"></ng-content>\n * </div>\n */\nexport function checkNgContentWrapperHasContent(ref: Maybe<ElementRef<Element>>): boolean {\n // https://github.com/angular/angular/issues/26083\n let hasContent = false;\n\n if (ref != null) {\n const childNodes = ref.nativeElement.childNodes;\n const hasChildNodes = childNodes && childNodes.length > 0;\n hasContent = Boolean(hasChildNodes);\n }\n\n return hasContent;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|