@alauda-fe/common
Version:
Alauda frontend team common codes.
47 lines • 4.7 kB
JavaScript
import { inject, Injectable, InjectionToken } from '@angular/core';
import { BehaviorSubject } from 'rxjs';
import { publishRef } from '../utils/public-api';
import * as i0 from "@angular/core";
/**
* 用于跨组件共享状态
*
* 使用示例:
* providers: [{
* provide: CONTEXT_INIT_VALUE_TOKEN,
* useValue: LOG_TIMESTAMP_RANGES[1]
* }, {
* provide: ContextService, // 可以通过不同的token隔离状态或使用具有语意的token来提高可读性等
* useClass: ContextService,
* }],
*
* 与业务无关,简单、纯粹,所以你可以在业务中实现多状态共享,例如
* this.contextService.set({
* ...this.contextService.get(),
* step: 2
* });
*/
export const CONTEXT_INIT_VALUE_TOKEN = new InjectionToken('CONTEXT_INIT_VALUE_TOKEN');
export class ContextService {
constructor() {
this.initValue = inject(CONTEXT_INIT_VALUE_TOKEN, { optional: true });
this.value$$ = new BehaviorSubject(this.initValue);
this.value$ = this.value$$
.asObservable()
.pipe(publishRef());
}
set(value) {
this.value$$.next(value);
}
get() {
return this.value$$.getValue();
}
reset() {
this.set(this.initValue);
}
static { this.ɵfac = function ContextService_Factory(t) { return new (t || ContextService)(); }; }
static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: ContextService, factory: ContextService.ɵfac }); }
}
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ContextService, [{
type: Injectable
}], null, null); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vc3JjL2NvcmUvc2VydmljZXMvY29udGV4dC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBRW5ELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7QUFFakQ7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHO0FBRUgsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxjQUFjLENBQ3hELDBCQUEwQixDQUMzQixDQUFDO0FBR0YsTUFBTSxPQUFPLGNBQWM7SUFEM0I7UUFFVSxjQUFTLEdBQUcsTUFBTSxDQUFJLHdCQUF3QixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDM0QsWUFBTyxHQUFHLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUV0RCxXQUFNLEdBQWtCLElBQUksQ0FBQyxPQUFPO2FBQzFDLFlBQVksRUFBRTthQUNkLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO0tBYXZCO0lBWEMsR0FBRyxDQUFDLEtBQVM7UUFDWCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsR0FBRztRQUNELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRUQsS0FBSztRQUNILElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzNCLENBQUM7K0VBbEJVLGNBQWM7dUVBQWQsY0FBYyxXQUFkLGNBQWM7O2lGQUFkLGNBQWM7Y0FEMUIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBwdWJsaXNoUmVmIH0gZnJvbSAnLi4vdXRpbHMvcHVibGljLWFwaSc7XG5cbi8qKlxuICog55So5LqO6Leo57uE5Lu25YWx5Lqr54q25oCBXG4gKlxuICog5L2/55So56S65L6L77yaXG4gKiAgIHByb3ZpZGVyczogW3tcbiAqICAgICBwcm92aWRlOiBDT05URVhUX0lOSVRfVkFMVUVfVE9LRU4sXG4gKiAgICAgdXNlVmFsdWU6IExPR19USU1FU1RBTVBfUkFOR0VTWzFdXG4gKiAgIH0sIHtcbiAqICAgICBwcm92aWRlOiBDb250ZXh0U2VydmljZSwgLy8g5Y+v5Lul6YCa6L+H5LiN5ZCM55qEdG9rZW7pmpTnprvnirbmgIHmiJbkvb/nlKjlhbfmnInor63mhI/nmoR0b2tlbuadpeaPkOmrmOWPr+ivu+aAp+etiVxuICogICAgIHVzZUNsYXNzOiBDb250ZXh0U2VydmljZSxcbiAqICAgfV0sXG4gKlxuICog5LiO5Lia5Yqh5peg5YWz77yM566A5Y2V44CB57qv57K577yM5omA5Lul5L2g5Y+v5Lul5Zyo5Lia5Yqh5Lit5a6e546w5aSa54q25oCB5YWx5Lqr77yM5L6L5aaCXG4gKiAgICB0aGlzLmNvbnRleHRTZXJ2aWNlLnNldCh7XG4gKiAgICAgICAuLi50aGlzLmNvbnRleHRTZXJ2aWNlLmdldCgpLFxuICogICAgICAgc3RlcDogMlxuICogICAgIH0pO1xuICovXG5cbmV4cG9ydCBjb25zdCBDT05URVhUX0lOSVRfVkFMVUVfVE9LRU4gPSBuZXcgSW5qZWN0aW9uVG9rZW4oXG4gICdDT05URVhUX0lOSVRfVkFMVUVfVE9LRU4nLFxuKTtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENvbnRleHRTZXJ2aWNlPFQ+IHtcbiAgcHJpdmF0ZSBpbml0VmFsdWUgPSBpbmplY3Q8VD4oQ09OVEVYVF9JTklUX1ZBTFVFX1RPS0VOLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IHZhbHVlJCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHRoaXMuaW5pdFZhbHVlKTtcblxuICByZWFkb25seSB2YWx1ZSQ6IE9ic2VydmFibGU8VD4gPSB0aGlzLnZhbHVlJCRcbiAgICAuYXNPYnNlcnZhYmxlKClcbiAgICAucGlwZShwdWJsaXNoUmVmKCkpO1xuXG4gIHNldCh2YWx1ZT86IFQpIHtcbiAgICB0aGlzLnZhbHVlJCQubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWUkJC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy5zZXQodGhpcy5pbml0VmFsdWUpO1xuICB9XG59XG4iXX0=