@talend/react-containers
Version:
Provide connected components aka containers for @talend/react-cmf based on @talend/react-components.
91 lines (90 loc) • 4.09 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = exports.DEFAULT_STATE = void 0;
var _react = require("react");
var _propTypes = _interopRequireDefault(require("prop-types"));
var _immutable = require("immutable");
var _reactCmf = require("@talend/react-cmf");
var _HeaderBar2 = require("./HeaderBar.actions");
var _HeaderBar3 = _interopRequireDefault(require("./HeaderBar.constant"));
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({
productsFetchState: _HeaderBar3.default.PRODUCTS_NOT_LOADED
});
function sortProductsByLabel(a, b) {
return a.label > b.label ? 1 : -1;
}
class HeaderBar extends _react.Component {
componentDidUpdate(prevProps) {
// Trigger product fetch when there's an URL and
// products URL has changed or products have not been loaded yet
const hasProductsUrlChanged = this.props.productsUrl !== prevProps.productsUrl;
const hasProductsNotBeenLoaded = this.props.state.get('productsFetchState') === _HeaderBar3.default.PRODUCTS_NOT_LOADED;
if (this.props.productsUrl && (hasProductsNotBeenLoaded || hasProductsUrlChanged)) {
this.props.dispatch((0, _HeaderBar2.fetchProducts)(this.props.productsUrl));
}
}
render() {
const {
productsItems: productsFromState,
productsSort,
prepareProducts,
...props
} = this.props;
const hasFetchedProducts = this.props.state.get('productsFetchState') === _HeaderBar3.default.FETCH_PRODUCTS_SUCCESS;
const productsProps = {};
if (hasFetchedProducts && productsFromState) {
const productsFromProps = props.products || {};
const itemsFromProps = (productsFromProps.items ? props.products.items : []).map(item => {
if (item.dispatch) {
return {
...item,
onClickDispatch: item.dispatch
};
}
return item;
});
const items = [...itemsFromProps, ...productsFromState.map(product => ({
'data-feature': `product.${(product.id || '').toLowerCase()}`,
label: product.name,
icon: `talend-${product.icon}-colored`,
onClickDispatch: (0, _HeaderBar2.openProduct)(product)
}))];
productsProps.products = {
...productsFromProps,
items
};
productsProps.products.items.sort(productsSort || sortProductsByLabel);
if (prepareProducts) {
productsProps.products.items = prepareProducts(productsProps.products.items);
}
}
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactComponents.HeaderBar, {
...(0, _lodash.omit)(props, _reactCmf.cmfConnect.INJECTED_PROPS),
...productsProps
});
}
}
_defineProperty(HeaderBar, "displayName", 'Container(HeaderBar)');
_defineProperty(HeaderBar, "propTypes", {
productsUrl: _propTypes.default.string,
productsItems: _propTypes.default.arrayOf(_propTypes.default.shape({
icon: _propTypes.default.string,
id: _propTypes.default.string,
name: _propTypes.default.string,
url: _propTypes.default.string
})),
productsSort: _propTypes.default.func,
prepareProducts: _propTypes.default.func,
..._reactCmf.cmfConnect.propTypes
});
var _default = exports.default = HeaderBar;
//# sourceMappingURL=HeaderBar.container.js.map