@lark-project/ui-kit-plugin
Version:
Lark Project UI Kit Plugin
65 lines (64 loc) • 2.73 kB
TypeScript
/**
* Copyright (c) 2024 Lark Technologies Pte. Ltd.
*
* Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted,provided that the above copyright notice and this permission notice appear in all copies.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
* IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO
* EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
* ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
export interface IPortalPayload<Context = Record<string, any>, K extends keyof Context = keyof Context> {
type: K;
sessionId?: string;
payload?: Context[K];
}
export type IPortalDispatch = <DispatchContext extends IPortalPayload>(context: DispatchContext, cb?: (ret: any) => void) => Promise<void>;
export type IPortalOnMessage = <Context = Record<string, any>, K extends keyof Context = keyof Context>(type: K, cb: (payload?: Context[K]) => void) => () => void;
export interface IRect {
height: number;
bottom: number;
left: number;
right: number;
top: number;
width: number;
x: number;
y: number;
}
export interface IPortalEvent<Context = any> {
payload: Context;
}
export interface ITargetListenerMap {
bounding: IPortalEvent<{
rect: IRect;
}>;
clickOutSide: IPortalEvent<undefined>;
hover: IPortalEvent<{
hovering: boolean;
}>;
viewportVisible: IPortalEvent<{
visible: boolean;
}>;
}
export interface IPortalHandler {
destroy: () => void;
open: <Context extends Record<string, any>>(context?: Context) => Promise<void>;
close: () => Promise<void>;
inView: () => void;
notInView: () => void;
dispatch: IPortalDispatch;
onMessage: IPortalOnMessage;
addTargetListener: <K extends keyof ITargetListenerMap>(type: K, handler: (payload: ITargetListenerMap[K]) => void) => () => void;
define: (funcMap: Record<string, () => (...args: any[]) => any>) => () => void;
onDefine: (cb?: (funcList: Record<string, (...args: any[]) => any>) => void) => () => void;
}
export interface IPopupHandler {
dispatch: IPortalDispatch;
onMessage: IPortalOnMessage;
define: (funcMap: Record<string, () => (...args: any[]) => any>) => () => void;
onDefine: (cb?: (funcList: Record<string, (...args: any[]) => any>) => void) => () => void;
destroy: () => void;
}