import type { CSSProperties } from 'react'; import type { ViewProps } from '@tarojs/components'; import type { FormatterType, JSXElement, JSXElementRender } from '../types'; export type MlBaseFormCellProps = ViewProps; export interface MlBaseFormContentProps { formData: Record; columns: MlBaseFormColumn[]; } export interface MlBaseFormColumn { field: string; title: string; colSpanAll?: boolean | ((opts: { cellValue: any; formData: MlBaseFormData }) => boolean | undefined | null); grouping?: string; formatter?: FormatterType | ((opts: { cellValue: any; formData: MlBaseFormData }) => FormatterType); getValue?: (formData: any) => any; render?: (cellValue: any, formData: any) => JSXElement; renderLeft?: (opts: { cellValue: any; formData: any }) => JSXElement; renderRight?: (opts: { cellValue: any; formData: any }) => JSXElement; getCellProps?: (cellValue: any, formData: any) => MlBaseFormCellProps; getHeaderProps?: (cellValue: any, formData: any) => MlBaseFormCellProps; getContentProps?: (cellValue: any, formData: any) => MlBaseFormCellProps; } export interface MlBaseFormHeaderProps { showHeader?: boolean; headerTitle?: string | (() => JSXElement); headerLeftSlots?: JSXElementRender[]; headerRightSlots?: JSXElementRender[]; headerPaddingX?: boolean; headerPaddingLeft?: boolean; headerPaddingRight?: boolean; } export interface MlBaseFormBodyProps { bodyPaddingX?: boolean; bodyPaddingY?: boolean; } export interface MlBaseFormFooterProps { showFooter?: boolean; footerLeftSlots?: JSXElementRender[]; footerRightSlots?: JSXElementRender[]; footerPaddingX?: boolean; } export interface MlBaseFormProps extends MlBaseFormHeaderProps, MlBaseFormBodyProps, MlBaseFormContentProps, MlBaseFormFooterProps { className?: string; style?: CSSProperties; cols?: number | ((opts: { columns: MlBaseFormColumn[] }) => number); dense?: boolean; rowHeightSize?: 'mini' | 'sm' | 'base'; columnTitleWordNumber?: 4 | 5 | 6; } export type MlBaseFormData = Record;