@lynx-js/types
Version:
@lynx-js/types is a type package of all public APIs officially provided by the Lynx team. Using this package can help you better use Lynx APIs to develop your applications.
136 lines (112 loc) • 3.63 kB
TypeScript
// Copyright 2024 The Lynx Authors. All rights reserved.
// Licensed under the Apache License Version 2.0 that can be found in the
// LICENSE file in the root directory of this source tree.
import { AnyObject } from '../common';
import { AnimationV2 } from './animation';
export enum NODE_REF_INVOKE_ERROR_CODE {
SUCCESS = 0,
UNKNOWN = 1,
NODE_NOT_FOUND = 2,
METHOD_NOT_FOUND = 3,
PARAM_INVALID = 4, // Determined by the implementer of the component.
SELECTOR_NOT_SUPPORTED = 5, // Currently only supports ID selectors.
}
export interface uiMethodOptions {
method: string;
params?: AnyObject;
success?(res: any): void;
fail?(res: { code: NODE_REF_INVOKE_ERROR_CODE; data?: any }): void;
}
export interface uiFieldsOptions {
id?: boolean;
dataset?: boolean;
tag?: boolean;
query?: boolean;
unique_id?: boolean;
}
export interface PathData {
data: Array<{
tag: string;
id: string;
class: string[];
dataSet: Record<string, unknown>;
// index of parent's children
index: number;
}>;
}
export interface FieldsParams {
id?: boolean;
dataset?: boolean;
tag?: boolean;
index?: boolean;
class?: boolean;
attribute?: boolean;
}
export interface FieldsData {
id: string;
tag: string;
dataset: Record<string, unknown>;
index: number;
class: Array<string>;
attribute: Record<string, unknown>;
}
export type PathCallback = (data: PathData | null, status: { data: string; code: number }) => void;
interface BaseNodesRef {
animate(animations: AnimationV2[] | AnimationV2): SelectorQuery;
playAnimation(ids: string[] | string): SelectorQuery;
pauseAnimation(ids: string[] | string): SelectorQuery;
cancelAnimation(ids: string[] | string): SelectorQuery;
setNativeProps(nativeProps: Record<string, any>): SelectorQuery;
}
export interface NodesRef extends BaseNodesRef {
invoke(options: uiMethodOptions): SelectorQuery;
path(callback: PathCallback): SelectorQuery;
fields<T extends FieldsParams>(
fields: Required<FieldsParams> extends Record<keyof T, boolean> ? T : FieldsParams,
callback: (
data: {
[K in keyof Required<FieldsParams> as T[K] extends true ? K : never]: FieldsData[K];
} | null,
status: { data: string; code: number }
) => void
): SelectorQuery;
}
export interface MultiNodesRef extends BaseNodesRef {
path(callback: (data: PathData[], status: { data: string; code: number }) => void): SelectorQuery;
fields<T extends FieldsParams>(
fields: Required<FieldsParams> extends Record<keyof T, boolean> ? T : FieldsParams,
callback: (
data: {
[K in keyof Required<FieldsParams> as T[K] extends true ? K : never]: FieldsData[K];
}[],
status: { data: string; code: number }
) => void
): SelectorQuery;
}
export interface SelectorQuery {
/**
* Selects a single node by CSS selector.
* @param selector CSS selector
*/
select(selector: string): NodesRef;
/**
* Selects all nodes satisfying CSS selector.
* @param selector CSS selector
*/
selectAll(selector: string): MultiNodesRef;
/**
* Select root node of the component.
*/
selectRoot(): NodesRef;
// /**
// * Selects a single node by element id.
// * When a touch event is triggered, the element id of the node is passed to the event handler as 'uid',
// * by which can a node be selected in its event handler.
// */
// selectUniqueID(uniqueId: string | number): NodesRef;
/**
* Execute all tasks in the task queue.
* When `this._fire_immediately` is set to true, this method is called automatically.
*/
exec(): void;
}