UNPKG

@hrobarikt/box-ui-elements

Version:
298 lines (256 loc) 13.2 kB
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } 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 SharingModal * @description This is the second-level component for the ContentSharing Element. It receives an API instance * from its parent component, ContentSharing, and then instantiates the UnifiedShareModal with API data. * @author Box */ import * as React from 'react'; import noop from 'lodash/noop'; import { FormattedMessage } from 'react-intl'; import API from '../../api'; import Internationalize from '../common/Internationalize'; import ErrorMask from '../../components/error-mask/ErrorMask'; import LoadingIndicator from '../../components/loading-indicator/LoadingIndicator'; import UnifiedShareModal from '../../features/unified-share-modal'; import SharedLinkSettingsModal from '../../features/shared-link-settings-modal'; import SharingNotification from './SharingNotification'; import { convertItemResponse, convertUserResponse } from '../../features/unified-share-modal/utils/convertData'; import { FIELD_ENTERPRISE, FIELD_HOSTNAME, TYPE_FILE, TYPE_FOLDER } from '../../constants'; import { CONTENT_SHARING_ERRORS, CONTENT_SHARING_ITEM_FIELDS, CONTENT_SHARING_VIEWS } from './constants'; import { INVITEE_PERMISSIONS } from '../../features/unified-share-modal/constants'; import contentSharingMessages from './messages'; function SharingModal(_ref) { var api = _ref.api, config = _ref.config, displayInModal = _ref.displayInModal, itemID = _ref.itemID, itemType = _ref.itemType, language = _ref.language, messages = _ref.messages; var _React$useState = React.useState(null), _React$useState2 = _slicedToArray(_React$useState, 2), item = _React$useState2[0], setItem = _React$useState2[1]; var _React$useState3 = React.useState(null), _React$useState4 = _slicedToArray(_React$useState3, 2), sharedLink = _React$useState4[0], setSharedLink = _React$useState4[1]; var _React$useState5 = React.useState(null), _React$useState6 = _slicedToArray(_React$useState5, 2), currentUserID = _React$useState6[0], setCurrentUserID = _React$useState6[1]; var _React$useState7 = React.useState(null), _React$useState8 = _slicedToArray(_React$useState7, 2), componentErrorMessage = _React$useState8[0], setComponentErrorMessage = _React$useState8[1]; var _React$useState9 = React.useState(null), _React$useState10 = _slicedToArray(_React$useState9, 2), collaboratorsList = _React$useState10[0], setCollaboratorsList = _React$useState10[1]; var _React$useState11 = React.useState(null), _React$useState12 = _slicedToArray(_React$useState11, 2), onAddLink = _React$useState12[0], setOnAddLink = _React$useState12[1]; var _React$useState13 = React.useState(null), _React$useState14 = _slicedToArray(_React$useState13, 2), onRemoveLink = _React$useState14[0], setOnRemoveLink = _React$useState14[1]; var _React$useState15 = React.useState(null), _React$useState16 = _slicedToArray(_React$useState15, 2), changeSharedLinkAccessLevel = _React$useState16[0], setChangeSharedLinkAccessLevel = _React$useState16[1]; var _React$useState17 = React.useState(null), _React$useState18 = _slicedToArray(_React$useState17, 2), changeSharedLinkPermissionLevel = _React$useState18[0], setChangeSharedLinkPermissionLevel = _React$useState18[1]; var _React$useState19 = React.useState(null), _React$useState20 = _slicedToArray(_React$useState19, 2), onSubmitSettings = _React$useState20[0], setOnSubmitSettings = _React$useState20[1]; var _React$useState21 = React.useState(CONTENT_SHARING_VIEWS.UNIFIED_SHARE_MODAL), _React$useState22 = _slicedToArray(_React$useState21, 2), currentView = _React$useState22[0], setCurrentView = _React$useState22[1]; var _React$useState23 = React.useState(null), _React$useState24 = _slicedToArray(_React$useState23, 2), getContacts = _React$useState24[0], setGetContacts = _React$useState24[1]; var _React$useState25 = React.useState(null), _React$useState26 = _slicedToArray(_React$useState25, 2), sendInvites = _React$useState26[0], setSendInvites = _React$useState26[1]; var _React$useState27 = React.useState(true), _React$useState28 = _slicedToArray(_React$useState27, 2), isLoading = _React$useState28[0], setIsLoading = _React$useState28[1]; var _React$useState29 = React.useState(true), _React$useState30 = _slicedToArray(_React$useState29, 2), isOpen = _React$useState30[0], setIsOpen = _React$useState30[1]; // Handle successful GET requests to /files or /folders var handleGetItemSuccess = React.useCallback(function (itemData) { var _convertItemResponse = convertItemResponse(itemData), itemFromAPI = _convertItemResponse.item, sharedLinkFromAPI = _convertItemResponse.sharedLink; setComponentErrorMessage(null); setItem(itemFromAPI); setSharedLink(sharedLinkFromAPI); setIsLoading(false); }, []); // Handle component-level errors var getError = React.useCallback(function (error) { var errorObject; if (error.status) { errorObject = contentSharingMessages[CONTENT_SHARING_ERRORS[error.status]]; } else if (error.response && error.response.status) { errorObject = contentSharingMessages[CONTENT_SHARING_ERRORS[error.response.status]]; } else { errorObject = contentSharingMessages.loadingError; } setComponentErrorMessage(errorObject); }, [setComponentErrorMessage]); // Reset state if the API has changed React.useEffect(function () { setChangeSharedLinkAccessLevel(null); setChangeSharedLinkPermissionLevel(null); setCollaboratorsList(null); setCurrentUserID(null); setItem(null); setOnAddLink(null); setOnRemoveLink(null); setSharedLink(null); setIsLoading(true); }, []); // Get initial data for the item React.useEffect(function () { var getItem = function getItem() { if (itemType === TYPE_FILE) { api.getFileAPI().getFile(itemID, handleGetItemSuccess, getError, { fields: CONTENT_SHARING_ITEM_FIELDS }); } else if (itemType === TYPE_FOLDER) { api.getFolderAPI().getFolderFields(itemID, handleGetItemSuccess, getError, { fields: CONTENT_SHARING_ITEM_FIELDS }); } }; if (!item && !sharedLink) { getItem(); } }, [api, getError, handleGetItemSuccess, item, itemID, itemType, sharedLink]); // Get initial data for the user React.useEffect(function () { var getUserSuccess = function getUserSuccess(userData) { var _convertUserResponse = convertUserResponse(userData), id = _convertUserResponse.id, userEnterpriseData = _convertUserResponse.userEnterpriseData; setCurrentUserID(id); setSharedLink(function (prevSharedLink) { return _objectSpread({}, prevSharedLink, {}, userEnterpriseData); }); setComponentErrorMessage(null); setIsLoading(false); }; var getUserData = function getUserData() { api.getUsersAPI(false).getUser(itemID, getUserSuccess, getError, { params: { fields: [FIELD_ENTERPRISE, FIELD_HOSTNAME].toString() } }); }; if (item && sharedLink && !currentUserID) { getUserData(); } }, [getError, item, itemID, itemType, sharedLink, currentUserID, api]); if (componentErrorMessage) { return React.createElement(ErrorMask, { errorHeader: React.createElement(FormattedMessage, componentErrorMessage) }); } // Ensure that all necessary data has been received before rendering child components // "serverURL" is added to sharedLink after the call to the Users API if (!item || !sharedLink || !currentUserID || !sharedLink.serverURL) { return React.createElement(LoadingIndicator, null); } var ownerEmail = item.ownerEmail, ownerID = item.ownerID, permissions = item.permissions; var _sharedLink$accessLev = sharedLink.accessLevel, accessLevel = _sharedLink$accessLev === void 0 ? '' : _sharedLink$accessLev, serverURL = sharedLink.serverURL; return React.createElement(Internationalize, { language: language, messages: messages }, React.createElement(React.Fragment, null, React.createElement(SharingNotification, { accessLevel: accessLevel, api: api, closeComponent: displayInModal ? function () { return setIsOpen(false); } : noop, closeSettings: function closeSettings() { return setCurrentView(CONTENT_SHARING_VIEWS.UNIFIED_SHARE_MODAL); }, collaboratorsList: collaboratorsList, currentUserID: currentUserID, getContacts: getContacts, itemID: itemID, itemType: itemType, onSubmitSettings: onSubmitSettings, ownerEmail: ownerEmail, ownerID: ownerID, permissions: permissions, sendInvites: sendInvites, serverURL: serverURL, setChangeSharedLinkAccessLevel: setChangeSharedLinkAccessLevel, setChangeSharedLinkPermissionLevel: setChangeSharedLinkPermissionLevel, setGetContacts: setGetContacts, setCollaboratorsList: setCollaboratorsList, setIsLoading: setIsLoading, setItem: setItem, setOnAddLink: setOnAddLink, setOnRemoveLink: setOnRemoveLink, setOnSubmitSettings: setOnSubmitSettings, setSendInvites: setSendInvites, setSharedLink: setSharedLink }), isOpen && currentView === CONTENT_SHARING_VIEWS.SHARED_LINK_SETTINGS && React.createElement(SharedLinkSettingsModal, _extends({ isDirectLinkUnavailableDueToDownloadSettings: false, isDirectLinkUnavailableDueToAccessPolicy: false, isDirectLinkUnavailableDueToMaliciousContent: false, isOpen: true, item: item, onRequestClose: function onRequestClose() { return setCurrentView(CONTENT_SHARING_VIEWS.UNIFIED_SHARE_MODAL); }, onSubmit: onSubmitSettings, submitting: isLoading }, sharedLink)), isOpen && currentView === CONTENT_SHARING_VIEWS.UNIFIED_SHARE_MODAL && React.createElement(UnifiedShareModal, { canInvite: sharedLink.canInvite, config: config, changeSharedLinkAccessLevel: changeSharedLinkAccessLevel, changeSharedLinkPermissionLevel: changeSharedLinkPermissionLevel, collaboratorsList: collaboratorsList, currentUserID: currentUserID, displayInModal: displayInModal, getCollaboratorContacts: getContacts, initialDataReceived: true, inviteePermissions: INVITEE_PERMISSIONS, isOpen: true, item: item, onAddLink: onAddLink, onRequestClose: displayInModal ? function () { return setIsOpen(false); } : noop, onRemoveLink: onRemoveLink, onSettingsClick: function onSettingsClick() { return setCurrentView(CONTENT_SHARING_VIEWS.SHARED_LINK_SETTINGS); }, sendInvites: sendInvites, sharedLink: sharedLink, submitting: isLoading }))); } export default SharingModal; //# sourceMappingURL=SharingModal.js.map