ETHReport/components/interviews/interviewsList/index.js

96 lines
3.0 KiB
JavaScript
Raw Normal View History

import React from 'react';
import { PropTypes } from 'prop-types';
import Modal from '../../modal';
import './style.scss';
2018-07-10 12:25:23 +00:00
const InterviewsList = (props) => {
// Sort interviews alphabetically
2018-07-10 12:25:23 +00:00
const sortedInterviews = props.data.sort((a, b) => a.name.localeCompare(b.name));
const interviews = {};
// Build up interviews object with letter key
2018-07-10 12:25:23 +00:00
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">
{/* eslint-disable-next-line */}
<span
role="button"
tabIndex="0"
onClick={props.toggleInterviewsListModal}
>
Interviews ({props.data.length})
</span>
{/* eslint-disable-next-line */}
<span
role="button"
tabIndex="0"
onClick={props.toggleInterviewsListModal}
>
View
</span>
</div>
<Modal
isModalOpen={props.isInterviewsListModalOpen}
closeModal={props.toggleInterviewsListModal}
modalOnMobileOnly
>
<React.Fragment>
<h4>Interviews ({ 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>
2018-07-10 12:25:23 +00:00
{ interviews[firstLetter].map(interview => (
<li
id={interview.id}
key={interview.id}
>
2018-07-10 12:25:23 +00:00
<button onClick={props.toggleSingleInterview}>{interview.name}</button>
</li>
2018-07-10 12:25:23 +00:00
))
}
</ul>
</div>
2018-07-10 12:25:23 +00:00
))
}
</div>
<div className="letters-nav">
{
Object.keys(interviews).map(firstLetter => (
2018-07-10 12:25:23 +00:00
// eslint-disable-next-line
<span
key={firstLetter}
onClick={() => { document.querySelector(`#${firstLetter}`).scrollIntoView({ behavior: 'smooth' }); }}
>
{ firstLetter }
</span>
2018-07-10 12:25:23 +00:00
))
}
</div>
</div>
</React.Fragment>
</Modal>
</div>
);
};
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;