ETHReport/components/interviews/interviewsList/index.js

105 lines
3.3 KiB
JavaScript
Raw Normal View History

import React from 'react';
import { PropTypes } from 'prop-types';
import Modal from '../../modal';
import './style.scss';
class InterviewsList extends React.Component {
constructor(props) {
super(props);
this.state = {
activeLetter: 'A',
};
}
2018-07-10 14:25:52 +00:00
render() {
const { activeLetter } = this.state;
2018-07-10 14:25:52 +00:00
// Sort interviews alphabetically
const sortedInterviews = this.props.data.sort((a, b) => a.name.localeCompare(b.name));
const interviews = {};
// Build up interviews object with letter key
sortedInterviews.forEach((interview) => {
const firstLetter = interview.name.charAt(0);
if (typeof interviews[firstLetter] === 'undefined') {
interviews[firstLetter] = [];
}
interviews[firstLetter].push(interview);
});
return (
<div className="interviews-wrap">
<div className="mob-interviews-link">
2018-07-11 09:29:48 +00:00
<button onClick={this.props.toggleInterviewsListModal}>
Interviews ({this.props.data.length})
2018-07-11 09:29:48 +00:00
</button>
<button onClick={this.props.toggleInterviewsListModal}>
View
2018-07-11 09:29:48 +00:00
</button>
</div>
<Modal
isModalOpen={this.props.isInterviewsListModalOpen}
closeModal={this.props.toggleInterviewsListModal}
modalOnMobileOnly
>
<React.Fragment>
<h4>Interviews ({ this.props.data.length })</h4>
<div className="interviews-nav-wrap">
<div className="interviews-list">
{
Object.keys(interviews).map(firstLetter => (
<div className="letter-block" key={firstLetter}>
<div id={firstLetter}>{ firstLetter }</div>
<ul>
{ interviews[firstLetter].map(interview => (
<li
id={interview.id}
key={interview.id}
>
2018-07-11 09:29:48 +00:00
<button onClick={this.props.toggleSingleInterview}>
{ interview.name }
</button>
</li>
2018-07-10 12:25:23 +00:00
))
}
</ul>
</div>
))
}
</div>
<div className="letters-nav">
{
Object.keys(interviews).map(firstLetter => (
<button
key={firstLetter}
onClick={() => {
document.querySelector(`#${firstLetter}`).scrollIntoView({ behavior: 'smooth' });
2018-07-11 09:29:48 +00:00
this.setState({ activeLetter: firstLetter });
}}
className={activeLetter === firstLetter ? 'active' : ''}
>
{ firstLetter }
</button>
))
}
</div>
</div>
</React.Fragment>
</Modal>
</div>
);
}
2018-07-11 09:29:48 +00:00
}
InterviewsList.propTypes = {
isInterviewsListModalOpen: PropTypes.bool.isRequired,
2018-07-09 14:29:38 +00:00
data: PropTypes.arrayOf(PropTypes.shape({})).isRequired,
2018-07-10 12:25:23 +00:00
toggleSingleInterview: PropTypes.func.isRequired, /* eslint-disable-line */
toggleInterviewsListModal: PropTypes.func.isRequired,
2018-07-06 12:36:22 +00:00
};
export default InterviewsList;