UNPKG

@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
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);