alibaba/noform

View on GitHub
packages/next-components/src/components/Clear.tsx

Summary

Maintainability
C
1 day
Test Coverage
import React from 'react'
import { Consumer, ListLifeCycleTypes } from '@alist/react'
import { createControllerBox } from '@formily/next'
import { Button } from '@alifd/next'

const InternalClear = (props) => {
    const { form, render, children, content, ...others } = props
    return <Consumer>
        {(list) => {            
            if (list) {
                const { clear } = list
                if (typeof render === 'function') {
                    return render(clear)
                }
                return <Button {...others} onClick={() => {
                    clear()
                }}>
                    {content || children}
                </Button>
            } else {
                return <Button {...others} onClick={() => {
                    form.notify(ListLifeCycleTypes.ON_FORM_LIST_CLEAR, form)
                }}>
                    {content || children}
                </Button>
            }
        }}
    </Consumer>
}

const Clear = createControllerBox('alist-clear', (props) => {
    const { form, schema } = props
    const componentProps = schema.getExtendsComponentProps()
    return <InternalClear {...componentProps} form={form} />
})

export {
    Clear,
    InternalClear,
}