@talend/react-forms
Version:
React forms library based on json schema form.
108 lines (107 loc) • 3.63 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = Widget;
var _propTypes = _interopRequireDefault(require("prop-types"));
var _designSystem = require("@talend/design-system");
var _jsonSchemaFormCore = require("@talend/json-schema-form-core");
var _context = require("../context");
var _condition = _interopRequireDefault(require("../utils/condition"));
var _errors = require("../utils/errors");
var _properties = require("../utils/properties");
var _WidgetComponentModule = _interopRequireDefault(require("./Widget.component.module.scss"));
var _reactComponents = require("@talend/react-components");
var _jsxRuntime = require("react/jsx-runtime");
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
// eslint-disable-next-line @typescript-eslint/default-param-last
function isUpdating(updatingKeys = [], key) {
if (updatingKeys.length === 0 || !key) {
return false;
}
// we need to support current and parent path
const serializedKey = key.join('.');
return updatingKeys.some(path => serializedKey.startsWith(path));
}
function Widget(props) {
const {
condition,
key,
options,
type,
validationMessage,
widget,
displayMode,
tooltip,
tooltipPlacement
} = props.schema;
const widgetId = widget || type;
const {
widgets,
WidgetImpl
} = (0, _context.useWidget)(widgetId, props.displayMode || displayMode);
if (widgetId === 'hidden' || !(0, _condition.default)(condition, props.properties, key)) {
return null;
}
if (!WidgetImpl) {
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_designSystem.InlineMessageDestructive, {
description: `Widget not found ${widgetId}`
});
}
const id = _jsonSchemaFormCore.sfPath.name(key, props.idSeparator || '_', props.id);
const error = (0, _errors.getError)(props.errors, props.schema);
const errorMessage = validationMessage || error;
const all = {
...props,
id,
key: id,
options,
errorMessage,
isValid: !error,
value: (0, _properties.getValue)(props.properties, props.schema),
valueIsUpdating: isUpdating(props.updating, props.schema.key),
widgets
};
if (tooltip) {
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactComponents.TooltipTrigger, {
className: _WidgetComponentModule.default.tooltip,
label: tooltip,
tooltipPlacement: tooltipPlacement || 'left',
children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(WidgetImpl, {
...all
})
})
});
}
return /*#__PURE__*/(0, _jsxRuntime.jsx)(WidgetImpl, {
...all
});
}
if (process.env.NODE_ENV !== 'production') {
Widget.propTypes = {
displayMode: _propTypes.default.string,
errors: _propTypes.default.object,
id: _propTypes.default.string,
idSeparator: _propTypes.default.string,
properties: _propTypes.default.object,
schema: _propTypes.default.shape({
condition: _propTypes.default.object,
displayMode: _propTypes.default.string,
key: _propTypes.default.array,
options: _propTypes.default.object,
tooltip: _propTypes.default.string,
tooltipPlacement: _propTypes.default.string,
type: _propTypes.default.string,
validationMessage: _propTypes.default.string,
widget: _propTypes.default.string
}).isRequired,
updating: _propTypes.default.arrayOf(_propTypes.default.string),
widgets: _propTypes.default.object
};
}
Widget.defaultProps = {
widgets: {}
};
Widget.displayName = 'Widget';
//# sourceMappingURL=Widget.component.js.map