@jannie-shao/components-antd4
Version:
169 lines • 5.49 kB
JavaScript
import _extends from "@babel/runtime/helpers/extends";
import React, { useImperativeHandle, forwardRef, useRef, useState } from 'react';
import PropTypes from 'prop-types';
import { callFun } from "../utils";
import SearchBar from "../search-bar";
import SearchRet from "../search-ret";
var defaultStore = {
filter: {},
page: {
current: 1,
pageSize: 20
},
total: 0,
list: []
};
var List = /*#__PURE__*/forwardRef(function (_ref, ref) {
var className = _ref.className,
model = _ref.model,
defaultFilter = _ref.defaultFilter,
columns = _ref.columns,
useSearchBar = _ref.useSearchBar,
searchBarProps = _ref.searchBarProps,
searchRetProps = _ref.searchRetProps,
onFilterChange = _ref.onFilterChange,
onSearch = _ref.onSearch,
autoSearch = _ref.autoSearch,
resetAutoSearch = _ref.resetAutoSearch;
var _searchRetProps$usePa = searchRetProps.usePagination,
usePagination = _searchRetProps$usePa === void 0 ? true : _searchRetProps$usePa;
var compSearchBar = useRef();
var _useState = useState(false),
loading = _useState[0],
setLoading = _useState[1];
var _useState2 = useState(defaultStore),
store = _useState2[0],
setStore = _useState2[1];
var doSearch = function doSearch(searchFilter) {
setLoading(true);
callFun(function () {
return onSearch(searchFilter);
}, function (res) {
setLoading(false);
var _ref2 = res || {},
_ref2$total = _ref2.total,
total = _ref2$total === void 0 ? 0 : _ref2$total,
_ref2$list = _ref2.list,
list = _ref2$list === void 0 ? [] : _ref2$list;
setStore(_extends({}, store, {
filter: _extends({}, searchFilter.filter),
page: _extends({}, searchFilter.page),
total: total || list.length,
list: list
}));
});
};
var handleSearch = function handleSearch(f, pageNow) {
var _store$page;
if (f === void 0) {
f = {};
}
if (pageNow === void 0) {
pageNow = 1;
}
var searchFilter = {
filter: _extends({}, f),
page: {
current: pageNow,
pageSize: (store === null || store === void 0 ? void 0 : (_store$page = store.page) === null || _store$page === void 0 ? void 0 : _store$page.pageSize) || defaultStore.page.pageSize
}
};
doSearch(searchFilter);
};
var handlePageChange = function handlePageChange(cp) {
var _store$page2;
var searchFilter = {
filter: _extends({}, store.filter || {}),
page: {
current: ((_store$page2 = store.page) === null || _store$page2 === void 0 ? void 0 : _store$page2.pageSize) === cp.pageSize ? cp.current : 1,
pageSize: cp.pageSize
}
};
doSearch(searchFilter);
};
useImperativeHandle(ref, function () {
return {
setFilter: function setFilter(f) {
return compSearchBar.current && compSearchBar.current.setFieldsValue(f);
},
getFilter: function getFilter(f) {
return compSearchBar.current && compSearchBar.current.getFieldsValue(f);
},
getStore: function getStore() {
return store;
},
autoSearch: function autoSearch(f) {
return handleSearch(_extends({}, defaultFilter, f));
},
handleSearch: function handleSearch() {
return compSearchBar.current && compSearchBar.current.handleSubmit();
},
reload: function reload() {
return handleSearch(store === null || store === void 0 ? void 0 : store.filter, store === null || store === void 0 ? void 0 : store.page.current);
},
reset: function reset() {
return compSearchBar.current && compSearchBar.current.handleReset();
},
resetSubmit: function resetSubmit() {
return compSearchBar.current && compSearchBar.current.handleResetSubmit();
}
};
});
return /*#__PURE__*/React.createElement("div", {
className: className
}, useSearchBar && /*#__PURE__*/React.createElement(SearchBar, _extends({}, searchBarProps, {
ref: compSearchBar,
isLoading: searchBarProps.useLoading ? loading : false,
model: model,
defaultFilter: defaultFilter,
onFilterChange: onFilterChange,
onSearch: handleSearch,
autoSearch: autoSearch,
resetAutoSearch: resetAutoSearch
})), /*#__PURE__*/React.createElement(SearchRet, _extends({}, searchRetProps, {
isLoading: searchRetProps.useLoading ? loading : false,
dataList: store.list,
columns: columns,
pagination: usePagination ? _extends({}, store.page, {
total: store.total
}) : false,
onPageChange: handlePageChange
})));
});
List.propTypes = {
className: PropTypes.string,
model: PropTypes.array,
columns: PropTypes.array,
store: PropTypes.object,
defaultFilter: PropTypes.object,
// searchBar & searchRet
useSearchBar: PropTypes.bool,
searchBarProps: PropTypes.object,
searchRetProps: PropTypes.object,
// functions & flag
onSearch: PropTypes.func,
autoSearch: PropTypes.bool,
resetAutoSearch: PropTypes.bool
};
List.defaultProps = {
className: '',
model: [],
columns: [],
store: {},
defaultFilter: {},
// searchBar & searchRet
useSearchBar: true,
searchBarProps: {},
searchRetProps: {},
// functions & flag
onSearch: function onSearch() {},
autoSearch: true,
resetAutoSearch: false
};
List.Result = function (props) {
if (props === void 0) {
props = {};
}
return /*#__PURE__*/React.createElement(SearchRet, props);
};
export default List;