arrayDemo.jsx 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. /* eslint-disable */
  2. import React, { useState, useLayoutEffect, Component } from 'react';
  3. import { storiesOf } from '@storybook/react';
  4. import { Button, Modal, TreeSelect, Row, Col, Avatar, Select as BasicSelect,
  5. Form,
  6. useFormState,
  7. useFormApi,
  8. useFieldApi,
  9. useFieldState,
  10. withFormState,
  11. withFormApi,
  12. withField,
  13. ArrayField,
  14. AutoComplete,
  15. Collapse,
  16. Icon } from '../../../index';
  17. import { ComponentUsingFormState } from '../Hook/hookDemo';
  18. const { Input, Select, DatePicker, Switch, Slider, CheckboxGroup, Checkbox, RadioGroup, Radio, TimePicker, InputNumber, InputGroup } = Form;
  19. class ArrayDemo extends React.Component {
  20. constructor() {
  21. super();
  22. this.state = {
  23. initValues: {
  24. effects: [
  25. { name: '1-name', type: '1-type', key: 0 },
  26. { name: '2-name', type: '2-type', key: 1 },
  27. { name: '3-name', type: '3-type', key: 2 },
  28. ]
  29. }
  30. };
  31. this.id = 3;
  32. this.getFormApi = this.getFormApi.bind(this);
  33. this.add = this.add.bind(this);
  34. this.remove = this.remove.bind(this);
  35. this.renderItems = this.renderItems.bind(this);
  36. }
  37. getFormApi(formApi) {
  38. this.formApi = formApi;
  39. }
  40. add(obj) {
  41. let effects = this.formApi.getValue('effects');
  42. if (!effects) {
  43. effects = [];
  44. }
  45. effects.push({ name: '', type: '', key: this.id++ });
  46. this.formApi.setValue('effects', effects);
  47. }
  48. remove(key) {
  49. let effects = this.formApi.getValue('effects');
  50. effects = effects.filter((effect, index) => key !== effect.key);
  51. if (!effects.length) {
  52. effects = undefined;
  53. }
  54. this.formApi.setValue('effects', effects);
  55. }
  56. renderItems(formState, values) {
  57. return values.effects && values.effects.map((effect, i) => (
  58. <div key={effect.key} style={{ width: 1000, display: 'flex' }}>
  59. <Form.Input field={`effects[${i}].name`} style={{ width: 200, marginRight: 16 }} />
  60. <Form.Input field={`effects[${i}].type`} style={{ width: 90 }} />
  61. <Button type="danger" onClick={() => this.remove(effect.key)} style={{ margin: 16 }}>Remove</Button>
  62. </div>
  63. ));
  64. }
  65. render() {
  66. let { initValues } = this.state;
  67. return (
  68. <Form
  69. getFormApi={this.getFormApi}
  70. initValues={initValues}
  71. style={{ width: 500 }}
  72. labelPosition="left"
  73. labelWidth="180px"
  74. >
  75. {({ formState, values }) => (
  76. <>
  77. <Button onClick={this.add}>add</Button>
  78. {this.renderItems(formState, values)}
  79. <div>
  80. {JSON.stringify(formState)}
  81. </div>
  82. </>
  83. )}
  84. </Form>
  85. );
  86. }
  87. }
  88. export { ArrayDemo };