UNPKG

@skbkontur/db-viewer-ui

Version:

Database Viewer with custom configuration

92 lines 4.79 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.renderForEdit = exports.renderForDetails = exports.renderForTableCell = void 0; const tslib_1 = require("tslib"); const jsx_runtime_1 = require("react/jsx-runtime"); const react_ui_1 = require("@skbkontur/react-ui"); const get_1 = tslib_1.__importDefault(require("lodash/get")); const FileUtils_1 = require("../../Domain/Utils/FileUtils"); const DateTimePickerWithTimeZone_1 = require("../DateTimeRangePicker/DateTimePickerWithTimeZone"); const OperatorSelect_1 = require("../ObjectFilter/OperatorSelect"); function getByPath(target, path) { return (0, get_1.default)(target, path.join(".")); } function download(objectType, path, content) { FileUtils_1.FileUtils.downloadFile({ name: `${objectType}-${path.join(".")}-${content.substr(0, 6)}.bin`, contentType: "application/octet-stream", content: content, }); } function renderObject(target, path, property, objectType) { const result = typeof target === "object" ? getByPath(target, path) : null; if (result == null) { return (0, jsx_runtime_1.jsx)("span", { style: { color: "#a0a0a0" }, children: String(result) }); } const handleDownload = () => download(objectType, path, result); if (property.type.typeName === "Byte[]") { return ((0, jsx_runtime_1.jsx)(react_ui_1.Link, { "data-tid": "DownloadLink", onClick: handleDownload, children: "\u0421\u043A\u0430\u0447\u0430\u0442\u044C" })); } return String(result); } function renderForTableCell(target, path, property, objectType, customRenderer) { const customRender = customRenderer.renderTableCell(target, path, property, objectType); if (customRender) { return customRender; } return renderObject(target, path, property, objectType); } exports.renderForTableCell = renderForTableCell; function renderForDetails(target, path, property, objectType, customRenderer) { const customRender = customRenderer.renderDetails(target, path, property, objectType); if (customRender) { return customRender; } return renderObject(target, path, property, objectType); } exports.renderForDetails = renderForDetails; function renderForEdit(value, property, objectType, onChange, customRenderer) { const customEdit = customRenderer.renderEdit(value, property, objectType, onChange); if (customEdit) { return customEdit; } if (property != null && property.availableValues.length > 0) { const values = property.type.isNullable ? ["null", ...property.availableValues] : property.availableValues; return ((0, jsx_runtime_1.jsx)(OperatorSelect_1.StyledSelect, { "data-tid": "EnumSelect", items: values.map(x => [x, String(x)]), onValueChange: (nextValue) => onChange(nextValue === "null" ? null : nextValue), value: String(value) })); } const type = property.type.typeName; switch (type) { case "Boolean": { let values = ["true", "false"]; values = property.type.isNullable ? ["null", ...values] : values; return ((0, jsx_runtime_1.jsx)(OperatorSelect_1.StyledSelect, { "data-tid": "BooleanSelect", items: values.map(x => [x, String(x)]), onValueChange: (nextValue) => onChange(nextValue === "null" ? null : nextValue), value: String(value) })); } case "DateTime": case "DateTimeOffset": return ((0, jsx_runtime_1.jsx)(DateTimePickerWithTimeZone_1.DateTimePickerWithTimeZone, { value: value != null ? String(value) : null, onChange: onChange, defaultTime: "00:00:00", timeZoneEditable: type === "DateTime" })); case "Float": case "Double": case "Decimal": return (0, jsx_runtime_1.jsx)(react_ui_1.CurrencyInput, { value: Number(value), onValueChange: onChange, fractionDigits: 4 }); case "Byte": case "UInt16": case "UInt32": case "UInt64": return (0, jsx_runtime_1.jsx)(react_ui_1.CurrencyInput, { width: 300, value: Number(value), onValueChange: onChange, fractionDigits: 0 }); case "SByte": case "Int16": case "Int32": case "Int64": return ((0, jsx_runtime_1.jsx)(react_ui_1.CurrencyInput, { width: 300, value: Number(value), onValueChange: onChange, fractionDigits: 0, signed: true })); case null: case undefined: return "null"; default: if (type.indexOf("[]") !== -1) { throw new Error("Пытаемся изменить массив"); } return (0, jsx_runtime_1.jsx)(react_ui_1.Input, { width: 300, value: String(value || ""), onValueChange: onChange }); } } exports.renderForEdit = renderForEdit; //# sourceMappingURL=ObjectItemRender.js.map