import _ from 'lodash'; import PropTypes from 'prop-types'; import React, { Component } from 'react'; import getSelectedIds from 'Utilities/Table/getSelectedIds'; import selectAll from 'Utilities/Table/selectAll'; import toggleSelected from 'Utilities/Table/toggleSelected'; import { kinds } from 'Helpers/Props'; import ConfirmModal from 'Components/Modal/ConfirmModal'; import Button from 'Components/Link/Button'; import SpinnerButton from 'Components/Link/SpinnerButton'; import SelectInput from 'Components/Form/SelectInput'; import ModalContent from 'Components/Modal/ModalContent'; import ModalHeader from 'Components/Modal/ModalHeader'; import ModalBody from 'Components/Modal/ModalBody'; import ModalFooter from 'Components/Modal/ModalFooter'; import Table from 'Components/Table/Table'; import TableBody from 'Components/Table/TableBody'; import TrackFileEditorRow from './TrackFileEditorRow'; import styles from './TrackFileEditorModalContent.css'; const columns = [ { name: 'trackNumber', label: 'Track', isVisible: true }, { name: 'relativePath', label: 'Relative Path', isVisible: true }, { name: 'language', label: 'Language', isVisible: true }, { name: 'quality', label: 'Quality', isVisible: true } ]; class TrackFileEditorModalContent extends Component { // // Lifecycle constructor(props, context) { super(props, context); this.state = { allSelected: false, allUnselected: false, lastToggled: null, selectedState: {}, isConfirmDeleteModalOpen: false }; } componentDidUpdate(prevProps) { if (prevProps.items !== this.props.items) { this.onSelectAllChange({ value: false }); } } // // Control getSelectedIds = () => { const selectedIds = getSelectedIds(this.state.selectedState); return selectedIds.reduce((acc, id) => { const matchingItem = this.props.items.find((item) => item.id === id); if (matchingItem && !acc.includes(matchingItem.trackFileID)) { acc.push(matchingItem.trackFileID); } return acc; }, []); } // // Listeners onSelectAllChange = ({ value }) => { this.setState(selectAll(this.state.selectedState, value)); } onSelectedChange = ({ id, value, shiftKey = false }) => { this.setState((state) => { return toggleSelected(state, this.props.items, id, value, shiftKey); }); } onDeletePress = () => { this.setState({ isConfirmDeleteModalOpen: true }); } onConfirmDelete = () => { this.setState({ isConfirmDeleteModalOpen: false }); this.props.onDeletePress(this.getSelectedIds()); } onConfirmDeleteModalClose = () => { this.setState({ isConfirmDeleteModalOpen: false }); } onLanguageChange = ({ value }) => { const selectedIds = this.getSelectedIds(); if (!selectedIds.length) { return; } this.props.onLanguageChange(selectedIds, parseInt(value)); } onQualityChange = ({ value }) => { const selectedIds = this.getSelectedIds(); if (!selectedIds.length) { return; } this.props.onQualityChange(selectedIds, parseInt(value)); } // // Render render() { const { isDeleting, items, languages, qualities, onModalClose } = this.props; const { allSelected, allUnselected, selectedState, isConfirmDeleteModalOpen } = this.state; const languageOptions = _.reduceRight(languages, (acc, language) => { acc.push({ key: language.id, value: language.name }); return acc; }, [{ key: 'selectLanguage', value: 'Select Language', disabled: true }]); const qualityOptions = _.reduceRight(qualities, (acc, quality) => { acc.push({ key: quality.id, value: quality.name }); return acc; }, [{ key: 'selectQuality', value: 'Select Quality', disabled: true }]); const hasSelectedFiles = this.getSelectedIds().length > 0; return ( Manage Tracks { !items.length &&
No track files to manage.
} { !!items.length && { items.map((item) => { return ( ); }) }
}
Delete
); } } TrackFileEditorModalContent.propTypes = { isDeleting: PropTypes.bool.isRequired, items: PropTypes.arrayOf(PropTypes.object).isRequired, languages: PropTypes.arrayOf(PropTypes.object).isRequired, qualities: PropTypes.arrayOf(PropTypes.object).isRequired, onDeletePress: PropTypes.func.isRequired, onLanguageChange: PropTypes.func.isRequired, onQualityChange: PropTypes.func.isRequired, onModalClose: PropTypes.func.isRequired }; export default TrackFileEditorModalContent;