/* eslint-disable */ import React, { useState, useLayoutEffect, Component } from 'react'; import { Button, Modal, TreeSelect, Row, Col, Avatar, Select as BasicSelect, Form, useFormState, useFormApi, useFieldApi, useFieldState, withFormState, withFormApi, withField, ArrayField, AutoComplete, Collapse, Space, TextArea, Icon } from '../../../index'; import { IconPlusCircle, IconMinusCircle, } from '@douyinfe/semi-icons'; import { ComponentUsingFormState } from '../Hook/hookDemo'; const { Input, Select, DatePicker, Switch, Slider, CheckboxGroup, Checkbox, RadioGroup, Radio, TimePicker, InputNumber, InputGroup } = Form; class ArrayFieldCollapseDemo extends React.Component { constructor() { super(); this.state = { actions: [], }; } renderItems(arrayFields, values) { console.log(values); return ( {JSON.stringify(values)} {arrayFields.map(({ field, key, remove }, i) => ( ))} {/* {arrayFields.length && values.actions[0].name ? '2' : '1'} */} ); } render() { let { actions } = this.state; return (
{({ values }) => ( {({ add, arrayFields }) => ( {this.renderItems(arrayFields, values)} )} )}
); } } // 使用Form Props设置 ArrayField的initValues class ArrayFieldWithFormInitValues extends React.Component { constructor() { super(); this.state = { data: { c: 'c', effects: [ { name: 'form-level-init-sugar', time: 'form-level-init-3min', otherKey: 1 }, { name: 'form-level-init-bacon', time: 'form-level-init-6min', otherKey: 2, key: 343 }, ], }, flag: true }; this.getFormApi = this.getFormApi.bind(this); this.change = this.change.bind(this); } change = () => { let number = this.formApi.getValue('number'); let newData = Array.from({ length: number }, (v, i) => ({ name: `${i}-name`, time: `${i}-time` })); console.log(newData); this.formApi.setValue('effects', newData); } getFormApi(formApi) { this.formApi = formApi; } render() { return (
console.log('onchange:' + v)} onValueChange={(...v) => console.log('onValueChange:' + v)} getFormApi={this.getFormApi} initValues={this.state.data} > {/* */} {({ add, arrayFields }) => ( { arrayFields.map(({ field, key, remove }, i) => (
)) }
)}
); } } // 使用 ArrayField props initValue来设置初始值 class ArrayFieldWithInitValue extends React.Component { constructor() { super(); this.state = { data: { effects: [ { name: 'arrayField-props.initValue-0-name', time: 'arrayField-props.initValue-0-time', otherKey: 1 }, { name: 'arrayField-props.initValue-1-name', time: 'arrayField-props.initValue-1-time', otherKey: 453 }, ], }, flag: true }; this.getFormApi = this.getFormApi.bind(this); this.change = this.change.bind(this); } componentDidMount() { this.formApi.setValues({ effects: [ { name: "脸部贴纸", type: "2D" }, { name: "前景贴纸", type: "3D" }, ], test: 'fff' }) } change = () => { let number = this.formApi.getValue('number'); let newData = Array.from({ length: 2 }, (v, i) => ({ name: `${i}-name`, time: `${i}-time` })); console.log(newData); this.formApi.setValue('effects', newData); } getFormApi(formApi) { this.formApi = formApi; } render() { const { effects } = this.state.data; return (
console.log('onchange:' + v)} onValueChange={(...v) => console.log('onValueChange:' + v)} getFormApi={this.getFormApi} > {/* */} {({ add, arrayFields }) => ( { arrayFields.map(({ field, key, remove }, i) => (
)) }
)}
{/* */} {/* */}
); } } /* basic usage */ class ArrayFieldDemo extends React.Component { constructor() { super(); this.state = { data: { c: 'c', test: [ // {}, // {}, { name: 'sugar', time: '3min' }, // { name: 'bacon', time: '6min', key: 'c2' }, { name: 'bacon', time: '6min' }, ], }, flag: true }; this.getFormApi = this.getFormApi.bind(this); } change = () => { let number = this.formApi.getValue('number'); let newData = Array.from({ length: number }, (v, i) => ({ name: `${i}-name`, time: `${i}-time` })); this.formApi.setValue('effects', newData); } clear = () => { // this.formApi.setValues({ number: 3 }); // this.formApi.setValues({}, { isOverride: true }); this.formApi.setValues({ number: 3 }, { isOverride: true }); } getFormApi(formApi) { this.formApi = formApi; } render() { return (
console.log(v)} onValueChange={(...v) => console.log(v)} getFormApi={this.getFormApi}> {({ add, arrayFields }) => ( { arrayFields.map(({ field, key, remove }, i) => (
)) }
)}
); } } // Fix 1409 class ArrayFieldSetValues extends React.Component { constructor() { super(); this.state = { data: { }, }; this.getFormApi = this.getFormApi.bind(this); } componentDidMount() { this.formApi.setValues({ effects: [ { name: "Semi D2C", role: "Engineer" }, { name: "Semi DSM", role: "Designer" }, ], test: 'fff' }) } getFormApi(formApi) { this.formApi = formApi; } render() { return (
console.log(v)} onValueChange={(...v) => console.log(v)} getFormApi={this.getFormApi}> {({ add, arrayFields }) => ( { arrayFields.map(({ field, key, remove }, i) => (
)) }
)}
); } } // TODO 有相似作用的 e2e demo test了,这个可以删掉 class AsyncSetArrayField extends React.Component { constructor() { super(); this.state = { data: [ { name: 'Semi D2C', role: 'Engineer' }, { name: 'Semi C2D', role: 'Designer' }, ] }; } getFormApi = (formApi) => { this.formApi = formApi; } change = () => { let rules = this.formApi.getValue('rules'); if (!rules) { efferulests = []; } rules.push({ name: `Semi ${new Date().valueOf()}`, role: 'Designer', key: rules.length + 1 }); setTimeout(() => { this.formApi.setValue('rules', rules); }, 300); } render() { let { data } = this.state; const ComponentUsingFormState = () => { const formState = useFormState(); return (