import { SubscriberObj } from "../../functionUtils"; import { HOOKS_EVENTS } from "./constants"; export interface HookConfiguration {} /* existing Hook Plugn props: sample */ /* interface _HookModulePlugin { Component: | React.FC | React.Component | React.ReactNode; ModalContainer?: React.FC | React.Component; skipHook?: (payload: ZappRiver | ZappEntry) => boolean; presentFullScreen: boolean; showNavBar?: boolean; isFlowBlocker: (() => boolean) | boolean; // narrow this hasPlayerHook?: boolean; name: string; runInBackground?: ( item: HookPluginProps["payload"], callback: hookCallback, hookPlugin: HookScreenData, presentUI: (payload?: HookPluginProps["payload"]) => void ) => any; } */ //* Derived from usage */ export interface HookModule { ModalContainer?: React.ComponentType; Component: React.ComponentType; presentFullScreen: boolean; run?: ( arg0: unknown, callback: () => void, configuration: HookConfiguration ) => void; // not sure about optional parameter hasPlayerHook?: boolean; configuration?: HookConfiguration; isFlowBlocker: () => boolean; skipHook?: (payload?: ZappRiver | ZappEntry) => boolean; runInBackground?: ( arg0: unknown, callback: () => void, hookPlugin: Hook, presentUI: (payload?: HookPluginProps["payload"]) => void ) => void; name: string; showNavBar?: boolean; // unsure } export type HookManagerArgs = { rivers: Record; plugins: ZappPlugin[]; targetScreen: ZappRiver; startUpHooksData?: { startUpHooks?: unknown[] | "in_process"; setStartUpHooks?: (arg0: string) => void; }; }; export interface HookManager { subscriber: SubscriberObj; presentScreenHook: ( hook: Hook, payload: unknown, callback: (...any) => void ) => void; executeHook: ( hook: Hook, payload: unknown, callback: (...any) => void ) => void; handleHooks: (payload: unknown) => void; runInBackground: ( hook: Hook, payload: unknown, callback: (...any) => void, presentUI: (payload?: HookPluginProps["payload"]) => void ) => void; } export type HookIniObj = { hook: HookModule & { module: HookModule; general: unknown; screen_id?: string; identifier?: string; weight?: number | string; }; hooks: Hook[]; manager: HookManager; }; export interface Hook { manager: HookManager; lastHook: boolean; state: number; module: T; screen_id: string; identifier: string; configuration: T["configuration"]; setStateAndNotify( event: (typeof HOOKS_EVENTS)[keyof typeof HOOKS_EVENTS], opts: { error?: typeof Error; route?: string; hookPlugin: Hook; payload: unknown; } ); general?: { transition_type: (typeof HOOKS_EVENTS)[keyof typeof HOOKS_EVENTS]; allow_screen_plugin_presentation: boolean; is_flow_blocker: boolean; }; }