npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@activity-maker/linglong-setting-form

v1.0.7

Published

用于快速创建玲珑系统配置表单的工具库。

Downloads

23

Readme

linglong-setting-form

用于快速创建玲珑系统配置表单的工具库。

简介

玲珑系统 的组件由 实际运行组件(index)、编辑预览组件(preview)和编辑配置组件(setting) 三部分组成。其中编辑配置组件的编写是枯燥无味的,因此就有了这个库,它可以通过固定的配置项,快速生成一个配置表单,节省开发的时间。

概念

  • 控件:用户真正交互的组件本身,具备数据处理能力(接收输入、触发回调),如 InputSelectRadio 等。

  • 表单域:由 Form.Item + 控件 组合而成的组件,具备同 Form 交互的能力(通过 name 注册后,数据由 Form 统一管理),如

    <Form.Item label="演示" name="pr">
      <Input />
    </Form.Item>

安装

yarn add @xmly/linglong-setting-form --registry="http://xnpm.ximalay.com"
或
npm install @xmly/linglong-setting-form --registry="http://xnpm.ximalay.com"

也可以通过 script 标签进行引入,

<link
	rel="stylesheet"
	href="//s1.xmcdn.com/yx/linglong-setting-form/last/lib/umd/linglong-setting-form.css"
/>
<script src="//s1.xmcdn.com/yx/linglong-setting-form/last/lib/umd/linglong-setting-form.js"></script>

发布

需要在 node v10 环境编译,否则 build 编译会遇到问题

  1. 更新版本号、changelog

    yarn release
  2. 发布 xnpm

    yarn publish
  3. 云效发布静态资源(主干模式),直接重新部署(一直到正式环境)就行:http://yunxiao.xmly.work/titan/appcenter/5126/overview

  4. 替换掉 activity-maker-adminpublic/index.html 引用此库的版本号

  5. 替换掉 create-component-app/component-devtoolspublic/index.html 引用此库的版本号

使用

工具库对外暴露了 SettingForm 组件和 LingLongForm 组件,可以像这样引入它们:

import {
 SettingForm,
 LingLongForm,
 FormField,
} from '@xmly/linglong-setting-form';
import '@xmly/linglong-setting-form/lib/style.css';

完整示例

项目的 示例 提供了完整的使用示范。

SettingForm

工具包将内部的表单实现暴露出来,可以用来创造任何类型的表单。

const fields: FormField[] = [
  { type: 'Input', label: 'Input-inline', name: 'input-inline', llInline: true },
  { type: 'Input', label: 'Input', name: 'input'},
]

function Demo() {
  return (
    <SettingForm
      defaultData={{ 'input-inline': 123, input: 321 }}
      onDataChange={console.log}
      fields={fields}
    />
  );
}

LingLongForm

在 SettingForm 基础上进行封装,用来生成玲珑系统样式的,带有右侧 tab 标签样式的表单。

const fields: FormField[] = [
  { type: 'Input', label: 'Input-inline', name: 'input-inline', llInline: true },
  { type: 'Input', label: 'Input', name: 'input'},
]

const formTabs = [
  { tabTitle: '属性', fields: fields },
  { tabTitle: '行为', fields: fields },
];

function Demo() {
  return (
    <LingLongForm
      formTabs={formTabs}
      defaultData={{ 'input-inline': 123, input: 321 }}
      onDataChange={console.log}
    />
  );
}

ConditionalRender

为了处理常见的表单联动的场景,对 antd#Form.Itemdependencies 属性进行封装,已提升易用性。

组件属性:

  • dependencies 被依赖表单项的数据
  • when 判断是否进行渲染的函数,会将 dependencies 表单项的当前值以数组传入
  • render 渲染函数,会将 dependencies 表单项的当前值以数组传入
  • fallback 回退函数,默认返回 null,会将 dependencies 表单项的当前值以数组传入

SelfRenderControl

为了支持更加复杂的场景,工具库支持自定义表单控件,typeSelfRenderControl,通过向 field 配置传入 render 方法来实现自定义的渲染逻辑。

render 方法接收 valueonChange 两个固定属性,另外传递给 field 配置的 controlProps 也会传递给 render 方法。

你可以在 render 方法中使用外层的属性,但更加推荐的方式是将这些属性传给 controlProps,再从 render 的参数中获取,1. 这样控件的属性都在 controlProps 中,具有更好的一致性;2. 这样可以一目了然的知道控件所需的属性有哪些,在进行组件复用或者重构时会更容易一些。

关于自定义控件的写法可以参考 antd#自定义表单控件项目示例

SelfRenderField

SelfRenderField 将表单域的控制权完全交给开发者,在 typeSelfRenderField 时,SettingFrom 会执行配置中传入的 render 方法,将 Field 配置中的属性传入,其他的工作就需要开发者自己来做了,比如怎么添加 Form.Item 实现数据注册,添加几个 Form.Item 才能满足需要等等。

配置项

defaultData?: any; onDataChange?: (val: any) => void; onImmediateChange?: (val: any) => void; form?: FormInstance; name?: string; fields?: FormField[]; component?: FormProps['component'];

defaultData

表单的数据

onDataChange

表单域或表单值发生变化时的回调,传入表单的全量数据,由于 debounce 会延迟 200ms 触发

onImmediateChange

表单域或表单值发生变化时的回调,传入表单的全量数据,立即触发

form

antdFormInstance,当你需要使用 form 的方法时,可以自己初始化一个,然后将生成的 form 传入 SettingForm。如:

const [form] = Form.useForm();

useEffect(() => {
	console.log(form.getFieldsValue());
}, []);

return <SettingForm form={form} {...props} />;

name

表单的命名空间,给定值的话,form 下的表单域都会组织在该命名空间下。

fields

表单域的数组

component

以什么标签渲染的 form 元素,传入 false 表示不渲染元素。

在 form 发生嵌套时,HTML 会提示异常,此时可以将被嵌套表单的 component 属性指定为 false

formTabs(LingLongForm 独有)

用于渲染玲珑系统样式的、带有右侧 tab 标签样式的表单

组件类型

渲染组件

工具库支持了 antd 内置如下控件

  • Input
  • InputNumber
  • TextArea
  • Slider
  • Switch
  • DatePicker
  • TimePicker
  • Select
  • RadioGroup
  • CheckboxGroup

另外内置了系统中常用的控件

  • ColorPicker
  • ImageUpload
  • Background

为了方便使用,在这些控件的基础上封装了如下的表单域

  • ImageUploadField
  • BackgroundField
  • ChildListField
  • NofityField

为了满足多样的需求,工具库还支持自定义渲染控件和表单域

  • SelfRenderControl
  • SelfRenderField

功能组件

功能组件不承担组件渲染的任务,主要是做逻辑的控制,目前仅支持条件渲染功能

  • ConditionalRender

关于 controlProps

由于控件都由 SettingForm 统一处理,控件需要的属性要传递给 controlProps 字段,如 readonlydisabled 等。

const filed: Field = {
	type: 'Input',
	label: '演示',
	name: 'pr',
	controlProps: {
		readonly: true,
		disabled: true,
	},
};