1.9.2 • Published 2 years ago

@schema-plugin-flow/sifo-mplg-form-core v1.9.2

Weekly downloads
3
License
MIT
Repository
github
Last release
2 years ago

SifoFormCoreModelPlugin

表单(内核)模型插件,对表单字段进行统一的管理,并提供了一系列表单操作api。

codesandbox.io

类实例化参数

参数名参数类型描述默认值
formNodeIdstringschema中的表单节点id,用来指定表单字段在schema中的范围schema根节点id
fieldKeystring/function字段标识,用来判定一个节点是否为字段及确定字段名。参数为string时,从attributes上对应string的属性判定,默认当attributes上有name属性时为字段;当参数为function时,有返回值时判定为字段。'name'
fieldChange{ changeHandler, eventName }统一绑定的值变更事件, eventName 表示变更事件名{ changeHandler: defaultChangeHandler, eventName: 'onChange' }
scrollToFirstErrorbool校验失败时,是否滚动到失败位置true

defaultChangeHandler

const defaultChangeHandler = (context, value) => {
  const { event, mApi } = context;
  mApi.setAttributes(event.key, { value }, true);
};

使用示例

import SifoFormCore from '@schema-plugin-flow/sifo-mplg-form-core';
// sifo modelPlugin
{
  modelPlugin: {
    plugin: SifoFormCore,
    argsProvider: (mId, info) => {
      return {
        // 字段的key,无返回值认为不是字段
        fieldKey: (attr) => attr.props && attr.props.name,
        fieldChange: {
          // 表单字段change使用的handler
          changeHandler: (context, e) => {
            const { event, mApi } = context;
            let val = e;
            if (typeof e === "string" || typeof e === "number") {
              val = e;
            } else if (typeof e === "object") {
              val = e.target ? e.target.value : e;
            }
            mApi.setAttributes(event.key, { value: val }, true);
          },
          eventName: "change",
        },
      };
    },
  }
}

UI封装

此模型插件只有表单内核,不包含任何UI部分,UI可按各自的情形封装。

  • 字段标识: 在字段节点时,在schema节点层和attributes层都将包含属性isField: true;
  • 默认将 value, validators, rules, validateDisabled, validateInfo 等放在 attributes 上;
  • 可在模型插件 onComponentsWrap 生命周期中包装组件以进行 FormItem 的样式相关封装;
  • 可扩展、覆盖 mApi 方法来适配相应情形;

schema 格式

默认将value, validators, rules, validateDisabled, validateInfo等放在attributes上,且 schema 节点 id 应与 fieldKey(此处指字段标识对应的值)一致。

{
  "id": "fieldKey01",
  "component": "Input",
  "attributes": {
    "name": "fieldKey01",
    "label": "字段名",
    "rules": [
      {
        "required": true,
        "message": "你需要填写项目的名称",
        "trigger": [
          "pressEnter",
          "change"
        ]
      }
    ]
  }
}

校验规则描述

  • 内置了必填、整数、最大最小值、长度和正则校验;
  • 规则描述的 message 省略时将使用内置文案;
  • trigger 省略时将使用类实例参数 fieldChange 的 eventName,除非设置 notAutoTrigger = true,此时只在调用 validate、validateAll 时触发;
  • skipEmpty 跳过对空值的校验;
  • 调用validate、validateAll 时不区分 trigger;
{
  "rules": [
    {
      "required": true,
      "message": "请填写信息",
      "trigger": [
        "pressEnter",
        "change"
      ]
    },
    {
      "type": "integer",
      "notAutoTrigger": false
    },
    {
      "max": 99.9
    },
    {
      "maxLength": 9
    },
    {
      "regExp": "/^8(.)*/",
      "message": "应以8开头",
      "skipEmpty": true
    }
  ]
}

扩展的 mApi 模型接口

方法名参数/类型返回值类型描述
getFormItemPropsid{ value, defaultValue, validators, rules, validateDisabled, validateInfo }此方法应返回FormItem的属性,包含:value, validators, rules, validateDisabled, validateInfo 等,默认在attributes中取(即使用 getAttributes 方法)。后面的模型插件可覆盖此方法来适配相应情形。
setValue(fieldKey, value)-设置指定字段的值
setValues{ fieldKey: value }-设置多个字段值
getValuefieldKeyany获取指定字段值
getValues([ fieldKeys: string[] ]){ fieldKey: value }获取所有字段值
setRules(id, rules, setType = 'merge', refresh)Promise设置校验规则,默认用 merge 模式,用 replace 模式时,会完全替换成设置的规则
addValidator(fieldKey, validatorItem)-为指定字段增加函数式校验器,要注意校验器的使用方法,见下面的validatorItem示例
removeValidator(fieldKey, validatorItem)-移除函数式校验器
disableValidate(fieldKey, disable = true)-设置校验(包含校验规则与校验函数)是否失效
validatefieldKeyPromise< validateInfo: { passed, message }[] >校验指定字段
validateAllPromise< { passed, details:{ id, fieldKey, validateInfo, passed }[] }[] >校验所有字段
scrollIntoViewfieldKey-滚动到指定字段位置

validatorItem

const validatorItem = {
  validator: (value, callback, opts:{ id, mApi, fieldKey }) => {
    // not passed
    callback({
    passed: false,
    status: 'error',
    message: 'invalidate message',
    });
    // passed
    callback();
  },
  trigger: ['eventName'], // 在何时触发,默认是类实例参数 fieldChange 的 eventName 
}
1.9.2

2 years ago

1.9.1

2 years ago

1.9.0

2 years ago

1.8.0

2 years ago

1.7.0

2 years ago

1.6.4

2 years ago

1.6.3

2 years ago

1.6.2

2 years ago

1.6.1

2 years ago

1.6.0

2 years ago

1.5.0

2 years ago

1.3.2

3 years ago

1.4.0

2 years ago

1.3.1

3 years ago

1.3.0

3 years ago

1.2.2

3 years ago

1.2.1

3 years ago

1.2.0

3 years ago

1.1.2

3 years ago

1.1.1

3 years ago

1.1.0

3 years ago

1.0.4

4 years ago

1.0.3

4 years ago

1.0.2

4 years ago

1.0.1

4 years ago

1.0.0

4 years ago