Fretboard component written in React.
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.
 
 
 

91 рядки
2.2 KiB

  1. import React, {FC} from 'react'
  2. import * as PropTypes from 'prop-types'
  3. import FretboardString from '../FretboardString/FretboardString'
  4. import Fret from '../Fret/Fret'
  5. const propTypes = {
  6. strings: PropTypes.number,
  7. frets: PropTypes.number,
  8. mirror: PropTypes.bool,
  9. fixedTunings: PropTypes.bool,
  10. displayTunings: PropTypes.bool,
  11. capoFret: PropTypes.number,
  12. fretted: PropTypes.arrayOf(PropTypes.number),
  13. landmarks: PropTypes.bool,
  14. frettedNames: PropTypes.arrayOf(PropTypes.string),
  15. }
  16. export type Props = PropTypes.InferProps<typeof propTypes>
  17. const Fretboard: FC<Props> = ({
  18. strings = 6,
  19. frets = 24,
  20. mirror = false,
  21. capoFret = 0,
  22. fretted = [],
  23. landmarks = false,
  24. frettedNames = [],
  25. }) => {
  26. const str: boolean[][] = new Array(strings)
  27. .fill(null)
  28. .map(() => new Array(frets)
  29. .fill(null)
  30. .map(() => false)
  31. )
  32. return (
  33. <div
  34. style={{
  35. border: '0.0625rem solid',
  36. boxSizing: 'border-box',
  37. userSelect: 'none',
  38. }}
  39. >
  40. {str!.map((f, stringNumber: number) => (
  41. <div
  42. style={{
  43. display: 'flex',
  44. flexDirection: mirror ? 'row-reverse' : 'row',
  45. }}
  46. >
  47. <Fret
  48. fretNumber={0}
  49. totalFrets={frets!}
  50. firstString={stringNumber === 0}
  51. strings={strings!}
  52. landmarks={landmarks}
  53. fretted={fretted![stringNumber] === 0}
  54. capoFret={capoFret}
  55. name={frettedNames![stringNumber]}
  56. >
  57. <FretboardString
  58. stringNumber={stringNumber}
  59. />
  60. </Fret>
  61. {f.map((_, i) => (
  62. <Fret
  63. fretNumber={i + 1}
  64. totalFrets={frets!}
  65. firstString={stringNumber === 0}
  66. strings={strings!}
  67. landmarks={landmarks}
  68. fretted={fretted![stringNumber] === i + 1}
  69. capoFret={capoFret}
  70. name={frettedNames![stringNumber]}
  71. >
  72. <FretboardString
  73. stringNumber={stringNumber}
  74. />
  75. </Fret>
  76. ))}
  77. </div>
  78. ))}
  79. </div>
  80. )
  81. }
  82. Fretboard.propTypes = propTypes
  83. export default Fretboard