import _ from 'lodash'; import PropTypes from 'prop-types'; import React, { Component } from 'react'; import Icon from 'Components/Icon'; import IconButton from 'Components/Link/IconButton'; import Link from 'Components/Link/Link'; import MonitorToggleButton from 'Components/MonitorToggleButton'; import Table from 'Components/Table/Table'; import TableBody from 'Components/Table/TableBody'; import { icons, sortDirections } from 'Helpers/Props'; import translate from 'Utilities/String/translate'; import getToggledRange from 'Utilities/Table/getToggledRange'; import BookRowConnector from './BookRowConnector'; import styles from './AuthorDetailsSeries.css'; class AuthorDetailsSeries extends Component { // // Lifecycle constructor(props, context) { super(props, context); this.state = { isOrganizeModalOpen: false, isManageBooksOpen: false, lastToggledBook: null }; } componentDidMount() { this._expandByDefault(); } componentDidUpdate(prevProps) { const { authorId } = this.props; if (prevProps.authorId !== authorId) { this._expandByDefault(); return; } } // // Control _expandByDefault() { const { id, onExpandPress } = this.props; onExpandPress(id, true); } isSeriesMonitored(series) { return series.items.every((book) => book.monitored); } isSeriesSaving(series) { return series.items.some((book) => book.isSaving); } // // Listeners onExpandPress = () => { const { id, isExpanded } = this.props; this.props.onExpandPress(id, !isExpanded); }; onMonitorBookPress = (bookId, monitored, { shiftKey }) => { const lastToggled = this.state.lastToggledBook; const bookIds = [bookId]; if (shiftKey && lastToggled) { const { lower, upper } = getToggledRange(this.props.items, bookId, lastToggled); const items = this.props.items; for (let i = lower; i < upper; i++) { bookIds.push(items[i].id); } } this.setState({ lastToggledBook: bookId }); this.props.onMonitorBookPress(_.uniq(bookIds), monitored); }; onMonitorSeriesPress = (monitored, { shiftKey }) => { const bookIds = this.props.items.map((book) => book.id); this.props.onMonitorBookPress(_.uniq(bookIds), monitored); }; // // Render render() { const { label, items, positionMap, columns, isExpanded, sortKey, sortDirection, onSortPress, isSmallScreen, onTableOptionChange, authorMonitored } = this.props; return (