UNPKG

@vlsergey/react-bootstrap-pagetable

Version:

Complex solution to work with pageable data, including sorting, filtering, actions, changing displayed columns, etc.

46 lines (45 loc) 2.38 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); var react_1 = tslib_1.__importStar(require("react")); var Form_1 = tslib_1.__importDefault(require("react-bootstrap/Form")); function useSelectAllCheckbox(content, idF, onSelectedIdsChange, onSelectedItemsChange, selectedIdsSet) { var allPageIds = react_1.useMemo(function () { return content.map(idF); }, [idF, content]); var allChecked = react_1.useMemo(function () { return allPageIds.every(function (id) { return selectedIdsSet.has(id); }); }, [allPageIds, selectedIdsSet]); var allUnchecked = react_1.useMemo(function () { return allPageIds.every(function (id) { return !selectedIdsSet.has(id); }); }, [allPageIds, selectedIdsSet]); var allIndeterminate = !allChecked && !allUnchecked; var ref = react_1.useRef(null); react_1.useEffect(function () { if (ref.current) ref.current.indeterminate = allIndeterminate; }, [allIndeterminate]); var handleTriggerAll = react_1.useCallback(function (_a) { var checked = _a.currentTarget.checked; onSelectedIdsChange(checked ? allPageIds : []); if (onSelectedItemsChange) { onSelectedItemsChange(checked ? content : []); } }, [allPageIds, content, onSelectedIdsChange, onSelectedItemsChange]); var handleCheckboxClick = react_1.useCallback(function (e) { e.stopPropagation(); }, []); var handleCellClick = react_1.useCallback(function () { if (ref.current) { ref.current.click(); } }, []); var selectAllCheckbox = react_1.useMemo(function () { var SelectAllCheckbox = function () { return react_1.default.createElement(Form_1.default.Check, { checked: allChecked && !allUnchecked, onChange: handleTriggerAll, onClick: handleCheckboxClick, ref: ref, type: "checkbox" }); }; return SelectAllCheckbox; }, [allChecked, allUnchecked, handleTriggerAll, handleCheckboxClick, ref]); return react_1.useMemo(function () { return ({ headerCellContent: selectAllCheckbox, headerCellProps: { onClick: handleCellClick, style: { cursor: 'pointer', }, }, }); }, [selectAllCheckbox, handleCellClick]); } exports.default = useSelectAllCheckbox;