import React from 'react'; import { AgGridReactProps } from 'ag-grid-react'; import { ArrayField } from '@formily/core'; import { Schema } from '@formily/json-schema'; import { ObservableColumnSource } from './interface'; declare const isColumnComponent: (schema: Schema) => boolean; declare const useArrayTableSources: () => ObservableColumnSource[]; declare const useArrayTableActions: () => ObservableColumnSource[]; /** * 懒挂载单元格渲染器(可编辑列)。 * * 已有行的可编辑格被 Editable 装饰器默认转成 readPretty 只读文本态(点击才进编辑), * 但仍挂着完整 Formily 树——这是行多列多滚动卡的主因。本渲染器让每个格在两种形态间切换: * - 懒挂载文本:只渲染廉价纯文本(复用 readOnlyFormatters),不挂 Formily 树。默认形态。 * - 挂载态:挂 AgField 全树,可编辑、可校验。 * * 何时挂载: * 1. 被激活(点击/键盘导航进来):激活态存放在 AG-Grid context.activeCells(Set), * 由 index.tsx 写入并 refreshCells; * 2. 必填且为空:空的必填格必须是真控件,否则没有字段节点,提交时没人校验它。 * 不区分新增行、存量行、initialValues 带进来的行——只看「必填且空」。 * 例外:Editable 装饰器的非新增行,Editable 自己会把它转成只读态,挂了也不校验,留在文本态。 * 何时卸回文本:焦点离开本格,且该字段校验通过(必填的已填上、没有格式错误)。 * 必填仍为空或校验有错则留着控件,让用户看见错误——与 Editable 失焦时的判断一致。 * 卸掉的只是渲染树,Formily 字段节点与值都还在,再次点击会接着用。 * * 校验安全:空的必填格不会卸成文本(见上);其余格卸载前已校验通过。@author nokecy */ declare const LazyAgField: (params: any) => React.JSX.Element; /** * 反应式只读文本渲染器(列级 readPretty 在「可编辑表」里的展示列)。 * * 只读纯文本快路径(valueFormatter)经 AG-Grid 缓存 params.value 取值,setValuesIn 程序化原地改值 * 不会刷新该格 → 自动带出的外码/描述等只读展示列空白。本渲染器 Observer 读可观察 record[dataKey], * 保持 readPretty 纯文本观感(不挂 Formily 树、不可点编辑),但能跟随 setValuesIn 即时刷新。 * * 仅用于「可编辑表的列级 readPretty 展示列」;「整表 readPretty」(明细/详情页,数据经 setValues 整体 * 加载,行引用整体替换→AG-Grid 自然刷新)仍走更廉价的静态 valueFormatter 快路径。@author nokecy */ declare const LazyReadOnlyText: (params: any) => React.JSX.Element; declare const buildArrayTableColumns: (dataSource: any[], field: ArrayField, sources: ObservableColumnSource[]) => AgGridReactProps['columnDefs']; declare const useAddition: () => React.JSX.Element | null; export { isColumnComponent, useArrayTableSources, useArrayTableActions, buildArrayTableColumns, useAddition, LazyAgField, LazyReadOnlyText }; export type LazyColumnDefault = { key: string; value: any; }; /** * 收集懒挂载列上声明了 default 的字段。 * * Formily 在字段创建时把 schema 的 default 写进值(值为空时)。懒挂载的格子不创建字段, * 老记录里缺的列、代码直接 push 的行就拿不到默认值,保存时是 null。 * 表达式形态的默认值({{...}})要求值上下文,这里不处理。@author nokecy */ export declare const collectLazyDefaults: (columns: any[]) => LazyColumnDefault[]; /** * 给还没处理过的新增行补默认值:值为空(null/undefined)才写,每行只补一次—— * 用户之后把格子清空是有意的,不能再被填回去。已落库的行(带 id)不动。@author nokecy */ export declare const applyLazyDefaults: (arrayField: any, defaults: LazyColumnDefault[], handled: WeakSet) => void;