UNPKG

@skbkontur/db-viewer-ui

Version:

Database Viewer with custom configuration

60 lines 4.44 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.FieldSelector = void 0; const tslib_1 = require("tslib"); const jsx_runtime_1 = require("react/jsx-runtime"); const SearchLoupeIcon16Regular_1 = require("@skbkontur/icons/SearchLoupeIcon16Regular"); const react_stack_layout_1 = require("@skbkontur/react-stack-layout"); const react_ui_1 = require("@skbkontur/react-ui"); const LayoutEvents_1 = require("@skbkontur/react-ui/lib/LayoutEvents"); const react_1 = tslib_1.__importDefault(require("react")); const FieldSelector_styles_1 = require("./FieldSelector.styles"); const MAX_ITEMS_FOR_SPLITTING_BY_2_COLUMNS = 30; function filterFieldDefinitionsByText(fieldDefinitions, text) { if (!text) { return fieldDefinitions; } return fieldDefinitions.filter(x => x.caption.toLowerCase().includes(text.toLowerCase())); } function byColumns(memo, item, index, array) { const divisor = array.length > MAX_ITEMS_FOR_SPLITTING_BY_2_COLUMNS ? 3 : 2; memo[index % divisor].push(item); return memo; } function FieldSelector({ fieldDefinitions, hiddenFields, onShowField, onHideField, showSelectAllButton, }) { const [searchText, setSearchText] = react_1.default.useState(""); const theme = react_1.default.useContext(react_ui_1.ThemeContext); react_1.default.useEffect(() => (0, LayoutEvents_1.emit)(), [searchText]); const isAllFieldSelected = (fieldDefinition) => { return !fieldDefinition.map(x => x.name).some(x => hiddenFields.includes(x)); }; const handleToggle = (value, fieldName) => { if (value) { onShowField([fieldName]); } else { onHideField([fieldName]); } }; const handleSelectAll = (filteredFields) => { const fields = filteredFields.map(x => x.name); if (isAllFieldSelected(filteredFields)) { onHideField(fields); } else { onShowField(fields); } }; const renderFieldSelector = (fieldDefinition) => { return ((0, jsx_runtime_1.jsx)("div", { className: FieldSelector_styles_1.jsStyles.field(), children: (0, jsx_runtime_1.jsx)(react_ui_1.Checkbox, { "data-tid": fieldDefinition.name.replace(".", "_"), checked: !hiddenFields.includes(fieldDefinition.name), onValueChange: checked => handleToggle(checked, fieldDefinition.name), children: (0, jsx_runtime_1.jsx)("div", { className: FieldSelector_styles_1.jsStyles.fieldContent(), children: fieldDefinition.caption }) }) }, fieldDefinition.name + fieldDefinition.caption)); }; const fieldDefinitionsFiltered = filterFieldDefinitionsByText(fieldDefinitions, searchText); const nothingToDisplay = (0, jsx_runtime_1.jsx)("span", { className: FieldSelector_styles_1.jsStyles.nothingToDisplay(theme), children: "\u041D\u0438\u0447\u0435\u0433\u043E \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E" }); const allFieldsSelected = isAllFieldSelected(fieldDefinitionsFiltered); return ((0, jsx_runtime_1.jsxs)("div", { className: FieldSelector_styles_1.jsStyles.root(), children: [(0, jsx_runtime_1.jsxs)(react_stack_layout_1.RowStack, { gap: 5, verticalAlign: "baseline", children: [(0, jsx_runtime_1.jsx)(react_ui_1.Input, { "data-tid": "FilterInput", leftIcon: (0, jsx_runtime_1.jsx)(SearchLoupeIcon16Regular_1.SearchLoupeIcon16Regular, {}), value: searchText, width: 300, onValueChange: setSearchText }), showSelectAllButton && ((0, jsx_runtime_1.jsx)(react_ui_1.Checkbox, { "data-tid": "TypesSelectAll", onValueChange: () => handleSelectAll(fieldDefinitionsFiltered), checked: allFieldsSelected, children: "\u0412\u0441\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043D\u044B\u0435" }))] }), (0, jsx_runtime_1.jsxs)(react_stack_layout_1.RowStack, { "data-tid": "ColumnCheckboxes", className: FieldSelector_styles_1.jsStyles.fieldList(), block: true, gap: 4, children: [fieldDefinitionsFiltered.length === 0 ? (0, jsx_runtime_1.jsx)(react_stack_layout_1.Fit, { children: nothingToDisplay }) : null, fieldDefinitionsFiltered .reduce(byColumns, [[], [], []]) .filter(column => column.some(x => x != null)) .map((column, key) => ((0, jsx_runtime_1.jsx)(react_stack_layout_1.Fit, { children: column.map(field => field != null && renderFieldSelector(field)) }, key)))] })] })); } exports.FieldSelector = FieldSelector; //# sourceMappingURL=FieldSelector.js.map