@skbkontur/db-viewer-ui
Version:
Database Viewer with custom configuration
50 lines • 5.73 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ObjectTableLayoutHeader = void 0;
const tslib_1 = require("tslib");
const jsx_runtime_1 = require("react/jsx-runtime");
const edi_ui_1 = require("@skbkontur/edi-ui");
const IconNetDownloadRegular16_1 = require("@skbkontur/icons/IconNetDownloadRegular16");
const IconSettingsGearRegular16_1 = require("@skbkontur/icons/IconSettingsGearRegular16");
const IconUiFilterFunnelRegular16_1 = require("@skbkontur/icons/IconUiFilterFunnelRegular16");
const IconXCircleRegular16_1 = require("@skbkontur/icons/IconXCircleRegular16");
const react_stack_layout_1 = require("@skbkontur/react-stack-layout");
const react_ui_1 = require("@skbkontur/react-ui");
const renderEnvironment_1 = require("@skbkontur/react-ui/lib/renderEnvironment");
const difference_1 = tslib_1.__importDefault(require("lodash/difference"));
const react_1 = require("react");
const PropertyMetaInformationUtils_1 = require("../../Domain/Objects/PropertyMetaInformationUtils");
const FieldSelector_1 = require("../FieldSelector/FieldSelector");
const CountOfRecordsSelector_1 = require("./CountOfRecordsSelector");
const DownloadLimitModal_1 = require("./DownloadLimitModal");
const FilterModal_1 = require("./FilterModal");
const ObjectTableLayoutHeader_styles_1 = require("./ObjectTableLayoutHeader.styles");
const Spinner_1 = require("./Spinner");
const ObjectTableLayoutHeader = ({ query, allowReadAll, properties, onChange, onDownloadClick, onDownloadAbort, downloading, showModalFilter, showDownloadModal, downloadCount, }) => {
const jsStyles = (0, renderEnvironment_1.useStyles)(ObjectTableLayoutHeader_styles_1.getStyles);
const [showFilterModal, setShowFilterModal] = (0, react_1.useState)(false);
const [modalEditingConditions, setModalEditingConditions] = (0, react_1.useState)([]);
(0, react_1.useEffect)(() => {
setShowFilterModal(showModalFilter);
setModalEditingConditions(query.conditions || []);
}, [query.conditions, showModalFilter]);
const renderFieldSelectorTooltipContent = () => {
const { hiddenColumns } = query;
if (properties.length === 0) {
return null;
}
const fields = properties.map(x => ({ name: x.name, caption: x.name }));
return ((0, jsx_runtime_1.jsx)(FieldSelector_1.FieldSelector, { showSelectAllButton: true, "data-tid": "ColumnSelector", fieldDefinitions: fields, hiddenFields: hiddenColumns, onShowField: fieldNames => onChange({ hiddenColumns: (0, difference_1.default)(hiddenColumns, fieldNames) }), onHideField: fieldNames => onChange({ hiddenColumns: [...hiddenColumns, ...fieldNames] }) }));
};
const handleApplyFilter = () => {
onChange({
conditions: modalEditingConditions.filter(x => !edi_ui_1.StringUtils.isNullOrWhitespace(x.value)),
offset: 0,
});
setShowFilterModal(false);
};
const allowCloseModal = allowReadAll || PropertyMetaInformationUtils_1.PropertyMetaInformationUtils.hasFilledRequiredFields(query.conditions || [], properties);
return ((0, jsx_runtime_1.jsxs)(react_stack_layout_1.RowStack, { baseline: true, block: true, gap: 2, style: { flexWrap: "wrap" }, children: [(0, jsx_runtime_1.jsx)(react_stack_layout_1.Fit, { className: jsStyles.filter(), children: (0, jsx_runtime_1.jsx)(react_ui_1.Link, { icon: (0, jsx_runtime_1.jsx)(IconUiFilterFunnelRegular16_1.IconUiFilterFunnelRegular16, {}), onClick: () => setShowFilterModal(true), "data-tid": "OpenFilter", children: "\u0424\u0438\u043B\u044C\u0442\u0440\u0430\u0446\u0438\u044F" }) }), (0, jsx_runtime_1.jsx)(react_stack_layout_1.Fit, { className: jsStyles.countSelector(), children: (0, jsx_runtime_1.jsx)(CountOfRecordsSelector_1.CountOfRecordsSelector, { count: query.count, onChange: value => onChange({ count: value }) }) }), (0, jsx_runtime_1.jsx)(react_stack_layout_1.Fit, { children: (0, jsx_runtime_1.jsx)(react_ui_1.Link, { icon: (0, jsx_runtime_1.jsx)(IconXCircleRegular16_1.IconXCircleRegular16, {}), onClick: () => onChange(null), "data-tid": "ClearFilter", children: "\u041E\u0447\u0438\u0441\u0442\u0438\u0442\u044C \u0444\u0438\u043B\u044C\u0442\u0440" }) }), (0, jsx_runtime_1.jsx)(react_stack_layout_1.Fit, { children: (0, jsx_runtime_1.jsx)(react_ui_1.Tooltip, { render: () => renderFieldSelectorTooltipContent(), pos: "bottom right", trigger: "click", children: (0, jsx_runtime_1.jsx)(react_ui_1.Link, { icon: (0, jsx_runtime_1.jsx)(IconSettingsGearRegular16_1.IconSettingsGearRegular16, {}), "data-tid": "FieldSettings", children: "\u041D\u0430\u0441\u0442\u0440\u043E\u0438\u0442\u044C \u043F\u043E\u043B\u044F" }) }) }), (0, jsx_runtime_1.jsx)(react_stack_layout_1.Fit, { children: (0, jsx_runtime_1.jsx)(react_ui_1.Link, { icon: downloading ? (0, jsx_runtime_1.jsx)(Spinner_1.Spinner, {}) : (0, jsx_runtime_1.jsx)(IconNetDownloadRegular16_1.IconNetDownloadRegular16, {}), onClick: onDownloadClick, disabled: downloading, "data-tid": "DownloadLink", children: "\u0412\u044B\u0433\u0440\u0443\u0437\u0438\u0442\u044C \u0432\u0441\u0451 \u0432 Excel" }) }), showFilterModal && ((0, jsx_runtime_1.jsx)(FilterModal_1.FilterModal, { allowClose: allowCloseModal, onClose: () => setShowFilterModal(false), modalEditingConditions: modalEditingConditions, tableColumns: properties.filter(x => x.isSearchable), onChangeFilter: setModalEditingConditions, onApplyFilter: handleApplyFilter })), showDownloadModal && downloadCount && ((0, jsx_runtime_1.jsx)(DownloadLimitModal_1.DownloadLimitModal, { countLimit: downloadCount.countLimit, onDownloadAbort: onDownloadAbort }))] }));
};
exports.ObjectTableLayoutHeader = ObjectTableLayoutHeader;
//# sourceMappingURL=ObjectTableLayoutHeader.js.map