import { reduce } from 'lodash'; import PropTypes from 'prop-types'; import React, { Component } from 'react'; import Alert from 'Components/Alert'; import LoadingIndicator from 'Components/Loading/LoadingIndicator'; import PageContent from 'Components/Page/PageContent'; import PageContentBody from 'Components/Page/PageContentBody'; import { kinds } from 'Helpers/Props'; import translate from 'Utilities/String/translate'; import selectAll from 'Utilities/Table/selectAll'; import toggleSelected from 'Utilities/Table/toggleSelected'; import ImportSeriesFooterConnector from './ImportSeriesFooterConnector'; import ImportSeriesTableConnector from './ImportSeriesTableConnector'; class ImportSeries extends Component { // // Lifecycle constructor(props, context) { super(props, context); this.scrollerRef = React.createRef(); this.state = { allSelected: false, allUnselected: false, lastToggled: null, selectedState: {} }; } // // Listeners getSelectedIds = () => { return reduce( this.state.selectedState, (result, value, id) => { if (value) { result.push(id); } return result; }, [] ); }; onSelectAllChange = ({ value }) => { // Only select non-dupes this.setState(selectAll(this.state.selectedState, value)); }; onSelectedChange = ({ id, value, shiftKey = false }) => { this.setState((state) => { return toggleSelected(state, this.props.items, id, value, shiftKey); }); }; onRemoveSelectedStateItem = (id) => { this.setState((state) => { const selectedState = Object.assign({}, state.selectedState); delete selectedState[id]; return { ...state, selectedState }; }); }; onInputChange = ({ name, value }) => { this.props.onInputChange(this.getSelectedIds(), name, value); }; onImportPress = () => { this.props.onImportPress(this.getSelectedIds()); }; // // Render render() { const { rootFolderId, path, rootFoldersFetching, rootFoldersPopulated, rootFoldersError, unmappedFolders } = this.props; const { allSelected, allUnselected, selectedState } = this.state; return ( { rootFoldersFetching ? : null } { !rootFoldersFetching && !!rootFoldersError ? {translate('RootFoldersLoadError')} : null } { !rootFoldersError && !rootFoldersFetching && rootFoldersPopulated && !unmappedFolders.length ? {translate('AllSeriesInRootFolderHaveBeenImported', { path })} : null } { !rootFoldersError && !rootFoldersFetching && rootFoldersPopulated && !!unmappedFolders.length && this.scrollerRef.current ? : null } { !rootFoldersError && !rootFoldersFetching && !!unmappedFolders.length ? : null } ); } } ImportSeries.propTypes = { rootFolderId: PropTypes.number.isRequired, path: PropTypes.string, rootFoldersFetching: PropTypes.bool.isRequired, rootFoldersPopulated: PropTypes.bool.isRequired, rootFoldersError: PropTypes.object, unmappedFolders: PropTypes.arrayOf(PropTypes.object), items: PropTypes.arrayOf(PropTypes.object), onInputChange: PropTypes.func.isRequired, onImportPress: PropTypes.func.isRequired }; ImportSeries.defaultProps = { unmappedFolders: [] }; export default ImportSeries;