UNPKG

@rws-framework/client

Version:

This package provides the core client-side framework for Realtime Web Suit (RWS), enabling modular, asynchronous web components, state management, and integration with backend services. It is located in `.dev/client`.

53 lines (39 loc) 1.79 kB
import { Observable, Accessor, observable as parentObservable} from '@microsoft/fast-element'; import RWSViewComponent from '../_component'; import { DefaultObservableAccessor } from './_default_observable_accessor'; import { ExternalObservableAccessor } from './_external_observable_accessor'; type ExternalObservableOptions = {} | unknown; function isString(test: unknown){ return typeof test === 'string'; } function externalObservable(targetComponent: RWSViewComponent | unknown, nameOrAccessor: string | Accessor, opts: ExternalObservableOptions = null): void | any { const target = targetComponent as any; const propName = typeof nameOrAccessor === 'string' ? nameOrAccessor : nameOrAccessor.name; if (isString(nameOrAccessor)) { nameOrAccessor = new DefaultObservableAccessor(propName); } const defaultAccessor: Accessor = nameOrAccessor as Accessor; const extendedAccessor = new ExternalObservableAccessor(propName); const accessors: Accessor[] = [ defaultAccessor, extendedAccessor ]; for (const accessor of accessors){ Observable.getAccessors(target).push(accessor); Reflect.defineProperty(target, accessor.name, { enumerable: true, get(this: any) { return accessor.getValue(this); }, set(this: any, newValue: any) { const oldVal = accessor.getValue(this); accessor.setValue(this, newValue); if(!!this['externalChanged']){ this['externalChanged'].call(accessor.name, oldVal, newValue); } }, }); } } export { externalObservable };