@antv/s2
Version:
effective spreadsheet render core lib
252 lines (251 loc) • 8.11 kB
TypeScript
import type { FederatedPointerEvent as CanvasEvent, PointLike } from '@antv/g';
import type * as CSS from 'csstype';
import type { S2CellType, SimpleData, ViewMetaData } from '../../common/interface';
import type { SpreadSheet } from '../../sheet-type';
import type { BaseTooltip } from '../../ui/tooltip';
export type TooltipDataItem = ViewMetaData;
export interface TooltipOperatorMenuInfo {
key: string;
[key: string]: unknown;
}
export type TooltipOperatorClickHandler = (info: TooltipOperatorMenuInfo, cell: S2CellType | undefined | null) => void;
export interface TooltipOperatorMenuItem<Icon, Text> {
/** 唯一标识 */
key: string;
/** 自定义 icon */
icon?: Icon;
/** 名称 */
label?: Text;
/** 点击回调 */
onClick?: TooltipOperatorClickHandler;
/** 是否显示 */
visible?: boolean | null | undefined | ((cell: S2CellType) => boolean | null | undefined);
/** 子菜单 */
children?: TooltipOperatorMenuItem<Icon, Text>[];
}
export type TooltipBaseOperatorMenuItem = TooltipOperatorMenuItem<Element | string, string>;
export type TooltipOperatorMenuItems = TooltipBaseOperatorMenuItem[];
export interface TooltipOperatorMenuOptions<Icon, Text> {
/**
* 菜单内容
*/
items?: TooltipOperatorMenuItem<Icon, Text>[];
/**
* 菜单项点击
*/
onClick?: TooltipOperatorClickHandler;
/**
* 选中的菜单项 key
*/
selectedKeys?: string[];
}
export interface TooltipOperatorOptions<Menu = BaseTooltipOperatorMenuOptions> {
/**
* 菜单项配置
*/
menu?: Menu;
}
export type TooltipPosition = PointLike;
export type TooltipDetailListItem = {
name: string;
value: SimpleData;
icon?: Element | string;
};
export interface TooltipOptions<Menu = BaseTooltipOperatorMenuOptions> {
/**
* 是否隐藏汇总项
* @example "数量(总和) 999"
*/
hideSummary?: boolean;
/**
* 顶部操作项
*/
operator?: TooltipOperatorOptions<Menu>;
/**
* 是否是小计/总计
*/
isTotals?: boolean;
/**
* 只展示当前单元格文本 (不含汇总/行列头信息), 如果存在省略, 显示完整文本
* 1. 用于单元格省略后 hover 显示完整文本
* 2. 明细表 hover/click 显示当前单元格文本
* 3. 自定义交互 hover/click 场景
* @example
s2.showTooltip({
...
options: { onlyShowCellText: true }
})
*/
onlyShowCellText?: boolean;
/**
* 只展示顶部操作项菜单 (不含汇总/行列头/单元格信息)
* 1. 用于排序场景
* 2. 自定义交互
* @example
s2.showTooltip({
...
options: { onlyShowOperator: true }
})
*/
onlyShowOperator?: boolean;
/**
* 是否格式化数据
*/
enableFormat?: boolean;
/**
* 是否强制清空 dom
*/
forceRender?: boolean;
/**
* 自定义数据
*/
data?: TooltipData;
}
export type TooltipSummaryOptionsValue = number | string | undefined | null;
export interface TooltipSummaryOptions {
name: string | null;
selectedData: TooltipDataItem[];
value: TooltipSummaryOptionsValue;
originValue?: TooltipSummaryOptionsValue;
}
export interface TooltipNameTipsOptions {
name?: string | undefined | null;
tips?: string | undefined | null;
}
export type TooltipDetailProps = {
list: TooltipDetailListItem[] | null | undefined;
};
export type TooltipInterpretationOptions<T = TooltipContentType, Icon = Element | string, Text = string> = {
name: string;
icon?: Icon;
text?: Text;
content?: T;
};
export type TooltipShowOptions<T = TooltipContentType, Menu = BaseTooltipOperatorMenuOptions> = {
position: TooltipPosition;
data?: TooltipData;
cellInfos?: TooltipDataItem[];
options?: TooltipOptions<Menu>;
content?: ((cell: S2CellType, defaultTooltipShowOptions: TooltipShowOptions<T, Menu>) => T) | T;
event?: CanvasEvent | MouseEvent;
onMounted?: () => void;
};
export type TooltipData = {
summaries?: TooltipSummaryOptions[];
details?: TooltipDetailListItem[] | null | undefined;
headInfo?: TooltipHeadInfo | null | undefined;
name?: string | null | undefined;
tips?: string;
infos?: string;
interpretation?: TooltipInterpretationOptions;
colIndex?: number | null;
rowIndex?: number | null;
description?: string;
};
export type TooltipHeadInfo = {
rows: TooltipDetailListItem[];
cols: TooltipDetailListItem[];
};
export type TooltipDataParams = {
spreadsheet: SpreadSheet;
options?: TooltipOptions;
targetCell?: S2CellType | undefined | null;
};
export interface TooltipSummaryProps {
summaries: TooltipSummaryOptions[] | undefined;
}
export interface SummaryParam extends TooltipDataParams {
cellInfos?: TooltipData[];
}
export interface TooltipDataParam extends TooltipDataParams {
cellInfos: TooltipData[];
}
export type TooltipAutoAdjustBoundary = 'body' | 'container' | null | undefined;
export type TooltipContentType = Element | string | undefined | null;
export interface BaseTooltipConfig<T = TooltipContentType, Menu = BaseTooltipOperatorMenuOptions> {
/**
* 是否开启 tooltip, 在点击/悬停/停留/刷选/多选等场景会显示
* @description @antv/s2 中只保留了 tooltip 的核心显隐逻辑,提供相应数据,不渲染内容
* React 版本 和 Vue3 版本中通过 自定义 Tooltip 类 的方式渲染 tooltip 的内容,包括 排序下拉菜单, 单元格选中信息汇总, 列头隐藏按钮 等。
* @see https://s2.antv.antgroup.com/manual/basic/tooltip
*/
enable?: boolean;
/**
* 自定义内容
* @see https://s2.antv.antgroup.com/manual/basic/tooltip#%E8%87%AA%E5%AE%9A%E4%B9%89
*/
content?: TooltipShowOptions<T>['content'];
/**
* 自定义操作项
* @see https://s2.antv.antgroup.com/manual/basic/tooltip#%E8%87%AA%E5%AE%9A%E4%B9%89
*/
operation?: TooltipOperation<Menu>;
/**
* 显示边界, 当 tooltip 超过边界时自动调整显示位置,container: 图表区域,body: 整个浏览器窗口,设置为 `null` 可关闭此功能
*/
autoAdjustBoundary?: TooltipAutoAdjustBoundary;
/**
* 自定义 Tooltip 类
* @see https://s2.antv.antgroup.com/examples/react-component/tooltip/#custom-tooltip
*/
render?: (spreadsheet: SpreadSheet) => BaseTooltip<T, Menu>;
/**
* 自定义坐标
*/
adjustPosition?: (positionInfo: TooltipPositionInfo) => TooltipPosition;
/**
* 自定义挂载容器, 默认 body
*/
getContainer?: () => HTMLElement | null;
/**
* 容器类名
*/
className?: string | string[];
/**
* 容器样式
*/
style?: CSS.Properties;
}
export interface TooltipPositionInfo {
position: TooltipPosition;
event: CanvasEvent | MouseEvent;
}
export type BaseTooltipOperatorMenuOptions = TooltipOperatorMenuOptions<Element | string, string>;
export interface Tooltip<T = TooltipContentType, Menu = BaseTooltipOperatorMenuOptions> extends BaseTooltipConfig<T, Menu> {
/**
* Tooltip 行头单元格配置
*/
rowCell?: BaseTooltipConfig<T, Menu>;
/**
* Tooltip 列头单元格配置
*/
colCell?: BaseTooltipConfig<T, Menu>;
/**
* Tooltip 角头单元格配置
*/
cornerCell?: BaseTooltipConfig<T, Menu>;
/**
* Tooltip 数值单元格配置
*/
dataCell?: BaseTooltipConfig<T, Menu>;
}
export interface TooltipOperation<Menu = BaseTooltipOperatorMenuOptions> extends TooltipOperatorOptions<Menu> {
/**
* 隐藏列 (叶子节点有效)
*/
hiddenColumns?: boolean;
/**
* 透视表组内排序
*/
sort?: boolean;
/**
* 明细表排序
*/
tableSort?: boolean;
}
export interface AutoAdjustPositionOptions {
position: TooltipPosition;
tooltipContainer: HTMLElement;
spreadsheet: SpreadSheet;
autoAdjustBoundary: TooltipAutoAdjustBoundary;
}