Advertisement
Guest User

Untitled

a guest
Feb 25th, 2020
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.16 KB | None | 0 0
  1. import React, { Fragment } from 'react'
  2. import { useDispatch, useSelector } from 'react-redux'
  3. import { selectors } from '../../features/skills'
  4. import { Skill } from '../../features/skills/types'
  5. import { actionTypes } from '../../features/skills'
  6. import { getMaxValueFromArray } from '../../utils'
  7. import Creatable from 'react-select/creatable'
  8. import { Row } from 'react-sticky-table'
  9.  
  10. type SkillsProps = { onChange: (skills: Skill[]) => void }
  11.  
  12. type SkillProps = {
  13. value: Skill
  14. onChange: (skills: Skill[]) => void
  15. onCreate: (s: string) => void
  16. skills: Skill[]
  17. }
  18.  
  19. const SkillComponent: React.FC<SkillProps> = (props: SkillProps) => {
  20. const onCreatableChange = (value: any) => {
  21. props.onChange(value)
  22. }
  23.  
  24. const toOption = (skill: Skill) => {
  25. return {
  26. value: skill.id,
  27. label: skill.label,
  28. }
  29. }
  30.  
  31. return (
  32. <Row>
  33. <Fragment>
  34. <Creatable
  35. value={toOption(props.value)}
  36. options={props.skills.map(toOption)}
  37. onChange={onCreatableChange}
  38. onCreateOption={props.onCreate}
  39. />
  40. <input type={'number'}></input>
  41. </Fragment>
  42. </Row>
  43. )
  44. }
  45.  
  46. const Skills: React.FC<SkillsProps> = props => {
  47. const dispatch = useDispatch()
  48.  
  49. const onCreateOption = (value: string) => {
  50. const payload = {
  51. id: getMaxValueFromArray(skills, s => s.id) + 1,
  52. label: value,
  53. employeesRequired: 0,
  54. }
  55. dispatch({
  56. type: actionTypes.ADD_SKILL,
  57. payload: payload,
  58. })
  59. props.onChange(skills.concat(payload))
  60. }
  61.  
  62. const skills = useSelector(selectors.getSkills)
  63. return (
  64. <Fragment>
  65. {skills.map((skill: Skill) => (
  66. <SkillComponent
  67. value={skill}
  68. onChange={props.onChange}
  69. onCreate={onCreateOption}
  70. skills={skills}
  71. />
  72. ))}
  73. <SkillComponent
  74. value={{
  75. id: getMaxValueFromArray(skills, (s: Skill) => s.id),
  76. label: '',
  77. employeesRequired: 0,
  78. }}
  79. onChange={props.onChange}
  80. onCreate={onCreateOption}
  81. skills={skills}
  82. />
  83. </Fragment>
  84. )
  85. }
  86.  
  87. export default Skills
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement