From 06431449e6b6ab7b5b8d95143f39bfb97cf01845 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8F=B6=E6=9E=AB?= <7971419+crazyair@users.noreply.github.com> Date: Mon, 8 Jun 2020 17:55:36 +0800 Subject: [PATCH] feat: add view (#23) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: 一些修改 * feat: plugins 删除 * fix: 修复 scenes 逻辑 * feat: 添加 view * feat: 修改 demo * refactor: useSubmit 重构 * feat: submit 重构 * fix: test * feat: 搜索场景完善 * fix: 修复 placeholder * test: snap * fix: 修复渲染 dom 样式问题 去掉 scens 参数 * feat: custom 支持 showType * fix: 单选自定义 render * test: 完善单元测试 * test: test * feat: add flags * test: test * test: test * test: test * test: test * test: test * test: test * test: test * test: test * test: test * feat: 0.8.5 * feat: 添加日期区间 * test: remove _item_type * feat: 添加初步对比功能 * feat: 开始做 isShow Function 判断 * feat: items 添加 isshow function * feat: 如果字段是 undefined 则不需要执行 set 了 * fix: 修复值渲染问题 * fix: test * fix: test * feat: 代码优化 * fix: List 透传 scenes * refactor: format 修改为 2 个参数 * refactor: 删除 showType * feat: 添加 modify * feat: date 重构格式化方式 * feat: 完善基础 diff view * fix: 修复报错抛出 * feat: test * feat: list 处理参数 * fix: 修复会改 name 源数据 * feat: 优化代码 * feat: 开始做 ModalForm * feat: 删除 required * feat: 更新规则 * feat: 添加 space * feat: 添加校验 * feat: 终于可以多层级有动态对比交互 * fix: test * chore: 此方案不通,不太好 * feat: 完善 diff 逻辑 * chore: 删除未使用 * feat: vercel Co-authored-by: crazyair --- .eslintrc.js | 49 +-- .github/workflows/{now.yml => vercel.yml} | 2 +- docs/apis/hooks.md | 4 +- docs/apis/index.md | 1 - docs/examples/demo/demo1.tsx | 20 +- docs/examples/demo/demo3.tsx | 12 +- docs/examples/demo/diff.tsx | 291 +++++++++++++++++ docs/examples/demo/edit.tsx | 3 +- docs/examples/demo/search.tsx | 2 +- docs/examples/demo/shouldUpdate.tsx | 4 +- docs/examples/index.md | 12 + docs/types/demo/index.tsx | 8 +- docs/types/demo/list.tsx | 1 - docs/types/demo/oneLine.tsx | 12 +- docs/types/demo/secureButton.tsx | 2 +- docs/types/demo/space.tsx | 28 ++ docs/types/demo/submit.tsx | 2 +- docs/types/space.md | 25 ++ package.json | 65 ++-- packages/yforms/src/YForm/Context.ts | 9 +- packages/yforms/src/YForm/Form.tsx | 44 +-- packages/yforms/src/YForm/ItemChildren.tsx | 44 +-- packages/yforms/src/YForm/Items.tsx | 115 ++++--- packages/yforms/src/YForm/ItemsType.tsx | 122 +++---- packages/yforms/src/YForm/ItemsTypeModify.tsx | 302 ++++++++++++++++++ .../src/YForm/__test__/YFormItems.test.tsx | 6 +- .../__snapshots__/Submit.test.tsx.snap | 10 +- .../__snapshots__/YFormItems.test.tsx.snap | 10 +- .../__snapshots__/index.test.tsx.snap | 38 +-- packages/yforms/src/YForm/__test__/fields.tsx | 1 - .../yforms/src/YForm/__test__/index.test.tsx | 6 +- .../src/YForm/component/ComponentView.tsx | 124 +++---- packages/yforms/src/YForm/component/Diff.tsx | 87 +++++ packages/yforms/src/YForm/component/List.tsx | 56 ++-- .../yforms/src/YForm/component/OneLine.tsx | 26 +- packages/yforms/src/YForm/component/Space.tsx | 31 ++ .../yforms/src/YForm/component/Submit.tsx | 7 - .../yforms/src/YForm/component/TextArea.tsx | 23 -- packages/yforms/src/YForm/index.less | 9 + packages/yforms/src/YForm/index.ts | 4 +- packages/yforms/src/YForm/scenes.tsx | 102 ++++-- packages/yforms/src/YForm/scenesComps.tsx | 54 ++++ packages/yforms/src/YForm/utils.ts | 22 +- now.json => vercel.json | 0 44 files changed, 1303 insertions(+), 492 deletions(-) rename .github/workflows/{now.yml => vercel.yml} (84%) create mode 100644 docs/examples/demo/diff.tsx create mode 100644 docs/types/demo/space.tsx create mode 100644 docs/types/space.md create mode 100644 packages/yforms/src/YForm/ItemsTypeModify.tsx create mode 100644 packages/yforms/src/YForm/component/Diff.tsx create mode 100644 packages/yforms/src/YForm/component/Space.tsx create mode 100644 packages/yforms/src/YForm/scenesComps.tsx rename now.json => vercel.json (100%) diff --git a/.eslintrc.js b/.eslintrc.js index b0ea627..41de9b7 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,47 +1,24 @@ module.exports = { - root: true, - parser: '@typescript-eslint/parser', - plugins: ['@typescript-eslint', 'react-hooks'], - extends: ['airbnb-typescript', 'prettier/@typescript-eslint'], + plugins: ['react-hooks'], + extends: [require.resolve('@umijs/fabric/dist/eslint')], rules: { 'react-hooks/rules-of-hooks': 'error', // 检查 Hook 的规则 'react-hooks/exhaustive-deps': 'error', // 检查 effect 的依赖 - 'jsx-a11y/heading-has-content': 0, - 'react/destructuring-assignment': 0, - 'react/prop-types': 0, - 'jsx-a11y/label-has-associated-control': 0, - 'arrow-body-style': 0, - 'import/no-extraneous-dependencies': 0, - 'no-param-reassign': 0, - 'object-curly-newline': 0, - 'import/prefer-default-export': 0, - 'react/jsx-indent': 0, - 'react/jsx-indent-props': 0, - 'comma-dangle': 0, - 'no-template-curly-in-string': 0, - 'implicit-arrow-linebreak': 0, - 'react/jsx-one-expression-per-line': 0, - 'import/no-cycle': 0, + 'import/no-unresolved': 0, 'no-underscore-dangle': 0, - 'consistent-return': 0, - 'max-len': 0, - 'operator-linebreak': 0, - 'no-shadow': 0, - 'prefer-promise-reject-errors': 0, - 'no-else-return': 0, + 'import/no-extraneous-dependencies': 0, + 'global-require': 0, + 'import/no-dynamic-require': 0, + 'react/sort-comp': 0, + 'jsx-a11y/aria-role': 0, 'no-void': 0, + 'no-param-reassign': 0, 'no-control-regex': 0, 'no-plusplus': 0, + 'consistent-return': 0, + 'no-template-curly-in-string': 0, + 'prefer-promise-reject-errors': 0, 'no-lonely-if': 0, - 'no-undef': 0, - 'no-tabs': 0, - 'no-mixed-spaces-and-tabs': 0, - 'import/no-unresolved': [0], - 'no-unused-expressions': 0, - 'jsx-a11y/click-events-have-key-events': 0, - 'jsx-a11y/anchor-is-valid': 0, - 'jsx-a11y/no-static-element-interactions': 0, - 'arrow-parens': 0, - '@typescript-eslint/camelcase': 0, + 'no-shadow': 0, }, }; diff --git a/.github/workflows/now.yml b/.github/workflows/vercel.yml similarity index 84% rename from .github/workflows/now.yml rename to .github/workflows/vercel.yml index d95ca98..761f09b 100644 --- a/.github/workflows/now.yml +++ b/.github/workflows/vercel.yml @@ -16,4 +16,4 @@ jobs: run: | yarn yarn doc:build - now --token=$ZEIT_TOKEN --prod --confirm --force + vercel --token=$ZEIT_TOKEN --prod --confirm --force diff --git a/docs/apis/hooks.md b/docs/apis/hooks.md index 12b26d7..4dcc2a5 100644 --- a/docs/apis/hooks.md +++ b/docs/apis/hooks.md @@ -46,7 +46,7 @@ export default () => { onFormatFieldsValue([ { name: 'append_field', format: () => '追加字段' }, - { name: 'name', format: ({ name }) => `${name}_改变字段值` }, + { name: 'name', format: (value) => `${value}_改变字段值` }, ]); return ( @@ -104,7 +104,7 @@ export default () => { return ( <>

{typeName}

- + {[{ type: 'input', label: '姓名', name: 'name' }, { type: 'submit' }]} diff --git a/docs/apis/index.md b/docs/apis/index.md index 6d456f7..5ec7238 100644 --- a/docs/apis/index.md +++ b/docs/apis/index.md @@ -17,7 +17,6 @@ nav: | -------- | ---------------- | -------------------------- | ------ | | isShow | 是否渲染 | boolean | - | | disabled | 字段是否全部禁用 | boolean | - | -| required | 字段是否全部必填 | boolean | - | | children | 数据源 | YFormItemProps['children'] | - | ## YForm diff --git a/docs/examples/demo/demo1.tsx b/docs/examples/demo/demo1.tsx index 4cba02b..cf9e3cf 100644 --- a/docs/examples/demo/demo1.tsx +++ b/docs/examples/demo/demo1.tsx @@ -68,7 +68,6 @@ const Demo = () => { onSave={onSave} scenes={{ view: disabled }} params={{ type: 'view' }} - required > {[ // { @@ -176,18 +175,23 @@ const Demo = () => { { label: '文本', name: 'text', type: 'text' }, { label: '自定义渲染', - showType: 'input', type: 'custom', name: 'custom', component: , }, - { type: 'submit' }, { - type: 'button', - componentProps: { - onClick: () => message.success(JSON.stringify(form.getFormatFieldsValue())), - children: '获取提交前数据', - }, + type: 'space', + items: [ + { type: 'submit' }, + { + type: 'button', + noStyle: true, + componentProps: { + onClick: () => message.success(JSON.stringify(form.getFormatFieldsValue())), + children: '获取提交前数据', + }, + }, + ], }, ]} diff --git a/docs/examples/demo/demo3.tsx b/docs/examples/demo/demo3.tsx index 79bf3f7..14a7bf2 100644 --- a/docs/examples/demo/demo3.tsx +++ b/docs/examples/demo/demo3.tsx @@ -21,9 +21,6 @@ const Demo: React.FC = () => { console.log('Failed:', errorInfo); }; - const onSave = async (values: any) => { - console.log('values:', values); - }; return ( <>