@talend/react-components
Version:
Set of react components.
166 lines (164 loc) • 6.17 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.AvroRenderer = AvroRenderer;
exports.default = void 0;
var _react = require("react");
var _propTypes = _interopRequireDefault(require("prop-types"));
var _classnames = _interopRequireDefault(require("classnames"));
var _DefaultValueRenderer = _interopRequireDefault(require("./DefaultValueRenderer.component"));
var _SimpleTextKeyValueModule = _interopRequireDefault(require("./SimpleTextKeyValue.module.scss"));
var _lodash = require("lodash");
var _jsxRuntime = require("react/jsx-runtime");
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
const DATE_TYPE_FORMATER = 'date';
const LONG_TYPE = 'long';
const AVRO_TYPES = ['boolean', 'int', LONG_TYPE, 'float', 'double', 'bytes', 'string', 'unknown', 'date', 'enum'];
const TIMESTAMP_MILLIS_LOGICAL_TYPES = 'timestamp-millis';
const LOGICAL_TYPES = [TIMESTAMP_MILLIS_LOGICAL_TYPES];
const PRIMITIVES_MAPPING = {
double: 'int',
float: 'int',
int: 'int',
long: 'int'
};
function getTypeRenderer(schemaType) {
if (!schemaType) return '';
if (schemaType.type === LONG_TYPE && schemaType.logicalType === TIMESTAMP_MILLIS_LOGICAL_TYPES) {
return DATE_TYPE_FORMATER;
}
if (PRIMITIVES_MAPPING[schemaType.type]) {
return PRIMITIVES_MAPPING[schemaType.type];
}
return schemaType.type;
}
function AvroRenderer({
colDef,
data,
isValueOverflown,
isLongValueToggled
}) {
const typeRenderer = getTypeRenderer(colDef.avro.type);
const dateToString = value => {
if (value === null) {
return value;
}
try {
return new Date(value).toISOString();
} catch (e) {
return value;
}
};
switch (typeRenderer) {
case 'DefaultInt':
case 'number':
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_DefaultValueRenderer.default, {
value: data.value,
isValueOverflown: isValueOverflown,
isLongValueToggled: isLongValueToggled,
className: (0, _classnames.default)(_SimpleTextKeyValueModule.default['td-cell-int'], 'td-cell-int')
});
case 'DefaultDate':
case 'date':
case 'datetime':
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_DefaultValueRenderer.default, {
value: dateToString(data.value),
isValueOverflown: isValueOverflown,
isLongValueToggled: isLongValueToggled,
className: (0, _classnames.default)('td-cell-date')
});
case 'fixed':
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_DefaultValueRenderer.default, {
value: data,
isValueOverflown: isValueOverflown,
isLongValueToggled: isLongValueToggled
});
default:
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_DefaultValueRenderer.default, {
value: data.value,
isValueOverflown: isValueOverflown,
isLongValueToggled: isLongValueToggled
});
}
}
AvroRenderer.propTypes = {
colDef: _propTypes.default.shape({
avro: _propTypes.default.shape({
type: _propTypes.default.shape({
type: _propTypes.default.oneOf([...AVRO_TYPES, 'array', 'fixed']),
logicalType: _propTypes.default.oneOf(LOGICAL_TYPES)
})
})
}),
data: _propTypes.default.oneOfType([_propTypes.default.object, _propTypes.default.string, _propTypes.default.number, _propTypes.default.bool]),
isValueOverflown: _propTypes.default.bool,
isLongValueToggled: _propTypes.default.bool
};
// eslint-disable-next-line prefer-arrow-callback
const SimpleTextKeyValue = /*#__PURE__*/(0, _react.forwardRef)(function SimpleTextKeyValue({
formattedKey,
className,
schema,
separator,
style,
value,
displayTypes,
typesRenderer,
isValueOverflown,
isLongValueToggled
}, ref) {
let types;
if (displayTypes && schema && value) {
types = /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
className: (0, _classnames.default)(_SimpleTextKeyValueModule.default['tc-simple-text-type'], 'tc-simple-text-type'),
children: typesRenderer(schema)
});
}
return /*#__PURE__*/(0, _jsxRuntime.jsxs)("span", {
ref: ref,
className: (0, _classnames.default)(_SimpleTextKeyValueModule.default['tc-simple-text'], 'tc-simple-text', className),
style: style,
children: [!(0, _lodash.isNull)(formattedKey) && /*#__PURE__*/(0, _jsxRuntime.jsxs)("span", {
className: (0, _classnames.default)(_SimpleTextKeyValueModule.default['tc-simple-text-key'], 'tc-simple-text-key', {
[_SimpleTextKeyValueModule.default['tc-simple-text-key-with-value']]: value,
'tc-simple-text-key-with-value': value
}),
children: [(0, _lodash.get)(schema, 'talend.component.label', formattedKey), separator, types]
}), !schema && value && /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
className: (0, _classnames.default)(_SimpleTextKeyValueModule.default['tc-simple-text-value'], 'tc-simple-text-value', {
[_SimpleTextKeyValueModule.default['shrink-value']]: isValueOverflown,
[_SimpleTextKeyValueModule.default['wrap-value']]: isLongValueToggled
}),
children: value
}), schema && value && /*#__PURE__*/(0, _jsxRuntime.jsx)(AvroRenderer, {
colDef: {
avro: typeof schema.type === 'string' ? {
type: schema
} : schema
},
data: value,
isValueOverflown: isValueOverflown,
isLongValueToggled: isLongValueToggled
})]
});
});
SimpleTextKeyValue.displayName = 'SimpleTextKeyValue';
SimpleTextKeyValue.propTypes = {
className: _propTypes.default.string,
formattedKey: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number]),
schema: _propTypes.default.object,
value: _propTypes.default.any,
separator: _propTypes.default.string,
style: _propTypes.default.object,
displayTypes: _propTypes.default.bool,
typesRenderer: _propTypes.default.func,
isValueOverflown: _propTypes.default.bool,
isLongValueToggled: _propTypes.default.bool
};
SimpleTextKeyValue.defaultProps = {
displayTypes: false,
typesRenderer: schema => `- ${schema.type.type}`
};
var _default = exports.default = SimpleTextKeyValue;
//# sourceMappingURL=SimpleTextKeyValue.component.js.map