From 8a4bf239d4e95863c6b6c5c387d7602f657e4b77 Mon Sep 17 00:00:00 2001 From: "xiaosong.rxs" Date: Tue, 18 Feb 2020 17:14:53 +0800 Subject: [PATCH 1/6] feat: init meet --- packages/meet/.npmignore | 4 + packages/meet/LESENCE.md | 20 +++ packages/meet/README.md | 9 ++ packages/meet/README.zh-cn.md | 8 ++ packages/meet/build.json | 13 ++ packages/meet/package.json | 54 ++++++++ packages/meet/src/adaptor/Form.tsx | 19 +++ packages/meet/src/adaptor/FormItem.tsx | 121 ++++++++++++++++++ packages/meet/src/adaptor/context.tsx | 37 ++++++ packages/meet/src/adaptor/index.ts | 12 ++ packages/meet/src/components/Button.tsx | 95 ++++++++++++++ packages/meet/src/components/FormContent.tsx | 14 ++ packages/meet/src/components/FormFooter.tsx | 14 ++ .../meet/src/components/FormSubHeader.tsx | 14 ++ packages/meet/src/components/Gutter.tsx | 14 ++ packages/meet/src/components/index.ts | 5 + packages/meet/src/index.tsx | 93 ++++++++++++++ packages/meet/src/shared.ts | 88 +++++++++++++ packages/meet/src/types.tsx | 95 ++++++++++++++ packages/meet/tsconfig.json | 14 ++ 20 files changed, 743 insertions(+) create mode 100644 packages/meet/.npmignore create mode 100644 packages/meet/LESENCE.md create mode 100644 packages/meet/README.md create mode 100644 packages/meet/README.zh-cn.md create mode 100644 packages/meet/build.json create mode 100644 packages/meet/package.json create mode 100644 packages/meet/src/adaptor/Form.tsx create mode 100644 packages/meet/src/adaptor/FormItem.tsx create mode 100644 packages/meet/src/adaptor/context.tsx create mode 100644 packages/meet/src/adaptor/index.ts create mode 100644 packages/meet/src/components/Button.tsx create mode 100644 packages/meet/src/components/FormContent.tsx create mode 100644 packages/meet/src/components/FormFooter.tsx create mode 100644 packages/meet/src/components/FormSubHeader.tsx create mode 100644 packages/meet/src/components/Gutter.tsx create mode 100644 packages/meet/src/components/index.ts create mode 100644 packages/meet/src/index.tsx create mode 100644 packages/meet/src/shared.ts create mode 100644 packages/meet/src/types.tsx create mode 100644 packages/meet/tsconfig.json diff --git a/packages/meet/.npmignore b/packages/meet/.npmignore new file mode 100644 index 00000000000..cc5cbf1a4ed --- /dev/null +++ b/packages/meet/.npmignore @@ -0,0 +1,4 @@ +node_modules +*.log +build +__tests__ \ No newline at end of file diff --git a/packages/meet/LESENCE.md b/packages/meet/LESENCE.md new file mode 100644 index 00000000000..2bd9316cd51 --- /dev/null +++ b/packages/meet/LESENCE.md @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2015-present, Alibaba Group Holding Limited. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/packages/meet/README.md b/packages/meet/README.md new file mode 100644 index 00000000000..5ec7b32d363 --- /dev/null +++ b/packages/meet/README.md @@ -0,0 +1,9 @@ +# @formily/meet + +### Install + +```bash +npm install --save @formily/meet +``` + + diff --git a/packages/meet/README.zh-cn.md b/packages/meet/README.zh-cn.md new file mode 100644 index 00000000000..237c6ffff45 --- /dev/null +++ b/packages/meet/README.zh-cn.md @@ -0,0 +1,8 @@ +# @formily/meet + +### 安装 + +```bash +npm install --save @formily/meet +``` + diff --git a/packages/meet/build.json b/packages/meet/build.json new file mode 100644 index 00000000000..95623900c9a --- /dev/null +++ b/packages/meet/build.json @@ -0,0 +1,13 @@ +{ + "plugins": [ + [ + "rax-plugin-app", + { + "targets": [ + "web" + ] + } + ], + "rax-plugin-compat-react" + ] +} diff --git a/packages/meet/package.json b/packages/meet/package.json new file mode 100644 index 00000000000..9cff2b49ea3 --- /dev/null +++ b/packages/meet/package.json @@ -0,0 +1,54 @@ +{ + "name": "@formily/next", + "version": "1.0.0", + "license": "MIT", + "main": "lib", + "module": "esm", + "repository": { + "type": "git", + "url": "git+https://github.com/alibaba/formily.git" + }, + "types": "esm/index.d.ts", + "bugs": { + "url": "https://github.com/alibaba/formily/issues" + }, + "homepage": "https://github.com/alibaba/formily#readme", + "engines": { + "npm": ">=3.0.0" + }, + "scripts": { + "build": "ts-node --project ../../tsconfig.build.json build.ts" + }, + "peerDependencies": { + "@babel/runtime": "^7.4.4", + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + }, + "dependencies": { + "@alifd/meet": "^1.0.0-beta.25", + "@formily/react": "^0.4.4", + "@formily/types": "^0.4.4", + "@formily/utils": "^0.4.4", + "@formily/react-schema-renderer": "^1.0.0-rc.4", + "@formily/react-shared-components": "^1.0.0-rc.4", + "@formily/shared": "^1.0.0-rc.4", + "classnames": "^2.2.6", + "styled-components": "^4.1.1", + "@rax-ui/locale": "^1.0.0-beta.10", + "rax-plugin-app": "^0.2.19", + "rax": "^1.1.1", + "rax-app": "^0.1.0", + "rax-dom": "^1.0.1", + "rax-image": "^1.0.3", + "rax-link": "^1.0.1", + "rax-recyclerview": "^1.1.1", + "rax-text": "^1.0.0", + "rax-view": "^1.0.0", + "universal-navigate": "^1.0.0" + }, + "devDependencies": {}, + "publishConfig": { + "access": "public" + }, + "gitHead": "4d068dad6183e8da294a4c899a158326c0b0b050" +} diff --git a/packages/meet/src/adaptor/Form.tsx b/packages/meet/src/adaptor/Form.tsx new file mode 100644 index 00000000000..3eb7ac001ec --- /dev/null +++ b/packages/meet/src/adaptor/Form.tsx @@ -0,0 +1,19 @@ +import React, { createElement } from 'react' +import { Form } from '@alifd/meet' +import { IFormItemTopProps } from '../types' +import { FormItemProvider } from './context' +import { normalizeCol } from '../shared' + +export const CompatNextForm: React.FC< + IFormItemTopProps +> = props => { + return ( + +
+ + ) +} diff --git a/packages/meet/src/adaptor/FormItem.tsx b/packages/meet/src/adaptor/FormItem.tsx new file mode 100644 index 00000000000..36f87778a24 --- /dev/null +++ b/packages/meet/src/adaptor/FormItem.tsx @@ -0,0 +1,121 @@ +import React, { createContext } from 'react' +import { Form } from '@alifd/meet' +import { useFormItem } from './context' +import { IFormItemTopProps, ICompatItemProps } from '../types' +import { normalizeCol } from '../shared' +import { useContext } from 'react' + +const computeStatus = (props: ICompatItemProps) => { + if (props.loading) { + return 'loading' + } + if (props.invalid) { + return 'error' + } + //todo:暂时不支持 + // if (props.warnings.length) { + // return 'warning' + // } +} + +const computeHelp = (props: ICompatItemProps) => { + if (props.help) return props.help + const messages = [].concat(props.errors || [], props.warnings || []) + return messages.length ? messages : props.schema && props.schema.description +} + +const computeLabel = (props: ICompatItemProps) => { + if (props.label) return props.label + if (props.schema && props.schema.title) { + return props.schema.title + } +} + +const computeExtra = (props: ICompatItemProps) => { + if (props.extra) return props.extra +} + +function pickProps(obj: T, ...keys: (keyof T)[]): Pick { + const result: Pick = {} as any + for (let i = 0; i < keys.length; i++) { + if (obj[keys[i]] !== undefined) { + result[keys[i]] = obj[keys[i]] + } + } + return result +} + +const computeSchemaExtendProps = ( + props: ICompatItemProps +): IFormItemTopProps => { + if (props.schema) { + return pickProps( + { + ...props.schema.getExtendsItemProps(), + ...props.schema.getExtendsProps() + }, + 'prefix', + 'labelAlign', + 'labelTextAlign', + 'size', + 'labelWidth', + 'labelCol', + 'wrapperCol' + ) + } +} + +const FormItemPropsContext = createContext({}) + +export const FormItemProps = ({ children, ...props }) => ( + + {children} + +) + +export const CompatNextFormItem: React.FC = props => { + const { + prefix, + labelAlign, + labelWidth, + labelCol: contextLabelCol, + labelTextAlign, + wrapperCol: contextWrapperCol, + size + } = useFormItem() + + + const formItemProps = useContext(FormItemPropsContext) + const help = computeHelp(props) + const label = computeLabel(props) + const status = computeStatus(props) + const extra = computeExtra(props) + const itemProps = computeSchemaExtendProps(props) + const mergedProps = { + ...itemProps, + } + const { labelCol, wrapperCol } = mergedProps; + return ( + {extra}

} + labelCol={label ? normalizeCol(labelCol || contextLabelCol) : undefined} + wrapperCol={ + label ? normalizeCol(wrapperCol || contextWrapperCol) : undefined + } + {...itemProps} + {...formItemProps} + > + {props.children} +
+ ) +} diff --git a/packages/meet/src/adaptor/context.tsx b/packages/meet/src/adaptor/context.tsx new file mode 100644 index 00000000000..036fa81a394 --- /dev/null +++ b/packages/meet/src/adaptor/context.tsx @@ -0,0 +1,37 @@ +import React, { createContext, useContext } from 'react' +import { IFormItemTopProps } from '../types' + +const FormItemContext = createContext({}) + +export const FormItemProvider: React.FC = ({ + children, + prefix, + size, + labelAlign, + labelCol, + inline, + labelTextAlign, + wrapperCol, + labelWidth +}) => ( + + {children} + + ) + +FormItemProvider.displayName = 'FormItemProvider' + +export const useFormItem = () => { + return useContext(FormItemContext) +} diff --git a/packages/meet/src/adaptor/index.ts b/packages/meet/src/adaptor/index.ts new file mode 100644 index 00000000000..473c2caf971 --- /dev/null +++ b/packages/meet/src/adaptor/index.ts @@ -0,0 +1,12 @@ +import { + registerFormComponent, + registerFormItemComponent +} from '@formily/react-schema-renderer' +import { CompatNextForm } from './Form' +import { CompatNextFormItem } from './FormItem' + +registerFormComponent(CompatNextForm) + +registerFormItemComponent(CompatNextFormItem) + +export { CompatNextForm, CompatNextFormItem } diff --git a/packages/meet/src/components/Button.tsx b/packages/meet/src/components/Button.tsx new file mode 100644 index 00000000000..18b22200df7 --- /dev/null +++ b/packages/meet/src/components/Button.tsx @@ -0,0 +1,95 @@ +import React, { createElement } from 'react' +import { FormSpy, LifeCycleTypes, createVirtualBox } from '@formily/react-schema-renderer' +import { Button } from '@alifd/meet' +import { ButtonProps } from '@rax-ui/button'; +import { ISubmitProps, IResetProps } from '../types' + +const checkChildren = (children: any) => { + if (!children) return false; + if (Array.isArray(children) && !children.length) return false; + return true; +} + + +export const TextButton: React.FC = createVirtualBox( + 'textButton', + props => ( + ) + }} + + ) + } +) + +Submit.defaultProps = { + showLoading: true +} + +export const Reset: React.FC = createVirtualBox( + 'reset', + ({ + children, + forceClear, + validate, + style, + ...props + }) => { + const existChildren = checkChildren(children); + return ( + + {({ form }) => { + return ( + + ) + }} + + ) + }, +) diff --git a/packages/meet/src/components/FormContent.tsx b/packages/meet/src/components/FormContent.tsx new file mode 100644 index 00000000000..063f927ee41 --- /dev/null +++ b/packages/meet/src/components/FormContent.tsx @@ -0,0 +1,14 @@ +import React, { createElement } from 'react' +import { createVirtualBox } from '@formily/react-schema-renderer' +import { Form } from '@alifd/meet' + +export const FormContent = createVirtualBox( + 'formContent', + ({ children, ...props }) => { + return ( + + {children} + + ) + } +) diff --git a/packages/meet/src/components/FormFooter.tsx b/packages/meet/src/components/FormFooter.tsx new file mode 100644 index 00000000000..58b06719cc8 --- /dev/null +++ b/packages/meet/src/components/FormFooter.tsx @@ -0,0 +1,14 @@ +import React, { createElement } from 'react' +import { createVirtualBox } from '@formily/react-schema-renderer' +import { Form } from '@alifd/meet' + +export const FormFooter = createVirtualBox( + 'formFooter', + ({ children, ...props }) => { + return ( + + {children} + + ) + } +) diff --git a/packages/meet/src/components/FormSubHeader.tsx b/packages/meet/src/components/FormSubHeader.tsx new file mode 100644 index 00000000000..f190874c3d8 --- /dev/null +++ b/packages/meet/src/components/FormSubHeader.tsx @@ -0,0 +1,14 @@ +import React, { createElement } from 'react' +import { createVirtualBox } from '@formily/react-schema-renderer' +import { Form } from '@alifd/meet' + +export const FormSubHeader = createVirtualBox( + 'formSubHeader', + ({ title, ...props }) => { + return ( + + {title} + + ) + } +) diff --git a/packages/meet/src/components/Gutter.tsx b/packages/meet/src/components/Gutter.tsx new file mode 100644 index 00000000000..bcd8529d03a --- /dev/null +++ b/packages/meet/src/components/Gutter.tsx @@ -0,0 +1,14 @@ +import React, { createElement } from 'react' +import { createVirtualBox } from '@formily/react-schema-renderer' +import View from 'rax-view'; + +export const Gutter = createVirtualBox( + 'gutter', + ({ children, ...props }) => { + return ( + + {children} + + ) + } +) diff --git a/packages/meet/src/components/index.ts b/packages/meet/src/components/index.ts new file mode 100644 index 00000000000..63fcc5a463a --- /dev/null +++ b/packages/meet/src/components/index.ts @@ -0,0 +1,5 @@ +export * from './FormContent' +export * from './FormFooter' +export * from './FormSubHeader' +export * from './Button' +export * from './Gutter' diff --git a/packages/meet/src/index.tsx b/packages/meet/src/index.tsx new file mode 100644 index 00000000000..991cc37f2b9 --- /dev/null +++ b/packages/meet/src/index.tsx @@ -0,0 +1,93 @@ +import React from 'react' +import { + SchemaMarkupForm, + SchemaMarkupField, + InternalField, + InternalVirtualField, + InternalFieldList, + InternalForm, + SchemaField, + Schema, + FormPath, + JSONCondition, + compileObject, + FormEffectHooks, + createEffectHook, + setValidationLanguage, + setValidationLocale, + registerValidationFormats, + registerValidationRules, + registerValidationMTEngine, + useField, + useFieldState, + useForm, + useFormEffects, + useFormSpy, + useFormState, + useVirtualField, + createFormActions, + createAsyncFormActions, + connect, + registerFieldMiddleware, + registerFormComponent, + registerFormField, + registerFormFields, + registerFormItemComponent, + registerVirtualBox, + parseLinkages, + useValueLinkageEffect +} from '@formily/react-schema-renderer' +import { INextSchemaFormProps, INextSchemaFieldProps } from './types' +import './fields' +import './compat' +export const SchemaForm: React.FC = SchemaMarkupForm as any +export const Field: React.FC = SchemaMarkupField +import { mapStyledProps, mapTextComponent, normalizeCol } from './shared' + +export * from './adaptor' +export * from './components' +export * from './types' + +export default SchemaForm + +export { + SchemaMarkupField, + InternalField, + InternalVirtualField, + InternalFieldList, + InternalForm, + FormPath, + SchemaField, + Schema, + JSONCondition, + FormEffectHooks, + compileObject, + createEffectHook, + setValidationLanguage, + setValidationLocale, + registerValidationFormats, + registerValidationRules, + registerValidationMTEngine, + useField, + useFieldState, + useForm, + useFormEffects, + useFormSpy, + useFormState, + useVirtualField, + mapStyledProps, + mapTextComponent, + createFormActions, + createAsyncFormActions, + connect, + registerFieldMiddleware, + registerFormComponent, + registerFormField, + registerFormFields, + registerFormItemComponent, + registerVirtualBox, + parseLinkages, + useValueLinkageEffect, + normalizeCol, + SchemaMarkupForm +} diff --git a/packages/meet/src/shared.ts b/packages/meet/src/shared.ts new file mode 100644 index 00000000000..b0dd993c6ed --- /dev/null +++ b/packages/meet/src/shared.ts @@ -0,0 +1,88 @@ +import React from 'react' +import { PreviewText } from '@formily/react-shared-components' +import { + IConnectProps, + MergedFieldComponentProps +} from '@formily/react-schema-renderer' +import { Select } from '@alifd/meet' +// import RadioSelect from './extends/RadioSelect' +export * from '@formily/shared' + +export const mapSelectComponent = ( + Target: React.JSXElementConstructor + // props: any = {} + // fieldProps: any = {} +): React.JSXElementConstructor => { + // const { picker } = props + // if (picker === 'radio') { + // return RadioSelect + // } + return Target +} + +export const normalizeCol = ( + col: { span: number; offset?: number } | number, + defaultValue?: { span: number } +): { span: number; offset?: number } => { + if (!col) { + return defaultValue + } else { + return typeof col === 'object' ? col : { span: Number(col) } + } +} + +export const mapTextComponent = ( + Target: React.JSXElementConstructor, + props: any = {}, + fieldProps: any = {} +): React.JSXElementConstructor => { + const { editable } = fieldProps + if (editable !== undefined) { + if (editable === false) { + return PreviewText + } + } + if (Array.isArray(props.dataSource)) { + return Select + } + return Target +} + +export const acceptEnum = (component: React.JSXElementConstructor) => { + return ({ dataSource, ...others }) => { + if (dataSource) { + return React.createElement(Select, { dataSource, ...others }) + } else { + return React.createElement(component, others) + } + } +} + +export const transformDataSourceKey = (component, dataSourceKey) => { + return ({ dataSource, ...others }) => { + return React.createElement(component, { + [dataSourceKey]: dataSource, + ...others + }) + } +} + +export const mapStyledProps = ( + props: IConnectProps, + fieldProps: MergedFieldComponentProps +) => { + const { loading, errors } = fieldProps + if (loading) { + props.state = props.state || 'loading' + } else if (errors && errors.length) { + props.state = 'error' + } +} + +export const compose = (...args: any[]) => { + return (payload: any, ...extra: any[]) => { + return args.reduce((buf, fn) => { + return buf !== undefined ? fn(buf, ...extra) : fn(payload, ...extra) + }, payload) + } +} diff --git a/packages/meet/src/types.tsx b/packages/meet/src/types.tsx new file mode 100644 index 00000000000..4ee151d0707 --- /dev/null +++ b/packages/meet/src/types.tsx @@ -0,0 +1,95 @@ +import { ButtonProps } from '@alifd/meet/types/button' +import { FormProps, ItemProps } from '@alifd/meet/types/form' +import { StepProps, ItemProps as StepItemProps } from '@alifd/meet/types/step' +import { + ISchemaFormProps, + IMarkupSchemaFieldProps, + ISchemaFieldComponentProps +} from '@formily/react-schema-renderer' +import { StyledComponent } from 'styled-components' + +type ColSpanType = number | string + +export type INextSchemaFormProps = ISchemaFormProps & + FormProps & + IFormItemTopProps + +export type INextSchemaFieldProps = IMarkupSchemaFieldProps + +export interface ISubmitProps extends ButtonProps { + onSubmit?: ISchemaFormProps['onSubmit'] + showLoading?: boolean +} + +export interface IResetProps extends ButtonProps { + forceClear?: boolean + validate?: boolean +} + +export type IFormItemTopProps = React.PropsWithChildren< + Exclude< + Pick< + ItemProps, + | 'prefix' + | 'labelCol' + | 'wrapperCol' + | 'labelAlign' + | 'labelTextAlign' + | 'size' + >, + 'labelCol' | 'wrapperCol' + > & { + inline?: boolean + className?: string + style?: React.CSSProperties + labelCol?: number | { span: number; offset?: number } + wrapperCol?: number | { span: number; offset?: number } + } +> + +export interface ICompatItemProps + extends Exclude, + Partial { + labelCol?: number | { span: number; offset?: number } + wrapperCol?: number | { span: number; offset?: number } +} + +export type StyledCP

= StyledComponent< + (props: React.PropsWithChildren

) => React.ReactElement, + any, + {}, + never +> + +export type StyledCC = StyledCP & Statics + +export interface IFormButtonGroupProps { + sticky?: boolean + style?: React.CSSProperties + itemStyle?: React.CSSProperties + className?: string + align?: 'left' | 'right' | 'start' | 'end' | 'top' | 'bottom' | 'center' + triggerDistance?: number + zIndex?: number + span?: ColSpanType + offset?: ColSpanType +} + +export interface IItemProps { + title?: React.ReactText + description?: React.ReactText +} + +export interface IFormItemGridProps extends IItemProps { + cols?: Array + gutter?: number +} + +export interface IFormTextBox extends IItemProps { + text?: string + gutter?: number +} + +export interface IFormStep extends StepProps { + dataSource: StepItemProps[] +} diff --git a/packages/meet/tsconfig.json b/packages/meet/tsconfig.json new file mode 100644 index 00000000000..7bd62b594ce --- /dev/null +++ b/packages/meet/tsconfig.json @@ -0,0 +1,14 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "./lib" + }, + "include": [ + "./src/**/*.js", + "./src/**/*.ts", + "./src/**/*.tsx" + ], + "exclude": [ + "./src/__tests__/*" + ] +} From 50a5a7dbfe12ec95f8b8ae7af0324c285c97e008 Mon Sep 17 00:00:00 2001 From: "xiaosong.rxs" Date: Tue, 18 Feb 2020 17:18:06 +0800 Subject: [PATCH 2/6] feat: init meet --- docs/SUMMARY.md | 2 +- packages/antd/src/adaptor/FormItem.tsx | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md index b73ed59ab76..f7e2f8eb9a7 100644 --- a/docs/SUMMARY.md +++ b/docs/SUMMARY.md @@ -69,4 +69,4 @@ - @formily/meet-components - @formily/react-schema-renderer - @formily/react - - @formily/core \ No newline at end of file + - @formily/core diff --git a/packages/antd/src/adaptor/FormItem.tsx b/packages/antd/src/adaptor/FormItem.tsx index c75c0827244..dede25a06af 100644 --- a/packages/antd/src/adaptor/FormItem.tsx +++ b/packages/antd/src/adaptor/FormItem.tsx @@ -26,13 +26,13 @@ const computeHelp = (props: ISchemaFieldAdaptorProps) => { const messages = [].concat(props.errors || [], props.warnings || []) return messages.length ? messages.map((message, index) => - createElement( - 'span', - { key: index }, - message, - messages.length - 1 > index ? ' ,' : '' - ) + createElement( + 'span', + { key: index }, + message, + messages.length - 1 > index ? ' ,' : '' ) + ) : props.schema && props.schema.description } From add90afdc314b0a43f45f014c1724ebc2b53c2b4 Mon Sep 17 00:00:00 2001 From: "xiaosong.rxs" Date: Tue, 18 Feb 2020 18:27:18 +0800 Subject: [PATCH 3/6] Revert "feat: init meet" This reverts commit 50a5a7dbfe12ec95f8b8ae7af0324c285c97e008. --- docs/SUMMARY.md | 2 +- packages/antd/src/adaptor/FormItem.tsx | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md index f7e2f8eb9a7..b73ed59ab76 100644 --- a/docs/SUMMARY.md +++ b/docs/SUMMARY.md @@ -69,4 +69,4 @@ - @formily/meet-components - @formily/react-schema-renderer - @formily/react - - @formily/core + - @formily/core \ No newline at end of file diff --git a/packages/antd/src/adaptor/FormItem.tsx b/packages/antd/src/adaptor/FormItem.tsx index dede25a06af..c75c0827244 100644 --- a/packages/antd/src/adaptor/FormItem.tsx +++ b/packages/antd/src/adaptor/FormItem.tsx @@ -26,13 +26,13 @@ const computeHelp = (props: ISchemaFieldAdaptorProps) => { const messages = [].concat(props.errors || [], props.warnings || []) return messages.length ? messages.map((message, index) => - createElement( - 'span', - { key: index }, - message, - messages.length - 1 > index ? ' ,' : '' + createElement( + 'span', + { key: index }, + message, + messages.length - 1 > index ? ' ,' : '' + ) ) - ) : props.schema && props.schema.description } From 6564bd73ab90f565fd7a1114e4a2b04a46e1bbde Mon Sep 17 00:00:00 2001 From: "xiaosong.rxs" Date: Wed, 19 Feb 2020 17:52:08 +0800 Subject: [PATCH 4/6] feat: modify npm --- packages/meet-componments/.npmignore | 4 ++ packages/meet-componments/LESENCE.md | 20 ++++++ packages/meet-componments/README.md | 9 +++ packages/meet-componments/README.zh-cn.md | 8 +++ packages/meet-componments/build.json | 13 ++++ packages/meet-componments/package.json | 52 ++++++++++++++ packages/meet-componments/src/index.tsx | 1 + packages/meet-componments/src/registry.ts | 5 ++ packages/meet-componments/src/shared.tsx | 64 +++++++++++++++++ packages/meet-componments/src/types.ts | 88 +++++++++++++++++++++++ packages/meet-componments/tsconfig.json | 14 ++++ packages/meet/package.json | 6 +- packages/meet/src/shared.ts | 1 - 13 files changed, 280 insertions(+), 5 deletions(-) create mode 100644 packages/meet-componments/.npmignore create mode 100644 packages/meet-componments/LESENCE.md create mode 100644 packages/meet-componments/README.md create mode 100644 packages/meet-componments/README.zh-cn.md create mode 100644 packages/meet-componments/build.json create mode 100644 packages/meet-componments/package.json create mode 100644 packages/meet-componments/src/index.tsx create mode 100644 packages/meet-componments/src/registry.ts create mode 100644 packages/meet-componments/src/shared.tsx create mode 100644 packages/meet-componments/src/types.ts create mode 100644 packages/meet-componments/tsconfig.json diff --git a/packages/meet-componments/.npmignore b/packages/meet-componments/.npmignore new file mode 100644 index 00000000000..cc5cbf1a4ed --- /dev/null +++ b/packages/meet-componments/.npmignore @@ -0,0 +1,4 @@ +node_modules +*.log +build +__tests__ \ No newline at end of file diff --git a/packages/meet-componments/LESENCE.md b/packages/meet-componments/LESENCE.md new file mode 100644 index 00000000000..2bd9316cd51 --- /dev/null +++ b/packages/meet-componments/LESENCE.md @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2015-present, Alibaba Group Holding Limited. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/packages/meet-componments/README.md b/packages/meet-componments/README.md new file mode 100644 index 00000000000..d0e974659f1 --- /dev/null +++ b/packages/meet-componments/README.md @@ -0,0 +1,9 @@ +# @formily/meet-components + +### Install + +```bash +npm install --save @formily/meet-components +``` + + diff --git a/packages/meet-componments/README.zh-cn.md b/packages/meet-componments/README.zh-cn.md new file mode 100644 index 00000000000..dbb252f9132 --- /dev/null +++ b/packages/meet-componments/README.zh-cn.md @@ -0,0 +1,8 @@ +# @formily/meet-components + +### 安装 + +```bash +npm install --save @formily/meet-components +``` + diff --git a/packages/meet-componments/build.json b/packages/meet-componments/build.json new file mode 100644 index 00000000000..95623900c9a --- /dev/null +++ b/packages/meet-componments/build.json @@ -0,0 +1,13 @@ +{ + "plugins": [ + [ + "rax-plugin-app", + { + "targets": [ + "web" + ] + } + ], + "rax-plugin-compat-react" + ] +} diff --git a/packages/meet-componments/package.json b/packages/meet-componments/package.json new file mode 100644 index 00000000000..d52acf5b560 --- /dev/null +++ b/packages/meet-componments/package.json @@ -0,0 +1,52 @@ +{ + "name": "@formily/meet-components", + "version": "1.0.0", + "license": "MIT", + "main": "lib", + "module": "esm", + "repository": { + "type": "git", + "url": "git+https://github.com/alibaba/formily.git" + }, + "types": "esm/index.d.ts", + "bugs": { + "url": "https://github.com/alibaba/formily/issues" + }, + "homepage": "https://github.com/alibaba/formily#readme", + "engines": { + "npm": ">=3.0.0" + }, + "scripts": { + "build": "ts-node --project ../../tsconfig.build.json build.ts" + }, + "peerDependencies": { + "@babel/runtime": "^7.4.4", + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + }, + "dependencies": { + "@alifd/meet": "^1.0.0-beta.25", + "@formily/react": "^1.0.0-rc.4", + "@formily/react-schema-renderer": "^1.0.0-rc.4", + "@formily/react-shared-components": "^1.0.0-rc.4", + "@formily/shared": "^1.0.0-rc.4", + "classnames": "^2.2.6", + "styled-components": "^4.1.1", + "@rax-ui/locale": "^1.0.0-beta.10", + "rax-plugin-app": "^0.2.19", + "rax": "^1.1.1", + "rax-app": "^0.1.0", + "rax-dom": "^1.0.1", + "rax-image": "^1.0.3", + "rax-link": "^1.0.1", + "rax-recyclerview": "^1.1.1", + "rax-text": "^1.0.0", + "rax-view": "^1.0.0", + "universal-navigate": "^1.0.0" + }, + "devDependencies": {}, + "publishConfig": { + "access": "public" + }, + "gitHead": "4d068dad6183e8da294a4c899a158326c0b0b050" +} diff --git a/packages/meet-componments/src/index.tsx b/packages/meet-componments/src/index.tsx new file mode 100644 index 00000000000..62365fb9375 --- /dev/null +++ b/packages/meet-componments/src/index.tsx @@ -0,0 +1 @@ +export * from './registry' diff --git a/packages/meet-componments/src/registry.ts b/packages/meet-componments/src/registry.ts new file mode 100644 index 00000000000..e1b0e12c191 --- /dev/null +++ b/packages/meet-componments/src/registry.ts @@ -0,0 +1,5 @@ +import { registerFormFields } from '@formily/meet' + +export const setup = () => { + registerFormFields({}) +} diff --git a/packages/meet-componments/src/shared.tsx b/packages/meet-componments/src/shared.tsx new file mode 100644 index 00000000000..a2bc81cb020 --- /dev/null +++ b/packages/meet-componments/src/shared.tsx @@ -0,0 +1,64 @@ +import React from 'react' +import { mapTextComponent, mapStyledProps, normalizeCol } from '@formily/meet' +import { Select as MeetSelect } from '@alifd/meet' +import { SelectComponent as MeetSelectProps } from '@alifd/meet/types/select' +import styled from 'styled-components' +export * from '@formily/shared' + +export const compose = (...args: any[]) => { + return (payload: any, ...extra: any[]) => { + return args.reduce((buf, fn) => { + return buf !== undefined ? fn(buf, ...extra) : fn(payload, ...extra) + }, payload) + } +} + +interface SelectOption { + label: React.ReactText + value: any + [key: string]: any +} + +type SelectProps = MeetSelectProps & { + dataSource?: SelectOption[] +} + +const Select: React.FC = styled((props: SelectProps) => { + const { dataSource = [], ...others } = props + const children = dataSource.map(item => { + const { label, value, ...others } = item + return ( + + {label} + + ) + }) + return ( + + {children} + + ) +})` + min-width: 100px; + width: 100%; +` +export const acceptEnum = (component: React.JSXElementConstructor) => { + return ({ dataSource, ...others }) => { + if (dataSource) { + return React.createElement(Select, { dataSource, ...others }) + } else { + return React.createElement(component, others) + } + } +} + +export const transformDataSourceKey = (component, dataSourceKey) => { + return ({ dataSource, ...others }) => { + return React.createElement(component, { + [dataSourceKey]: dataSource, + ...others + }) + } +} + +export { mapTextComponent, mapStyledProps, normalizeCol } diff --git a/packages/meet-componments/src/types.ts b/packages/meet-componments/src/types.ts new file mode 100644 index 00000000000..182da45dc59 --- /dev/null +++ b/packages/meet-componments/src/types.ts @@ -0,0 +1,88 @@ +import { ButtonProps } from '@alifd/meet/types/button' +import { FormProps, FormItemProps as ItemProps } from '@alifd/meet/types/form' +import { + ISchemaFormProps, + IMarkupSchemaFieldProps, + ISchemaFieldComponentProps + // FormPathPattern +} from '@formily/react-schema-renderer' +import { PreviewTextConfigProps } from '@formily/react-shared-components' +import { StyledComponent } from 'styled-components' + +type ColSpanType = number | string + +export type IAntdSchemaFormProps = Omit< + FormProps, + 'onSubmit' | 'defaultValue' +> & + IFormItemTopProps & + PreviewTextConfigProps & + ISchemaFormProps + +export type IAntdSchemaFieldProps = IMarkupSchemaFieldProps + +export interface ISubmitProps extends ButtonProps { + onSubmit?: ISchemaFormProps['onSubmit'] + showLoading?: boolean +} + +export interface IResetProps extends ButtonProps { + forceClear?: boolean + validate?: boolean +} + +export type IFormItemTopProps = React.PropsWithChildren< + Exclude< + Pick, + 'labelCol' | 'wrapperCol' + > & { + inline?: boolean + className?: string + style?: React.CSSProperties + labelCol?: number | { span: number; offset?: number } + wrapperCol?: number | { span: number; offset?: number } + } +> + +export interface ISchemaFieldAdaptorProps + extends Omit, + Partial { + labelCol?: number | { span: number; offset?: number } + wrapperCol?: number | { span: number; offset?: number } +} + +export type StyledCP

= StyledComponent< + (props: React.PropsWithChildren

) => React.ReactElement, + any, + {}, + never +> + +export type StyledCC = StyledCP & Statics + +export interface IFormButtonGroupProps { + sticky?: boolean + style?: React.CSSProperties + itemStyle?: React.CSSProperties + className?: string + align?: 'left' | 'right' | 'start' | 'end' | 'top' | 'bottom' | 'center' + triggerDistance?: number + zIndex?: number + span?: ColSpanType + offset?: ColSpanType +} + +export interface IItemProps { + title?: React.ReactText + description?: React.ReactText +} + +export interface IFormItemGridProps extends IItemProps { + cols?: Array + gutter?: number +} + +export interface IFormTextBox extends IItemProps { + text?: string + gutter?: number +} diff --git a/packages/meet-componments/tsconfig.json b/packages/meet-componments/tsconfig.json new file mode 100644 index 00000000000..7bd62b594ce --- /dev/null +++ b/packages/meet-componments/tsconfig.json @@ -0,0 +1,14 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "./lib" + }, + "include": [ + "./src/**/*.js", + "./src/**/*.ts", + "./src/**/*.tsx" + ], + "exclude": [ + "./src/__tests__/*" + ] +} diff --git a/packages/meet/package.json b/packages/meet/package.json index 9cff2b49ea3..d89f1e0b41c 100644 --- a/packages/meet/package.json +++ b/packages/meet/package.json @@ -1,5 +1,5 @@ { - "name": "@formily/next", + "name": "@formily/meet", "version": "1.0.0", "license": "MIT", "main": "lib", @@ -26,9 +26,7 @@ }, "dependencies": { "@alifd/meet": "^1.0.0-beta.25", - "@formily/react": "^0.4.4", - "@formily/types": "^0.4.4", - "@formily/utils": "^0.4.4", + "@formily/react": "^1.0.0-rc.4", "@formily/react-schema-renderer": "^1.0.0-rc.4", "@formily/react-shared-components": "^1.0.0-rc.4", "@formily/shared": "^1.0.0-rc.4", diff --git a/packages/meet/src/shared.ts b/packages/meet/src/shared.ts index b0dd993c6ed..98f0550a62f 100644 --- a/packages/meet/src/shared.ts +++ b/packages/meet/src/shared.ts @@ -5,7 +5,6 @@ import { MergedFieldComponentProps } from '@formily/react-schema-renderer' import { Select } from '@alifd/meet' -// import RadioSelect from './extends/RadioSelect' export * from '@formily/shared' export const mapSelectComponent = ( From df7fc6cc5059a29a85602990261f7d21e11d1e9e Mon Sep 17 00:00:00 2001 From: "xiaosong.rxs" Date: Wed, 19 Feb 2020 19:24:56 +0800 Subject: [PATCH 5/6] feat: init build --- packages/meet/build.ts | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 packages/meet/build.ts diff --git a/packages/meet/build.ts b/packages/meet/build.ts new file mode 100644 index 00000000000..5e869726c0b --- /dev/null +++ b/packages/meet/build.ts @@ -0,0 +1,37 @@ +import { compile, getCompileConfig } from '../../scripts/build' +import ts from 'typescript' +import tsImportPluginFactory from 'ts-import-plugin' +import glob from 'glob' + +const transformer = tsImportPluginFactory({ + libraryName: '@alifd/meet-componments', + //style: importPath => `${importPath}/style`, +}) + +function buildESM() { + const { fileNames, options } = getCompileConfig(require.resolve('./tsconfig.json'), { + outDir: './esm', + module: ts.ModuleKind.ESNext + }) + compile(fileNames, options, { before: [transformer] }) + console.log('esm build successfully') +} + +function buildES5() { + const rootNames = glob.sync('./esm/**/*.js') + compile(rootNames, { + allowJs: true, + esModuleInterop: true, + moduleResolution: ts.ModuleResolutionKind.NodeJs, + module: ts.ModuleKind.CommonJS, + target: ts.ScriptTarget.ES5, + outDir: './lib', + declaration: false, + }) + console.log('es5 build successfully') +} + + + +buildESM() +buildES5() From f6059e0661a07a939bbac8c84c7450766a5d7235 Mon Sep 17 00:00:00 2001 From: "xiaosong.rxs" Date: Wed, 19 Feb 2020 19:25:42 +0800 Subject: [PATCH 6/6] feat: init build --- packages/meet-componments/build.ts | 37 ++++++++++++++++++++++++++++++ packages/meet/build.ts | 2 +- 2 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 packages/meet-componments/build.ts diff --git a/packages/meet-componments/build.ts b/packages/meet-componments/build.ts new file mode 100644 index 00000000000..5e869726c0b --- /dev/null +++ b/packages/meet-componments/build.ts @@ -0,0 +1,37 @@ +import { compile, getCompileConfig } from '../../scripts/build' +import ts from 'typescript' +import tsImportPluginFactory from 'ts-import-plugin' +import glob from 'glob' + +const transformer = tsImportPluginFactory({ + libraryName: '@alifd/meet-componments', + //style: importPath => `${importPath}/style`, +}) + +function buildESM() { + const { fileNames, options } = getCompileConfig(require.resolve('./tsconfig.json'), { + outDir: './esm', + module: ts.ModuleKind.ESNext + }) + compile(fileNames, options, { before: [transformer] }) + console.log('esm build successfully') +} + +function buildES5() { + const rootNames = glob.sync('./esm/**/*.js') + compile(rootNames, { + allowJs: true, + esModuleInterop: true, + moduleResolution: ts.ModuleResolutionKind.NodeJs, + module: ts.ModuleKind.CommonJS, + target: ts.ScriptTarget.ES5, + outDir: './lib', + declaration: false, + }) + console.log('es5 build successfully') +} + + + +buildESM() +buildES5() diff --git a/packages/meet/build.ts b/packages/meet/build.ts index 5e869726c0b..74bfdc62644 100644 --- a/packages/meet/build.ts +++ b/packages/meet/build.ts @@ -4,7 +4,7 @@ import tsImportPluginFactory from 'ts-import-plugin' import glob from 'glob' const transformer = tsImportPluginFactory({ - libraryName: '@alifd/meet-componments', + libraryName: '@alifd/meet', //style: importPath => `${importPath}/style`, })