Experimenting with filtered selectors (search)

This commit is contained in:
James Barnsley
2020-09-22 21:04:08 +12:00
parent ae83352dfb
commit d46ff41106
5 changed files with 98 additions and 70 deletions

View File

@ -109559,38 +109559,19 @@ __webpack_require__.r(__webpack_exports__);
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash */ "./node_modules/lodash/lodash.js");
/* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js");
/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../util/helpers */ "./src/js/util/helpers.js");
/* harmony import */ var _util_arrays__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../util/arrays */ "./src/js/util/arrays.js");
/* harmony import */ var _URILink__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./URILink */ "./src/js/components/URILink.js");
/* harmony import */ var _Icon__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./Icon */ "./src/js/components/Icon.js");
/* harmony import */ var _AlbumGrid__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./AlbumGrid */ "./src/js/components/AlbumGrid.js");
/* harmony import */ var _ArtistGrid__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./ArtistGrid */ "./src/js/components/ArtistGrid.js");
/* harmony import */ var _PlaylistGrid__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./PlaylistGrid */ "./src/js/components/PlaylistGrid.js");
/* harmony import */ var _TrackList__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./TrackList */ "./src/js/components/TrackList.js");
/* harmony import */ var _LazyLoadListener__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./LazyLoadListener */ "./src/js/components/LazyLoadListener.js");
/* harmony import */ var _locale__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../locale */ "./src/js/locale/index.js");
/* harmony import */ var _Button__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./Button */ "./src/js/components/Button.js");
/* harmony import */ var _util_selectors__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../util/selectors */ "./src/js/util/selectors.js");
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js");
/* harmony import */ var _util_arrays__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/arrays */ "./src/js/util/arrays.js");
/* harmony import */ var _URILink__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./URILink */ "./src/js/components/URILink.js");
/* harmony import */ var _Icon__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./Icon */ "./src/js/components/Icon.js");
/* harmony import */ var _AlbumGrid__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./AlbumGrid */ "./src/js/components/AlbumGrid.js");
/* harmony import */ var _ArtistGrid__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./ArtistGrid */ "./src/js/components/ArtistGrid.js");
/* harmony import */ var _PlaylistGrid__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./PlaylistGrid */ "./src/js/components/PlaylistGrid.js");
/* harmony import */ var _TrackList__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./TrackList */ "./src/js/components/TrackList.js");
/* harmony import */ var _locale__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../locale */ "./src/js/locale/index.js");
/* harmony import */ var _Button__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./Button */ "./src/js/components/Button.js");
/* harmony import */ var _util_selectors__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../util/selectors */ "./src/js/util/selectors.js");
@ -109612,6 +109593,7 @@ var SearchResults = function SearchResults(_ref) {
uri_schemes_priority = _ref.uri_schemes_priority,
all = _ref.all,
rawResults = _ref.results;
console.log('rendering', type, query);
var encodedTerm = encodeURIComponent(query.term);
var results = rawResults;
if (!results) return null;
@ -109632,7 +109614,7 @@ var SearchResults = function SearchResults(_ref) {
break;
}
results = Object(_util_arrays__WEBPACK_IMPORTED_MODULE_4__["sortItems"])(results, type === 'tracks' && sort === 'followers' ? 'popularity' : sort, sort_reverse, sort_map);
results = Object(_util_arrays__WEBPACK_IMPORTED_MODULE_2__["sortItems"])(results, type === 'tracks' && sort === 'followers' ? 'popularity' : sort, sort_reverse, sort_map);
var resultsCount = results.length;
if (all && type !== 'tracks' && results.length > 5) {
@ -109640,74 +109622,74 @@ var SearchResults = function SearchResults(_ref) {
}
if (results.length <= 0) return null;
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
"data-qa-node": "div",
"data-qa-file": "SearchResults"
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("h4", {
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h4", {
"data-qa-node": "h4",
"data-qa-file": "SearchResults"
}, !all && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("span", {
}, !all && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
"data-qa-node": "span",
"data-qa-file": "SearchResults"
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_URILink__WEBPACK_IMPORTED_MODULE_5__["default"], {
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_URILink__WEBPACK_IMPORTED_MODULE_3__["default"], {
uri: "iris:search:all:".concat(encodedTerm),
"data-qa-node": "URILink",
"data-qa-file": "SearchResults"
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_locale__WEBPACK_IMPORTED_MODULE_12__["I18n"], {
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_locale__WEBPACK_IMPORTED_MODULE_9__["I18n"], {
path: "search.title",
"data-qa-node": "I18n",
"data-qa-file": "SearchResults"
})), ' ', /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_Icon__WEBPACK_IMPORTED_MODULE_6__["default"], {
})), ' ', /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_Icon__WEBPACK_IMPORTED_MODULE_4__["default"], {
type: "fontawesome",
name: "angle-right",
"data-qa-node": "Icon",
"data-qa-file": "SearchResults"
}), ' ', /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_locale__WEBPACK_IMPORTED_MODULE_12__["I18n"], {
}), ' ', /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_locale__WEBPACK_IMPORTED_MODULE_9__["I18n"], {
path: "search.".concat(type, ".title"),
"data-qa-node": "I18n",
"data-qa-file": "SearchResults"
})), all && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_URILink__WEBPACK_IMPORTED_MODULE_5__["default"], {
})), all && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_URILink__WEBPACK_IMPORTED_MODULE_3__["default"], {
uri: "iris:search:".concat(type, ":").concat(encodedTerm),
"data-qa-node": "URILink",
"data-qa-file": "SearchResults"
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_locale__WEBPACK_IMPORTED_MODULE_12__["I18n"], {
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_locale__WEBPACK_IMPORTED_MODULE_9__["I18n"], {
path: "search.".concat(type, ".title"),
"data-qa-node": "I18n",
"data-qa-file": "SearchResults"
}))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("section", {
}))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("section", {
className: "grid-wrapper",
"data-qa-node": "section",
"data-qa-file": "SearchResults"
}, type === 'artists' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_ArtistGrid__WEBPACK_IMPORTED_MODULE_8__["default"], {
}, type === 'artists' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_ArtistGrid__WEBPACK_IMPORTED_MODULE_6__["default"], {
artists: results,
show_source_icon: true,
mini: all,
"data-qa-node": "ArtistGrid",
"data-qa-file": "SearchResults"
}), type === 'albums' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_AlbumGrid__WEBPACK_IMPORTED_MODULE_7__["default"], {
}), type === 'albums' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_AlbumGrid__WEBPACK_IMPORTED_MODULE_5__["default"], {
albums: results,
show_source_icon: true,
mini: all,
"data-qa-node": "AlbumGrid",
"data-qa-file": "SearchResults"
}), type === 'playlists' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_PlaylistGrid__WEBPACK_IMPORTED_MODULE_9__["default"], {
}), type === 'playlists' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_PlaylistGrid__WEBPACK_IMPORTED_MODULE_7__["default"], {
playlists: results,
show_source_icon: true,
mini: all,
"data-qa-node": "PlaylistGrid",
"data-qa-file": "SearchResults"
}), type === 'tracks' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_TrackList__WEBPACK_IMPORTED_MODULE_10__["default"], {
}), type === 'tracks' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_TrackList__WEBPACK_IMPORTED_MODULE_8__["default"], {
tracks: results,
uri: "iris:search:".concat(query.type, ":").concat(encodedTerm),
show_source_icon: true,
"data-qa-node": "TrackList",
"data-qa-file": "SearchResults"
}), resultsCount > results.length && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_Button__WEBPACK_IMPORTED_MODULE_13__["default"], {
}), resultsCount > results.length && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_Button__WEBPACK_IMPORTED_MODULE_10__["default"], {
uri: "iris:search:".concat(type, ":").concat(encodedTerm),
debug: true,
"data-qa-node": "Button",
"data-qa-file": "SearchResults"
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_locale__WEBPACK_IMPORTED_MODULE_12__["I18n"], {
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_locale__WEBPACK_IMPORTED_MODULE_9__["I18n"], {
path: "search.".concat(type, ".more"),
count: resultsCount,
"data-qa-node": "I18n",
@ -109716,11 +109698,12 @@ var SearchResults = function SearchResults(_ref) {
};
var mapStateToProps = function mapStateToProps(state, ownProps) {
var searchResultsSelector = Object(_util_selectors__WEBPACK_IMPORTED_MODULE_11__["makeSearchResultsSelector"])();
return {
uri_schemes_priority: state.ui.uri_schemes_priority || [],
results: [].concat(_toConsumableArray(Object(_util_selectors__WEBPACK_IMPORTED_MODULE_14__["getSearchResults"])(state, 'mopidy', ownProps.type, ownProps.query)), _toConsumableArray(Object(_util_selectors__WEBPACK_IMPORTED_MODULE_14__["getSearchResults"])(state, 'spotify', ownProps.type, ownProps.query))),
sort: state.ui.search_results_sort || 'followers',
sort_reverse: !!state.ui.search_results_sort_reverse
results: searchResultsSelector(state, ownProps),
sort: state.ui.search_results_sort,
sort_reverse: state.ui.search_results_sort_reverse
};
};
@ -109728,7 +109711,7 @@ var mapDispatchToProps = function mapDispatchToProps() {
return {};
};
/* harmony default export */ __webpack_exports__["default"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_2__["connect"])(mapStateToProps, mapDispatchToProps)(SearchResults));
/* harmony default export */ __webpack_exports__["default"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_1__["connect"])(mapStateToProps, mapDispatchToProps)(SearchResults));
/***/ }),
@ -128779,7 +128762,7 @@ var encodeMopidyUri = function encodeMopidyUri(uri) {
/*!**********************************!*\
!*** ./src/js/util/selectors.js ***!
\**********************************/
/*! exports provided: makeItemSelector, makeLibrarySelector, makeLoadingSelector, queueHistorySelector */
/*! exports provided: makeItemSelector, makeLibrarySelector, makeLoadingSelector, makeSearchResultsSelector, queueHistorySelector */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
@ -128787,10 +128770,23 @@ __webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "makeItemSelector", function() { return makeItemSelector; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "makeLibrarySelector", function() { return makeLibrarySelector; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "makeLoadingSelector", function() { return makeLoadingSelector; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "makeSearchResultsSelector", function() { return makeSearchResultsSelector; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "queueHistorySelector", function() { return queueHistorySelector; });
/* harmony import */ var reselect__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! reselect */ "./node_modules/reselect/es/index.js");
/* harmony import */ var _arrays__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./arrays */ "./src/js/util/arrays.js");
/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./helpers */ "./src/js/util/helpers.js");
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
@ -128847,6 +128843,21 @@ var makeLibrarySelector = function makeLibrarySelector(uri) {
});
};
var getMopidySearchResults = function getMopidySearchResults(state, props) {
return state.mopidy.search_results && state.mopidy.search_results[props.type];
};
var getSpotifySearchResults = function getSpotifySearchResults(state, props) {
return state.spotify.search_results && state.spotify.search_results[props.type];
};
var makeSearchResultsSelector = function makeSearchResultsSelector() {
return Object(reselect__WEBPACK_IMPORTED_MODULE_0__["createSelector"])([getMopidySearchResults, getSpotifySearchResults, getItems], function (mopidySearchResults, spotifySearchResults, items) {
var uris = [].concat(_toConsumableArray(mopidySearchResults || []), _toConsumableArray(spotifySearchResults || []));
return Object(_arrays__WEBPACK_IMPORTED_MODULE_1__["indexToArray"])(items, uris);
});
};
/***/ }),

File diff suppressed because one or more lines are too long

View File

@ -106,7 +106,7 @@
// Release details
// These are automatically injected to built HTML
var build = "1600680434";
var build = "1600759874";
var version = "3.52.4";
// Construct the script tag

View File

@ -1,18 +1,15 @@
import { pick } from 'lodash';
import React from 'react';
import { connect } from 'react-redux';
import { titleCase, getIndexedRecords } from '../util/helpers';
import { sortItems, indexToArray } from '../util/arrays';
import { sortItems } from '../util/arrays';
import URILink from './URILink';
import Icon from './Icon';
import AlbumGrid from './AlbumGrid';
import ArtistGrid from './ArtistGrid';
import PlaylistGrid from './PlaylistGrid';
import TrackList from './TrackList';
import LazyLoadListener from './LazyLoadListener';
import { I18n } from '../locale';
import Button from './Button';
import { getSearchResults } from '../util/selectors';
import { makeSearchResultsSelector } from '../util/selectors';
const SearchResults = ({
type,
@ -23,6 +20,7 @@ const SearchResults = ({
all,
results: rawResults,
}) => {
console.log('rendering', type, query);
const encodedTerm = encodeURIComponent(query.term);
let results = rawResults;
@ -93,15 +91,16 @@ const SearchResults = ({
);
};
const mapStateToProps = (state, ownProps) => ({
uri_schemes_priority: state.ui.uri_schemes_priority || [],
results: [
...getSearchResults(state, 'mopidy', ownProps.type, ownProps.query),
...getSearchResults(state, 'spotify', ownProps.type, ownProps.query),
],
sort: state.ui.search_results_sort || 'followers',
sort_reverse: !!state.ui.search_results_sort_reverse,
});
const mapStateToProps = (state, ownProps) => {
const searchResultsSelector = makeSearchResultsSelector();
return {
uri_schemes_priority: state.ui.uri_schemes_priority || [],
results: searchResultsSelector(state, ownProps),
sort: state.ui.search_results_sort,
sort_reverse: state.ui.search_results_sort_reverse,
};
};
const mapDispatchToProps = () => ({});

View File

@ -40,9 +40,27 @@ const makeLibrarySelector = (uri) => createSelector(
},
);
const getMopidySearchResults = (state, props) => (
state.mopidy.search_results && state.mopidy.search_results[props.type]
);
const getSpotifySearchResults = (state, props) => (
state.spotify.search_results && state.spotify.search_results[props.type]
);
const makeSearchResultsSelector = () => createSelector(
[getMopidySearchResults, getSpotifySearchResults, getItems],
(mopidySearchResults, spotifySearchResults, items) => {
const uris = [
...mopidySearchResults || [],
...spotifySearchResults || [],
];
return indexToArray(items, uris);
},
);
export {
makeItemSelector,
makeLibrarySelector,
makeLoadingSelector,
makeSearchResultsSelector,
queueHistorySelector,
};