@skbkontur/db-viewer-ui
Version:
Database Viewer with custom configuration
92 lines • 4.79 kB
JavaScript
;
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