Advertisement
Guest User

Untitled

a guest
Jun 15th, 2019
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.32 KB | None | 0 0
  1. /* eslint-disable react/no-array-index-key */
  2. import React from 'react';
  3.  
  4. // MUI Components
  5. import TextField from '@material-ui/core/TextField';
  6.  
  7. class MultiAdd extends React.Component {
  8. static formatTags(list, styles, callback) {
  9. if (list && !!list.length) {
  10. return [
  11. <em key={1}>Items: </em>,
  12. list.map((listItem, i) => (
  13. <em key={i} className={styles.inputTags}>
  14. <span className={styles.inputTagName}>{ listItem }</span>
  15. <button
  16. onClick={() => callback(listItem)}
  17. type="button"
  18. className={styles.inputTagClose}
  19. >
  20. X
  21. </button>
  22. </em>
  23. ))
  24. ];
  25. }
  26.  
  27. return [];
  28. }
  29.  
  30. constructor(props) {
  31. super(props);
  32.  
  33. this.state = {
  34. item: '',
  35. list: []
  36. };
  37.  
  38. this.handleChange = this.handleChange.bind(this);
  39. this.handleAdd = this.handleAdd.bind(this);
  40. this.handleDelete = this.handleDelete.bind(this);
  41. }
  42.  
  43. handleAdd({ key }) {
  44. const { list, item } = this.state;
  45. const { handleAdd, modelKey } = this.props;
  46.  
  47. if (key && key.toLowerCase() === 'enter') {
  48. if (!!item && !list.find(listItem => listItem.toLowerCase() === item.toLowerCase())) {
  49. list.push(item);
  50.  
  51. if (handleAdd) {
  52. handleAdd(modelKey, item);
  53. }
  54.  
  55. this.setState({
  56. list,
  57. item: ''
  58. });
  59. }
  60. }
  61. }
  62.  
  63. handleChange({ target: { value } }) {
  64. this.setState({
  65. item: value
  66. });
  67. }
  68.  
  69. handleDelete(item) {
  70. const { handleRemove, modelKey } = this.props;
  71. let { list } = this.state;
  72.  
  73. list = list.filter(l => l !== item);
  74.  
  75. if (handleRemove) {
  76. handleRemove(modelKey, item);
  77. }
  78.  
  79. this.setState({ list });
  80. }
  81.  
  82. render() {
  83. const {
  84. classes,
  85. label,
  86. required
  87. } = this.props;
  88. const { list, item } = this.state;
  89.  
  90. const labelTag = (label && required) ? `${label} *` : label;
  91.  
  92. return (
  93. <div className={classes.multiAdd}>
  94. <TextField
  95. className={classes.input}
  96. value={item}
  97. label={labelTag}
  98. onKeyPress={this.handleAdd}
  99. onChange={this.handleChange}
  100. placeholder={labelTag}
  101. helperText={MultiAdd.formatTags(list, classes, this.handleDelete)}
  102. />
  103. </div>
  104. );
  105. }
  106. }
  107.  
  108. export default MultiAdd;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement