chayns-components
Version:
A set of beautiful React components for developing chayns® applications.
127 lines (124 loc) • 5.28 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
exports.__esModule = true;
exports.default = void 0;
var _clsx = _interopRequireDefault(require("clsx"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _react = _interopRequireWildcard(require("react"));
var _ContextMenu = _interopRequireDefault(require("../../react-chayns-contextmenu/component/ContextMenu"));
var _Icon = _interopRequireDefault(require("../../react-chayns-icon/component/Icon"));
var _sharingActions = _interopRequireDefault(require("./sharingActions"));
var _sharingHelper = require("./sharingHelper");
var _TextString = _interopRequireDefault(require("../../react-chayns-textstring/component/TextString"));
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
/**
* @component
*/
/**
* A context menu for sharing a link and some text on various platforms.
*/
const SharingBar = _ref => {
let {
link: linkProp,
linkText = '',
className,
stopPropagation = false,
style,
children
} = _ref;
const [sharingProvider, setSharingProvider] = (0, _react.useState)([]);
const [textStringsLoaded, setTextStringsLoaded] = (0, _react.useState)(false);
(0, _react.useEffect)(() => {
(0, _sharingHelper.getAvailableShareProviders)().then(provider => {
setSharingProvider(provider.filter(item => item.available));
});
if (!children) {
_TextString.default.loadLibrary('ChaynsComponents').then(() => {
setTextStringsLoaded(true);
});
}
}, [children]);
const mobileShare = sharingProvider.find(app => app.id === 10 || app.id === 11);
let link = linkProp;
if (!link) {
link = (0, _sharingHelper.getDefaultShareLink)();
}
if (!children && !textStringsLoaded) {
return null;
}
const indicator = children || [/*#__PURE__*/_react.default.createElement(_Icon.default, {
key: "icon",
icon: "fal fa-share-alt",
className: "sharing-bar__icon"
}), /*#__PURE__*/_react.default.createElement(_TextString.default, {
key: "textstring",
stringName: "txt_chayns_components_sharingbar_share"
}, /*#__PURE__*/_react.default.createElement("span", {
className: "sharing-bar__text"
}))];
if (mobileShare) {
const onClick = e => {
(0, _sharingActions.default)(mobileShare, link, linkText);
if (stopPropagation) e.stopPropagation();
};
return /*#__PURE__*/_react.default.createElement("div", {
className: (0, _clsx.default)('sharing-bar', className),
style: style,
onClick: onClick
}, indicator);
}
const sharingItems = [];
sharingProvider.filter(item => item.available).forEach(x => {
sharingItems.push({
className: null,
onClick: e => {
if (stopPropagation && e && e.stopPropagation) e.stopPropagation();
(0, _sharingActions.default)(x, link, linkText);
},
stringName: x.name,
icon: x.icon
});
});
return /*#__PURE__*/_react.default.createElement("div", {
className: (0, _clsx.default)('sharing-bar', className),
style: style
}, /*#__PURE__*/_react.default.createElement(_ContextMenu.default, {
items: sharingItems,
childrenStyle: {
display: 'inline'
},
disableDialog: chayns.env.isDialog
}, indicator));
};
SharingBar.propTypes = {
/**
* The link that should be shared.
*/
link: _propTypes.default.string,
/**
* A text that will be added in front of the shared link.
*/
linkText: _propTypes.default.string,
/**
* A classname string that will be applied to the container element.
*/
className: _propTypes.default.string,
/**
* Wether click events should be prevented from propagating to parent
* elements.
*/
stopPropagation: _propTypes.default.bool,
/**
* A React style object that will be applied to the container element.
*/
style: _propTypes.default.objectOf(_propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number])),
/**
* The children nodes of the `SharingBar`.
*/
children: _propTypes.default.node
};
SharingBar.displayName = 'SharingBar';
var _default = SharingBar;
exports.default = _default;
//# sourceMappingURL=SharingBar.js.map