Advertisement
Guest User

Untitled

a guest
Oct 21st, 2019
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.83 KB | None | 0 0
  1. const AddressList = (props) => {
  2. const [addresses, setAddresses] = React.useState(props.addresses);
  3.  
  4. const handleAddRow = () => {
  5. let rows = [...addresses];
  6. rows.push(AddressModel);
  7. setAddresses(rows);
  8. };
  9.  
  10. const handleRemoveRow = (index) => {
  11. let rows = [...addresses];
  12. rows.splice(index, 1);
  13. setAddresses(rows);
  14. };
  15.  
  16. return (
  17. <React.Fragment>
  18. { addresses.map((address, index) =>
  19. <Address
  20. index={index}
  21. item={address}
  22. key={Math.random()}
  23. handleAddRow={handleAddRow}
  24. handleRemoveRow={handleRemoveRow}/>
  25. )}
  26. </React.Fragment>
  27. );
  28. };
  29.  
  30. export default AddressList;
  31.  
  32. const useStyles = makeStyles(theme => ({
  33. button: {
  34. margin: theme.spacing(1),
  35. },
  36. root: {
  37. display: 'inline-flex',
  38. maxWidth: 800,
  39. minWidth: 300,
  40. padding: 10,
  41. width: '100%'
  42. }
  43. }));
  44.  
  45. const types = ['Home', 'Work'];
  46.  
  47. const Address = (props) => {
  48. const classes = useStyles();
  49. // const [address, setAddress] = React.useState(props.item);
  50. const [address, setAddress] = useReducer((myArray, { type, value }) => {
  51. switch (type) {
  52. case "add":
  53. return [...myArray, value];
  54. case "remove":
  55. return myArray.filter((_, index) => index !== value);
  56. default:
  57. return myArray;
  58. }
  59. }, [address]);
  60.  
  61. const handleAddressChange = name => event => {
  62. setAddress({ ...address, [name]: event.target.value });
  63. };
  64.  
  65. const index = props.index;
  66. const handleAddRow = props.handleAddRow;
  67. const handleRemoveRow = props.handleRemoveRow;
  68.  
  69. return (
  70. <Grid container className={classes.root} spacing={3}>
  71. <Grid item xs={12} sm={2}>
  72. <TextField
  73. id="type"
  74. label="Email Type"
  75. margin="normal"
  76. value={address.type}
  77. onChange={handleAddressChange('type')}
  78. fullWidth
  79. select>
  80. {types.map(option => (
  81. <MenuItem key={option} value={option}>{option}</MenuItem>
  82. ))}
  83. </TextField>
  84. </Grid>
  85. <Grid item xs={12} sm={9}>
  86. <TextField
  87. id="address"
  88. label="Address"
  89. margin="normal"
  90. value={address.address}
  91. onChange={handleAddressChange('address')}
  92. fullWidth
  93. required/>
  94. </Grid>
  95. <Grid item xs={12} sm={1}>
  96. {
  97. index === 0 ?
  98. <IconButton className={classes.button} aria-label="add" onClick={() => handleAddRow()}>
  99. <AddIcon/>
  100. </IconButton>
  101. :
  102. <IconButton className={classes.button} aria-label="delete" onClick={() => handleRemoveRow(index)}>
  103. <DeleteIcon/>
  104. </IconButton>
  105. }
  106. </Grid>
  107. </Grid>
  108. );
  109. };
  110.  
  111. export default Address;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement