@vlsergey/react-bootstrap-pagetable
Version:
Complex solution to work with pageable data, including sorting, filtering, actions, changing displayed columns, etc.
45 lines (44 loc) • 2.25 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var react_1 = tslib_1.__importStar(require("react"));
var ControlledContext_1 = require("../controlled/ControlledContext");
var ActionsContext_1 = require("./ActionsContext");
var Toolbar_1 = tslib_1.__importDefault(require("./Toolbar"));
function filterItemsByIdsImpl(itemModel, items, ids) {
var item2Id = itemModel.idF;
var idsSet = new Set(ids);
return items.filter(function (item) { return idsSet.has(item2Id(item)); });
}
function ActionsToolbar() {
var _this = this;
var _a = ActionsContext_1.useActionsContext(), actions = _a.actions, onAfterAction = _a.onAfterAction, onRefreshRequired = _a.onRefreshRequired, selectedIds = _a.selectedIds;
var _b = ControlledContext_1.useControlledContext(), itemModel = _b.itemModel, page = _b.page, size = _b.size;
var handleAfterAction = react_1.useCallback(function (action, items) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
if (!onAfterAction) return [3 /*break*/, 2];
return [4 /*yield*/, onAfterAction(action, items)];
case 1:
_a.sent();
_a.label = 2;
case 2:
if (!(action.refreshAfterAction && onRefreshRequired)) return [3 /*break*/, 4];
return [4 /*yield*/, onRefreshRequired()];
case 3:
_a.sent();
_a.label = 4;
case 4: return [2 /*return*/];
}
});
}); }, [onAfterAction, onRefreshRequired]);
var selectedItems = react_1.useMemo(function () {
return filterItemsByIdsImpl(itemModel, page.content, selectedIds);
}, [itemModel, page.content, selectedIds]);
if (!actions) {
return null;
}
return react_1.default.createElement(Toolbar_1.default, { actions: actions, onAfterAction: handleAfterAction, selectedItems: selectedItems, size: size });
}
exports.default = react_1.default.memo(ActionsToolbar);
;