@hrobarikt/box-ui-elements
Version:
Box UI Elements
109 lines (92 loc) • 4.29 kB
JavaScript
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); }
function _iterableToArrayLimit(arr, i) { if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === "[object Arguments]")) { return; } var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
/**
*
* @file ContentSharing Element
* @description This is the top-level component for ContentSharing. It instantiates the API, which it then
* passes to the SharingModal component either immediately (when no custom button is provided) or on
* button click (when a custom button is provided).
* @author Box
*/
import 'regenerator-runtime/runtime';
import * as React from 'react';
import API from '../../api';
import SharingModal from './SharingModal';
import { CLIENT_NAME_CONTENT_SHARING } from '../../constants';
import '../common/base.scss';
import '../common/fonts.scss';
import '../common/modal.scss';
var createAPI = function createAPI(apiHost, itemID, itemType, token) {
return new API({
apiHost: apiHost,
clientName: CLIENT_NAME_CONTENT_SHARING,
id: "".concat(itemType, "_").concat(itemID),
token: token
});
};
function ContentSharing(_ref) {
var apiHost = _ref.apiHost,
config = _ref.config,
customButton = _ref.customButton,
displayInModal = _ref.displayInModal,
itemID = _ref.itemID,
itemType = _ref.itemType,
language = _ref.language,
messages = _ref.messages,
token = _ref.token;
var _React$useState = React.useState(createAPI(apiHost, itemID, itemType, token)),
_React$useState2 = _slicedToArray(_React$useState, 2),
api = _React$useState2[0],
setAPI = _React$useState2[1];
var _React$useState3 = React.useState(null),
_React$useState4 = _slicedToArray(_React$useState3, 2),
launchButton = _React$useState4[0],
setLaunchButton = _React$useState4[1];
var _React$useState5 = React.useState(customButton ? null : React.createElement(SharingModal, {
api: api,
config: config,
displayInModal: false,
itemID: itemID,
itemType: itemType,
language: language,
messages: messages
})),
_React$useState6 = _slicedToArray(_React$useState5, 2),
sharingModalInstance = _React$useState6[0],
setSharingModalInstance = _React$useState6[1]; // Reset the API if necessary
React.useEffect(function () {
setAPI(createAPI(apiHost, itemID, itemType, token));
}, [apiHost, itemID, itemType, token]); // Reset state if the API has changed
React.useEffect(function () {
setSharingModalInstance(null);
setLaunchButton(null);
}, [api]);
React.useEffect(function () {
var createSharingModalInstance = function createSharingModalInstance() {
return React.createElement(SharingModal, {
api: api,
config: config,
displayInModal: displayInModal,
itemID: itemID,
itemType: itemType,
language: language,
messages: messages
});
}; // Add an onClick function that instantiates SharingModal to the custom button
if (customButton && !launchButton) {
setLaunchButton(React.cloneElement(customButton, {
onClick: function onClick() {
return setSharingModalInstance(createSharingModalInstance());
}
}));
} // If there is no custom button, instantiate SharingModal
if (!customButton && !sharingModalInstance) {
setSharingModalInstance(createSharingModalInstance());
}
}, [api, config, sharingModalInstance, customButton, displayInModal, itemID, itemType, language, launchButton, messages]);
return React.createElement(React.Fragment, null, launchButton, sharingModalInstance);
}
export default ContentSharing;
//# sourceMappingURL=ContentSharing.js.map