UNPKG

@talend/react-containers

Version:

Provide connected components aka containers for @talend/react-cmf based on @talend/react-components.

115 lines 4.36 kB
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