5-manualAsyncSetUsage.jsx 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. import React, { useState, useRef } from 'react';
  2. import { Form, Col, Row, Button, ArrayField, Space } from '@douyinfe/semi-ui';
  3. import { IconMinusCircle, IconPlusCircle } from '@douyinfe/semi-icons';
  4. function ManualSetDemo() {
  5. const formRef = useRef();
  6. const formInitValues = {
  7. data: [
  8. { name: 'Semi D2C', role: 'Engineer' },
  9. { name: 'Semi C2D', role: 'Designer' },
  10. // { name: 'Semi DSM', role: 'Designer' },
  11. ]
  12. };
  13. const getFormApi = () => {
  14. const formApi = formRef.current.formApi;
  15. return formApi;
  16. };
  17. const setValueAsync = () => {
  18. const formApi = getFormApi();
  19. setTimeout(() => {
  20. formApi.setValue('data', [
  21. { name: 'Semi D2C-0', role: 'Engineer-0' },
  22. { name: 'Semi C2D-1', role: 'Designer' },
  23. ]);
  24. }, 200);
  25. };
  26. const removeHeadAsync = () => {
  27. const formApi = getFormApi();
  28. setTimeout(() => {
  29. formApi.setValue('data', [
  30. { name: 'Semi C2D', role: 'Designer' },
  31. { name: 'Semi DSM', role: 'Designer' },
  32. ]);
  33. }, 200);
  34. };
  35. const removeTailAsync = () => {
  36. const formApi = getFormApi();
  37. setTimeout(() => {
  38. formApi.setValue('data', [
  39. { name: 'Semi D2C', role: 'Engineer' },
  40. { name: 'Semi C2D', role: 'Designer' },
  41. ]);
  42. }, 200);
  43. };
  44. const removeMiddleAsync = () => {
  45. const formApi = getFormApi();
  46. setTimeout(() => {
  47. formApi.setValue('data', [
  48. { name: 'Semi D2C', role: 'Engineer' },
  49. { name: 'Semi DSM', role: 'Designer' },
  50. ]);
  51. }, 200);
  52. };
  53. const removeAllAsync = () => {
  54. const formApi = getFormApi();
  55. setTimeout(() => {
  56. formApi.setValue('data', []);
  57. }, 200);
  58. };
  59. const addHeadAsync = () => {
  60. const formApi = getFormApi();
  61. setTimeout(() => {
  62. formApi.setValue('data', [
  63. { name: 'Semi DSM', role: 'Designer' },
  64. { name: 'Semi D2C', role: 'Engineer' },
  65. { name: 'Semi C2D', role: 'Designer' },
  66. ]);
  67. }, 200);
  68. };
  69. const addMiddleAsync = () => {
  70. const formApi = getFormApi();
  71. setTimeout(() => {
  72. formApi.setValue('data', [
  73. { name: 'Semi D2C', role: 'Engineer' },
  74. { name: 'Semi DSM', role: 'Designer' },
  75. { name: 'Semi C2D', role: 'Designer' },
  76. ]);
  77. }, 200);
  78. };
  79. const addTailAsync = () => {
  80. const formApi = getFormApi();
  81. setTimeout(() => {
  82. formApi.setValue('data', [
  83. { name: 'Semi D2C', role: 'Engineer' },
  84. { name: 'Semi C2D', role: 'Designer' },
  85. { name: 'Semi DSM', role: 'Designer' },
  86. ]);
  87. }, 200);
  88. };
  89. return (
  90. <Form ref={formRef} initValues={formInitValues}>
  91. <div>
  92. <Space>
  93. <Button id='updateAsync' onClick={setValueAsync}>setValueAsync</Button>
  94. <Button id='addHeadAsync' onClick={addHeadAsync}>addHeadAsync</Button>
  95. <Button id='addMiddleAsync' onClick={addMiddleAsync}>addMiddleAsync</Button>
  96. <Button id='addTailAsync' onClick={addTailAsync}>addTailAsync</Button>
  97. </Space>
  98. </div>
  99. <div style={{ marginTop: 12, marginBottom: 12 }}>
  100. <Space>
  101. <Button id='removeHeadAsync' onClick={removeHeadAsync} icon={<IconMinusCircle />} type='danger'>removeHeadAsync</Button>
  102. <Button id='removeTailAsync' onClick={removeTailAsync} icon={<IconMinusCircle />} type='danger'>removeTailAsync</Button>
  103. <Button id='removeMiddleAsync' onClick={removeMiddleAsync} icon={<IconMinusCircle />} type='danger'>removeMiddleAsync</Button>
  104. <Button id='removeAllAsync' onClick={removeAllAsync} icon={<IconMinusCircle />} type='danger'>removeAllAsync</Button>
  105. </Space>
  106. </div>
  107. <ArrayField field="data">
  108. {({ add, addWithInitValue, arrayFields }) => (
  109. <React.Fragment>
  110. <Space>
  111. <Button id='add' onClick={add} icon={<IconPlusCircle />} type="primary">Add</Button>
  112. <Button
  113. id='addWithInit'
  114. onClick={() => addWithInitValue({ name: `Semi New-${arrayFields.length + 1}`, role: 'Designer' })}
  115. icon={<IconPlusCircle />}
  116. type="primary">
  117. Add with row initValue
  118. </Button>
  119. </Space>
  120. {
  121. arrayFields.map(({ field, key, remove }, i) => (
  122. <div key={key} style={{ display: 'flex', width: 600 }} id={`data-${i}`} className='line'>
  123. <Space>
  124. <Form.Input
  125. id={`data-${i}-name`}
  126. field={`${field}[name]`}
  127. label={`${field}.name`}
  128. style={{ width: 200 }}
  129. />
  130. <Form.Input
  131. id={`data-${i}-role`}
  132. field={`${field}[role]`}
  133. label={`${field}.role`}
  134. style={{ width: 200 }}
  135. />
  136. </Space>
  137. <Button style={{ margin: "36px 0 0 12px" }} type="danger" icon={<IconMinusCircle/>} onClick={remove}>remove this line</Button>
  138. </div>
  139. ))
  140. }
  141. <Button htmlType='reset'>Reset</Button>
  142. </React.Fragment>
  143. )}
  144. </ArrayField>
  145. </Form>
  146. );
  147. }
  148. ManualSetDemo.storyName = 'ArrayField-ManualSet Async';
  149. export default ManualSetDemo;