- );
- }
-}
-
-const loadingSelector = makeLoadingSelector(['mopidy_library.(browse|lookup)']);
-const mapStateToProps = (state, ownProps) => {
- console.debug('browser directory', ownProps)
- const {
- mopidy: {
- directory: _directory = {},
- },
- ui: {
- library_directory_view: view,
- },
- } = state;
- const uri = decodeUri(ownProps.params.uri);
+ let { uri, name } = useParams();
+ uri = decodeUri(uri);
+ name = decodeURIComponent(name);
const uriMatcher = [uri, decodeURIComponent(uri)]; // Lenient matching due to encoding diffs
- const directory = _directory && uriMatcher.includes(_directory.uri)
- ? _directory
+ const directory = directoryInState && uriMatcher.includes(directoryInState.uri)
+ ? directoryInState
: undefined;
- return {
- uri,
- name: decodeURIComponent(ownProps.params.name),
- loading: loadingSelector(state),
- directory,
- view,
- };
-};
+ useEffect(() => {
+ dispatch(setWindowTitle(i18n('library.browse_directory.title')));
+ dispatch(getDirectory(uri));
+ }, []);
-const mapDispatchToProps = (dispatch) => ({
- uiActions: bindActionCreators(uiActions, dispatch),
- mopidyActions: bindActionCreators(mopidyActions, dispatch),
- spotifyActions: bindActionCreators(spotifyActions, dispatch),
-});
+ useEffect(() => {
+ dispatch(getDirectory(uri));
+ }, [uri]);
-export default withRouter(connect(mapStateToProps, mapDispatchToProps)(BrowseDirectory));
+ const onViewChange = (value) => {
+ dispatch(set({ library_directory_view: value }));
+ dispatch(hideContextMenu());
+ }
+
+ const playAll = () => {
+ if (!tracks || !tracks.length) return;
+
+ dispatch(
+ playURIs({
+ uris: arrayOf('uri', sortItems(tracks, 'name')),
+ from: {
+ name: 'Browse',
+ type: 'browse',
+ uri,
+ },
+ })
+ );
+ dispatch(hideContextMenu());
+ }
+
+ const goBack = () => {
+ dispatch(hideContextMenu());
+ window.history.back();
+ }
+
+ if (!directory || (!directory.subdirectories && !directory.tracks)) {
+ if (loading) {
+ return