UNPKG

@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
"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