@vlsergey/react-bootstrap-pagetable
Version:
Complex solution to work with pageable data, including sorting, filtering, actions, changing displayed columns, etc.
65 lines (64 loc) • 3.63 kB
JavaScript
import { __read, __spreadArray } from "tslib";
import React, { useCallback } from 'react';
import Button from 'react-bootstrap/Button';
import ButtonGroup from 'react-bootstrap/ButtonGroup';
import Col from 'react-bootstrap/Col';
import FieldsListControl from './FieldsListControl';
function SortableFieldsListControl(_a) {
var onSelectedChange = _a.onSelectedChange, options = _a.options, onOptionsChange = _a.onOptionsChange, placeholder = _a.placeholder, selected = _a.selected;
var handleTop = useCallback(function () {
return onOptionsChange(__spreadArray(__spreadArray([], __read(selected)), __read(options.map(function (_a) {
var key = _a.key;
return key;
}).filter(function (key) { return !selected.includes(key); }))));
}, [onOptionsChange, options, selected]);
var handleUp = useCallback(function () {
var _a;
var newResult = options.map(function (_a) {
var key = _a.key;
return key;
});
for (var i = 1; i < newResult.length; i++) {
// @ts-expect-error TS2345
if (selected.includes(newResult[i])) {
// @ts-expect-error TS2345
_a = __read([newResult[i], newResult[i - 1]], 2), newResult[i - 1] = _a[0], newResult[i] = _a[1];
}
}
return onOptionsChange(newResult);
}, [onOptionsChange, options, selected]);
var handleDown = useCallback(function () {
var _a;
var newResult = options.map(function (_a) {
var key = _a.key;
return key;
});
for (var i = newResult.length - 2; i >= 0; i--) {
// @ts-expect-error TS2345
if (selected.includes(newResult[i])) {
// @ts-expect-error TS2345
_a = __read([newResult[i + 1], newResult[i]], 2), newResult[i] = _a[0], newResult[i + 1] = _a[1];
}
}
return onOptionsChange(newResult);
}, [onOptionsChange, options, selected]);
var handleBottom = useCallback(function () {
return onOptionsChange(__spreadArray(__spreadArray([], __read(options.map(function (_a) {
var key = _a.key;
return key;
}).filter(function (key) { return !selected.includes(key); }))), __read(selected)));
}, [onOptionsChange, options, selected]);
return React.createElement(React.Fragment, null,
React.createElement(Col, null,
React.createElement(FieldsListControl, { onSelectedChange: onSelectedChange, options: options, placeholder: placeholder, selected: selected })),
React.createElement(Col, { as: ButtonGroup, lg: 1, style: { height: 'fit-content', padding: 0 }, vertical: true },
React.createElement(Button, { disabled: selected.length === 0, onClick: handleTop, variant: "light" },
React.createElement("i", { className: "fa fa-angle-double-up" })),
React.createElement(Button, { disabled: selected.length === 0, onClick: handleUp, variant: "light" },
React.createElement("i", { className: "fa fa-angle-up" })),
React.createElement(Button, { disabled: selected.length === 0, onClick: handleDown, variant: "light" },
React.createElement("i", { className: "fa fa-angle-down" })),
React.createElement(Button, { disabled: selected.length === 0, onClick: handleBottom, variant: "light" },
React.createElement("i", { className: "fa fa-angle-double-down" }))));
}
export default React.memo(SortableFieldsListControl);