TrackPanelListItem.tsx 1.96 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import React, { PureComponent } from 'react';
import { TrackPanelItem, trackPanelIconConfig } from '../trackPanelConfig';

import chevronDownIcon from 'static/img/track-panel/chevron-down.svg';
import chevronUpIcon from 'static/img/track-panel/chevron-up.svg';

import styles from './TrackPanelListItem.scss';

type TrackPanelListItemProps = {
  className: string;
  track: TrackPanelItem;
  changeTrack: (name: string) => void;
  additionalInfo?: string;
};

class TrackPanelListItem extends PureComponent<TrackPanelListItemProps> {
  private expanded: boolean = false;

  constructor(props: TrackPanelListItemProps) {
    super(props);

    this.changeTrackHandler = this.changeTrackHandler.bind(this);
  }

  public changeTrackHandler() {
    this.props.changeTrack(this.props.track.name);
  }

  public render() {
    const { className, track, additionalInfo } = this.props;
    const listItemClass = styles[className] || '';

    return (
      <dd className={`${styles.listItem} ${listItemClass}`}>
        <label>
          {track.color && (
            <span className={`${styles.box} ${styles[track.color]}`} />
          )}
          <span className={styles.mainText}>{track.label}</span>
          {additionalInfo && (
            <span className={styles.additionalInfo}>{additionalInfo}</span>
          )}
          <button>
            <img
              className={styles.expandIcon}
              src={this.expanded ? chevronUpIcon : chevronDownIcon}
              alt={this.expanded ? 'collapse' : 'expand'}
            />
          </button>
        </label>
        <button onClick={this.changeTrackHandler}>
          <img
            src={trackPanelIconConfig.ellipsis.icon.on}
            alt={`Go to ${track.label}`}
          />
        </button>
        <button>
          <img
            src={trackPanelIconConfig.eye.icon.on}
            alt={trackPanelIconConfig.ellipsis.description}
          />
        </button>
      </dd>
    );
  }
}

export default TrackPanelListItem;