4-manualSyncSetUsage.jsx 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  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 setValueSync = () => {
  18. const formApi = getFormApi();
  19. formApi.setValue('data', [
  20. { name: 'Semi D2C-0', role: 'Engineer-0' },
  21. { name: 'Semi C2D-1', role: 'Designer' },
  22. ]);
  23. };
  24. const removeHeadSync = () => {
  25. const formApi = getFormApi();
  26. formApi.setValue('data', [
  27. { name: 'Semi C2D', role: 'Designer' },
  28. { name: 'Semi DSM', role: 'Designer' },
  29. ]);
  30. };
  31. const removeTailSync = () => {
  32. const formApi = getFormApi();
  33. formApi.setValue('data', [
  34. { name: 'Semi D2C', role: 'Engineer' },
  35. { name: 'Semi C2D', role: 'Designer' },
  36. ]);
  37. };
  38. const removeMiddleSync = () => {
  39. const formApi = getFormApi();
  40. formApi.setValue('data', [
  41. { name: 'Semi D2C', role: 'Engineer' },
  42. { name: 'Semi DSM', role: 'Designer' },
  43. ]);
  44. };
  45. const removeAllSync = () => {
  46. const formApi = getFormApi();
  47. formApi.setValue('data', []);
  48. };
  49. const addHeadSync = () => {
  50. const formApi = getFormApi();
  51. formApi.setValue('data', [
  52. { name: 'Semi DSM', role: 'Designer' },
  53. { name: 'Semi D2C', role: 'Engineer' },
  54. { name: 'Semi C2D', role: 'Designer' },
  55. ]);
  56. };
  57. const addMiddleSync = () => {
  58. const formApi = getFormApi();
  59. formApi.setValue('data', [
  60. { name: 'Semi D2C', role: 'Engineer' },
  61. { name: 'Semi DSM', role: 'Designer' },
  62. { name: 'Semi C2D', role: 'Designer' },
  63. ]);
  64. };
  65. const addTailSync = () => {
  66. const formApi = getFormApi();
  67. formApi.setValue('data', [
  68. { name: 'Semi D2C', role: 'Engineer' },
  69. { name: 'Semi C2D', role: 'Designer' },
  70. { name: 'Semi DSM', role: 'Designer' },
  71. ]);
  72. };
  73. return (
  74. <Form ref={formRef} initValues={formInitValues}>
  75. <div>
  76. <Space>
  77. <Button id='updateSync' onClick={setValueSync}>setValueSync</Button>
  78. <Button id='addHeadSync' onClick={addHeadSync}>addHeadSync</Button>
  79. <Button id='addMiddleSync' onClick={addMiddleSync}>addMiddleSync</Button>
  80. <Button id='addTailSync' onClick={addTailSync}>addTailSync</Button>
  81. </Space>
  82. </div>
  83. <div style={{ marginTop: 12, marginBottom: 12 }}>
  84. <Space>
  85. <Button id='removeHeadSync' onClick={removeHeadSync} icon={<IconMinusCircle />} type='danger'>removeHeadSync</Button>
  86. <Button id='removeTailSync' onClick={removeTailSync} icon={<IconMinusCircle />} type='danger'>removeTailSync</Button>
  87. <Button id='removeMiddleSync' onClick={removeMiddleSync} icon={<IconMinusCircle />} type='danger'>removeMiddleSync</Button>
  88. <Button id='removeAllSync' onClick={removeAllSync} icon={<IconMinusCircle />} type='danger'>removeAllSync</Button>
  89. </Space>
  90. </div>
  91. <ArrayField field="data">
  92. {({ add, addWithInitValue, arrayFields }) => (
  93. <React.Fragment>
  94. <Space>
  95. <Button id='add' onClick={add} icon={<IconPlusCircle />} type="primary">Add</Button>
  96. <Button
  97. id='addWithInit'
  98. onClick={() => addWithInitValue({ name: `Semi New-${arrayFields.length + 1}`, role: 'Designer' })}
  99. icon={<IconPlusCircle />}
  100. type="primary">
  101. Add with row initValue
  102. </Button>
  103. </Space>
  104. {
  105. arrayFields.map(({ field, key, remove }, i) => (
  106. <div key={key} style={{ display: 'flex', width: 600 }} id={`data-${i}`} className='line'>
  107. <Space>
  108. <Form.Input
  109. id={`data-${i}-name`}
  110. field={`${field}[name]`}
  111. label={`${field}.name`}
  112. style={{ width: 200 }}
  113. />
  114. <Form.Input
  115. id={`data-${i}-role`}
  116. field={`${field}[role]`}
  117. label={`${field}.role`}
  118. style={{ width: 200 }}
  119. />
  120. </Space>
  121. <Button style={{ margin: "36px 0 0 12px" }} type="danger" icon={<IconMinusCircle/>} onClick={remove}>remove this line</Button>
  122. </div>
  123. ))
  124. }
  125. <Button htmlType='reset'>Reset</Button>
  126. </React.Fragment>
  127. )}
  128. </ArrayField>
  129. </Form>
  130. );
  131. }
  132. ManualSetDemo.storyName = 'ArrayField-ManualSet Sync';
  133. export default ManualSetDemo;