@talend/react-containers
Version:
Provide connected components aka containers for @talend/react-cmf based on @talend/react-components.
115 lines • 4.36 kB
JavaScript
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); }
import PropTypes from 'prop-types';
import { Component as RComponent } from 'react';
import { List, Map } from 'immutable';
import { cmfConnect } from '@talend/react-cmf';
import { ObjectViewer as Component } from "@talend/react-components";
import { get } from "lodash";
import { jsx as _jsx } from "react/jsx-runtime";
export const DEFAULT_STATE = new Map({
edited: new List(),
// Array of JSONPath
opened: new List(),
// Array of JSONPath
selectedJsonpath: '',
// Selected JSONPath
modified: new Map() // Store the onChange
});
export function open(path, state) {
return state.set('opened', state.get('opened').push(path));
}
export function select(path, state) {
return state.set('selectedJsonpath', path);
}
export function close(path, state) {
const opened = state.get('opened');
return state.set('opened', opened.delete(opened.indexOf(path)));
}
export function edit(path, state) {
return state.set('edited', state.get('edited').push(path));
}
export function change(path, state, value) {
return state.set('modified', state.get('modified').set(path, value));
}
export 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;
}
export 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);
}
export function selectWrapper(prevState, data) {
return select(data.jsonpath, prevState.state);
}
export function editWrapper(prevState, data) {
if (data.edit === false) {
return edit(data.jsonpath, prevState.state);
}
return prevState;
}
class ObjectViewer extends RComponent {
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__*/_jsx(Component, {
...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.string,
data: get(Component, 'propTypes.data', PropTypes.any),
displayMode: get(Component, 'propTypes.displayMode', PropTypes.func),
onSubmit: get(Component, 'propTypes.onSubmit', PropTypes.func),
...cmfConnect.propTypes
});
export default ObjectViewer;
//# sourceMappingURL=ObjectViewer.container.js.map