Files
2026-01-16 02:20:32 +00:00

157 lines
7.3 KiB
TypeScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import type { ImageProps } from 'antd';
import type { AnchorHTMLAttributes } from 'react';
import React from 'react';
/**
* ProHelp 数据源子项内容类型。
* 该类型定义了多种数据源子项内容类型,例如 h1、h2、link、text、image等。
* 其中link 和 inlineLink 属性都是链接类型的数据源子项内容,不同的是 inlineLink 是内联链接,而 link 是块级链接。
*
* @typedef {object} ProHelpDataSourceContentType
* @property {string} h1 标题1类型的数据源子项内容。
* @property {string} h2 标题2类型的数据源子项内容。
* @property {{ children: string } & React.AnchorHTMLAttributes<HTMLAnchorElement>} link 链接类型的数据源子项内容。
* @property {{ children: string } & React.AnchorHTMLAttributes<HTMLAnchorElement>} inlineLink 内联链接类型的数据源子项内容。
* @property {string} text 文本类型的数据源子项内容。
* @property {ImageProps} image 图片类型的数据源子项内容。
*/
type ProHelpDataSourceContentType = {
/**
* h1 标题1类型的数据源子项内容。
*/
h1: string;
/**
* h2 标题1类型的数据源子项内容。
*/
h2: string;
/**
* link 链接类型的数据源子项内容。
*/
link: {
children: string;
} & AnchorHTMLAttributes<HTMLAnchorElement>;
/**
* 行内链接类型的数据源子项内容。
*/
inlineLink: {
children: string;
} & AnchorHTMLAttributes<HTMLAnchorElement>;
/**
* navigation 类型链接,或切换菜单
*/
navigationSwitch: {
selectKey: string;
children: string;
};
/**
* text 文本类型的数据源子项内容。
*/
text: string;
/**
* image 图片类型的数据源子项内容。
*/
image: ImageProps;
/**
* markdown 类型的渲染,支持 基本的 markdown 语法
* 会包在一个叫 inner-html 为 markdown 的 div 中
*/
html: {
className: string;
children: string;
};
};
/**
* ProHelp 数据源子项内容类型的类型,可能的取值为 "h1"、"h2"、"link"、"inlineLink"、"text" 和 "image"。
* @typedef {'h1' | 'h2' | 'link' | 'inlineLink' | 'text' | 'image'} ProHelpDataSourceChildrenType
*/
type ProHelpDataSourceChildrenType = Extract<keyof ProHelpDataSourceContentType, any>;
/**
* ProHelp 数据源子项内容属性类型。
* @template ValueType 数据源项值的类型,默认为 'text'。
* 该类型定义了一个名为 children 的对象属性,根据 valueType 属性的值来确定该属性对象的具体类型,
* 如果 valueType 的类型是 ProHelpDataSourceChildrenType
* 则使用 ProHelpDataSourceContentType 中 ProHelpDataSourceChildrenType 所对应的属性类型;
* 否则,使用 ProHelpDataSourceContentType 中 ValueType 所对应的属性类型。
*/
type ProHelpDataSourceContentProps<ValueTypeMap, ValueType> = ValueType extends ProHelpDataSourceChildrenType ? ProHelpDataSourceContentType[ValueType] : ValueType extends keyof ValueTypeMap ? ValueTypeMap[ValueType] : ProHelpDataSourceContentType[ProHelpDataSourceChildrenType];
/**
* ProHelp 数据源子项类型。
* @template ValueTypeMap 数据源项值的类型,默认为 'text'。
* @property {(ValueType | ProHelpDataSourceChildrenType)} valueType 数据源子项值的类型,可以为指定的类型,也可以是自定义类型。
* @property {ProHelpDataSourceContentProps<ValueType>} children 包含数据源子项内容的对象。
*/
export type ProHelpDataSourceChildren<ValueTypeMap = {
text: string;
}> = {
/**
* 包含数据源子项内容的对象。
* @template ValueType 数据源项值的类型,默认为 'text'。
*/
valueType: ValueTypeMap extends Map<infer ValueType, any> ? ValueType : keyof ValueTypeMap | ProHelpDataSourceChildrenType;
/**
* 数据源子项值的类型。
* @typedef {(ValueTypeMap | ProHelpDataSourceChildrenType)} ProHelpDataSourceChildrenType
*/
children: ProHelpDataSourceContentProps<ValueTypeMap, keyof ValueTypeMap | ProHelpDataSourceChildrenType>;
};
/**
* ProHelp 数据源类型。
* @template ValueType 数据源项值的类型,默认为 'text'。
* @property {string} key 数据源项的唯一标识。
* @property {string} title 数据源项的标题。
* @property children 包含子项的数组,每个子项包含一个唯一标识,标题以及子子项数组。
*/
export type ProHelpDataSource<ValueType = 'text'> = {
/**
* key 数据源项的唯一标识
*/
key: string;
/**
* title 数据源项的标题。
*/
title: string;
/**
* 在一页内加载所有的 children 内容
*/
infiniteScrollFull?: boolean;
/**
* children 包含子项的数组,每个子项包含一个唯一标识,标题以及子子项数组。
*/
children: {
key: string;
title: string;
/**
* 是否远程加载children
*/
asyncLoad?: boolean;
children?: ProHelpDataSourceChildren<ValueType>[];
}[];
};
/**
* 这段代码定义了一个名为 ProHelpProvide 的 React 上下文对象,并且指定了该上下文对象的初始值为 { dataSource: [] }。
* 这个上下文对象中包含了一个名为 dataSource 的属性,该属性的值是一个数组,类型为 ProHelpDataSource<any>[]。
* 该上下文对象通常用于在 React 组件树中共享数据,即可以通过在组件中使用 ProHelpProvide.Provider 包裹一组组件,
* 将 dataSource 和 valueTypeMap 数据源传递给这些组件,这些组件即可从上下文中获取 dataSource 数据源,实现数据的共享和传递。
*/
export declare const ProHelpProvide: React.Context<{
/**
* 帮助文档的数据源,包含一组帮助文档数据,每个数据包含标题和内容等信息。
*/
dataSource: ProHelpDataSource<any>[];
/**
* 帮助组件的子组件,用于渲染自定义的帮助内容。
* 是一个键值对结构的集合,其中:
* 键key为字符串类型
* 值value为一个函数类型该函数接受两个参数一个名为 item 的 ProHelpDataSourceChildren 类型的对象,表示一个 ProHelp 数据源子项的子项;
* 一个名为 index 的数字类型参数,表示该子项在父级子项数组中的索引。
* 该函数返回一个 ReactNode 类型的元素,用于表示该 ProHelp 数据源子项子项应该渲染的 UI 元素。
* 这个 Map 的作用是将 ProHelp 数据源子项子项的 valueType 属性与对应的渲染函数进行映射,从而实现在渲染 ProHelp 数据源时动态地选择渲染方法。
* 在实际使用时,我们可以通过判断子项的 valueType 属性,从 valueTypeMap 中取出对应的渲染函数,再将该子项和渲染函数作为参数传入 renderDataSourceItem 函数中即可。
*/
valueTypeMap: Map<string, (item: ProHelpDataSourceChildren<any>, index: number) => React.ReactNode>;
/**
* 加载数据源的函数,如果把数据源设置为 async load就可以使用这个功能。
*/
onLoadContext?: ((key: React.Key, context: ProHelpDataSource<any>['children'][number]) => Promise<ProHelpDataSourceChildren<any>[]>) | undefined;
}>;
export {};