high-order-widget-react
Version:
External widget classes for managing react components
77 lines (67 loc) • 3.95 kB
TypeScript
import { JSX } from 'react';
interface IMountable<TMountPayload = unknown, TUnmountPayload = unknown> {
mount(payload?: TMountPayload): void;
unmount(payload?: TUnmountPayload): void;
}
declare abstract class Observer<TPayload = unknown> {
abstract onNotified(payload: TPayload): void;
}
declare class Publisher<TPayload = unknown, TObserver extends Observer<TPayload> = Observer<TPayload>> {
private __observers;
constructor();
get observersList(): TObserver[];
notify(payload: TPayload): void;
subscribe(observer: TObserver): void;
unsubscribe(observer: TObserver): void;
removeAllObservers(): void;
protected _getListOfObservers(_: TPayload): TObserver[];
}
interface IStateObserverPayload<TStateObject extends object, TKey extends keyof TStateObject = keyof TStateObject> {
key: TKey;
value: TStateObject[TKey];
}
type StateObserverNotifyFunction<TStateObject extends object, TKey extends keyof TStateObject = keyof TStateObject> = (value: TStateObject[TKey]) => void;
declare class StateObserver<TStateObject extends object, TKey extends keyof TStateObject = keyof TStateObject> extends Observer<IStateObserverPayload<TStateObject, TKey>> {
private __key;
private __executeFunction;
get key(): TKey;
constructor(key: TKey, executeFunction: StateObserverNotifyFunction<TStateObject, TKey>);
onNotified(payload: IStateObserverPayload<TStateObject, TKey>): void;
}
declare class StatePublisher<TStateObject extends object> extends Publisher<IStateObserverPayload<TStateObject>, StateObserver<TStateObject>> {
protected _getListOfObservers(payload: IStateObserverPayload<TStateObject, keyof TStateObject>): StateObserver<TStateObject>[];
}
type ValueFactory<TStateObject, TKey extends keyof TStateObject> = (value: TStateObject[TKey]) => TStateObject[TKey];
declare abstract class AbstractState<TStateObject extends object> implements IMountable {
private __stateObject;
private __publisher;
constructor(initialStateObject: TStateObject);
protected get stateObject(): TStateObject;
mount(): void;
unmount(): void;
getSnapshot<TKey extends keyof TStateObject>(key: TKey): TStateObject[TKey];
subscribe<TKey extends keyof TStateObject>(key: TKey, callback: StateObserverNotifyFunction<TStateObject, TKey>): () => void;
removeAllObservers(): void;
protected updateStateObject<TKey extends keyof TStateObject>(key: TKey, value: TStateObject[TKey]): void;
protected updateStateObject<TKey extends keyof TStateObject>(key: TKey, value: ValueFactory<TStateObject, TKey>): void;
}
declare const useSyncState: <TStateObject extends object = object, TState extends AbstractState<TStateObject> = AbstractState<TStateObject>>(state: TState) => <TKey extends keyof TStateObject>(key: TKey) => TStateObject[TKey];
interface IWidgetViewProps<TStateObject extends object, TState extends AbstractState<TStateObject>> extends IMountable {
state: TState;
}
interface IWidgetCreatePayload<TStateObject extends object, TState extends AbstractState<TStateObject>> {
state: TState;
}
declare abstract class Widget<TStateObject extends object, TState extends AbstractState<TStateObject>, TWidgetViewProps extends IWidgetViewProps<TStateObject, TState> = IWidgetViewProps<TStateObject, TState>> {
protected _state: TState;
constructor(payload: IWidgetCreatePayload<TStateObject, TState>);
render(): JSX.Element | null;
protected _mount(): void;
protected _unmount(): void;
private __componentMount;
private __componentUnmount;
protected _getWidgetViewProps(): TWidgetViewProps;
protected abstract _getWidget(props: TWidgetViewProps): JSX.Element;
}
declare const useWidgetRegister: (props: IMountable) => void;
export { AbstractState, type IMountable, type IWidgetViewProps, Observer, Publisher, StateObserver, type StateObserverNotifyFunction, StatePublisher, Widget, useSyncState, useWidgetRegister };