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 { align, sortDirections } from 'Helpers/Props'; import LoadingIndicator from 'Components/Loading/LoadingIndicator'; import PageContent from 'Components/Page/PageContent'; import PageContentBodyConnector from 'Components/Page/PageContentBodyConnector'; import PageToolbar from 'Components/Page/Toolbar/PageToolbar'; import PageToolbarSection from 'Components/Page/Toolbar/PageToolbarSection'; import FilterMenu from 'Components/Menu/FilterMenu'; import Table from 'Components/Table/Table'; import TableBody from 'Components/Table/TableBody'; import NoArtist from 'Artist/NoArtist'; import AlbumStudioRowConnector from './AlbumStudioRowConnector'; import AlbumStudioFooter from './AlbumStudioFooter'; const columns = [ { name: 'status', isVisible: true }, { name: 'sortName', label: 'Name', isSortable: true, isVisible: true }, { name: 'monitored', isVisible: true }, { name: 'albumCount', label: 'Albums', isSortable: true, isVisible: true } ]; class AlbumStudio extends Component { // // Lifecycle constructor(props, context) { super(props, context); this.state = { allSelected: false, allUnselected: false, lastToggled: null, selectedState: {} }; } componentDidUpdate(prevProps) { const { isSaving, saveError } = this.props; if (prevProps.isSaving && !isSaving && !saveError) { this.onSelectAllChange({ value: false }); } } // // Control getSelectedIds = () => { return getSelectedIds(this.state.selectedState); } // // 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); }); } onUpdateSelectedPress = (changes) => { this.props.onUpdateSelectedPress({ artistIds: this.getSelectedIds(), ...changes }); } // // Render render() { const { isFetching, isPopulated, error, totalItems, items, selectedFilterKey, filters, customFilters, sortKey, sortDirection, isSaving, saveError, onSortPress, onFilterSelect } = this.props; const { allSelected, allUnselected, selectedState } = this.state; return ( { isFetching && !isPopulated && } { !isFetching && !!error &&
Unable to load the calendar
} { !error && isPopulated && !!items.length &&
{ items.map((item) => { return ( ); }) }
} { !error && isPopulated && !items.length && }
); } } AlbumStudio.propTypes = { isFetching: PropTypes.bool.isRequired, isPopulated: PropTypes.bool.isRequired, error: PropTypes.object, totalItems: PropTypes.number.isRequired, items: PropTypes.arrayOf(PropTypes.object).isRequired, sortKey: PropTypes.string, sortDirection: PropTypes.oneOf(sortDirections.all), selectedFilterKey: PropTypes.string.isRequired, filters: PropTypes.arrayOf(PropTypes.object).isRequired, customFilters: PropTypes.arrayOf(PropTypes.object).isRequired, isSaving: PropTypes.bool.isRequired, saveError: PropTypes.object, onSortPress: PropTypes.func.isRequired, onFilterSelect: PropTypes.func.isRequired, onUpdateSelectedPress: PropTypes.func.isRequired }; export default AlbumStudio;