diff --git a/frontend/src/App/State/MovieCollectionAppState.ts b/frontend/src/App/State/MovieCollectionAppState.ts index 615e4c95d0..1f916d805c 100644 --- a/frontend/src/App/State/MovieCollectionAppState.ts +++ b/frontend/src/App/State/MovieCollectionAppState.ts @@ -1,10 +1,12 @@ import AppSectionState, { + AppSectionFilterState, AppSectionSaveState, } from 'App/State/AppSectionState'; import MovieCollection from 'typings/MovieCollection'; interface MovieCollectionAppState extends AppSectionState, + AppSectionFilterState, AppSectionSaveState { itemMap: Record; diff --git a/frontend/src/Collection/Collection.js b/frontend/src/Collection/Collection.js index 25880733de..78ce430983 100644 --- a/frontend/src/Collection/Collection.js +++ b/frontend/src/Collection/Collection.js @@ -18,9 +18,9 @@ import getSelectedIds from 'Utilities/Table/getSelectedIds'; import selectAll from 'Utilities/Table/selectAll'; import toggleSelected from 'Utilities/Table/toggleSelected'; import CollectionFooter from './CollectionFooter'; -import CollectionFilterMenu from './Menus/CollectionFilterMenu'; -import CollectionSortMenu from './Menus/CollectionSortMenu'; -import NoCollections from './NoCollections'; +import MovieCollectionFilterMenu from './Menus/MovieCollectionFilterMenu'; +import MovieCollectionSortMenu from './Menus/MovieCollectionSortMenu'; +import NoMovieCollections from './NoMovieCollections'; import CollectionOverviewsConnector from './Overview/CollectionOverviewsConnector'; import CollectionOverviewOptionsModal from './Overview/Options/CollectionOverviewOptionsModal'; @@ -284,14 +284,14 @@ class Collection extends Component { } - - + } diff --git a/frontend/src/Collection/CollectionFilterModalConnector.js b/frontend/src/Collection/CollectionFilterModalConnector.js deleted file mode 100644 index 0fa8974518..0000000000 --- a/frontend/src/Collection/CollectionFilterModalConnector.js +++ /dev/null @@ -1,24 +0,0 @@ -import { connect } from 'react-redux'; -import { createSelector } from 'reselect'; -import FilterModal from 'Components/Filter/FilterModal'; -import { setMovieCollectionsFilter } from 'Store/Actions/movieCollectionActions'; - -function createMapStateToProps() { - return createSelector( - (state) => state.movieCollections.items, - (state) => state.movieCollections.filterBuilderProps, - (sectionItems, filterBuilderProps) => { - return { - sectionItems, - filterBuilderProps, - customFilterType: 'movieCollections' - }; - } - ); -} - -const mapDispatchToProps = { - dispatchSetFilter: setMovieCollectionsFilter -}; - -export default connect(createMapStateToProps, mapDispatchToProps)(FilterModal); diff --git a/frontend/src/Collection/Menus/CollectionFilterMenu.js b/frontend/src/Collection/Menus/CollectionFilterMenu.js deleted file mode 100644 index 652f2accfe..0000000000 --- a/frontend/src/Collection/Menus/CollectionFilterMenu.js +++ /dev/null @@ -1,41 +0,0 @@ -import PropTypes from 'prop-types'; -import React from 'react'; -import CollectionFilterModalConnector from 'Collection/CollectionFilterModalConnector'; -import FilterMenu from 'Components/Menu/FilterMenu'; -import { align } from 'Helpers/Props'; - -function CollectionFilterMenu(props) { - const { - selectedFilterKey, - filters, - customFilters, - isDisabled, - onFilterSelect - } = props; - - return ( - - ); -} - -CollectionFilterMenu.propTypes = { - selectedFilterKey: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired, - filters: PropTypes.arrayOf(PropTypes.object).isRequired, - customFilters: PropTypes.arrayOf(PropTypes.object).isRequired, - isDisabled: PropTypes.bool.isRequired, - onFilterSelect: PropTypes.func.isRequired -}; - -CollectionFilterMenu.defaultProps = { - showCustomFilters: false -}; - -export default CollectionFilterMenu; diff --git a/frontend/src/Collection/Menus/MovieCollectionFilterMenu.tsx b/frontend/src/Collection/Menus/MovieCollectionFilterMenu.tsx new file mode 100644 index 0000000000..24059c5c65 --- /dev/null +++ b/frontend/src/Collection/Menus/MovieCollectionFilterMenu.tsx @@ -0,0 +1,34 @@ +import React from 'react'; +import { CustomFilter, Filter } from 'App/State/AppState'; +import MovieCollectionFilterModal from 'Collection/MovieCollectionFilterModal'; +import FilterMenu from 'Components/Menu/FilterMenu'; + +interface MovieCollectionFilterMenuProps { + selectedFilterKey: string | number; + filters: Filter[]; + customFilters: CustomFilter[]; + isDisabled: boolean; + onFilterSelect: (filter: number | string) => void; +} + +function MovieCollectionFilterMenu({ + selectedFilterKey, + filters, + customFilters, + isDisabled, + onFilterSelect, +}: MovieCollectionFilterMenuProps) { + return ( + + ); +} + +export default MovieCollectionFilterMenu; diff --git a/frontend/src/Collection/Menus/CollectionSortMenu.js b/frontend/src/Collection/Menus/MovieCollectionSortMenu.tsx similarity index 58% rename from frontend/src/Collection/Menus/CollectionSortMenu.js rename to frontend/src/Collection/Menus/MovieCollectionSortMenu.tsx index 29c8cf12af..8b8875ea42 100644 --- a/frontend/src/Collection/Menus/CollectionSortMenu.js +++ b/frontend/src/Collection/Menus/MovieCollectionSortMenu.tsx @@ -1,24 +1,26 @@ -import PropTypes from 'prop-types'; import React from 'react'; import MenuContent from 'Components/Menu/MenuContent'; import SortMenu from 'Components/Menu/SortMenu'; import SortMenuItem from 'Components/Menu/SortMenuItem'; -import { align, sortDirections } from 'Helpers/Props'; +import { align } from 'Helpers/Props'; +import { SortDirection } from 'Helpers/Props/sortDirections'; import translate from 'Utilities/String/translate'; -function CollectionSortMenu(props) { - const { - sortKey, - sortDirection, - isDisabled, - onSortSelect - } = props; +interface MovieCollectionSortMenuProps { + sortKey?: string; + sortDirection?: SortDirection; + isDisabled: boolean; + onSortSelect(sortKey: string): void; +} +function MovieCollectionSortMenu({ + sortKey, + sortDirection, + isDisabled, + onSortSelect, +}: MovieCollectionSortMenuProps) { return ( - + {translate('Title')} + state.movieCollections.items + ); + const filterBuilderProps = useSelector( + (state: AppState) => state.movieCollections.filterBuilderProps + ); + + const dispatch = useDispatch(); + + const dispatchSetFilter = useCallback( + (payload: { selectedFilterKey: string | number }) => { + dispatch(setMovieCollectionsFilter(payload)); + }, + [dispatch] + ); + + return ( + + ); +} diff --git a/frontend/src/Collection/NoCollection.css b/frontend/src/Collection/NoMovieCollections.css similarity index 100% rename from frontend/src/Collection/NoCollection.css rename to frontend/src/Collection/NoMovieCollections.css diff --git a/frontend/src/Collection/NoCollection.css.d.ts b/frontend/src/Collection/NoMovieCollections.css.d.ts similarity index 100% rename from frontend/src/Collection/NoCollection.css.d.ts rename to frontend/src/Collection/NoMovieCollections.css.d.ts diff --git a/frontend/src/Collection/NoCollections.tsx b/frontend/src/Collection/NoMovieCollections.tsx similarity index 81% rename from frontend/src/Collection/NoCollections.tsx rename to frontend/src/Collection/NoMovieCollections.tsx index 7e677b9357..d4ccfa8cd3 100644 --- a/frontend/src/Collection/NoCollections.tsx +++ b/frontend/src/Collection/NoMovieCollections.tsx @@ -2,13 +2,13 @@ import React from 'react'; import Button from 'Components/Link/Button'; import { kinds } from 'Helpers/Props'; import translate from 'Utilities/String/translate'; -import styles from './NoCollection.css'; +import styles from './NoMovieCollections.css'; -interface NoCollectionsProps { +interface NoMovieCollectionsProps { totalItems: number; } -function NoCollections({ totalItems }: NoCollectionsProps) { +function NoMovieCollections({ totalItems }: NoMovieCollectionsProps) { if (totalItems > 0) { return (
@@ -38,4 +38,4 @@ function NoCollections({ totalItems }: NoCollectionsProps) { ); } -export default NoCollections; +export default NoMovieCollections;