button/container/data-converter/data-list/grid-layout/grid-layout-form/
res-ws/virtual-fs 这几个入口的 index.js 都用 export { default as X } from './xxx'
转发了 default 导出,但同级有手写 types/ 目录时会触发合成入口逻辑,用
export * from './index' 拼入口文件,而 export * 在 ES 模块语义里不会带出 default,
导致这些包的 default 导出(部分甚至连实现本身,如 DataConverter、ResWs 整个类)
被 tree-shake 掉,没有出现在最终产物里。
177 lines
6.4 KiB
TypeScript
177 lines
6.4 KiB
TypeScript
import React, { ReactNode } from 'react';
|
||
import { PopupContainerProps } from './container';
|
||
export { PopupContainerProps } from './container';
|
||
|
||
declare const _default: OperationAuth;
|
||
|
||
/** 按钮操作权限的单例;维护一份 uuid -> 是否有权限的映射,供 Button 组件的鉴权逻辑查询 */
|
||
declare class OperationAuth {
|
||
/** @type {OperationAuth} */
|
||
static "__#private@#instance": OperationAuth;
|
||
/** @returns {OperationAuth} 单例实例 */
|
||
static getInstance: () => OperationAuth;
|
||
/**
|
||
* 用一批权限数据初始化/覆盖内部映射
|
||
* @param {Iterable<[string, boolean]>} data uuid 到权限布尔值的键值对集合
|
||
*/
|
||
init: (data: Iterable<[string, boolean]>) => Map<string, boolean>;
|
||
/**
|
||
* 判断某个操作是否有权限;没有记录该 uuid 时默认视为有权限
|
||
* @param {string} uuid 操作标识
|
||
* @returns {boolean} 是否有权限
|
||
*/
|
||
check: (uuid: string) => boolean;
|
||
#private;
|
||
}
|
||
|
||
/** antd Button 的视觉类型 */
|
||
type ButtonType = 'primary' | 'default' | 'danger' | ''
|
||
|
||
/** 按钮尺寸 */
|
||
type ButtonSize = 'large' | 'middle' | 'small'
|
||
|
||
/** 按钮外观分类,对应 entry(cate) 的参数 */
|
||
type ButtonCate = 'default' | 'link' | 'circle' | 'round' | 'dashed'
|
||
|
||
/** 按钮触发的行为类型 */
|
||
type WidgetType =
|
||
| 'redirect'
|
||
| 'func'
|
||
| 'component'
|
||
| 'fsdpf-component'
|
||
| 'grid-layout-form'
|
||
| 'grid-layout'
|
||
| 'data-list'
|
||
| 'destroy'
|
||
|
||
/** antd Tooltip / Popconfirm 支持的弹出位置 */
|
||
type PlacementType =
|
||
| 'top' | 'left' | 'right' | 'bottom'
|
||
| 'topLeft' | 'topRight' | 'bottomLeft' | 'bottomRight'
|
||
| 'leftTop' | 'leftBottom' | 'rightTop' | 'rightBottom'
|
||
|
||
/** Button props.tooltip 配置 */
|
||
interface ButtonTooltip {
|
||
/** 提示文字 */
|
||
title: string
|
||
/** 弹出位置 */
|
||
placement?: PlacementType
|
||
/** 是否启用,0 视同 false */
|
||
enabled?: boolean | number
|
||
getPopupContainer?: (e: HTMLElement) => HTMLElement
|
||
}
|
||
|
||
/** Button props.confirm 二次确认气泡配置 */
|
||
interface ButtonConfirm {
|
||
/** 确认提示文字 */
|
||
title: string
|
||
cancelText?: string
|
||
okText?: string
|
||
/** 确认按钮类型 */
|
||
okType?: ButtonType
|
||
placement?: PlacementType
|
||
/** 是否启用,0 视同 false */
|
||
enabled?: boolean | number
|
||
getPopupContainer?: (e: HTMLElement) => HTMLElement
|
||
arrow?: boolean | { pointAtCenter: boolean }
|
||
}
|
||
|
||
/**
|
||
* 按钮点击行为的容器配置;在 PopupContainerProps 基础上叠加 Popover 专有字段和 Button 专有的 mode,
|
||
* 流经 Button → Popover → Popup.modal 三层,各层按需取用不同字段
|
||
*/
|
||
interface WidgetContainerProps extends Omit<PopupContainerProps, 'placement'> {
|
||
/** 'popover' 时按钮触发内嵌气泡卡片,否则走 Popup.modal */
|
||
mode?: 'popover' | string
|
||
/** 弹窗标题,支持 lodash template 插值(以点击时的 raw data 为上下文) */
|
||
title?: string
|
||
/** antd Popover 的弹出位置(12 方向) */
|
||
placement?: PlacementType | string
|
||
/** antd Popover 对齐微调配置 */
|
||
align?: unknown
|
||
/** antd Popover 的 zIndex */
|
||
zIndex?: number
|
||
/** antd Popover 的箭头配置 */
|
||
arrow?: boolean | { pointAtCenter: boolean }
|
||
getPopupContainer?: (e: HTMLElement) => HTMLElement
|
||
/** 气泡挂载到 body,false 时挂载到触发元素父节点;默认 true */
|
||
isPopupMountBodyContainer?: boolean
|
||
}
|
||
|
||
|
||
/** useButton 第二个参数:回调处理器 */
|
||
interface UseButtonHandlers {
|
||
onAfterClick?: (result: unknown) => void
|
||
onBeforeClick?: (data: unknown) => void
|
||
}
|
||
|
||
/** useButton 返回 / ButtonProps 共用的状态字段 */
|
||
interface UseButtonStatus {
|
||
loading?: boolean
|
||
disabled?: boolean
|
||
}
|
||
|
||
/** useButton 第一个参数:行为配置 */
|
||
interface UseButtonProps {
|
||
/** 行为目标:组件 / 函数 / 路由 / 表达式,含义随 widgetType 而定 */
|
||
widget?: unknown
|
||
/** 行为类型,决定 widget 的解释方式和触发后的动作 */
|
||
widgetType?: WidgetType
|
||
/** 触发时附带的额外数据,合并到 widgetProps 求值结果后传给动作处理器 */
|
||
widgetData?: Record<string, unknown>
|
||
/** 触发前解析的 props 映射配置(经 getWidgetPropsData 求值) */
|
||
widgetProps?: Record<string, unknown>
|
||
/** 传给目标弹窗/表单/请求的 $setting 配置 */
|
||
widgetSetting?: Record<string, unknown>
|
||
/** 传给弹窗容器的配置(title/placement/zIndex 等) */
|
||
widgetContainerProps?: WidgetContainerProps
|
||
}
|
||
|
||
/** Button 组件的 props(所有变体共用) */
|
||
interface ButtonProps extends UseButtonProps, UseButtonHandlers, UseButtonStatus {
|
||
className?: string
|
||
/** 覆盖工厂默认外观分类 */
|
||
variant?: ButtonCate
|
||
children?: ReactNode
|
||
/** 按钮文字,与 children 二选一 */
|
||
name?: string
|
||
/** 图标 class 名 */
|
||
icon?: string
|
||
type?: ButtonType
|
||
iconPosition?: 'start' | 'end'
|
||
/** 按钮操作的权限标识 */
|
||
noAuthType?: string
|
||
/** onClick 时传给动作处理器的数据源 */
|
||
data?: unknown
|
||
tooltip?: ButtonTooltip
|
||
confirm?: ButtonConfirm
|
||
[key: string]: unknown
|
||
}
|
||
|
||
|
||
/** useButton 返回值:[点击处理函数(已防抖), 当前 loading/disabled 状态] */
|
||
type UseButtonReturn = [(data: unknown) => void, UseButtonStatus]
|
||
|
||
/** ButtonGroupPopover props.options 中每一项的结构(ButtonProps + uuid + 必填 widgetType) */
|
||
interface ButtonOption extends ButtonProps {
|
||
/** 操作项唯一标识,用于权限校验 */
|
||
uuid?: string
|
||
widgetType: WidgetType
|
||
/** 操作项自身的容器配置,与外层 widgetContainerProps 合并 */
|
||
widgetContainerSetting?: WidgetContainerProps
|
||
}
|
||
|
||
/**
|
||
* Button 组件点击行为的核心 hook;按 widgetType 把点击行为分发到对应的处理器
|
||
* (跳转/自定义函数/弹窗组件/表单弹窗/数据列表弹窗/删除请求等)
|
||
* @param {UseButtonProps} config
|
||
* @param {UseButtonHandlers} [handlers]
|
||
* @returns {UseButtonReturn} [点击处理函数(已做 300ms 防抖), 当前 loading/disabled 状态]
|
||
*/
|
||
declare function useButton({ widget, widgetType, widgetData, widgetProps, widgetSetting, widgetContainerProps, }: UseButtonProps, { onAfterClick, onBeforeClick }?: UseButtonHandlers): UseButtonReturn;
|
||
|
||
declare const Button: (props: ButtonProps) => React.ReactNode;
|
||
|
||
export { _default as auth, Button as default, useButton };
|
||
export type { ButtonCate, ButtonConfirm, ButtonOption, ButtonProps, ButtonSize, ButtonTooltip, ButtonType, PlacementType, UseButtonHandlers, UseButtonProps, UseButtonReturn, UseButtonStatus, WidgetContainerProps, WidgetType };
|