| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245 |
- import React, { FunctionComponent } from 'react';
- import { storiesOf } from '@storybook/react';
- import { Form, useFormState, useFormApi, withField, Input, Button, Upload, withFormApi, withFormState } from '../../index';
- import { values } from 'lodash';
- import { Modal } from '../../modal';
- const stories = storiesOf('Form', module);
- import { FormApiContext } from '../context';
- import type { FormApi, FormFCChild, FormState } from '../interface';
- const ModalForm = <Values extends Record<string, any> = any> (props) => {
- return <div>
- <Form<Values>>
- </Form>
- </div>
- };
- const treeData = [
- {
- label: '浙江省',
- value: 'zhejiang',
- key: '0',
- children: [
- {
- label: '杭州市',
- value: 'hangzhou',
- key: '0-0',
- children: [
- {
- label: '西湖区',
- value: 'xihu',
- key: '0-0-0',
- },
- {
- label: '萧山区',
- value: 'xiaoshan',
- key: '0-0-1',
- },
- {
- label: '临安区',
- value: 'linan',
- key: '0-0-2',
- },
- ],
- },
- {
- label: '宁波市',
- value: 'ningbo',
- key: '0-1',
- children: [
- {
- label: '海曙区',
- value: 'haishu',
- key: '0-1-0',
- },
- {
- label: '江北区',
- value: 'jiangbei',
- key: '0-1-1',
- },
- ],
- },
- ],
- },
- ];
- const htmlInput = (props: any) => {
- let value = props.value || '';
- delete props.validateStatus; // prevent props being transparently transmitted to DOM
- return <input {...props} value={value} />;
- };
- const FieldB = withField(Input);
- const FieldA = withField(htmlInput, { valueKey: 'value', onKeyChangeFnName: 'onChange', valuePath: 'target.value' });
- const Fields: FunctionComponent<FormFCChild> = ({ formState, values, formApi }) => {
- const ref = React.useRef();
- return (
- <>
- <Form.Rating field='test' className='fe' count={2} ref={ref} />
- <Form.Input field='test' ref={ref} />
- <Input size='default' showClear insetLabel />
- <FieldB insetLabel placeholder='fe' fieldClassName='fefe' field='custom' />
- <Button onClick={() => formApi.setValue('fieldA', 'fe')}>set</Button>
- <Form.Select field='test' ref={ref}>
- <Form.Select.Option value="f1"></Form.Select.Option>
- <Form.Select.Option value="f2"></Form.Select.Option>
- </Form.Select>
- <Form.Input field="UserName" label="用户名" ref={ref} />
- <Form.TextArea field="textarea" onKeyDown={(v: any) => console.log(v)} ref={ref} />
- <Form.Input field="Password" label="密码" />
- <Form.InputNumber field="number" ref={ref} />
- <Form.Rating field="rating" />
- <Form.Switch field="switch" checkedText="on" uncheckedText="off" ref={ref} />
- <Form.Cascader
- placeholder="请选择所在地区"
- field="area"
- ref={ref}
- label={{ text: '123', required: true, extra: 123 }}
- treeData={treeData}
- ></Form.Cascader>
- <Form.TimePicker field="time" minuteStep={2} ref={ref} />
- <Form.AutoComplete field="fe" />
- <Form.TreeSelect field="treeSelect" treeData={treeData} ref={ref} />
- <Form.Slider field="slider" ref={ref} />
- <Form.DatePicker field="datepicker" ref={ref} />
- <Form.CheckboxGroup
- field="type"
- ref={ref}
- label="申请类型(CheckboxGroup)"
- initValue={['user', 'admin']}
- rules={[{ required: true }]}
- >
- <Form.Checkbox value="admin">admin</Form.Checkbox>
- <Form.Checkbox value="user">user</Form.Checkbox>
- <Form.Checkbox value="guest">guest</Form.Checkbox>
- <Form.Checkbox value="root">root</Form.Checkbox>
- </Form.CheckboxGroup>
- <Form.RadioGroup
- field="radio"
- ref={ref}
- label="是否独占资源(Radio)"
- rules={[{ type: 'boolean' }, { required: true, message: '必须选择是否独占 ' }]}
- >
- <Form.Radio value={1}>是</Form.Radio>
- <Form.Radio value={0}>否</Form.Radio>
- </Form.RadioGroup>
- <Form.Checkbox field='abc' noLabel>
- 我已阅读并清楚相关规定(Checkbox)
- </Form.Checkbox>
- <Form.Label text="fe" required />
- <Form.ErrorMessage error="errorText" />
- <FieldB field="custom" />
- <FieldA field="cuB" />
- <Form.TagInput field='tagInput' ref={ref} ></Form.TagInput>
- <Form.Upload ref={ref} fileName='semi' action='https://test.com' field='file' />
- <Form.Slot />
- <code style={{ marginTop: 30 }}>{JSON.stringify(formState)}</code>
- </>
- )
- };
- stories.add('Form', () => <Form>{Fields}</Form>);
- interface IProps {
- [x:string]: any;
- }
- interface IState {
- visible: boolean;
- }
- interface FData {
- test: boolean;
- test2: boolean;
- test3: string;
- test4: {
- event: string,
- },
- testK: boolean;
- // [x: string]: any;
- }
- class Demo extends React.Component<IProps, IState> {
- constructor(props:any) {
- super(props);
- this.state = { visible: false};
- }
- getFormApi(formApi: FormApi<FData>) {
- formApi.getValue()
- }
- render() {
- const { visible } = this.state;
- return (
- <>
- <Form<FData>
- getFormApi={this.getFormApi}
- onSubmit={values => console.log(values.test2)}
- onChange={formState => formState.values.test}
- validateFields={values => ({ test4: 'test4 empty', test2: '' }) }
- >
- </Form>
- </>
- );
- }
- }
- stories.add('Form render', () => <Form render={({values, formApi, formState}) => <div></div>}></Form>);
- interface CodeProps {
- type?: 'email' | 'phone';
- test?: 'a' | 'b' | 'c';
- onSend?: () => Promise<void>
- }
- class CodeC extends React.Component<CodeProps & { formState?: FormState, formApi?: FormApi }, IState> {
- state: IState = {
- visible: false,
- };
- render() {
- const { formState } = this.props;
- return <div>
- t
- </div>;
- }
- }
- const t = () => (<CodeC type='email'></CodeC>);
- const DoubleWrap = withFormState(withFormApi(CodeC));
- const OneWrap = withFormApi(CodeC);
- stories.add('Form children', () => <Form>
- {({ formState, formApi, values }) => (
- <>
- <Form.Input field='fe'>
- </Form.Input>
-
- <DoubleWrap type='email' test='c'></DoubleWrap>
- <OneWrap type='email'></OneWrap>
- <CodeC type='email'></CodeC>
-
- <Form.DatePicker field='role'/>
- </>
- )
- }
- </Form>);
|