@talend/react-containers
Version:
Provide connected components aka containers for @talend/react-cmf based on @talend/react-components.
132 lines (131 loc) • 5.05 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.DEFAULT_STATE = void 0;
exports.change = change;
exports.close = close;
exports.default = void 0;
exports.edit = edit;
exports.editWrapper = editWrapper;
exports.open = open;
exports.openAllState = openAllState;
exports.select = select;
exports.selectWrapper = selectWrapper;
exports.toggleState = toggleState;
var _propTypes = _interopRequireDefault(require("prop-types"));
var _react = require("react");
var _immutable = require("immutable");
var _reactCmf = require("@talend/react-cmf");
var _reactComponents = require("@talend/react-components");
var _lodash = require("lodash");
var _jsxRuntime = require("react/jsx-runtime");
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
const DEFAULT_STATE = exports.DEFAULT_STATE = new _immutable.Map({
edited: new _immutable.List(),
// Array of JSONPath
opened: new _immutable.List(),
// Array of JSONPath
selectedJsonpath: '',
// Selected JSONPath
modified: new _immutable.Map() // Store the onChange
});
function open(path, state) {
return state.set('opened', state.get('opened').push(path));
}
function select(path, state) {
return state.set('selectedJsonpath', path);
}
function close(path, state) {
const opened = state.get('opened');
return state.set('opened', opened.delete(opened.indexOf(path)));
}
function edit(path, state) {
return state.set('edited', state.get('edited').push(path));
}
function change(path, state, value) {
return state.set('modified', state.get('modified').set(path, value));
}
function toggleState(prevState, data) {
if (data.isOpened) {
return close(data.jsonpath, prevState.state);
} else if (data.isOpened === false) {
// we don't want to match on undefined as false
return open(data.jsonpath, prevState.state);
}
return prevState;
}
function openAllState(prevState, siblings) {
let openedIds = prevState.state.get('opened');
siblings.filter(({
data
}) => typeof data === 'object').forEach(({
jsonpath
}) => {
if (!openedIds.includes(jsonpath)) {
openedIds = openedIds.push(jsonpath);
}
});
return prevState.state.set('opened', openedIds);
}
function selectWrapper(prevState, data) {
return select(data.jsonpath, prevState.state);
}
function editWrapper(prevState, data) {
if (data.edit === false) {
return edit(data.jsonpath, prevState.state);
}
return prevState;
}
class ObjectViewer extends _react.Component {
constructor(props) {
super(props);
this.onToggle = this.onToggle.bind(this);
this.onToggleAllSiblings = this.onToggleAllSiblings.bind(this);
this.onEdit = this.onEdit.bind(this);
this.onChange = this.onChange.bind(this);
this.onSelect = this.onSelect.bind(this);
}
onToggle(event, data) {
this.props.setState(prevState => toggleState(prevState, data));
}
onToggleAllSiblings(event, data) {
this.props.setState(prevState => openAllState(prevState, data));
}
onEdit(event, data) {
this.props.setState(prevState => editWrapper(prevState, data));
}
onChange(event, data) {
this.props.setState(prevState => change(data.jsonpath, prevState.state, event.target.value));
}
onSelect(event, data) {
this.props.setState(prevState => selectWrapper(prevState, data));
}
render() {
const state = (this.props.state || DEFAULT_STATE).toJS();
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactComponents.ObjectViewer, {
...this.props,
onChange: this.props.onSubmit ? this.onChange : undefined,
onSelect: this.onSelect,
onEdit: this.onEdit,
onToggle: this.onToggle,
onToggleAllSiblings: this.onToggleAllSiblings,
selectedJsonpath: state.selectedJsonpath,
opened: state.opened,
edited: state.edited
});
}
}
_defineProperty(ObjectViewer, "displayName", 'CMFContainer(ObjectViewer)');
_defineProperty(ObjectViewer, "propTypes", {
id: _propTypes.default.string,
data: (0, _lodash.get)(_reactComponents.ObjectViewer, 'propTypes.data', _propTypes.default.any),
displayMode: (0, _lodash.get)(_reactComponents.ObjectViewer, 'propTypes.displayMode', _propTypes.default.func),
onSubmit: (0, _lodash.get)(_reactComponents.ObjectViewer, 'propTypes.onSubmit', _propTypes.default.func),
..._reactCmf.cmfConnect.propTypes
});
var _default = exports.default = ObjectViewer;
//# sourceMappingURL=ObjectViewer.container.js.map