cspace-ui
Version:
CollectionSpace user interface for browsers
72 lines (69 loc) • 2.75 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = SearchResultFooter;
var _react = _interopRequireDefault(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _reactRedux = require("react-redux");
var _reactRouterDom = require("react-router-dom");
var _Pager = _interopRequireDefault(require("./Pager"));
var _ConfigProvider = require("../config/ConfigProvider");
var _searchNames = require("../../constants/searchNames");
var _reducers = require("../../reducers");
var _prefs = require("../../actions/prefs");
var _searchHelpers = require("../../helpers/searchHelpers");
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
const propTypes = {
searchDescriptor: _propTypes.default.object
};
/**
* A wrapper around a Pager to query for search results and populate the pagination info
* @returns A <Pager /> wrapped in a <footer />
*/
function SearchResultFooter({
searchDescriptor
}) {
const results = (0, _reactRedux.useSelector)(state => (0, _reducers.getSearchResult)(state, _searchNames.SEARCH_RESULT_PAGE_SEARCH_NAME, searchDescriptor));
const config = (0, _ConfigProvider.useConfig)();
const dispatch = (0, _reactRedux.useDispatch)();
const history = (0, _reactRouterDom.useHistory)();
const location = (0, _reactRouterDom.useLocation)();
if (!results) {
return /*#__PURE__*/_react.default.createElement("footer", null);
}
const onPageChange = (0, _searchHelpers.createPageChangeHandler)({
history,
location,
zeroIndexed: true
});
const onPageSizeChange = (0, _searchHelpers.createPageSizeChangeHandler)({
history,
location,
dispatch,
setPreferredPageSize: _prefs.setSearchResultPagePageSize
});
const listType = (0, _searchHelpers.getListTypeFromResult)(config, results);
const listTypeConfig = config.listTypes[listType];
const {
listNodeName
} = listTypeConfig;
const list = results.get(listNodeName);
// useful to have a helper function for this?
const totalItems = parseInt(list.get('totalItems'), 10);
const pageNum = parseInt(list.get('pageNum'), 10);
const pageSize = parseInt(list.get('pageSize'), 10);
const lastPage = Math.max(0, Number.isNaN(totalItems) ? 0 : Math.ceil(totalItems / pageSize) - 1);
return /*#__PURE__*/_react.default.createElement("footer", null, /*#__PURE__*/_react.default.createElement(_Pager.default, {
currentPage: pageNum,
lastPage: lastPage,
pageSize: pageSize
// eslint-disable-next-line react/jsx-no-bind
,
onPageChange: onPageChange
// eslint-disable-next-line react/jsx-no-bind
,
onPageSizeChange: onPageSizeChange
}));
}
SearchResultFooter.propTypes = propTypes;