From 881d8f14c945035ec82dafeeb77f37207f5b4f4c Mon Sep 17 00:00:00 2001 From: Anil Anar Date: Tue, 25 Aug 2020 15:13:50 +0200 Subject: [PATCH] feat: add state$ and getState affects: @userlike/messenger-types --- packages/messenger-types/src/Observable.ts | 36 +++++++++++++++++++++ packages/messenger-types/src/versions/v1.ts | 18 ++++++++++- 2 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 packages/messenger-types/src/Observable.ts diff --git a/packages/messenger-types/src/Observable.ts b/packages/messenger-types/src/Observable.ts new file mode 100644 index 0000000..a1b20f0 --- /dev/null +++ b/packages/messenger-types/src/Observable.ts @@ -0,0 +1,36 @@ +/** + * This is the interface for observables as defined in + * https://github.com/tc39/proposal-observable. It's a proposal, but lots of + * libraries implement this interface. Most prominent one is rxjs, which is also + * used by Angular. + */ +export interface Observable { + // Subscribes to the sequence with an observer + subscribe(observer: Observer): Subscription; + + // Subscribes to the sequence with callbacks + subscribe( + onNext: (v: T) => void, + onError?: (err: unknown) => void, + onComplete?: () => void + ): Subscription; +} + +export interface Subscription { + // Cancels the subscription + unsubscribe(): void; + + // A boolean value indicating whether the subscription is closed + closed: boolean; +} + +export interface Observer { + // Receives the next value in the sequence + next(value: T): void; + + // Receives the sequence error + error(errorValue: unknown): void; + + // Receives a completion notification + complete(): void; +} diff --git a/packages/messenger-types/src/versions/v1.ts b/packages/messenger-types/src/versions/v1.ts index b629052..ce1cfba 100644 --- a/packages/messenger-types/src/versions/v1.ts +++ b/packages/messenger-types/src/versions/v1.ts @@ -1,9 +1,25 @@ import { ActionResult } from "../ActionResult"; +import { Observable } from "../Observable"; -export interface Api extends ApiActions { +export interface Api extends ApiActions, ApiState { version: 1; } +export enum UI { + Hidden = "hidden", + Minimized = "minimized", + Maximized = "maximized", +} + +export interface State { + ui: UI; +} + +export interface ApiState { + state$: Observable; + getState(): State; +} + export interface ApiActions { /** * Render the messenger.