1.0.5 • Published 2 years ago

use-dynamic-form-lxh v1.0.5

Weekly downloads
-
License
MIT
Repository
-
Last release
2 years ago

use-dynamic-form-lxh

Install

Using npm:

$ npm install --save  use-dynamic-form-lxh

or using yarn:

$ yarn add use-dynamic-form-lxh

使用

useDynamicForm 可以帮助我们管理表单联动。实际上就是在 SchemaForm 表单的 columns 数据上添加了 dynamic 属性,记录动态数据信息,根据信息控制表单元素的显示隐藏。

import React, { useMemo } from 'react'
import type { ProFormColumnsType } from '@ant-design/pro-form'
import { BetaSchemaForm } from '@ant-design/pro-form'
import useDynamicForm, { ProFormColumnsTypeDynamic } from 'use-dynamic-form-lxh'
import { Form } from 'antd'

const labels: ProFormColumnsType = {
  title: '标签',
  dataIndex: 'labels',
  width: 'm',
}
const createName: ProFormColumnsType = {
  title: '创建时间',
  key: 'showTime',
  dataIndex: 'createName',
  valueType: 'date',
}
const formList: ProFormColumnsType = {
  title: '列表',
  valueType: 'formList',
  dataIndex: 'list',
  initialValue: [{ state: 'all', title: '标题' }],
  columns: [
    {
      valueType: 'group',
      columns: [
        {
          title: '状态',
          dataIndex: 'state',
          valueType: 'select',
          width: 'xs',
          valueEnum,
        },
        {
          title: '标题',
          dataIndex: 'title',
          formItemProps: {
            rules: [
              {
                required: true,
                message: '此项为必填项',
              },
            ],
          },
          width: 'm',
        },
      ],
    },
  ],
}

const dynamicColumns: ProFormColumnsTypeDynamic<DataItem>[] = [
  {
    title: '切换表单',
    dataIndex: 'selectType',
    valueType: 'select',
    valueEnum,
    width: 'm',
    dynamic: {
      id: 'selectType',
      addColumns: {
        labels: [labels],
        createName: [createName],
        formList: [formList],
      },
    },
  },
]

export default () => {
  ...
  const [columns, onValuesChange] = useDynamicForm(dynamicColumns, form, initialValues);
  return (
    <BetaSchemaForm<DataItem>
      columns={columns}
      onValuesChange={onValuesChange}
      initialValues={initialValues}
      form={form}
    />
  );
};

API

字段名称类型说明
dynamicColumnsProFormColumnsTypeDynamic<T, ValueType>[]参数,带有 dynamic 属性的 columns 数组【需要使用 useMemo 包裹】
form(FormInstance<T> & FormInstance<any>)参数,表单的 form 实例
initialValuesStore参数,初始值
columnsProFormColumnsType<T, ValueType>[] | ProFormColumnsType<T, ValueType>[][]返回值,SchemaForm 表单的 columns
onValuesChange(changedValues: any, values: Values) => void返回值,SchemaForm 表单的 onValuesChange

dynamic

Dynamic {id, addColumns, delColumns?, children?, index?}, 存放动态数据的对象

字段名称类型说明
idstring建议与 dataIndex 保持一致
addColumnsRecord<string, ProFormColumnsTypeDynamic<T, ValueType>[]>指定要动态添加的表单元素集合,格式:{ key: columns },比如{ ActiveMQ: host, port },表示 select 值等于 ActiveMQ 时展示 host 和 port
delColumnsRecord<string, ProFormColumnsTypeDynamic<T, ValueType>[]>格式同 addColumns,只是作用相反,记录的是选中时需要特别删掉的表单元素集合
childrenstring[]所有动态的后代元素的 id 集合(包括子级、孙子级...所有动态的后代元素),切换的时候需要去清除子级的数据
indexnumber指定动态元素插入的位置,可以为正整数或者负整数,正整数往后插入,负整数往前插入
1.0.5

2 years ago

1.0.4

2 years ago

1.0.3

2 years ago

1.0.2

2 years ago

1.0.1

2 years ago

1.0.0

2 years ago