box-ui-elements 24.0.0-beta.7 → 24.0.0-beta.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/explorer.js +1 -1
- package/dist/openwith.js +1 -1
- package/dist/picker.js +1 -1
- package/dist/preview.js +1 -1
- package/dist/sharing.js +1 -1
- package/dist/sidebar.js +1 -1
- package/dist/uploader.js +1 -1
- package/es/constants.js +3 -1
- package/es/constants.js.flow +5 -0
- package/es/constants.js.map +1 -1
- package/es/elements/content-explorer/ContentExplorer.js +3 -2
- package/es/elements/content-explorer/ContentExplorer.js.map +1 -1
- package/es/elements/content-explorer/MetadataQueryAPIHelper.js +3 -11
- package/es/elements/content-explorer/MetadataQueryAPIHelper.js.map +1 -1
- package/es/elements/content-explorer/MetadataQueryBuilder.js +13 -23
- package/es/elements/content-explorer/MetadataQueryBuilder.js.map +1 -1
- package/es/elements/content-explorer/constants.js +0 -1
- package/es/elements/content-explorer/constants.js.map +1 -1
- package/es/elements/content-explorer/utils.js +5 -10
- package/es/elements/content-explorer/utils.js.map +1 -1
- package/es/elements/content-open-with/ContentOpenWith.js +3 -2
- package/es/elements/content-open-with/ContentOpenWith.js.flow +2 -0
- package/es/elements/content-open-with/ContentOpenWith.js.map +1 -1
- package/es/elements/content-picker/ContentPicker.js +3 -2
- package/es/elements/content-picker/ContentPicker.js.flow +2 -0
- package/es/elements/content-picker/ContentPicker.js.map +1 -1
- package/es/elements/content-preview/ContentPreview.js +3 -2
- package/es/elements/content-preview/ContentPreview.js.flow +2 -0
- package/es/elements/content-preview/ContentPreview.js.map +1 -1
- package/es/elements/content-sharing/ContentSharing.js +3 -2
- package/es/elements/content-sharing/ContentSharing.js.flow +2 -1
- package/es/elements/content-sharing/ContentSharing.js.map +1 -1
- package/es/elements/content-sidebar/ContentSidebar.js +3 -2
- package/es/elements/content-sidebar/ContentSidebar.js.flow +7 -1
- package/es/elements/content-sidebar/ContentSidebar.js.map +1 -1
- package/es/elements/content-uploader/ContentUploader.js +3 -2
- package/es/elements/content-uploader/ContentUploader.js.map +1 -1
- package/es/elements/wrappers/ES6Wrapper.js +0 -1
- package/es/elements/wrappers/ES6Wrapper.js.flow +0 -3
- package/es/elements/wrappers/ES6Wrapper.js.map +1 -1
- package/es/src/elements/content-explorer/constants.d.ts +0 -1
- package/es/src/elements/content-explorer/utils.d.ts +1 -2
- package/i18n/bn-IN.js +5 -5
- package/i18n/bn-IN.properties +5 -5
- package/i18n/da-DK.js +5 -5
- package/i18n/da-DK.properties +5 -5
- package/i18n/de-DE.js +6 -6
- package/i18n/de-DE.properties +6 -6
- package/i18n/en-AU.js +1 -1
- package/i18n/en-AU.properties +1 -1
- package/i18n/en-GB.js +1 -1
- package/i18n/en-GB.properties +1 -1
- package/i18n/es-419.js +6 -6
- package/i18n/es-419.properties +6 -6
- package/i18n/es-ES.js +6 -6
- package/i18n/es-ES.properties +6 -6
- package/i18n/fi-FI.js +5 -5
- package/i18n/fi-FI.properties +5 -5
- package/i18n/fr-CA.js +5 -5
- package/i18n/fr-CA.properties +5 -5
- package/i18n/fr-FR.js +5 -5
- package/i18n/fr-FR.properties +5 -5
- package/i18n/hi-IN.js +5 -5
- package/i18n/hi-IN.properties +5 -5
- package/i18n/it-IT.js +5 -5
- package/i18n/it-IT.properties +5 -5
- package/i18n/ko-KR.js +5 -5
- package/i18n/ko-KR.properties +5 -5
- package/i18n/nb-NO.js +5 -5
- package/i18n/nb-NO.properties +5 -5
- package/i18n/nl-NL.js +5 -5
- package/i18n/nl-NL.properties +5 -5
- package/i18n/pl-PL.js +5 -5
- package/i18n/pl-PL.properties +5 -5
- package/i18n/pt-BR.js +5 -5
- package/i18n/pt-BR.properties +5 -5
- package/i18n/ru-RU.js +6 -6
- package/i18n/ru-RU.properties +6 -6
- package/i18n/sv-SE.js +5 -5
- package/i18n/sv-SE.properties +5 -5
- package/i18n/tr-TR.js +6 -6
- package/i18n/tr-TR.properties +6 -6
- package/i18n/zh-CN.js +5 -5
- package/i18n/zh-CN.properties +5 -5
- package/i18n/zh-TW.js +5 -5
- package/i18n/zh-TW.properties +5 -5
- package/package.json +3 -3
- package/src/constants.js +5 -0
- package/src/elements/content-explorer/ContentExplorer.tsx +2 -0
- package/src/elements/content-explorer/MetadataQueryAPIHelper.ts +3 -9
- package/src/elements/content-explorer/MetadataQueryBuilder.ts +14 -26
- package/src/elements/content-explorer/__tests__/MetadataQueryAPIHelper.test.ts +41 -14
- package/src/elements/content-explorer/__tests__/MetadataQueryBuilder.test.ts +13 -0
- package/src/elements/content-explorer/constants.ts +0 -2
- package/src/elements/content-explorer/utils.ts +5 -14
- package/src/elements/content-open-with/ContentOpenWith.js +2 -0
- package/src/elements/content-picker/ContentPicker.js +2 -0
- package/src/elements/content-preview/ContentPreview.js +2 -0
- package/src/elements/content-sharing/ContentSharing.js +2 -1
- package/src/elements/content-sidebar/ContentSidebar.js +7 -1
- package/src/elements/content-uploader/ContentUploader.tsx +2 -0
- package/src/elements/wrappers/ES6Wrapper.js +0 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContentOpenWith.js","names":["React","PureComponent","classNames","uniqueid","noop","FormattedMessage","queryString","Internationalize","messages","withErrorBoundary","API","IntegrationPortalContainer","OpenWithDropdownMenu","BoxToolsInstallMessage","OpenWithButton","OpenWithFallbackButton","ExecuteForm","BOX_EDIT_INTEGRATION_ID","BOX_EDIT_SFC_INTEGRATION_ID","CLIENT_NAME_OPEN_WITH","DEFAULT_HOSTNAME_API","ERROR_CODE_EXECUTE_INTEGRATION","HTTP_GET","HTTP_POST","ORIGIN_OPEN_WITH","TYPE_FILE","TYPE_FOLDER","UNSUPPORTED_INVOCATION_METHOD_TYPE","BLACKLISTED_ERROR_MESSAGE_KEY","BOX_TOOLS_INSTALL_ERROR_MESSAGE_KEY","GENERIC_EXECUTE_MESSAGE_KEY","AUTH_CODE","ContentOpenWith","constructor","props","_defineProperty","isDropdownOpen","integrations","isLoading","fetchError","executePostData","shouldRenderErrorIntegrationPortal","shouldRenderLoadingIntegrationPortal","boxToolsName","boxToolsInstallUrl","boxEditIntegration","find","appIntegrationId","isBoxEditIntegration","isDisabled","extension","getIntegrationFileExtension","isBoxEditAvailable","canOpenExtensionWithBoxEdit","error","errorMessageObject","message","formattedErrorMessage","createElement","disabledReasons","push","setState","fileId","Promise","resolve","reject","api","getFileAPI","getFileExtension","Error","getBoxEditAPI","checkBoxEditAvailability","catch","getAppForExtension","code","onError","displayName","getAppIntegrationsAPI","execute","executeIntegrationSuccessHandler","bind","executeBoxEditErrorHandler","executeIntegrationErrorHandler","windowFeatures","window","screenX","screenY","outerHeight","innerWidth","integrationWindow","open","document","title","onunload","cleanupIntegrationWindow","integrationId","executeData","executeBoxEditSuccessHandler","executeOnlineIntegrationSuccessHandler","onExecute","method","url","location","opener","token","queryParams","parse","authCode","isFileScoped","isBoxEditSFCIntegration","openFile","data","auth_code","token_scope","console","apiHost","clientName","language","requestInterceptor","responseInterceptor","id","state","_objectSpread","initialState","clearCache","destroy","componentWillUnmount","componentDidMount","fetchOpenWithData","componentDidUpdate","prevProps","currentFileId","previousFileId","getOpenWithAPI","getOpenWithIntegrations","fetchOpenWithSuccessHandler","fetchErrorHandler","integrationID","getDisplayIntegration","Array","isArray","length","render","intlMessages","dropdownAlignment","className","displayIntegration","numIntegrations","onClick","onIntegrationClick","hasError","onSubmit","onExecuteFormSubmit","windowName","name","ContentOpenWithComponent"],"sources":["../../../src/elements/content-open-with/ContentOpenWith.js"],"sourcesContent":["/**\n * @flow\n * @file Open With Component\n * @author Box\n */\n\nimport React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport uniqueid from 'lodash/uniqueId';\nimport noop from 'lodash/noop';\nimport { FormattedMessage } from 'react-intl';\nimport queryString from 'query-string';\nimport Internationalize from '../common/Internationalize';\nimport messages from '../common/messages';\nimport { withErrorBoundary } from '../common/error-boundary';\nimport API from '../../api';\nimport IntegrationPortalContainer from './IntegrationPortalContainer';\nimport OpenWithDropdownMenu from './OpenWithDropdownMenu';\nimport BoxToolsInstallMessage from './BoxToolsInstallMessage';\nimport OpenWithButton from './OpenWithButton';\nimport OpenWithFallbackButton from './OpenWithFallbackButton';\nimport ExecuteForm from './ExecuteForm';\nimport '../common/base.scss';\nimport './ContentOpenWith.scss';\nimport {\n BOX_EDIT_INTEGRATION_ID,\n BOX_EDIT_SFC_INTEGRATION_ID,\n CLIENT_NAME_OPEN_WITH,\n DEFAULT_HOSTNAME_API,\n ERROR_CODE_EXECUTE_INTEGRATION,\n HTTP_GET,\n HTTP_POST,\n ORIGIN_OPEN_WITH,\n TYPE_FILE,\n TYPE_FOLDER,\n} from '../../constants';\nimport type { Alignment } from '../common/flowTypes';\nimport type { ExecuteAPI, Integration } from '../../common/types/integrations';\nimport type { StringMap, Token, BoxItem } from '../../common/types/core';\n\nconst UNSUPPORTED_INVOCATION_METHOD_TYPE = 'Integration invocation using this HTTP method type is not supported';\nconst BLACKLISTED_ERROR_MESSAGE_KEY = 'boxToolsBlacklistedError';\nconst BOX_TOOLS_INSTALL_ERROR_MESSAGE_KEY = 'boxToolsInstallErrorMessage';\nconst GENERIC_EXECUTE_MESSAGE_KEY = 'executeIntegrationOpenWithErrorHeader';\nconst AUTH_CODE = 'auth_code';\n\ntype ExternalProps = {\n show?: boolean,\n};\n\ntype Props = {\n /** Box API url. */\n apiHost: string,\n /** Class name applied to base component. */\n boxToolsInstallUrl?: string,\n /** Application client name. */\n boxToolsName?: string,\n /** Custom name for Box Tools to display to users */\n className: string,\n /** Custom URL to direct users to install Box Tools */\n clientName: string,\n /** Determines positioning of menu dropdown */\n dropdownAlignment: Alignment,\n /** Box File ID. */\n fileId: string,\n /** Language to use for translations. */\n language?: string,\n /** Messages to be translated. */\n messages?: StringMap,\n /** Callback that executes when an integration attempts to open the given file */\n onError: Function,\n /** Callback that executes when an integration invocation fails. The two most common cases being API failures or blocking of a new window */\n onExecute: Function,\n /** Axios request interceptor that runs before a network request. */\n requestInterceptor?: Function,\n /** Axios response interceptor that runs before a network response is returned. */\n responseInterceptor?: Function,\n /** Access token. */\n token: Token,\n};\n\ntype State = {\n executePostData: ?Object,\n fetchError: ?Error,\n integrations: ?Array<Integration>,\n isDropdownOpen: boolean,\n isLoading: boolean,\n shouldRenderErrorIntegrationPortal: boolean,\n shouldRenderLoadingIntegrationPortal: boolean,\n};\n\nclass ContentOpenWith extends PureComponent<Props, State> {\n api: API;\n\n id: string;\n\n props: Props;\n\n state: State;\n\n window: any;\n\n integrationWindow: ?any;\n\n static defaultProps = {\n apiHost: DEFAULT_HOSTNAME_API,\n className: '',\n clientName: CLIENT_NAME_OPEN_WITH,\n onExecute: noop,\n onError: noop,\n };\n\n initialState: State = {\n isDropdownOpen: false,\n integrations: null,\n isLoading: true,\n fetchError: null,\n executePostData: null,\n shouldRenderErrorIntegrationPortal: false,\n shouldRenderLoadingIntegrationPortal: false,\n };\n\n /**\n * [constructor]\n *\n * @private\n * @return {ContentOpenWith}\n */\n constructor(props: Props) {\n super(props);\n\n const { token, apiHost, clientName, language, requestInterceptor, responseInterceptor } = props;\n this.id = uniqueid('bcow_');\n this.api = new API({\n apiHost,\n clientName,\n language,\n requestInterceptor,\n responseInterceptor,\n token,\n });\n\n // Clone initial state to allow for state reset on new files\n this.state = { ...this.initialState };\n }\n\n /**\n * Destroys api instances with caches\n *\n * @private\n * @return {void}\n */\n clearCache(): void {\n this.api.destroy(true);\n }\n\n /**\n * Cleanup\n *\n * @private\n * @inheritdoc\n * @return {void}\n */\n componentWillUnmount() {\n // Don't destroy the cache while unmounting\n this.api.destroy(false);\n }\n\n /**\n *\n * @private\n * @inheritdoc\n * @return {void}\n */\n componentDidMount() {\n const { fileId }: Props = this.props;\n if (!fileId) {\n return;\n }\n\n this.window = window;\n\n this.fetchOpenWithData();\n }\n\n /**\n * After component updates, re-fetch Open With data if appropriate.\n *\n * @return {void}\n */\n componentDidUpdate(prevProps: Props): void {\n const { fileId: currentFileId }: Props = this.props;\n const { fileId: previousFileId }: Props = prevProps;\n\n if (!currentFileId) {\n return;\n }\n\n if (currentFileId !== previousFileId) {\n this.setState({ ...this.initialState });\n this.fetchOpenWithData();\n }\n }\n\n /**\n * Checks if a given integration is a Box Edit integration.\n *\n * @param {string} [integrationId] - The integration ID\n * @return {boolean}\n */\n isBoxEditIntegration(integrationId: ?string): boolean {\n return integrationId === BOX_EDIT_INTEGRATION_ID || this.isBoxEditSFCIntegration(integrationId);\n }\n\n /**\n * Checks if a given integration is a Box Edit integration.\n *\n * @param {string} [integrationId] - The integration ID\n * @return {boolean}\n */\n isBoxEditSFCIntegration(integrationId: ?string): boolean {\n return integrationId === BOX_EDIT_SFC_INTEGRATION_ID;\n }\n\n /**\n * Fetches Open With data.\n *\n * @return {void}\n */\n fetchOpenWithData(): void {\n const { fileId }: Props = this.props;\n this.api\n .getOpenWithAPI(false)\n .getOpenWithIntegrations(fileId, this.fetchOpenWithSuccessHandler, this.fetchErrorHandler);\n }\n\n /**\n * Fetch app integrations info needed to render.\n *\n * @param {OpenWithIntegrations} integrations - The available Open With integrations\n * @return {void}\n */\n fetchOpenWithSuccessHandler = async (integrations: Array<Integration>): Promise<any> => {\n const { boxToolsName, boxToolsInstallUrl } = this.props;\n const boxEditIntegration = integrations.find(({ appIntegrationId }) =>\n this.isBoxEditIntegration(appIntegrationId),\n );\n\n if (boxEditIntegration && !boxEditIntegration.isDisabled) {\n try {\n const { extension } = await this.getIntegrationFileExtension();\n boxEditIntegration.extension = extension;\n // If Box Edit is present and enabled, we need to set its ability to locally open the given file\n // No-op if these checks are successful\n await this.isBoxEditAvailable();\n await this.canOpenExtensionWithBoxEdit(boxEditIntegration);\n } catch (error) {\n const errorMessageObject = messages[error.message] || messages[GENERIC_EXECUTE_MESSAGE_KEY];\n let formattedErrorMessage = <FormattedMessage {...errorMessageObject} />;\n if (error.message === BOX_TOOLS_INSTALL_ERROR_MESSAGE_KEY) {\n formattedErrorMessage = (\n <BoxToolsInstallMessage boxToolsInstallUrl={boxToolsInstallUrl} boxToolsName={boxToolsName} />\n );\n }\n\n boxEditIntegration.disabledReasons.push(formattedErrorMessage);\n boxEditIntegration.isDisabled = true;\n }\n }\n\n this.setState({ integrations, isLoading: false });\n };\n\n /**\n * Fetches the file extension of the current file.\n *\n * @return {Promise}\n */\n getIntegrationFileExtension = (): Promise<BoxItem> => {\n const { fileId }: Props = this.props;\n return new Promise((resolve, reject) => {\n this.api\n .getFileAPI()\n .getFileExtension(fileId, resolve, () => reject(new Error(GENERIC_EXECUTE_MESSAGE_KEY)));\n });\n };\n\n /**\n * Uses Box Edit to check if Box Tools is installed and reachable\n *\n * @return {Promise}\n */\n isBoxEditAvailable = (): Promise<any> => {\n return this.api\n .getBoxEditAPI()\n .checkBoxEditAvailability()\n .catch(() => {\n throw new Error(BOX_TOOLS_INSTALL_ERROR_MESSAGE_KEY);\n });\n };\n\n /**\n * Uses Box Edit to check if Box Tools can open a given file type\n *\n * @param {String} extension - A file extension\n * @return {Promise}\n */\n canOpenExtensionWithBoxEdit = ({ extension = '' }: Integration): Promise<any> => {\n return this.api\n .getBoxEditAPI()\n .getAppForExtension(extension)\n .catch(() => {\n throw new Error(BLACKLISTED_ERROR_MESSAGE_KEY);\n });\n };\n\n /**\n * Handles a fetch error for the open_with_integrations and app_integrations endpoints\n *\n * @param {Error} error - An axios fetch error\n * @return {void}\n */\n fetchErrorHandler = (error: any, code: string): void => {\n this.props.onError(error, code, { error });\n this.setState({ fetchError: error, isLoading: false });\n };\n\n /**\n * Click handler when an integration is clicked\n *\n * @private\n * @param {string} appIntegrationId - An app integration ID\n * @param {string} displayName - The integration's display name\n * @return {void}\n */\n onIntegrationClick = ({ appIntegrationId, displayName }: Integration): void => {\n const { fileId }: Props = this.props;\n const isBoxEditIntegration = this.isBoxEditIntegration(appIntegrationId);\n this.api\n .getAppIntegrationsAPI(false)\n .execute(\n appIntegrationId,\n fileId,\n this.executeIntegrationSuccessHandler.bind(this, appIntegrationId),\n isBoxEditIntegration ? this.executeBoxEditErrorHandler : this.executeIntegrationErrorHandler,\n );\n\n if (isBoxEditIntegration) {\n // No window management is required when using Box Edit.\n return;\n }\n\n // These window features will open the new window directly on top of the current window at the same\n const windowFeatures = `left=${window.screenX},top=${window.screenY},height=${window.outerHeight},width=${window.innerWidth},toolbar=0`;\n\n // window.open() is immediately invoked to avoid popup-blockers\n // The name is included to be the target of a form if the integration is a POST integration.\n // A uniqueid is used to force the browser to open a new tab every time, while still allowing\n // a form to reference a given tab.\n this.integrationWindow = this.window.open('', `${uniqueid(appIntegrationId)}`, windowFeatures);\n this.integrationWindow.document.title = displayName;\n this.integrationWindow.onunload = this.cleanupIntegrationWindow;\n\n this.setState({\n shouldRenderLoadingIntegrationPortal: true,\n shouldRenderErrorIntegrationPortal: false,\n });\n };\n\n /**\n * cleans up the portal UI when a tab is closed so that we can remount the component later.\n *\n * @private\n * @return {void}\n */\n cleanupIntegrationWindow = () => {\n this.setState({\n shouldRenderLoadingIntegrationPortal: false,\n shouldRenderErrorIntegrationPortal: false,\n });\n };\n\n /**\n * Opens the integration in a new tab based on the API data\n *\n * @private\n * @param {string} integrationId - The integration that was executed\n * @param {ExecuteAPI} executeData - API response on how to open an executed integration\n\n * @return {void}\n */\n executeIntegrationSuccessHandler = (integrationId: string, executeData: ExecuteAPI): void => {\n if (this.isBoxEditIntegration(integrationId)) {\n this.executeBoxEditSuccessHandler(integrationId, executeData);\n } else {\n this.executeOnlineIntegrationSuccessHandler(executeData);\n }\n this.onExecute(integrationId);\n };\n\n /**\n * Opens the file via a Partner Integration\n *\n * @private\n * @param {ExecuteAPI} executeData - API response on how to open an executed integration\n\n * @return {void}\n */\n executeOnlineIntegrationSuccessHandler = (executeData: ExecuteAPI): void => {\n const { method, url } = executeData;\n switch (method) {\n case HTTP_POST:\n this.setState({ executePostData: executeData });\n break;\n case HTTP_GET:\n if (!this.integrationWindow) {\n return;\n }\n\n // Prevents abuse of window.opener\n // see here for more details: https://mathiasbynens.github.io/rel-noopener/\n this.integrationWindow.location = url;\n this.integrationWindow.opener = null;\n break;\n default:\n this.executeIntegrationErrorHandler(\n Error(UNSUPPORTED_INVOCATION_METHOD_TYPE),\n ERROR_CODE_EXECUTE_INTEGRATION,\n );\n }\n\n this.integrationWindow = null;\n };\n\n /**\n * Opens the file via Box Edit\n *\n * @private\n * @param {string} url - Integration execution URL\n\n * @return {void}\n */\n executeBoxEditSuccessHandler = (integrationId: string, { url }: ExecuteAPI): void => {\n const { fileId, token, onError } = this.props;\n const queryParams = queryString.parse(url);\n const authCode = queryParams[AUTH_CODE];\n const isFileScoped = this.isBoxEditSFCIntegration(integrationId);\n\n this.api\n .getBoxEditAPI()\n .openFile(fileId, {\n data: {\n auth_code: authCode,\n token,\n token_scope: isFileScoped ? TYPE_FILE : TYPE_FOLDER,\n },\n })\n .catch(error => {\n onError(error, ERROR_CODE_EXECUTE_INTEGRATION, { error });\n });\n };\n\n /**\n * Clears state after a form has been submitted\n *\n * @private\n * @return {void}\n */\n onExecuteFormSubmit = (): void => {\n this.setState({ executePostData: null });\n };\n\n /**\n * Calls the onExecute prop\n *\n * @private\n * @param {string} integrationID - The integration that was executed\n * @return {void}\n */\n onExecute(integrationID: string) {\n this.props.onExecute(integrationID);\n this.setState({\n shouldRenderLoadingIntegrationPortal: false,\n });\n }\n\n /**\n * Handles execution related errors\n *\n * @private\n * @param {Error} error - Error object\n * @return {void}\n */\n executeIntegrationErrorHandler = (error: any, code: string): void => {\n this.props.onError(error, code, { error });\n // eslint-disable-next-line no-console\n console.error(error);\n this.setState({\n shouldRenderLoadingIntegrationPortal: false,\n shouldRenderErrorIntegrationPortal: true,\n });\n };\n\n /**\n * Handles Box Edit execution related errors\n *\n * @private\n * @param {Error} error - Error object\n * @return {void}\n */\n executeBoxEditErrorHandler = (error: any): void => {\n this.props.onError(error);\n // eslint-disable-next-line no-console\n console.error(error);\n };\n\n /**\n * Gets a display integration, if available, for the Open With button\n *\n * @private\n * @return {?Integration}\n */\n getDisplayIntegration(): ?Integration {\n const { integrations }: State = this.state;\n // We only consider an integration a display integration if is the only integration in our state\n return Array.isArray(integrations) && integrations.length === 1 ? integrations[0] : null;\n }\n\n /**\n * Render the Open With element\n *\n * @private\n * @inheritdoc\n * @return {Element}\n */\n render() {\n const { language, messages: intlMessages, dropdownAlignment }: Props = this.props;\n const {\n fetchError,\n isLoading,\n integrations,\n executePostData,\n shouldRenderLoadingIntegrationPortal,\n shouldRenderErrorIntegrationPortal,\n }: State = this.state;\n\n const className = classNames('be bcow', this.props.className);\n const displayIntegration = this.getDisplayIntegration();\n const numIntegrations = integrations ? integrations.length : 0;\n\n return (\n <Internationalize language={language} messages={intlMessages}>\n <div className={className} data-testid=\"bcow-content\" id={this.id}>\n {numIntegrations <= 1 ? (\n <OpenWithButton\n displayIntegration={displayIntegration}\n error={fetchError}\n isLoading={isLoading}\n onClick={this.onIntegrationClick}\n />\n ) : (\n <OpenWithDropdownMenu\n dropdownAlignment={dropdownAlignment}\n integrations={((integrations: any): Array<Integration>)}\n onClick={this.onIntegrationClick}\n />\n )}\n {(shouldRenderLoadingIntegrationPortal || shouldRenderErrorIntegrationPortal) && (\n <IntegrationPortalContainer\n hasError={shouldRenderErrorIntegrationPortal}\n integrationWindow={this.integrationWindow}\n />\n )}\n {executePostData && (\n <ExecuteForm\n executePostData={executePostData}\n id={this.id}\n onSubmit={this.onExecuteFormSubmit}\n windowName={this.integrationWindow && this.integrationWindow.name}\n />\n )}\n </div>\n </Internationalize>\n );\n }\n}\n\nexport type ContentOpenWithProps = Props & ExternalProps;\nexport { ContentOpenWith as ContentOpenWithComponent };\nexport default withErrorBoundary(ORIGIN_OPEN_WITH, OpenWithFallbackButton)(ContentOpenWith);\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"ContentOpenWith.js","names":["React","PureComponent","classNames","uniqueid","noop","FormattedMessage","queryString","Internationalize","messages","withErrorBoundary","API","IntegrationPortalContainer","OpenWithDropdownMenu","BoxToolsInstallMessage","OpenWithButton","OpenWithFallbackButton","ExecuteForm","BOX_EDIT_INTEGRATION_ID","BOX_EDIT_SFC_INTEGRATION_ID","CLIENT_NAME_OPEN_WITH","CLIENT_VERSION","DEFAULT_HOSTNAME_API","ERROR_CODE_EXECUTE_INTEGRATION","HTTP_GET","HTTP_POST","ORIGIN_OPEN_WITH","TYPE_FILE","TYPE_FOLDER","UNSUPPORTED_INVOCATION_METHOD_TYPE","BLACKLISTED_ERROR_MESSAGE_KEY","BOX_TOOLS_INSTALL_ERROR_MESSAGE_KEY","GENERIC_EXECUTE_MESSAGE_KEY","AUTH_CODE","ContentOpenWith","constructor","props","_defineProperty","isDropdownOpen","integrations","isLoading","fetchError","executePostData","shouldRenderErrorIntegrationPortal","shouldRenderLoadingIntegrationPortal","boxToolsName","boxToolsInstallUrl","boxEditIntegration","find","appIntegrationId","isBoxEditIntegration","isDisabled","extension","getIntegrationFileExtension","isBoxEditAvailable","canOpenExtensionWithBoxEdit","error","errorMessageObject","message","formattedErrorMessage","createElement","disabledReasons","push","setState","fileId","Promise","resolve","reject","api","getFileAPI","getFileExtension","Error","getBoxEditAPI","checkBoxEditAvailability","catch","getAppForExtension","code","onError","displayName","getAppIntegrationsAPI","execute","executeIntegrationSuccessHandler","bind","executeBoxEditErrorHandler","executeIntegrationErrorHandler","windowFeatures","window","screenX","screenY","outerHeight","innerWidth","integrationWindow","open","document","title","onunload","cleanupIntegrationWindow","integrationId","executeData","executeBoxEditSuccessHandler","executeOnlineIntegrationSuccessHandler","onExecute","method","url","location","opener","token","queryParams","parse","authCode","isFileScoped","isBoxEditSFCIntegration","openFile","data","auth_code","token_scope","console","apiHost","clientName","language","requestInterceptor","responseInterceptor","id","version","state","_objectSpread","initialState","clearCache","destroy","componentWillUnmount","componentDidMount","fetchOpenWithData","componentDidUpdate","prevProps","currentFileId","previousFileId","getOpenWithAPI","getOpenWithIntegrations","fetchOpenWithSuccessHandler","fetchErrorHandler","integrationID","getDisplayIntegration","Array","isArray","length","render","intlMessages","dropdownAlignment","className","displayIntegration","numIntegrations","onClick","onIntegrationClick","hasError","onSubmit","onExecuteFormSubmit","windowName","name","ContentOpenWithComponent"],"sources":["../../../src/elements/content-open-with/ContentOpenWith.js"],"sourcesContent":["/**\n * @flow\n * @file Open With Component\n * @author Box\n */\n\nimport React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport uniqueid from 'lodash/uniqueId';\nimport noop from 'lodash/noop';\nimport { FormattedMessage } from 'react-intl';\nimport queryString from 'query-string';\nimport Internationalize from '../common/Internationalize';\nimport messages from '../common/messages';\nimport { withErrorBoundary } from '../common/error-boundary';\nimport API from '../../api';\nimport IntegrationPortalContainer from './IntegrationPortalContainer';\nimport OpenWithDropdownMenu from './OpenWithDropdownMenu';\nimport BoxToolsInstallMessage from './BoxToolsInstallMessage';\nimport OpenWithButton from './OpenWithButton';\nimport OpenWithFallbackButton from './OpenWithFallbackButton';\nimport ExecuteForm from './ExecuteForm';\nimport '../common/base.scss';\nimport './ContentOpenWith.scss';\nimport {\n BOX_EDIT_INTEGRATION_ID,\n BOX_EDIT_SFC_INTEGRATION_ID,\n CLIENT_NAME_OPEN_WITH,\n CLIENT_VERSION,\n DEFAULT_HOSTNAME_API,\n ERROR_CODE_EXECUTE_INTEGRATION,\n HTTP_GET,\n HTTP_POST,\n ORIGIN_OPEN_WITH,\n TYPE_FILE,\n TYPE_FOLDER,\n} from '../../constants';\nimport type { Alignment } from '../common/flowTypes';\nimport type { ExecuteAPI, Integration } from '../../common/types/integrations';\nimport type { StringMap, Token, BoxItem } from '../../common/types/core';\n\nconst UNSUPPORTED_INVOCATION_METHOD_TYPE = 'Integration invocation using this HTTP method type is not supported';\nconst BLACKLISTED_ERROR_MESSAGE_KEY = 'boxToolsBlacklistedError';\nconst BOX_TOOLS_INSTALL_ERROR_MESSAGE_KEY = 'boxToolsInstallErrorMessage';\nconst GENERIC_EXECUTE_MESSAGE_KEY = 'executeIntegrationOpenWithErrorHeader';\nconst AUTH_CODE = 'auth_code';\n\ntype ExternalProps = {\n show?: boolean,\n};\n\ntype Props = {\n /** Box API url. */\n apiHost: string,\n /** Class name applied to base component. */\n boxToolsInstallUrl?: string,\n /** Application client name. */\n boxToolsName?: string,\n /** Custom name for Box Tools to display to users */\n className: string,\n /** Custom URL to direct users to install Box Tools */\n clientName: string,\n /** Determines positioning of menu dropdown */\n dropdownAlignment: Alignment,\n /** Box File ID. */\n fileId: string,\n /** Language to use for translations. */\n language?: string,\n /** Messages to be translated. */\n messages?: StringMap,\n /** Callback that executes when an integration attempts to open the given file */\n onError: Function,\n /** Callback that executes when an integration invocation fails. The two most common cases being API failures or blocking of a new window */\n onExecute: Function,\n /** Axios request interceptor that runs before a network request. */\n requestInterceptor?: Function,\n /** Axios response interceptor that runs before a network response is returned. */\n responseInterceptor?: Function,\n /** Access token. */\n token: Token,\n};\n\ntype State = {\n executePostData: ?Object,\n fetchError: ?Error,\n integrations: ?Array<Integration>,\n isDropdownOpen: boolean,\n isLoading: boolean,\n shouldRenderErrorIntegrationPortal: boolean,\n shouldRenderLoadingIntegrationPortal: boolean,\n};\n\nclass ContentOpenWith extends PureComponent<Props, State> {\n api: API;\n\n id: string;\n\n props: Props;\n\n state: State;\n\n window: any;\n\n integrationWindow: ?any;\n\n static defaultProps = {\n apiHost: DEFAULT_HOSTNAME_API,\n className: '',\n clientName: CLIENT_NAME_OPEN_WITH,\n onExecute: noop,\n onError: noop,\n };\n\n initialState: State = {\n isDropdownOpen: false,\n integrations: null,\n isLoading: true,\n fetchError: null,\n executePostData: null,\n shouldRenderErrorIntegrationPortal: false,\n shouldRenderLoadingIntegrationPortal: false,\n };\n\n /**\n * [constructor]\n *\n * @private\n * @return {ContentOpenWith}\n */\n constructor(props: Props) {\n super(props);\n\n const { token, apiHost, clientName, language, requestInterceptor, responseInterceptor } = props;\n this.id = uniqueid('bcow_');\n this.api = new API({\n apiHost,\n clientName,\n language,\n requestInterceptor,\n responseInterceptor,\n token,\n version: CLIENT_VERSION,\n });\n\n // Clone initial state to allow for state reset on new files\n this.state = { ...this.initialState };\n }\n\n /**\n * Destroys api instances with caches\n *\n * @private\n * @return {void}\n */\n clearCache(): void {\n this.api.destroy(true);\n }\n\n /**\n * Cleanup\n *\n * @private\n * @inheritdoc\n * @return {void}\n */\n componentWillUnmount() {\n // Don't destroy the cache while unmounting\n this.api.destroy(false);\n }\n\n /**\n *\n * @private\n * @inheritdoc\n * @return {void}\n */\n componentDidMount() {\n const { fileId }: Props = this.props;\n if (!fileId) {\n return;\n }\n\n this.window = window;\n\n this.fetchOpenWithData();\n }\n\n /**\n * After component updates, re-fetch Open With data if appropriate.\n *\n * @return {void}\n */\n componentDidUpdate(prevProps: Props): void {\n const { fileId: currentFileId }: Props = this.props;\n const { fileId: previousFileId }: Props = prevProps;\n\n if (!currentFileId) {\n return;\n }\n\n if (currentFileId !== previousFileId) {\n this.setState({ ...this.initialState });\n this.fetchOpenWithData();\n }\n }\n\n /**\n * Checks if a given integration is a Box Edit integration.\n *\n * @param {string} [integrationId] - The integration ID\n * @return {boolean}\n */\n isBoxEditIntegration(integrationId: ?string): boolean {\n return integrationId === BOX_EDIT_INTEGRATION_ID || this.isBoxEditSFCIntegration(integrationId);\n }\n\n /**\n * Checks if a given integration is a Box Edit integration.\n *\n * @param {string} [integrationId] - The integration ID\n * @return {boolean}\n */\n isBoxEditSFCIntegration(integrationId: ?string): boolean {\n return integrationId === BOX_EDIT_SFC_INTEGRATION_ID;\n }\n\n /**\n * Fetches Open With data.\n *\n * @return {void}\n */\n fetchOpenWithData(): void {\n const { fileId }: Props = this.props;\n this.api\n .getOpenWithAPI(false)\n .getOpenWithIntegrations(fileId, this.fetchOpenWithSuccessHandler, this.fetchErrorHandler);\n }\n\n /**\n * Fetch app integrations info needed to render.\n *\n * @param {OpenWithIntegrations} integrations - The available Open With integrations\n * @return {void}\n */\n fetchOpenWithSuccessHandler = async (integrations: Array<Integration>): Promise<any> => {\n const { boxToolsName, boxToolsInstallUrl } = this.props;\n const boxEditIntegration = integrations.find(({ appIntegrationId }) =>\n this.isBoxEditIntegration(appIntegrationId),\n );\n\n if (boxEditIntegration && !boxEditIntegration.isDisabled) {\n try {\n const { extension } = await this.getIntegrationFileExtension();\n boxEditIntegration.extension = extension;\n // If Box Edit is present and enabled, we need to set its ability to locally open the given file\n // No-op if these checks are successful\n await this.isBoxEditAvailable();\n await this.canOpenExtensionWithBoxEdit(boxEditIntegration);\n } catch (error) {\n const errorMessageObject = messages[error.message] || messages[GENERIC_EXECUTE_MESSAGE_KEY];\n let formattedErrorMessage = <FormattedMessage {...errorMessageObject} />;\n if (error.message === BOX_TOOLS_INSTALL_ERROR_MESSAGE_KEY) {\n formattedErrorMessage = (\n <BoxToolsInstallMessage boxToolsInstallUrl={boxToolsInstallUrl} boxToolsName={boxToolsName} />\n );\n }\n\n boxEditIntegration.disabledReasons.push(formattedErrorMessage);\n boxEditIntegration.isDisabled = true;\n }\n }\n\n this.setState({ integrations, isLoading: false });\n };\n\n /**\n * Fetches the file extension of the current file.\n *\n * @return {Promise}\n */\n getIntegrationFileExtension = (): Promise<BoxItem> => {\n const { fileId }: Props = this.props;\n return new Promise((resolve, reject) => {\n this.api\n .getFileAPI()\n .getFileExtension(fileId, resolve, () => reject(new Error(GENERIC_EXECUTE_MESSAGE_KEY)));\n });\n };\n\n /**\n * Uses Box Edit to check if Box Tools is installed and reachable\n *\n * @return {Promise}\n */\n isBoxEditAvailable = (): Promise<any> => {\n return this.api\n .getBoxEditAPI()\n .checkBoxEditAvailability()\n .catch(() => {\n throw new Error(BOX_TOOLS_INSTALL_ERROR_MESSAGE_KEY);\n });\n };\n\n /**\n * Uses Box Edit to check if Box Tools can open a given file type\n *\n * @param {String} extension - A file extension\n * @return {Promise}\n */\n canOpenExtensionWithBoxEdit = ({ extension = '' }: Integration): Promise<any> => {\n return this.api\n .getBoxEditAPI()\n .getAppForExtension(extension)\n .catch(() => {\n throw new Error(BLACKLISTED_ERROR_MESSAGE_KEY);\n });\n };\n\n /**\n * Handles a fetch error for the open_with_integrations and app_integrations endpoints\n *\n * @param {Error} error - An axios fetch error\n * @return {void}\n */\n fetchErrorHandler = (error: any, code: string): void => {\n this.props.onError(error, code, { error });\n this.setState({ fetchError: error, isLoading: false });\n };\n\n /**\n * Click handler when an integration is clicked\n *\n * @private\n * @param {string} appIntegrationId - An app integration ID\n * @param {string} displayName - The integration's display name\n * @return {void}\n */\n onIntegrationClick = ({ appIntegrationId, displayName }: Integration): void => {\n const { fileId }: Props = this.props;\n const isBoxEditIntegration = this.isBoxEditIntegration(appIntegrationId);\n this.api\n .getAppIntegrationsAPI(false)\n .execute(\n appIntegrationId,\n fileId,\n this.executeIntegrationSuccessHandler.bind(this, appIntegrationId),\n isBoxEditIntegration ? this.executeBoxEditErrorHandler : this.executeIntegrationErrorHandler,\n );\n\n if (isBoxEditIntegration) {\n // No window management is required when using Box Edit.\n return;\n }\n\n // These window features will open the new window directly on top of the current window at the same\n const windowFeatures = `left=${window.screenX},top=${window.screenY},height=${window.outerHeight},width=${window.innerWidth},toolbar=0`;\n\n // window.open() is immediately invoked to avoid popup-blockers\n // The name is included to be the target of a form if the integration is a POST integration.\n // A uniqueid is used to force the browser to open a new tab every time, while still allowing\n // a form to reference a given tab.\n this.integrationWindow = this.window.open('', `${uniqueid(appIntegrationId)}`, windowFeatures);\n this.integrationWindow.document.title = displayName;\n this.integrationWindow.onunload = this.cleanupIntegrationWindow;\n\n this.setState({\n shouldRenderLoadingIntegrationPortal: true,\n shouldRenderErrorIntegrationPortal: false,\n });\n };\n\n /**\n * cleans up the portal UI when a tab is closed so that we can remount the component later.\n *\n * @private\n * @return {void}\n */\n cleanupIntegrationWindow = () => {\n this.setState({\n shouldRenderLoadingIntegrationPortal: false,\n shouldRenderErrorIntegrationPortal: false,\n });\n };\n\n /**\n * Opens the integration in a new tab based on the API data\n *\n * @private\n * @param {string} integrationId - The integration that was executed\n * @param {ExecuteAPI} executeData - API response on how to open an executed integration\n\n * @return {void}\n */\n executeIntegrationSuccessHandler = (integrationId: string, executeData: ExecuteAPI): void => {\n if (this.isBoxEditIntegration(integrationId)) {\n this.executeBoxEditSuccessHandler(integrationId, executeData);\n } else {\n this.executeOnlineIntegrationSuccessHandler(executeData);\n }\n this.onExecute(integrationId);\n };\n\n /**\n * Opens the file via a Partner Integration\n *\n * @private\n * @param {ExecuteAPI} executeData - API response on how to open an executed integration\n\n * @return {void}\n */\n executeOnlineIntegrationSuccessHandler = (executeData: ExecuteAPI): void => {\n const { method, url } = executeData;\n switch (method) {\n case HTTP_POST:\n this.setState({ executePostData: executeData });\n break;\n case HTTP_GET:\n if (!this.integrationWindow) {\n return;\n }\n\n // Prevents abuse of window.opener\n // see here for more details: https://mathiasbynens.github.io/rel-noopener/\n this.integrationWindow.location = url;\n this.integrationWindow.opener = null;\n break;\n default:\n this.executeIntegrationErrorHandler(\n Error(UNSUPPORTED_INVOCATION_METHOD_TYPE),\n ERROR_CODE_EXECUTE_INTEGRATION,\n );\n }\n\n this.integrationWindow = null;\n };\n\n /**\n * Opens the file via Box Edit\n *\n * @private\n * @param {string} url - Integration execution URL\n\n * @return {void}\n */\n executeBoxEditSuccessHandler = (integrationId: string, { url }: ExecuteAPI): void => {\n const { fileId, token, onError } = this.props;\n const queryParams = queryString.parse(url);\n const authCode = queryParams[AUTH_CODE];\n const isFileScoped = this.isBoxEditSFCIntegration(integrationId);\n\n this.api\n .getBoxEditAPI()\n .openFile(fileId, {\n data: {\n auth_code: authCode,\n token,\n token_scope: isFileScoped ? TYPE_FILE : TYPE_FOLDER,\n },\n })\n .catch(error => {\n onError(error, ERROR_CODE_EXECUTE_INTEGRATION, { error });\n });\n };\n\n /**\n * Clears state after a form has been submitted\n *\n * @private\n * @return {void}\n */\n onExecuteFormSubmit = (): void => {\n this.setState({ executePostData: null });\n };\n\n /**\n * Calls the onExecute prop\n *\n * @private\n * @param {string} integrationID - The integration that was executed\n * @return {void}\n */\n onExecute(integrationID: string) {\n this.props.onExecute(integrationID);\n this.setState({\n shouldRenderLoadingIntegrationPortal: false,\n });\n }\n\n /**\n * Handles execution related errors\n *\n * @private\n * @param {Error} error - Error object\n * @return {void}\n */\n executeIntegrationErrorHandler = (error: any, code: string): void => {\n this.props.onError(error, code, { error });\n // eslint-disable-next-line no-console\n console.error(error);\n this.setState({\n shouldRenderLoadingIntegrationPortal: false,\n shouldRenderErrorIntegrationPortal: true,\n });\n };\n\n /**\n * Handles Box Edit execution related errors\n *\n * @private\n * @param {Error} error - Error object\n * @return {void}\n */\n executeBoxEditErrorHandler = (error: any): void => {\n this.props.onError(error);\n // eslint-disable-next-line no-console\n console.error(error);\n };\n\n /**\n * Gets a display integration, if available, for the Open With button\n *\n * @private\n * @return {?Integration}\n */\n getDisplayIntegration(): ?Integration {\n const { integrations }: State = this.state;\n // We only consider an integration a display integration if is the only integration in our state\n return Array.isArray(integrations) && integrations.length === 1 ? integrations[0] : null;\n }\n\n /**\n * Render the Open With element\n *\n * @private\n * @inheritdoc\n * @return {Element}\n */\n render() {\n const { language, messages: intlMessages, dropdownAlignment }: Props = this.props;\n const {\n fetchError,\n isLoading,\n integrations,\n executePostData,\n shouldRenderLoadingIntegrationPortal,\n shouldRenderErrorIntegrationPortal,\n }: State = this.state;\n\n const className = classNames('be bcow', this.props.className);\n const displayIntegration = this.getDisplayIntegration();\n const numIntegrations = integrations ? integrations.length : 0;\n\n return (\n <Internationalize language={language} messages={intlMessages}>\n <div className={className} data-testid=\"bcow-content\" id={this.id}>\n {numIntegrations <= 1 ? (\n <OpenWithButton\n displayIntegration={displayIntegration}\n error={fetchError}\n isLoading={isLoading}\n onClick={this.onIntegrationClick}\n />\n ) : (\n <OpenWithDropdownMenu\n dropdownAlignment={dropdownAlignment}\n integrations={((integrations: any): Array<Integration>)}\n onClick={this.onIntegrationClick}\n />\n )}\n {(shouldRenderLoadingIntegrationPortal || shouldRenderErrorIntegrationPortal) && (\n <IntegrationPortalContainer\n hasError={shouldRenderErrorIntegrationPortal}\n integrationWindow={this.integrationWindow}\n />\n )}\n {executePostData && (\n <ExecuteForm\n executePostData={executePostData}\n id={this.id}\n onSubmit={this.onExecuteFormSubmit}\n windowName={this.integrationWindow && this.integrationWindow.name}\n />\n )}\n </div>\n </Internationalize>\n );\n }\n}\n\nexport type ContentOpenWithProps = Props & ExternalProps;\nexport { ContentOpenWith as ContentOpenWithComponent };\nexport default withErrorBoundary(ORIGIN_OPEN_WITH, OpenWithFallbackButton)(ContentOpenWith);\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -33,7 +33,7 @@ import { isFocusableElement, isInputElement, focus } from '../../utils/dom';
|
|
|
33
33
|
import API from '../../api';
|
|
34
34
|
import Content from './Content';
|
|
35
35
|
import Footer from './Footer';
|
|
36
|
-
import { CLIENT_NAME_CONTENT_PICKER, DEFAULT_HOSTNAME_API, DEFAULT_HOSTNAME_UPLOAD, DEFAULT_PAGE_NUMBER, DEFAULT_PAGE_SIZE, DEFAULT_ROOT, DEFAULT_SEARCH_DEBOUNCE, DEFAULT_VIEW_FILES, DEFAULT_VIEW_RECENTS, ERROR_CODE_ITEM_NAME_INVALID, ERROR_CODE_ITEM_NAME_TOO_LONG, FIELD_NAME, FIELD_PERMISSIONS_CAN_SHARE, FIELD_SHARED_LINK, SORT_ASC, TYPE_FILE, TYPE_FOLDER, TYPE_WEBLINK, TYPED_ID_FOLDER_PREFIX, VIEW_ERROR, VIEW_FOLDER, VIEW_RECENTS, VIEW_SEARCH, VIEW_SELECTED } from '../../constants';
|
|
36
|
+
import { CLIENT_NAME_CONTENT_PICKER, CLIENT_VERSION, DEFAULT_HOSTNAME_API, DEFAULT_HOSTNAME_UPLOAD, DEFAULT_PAGE_NUMBER, DEFAULT_PAGE_SIZE, DEFAULT_ROOT, DEFAULT_SEARCH_DEBOUNCE, DEFAULT_VIEW_FILES, DEFAULT_VIEW_RECENTS, ERROR_CODE_ITEM_NAME_INVALID, ERROR_CODE_ITEM_NAME_TOO_LONG, FIELD_NAME, FIELD_PERMISSIONS_CAN_SHARE, FIELD_SHARED_LINK, SORT_ASC, TYPE_FILE, TYPE_FOLDER, TYPE_WEBLINK, TYPED_ID_FOLDER_PREFIX, VIEW_ERROR, VIEW_FOLDER, VIEW_RECENTS, VIEW_SEARCH, VIEW_SELECTED } from '../../constants';
|
|
37
37
|
import { FILE_SHARED_LINK_FIELDS_TO_FETCH } from '../../utils/fields';
|
|
38
38
|
// $FlowFixMe TypeScript file
|
|
39
39
|
|
|
@@ -856,7 +856,8 @@ class ContentPicker extends Component {
|
|
|
856
856
|
sharedLink,
|
|
857
857
|
sharedLinkPassword,
|
|
858
858
|
token,
|
|
859
|
-
uploadHost
|
|
859
|
+
uploadHost,
|
|
860
|
+
version: CLIENT_VERSION
|
|
860
861
|
});
|
|
861
862
|
this.id = uniqueid('bcp_');
|
|
862
863
|
this.state = {
|
|
@@ -30,6 +30,7 @@ import Content from './Content';
|
|
|
30
30
|
import Footer from './Footer';
|
|
31
31
|
import {
|
|
32
32
|
CLIENT_NAME_CONTENT_PICKER,
|
|
33
|
+
CLIENT_VERSION,
|
|
33
34
|
DEFAULT_HOSTNAME_API,
|
|
34
35
|
DEFAULT_HOSTNAME_UPLOAD,
|
|
35
36
|
DEFAULT_PAGE_NUMBER,
|
|
@@ -231,6 +232,7 @@ class ContentPicker extends Component<Props, State> {
|
|
|
231
232
|
sharedLinkPassword,
|
|
232
233
|
token,
|
|
233
234
|
uploadHost,
|
|
235
|
+
version: CLIENT_VERSION,
|
|
234
236
|
});
|
|
235
237
|
|
|
236
238
|
this.id = uniqueid('bcp_');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContentPicker.js","names":["React","Component","classNames","debounce","flow","getProp","uniqueid","noop","Header","SubHeader","UploadDialog","CreateFolderDialog","Internationalize","makeResponsive","withBlueprintModernization","ThemingStyles","Pagination","isFocusableElement","isInputElement","focus","API","Content","Footer","CLIENT_NAME_CONTENT_PICKER","DEFAULT_HOSTNAME_API","DEFAULT_HOSTNAME_UPLOAD","DEFAULT_PAGE_NUMBER","DEFAULT_PAGE_SIZE","DEFAULT_ROOT","DEFAULT_SEARCH_DEBOUNCE","DEFAULT_VIEW_FILES","DEFAULT_VIEW_RECENTS","ERROR_CODE_ITEM_NAME_INVALID","ERROR_CODE_ITEM_NAME_TOO_LONG","FIELD_NAME","FIELD_PERMISSIONS_CAN_SHARE","FIELD_SHARED_LINK","SORT_ASC","TYPE_FILE","TYPE_FOLDER","TYPE_WEBLINK","TYPED_ID_FOLDER_PREFIX","VIEW_ERROR","VIEW_FOLDER","VIEW_RECENTS","VIEW_SEARCH","VIEW_SELECTED","FILE_SHARED_LINK_FIELDS_TO_FETCH","defaultType","ContentPicker","constructor","props","_defineProperty","selected","state","Object","keys","map","key","clone","_objectSpread","onChoose","results","getSelectedItems","forEach","onCancel","deleteSelectedKeys","setState","currentCollection","id","view","searchQuery","fetchFolder","showRecents","search","showSelected","Error","error","code","console","item","type","triggerNavigationEvent","rootFolderId","currentId","currentOffset","currentPageSize","limit","sortBy","sortDirection","folderId","hasFolderChanged","hasSearchQuery","trim","length","offset","firstLoad","rootElement","currentUnloadedCollection","api","getFolderAPI","getFolder","collection","fetchFolderSuccessCallback","errorCallback","forceFetch","percentLoaded","items","getCache","get","finishNavigation","_extends","query","getSearchAPI","searchSuccessCallback","trimmedQuery","debouncedSearch","cancel","permissions","canUpload","can_upload","canUploadPermission","isUploadModalOpen","createFolderCallback","name","isCreateFolderModalOpen","canCreateNewFolder","errorCode","isLoading","create","forceSharedLink","canSetShareAccess","selectableType","maxSelectable","indexOf","selectedKeys","selectedCount","hasHitSelectionLimit","isSingleFileSelection","cacheKey","getAPI","getCacheKey","existing","existingFromCache","existInSelected","prior","fetchSharedLinkInfo","focusedRow","findIndex","i","getFolderFields","handleSharedLinkSuccess","fields","getFileAPI","getFile","getWebLinkAPI","getWeblink","updatedItem","share","undefined","sharedItem","updateItemInCollection","select","access","can_set_share_access","newState","collectionItem","refreshCollection","table","event","target","toLowerCase","preventDefault","globalModifier","choose","upload","createFolder","newOffset","apiHost","clientName","initialPage","initialPageSize","language","requestInterceptor","responseInterceptor","sharedLink","sharedLinkPassword","token","uploadHost","rootName","clearCache","destroy","componentWillUnmount","componentDidMount","defaultView","currentFolderId","document","getElementById","appElement","firstElementChild","componentDidUpdate","prevFolderId","prevState","autoFocus","activeElement","clearSelectedItemsOnNavigation","commonState","closeModals","recentsSuccessCallback","getRecentsAPI","recents","render","messages","logoUrl","contentUploaderProps","extensions","isHeaderLogoVisible","isPaginationVisible","isSmall","className","measureRef","chooseButtonLabel","cancelButtonLabel","renderCustomActionButtons","showSelectedButton","theme","itemActions","totalCount","isSingleSelect","allowUpload","allowCreate","styleClassName","createElement","ref","onKeyDown","tabIndex","onSearch","rootId","onUpload","onCreate","onItemClick","onSortChange","sort","extensionsWhitelist","tableRef","onItemSelect","onFocusChange","onShareAccessChange","changeShareAccess","selectedItems","onSelectedClick","onOffsetChange","paginate","pageSize","isOpen","onClose","uploadSuccessHandler","parentElement","Infinity","ContentPickerComponent"],"sources":["../../../src/elements/content-picker/ContentPicker.js"],"sourcesContent":["/**\n * @flow\n * @file Content Picker Component\n * @author Box\n */\n\nimport 'regenerator-runtime/runtime';\nimport React, { Component } from 'react';\nimport type { Node } from 'react';\nimport classNames from 'classnames';\nimport debounce from 'lodash/debounce';\nimport flow from 'lodash/flow';\nimport getProp from 'lodash/get';\nimport uniqueid from 'lodash/uniqueId';\nimport noop from 'lodash/noop';\nimport Header from '../common/header';\nimport SubHeader from '../common/sub-header/SubHeader';\nimport UploadDialog from '../common/upload-dialog';\nimport CreateFolderDialog from '../common/create-folder-dialog';\nimport Internationalize from '../common/Internationalize';\nimport makeResponsive from '../common/makeResponsive';\n// $FlowFixMe\nimport { withBlueprintModernization } from '../common/withBlueprintModernization';\n// $FlowFixMe TypeScript file\nimport ThemingStyles from '../common/theming';\nimport Pagination from '../../features/pagination';\nimport { isFocusableElement, isInputElement, focus } from '../../utils/dom';\nimport API from '../../api';\nimport Content from './Content';\nimport Footer from './Footer';\nimport {\n CLIENT_NAME_CONTENT_PICKER,\n DEFAULT_HOSTNAME_API,\n DEFAULT_HOSTNAME_UPLOAD,\n DEFAULT_PAGE_NUMBER,\n DEFAULT_PAGE_SIZE,\n DEFAULT_ROOT,\n DEFAULT_SEARCH_DEBOUNCE,\n DEFAULT_VIEW_FILES,\n DEFAULT_VIEW_RECENTS,\n ERROR_CODE_ITEM_NAME_INVALID,\n ERROR_CODE_ITEM_NAME_TOO_LONG,\n FIELD_NAME,\n FIELD_PERMISSIONS_CAN_SHARE,\n FIELD_SHARED_LINK,\n SORT_ASC,\n TYPE_FILE,\n TYPE_FOLDER,\n TYPE_WEBLINK,\n TYPED_ID_FOLDER_PREFIX,\n VIEW_ERROR,\n VIEW_FOLDER,\n VIEW_RECENTS,\n VIEW_SEARCH,\n VIEW_SELECTED,\n} from '../../constants';\nimport { FILE_SHARED_LINK_FIELDS_TO_FETCH } from '../../utils/fields';\n// $FlowFixMe TypeScript file\nimport type { Theme } from '../common/theming';\nimport type { ElementsXhrError } from '../../common/types/api';\nimport type {\n View,\n DefaultView,\n StringAnyMap,\n StringMap,\n SortBy,\n SortDirection,\n Token,\n Access,\n BoxItemPermission,\n BoxItem,\n Collection,\n} from '../../common/types/core';\n// $FlowFixMe TypeScript file\nimport type { ItemAction } from '../common/item';\n\nimport '../common/fonts.scss';\nimport '../common/base.scss';\nimport '../common/modal.scss';\nimport './ContentPicker.scss';\n\ntype Props = {\n apiHost: string,\n autoFocus: boolean,\n canCreateNewFolder: boolean,\n canSetShareAccess: boolean,\n canUpload: boolean,\n cancelButtonLabel?: string,\n chooseButtonLabel?: string,\n className: string,\n clearSelectedItemsOnNavigation: boolean,\n clientName: string,\n contentUploaderProps: ContentUploaderProps,\n currentFolderId?: string,\n defaultView: DefaultView,\n extensions: string[],\n initialPage: number,\n initialPageSize: number,\n isHeaderLogoVisible?: boolean,\n isLarge: boolean,\n isPaginationVisible?: boolean,\n isSmall: boolean,\n isTouch: boolean,\n itemActions?: ItemAction[],\n language?: string,\n logoUrl?: string,\n maxSelectable: number,\n measureRef?: Function,\n messages?: StringMap,\n onCancel: Function,\n onChoose: Function,\n renderCustomActionButtons?: ({\n onCancel: Function,\n onChoose: Function,\n selectedCount: number,\n selectedItems: BoxItem[],\n }) => Node,\n requestInterceptor?: Function,\n responseInterceptor?: Function,\n rootFolderId: string,\n sharedLink?: string,\n sharedLinkPassword?: string,\n showSelectedButton: boolean,\n sortBy: SortBy,\n sortDirection: SortDirection,\n theme?: Theme,\n token: Token,\n type: string,\n uploadHost: string,\n};\n\ntype State = {\n currentCollection: Collection,\n currentOffset: number,\n currentPageSize: number,\n errorCode: string,\n focusedRow: number,\n isCreateFolderModalOpen: boolean,\n isLoading: boolean,\n isUploadModalOpen: boolean,\n rootName: string,\n searchQuery: string,\n selected: { [string]: BoxItem },\n sortBy: SortBy,\n sortDirection: SortDirection,\n view: View,\n};\n\nconst defaultType = `${TYPE_FILE},${TYPE_WEBLINK}`;\n\nclass ContentPicker extends Component<Props, State> {\n id: string;\n\n api: API;\n\n state: State;\n\n props: Props;\n\n table: any;\n\n rootElement: HTMLElement;\n\n appElement: HTMLElement;\n\n globalModifier: boolean;\n\n firstLoad: boolean = true; // Keeps track of very 1st load\n\n static defaultProps = {\n type: defaultType,\n rootFolderId: DEFAULT_ROOT,\n onChoose: noop,\n onCancel: noop,\n initialPage: DEFAULT_PAGE_NUMBER,\n initialPageSize: DEFAULT_PAGE_SIZE,\n sortBy: FIELD_NAME,\n sortDirection: SORT_ASC,\n extensions: [],\n maxSelectable: Infinity,\n canUpload: true,\n canSetShareAccess: true,\n canCreateNewFolder: true,\n autoFocus: false,\n className: '',\n apiHost: DEFAULT_HOSTNAME_API,\n uploadHost: DEFAULT_HOSTNAME_UPLOAD,\n clientName: CLIENT_NAME_CONTENT_PICKER,\n defaultView: DEFAULT_VIEW_FILES,\n contentUploaderProps: {},\n showSelectedButton: true,\n clearSelectedItemsOnNavigation: false,\n isHeaderLogoVisible: true,\n isPaginationVisible: true,\n };\n\n /**\n * [constructor]\n *\n * @private\n * @return {ContentPicker}\n */\n constructor(props: Props) {\n super(props);\n\n const {\n apiHost,\n clientName,\n initialPage,\n initialPageSize,\n language,\n requestInterceptor,\n responseInterceptor,\n rootFolderId,\n sharedLink,\n sharedLinkPassword,\n sortBy,\n sortDirection,\n token,\n uploadHost,\n } = props;\n\n this.api = new API({\n apiHost,\n clientName,\n id: `${TYPED_ID_FOLDER_PREFIX}${rootFolderId}`,\n language,\n requestInterceptor,\n responseInterceptor,\n sharedLink,\n sharedLinkPassword,\n token,\n uploadHost,\n });\n\n this.id = uniqueid('bcp_');\n\n this.state = {\n sortBy,\n sortDirection,\n rootName: '',\n currentCollection: {},\n currentOffset: initialPageSize * (initialPage - 1),\n currentPageSize: initialPageSize,\n selected: {},\n searchQuery: '',\n view: VIEW_FOLDER,\n isCreateFolderModalOpen: false,\n isUploadModalOpen: false,\n focusedRow: 0,\n isLoading: false,\n errorCode: '',\n };\n }\n\n /**\n * Destroys api instances\n *\n * @private\n * @return {void}\n */\n clearCache(): void {\n this.api.destroy(true);\n }\n\n /**\n * Cleanup\n *\n * @private\n * @inheritdoc\n * @return {void}\n */\n componentWillUnmount() {\n this.clearCache();\n }\n\n /**\n * Fetches the root folder on load\n *\n * @private\n * @inheritdoc\n * @return {void}\n */\n componentDidMount() {\n const { defaultView, currentFolderId }: Props = this.props;\n this.rootElement = ((document.getElementById(this.id): any): HTMLElement);\n this.appElement = ((this.rootElement.firstElementChild: any): HTMLElement);\n\n if (defaultView === DEFAULT_VIEW_RECENTS) {\n this.showRecents();\n } else {\n this.fetchFolder(currentFolderId);\n }\n }\n\n /**\n * Fetches the current folder if different\n * from what was already fetched before.\n *\n * @private\n * @inheritdoc\n * @return {void}\n */\n componentDidUpdate({ currentFolderId: prevFolderId }: Props, prevState: State): void {\n const { currentFolderId }: Props = this.props;\n const {\n currentCollection: { id },\n }: State = prevState;\n\n if (prevFolderId === currentFolderId) {\n return;\n }\n\n if (typeof currentFolderId === 'string' && id !== currentFolderId) {\n this.fetchFolder(currentFolderId);\n }\n }\n\n /**\n * Gets selected items from state.\n * Clones values before returning so that\n * object references are broken. Also cleans\n * up the selected attribute since it was\n * added by the file picker.\n *\n * @private\n * @return {BoxItem[]}\n */\n getSelectedItems = (): BoxItem[] => {\n const { selected }: State = this.state;\n return Object.keys(selected).map(key => {\n const clone: BoxItem = { ...selected[key] };\n delete clone.selected;\n return clone;\n });\n };\n\n /**\n * Choose button action.\n *\n * @private\n * @fires choose\n * @return {void}\n */\n choose = (): void => {\n const { onChoose }: Props = this.props;\n const results = this.getSelectedItems();\n onChoose(results);\n };\n\n /**\n * Deletes selected keys off of selected items in state.\n *\n * @private\n * @return {void}\n */\n deleteSelectedKeys = (): void => {\n const { selected }: State = this.state;\n\n // Clear out the selected field\n Object.keys(selected).forEach(key => delete selected[key].selected);\n };\n\n /**\n * Cancel button action\n *\n * @private\n * @fires cancel\n * @return {void}\n */\n cancel = (): void => {\n const { onCancel }: Props = this.props;\n\n this.deleteSelectedKeys();\n\n // Reset the selected state\n this.setState({ selected: {} }, () => onCancel());\n };\n\n /**\n * Resets the percentLoaded in the collection\n * so that the loading bar starts showing\n *\n * @private\n * @return {Collection}\n */\n currentUnloadedCollection(): Collection {\n const { currentCollection }: State = this.state;\n return Object.assign(currentCollection, {\n percentLoaded: 0,\n });\n }\n\n /**\n * Refreshing the item collection depending\n * upon the view. Collection is gotten from cache.\n * Navigation event is prevented.\n *\n * @private\n * @return {void}\n */\n refreshCollection = (): void => {\n const {\n currentCollection: { id },\n view,\n searchQuery,\n }: State = this.state;\n if (view === VIEW_FOLDER && id) {\n this.fetchFolder(id, false);\n } else if (view === VIEW_RECENTS) {\n this.showRecents(false);\n } else if (view === VIEW_SEARCH && searchQuery) {\n this.search(searchQuery);\n } else if (view === VIEW_SELECTED) {\n this.showSelected();\n } else {\n throw new Error('Cannot refresh incompatible view!');\n }\n };\n\n /**\n * Network error callback\n *\n * @private\n * @param {Error} error error object\n * @return {void}\n */\n errorCallback = (error: ElementsXhrError, code: string): void => {\n this.setState({ view: VIEW_ERROR });\n /* eslint-disable no-console */\n console.error(error, code);\n /* eslint-enable no-console */\n };\n\n /**\n * Action performed when clicking on an item\n *\n * @private\n * @param {Object|string} item - the clicked box item\n * @return {void}\n */\n onItemClick = (item: BoxItem | string): void => {\n // If the id was passed in, just use that\n if (typeof item === 'string') {\n this.fetchFolder(item);\n return;\n }\n\n // If the item was passed in\n const { id, type }: BoxItem = item;\n if (type === TYPE_FOLDER) {\n this.fetchFolder(id);\n }\n };\n\n /**\n * Focuses the grid\n *\n * @private\n * @return {void}\n */\n finishNavigation(): void {\n const { autoFocus }: Props = this.props;\n const {\n currentCollection: { percentLoaded },\n }: State = this.state;\n\n // If loading for the very first time, only allow focus if autoFocus is true\n if (this.firstLoad && !autoFocus) {\n this.firstLoad = false;\n return;\n }\n\n // Don't focus the grid until its loaded and user is not already on an interactable element\n if (percentLoaded === 100 && !isFocusableElement(document.activeElement)) {\n focus(this.rootElement, '.bcp-item-row');\n this.setState({ focusedRow: 0 });\n }\n\n this.firstLoad = false;\n }\n\n /**\n * Folder fetch success callback\n *\n * @private\n * @param {Object} collection item collection object\n * @param {Boolean|void} triggerNavigationEvent - To focus the grid\n * @return {void}\n */\n fetchFolderSuccessCallback(collection: Collection, triggerNavigationEvent: boolean): void {\n const { clearSelectedItemsOnNavigation, rootFolderId }: Props = this.props;\n const { id, name }: Collection = collection;\n\n const commonState = {\n currentCollection: collection,\n rootName: id === rootFolderId ? name : '',\n };\n\n // New folder state\n const newState = clearSelectedItemsOnNavigation ? { ...commonState, selected: {} } : commonState;\n\n // Close any open modals\n this.closeModals();\n\n // Deletes selected keys\n if (clearSelectedItemsOnNavigation) {\n this.deleteSelectedKeys();\n }\n\n if (triggerNavigationEvent) {\n // Fire folder navigation event\n this.setState(newState, this.finishNavigation);\n } else {\n this.setState(newState);\n }\n }\n\n /**\n * Fetches a folder, defaults to fetching root folder\n *\n * @private\n * @param {string|void} [id] folder id\n * @param {Boolean|void} [triggerNavigationEvent] - To focus the grid\n * @return {void}\n */\n fetchFolder = (id?: string, triggerNavigationEvent?: boolean = true): void => {\n const { rootFolderId }: Props = this.props;\n const {\n currentCollection: { id: currentId },\n currentOffset,\n currentPageSize: limit,\n searchQuery = '',\n sortBy,\n sortDirection,\n }: State = this.state;\n const folderId: string = typeof id === 'string' ? id : rootFolderId;\n const hasFolderChanged = currentId && currentId !== folderId;\n const hasSearchQuery = !!searchQuery.trim().length;\n const offset = hasFolderChanged || hasSearchQuery ? 0 : currentOffset; // Reset offset on folder or mode change\n\n // If we are navigating around, aka not first load\n // then reset the focus to the root so that after\n // the collection loads the activeElement is not the\n // button that was clicked to fetch the folder\n if (!this.firstLoad) {\n this.rootElement.focus();\n }\n\n // Reset search state, the view and show busy indicator\n this.setState({\n searchQuery: '',\n view: VIEW_FOLDER,\n currentCollection: this.currentUnloadedCollection(),\n currentOffset: offset,\n });\n\n // Fetch the folder using folder API\n this.api.getFolderAPI().getFolder(\n folderId,\n limit,\n offset,\n sortBy,\n sortDirection,\n (collection: Collection) => {\n this.fetchFolderSuccessCallback(collection, triggerNavigationEvent);\n },\n this.errorCallback,\n { forceFetch: true },\n );\n };\n\n /**\n * Recents fetch success callback\n *\n * @private\n * @param {Object} collection item collection object\n * @param {Boolean|void} [triggerNavigationEvent] To trigger navigate event\n * @return {void}\n */\n recentsSuccessCallback(collection: Collection, triggerNavigationEvent: boolean): void {\n const newState = { currentCollection: collection };\n if (triggerNavigationEvent) {\n this.setState(newState, this.finishNavigation);\n } else {\n this.setState(newState);\n }\n }\n\n /**\n * Shows recents.\n * We always try to force fetch recents.\n *\n * @private\n * @param {Boolean|void} [triggerNavigationEvent] To trigger navigate event\n * @param {Boolean|void} [forceFetch] To void cache\n * @return {void}\n */\n showRecents(triggerNavigationEvent: boolean = true): void {\n const { rootFolderId }: Props = this.props;\n\n // Reset search state, the view and show busy indicator\n this.setState({\n searchQuery: '',\n view: VIEW_RECENTS,\n currentCollection: this.currentUnloadedCollection(),\n currentOffset: 0,\n });\n\n // Fetch the folder using folder API\n this.api.getRecentsAPI().recents(\n rootFolderId,\n (collection: Collection) => {\n this.recentsSuccessCallback(collection, triggerNavigationEvent);\n },\n this.errorCallback,\n { forceFetch: true },\n );\n }\n\n /**\n * Shows the selected items\n *\n * @private\n * @return {void}\n */\n showSelected = (): void => {\n const { selected, sortBy, sortDirection }: State = this.state;\n this.setState(\n {\n searchQuery: '',\n view: VIEW_SELECTED,\n currentCollection: {\n sortBy,\n sortDirection,\n percentLoaded: 100,\n items: Object.keys(selected).map(key => this.api.getCache().get(key)),\n },\n },\n this.finishNavigation,\n );\n };\n\n /**\n * Search success callback\n *\n * @private\n * @param {Object} collection item collection object\n * @return {void}\n */\n searchSuccessCallback = (collection: Collection): void => {\n const { currentCollection }: State = this.state;\n this.setState({\n currentCollection: Object.assign(currentCollection, collection),\n });\n };\n\n /**\n * Debounced searching\n *\n * @private\n * @param {string} id folder id\n * @param {string} query search string\n * @param {Boolean|void} [forceFetch] To void cache\n * @return {void}\n */\n debouncedSearch: Function = debounce((id: string, query: string): void => {\n const { currentOffset, currentPageSize }: State = this.state;\n\n this.api\n .getSearchAPI()\n .search(id, query, currentPageSize, currentOffset, this.searchSuccessCallback, this.errorCallback, {\n forceFetch: true,\n });\n }, DEFAULT_SEARCH_DEBOUNCE);\n\n /**\n * Searches\n *\n * @private\n * @param {string} query search string\n * @return {void}\n */\n search = (query: string): void => {\n const { rootFolderId }: Props = this.props;\n const {\n currentCollection: { id },\n currentOffset,\n searchQuery,\n }: State = this.state;\n const folderId = typeof id === 'string' ? id : rootFolderId;\n const trimmedQuery: string = query.trim();\n\n if (!query) {\n // Cancel the debounce so we don't search on a previous query\n this.debouncedSearch.cancel();\n\n // Query was cleared out, load the prior folder\n // The prior folder is always the parent folder for search\n this.setState({ currentOffset: 0 }, () => {\n this.fetchFolder(folderId, false);\n });\n\n return;\n }\n\n if (!trimmedQuery) {\n // Query now only has bunch of spaces\n // do nothing and but update prior state\n this.setState({\n searchQuery: query,\n });\n return;\n }\n\n this.setState({\n searchQuery: query,\n view: VIEW_SEARCH,\n currentCollection: this.currentUnloadedCollection(),\n currentOffset: trimmedQuery === searchQuery ? currentOffset : 0,\n });\n\n this.debouncedSearch(folderId, query);\n };\n\n /**\n * Uploads\n *\n * @private\n * @param {File} file dom file object\n * @return {void}\n */\n upload = (): void => {\n const {\n currentCollection: { id, permissions },\n }: State = this.state;\n const { canUpload }: Props = this.props;\n if (!id || !permissions) {\n return;\n }\n\n const { can_upload: canUploadPermission }: BoxItemPermission = permissions;\n if (!canUpload || !canUploadPermission) {\n return;\n }\n\n this.setState({ isUploadModalOpen: true });\n };\n\n /**\n * Upload success handler\n *\n * @private\n * @param {File} file dom file object\n * @return {void}\n */\n uploadSuccessHandler = (): void => {\n const {\n currentCollection: { id },\n }: State = this.state;\n this.fetchFolder(id, false);\n };\n\n /**\n * Creates a new folder\n *\n * @private\n * @return {void}\n */\n createFolder = (): void => {\n this.createFolderCallback();\n };\n\n /**\n * New folder callback\n *\n * @private\n * @param {string} name - folder name\n * @return {void}\n */\n createFolderCallback = (name?: string): void => {\n const { isCreateFolderModalOpen, currentCollection }: State = this.state;\n const { canCreateNewFolder }: Props = this.props;\n if (!canCreateNewFolder) {\n return;\n }\n\n const { id, permissions }: Collection = currentCollection;\n if (!id || !permissions) {\n return;\n }\n\n const { can_upload }: BoxItemPermission = permissions;\n if (!can_upload) {\n return;\n }\n\n if (!isCreateFolderModalOpen || !name) {\n this.setState({ isCreateFolderModalOpen: true, errorCode: '' });\n return;\n }\n\n if (!name.trim()) {\n this.setState({\n errorCode: ERROR_CODE_ITEM_NAME_INVALID,\n isLoading: false,\n });\n return;\n }\n\n if (name.length > 255) {\n this.setState({\n errorCode: ERROR_CODE_ITEM_NAME_TOO_LONG,\n isLoading: false,\n });\n return;\n }\n\n this.setState({ isLoading: true });\n this.api.getFolderAPI().create(\n id,\n name.trim(),\n () => {\n this.fetchFolder(id);\n },\n ({ code }) => {\n this.setState({\n errorCode: code,\n isLoading: false,\n });\n },\n );\n };\n\n /**\n * Selects or unselects an item\n *\n * @private\n * @param {Object} item file or folder object\n * @param {boolean} options.forceSharedLink Force a shared link if no link exists\n * @return {void}\n */\n select = (item: BoxItem, { forceSharedLink = true }: StringAnyMap = {}): void => {\n const { canSetShareAccess, type: selectableType, maxSelectable }: Props = this.props;\n const {\n view,\n selected,\n currentCollection: { items = [] },\n }: State = this.state;\n const { id, type }: BoxItem = item;\n\n if (!id || !type || selectableType.indexOf(type) === -1) {\n return;\n }\n\n const selectedKeys: Array<string> = Object.keys(selected);\n const selectedCount: number = selectedKeys.length;\n const hasHitSelectionLimit: boolean = selectedCount === maxSelectable;\n const isSingleFileSelection: boolean = maxSelectable === 1;\n const cacheKey: string = this.api.getAPI(type).getCacheKey(id);\n const existing: BoxItem = selected[cacheKey];\n const existingFromCache: BoxItem = this.api.getCache().get(cacheKey);\n const existInSelected = selectedKeys.indexOf(cacheKey) !== -1;\n\n // Existing object could have mutated and we just need to update the\n // reference in the selected map. In that case treat it like a new selection.\n if (existing && existing === existingFromCache) {\n // We are selecting the same item that was already\n // selected. Unselect it in this case. Toggle case.\n delete existing.selected;\n delete selected[cacheKey];\n } else {\n // We are selecting a new item that was never\n // selected before. However if we are in a single\n // item selection mode, we should also unselect any\n // prior item that was selected.\n\n // Check if we hit the selection limit and if selection\n // is not already currently in the selected data structure.\n // Ignore when in single file selection mode.\n if (hasHitSelectionLimit && !isSingleFileSelection && !existInSelected) {\n return;\n }\n\n // Clear out the prior item for single file selection mode\n if (selectedCount > 0 && isSingleFileSelection) {\n const prior = selectedKeys[0]; // only one item\n delete selected[prior].selected;\n delete selected[prior];\n }\n\n // Select the new item\n item.selected = true;\n selected[cacheKey] = item;\n\n // If can set share access, fetch the shared link properties of the item\n // In the case where another item is selected, any in flight XHR will get\n // cancelled\n if (canSetShareAccess && forceSharedLink) {\n this.fetchSharedLinkInfo(item);\n }\n }\n\n const focusedRow = items.findIndex((i: BoxItem) => i.id === item.id);\n this.setState({ selected, focusedRow }, () => {\n if (view === VIEW_SELECTED) {\n // Need to refresh the selected view\n this.showSelected();\n }\n });\n };\n\n /**\n * Fetch the shared link info\n * @param {BoxItem} item - The item (folder, file, weblink)\n * @returns {void}\n */\n fetchSharedLinkInfo = (item: BoxItem): void => {\n const { id, type }: BoxItem = item;\n\n switch (type) {\n case TYPE_FOLDER:\n this.api.getFolderAPI().getFolderFields(id, this.handleSharedLinkSuccess, noop, {\n fields: FILE_SHARED_LINK_FIELDS_TO_FETCH,\n });\n break;\n case TYPE_FILE:\n this.api\n .getFileAPI()\n .getFile(id, this.handleSharedLinkSuccess, noop, { fields: FILE_SHARED_LINK_FIELDS_TO_FETCH });\n break;\n case TYPE_WEBLINK:\n this.api\n .getWebLinkAPI()\n .getWeblink(id, this.handleSharedLinkSuccess, noop, { fields: FILE_SHARED_LINK_FIELDS_TO_FETCH });\n break;\n default:\n throw new Error('Unknown Type');\n }\n };\n\n /**\n * Handles the shared link info by either creating a share link using enterprise defaults if\n * it does not already exist, otherwise update the item in the state currentCollection.\n *\n * @param {Object} item file or folder\n * @returns {void}\n */\n handleSharedLinkSuccess = async (item: BoxItem) => {\n const { selected } = this.state;\n const { id, type } = item;\n // $FlowFixMe\n const cacheKey = this.api.getAPI(type).getCacheKey(id);\n let updatedItem = item;\n\n // if there is no shared link, create one with enterprise default access\n if (!item[FIELD_SHARED_LINK] && getProp(item, FIELD_PERMISSIONS_CAN_SHARE, false)) {\n // $FlowFixMe\n await this.api.getAPI(item.type).share(item, undefined, (sharedItem: BoxItem) => {\n updatedItem = sharedItem;\n });\n }\n\n this.updateItemInCollection(updatedItem);\n if (updatedItem.selected && updatedItem !== selected[cacheKey]) {\n this.select(updatedItem, { forceSharedLink: false });\n }\n };\n\n /**\n * Changes the share access of an item\n *\n * @private\n * @param {string} access share access\n * @param {Object} item file or folder object\n * @return {void}\n */\n changeShareAccess = (access: Access, item: BoxItem): void => {\n const { canSetShareAccess }: Props = this.props;\n if (!item || !canSetShareAccess) {\n return;\n }\n\n const { permissions, type }: BoxItem = item;\n if (!permissions || !type) {\n return;\n }\n\n const { can_set_share_access }: BoxItemPermission = permissions;\n if (!can_set_share_access) {\n return;\n }\n\n this.api.getAPI(type).share(item, access, (updatedItem: BoxItem) => {\n this.updateItemInCollection(updatedItem);\n if (item.selected) {\n this.select(updatedItem, { forceSharedLink: false });\n }\n });\n };\n\n /**\n * Updates the BoxItem in the state's currentCollection\n *\n * @param {Object} item file or folder object\n * @returns {void}\n */\n updateItemInCollection = (item: BoxItem) => {\n const { currentCollection } = this.state;\n const { items = [] } = currentCollection;\n const newState = {\n currentCollection: {\n ...currentCollection,\n items: items.map(collectionItem => (collectionItem.id === item.id ? item : collectionItem)),\n },\n };\n this.setState(newState);\n };\n\n /**\n * Changes the sort by and sort direction\n *\n * @private\n * @param {string} sortBy - field to sorty by\n * @param {string} sortDirection - sort direction\n * @return {void}\n */\n sort = (sortBy: SortBy, sortDirection: SortDirection) => {\n const {\n currentCollection: { id },\n }: State = this.state;\n if (id) {\n this.setState({ sortBy, sortDirection }, this.refreshCollection);\n }\n };\n\n /**\n * Saves reference to table component\n *\n * @private\n * @param {Component} react component\n * @return {void}\n */\n tableRef = (table: React$Component<*, *>) => {\n this.table = table;\n };\n\n /**\n * Closes the modal dialogs that may be open\n *\n * @private\n * @return {void}\n */\n closeModals = (): void => {\n const { focusedRow }: State = this.state;\n\n this.setState({\n isLoading: false,\n isCreateFolderModalOpen: false,\n isUploadModalOpen: false,\n });\n\n const {\n selected,\n currentCollection: { items = [] },\n }: State = this.state;\n if (selected && items.length > 0) {\n focus(this.rootElement, `.bcp-item-row-${focusedRow}`);\n }\n };\n\n /**\n * Keyboard events\n *\n * @private\n * @inheritdoc\n * @return {void}\n */\n onKeyDown = (event: SyntheticKeyboardEvent<HTMLElement>) => {\n if (isInputElement(event.target)) {\n return;\n }\n\n const { rootFolderId }: Props = this.props;\n const key = event.key.toLowerCase();\n\n switch (key) {\n case '/':\n focus(this.rootElement, '.be-search input[type=\"search\"]', false);\n event.preventDefault();\n break;\n case 'arrowdown':\n focus(this.rootElement, '.bcp-item-row', false);\n this.setState({ focusedRow: 0 });\n event.preventDefault();\n break;\n case 'g':\n break;\n case 'b':\n if (this.globalModifier) {\n focus(this.rootElement, '.be-breadcrumb button', false);\n event.preventDefault();\n }\n\n break;\n case 'f':\n if (this.globalModifier) {\n this.fetchFolder(rootFolderId);\n event.preventDefault();\n }\n\n break;\n case 'c':\n if (this.globalModifier) {\n this.choose();\n event.preventDefault();\n }\n\n break;\n case 'x':\n if (this.globalModifier) {\n this.cancel();\n event.preventDefault();\n }\n\n break;\n case 's':\n if (this.globalModifier) {\n this.showSelected();\n event.preventDefault();\n }\n\n break;\n case 'u':\n if (this.globalModifier) {\n this.upload();\n event.preventDefault();\n }\n\n break;\n case 'r':\n if (this.globalModifier) {\n this.showRecents();\n event.preventDefault();\n }\n\n break;\n case 'n':\n if (this.globalModifier) {\n this.createFolder();\n event.preventDefault();\n }\n\n break;\n default:\n this.globalModifier = false;\n return;\n }\n\n this.globalModifier = key === 'g';\n };\n\n /**\n * Updates the focused row based on key binder\n *\n * @private\n * @param {number} focusedRow - the row index thats focused\n * @return {void}\n */\n onFocusChange = (focusedRow: number) => {\n this.setState({ focusedRow });\n };\n\n /**\n * Handle pagination changes\n *\n * @param {number} newOffset - the new page offset value\n */\n paginate = (newOffset: number) => {\n this.setState({ currentOffset: newOffset }, this.refreshCollection);\n };\n\n /**\n * Renders the file picker\n *\n * @private\n * @inheritdoc\n * @return {Element}\n */\n render() {\n const {\n language,\n messages,\n rootFolderId,\n logoUrl,\n canUpload,\n canSetShareAccess,\n canCreateNewFolder,\n contentUploaderProps,\n extensions,\n maxSelectable,\n type,\n token,\n sharedLink,\n sharedLinkPassword,\n apiHost,\n uploadHost,\n isHeaderLogoVisible,\n isPaginationVisible,\n isSmall,\n className,\n measureRef,\n chooseButtonLabel,\n cancelButtonLabel,\n requestInterceptor,\n responseInterceptor,\n renderCustomActionButtons,\n showSelectedButton,\n theme,\n itemActions,\n }: Props = this.props;\n const {\n view,\n rootName,\n selected,\n currentCollection,\n currentPageSize,\n searchQuery,\n isCreateFolderModalOpen,\n isUploadModalOpen,\n isLoading,\n errorCode,\n focusedRow,\n }: State = this.state;\n const { id, offset, permissions, totalCount }: Collection = currentCollection;\n const { can_upload }: BoxItemPermission = permissions || {};\n const selectedCount: number = Object.keys(selected).length;\n const isSingleSelect = maxSelectable === 1;\n const hasHitSelectionLimit: boolean = selectedCount === maxSelectable && !isSingleSelect;\n const allowUpload: boolean = canUpload && !!can_upload;\n const allowCreate: boolean = canCreateNewFolder && !!can_upload;\n const styleClassName = classNames('be bcp', className);\n\n /* eslint-disable jsx-a11y/no-static-element-interactions */\n /* eslint-disable jsx-a11y/no-noninteractive-tabindex */\n return (\n <Internationalize language={language} messages={messages}>\n <div id={this.id} className={styleClassName} ref={measureRef} data-testid=\"content-picker\">\n <ThemingStyles theme={theme} />\n <div className=\"be-app-element\" onKeyDown={this.onKeyDown} tabIndex={0}>\n <Header\n view={view}\n isHeaderLogoVisible={isHeaderLogoVisible}\n searchQuery={searchQuery}\n logoUrl={logoUrl}\n onSearch={this.search}\n />\n <SubHeader\n view={view}\n rootId={rootFolderId}\n isSmall={isSmall}\n rootName={rootName}\n currentCollection={currentCollection}\n canUpload={allowUpload}\n canCreateNewFolder={allowCreate}\n onUpload={this.upload}\n onCreate={this.createFolder}\n onItemClick={this.fetchFolder}\n onSortChange={this.sort}\n />\n <Content\n view={view}\n isSmall={isSmall}\n rootId={rootFolderId}\n rootElement={this.rootElement}\n focusedRow={focusedRow}\n selectableType={type}\n canSetShareAccess={canSetShareAccess}\n extensionsWhitelist={extensions}\n hasHitSelectionLimit={hasHitSelectionLimit}\n currentCollection={currentCollection}\n isSingleSelect={isSingleSelect}\n tableRef={this.tableRef}\n onItemSelect={this.select}\n onItemClick={this.onItemClick}\n onFocusChange={this.onFocusChange}\n onShareAccessChange={this.changeShareAccess}\n itemActions={itemActions}\n />\n <Footer\n currentCollection={currentCollection}\n selectedCount={selectedCount}\n selectedItems={this.getSelectedItems()}\n showSelectedButton={showSelectedButton}\n hasHitSelectionLimit={hasHitSelectionLimit}\n isSingleSelect={isSingleSelect}\n onSelectedClick={this.showSelected}\n onChoose={this.choose}\n onCancel={this.cancel}\n chooseButtonLabel={chooseButtonLabel}\n cancelButtonLabel={cancelButtonLabel}\n renderCustomActionButtons={renderCustomActionButtons}\n >\n {isPaginationVisible ? (\n <Pagination\n offset={offset}\n onOffsetChange={this.paginate}\n pageSize={currentPageSize}\n totalCount={totalCount}\n />\n ) : null}\n </Footer>\n </div>\n {allowUpload && !!this.appElement ? (\n <UploadDialog\n isOpen={isUploadModalOpen}\n currentFolderId={id}\n token={token}\n sharedLink={sharedLink}\n sharedLinkPassword={sharedLinkPassword}\n apiHost={apiHost}\n uploadHost={uploadHost}\n onClose={this.uploadSuccessHandler}\n parentElement={this.rootElement}\n appElement={this.appElement}\n contentUploaderProps={contentUploaderProps}\n requestInterceptor={requestInterceptor}\n responseInterceptor={responseInterceptor}\n />\n ) : null}\n {allowCreate && !!this.appElement ? (\n <CreateFolderDialog\n isOpen={isCreateFolderModalOpen}\n onCreate={this.createFolderCallback}\n onCancel={this.closeModals}\n isLoading={isLoading}\n errorCode={errorCode}\n parentElement={this.rootElement}\n appElement={this.appElement}\n />\n ) : null}\n </div>\n </Internationalize>\n );\n /* eslint-enable jsx-a11y/no-static-element-interactions */\n /* eslint-enable jsx-a11y/no-noninteractive-tabindex */\n }\n}\n\nexport { ContentPicker as ContentPickerComponent };\nexport default flow([makeResponsive, withBlueprintModernization])(ContentPicker);\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"ContentPicker.js","names":["React","Component","classNames","debounce","flow","getProp","uniqueid","noop","Header","SubHeader","UploadDialog","CreateFolderDialog","Internationalize","makeResponsive","withBlueprintModernization","ThemingStyles","Pagination","isFocusableElement","isInputElement","focus","API","Content","Footer","CLIENT_NAME_CONTENT_PICKER","CLIENT_VERSION","DEFAULT_HOSTNAME_API","DEFAULT_HOSTNAME_UPLOAD","DEFAULT_PAGE_NUMBER","DEFAULT_PAGE_SIZE","DEFAULT_ROOT","DEFAULT_SEARCH_DEBOUNCE","DEFAULT_VIEW_FILES","DEFAULT_VIEW_RECENTS","ERROR_CODE_ITEM_NAME_INVALID","ERROR_CODE_ITEM_NAME_TOO_LONG","FIELD_NAME","FIELD_PERMISSIONS_CAN_SHARE","FIELD_SHARED_LINK","SORT_ASC","TYPE_FILE","TYPE_FOLDER","TYPE_WEBLINK","TYPED_ID_FOLDER_PREFIX","VIEW_ERROR","VIEW_FOLDER","VIEW_RECENTS","VIEW_SEARCH","VIEW_SELECTED","FILE_SHARED_LINK_FIELDS_TO_FETCH","defaultType","ContentPicker","constructor","props","_defineProperty","selected","state","Object","keys","map","key","clone","_objectSpread","onChoose","results","getSelectedItems","forEach","onCancel","deleteSelectedKeys","setState","currentCollection","id","view","searchQuery","fetchFolder","showRecents","search","showSelected","Error","error","code","console","item","type","triggerNavigationEvent","rootFolderId","currentId","currentOffset","currentPageSize","limit","sortBy","sortDirection","folderId","hasFolderChanged","hasSearchQuery","trim","length","offset","firstLoad","rootElement","currentUnloadedCollection","api","getFolderAPI","getFolder","collection","fetchFolderSuccessCallback","errorCallback","forceFetch","percentLoaded","items","getCache","get","finishNavigation","_extends","query","getSearchAPI","searchSuccessCallback","trimmedQuery","debouncedSearch","cancel","permissions","canUpload","can_upload","canUploadPermission","isUploadModalOpen","createFolderCallback","name","isCreateFolderModalOpen","canCreateNewFolder","errorCode","isLoading","create","forceSharedLink","canSetShareAccess","selectableType","maxSelectable","indexOf","selectedKeys","selectedCount","hasHitSelectionLimit","isSingleFileSelection","cacheKey","getAPI","getCacheKey","existing","existingFromCache","existInSelected","prior","fetchSharedLinkInfo","focusedRow","findIndex","i","getFolderFields","handleSharedLinkSuccess","fields","getFileAPI","getFile","getWebLinkAPI","getWeblink","updatedItem","share","undefined","sharedItem","updateItemInCollection","select","access","can_set_share_access","newState","collectionItem","refreshCollection","table","event","target","toLowerCase","preventDefault","globalModifier","choose","upload","createFolder","newOffset","apiHost","clientName","initialPage","initialPageSize","language","requestInterceptor","responseInterceptor","sharedLink","sharedLinkPassword","token","uploadHost","version","rootName","clearCache","destroy","componentWillUnmount","componentDidMount","defaultView","currentFolderId","document","getElementById","appElement","firstElementChild","componentDidUpdate","prevFolderId","prevState","autoFocus","activeElement","clearSelectedItemsOnNavigation","commonState","closeModals","recentsSuccessCallback","getRecentsAPI","recents","render","messages","logoUrl","contentUploaderProps","extensions","isHeaderLogoVisible","isPaginationVisible","isSmall","className","measureRef","chooseButtonLabel","cancelButtonLabel","renderCustomActionButtons","showSelectedButton","theme","itemActions","totalCount","isSingleSelect","allowUpload","allowCreate","styleClassName","createElement","ref","onKeyDown","tabIndex","onSearch","rootId","onUpload","onCreate","onItemClick","onSortChange","sort","extensionsWhitelist","tableRef","onItemSelect","onFocusChange","onShareAccessChange","changeShareAccess","selectedItems","onSelectedClick","onOffsetChange","paginate","pageSize","isOpen","onClose","uploadSuccessHandler","parentElement","Infinity","ContentPickerComponent"],"sources":["../../../src/elements/content-picker/ContentPicker.js"],"sourcesContent":["/**\n * @flow\n * @file Content Picker Component\n * @author Box\n */\n\nimport 'regenerator-runtime/runtime';\nimport React, { Component } from 'react';\nimport type { Node } from 'react';\nimport classNames from 'classnames';\nimport debounce from 'lodash/debounce';\nimport flow from 'lodash/flow';\nimport getProp from 'lodash/get';\nimport uniqueid from 'lodash/uniqueId';\nimport noop from 'lodash/noop';\nimport Header from '../common/header';\nimport SubHeader from '../common/sub-header/SubHeader';\nimport UploadDialog from '../common/upload-dialog';\nimport CreateFolderDialog from '../common/create-folder-dialog';\nimport Internationalize from '../common/Internationalize';\nimport makeResponsive from '../common/makeResponsive';\n// $FlowFixMe\nimport { withBlueprintModernization } from '../common/withBlueprintModernization';\n// $FlowFixMe TypeScript file\nimport ThemingStyles from '../common/theming';\nimport Pagination from '../../features/pagination';\nimport { isFocusableElement, isInputElement, focus } from '../../utils/dom';\nimport API from '../../api';\nimport Content from './Content';\nimport Footer from './Footer';\nimport {\n CLIENT_NAME_CONTENT_PICKER,\n CLIENT_VERSION,\n DEFAULT_HOSTNAME_API,\n DEFAULT_HOSTNAME_UPLOAD,\n DEFAULT_PAGE_NUMBER,\n DEFAULT_PAGE_SIZE,\n DEFAULT_ROOT,\n DEFAULT_SEARCH_DEBOUNCE,\n DEFAULT_VIEW_FILES,\n DEFAULT_VIEW_RECENTS,\n ERROR_CODE_ITEM_NAME_INVALID,\n ERROR_CODE_ITEM_NAME_TOO_LONG,\n FIELD_NAME,\n FIELD_PERMISSIONS_CAN_SHARE,\n FIELD_SHARED_LINK,\n SORT_ASC,\n TYPE_FILE,\n TYPE_FOLDER,\n TYPE_WEBLINK,\n TYPED_ID_FOLDER_PREFIX,\n VIEW_ERROR,\n VIEW_FOLDER,\n VIEW_RECENTS,\n VIEW_SEARCH,\n VIEW_SELECTED,\n} from '../../constants';\nimport { FILE_SHARED_LINK_FIELDS_TO_FETCH } from '../../utils/fields';\n// $FlowFixMe TypeScript file\nimport type { Theme } from '../common/theming';\nimport type { ElementsXhrError } from '../../common/types/api';\nimport type {\n View,\n DefaultView,\n StringAnyMap,\n StringMap,\n SortBy,\n SortDirection,\n Token,\n Access,\n BoxItemPermission,\n BoxItem,\n Collection,\n} from '../../common/types/core';\n// $FlowFixMe TypeScript file\nimport type { ItemAction } from '../common/item';\n\nimport '../common/fonts.scss';\nimport '../common/base.scss';\nimport '../common/modal.scss';\nimport './ContentPicker.scss';\n\ntype Props = {\n apiHost: string,\n autoFocus: boolean,\n canCreateNewFolder: boolean,\n canSetShareAccess: boolean,\n canUpload: boolean,\n cancelButtonLabel?: string,\n chooseButtonLabel?: string,\n className: string,\n clearSelectedItemsOnNavigation: boolean,\n clientName: string,\n contentUploaderProps: ContentUploaderProps,\n currentFolderId?: string,\n defaultView: DefaultView,\n extensions: string[],\n initialPage: number,\n initialPageSize: number,\n isHeaderLogoVisible?: boolean,\n isLarge: boolean,\n isPaginationVisible?: boolean,\n isSmall: boolean,\n isTouch: boolean,\n itemActions?: ItemAction[],\n language?: string,\n logoUrl?: string,\n maxSelectable: number,\n measureRef?: Function,\n messages?: StringMap,\n onCancel: Function,\n onChoose: Function,\n renderCustomActionButtons?: ({\n onCancel: Function,\n onChoose: Function,\n selectedCount: number,\n selectedItems: BoxItem[],\n }) => Node,\n requestInterceptor?: Function,\n responseInterceptor?: Function,\n rootFolderId: string,\n sharedLink?: string,\n sharedLinkPassword?: string,\n showSelectedButton: boolean,\n sortBy: SortBy,\n sortDirection: SortDirection,\n theme?: Theme,\n token: Token,\n type: string,\n uploadHost: string,\n};\n\ntype State = {\n currentCollection: Collection,\n currentOffset: number,\n currentPageSize: number,\n errorCode: string,\n focusedRow: number,\n isCreateFolderModalOpen: boolean,\n isLoading: boolean,\n isUploadModalOpen: boolean,\n rootName: string,\n searchQuery: string,\n selected: { [string]: BoxItem },\n sortBy: SortBy,\n sortDirection: SortDirection,\n view: View,\n};\n\nconst defaultType = `${TYPE_FILE},${TYPE_WEBLINK}`;\n\nclass ContentPicker extends Component<Props, State> {\n id: string;\n\n api: API;\n\n state: State;\n\n props: Props;\n\n table: any;\n\n rootElement: HTMLElement;\n\n appElement: HTMLElement;\n\n globalModifier: boolean;\n\n firstLoad: boolean = true; // Keeps track of very 1st load\n\n static defaultProps = {\n type: defaultType,\n rootFolderId: DEFAULT_ROOT,\n onChoose: noop,\n onCancel: noop,\n initialPage: DEFAULT_PAGE_NUMBER,\n initialPageSize: DEFAULT_PAGE_SIZE,\n sortBy: FIELD_NAME,\n sortDirection: SORT_ASC,\n extensions: [],\n maxSelectable: Infinity,\n canUpload: true,\n canSetShareAccess: true,\n canCreateNewFolder: true,\n autoFocus: false,\n className: '',\n apiHost: DEFAULT_HOSTNAME_API,\n uploadHost: DEFAULT_HOSTNAME_UPLOAD,\n clientName: CLIENT_NAME_CONTENT_PICKER,\n defaultView: DEFAULT_VIEW_FILES,\n contentUploaderProps: {},\n showSelectedButton: true,\n clearSelectedItemsOnNavigation: false,\n isHeaderLogoVisible: true,\n isPaginationVisible: true,\n };\n\n /**\n * [constructor]\n *\n * @private\n * @return {ContentPicker}\n */\n constructor(props: Props) {\n super(props);\n\n const {\n apiHost,\n clientName,\n initialPage,\n initialPageSize,\n language,\n requestInterceptor,\n responseInterceptor,\n rootFolderId,\n sharedLink,\n sharedLinkPassword,\n sortBy,\n sortDirection,\n token,\n uploadHost,\n } = props;\n\n this.api = new API({\n apiHost,\n clientName,\n id: `${TYPED_ID_FOLDER_PREFIX}${rootFolderId}`,\n language,\n requestInterceptor,\n responseInterceptor,\n sharedLink,\n sharedLinkPassword,\n token,\n uploadHost,\n version: CLIENT_VERSION,\n });\n\n this.id = uniqueid('bcp_');\n\n this.state = {\n sortBy,\n sortDirection,\n rootName: '',\n currentCollection: {},\n currentOffset: initialPageSize * (initialPage - 1),\n currentPageSize: initialPageSize,\n selected: {},\n searchQuery: '',\n view: VIEW_FOLDER,\n isCreateFolderModalOpen: false,\n isUploadModalOpen: false,\n focusedRow: 0,\n isLoading: false,\n errorCode: '',\n };\n }\n\n /**\n * Destroys api instances\n *\n * @private\n * @return {void}\n */\n clearCache(): void {\n this.api.destroy(true);\n }\n\n /**\n * Cleanup\n *\n * @private\n * @inheritdoc\n * @return {void}\n */\n componentWillUnmount() {\n this.clearCache();\n }\n\n /**\n * Fetches the root folder on load\n *\n * @private\n * @inheritdoc\n * @return {void}\n */\n componentDidMount() {\n const { defaultView, currentFolderId }: Props = this.props;\n this.rootElement = ((document.getElementById(this.id): any): HTMLElement);\n this.appElement = ((this.rootElement.firstElementChild: any): HTMLElement);\n\n if (defaultView === DEFAULT_VIEW_RECENTS) {\n this.showRecents();\n } else {\n this.fetchFolder(currentFolderId);\n }\n }\n\n /**\n * Fetches the current folder if different\n * from what was already fetched before.\n *\n * @private\n * @inheritdoc\n * @return {void}\n */\n componentDidUpdate({ currentFolderId: prevFolderId }: Props, prevState: State): void {\n const { currentFolderId }: Props = this.props;\n const {\n currentCollection: { id },\n }: State = prevState;\n\n if (prevFolderId === currentFolderId) {\n return;\n }\n\n if (typeof currentFolderId === 'string' && id !== currentFolderId) {\n this.fetchFolder(currentFolderId);\n }\n }\n\n /**\n * Gets selected items from state.\n * Clones values before returning so that\n * object references are broken. Also cleans\n * up the selected attribute since it was\n * added by the file picker.\n *\n * @private\n * @return {BoxItem[]}\n */\n getSelectedItems = (): BoxItem[] => {\n const { selected }: State = this.state;\n return Object.keys(selected).map(key => {\n const clone: BoxItem = { ...selected[key] };\n delete clone.selected;\n return clone;\n });\n };\n\n /**\n * Choose button action.\n *\n * @private\n * @fires choose\n * @return {void}\n */\n choose = (): void => {\n const { onChoose }: Props = this.props;\n const results = this.getSelectedItems();\n onChoose(results);\n };\n\n /**\n * Deletes selected keys off of selected items in state.\n *\n * @private\n * @return {void}\n */\n deleteSelectedKeys = (): void => {\n const { selected }: State = this.state;\n\n // Clear out the selected field\n Object.keys(selected).forEach(key => delete selected[key].selected);\n };\n\n /**\n * Cancel button action\n *\n * @private\n * @fires cancel\n * @return {void}\n */\n cancel = (): void => {\n const { onCancel }: Props = this.props;\n\n this.deleteSelectedKeys();\n\n // Reset the selected state\n this.setState({ selected: {} }, () => onCancel());\n };\n\n /**\n * Resets the percentLoaded in the collection\n * so that the loading bar starts showing\n *\n * @private\n * @return {Collection}\n */\n currentUnloadedCollection(): Collection {\n const { currentCollection }: State = this.state;\n return Object.assign(currentCollection, {\n percentLoaded: 0,\n });\n }\n\n /**\n * Refreshing the item collection depending\n * upon the view. Collection is gotten from cache.\n * Navigation event is prevented.\n *\n * @private\n * @return {void}\n */\n refreshCollection = (): void => {\n const {\n currentCollection: { id },\n view,\n searchQuery,\n }: State = this.state;\n if (view === VIEW_FOLDER && id) {\n this.fetchFolder(id, false);\n } else if (view === VIEW_RECENTS) {\n this.showRecents(false);\n } else if (view === VIEW_SEARCH && searchQuery) {\n this.search(searchQuery);\n } else if (view === VIEW_SELECTED) {\n this.showSelected();\n } else {\n throw new Error('Cannot refresh incompatible view!');\n }\n };\n\n /**\n * Network error callback\n *\n * @private\n * @param {Error} error error object\n * @return {void}\n */\n errorCallback = (error: ElementsXhrError, code: string): void => {\n this.setState({ view: VIEW_ERROR });\n /* eslint-disable no-console */\n console.error(error, code);\n /* eslint-enable no-console */\n };\n\n /**\n * Action performed when clicking on an item\n *\n * @private\n * @param {Object|string} item - the clicked box item\n * @return {void}\n */\n onItemClick = (item: BoxItem | string): void => {\n // If the id was passed in, just use that\n if (typeof item === 'string') {\n this.fetchFolder(item);\n return;\n }\n\n // If the item was passed in\n const { id, type }: BoxItem = item;\n if (type === TYPE_FOLDER) {\n this.fetchFolder(id);\n }\n };\n\n /**\n * Focuses the grid\n *\n * @private\n * @return {void}\n */\n finishNavigation(): void {\n const { autoFocus }: Props = this.props;\n const {\n currentCollection: { percentLoaded },\n }: State = this.state;\n\n // If loading for the very first time, only allow focus if autoFocus is true\n if (this.firstLoad && !autoFocus) {\n this.firstLoad = false;\n return;\n }\n\n // Don't focus the grid until its loaded and user is not already on an interactable element\n if (percentLoaded === 100 && !isFocusableElement(document.activeElement)) {\n focus(this.rootElement, '.bcp-item-row');\n this.setState({ focusedRow: 0 });\n }\n\n this.firstLoad = false;\n }\n\n /**\n * Folder fetch success callback\n *\n * @private\n * @param {Object} collection item collection object\n * @param {Boolean|void} triggerNavigationEvent - To focus the grid\n * @return {void}\n */\n fetchFolderSuccessCallback(collection: Collection, triggerNavigationEvent: boolean): void {\n const { clearSelectedItemsOnNavigation, rootFolderId }: Props = this.props;\n const { id, name }: Collection = collection;\n\n const commonState = {\n currentCollection: collection,\n rootName: id === rootFolderId ? name : '',\n };\n\n // New folder state\n const newState = clearSelectedItemsOnNavigation ? { ...commonState, selected: {} } : commonState;\n\n // Close any open modals\n this.closeModals();\n\n // Deletes selected keys\n if (clearSelectedItemsOnNavigation) {\n this.deleteSelectedKeys();\n }\n\n if (triggerNavigationEvent) {\n // Fire folder navigation event\n this.setState(newState, this.finishNavigation);\n } else {\n this.setState(newState);\n }\n }\n\n /**\n * Fetches a folder, defaults to fetching root folder\n *\n * @private\n * @param {string|void} [id] folder id\n * @param {Boolean|void} [triggerNavigationEvent] - To focus the grid\n * @return {void}\n */\n fetchFolder = (id?: string, triggerNavigationEvent?: boolean = true): void => {\n const { rootFolderId }: Props = this.props;\n const {\n currentCollection: { id: currentId },\n currentOffset,\n currentPageSize: limit,\n searchQuery = '',\n sortBy,\n sortDirection,\n }: State = this.state;\n const folderId: string = typeof id === 'string' ? id : rootFolderId;\n const hasFolderChanged = currentId && currentId !== folderId;\n const hasSearchQuery = !!searchQuery.trim().length;\n const offset = hasFolderChanged || hasSearchQuery ? 0 : currentOffset; // Reset offset on folder or mode change\n\n // If we are navigating around, aka not first load\n // then reset the focus to the root so that after\n // the collection loads the activeElement is not the\n // button that was clicked to fetch the folder\n if (!this.firstLoad) {\n this.rootElement.focus();\n }\n\n // Reset search state, the view and show busy indicator\n this.setState({\n searchQuery: '',\n view: VIEW_FOLDER,\n currentCollection: this.currentUnloadedCollection(),\n currentOffset: offset,\n });\n\n // Fetch the folder using folder API\n this.api.getFolderAPI().getFolder(\n folderId,\n limit,\n offset,\n sortBy,\n sortDirection,\n (collection: Collection) => {\n this.fetchFolderSuccessCallback(collection, triggerNavigationEvent);\n },\n this.errorCallback,\n { forceFetch: true },\n );\n };\n\n /**\n * Recents fetch success callback\n *\n * @private\n * @param {Object} collection item collection object\n * @param {Boolean|void} [triggerNavigationEvent] To trigger navigate event\n * @return {void}\n */\n recentsSuccessCallback(collection: Collection, triggerNavigationEvent: boolean): void {\n const newState = { currentCollection: collection };\n if (triggerNavigationEvent) {\n this.setState(newState, this.finishNavigation);\n } else {\n this.setState(newState);\n }\n }\n\n /**\n * Shows recents.\n * We always try to force fetch recents.\n *\n * @private\n * @param {Boolean|void} [triggerNavigationEvent] To trigger navigate event\n * @param {Boolean|void} [forceFetch] To void cache\n * @return {void}\n */\n showRecents(triggerNavigationEvent: boolean = true): void {\n const { rootFolderId }: Props = this.props;\n\n // Reset search state, the view and show busy indicator\n this.setState({\n searchQuery: '',\n view: VIEW_RECENTS,\n currentCollection: this.currentUnloadedCollection(),\n currentOffset: 0,\n });\n\n // Fetch the folder using folder API\n this.api.getRecentsAPI().recents(\n rootFolderId,\n (collection: Collection) => {\n this.recentsSuccessCallback(collection, triggerNavigationEvent);\n },\n this.errorCallback,\n { forceFetch: true },\n );\n }\n\n /**\n * Shows the selected items\n *\n * @private\n * @return {void}\n */\n showSelected = (): void => {\n const { selected, sortBy, sortDirection }: State = this.state;\n this.setState(\n {\n searchQuery: '',\n view: VIEW_SELECTED,\n currentCollection: {\n sortBy,\n sortDirection,\n percentLoaded: 100,\n items: Object.keys(selected).map(key => this.api.getCache().get(key)),\n },\n },\n this.finishNavigation,\n );\n };\n\n /**\n * Search success callback\n *\n * @private\n * @param {Object} collection item collection object\n * @return {void}\n */\n searchSuccessCallback = (collection: Collection): void => {\n const { currentCollection }: State = this.state;\n this.setState({\n currentCollection: Object.assign(currentCollection, collection),\n });\n };\n\n /**\n * Debounced searching\n *\n * @private\n * @param {string} id folder id\n * @param {string} query search string\n * @param {Boolean|void} [forceFetch] To void cache\n * @return {void}\n */\n debouncedSearch: Function = debounce((id: string, query: string): void => {\n const { currentOffset, currentPageSize }: State = this.state;\n\n this.api\n .getSearchAPI()\n .search(id, query, currentPageSize, currentOffset, this.searchSuccessCallback, this.errorCallback, {\n forceFetch: true,\n });\n }, DEFAULT_SEARCH_DEBOUNCE);\n\n /**\n * Searches\n *\n * @private\n * @param {string} query search string\n * @return {void}\n */\n search = (query: string): void => {\n const { rootFolderId }: Props = this.props;\n const {\n currentCollection: { id },\n currentOffset,\n searchQuery,\n }: State = this.state;\n const folderId = typeof id === 'string' ? id : rootFolderId;\n const trimmedQuery: string = query.trim();\n\n if (!query) {\n // Cancel the debounce so we don't search on a previous query\n this.debouncedSearch.cancel();\n\n // Query was cleared out, load the prior folder\n // The prior folder is always the parent folder for search\n this.setState({ currentOffset: 0 }, () => {\n this.fetchFolder(folderId, false);\n });\n\n return;\n }\n\n if (!trimmedQuery) {\n // Query now only has bunch of spaces\n // do nothing and but update prior state\n this.setState({\n searchQuery: query,\n });\n return;\n }\n\n this.setState({\n searchQuery: query,\n view: VIEW_SEARCH,\n currentCollection: this.currentUnloadedCollection(),\n currentOffset: trimmedQuery === searchQuery ? currentOffset : 0,\n });\n\n this.debouncedSearch(folderId, query);\n };\n\n /**\n * Uploads\n *\n * @private\n * @param {File} file dom file object\n * @return {void}\n */\n upload = (): void => {\n const {\n currentCollection: { id, permissions },\n }: State = this.state;\n const { canUpload }: Props = this.props;\n if (!id || !permissions) {\n return;\n }\n\n const { can_upload: canUploadPermission }: BoxItemPermission = permissions;\n if (!canUpload || !canUploadPermission) {\n return;\n }\n\n this.setState({ isUploadModalOpen: true });\n };\n\n /**\n * Upload success handler\n *\n * @private\n * @param {File} file dom file object\n * @return {void}\n */\n uploadSuccessHandler = (): void => {\n const {\n currentCollection: { id },\n }: State = this.state;\n this.fetchFolder(id, false);\n };\n\n /**\n * Creates a new folder\n *\n * @private\n * @return {void}\n */\n createFolder = (): void => {\n this.createFolderCallback();\n };\n\n /**\n * New folder callback\n *\n * @private\n * @param {string} name - folder name\n * @return {void}\n */\n createFolderCallback = (name?: string): void => {\n const { isCreateFolderModalOpen, currentCollection }: State = this.state;\n const { canCreateNewFolder }: Props = this.props;\n if (!canCreateNewFolder) {\n return;\n }\n\n const { id, permissions }: Collection = currentCollection;\n if (!id || !permissions) {\n return;\n }\n\n const { can_upload }: BoxItemPermission = permissions;\n if (!can_upload) {\n return;\n }\n\n if (!isCreateFolderModalOpen || !name) {\n this.setState({ isCreateFolderModalOpen: true, errorCode: '' });\n return;\n }\n\n if (!name.trim()) {\n this.setState({\n errorCode: ERROR_CODE_ITEM_NAME_INVALID,\n isLoading: false,\n });\n return;\n }\n\n if (name.length > 255) {\n this.setState({\n errorCode: ERROR_CODE_ITEM_NAME_TOO_LONG,\n isLoading: false,\n });\n return;\n }\n\n this.setState({ isLoading: true });\n this.api.getFolderAPI().create(\n id,\n name.trim(),\n () => {\n this.fetchFolder(id);\n },\n ({ code }) => {\n this.setState({\n errorCode: code,\n isLoading: false,\n });\n },\n );\n };\n\n /**\n * Selects or unselects an item\n *\n * @private\n * @param {Object} item file or folder object\n * @param {boolean} options.forceSharedLink Force a shared link if no link exists\n * @return {void}\n */\n select = (item: BoxItem, { forceSharedLink = true }: StringAnyMap = {}): void => {\n const { canSetShareAccess, type: selectableType, maxSelectable }: Props = this.props;\n const {\n view,\n selected,\n currentCollection: { items = [] },\n }: State = this.state;\n const { id, type }: BoxItem = item;\n\n if (!id || !type || selectableType.indexOf(type) === -1) {\n return;\n }\n\n const selectedKeys: Array<string> = Object.keys(selected);\n const selectedCount: number = selectedKeys.length;\n const hasHitSelectionLimit: boolean = selectedCount === maxSelectable;\n const isSingleFileSelection: boolean = maxSelectable === 1;\n const cacheKey: string = this.api.getAPI(type).getCacheKey(id);\n const existing: BoxItem = selected[cacheKey];\n const existingFromCache: BoxItem = this.api.getCache().get(cacheKey);\n const existInSelected = selectedKeys.indexOf(cacheKey) !== -1;\n\n // Existing object could have mutated and we just need to update the\n // reference in the selected map. In that case treat it like a new selection.\n if (existing && existing === existingFromCache) {\n // We are selecting the same item that was already\n // selected. Unselect it in this case. Toggle case.\n delete existing.selected;\n delete selected[cacheKey];\n } else {\n // We are selecting a new item that was never\n // selected before. However if we are in a single\n // item selection mode, we should also unselect any\n // prior item that was selected.\n\n // Check if we hit the selection limit and if selection\n // is not already currently in the selected data structure.\n // Ignore when in single file selection mode.\n if (hasHitSelectionLimit && !isSingleFileSelection && !existInSelected) {\n return;\n }\n\n // Clear out the prior item for single file selection mode\n if (selectedCount > 0 && isSingleFileSelection) {\n const prior = selectedKeys[0]; // only one item\n delete selected[prior].selected;\n delete selected[prior];\n }\n\n // Select the new item\n item.selected = true;\n selected[cacheKey] = item;\n\n // If can set share access, fetch the shared link properties of the item\n // In the case where another item is selected, any in flight XHR will get\n // cancelled\n if (canSetShareAccess && forceSharedLink) {\n this.fetchSharedLinkInfo(item);\n }\n }\n\n const focusedRow = items.findIndex((i: BoxItem) => i.id === item.id);\n this.setState({ selected, focusedRow }, () => {\n if (view === VIEW_SELECTED) {\n // Need to refresh the selected view\n this.showSelected();\n }\n });\n };\n\n /**\n * Fetch the shared link info\n * @param {BoxItem} item - The item (folder, file, weblink)\n * @returns {void}\n */\n fetchSharedLinkInfo = (item: BoxItem): void => {\n const { id, type }: BoxItem = item;\n\n switch (type) {\n case TYPE_FOLDER:\n this.api.getFolderAPI().getFolderFields(id, this.handleSharedLinkSuccess, noop, {\n fields: FILE_SHARED_LINK_FIELDS_TO_FETCH,\n });\n break;\n case TYPE_FILE:\n this.api\n .getFileAPI()\n .getFile(id, this.handleSharedLinkSuccess, noop, { fields: FILE_SHARED_LINK_FIELDS_TO_FETCH });\n break;\n case TYPE_WEBLINK:\n this.api\n .getWebLinkAPI()\n .getWeblink(id, this.handleSharedLinkSuccess, noop, { fields: FILE_SHARED_LINK_FIELDS_TO_FETCH });\n break;\n default:\n throw new Error('Unknown Type');\n }\n };\n\n /**\n * Handles the shared link info by either creating a share link using enterprise defaults if\n * it does not already exist, otherwise update the item in the state currentCollection.\n *\n * @param {Object} item file or folder\n * @returns {void}\n */\n handleSharedLinkSuccess = async (item: BoxItem) => {\n const { selected } = this.state;\n const { id, type } = item;\n // $FlowFixMe\n const cacheKey = this.api.getAPI(type).getCacheKey(id);\n let updatedItem = item;\n\n // if there is no shared link, create one with enterprise default access\n if (!item[FIELD_SHARED_LINK] && getProp(item, FIELD_PERMISSIONS_CAN_SHARE, false)) {\n // $FlowFixMe\n await this.api.getAPI(item.type).share(item, undefined, (sharedItem: BoxItem) => {\n updatedItem = sharedItem;\n });\n }\n\n this.updateItemInCollection(updatedItem);\n if (updatedItem.selected && updatedItem !== selected[cacheKey]) {\n this.select(updatedItem, { forceSharedLink: false });\n }\n };\n\n /**\n * Changes the share access of an item\n *\n * @private\n * @param {string} access share access\n * @param {Object} item file or folder object\n * @return {void}\n */\n changeShareAccess = (access: Access, item: BoxItem): void => {\n const { canSetShareAccess }: Props = this.props;\n if (!item || !canSetShareAccess) {\n return;\n }\n\n const { permissions, type }: BoxItem = item;\n if (!permissions || !type) {\n return;\n }\n\n const { can_set_share_access }: BoxItemPermission = permissions;\n if (!can_set_share_access) {\n return;\n }\n\n this.api.getAPI(type).share(item, access, (updatedItem: BoxItem) => {\n this.updateItemInCollection(updatedItem);\n if (item.selected) {\n this.select(updatedItem, { forceSharedLink: false });\n }\n });\n };\n\n /**\n * Updates the BoxItem in the state's currentCollection\n *\n * @param {Object} item file or folder object\n * @returns {void}\n */\n updateItemInCollection = (item: BoxItem) => {\n const { currentCollection } = this.state;\n const { items = [] } = currentCollection;\n const newState = {\n currentCollection: {\n ...currentCollection,\n items: items.map(collectionItem => (collectionItem.id === item.id ? item : collectionItem)),\n },\n };\n this.setState(newState);\n };\n\n /**\n * Changes the sort by and sort direction\n *\n * @private\n * @param {string} sortBy - field to sorty by\n * @param {string} sortDirection - sort direction\n * @return {void}\n */\n sort = (sortBy: SortBy, sortDirection: SortDirection) => {\n const {\n currentCollection: { id },\n }: State = this.state;\n if (id) {\n this.setState({ sortBy, sortDirection }, this.refreshCollection);\n }\n };\n\n /**\n * Saves reference to table component\n *\n * @private\n * @param {Component} react component\n * @return {void}\n */\n tableRef = (table: React$Component<*, *>) => {\n this.table = table;\n };\n\n /**\n * Closes the modal dialogs that may be open\n *\n * @private\n * @return {void}\n */\n closeModals = (): void => {\n const { focusedRow }: State = this.state;\n\n this.setState({\n isLoading: false,\n isCreateFolderModalOpen: false,\n isUploadModalOpen: false,\n });\n\n const {\n selected,\n currentCollection: { items = [] },\n }: State = this.state;\n if (selected && items.length > 0) {\n focus(this.rootElement, `.bcp-item-row-${focusedRow}`);\n }\n };\n\n /**\n * Keyboard events\n *\n * @private\n * @inheritdoc\n * @return {void}\n */\n onKeyDown = (event: SyntheticKeyboardEvent<HTMLElement>) => {\n if (isInputElement(event.target)) {\n return;\n }\n\n const { rootFolderId }: Props = this.props;\n const key = event.key.toLowerCase();\n\n switch (key) {\n case '/':\n focus(this.rootElement, '.be-search input[type=\"search\"]', false);\n event.preventDefault();\n break;\n case 'arrowdown':\n focus(this.rootElement, '.bcp-item-row', false);\n this.setState({ focusedRow: 0 });\n event.preventDefault();\n break;\n case 'g':\n break;\n case 'b':\n if (this.globalModifier) {\n focus(this.rootElement, '.be-breadcrumb button', false);\n event.preventDefault();\n }\n\n break;\n case 'f':\n if (this.globalModifier) {\n this.fetchFolder(rootFolderId);\n event.preventDefault();\n }\n\n break;\n case 'c':\n if (this.globalModifier) {\n this.choose();\n event.preventDefault();\n }\n\n break;\n case 'x':\n if (this.globalModifier) {\n this.cancel();\n event.preventDefault();\n }\n\n break;\n case 's':\n if (this.globalModifier) {\n this.showSelected();\n event.preventDefault();\n }\n\n break;\n case 'u':\n if (this.globalModifier) {\n this.upload();\n event.preventDefault();\n }\n\n break;\n case 'r':\n if (this.globalModifier) {\n this.showRecents();\n event.preventDefault();\n }\n\n break;\n case 'n':\n if (this.globalModifier) {\n this.createFolder();\n event.preventDefault();\n }\n\n break;\n default:\n this.globalModifier = false;\n return;\n }\n\n this.globalModifier = key === 'g';\n };\n\n /**\n * Updates the focused row based on key binder\n *\n * @private\n * @param {number} focusedRow - the row index thats focused\n * @return {void}\n */\n onFocusChange = (focusedRow: number) => {\n this.setState({ focusedRow });\n };\n\n /**\n * Handle pagination changes\n *\n * @param {number} newOffset - the new page offset value\n */\n paginate = (newOffset: number) => {\n this.setState({ currentOffset: newOffset }, this.refreshCollection);\n };\n\n /**\n * Renders the file picker\n *\n * @private\n * @inheritdoc\n * @return {Element}\n */\n render() {\n const {\n language,\n messages,\n rootFolderId,\n logoUrl,\n canUpload,\n canSetShareAccess,\n canCreateNewFolder,\n contentUploaderProps,\n extensions,\n maxSelectable,\n type,\n token,\n sharedLink,\n sharedLinkPassword,\n apiHost,\n uploadHost,\n isHeaderLogoVisible,\n isPaginationVisible,\n isSmall,\n className,\n measureRef,\n chooseButtonLabel,\n cancelButtonLabel,\n requestInterceptor,\n responseInterceptor,\n renderCustomActionButtons,\n showSelectedButton,\n theme,\n itemActions,\n }: Props = this.props;\n const {\n view,\n rootName,\n selected,\n currentCollection,\n currentPageSize,\n searchQuery,\n isCreateFolderModalOpen,\n isUploadModalOpen,\n isLoading,\n errorCode,\n focusedRow,\n }: State = this.state;\n const { id, offset, permissions, totalCount }: Collection = currentCollection;\n const { can_upload }: BoxItemPermission = permissions || {};\n const selectedCount: number = Object.keys(selected).length;\n const isSingleSelect = maxSelectable === 1;\n const hasHitSelectionLimit: boolean = selectedCount === maxSelectable && !isSingleSelect;\n const allowUpload: boolean = canUpload && !!can_upload;\n const allowCreate: boolean = canCreateNewFolder && !!can_upload;\n const styleClassName = classNames('be bcp', className);\n\n /* eslint-disable jsx-a11y/no-static-element-interactions */\n /* eslint-disable jsx-a11y/no-noninteractive-tabindex */\n return (\n <Internationalize language={language} messages={messages}>\n <div id={this.id} className={styleClassName} ref={measureRef} data-testid=\"content-picker\">\n <ThemingStyles theme={theme} />\n <div className=\"be-app-element\" onKeyDown={this.onKeyDown} tabIndex={0}>\n <Header\n view={view}\n isHeaderLogoVisible={isHeaderLogoVisible}\n searchQuery={searchQuery}\n logoUrl={logoUrl}\n onSearch={this.search}\n />\n <SubHeader\n view={view}\n rootId={rootFolderId}\n isSmall={isSmall}\n rootName={rootName}\n currentCollection={currentCollection}\n canUpload={allowUpload}\n canCreateNewFolder={allowCreate}\n onUpload={this.upload}\n onCreate={this.createFolder}\n onItemClick={this.fetchFolder}\n onSortChange={this.sort}\n />\n <Content\n view={view}\n isSmall={isSmall}\n rootId={rootFolderId}\n rootElement={this.rootElement}\n focusedRow={focusedRow}\n selectableType={type}\n canSetShareAccess={canSetShareAccess}\n extensionsWhitelist={extensions}\n hasHitSelectionLimit={hasHitSelectionLimit}\n currentCollection={currentCollection}\n isSingleSelect={isSingleSelect}\n tableRef={this.tableRef}\n onItemSelect={this.select}\n onItemClick={this.onItemClick}\n onFocusChange={this.onFocusChange}\n onShareAccessChange={this.changeShareAccess}\n itemActions={itemActions}\n />\n <Footer\n currentCollection={currentCollection}\n selectedCount={selectedCount}\n selectedItems={this.getSelectedItems()}\n showSelectedButton={showSelectedButton}\n hasHitSelectionLimit={hasHitSelectionLimit}\n isSingleSelect={isSingleSelect}\n onSelectedClick={this.showSelected}\n onChoose={this.choose}\n onCancel={this.cancel}\n chooseButtonLabel={chooseButtonLabel}\n cancelButtonLabel={cancelButtonLabel}\n renderCustomActionButtons={renderCustomActionButtons}\n >\n {isPaginationVisible ? (\n <Pagination\n offset={offset}\n onOffsetChange={this.paginate}\n pageSize={currentPageSize}\n totalCount={totalCount}\n />\n ) : null}\n </Footer>\n </div>\n {allowUpload && !!this.appElement ? (\n <UploadDialog\n isOpen={isUploadModalOpen}\n currentFolderId={id}\n token={token}\n sharedLink={sharedLink}\n sharedLinkPassword={sharedLinkPassword}\n apiHost={apiHost}\n uploadHost={uploadHost}\n onClose={this.uploadSuccessHandler}\n parentElement={this.rootElement}\n appElement={this.appElement}\n contentUploaderProps={contentUploaderProps}\n requestInterceptor={requestInterceptor}\n responseInterceptor={responseInterceptor}\n />\n ) : null}\n {allowCreate && !!this.appElement ? (\n <CreateFolderDialog\n isOpen={isCreateFolderModalOpen}\n onCreate={this.createFolderCallback}\n onCancel={this.closeModals}\n isLoading={isLoading}\n errorCode={errorCode}\n parentElement={this.rootElement}\n appElement={this.appElement}\n />\n ) : null}\n </div>\n </Internationalize>\n );\n /* eslint-enable jsx-a11y/no-static-element-interactions */\n /* eslint-enable jsx-a11y/no-noninteractive-tabindex */\n }\n}\n\nexport { ContentPicker as ContentPickerComponent };\nexport default flow([makeResponsive, withBlueprintModernization])(ContentPicker);\n"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACA;;AAEA,OAAO,6BAA6B;AACpC,OAAOA,KAAK,IAAIC,SAAS,QAAQ,OAAO;AAExC,OAAOC,UAAU,MAAM,YAAY;AACnC,OAAOC,QAAQ,MAAM,iBAAiB;AACtC,OAAOC,IAAI,MAAM,aAAa;AAC9B,OAAOC,OAAO,MAAM,YAAY;AAChC,OAAOC,QAAQ,MAAM,iBAAiB;AACtC,OAAOC,IAAI,MAAM,aAAa;AAC9B,OAAOC,MAAM,MAAM,kBAAkB;AACrC,OAAOC,SAAS,MAAM,gCAAgC;AACtD,OAAOC,YAAY,MAAM,yBAAyB;AAClD,OAAOC,kBAAkB,MAAM,gCAAgC;AAC/D,OAAOC,gBAAgB,MAAM,4BAA4B;AACzD,OAAOC,cAAc,MAAM,0BAA0B;AACrD;AACA,SAASC,0BAA0B,QAAQ,sCAAsC;AACjF;AACA,OAAOC,aAAa,MAAM,mBAAmB;AAC7C,OAAOC,UAAU,MAAM,2BAA2B;AAClD,SAASC,kBAAkB,EAAEC,cAAc,EAAEC,KAAK,QAAQ,iBAAiB;AAC3E,OAAOC,GAAG,MAAM,WAAW;AAC3B,OAAOC,OAAO,MAAM,WAAW;AAC/B,OAAOC,MAAM,MAAM,UAAU;AAC7B,SACIC,0BAA0B,EAC1BC,cAAc,EACdC,oBAAoB,EACpBC,uBAAuB,EACvBC,mBAAmB,EACnBC,iBAAiB,EACjBC,YAAY,EACZC,uBAAuB,EACvBC,kBAAkB,EAClBC,oBAAoB,EACpBC,4BAA4B,EAC5BC,6BAA6B,EAC7BC,UAAU,EACVC,2BAA2B,EAC3BC,iBAAiB,EACjBC,QAAQ,EACRC,SAAS,EACTC,WAAW,EACXC,YAAY,EACZC,sBAAsB,EACtBC,UAAU,EACVC,WAAW,EACXC,YAAY,EACZC,WAAW,EACXC,aAAa,QACV,iBAAiB;AACxB,SAASC,gCAAgC,QAAQ,oBAAoB;AACrE;;AAgBA;;AAGA,OAAO,sBAAsB;AAC7B,OAAO,qBAAqB;AAC5B,OAAO,sBAAsB;AAC7B,OAAO,sBAAsB;AAqE7B,MAAMC,WAAW,GAAG,GAAGV,SAAS,IAAIE,YAAY,EAAE;AAElD,MAAMS,aAAa,SAASjD,SAAS,CAAe;EA8ChD;AACJ;AACA;AACA;AACA;AACA;EACIkD,WAAWA,CAACC,KAAY,EAAE;IACtB,KAAK,CAACA,KAAK,CAAC;IAACC,eAAA,oBApCI,IAAI;IAwJzB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IATIA,eAAA,2BAUmB,MAAiB;MAChC,MAAM;QAAEC;MAAgB,CAAC,GAAG,IAAI,CAACC,KAAK;MACtC,OAAOC,MAAM,CAACC,IAAI,CAACH,QAAQ,CAAC,CAACI,GAAG,CAACC,GAAG,IAAI;QACpC,MAAMC,KAAc,GAAAC,aAAA,KAAQP,QAAQ,CAACK,GAAG,CAAC,CAAE;QAC3C,OAAOC,KAAK,CAACN,QAAQ;QACrB,OAAOM,KAAK;MAChB,CAAC,CAAC;IACN,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;IANIP,eAAA,iBAOS,MAAY;MACjB,MAAM;QAAES;MAAgB,CAAC,GAAG,IAAI,CAACV,KAAK;MACtC,MAAMW,OAAO,GAAG,IAAI,CAACC,gBAAgB,CAAC,CAAC;MACvCF,QAAQ,CAACC,OAAO,CAAC;IACrB,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;IALIV,eAAA,6BAMqB,MAAY;MAC7B,MAAM;QAAEC;MAAgB,CAAC,GAAG,IAAI,CAACC,KAAK;;MAEtC;MACAC,MAAM,CAACC,IAAI,CAACH,QAAQ,CAAC,CAACW,OAAO,CAACN,GAAG,IAAI,OAAOL,QAAQ,CAACK,GAAG,CAAC,CAACL,QAAQ,CAAC;IACvE,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;IANID,eAAA,iBAOS,MAAY;MACjB,MAAM;QAAEa;MAAgB,CAAC,GAAG,IAAI,CAACd,KAAK;MAEtC,IAAI,CAACe,kBAAkB,CAAC,CAAC;;MAEzB;MACA,IAAI,CAACC,QAAQ,CAAC;QAAEd,QAAQ,EAAE,CAAC;MAAE,CAAC,EAAE,MAAMY,QAAQ,CAAC,CAAC,CAAC;IACrD,CAAC;IAgBD;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;IAPIb,eAAA,4BAQoB,MAAY;MAC5B,MAAM;QACFgB,iBAAiB,EAAE;UAAEC;QAAG,CAAC;QACzBC,IAAI;QACJC;MACG,CAAC,GAAG,IAAI,CAACjB,KAAK;MACrB,IAAIgB,IAAI,KAAK3B,WAAW,IAAI0B,EAAE,EAAE;QAC5B,IAAI,CAACG,WAAW,CAACH,EAAE,EAAE,KAAK,CAAC;MAC/B,CAAC,MAAM,IAAIC,IAAI,KAAK1B,YAAY,EAAE;QAC9B,IAAI,CAAC6B,WAAW,CAAC,KAAK,CAAC;MAC3B,CAAC,MAAM,IAAIH,IAAI,KAAKzB,WAAW,IAAI0B,WAAW,EAAE;QAC5C,IAAI,CAACG,MAAM,CAACH,WAAW,CAAC;MAC5B,CAAC,MAAM,IAAID,IAAI,KAAKxB,aAAa,EAAE;QAC/B,IAAI,CAAC6B,YAAY,CAAC,CAAC;MACvB,CAAC,MAAM;QACH,MAAM,IAAIC,KAAK,CAAC,mCAAmC,CAAC;MACxD;IACJ,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;IANIxB,eAAA,wBAOgB,CAACyB,KAAuB,EAAEC,IAAY,KAAW;MAC7D,IAAI,CAACX,QAAQ,CAAC;QAAEG,IAAI,EAAE5B;MAAW,CAAC,CAAC;MACnC;MACAqC,OAAO,CAACF,KAAK,CAACA,KAAK,EAAEC,IAAI,CAAC;MAC1B;IACJ,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;IANI1B,eAAA,sBAOe4B,IAAsB,IAAW;MAC5C;MACA,IAAI,OAAOA,IAAI,KAAK,QAAQ,EAAE;QAC1B,IAAI,CAACR,WAAW,CAACQ,IAAI,CAAC;QACtB;MACJ;;MAEA;MACA,MAAM;QAAEX,EAAE;QAAEY;MAAc,CAAC,GAAGD,IAAI;MAClC,IAAIC,IAAI,KAAK1C,WAAW,EAAE;QACtB,IAAI,CAACiC,WAAW,CAACH,EAAE,CAAC;MACxB;IACJ,CAAC;IAiED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;IAPIjB,eAAA,sBAQc,CAACiB,EAAW,EAAEa,sBAAgC,GAAG,IAAI,KAAW;MAC1E,MAAM;QAAEC;MAAoB,CAAC,GAAG,IAAI,CAAChC,KAAK;MAC1C,MAAM;QACFiB,iBAAiB,EAAE;UAAEC,EAAE,EAAEe;QAAU,CAAC;QACpCC,aAAa;QACbC,eAAe,EAAEC,KAAK;QACtBhB,WAAW,GAAG,EAAE;QAChBiB,MAAM;QACNC;MACG,CAAC,GAAG,IAAI,CAACnC,KAAK;MACrB,MAAMoC,QAAgB,GAAG,OAAOrB,EAAE,KAAK,QAAQ,GAAGA,EAAE,GAAGc,YAAY;MACnE,MAAMQ,gBAAgB,GAAGP,SAAS,IAAIA,SAAS,KAAKM,QAAQ;MAC5D,MAAME,cAAc,GAAG,CAAC,CAACrB,WAAW,CAACsB,IAAI,CAAC,CAAC,CAACC,MAAM;MAClD,MAAMC,MAAM,GAAGJ,gBAAgB,IAAIC,cAAc,GAAG,CAAC,GAAGP,aAAa,CAAC,CAAC;;MAEvE;MACA;MACA;MACA;MACA,IAAI,CAAC,IAAI,CAACW,SAAS,EAAE;QACjB,IAAI,CAACC,WAAW,CAAC/E,KAAK,CAAC,CAAC;MAC5B;;MAEA;MACA,IAAI,CAACiD,QAAQ,CAAC;QACVI,WAAW,EAAE,EAAE;QACfD,IAAI,EAAE3B,WAAW;QACjByB,iBAAiB,EAAE,IAAI,CAAC8B,yBAAyB,CAAC,CAAC;QACnDb,aAAa,EAAEU;MACnB,CAAC,CAAC;;MAEF;MACA,IAAI,CAACI,GAAG,CAACC,YAAY,CAAC,CAAC,CAACC,SAAS,CAC7BX,QAAQ,EACRH,KAAK,EACLQ,MAAM,EACNP,MAAM,EACNC,aAAa,EACZa,UAAsB,IAAK;QACxB,IAAI,CAACC,0BAA0B,CAACD,UAAU,EAAEpB,sBAAsB,CAAC;MACvE,CAAC,EACD,IAAI,CAACsB,aAAa,EAClB;QAAEC,UAAU,EAAE;MAAK,CACvB,CAAC;IACL,CAAC;IAkDD;AACJ;AACA;AACA;AACA;AACA;IALIrD,eAAA,uBAMe,MAAY;MACvB,MAAM;QAAEC,QAAQ;QAAEmC,MAAM;QAAEC;MAAqB,CAAC,GAAG,IAAI,CAACnC,KAAK;MAC7D,IAAI,CAACa,QAAQ,CACT;QACII,WAAW,EAAE,EAAE;QACfD,IAAI,EAAExB,aAAa;QACnBsB,iBAAiB,EAAE;UACfoB,MAAM;UACNC,aAAa;UACbiB,aAAa,EAAE,GAAG;UAClBC,KAAK,EAAEpD,MAAM,CAACC,IAAI,CAACH,QAAQ,CAAC,CAACI,GAAG,CAACC,GAAG,IAAI,IAAI,CAACyC,GAAG,CAACS,QAAQ,CAAC,CAAC,CAACC,GAAG,CAACnD,GAAG,CAAC;QACxE;MACJ,CAAC,EACD,IAAI,CAACoD,gBACT,CAAC;IACL,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;IANI1D,eAAA,gCAOyBkD,UAAsB,IAAW;MACtD,MAAM;QAAElC;MAAyB,CAAC,GAAG,IAAI,CAACd,KAAK;MAC/C,IAAI,CAACa,QAAQ,CAAC;QACVC,iBAAiB,EAAE2C,QAAA,CAAc3C,iBAAiB,EAAEkC,UAAU;MAClE,CAAC,CAAC;IACN,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IARIlD,eAAA,0BAS4BlD,QAAQ,CAAC,CAACmE,EAAU,EAAE2C,KAAa,KAAW;MACtE,MAAM;QAAE3B,aAAa;QAAEC;MAAuB,CAAC,GAAG,IAAI,CAAChC,KAAK;MAE5D,IAAI,CAAC6C,GAAG,CACHc,YAAY,CAAC,CAAC,CACdvC,MAAM,CAACL,EAAE,EAAE2C,KAAK,EAAE1B,eAAe,EAAED,aAAa,EAAE,IAAI,CAAC6B,qBAAqB,EAAE,IAAI,CAACV,aAAa,EAAE;QAC/FC,UAAU,EAAE;MAChB,CAAC,CAAC;IACV,CAAC,EAAE5E,uBAAuB,CAAC;IAE3B;AACJ;AACA;AACA;AACA;AACA;AACA;IANIuB,eAAA,iBAOU4D,KAAa,IAAW;MAC9B,MAAM;QAAE7B;MAAoB,CAAC,GAAG,IAAI,CAAChC,KAAK;MAC1C,MAAM;QACFiB,iBAAiB,EAAE;UAAEC;QAAG,CAAC;QACzBgB,aAAa;QACbd;MACG,CAAC,GAAG,IAAI,CAACjB,KAAK;MACrB,MAAMoC,QAAQ,GAAG,OAAOrB,EAAE,KAAK,QAAQ,GAAGA,EAAE,GAAGc,YAAY;MAC3D,MAAMgC,YAAoB,GAAGH,KAAK,CAACnB,IAAI,CAAC,CAAC;MAEzC,IAAI,CAACmB,KAAK,EAAE;QACR;QACA,IAAI,CAACI,eAAe,CAACC,MAAM,CAAC,CAAC;;QAE7B;QACA;QACA,IAAI,CAAClD,QAAQ,CAAC;UAAEkB,aAAa,EAAE;QAAE,CAAC,EAAE,MAAM;UACtC,IAAI,CAACb,WAAW,CAACkB,QAAQ,EAAE,KAAK,CAAC;QACrC,CAAC,CAAC;QAEF;MACJ;MAEA,IAAI,CAACyB,YAAY,EAAE;QACf;QACA;QACA,IAAI,CAAChD,QAAQ,CAAC;UACVI,WAAW,EAAEyC;QACjB,CAAC,CAAC;QACF;MACJ;MAEA,IAAI,CAAC7C,QAAQ,CAAC;QACVI,WAAW,EAAEyC,KAAK;QAClB1C,IAAI,EAAEzB,WAAW;QACjBuB,iBAAiB,EAAE,IAAI,CAAC8B,yBAAyB,CAAC,CAAC;QACnDb,aAAa,EAAE8B,YAAY,KAAK5C,WAAW,GAAGc,aAAa,GAAG;MAClE,CAAC,CAAC;MAEF,IAAI,CAAC+B,eAAe,CAAC1B,QAAQ,EAAEsB,KAAK,CAAC;IACzC,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;IANI5D,eAAA,iBAOS,MAAY;MACjB,MAAM;QACFgB,iBAAiB,EAAE;UAAEC,EAAE;UAAEiD;QAAY;MAClC,CAAC,GAAG,IAAI,CAAChE,KAAK;MACrB,MAAM;QAAEiE;MAAiB,CAAC,GAAG,IAAI,CAACpE,KAAK;MACvC,IAAI,CAACkB,EAAE,IAAI,CAACiD,WAAW,EAAE;QACrB;MACJ;MAEA,MAAM;QAAEE,UAAU,EAAEC;MAAuC,CAAC,GAAGH,WAAW;MAC1E,IAAI,CAACC,SAAS,IAAI,CAACE,mBAAmB,EAAE;QACpC;MACJ;MAEA,IAAI,CAACtD,QAAQ,CAAC;QAAEuD,iBAAiB,EAAE;MAAK,CAAC,CAAC;IAC9C,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;IANItE,eAAA,+BAOuB,MAAY;MAC/B,MAAM;QACFgB,iBAAiB,EAAE;UAAEC;QAAG;MACrB,CAAC,GAAG,IAAI,CAACf,KAAK;MACrB,IAAI,CAACkB,WAAW,CAACH,EAAE,EAAE,KAAK,CAAC;IAC/B,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;IALIjB,eAAA,uBAMe,MAAY;MACvB,IAAI,CAACuE,oBAAoB,CAAC,CAAC;IAC/B,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;IANIvE,eAAA,+BAOwBwE,IAAa,IAAW;MAC5C,MAAM;QAAEC,uBAAuB;QAAEzD;MAAyB,CAAC,GAAG,IAAI,CAACd,KAAK;MACxE,MAAM;QAAEwE;MAA0B,CAAC,GAAG,IAAI,CAAC3E,KAAK;MAChD,IAAI,CAAC2E,kBAAkB,EAAE;QACrB;MACJ;MAEA,MAAM;QAAEzD,EAAE;QAAEiD;MAAwB,CAAC,GAAGlD,iBAAiB;MACzD,IAAI,CAACC,EAAE,IAAI,CAACiD,WAAW,EAAE;QACrB;MACJ;MAEA,MAAM;QAAEE;MAA8B,CAAC,GAAGF,WAAW;MACrD,IAAI,CAACE,UAAU,EAAE;QACb;MACJ;MAEA,IAAI,CAACK,uBAAuB,IAAI,CAACD,IAAI,EAAE;QACnC,IAAI,CAACzD,QAAQ,CAAC;UAAE0D,uBAAuB,EAAE,IAAI;UAAEE,SAAS,EAAE;QAAG,CAAC,CAAC;QAC/D;MACJ;MAEA,IAAI,CAACH,IAAI,CAAC/B,IAAI,CAAC,CAAC,EAAE;QACd,IAAI,CAAC1B,QAAQ,CAAC;UACV4D,SAAS,EAAE/F,4BAA4B;UACvCgG,SAAS,EAAE;QACf,CAAC,CAAC;QACF;MACJ;MAEA,IAAIJ,IAAI,CAAC9B,MAAM,GAAG,GAAG,EAAE;QACnB,IAAI,CAAC3B,QAAQ,CAAC;UACV4D,SAAS,EAAE9F,6BAA6B;UACxC+F,SAAS,EAAE;QACf,CAAC,CAAC;QACF;MACJ;MAEA,IAAI,CAAC7D,QAAQ,CAAC;QAAE6D,SAAS,EAAE;MAAK,CAAC,CAAC;MAClC,IAAI,CAAC7B,GAAG,CAACC,YAAY,CAAC,CAAC,CAAC6B,MAAM,CAC1B5D,EAAE,EACFuD,IAAI,CAAC/B,IAAI,CAAC,CAAC,EACX,MAAM;QACF,IAAI,CAACrB,WAAW,CAACH,EAAE,CAAC;MACxB,CAAC,EACD,CAAC;QAAES;MAAK,CAAC,KAAK;QACV,IAAI,CAACX,QAAQ,CAAC;UACV4D,SAAS,EAAEjD,IAAI;UACfkD,SAAS,EAAE;QACf,CAAC,CAAC;MACN,CACJ,CAAC;IACL,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;IAPI5E,eAAA,iBAQS,CAAC4B,IAAa,EAAE;MAAEkD,eAAe,GAAG;IAAmB,CAAC,GAAG,CAAC,CAAC,KAAW;MAC7E,MAAM;QAAEC,iBAAiB;QAAElD,IAAI,EAAEmD,cAAc;QAAEC;MAAqB,CAAC,GAAG,IAAI,CAAClF,KAAK;MACpF,MAAM;QACFmB,IAAI;QACJjB,QAAQ;QACRe,iBAAiB,EAAE;UAAEuC,KAAK,GAAG;QAAG;MAC7B,CAAC,GAAG,IAAI,CAACrD,KAAK;MACrB,MAAM;QAAEe,EAAE;QAAEY;MAAc,CAAC,GAAGD,IAAI;MAElC,IAAI,CAACX,EAAE,IAAI,CAACY,IAAI,IAAImD,cAAc,CAACE,OAAO,CAACrD,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;QACrD;MACJ;MAEA,MAAMsD,YAA2B,GAAGhF,MAAM,CAACC,IAAI,CAACH,QAAQ,CAAC;MACzD,MAAMmF,aAAqB,GAAGD,YAAY,CAACzC,MAAM;MACjD,MAAM2C,oBAA6B,GAAGD,aAAa,KAAKH,aAAa;MACrE,MAAMK,qBAA8B,GAAGL,aAAa,KAAK,CAAC;MAC1D,MAAMM,QAAgB,GAAG,IAAI,CAACxC,GAAG,CAACyC,MAAM,CAAC3D,IAAI,CAAC,CAAC4D,WAAW,CAACxE,EAAE,CAAC;MAC9D,MAAMyE,QAAiB,GAAGzF,QAAQ,CAACsF,QAAQ,CAAC;MAC5C,MAAMI,iBAA0B,GAAG,IAAI,CAAC5C,GAAG,CAACS,QAAQ,CAAC,CAAC,CAACC,GAAG,CAAC8B,QAAQ,CAAC;MACpE,MAAMK,eAAe,GAAGT,YAAY,CAACD,OAAO,CAACK,QAAQ,CAAC,KAAK,CAAC,CAAC;;MAE7D;MACA;MACA,IAAIG,QAAQ,IAAIA,QAAQ,KAAKC,iBAAiB,EAAE;QAC5C;QACA;QACA,OAAOD,QAAQ,CAACzF,QAAQ;QACxB,OAAOA,QAAQ,CAACsF,QAAQ,CAAC;MAC7B,CAAC,MAAM;QACH;QACA;QACA;QACA;;QAEA;QACA;QACA;QACA,IAAIF,oBAAoB,IAAI,CAACC,qBAAqB,IAAI,CAACM,eAAe,EAAE;UACpE;QACJ;;QAEA;QACA,IAAIR,aAAa,GAAG,CAAC,IAAIE,qBAAqB,EAAE;UAC5C,MAAMO,KAAK,GAAGV,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;UAC/B,OAAOlF,QAAQ,CAAC4F,KAAK,CAAC,CAAC5F,QAAQ;UAC/B,OAAOA,QAAQ,CAAC4F,KAAK,CAAC;QAC1B;;QAEA;QACAjE,IAAI,CAAC3B,QAAQ,GAAG,IAAI;QACpBA,QAAQ,CAACsF,QAAQ,CAAC,GAAG3D,IAAI;;QAEzB;QACA;QACA;QACA,IAAImD,iBAAiB,IAAID,eAAe,EAAE;UACtC,IAAI,CAACgB,mBAAmB,CAAClE,IAAI,CAAC;QAClC;MACJ;MAEA,MAAMmE,UAAU,GAAGxC,KAAK,CAACyC,SAAS,CAAEC,CAAU,IAAKA,CAAC,CAAChF,EAAE,KAAKW,IAAI,CAACX,EAAE,CAAC;MACpE,IAAI,CAACF,QAAQ,CAAC;QAAEd,QAAQ;QAAE8F;MAAW,CAAC,EAAE,MAAM;QAC1C,IAAI7E,IAAI,KAAKxB,aAAa,EAAE;UACxB;UACA,IAAI,CAAC6B,YAAY,CAAC,CAAC;QACvB;MACJ,CAAC,CAAC;IACN,CAAC;IAED;AACJ;AACA;AACA;AACA;IAJIvB,eAAA,8BAKuB4B,IAAa,IAAW;MAC3C,MAAM;QAAEX,EAAE;QAAEY;MAAc,CAAC,GAAGD,IAAI;MAElC,QAAQC,IAAI;QACR,KAAK1C,WAAW;UACZ,IAAI,CAAC4D,GAAG,CAACC,YAAY,CAAC,CAAC,CAACkD,eAAe,CAACjF,EAAE,EAAE,IAAI,CAACkF,uBAAuB,EAAEjJ,IAAI,EAAE;YAC5EkJ,MAAM,EAAEzG;UACZ,CAAC,CAAC;UACF;QACJ,KAAKT,SAAS;UACV,IAAI,CAAC6D,GAAG,CACHsD,UAAU,CAAC,CAAC,CACZC,OAAO,CAACrF,EAAE,EAAE,IAAI,CAACkF,uBAAuB,EAAEjJ,IAAI,EAAE;YAAEkJ,MAAM,EAAEzG;UAAiC,CAAC,CAAC;UAClG;QACJ,KAAKP,YAAY;UACb,IAAI,CAAC2D,GAAG,CACHwD,aAAa,CAAC,CAAC,CACfC,UAAU,CAACvF,EAAE,EAAE,IAAI,CAACkF,uBAAuB,EAAEjJ,IAAI,EAAE;YAAEkJ,MAAM,EAAEzG;UAAiC,CAAC,CAAC;UACrG;QACJ;UACI,MAAM,IAAI6B,KAAK,CAAC,cAAc,CAAC;MACvC;IACJ,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;IANIxB,eAAA,kCAO0B,MAAO4B,IAAa,IAAK;MAC/C,MAAM;QAAE3B;MAAS,CAAC,GAAG,IAAI,CAACC,KAAK;MAC/B,MAAM;QAAEe,EAAE;QAAEY;MAAK,CAAC,GAAGD,IAAI;MACzB;MACA,MAAM2D,QAAQ,GAAG,IAAI,CAACxC,GAAG,CAACyC,MAAM,CAAC3D,IAAI,CAAC,CAAC4D,WAAW,CAACxE,EAAE,CAAC;MACtD,IAAIwF,WAAW,GAAG7E,IAAI;;MAEtB;MACA,IAAI,CAACA,IAAI,CAAC5C,iBAAiB,CAAC,IAAIhC,OAAO,CAAC4E,IAAI,EAAE7C,2BAA2B,EAAE,KAAK,CAAC,EAAE;QAC/E;QACA,MAAM,IAAI,CAACgE,GAAG,CAACyC,MAAM,CAAC5D,IAAI,CAACC,IAAI,CAAC,CAAC6E,KAAK,CAAC9E,IAAI,EAAE+E,SAAS,EAAGC,UAAmB,IAAK;UAC7EH,WAAW,GAAGG,UAAU;QAC5B,CAAC,CAAC;MACN;MAEA,IAAI,CAACC,sBAAsB,CAACJ,WAAW,CAAC;MACxC,IAAIA,WAAW,CAACxG,QAAQ,IAAIwG,WAAW,KAAKxG,QAAQ,CAACsF,QAAQ,CAAC,EAAE;QAC5D,IAAI,CAACuB,MAAM,CAACL,WAAW,EAAE;UAAE3B,eAAe,EAAE;QAAM,CAAC,CAAC;MACxD;IACJ,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;IAPI9E,eAAA,4BAQoB,CAAC+G,MAAc,EAAEnF,IAAa,KAAW;MACzD,MAAM;QAAEmD;MAAyB,CAAC,GAAG,IAAI,CAAChF,KAAK;MAC/C,IAAI,CAAC6B,IAAI,IAAI,CAACmD,iBAAiB,EAAE;QAC7B;MACJ;MAEA,MAAM;QAAEb,WAAW;QAAErC;MAAc,CAAC,GAAGD,IAAI;MAC3C,IAAI,CAACsC,WAAW,IAAI,CAACrC,IAAI,EAAE;QACvB;MACJ;MAEA,MAAM;QAAEmF;MAAwC,CAAC,GAAG9C,WAAW;MAC/D,IAAI,CAAC8C,oBAAoB,EAAE;QACvB;MACJ;MAEA,IAAI,CAACjE,GAAG,CAACyC,MAAM,CAAC3D,IAAI,CAAC,CAAC6E,KAAK,CAAC9E,IAAI,EAAEmF,MAAM,EAAGN,WAAoB,IAAK;QAChE,IAAI,CAACI,sBAAsB,CAACJ,WAAW,CAAC;QACxC,IAAI7E,IAAI,CAAC3B,QAAQ,EAAE;UACf,IAAI,CAAC6G,MAAM,CAACL,WAAW,EAAE;YAAE3B,eAAe,EAAE;UAAM,CAAC,CAAC;QACxD;MACJ,CAAC,CAAC;IACN,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;IALI9E,eAAA,iCAM0B4B,IAAa,IAAK;MACxC,MAAM;QAAEZ;MAAkB,CAAC,GAAG,IAAI,CAACd,KAAK;MACxC,MAAM;QAAEqD,KAAK,GAAG;MAAG,CAAC,GAAGvC,iBAAiB;MACxC,MAAMiG,QAAQ,GAAG;QACbjG,iBAAiB,EAAAR,aAAA,CAAAA,aAAA,KACVQ,iBAAiB;UACpBuC,KAAK,EAAEA,KAAK,CAAClD,GAAG,CAAC6G,cAAc,IAAKA,cAAc,CAACjG,EAAE,KAAKW,IAAI,CAACX,EAAE,GAAGW,IAAI,GAAGsF,cAAe;QAAC;MAEnG,CAAC;MACD,IAAI,CAACnG,QAAQ,CAACkG,QAAQ,CAAC;IAC3B,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;IAPIjH,eAAA,eAQO,CAACoC,MAAc,EAAEC,aAA4B,KAAK;MACrD,MAAM;QACFrB,iBAAiB,EAAE;UAAEC;QAAG;MACrB,CAAC,GAAG,IAAI,CAACf,KAAK;MACrB,IAAIe,EAAE,EAAE;QACJ,IAAI,CAACF,QAAQ,CAAC;UAAEqB,MAAM;UAAEC;QAAc,CAAC,EAAE,IAAI,CAAC8E,iBAAiB,CAAC;MACpE;IACJ,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;IANInH,eAAA,mBAOYoH,KAA4B,IAAK;MACzC,IAAI,CAACA,KAAK,GAAGA,KAAK;IACtB,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;IALIpH,eAAA,sBAMc,MAAY;MACtB,MAAM;QAAE+F;MAAkB,CAAC,GAAG,IAAI,CAAC7F,KAAK;MAExC,IAAI,CAACa,QAAQ,CAAC;QACV6D,SAAS,EAAE,KAAK;QAChBH,uBAAuB,EAAE,KAAK;QAC9BH,iBAAiB,EAAE;MACvB,CAAC,CAAC;MAEF,MAAM;QACFrE,QAAQ;QACRe,iBAAiB,EAAE;UAAEuC,KAAK,GAAG;QAAG;MAC7B,CAAC,GAAG,IAAI,CAACrD,KAAK;MACrB,IAAID,QAAQ,IAAIsD,KAAK,CAACb,MAAM,GAAG,CAAC,EAAE;QAC9B5E,KAAK,CAAC,IAAI,CAAC+E,WAAW,EAAE,iBAAiBkD,UAAU,EAAE,CAAC;MAC1D;IACJ,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;IANI/F,eAAA,oBAOaqH,KAA0C,IAAK;MACxD,IAAIxJ,cAAc,CAACwJ,KAAK,CAACC,MAAM,CAAC,EAAE;QAC9B;MACJ;MAEA,MAAM;QAAEvF;MAAoB,CAAC,GAAG,IAAI,CAAChC,KAAK;MAC1C,MAAMO,GAAG,GAAG+G,KAAK,CAAC/G,GAAG,CAACiH,WAAW,CAAC,CAAC;MAEnC,QAAQjH,GAAG;QACP,KAAK,GAAG;UACJxC,KAAK,CAAC,IAAI,CAAC+E,WAAW,EAAE,iCAAiC,EAAE,KAAK,CAAC;UACjEwE,KAAK,CAACG,cAAc,CAAC,CAAC;UACtB;QACJ,KAAK,WAAW;UACZ1J,KAAK,CAAC,IAAI,CAAC+E,WAAW,EAAE,eAAe,EAAE,KAAK,CAAC;UAC/C,IAAI,CAAC9B,QAAQ,CAAC;YAAEgF,UAAU,EAAE;UAAE,CAAC,CAAC;UAChCsB,KAAK,CAACG,cAAc,CAAC,CAAC;UACtB;QACJ,KAAK,GAAG;UACJ;QACJ,KAAK,GAAG;UACJ,IAAI,IAAI,CAACC,cAAc,EAAE;YACrB3J,KAAK,CAAC,IAAI,CAAC+E,WAAW,EAAE,uBAAuB,EAAE,KAAK,CAAC;YACvDwE,KAAK,CAACG,cAAc,CAAC,CAAC;UAC1B;UAEA;QACJ,KAAK,GAAG;UACJ,IAAI,IAAI,CAACC,cAAc,EAAE;YACrB,IAAI,CAACrG,WAAW,CAACW,YAAY,CAAC;YAC9BsF,KAAK,CAACG,cAAc,CAAC,CAAC;UAC1B;UAEA;QACJ,KAAK,GAAG;UACJ,IAAI,IAAI,CAACC,cAAc,EAAE;YACrB,IAAI,CAACC,MAAM,CAAC,CAAC;YACbL,KAAK,CAACG,cAAc,CAAC,CAAC;UAC1B;UAEA;QACJ,KAAK,GAAG;UACJ,IAAI,IAAI,CAACC,cAAc,EAAE;YACrB,IAAI,CAACxD,MAAM,CAAC,CAAC;YACboD,KAAK,CAACG,cAAc,CAAC,CAAC;UAC1B;UAEA;QACJ,KAAK,GAAG;UACJ,IAAI,IAAI,CAACC,cAAc,EAAE;YACrB,IAAI,CAAClG,YAAY,CAAC,CAAC;YACnB8F,KAAK,CAACG,cAAc,CAAC,CAAC;UAC1B;UAEA;QACJ,KAAK,GAAG;UACJ,IAAI,IAAI,CAACC,cAAc,EAAE;YACrB,IAAI,CAACE,MAAM,CAAC,CAAC;YACbN,KAAK,CAACG,cAAc,CAAC,CAAC;UAC1B;UAEA;QACJ,KAAK,GAAG;UACJ,IAAI,IAAI,CAACC,cAAc,EAAE;YACrB,IAAI,CAACpG,WAAW,CAAC,CAAC;YAClBgG,KAAK,CAACG,cAAc,CAAC,CAAC;UAC1B;UAEA;QACJ,KAAK,GAAG;UACJ,IAAI,IAAI,CAACC,cAAc,EAAE;YACrB,IAAI,CAACG,YAAY,CAAC,CAAC;YACnBP,KAAK,CAACG,cAAc,CAAC,CAAC;UAC1B;UAEA;QACJ;UACI,IAAI,CAACC,cAAc,GAAG,KAAK;UAC3B;MACR;MAEA,IAAI,CAACA,cAAc,GAAGnH,GAAG,KAAK,GAAG;IACrC,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;IANIN,eAAA,wBAOiB+F,UAAkB,IAAK;MACpC,IAAI,CAAChF,QAAQ,CAAC;QAAEgF;MAAW,CAAC,CAAC;IACjC,CAAC;IAED;AACJ;AACA;AACA;AACA;IAJI/F,eAAA,mBAKY6H,SAAiB,IAAK;MAC9B,IAAI,CAAC9G,QAAQ,CAAC;QAAEkB,aAAa,EAAE4F;MAAU,CAAC,EAAE,IAAI,CAACV,iBAAiB,CAAC;IACvE,CAAC;IAh9BG,MAAM;MACFW,OAAO;MACPC,UAAU;MACVC,WAAW;MACXC,eAAe;MACfC,QAAQ;MACRC,kBAAkB;MAClBC,mBAAmB;MACnBrG,YAAY,EAAZA,aAAY;MACZsG,UAAU;MACVC,kBAAkB;MAClBlG,MAAM,EAANA,OAAM;MACNC,aAAa,EAAbA,cAAa;MACbkG,KAAK;MACLC;IACJ,CAAC,GAAGzI,KAAK;IAET,IAAI,CAACgD,GAAG,GAAG,IAAIhF,GAAG,CAAC;MACf+J,OAAO;MACPC,UAAU;MACV9G,EAAE,EAAE,GAAG5B,sBAAsB,GAAG0C,aAAY,EAAE;MAC9CmG,QAAQ;MACRC,kBAAkB;MAClBC,mBAAmB;MACnBC,UAAU;MACVC,kBAAkB;MAClBC,KAAK;MACLC,UAAU;MACVC,OAAO,EAAEtK;IACb,CAAC,CAAC;IAEF,IAAI,CAAC8C,EAAE,GAAGhE,QAAQ,CAAC,MAAM,CAAC;IAE1B,IAAI,CAACiD,KAAK,GAAG;MACTkC,MAAM,EAANA,OAAM;MACNC,aAAa,EAAbA,cAAa;MACbqG,QAAQ,EAAE,EAAE;MACZ1H,iBAAiB,EAAE,CAAC,CAAC;MACrBiB,aAAa,EAAEgG,eAAe,IAAID,WAAW,GAAG,CAAC,CAAC;MAClD9F,eAAe,EAAE+F,eAAe;MAChChI,QAAQ,EAAE,CAAC,CAAC;MACZkB,WAAW,EAAE,EAAE;MACfD,IAAI,EAAE3B,WAAW;MACjBkF,uBAAuB,EAAE,KAAK;MAC9BH,iBAAiB,EAAE,KAAK;MACxByB,UAAU,EAAE,CAAC;MACbnB,SAAS,EAAE,KAAK;MAChBD,SAAS,EAAE;IACf,CAAC;EACL;;EAEA;AACJ;AACA;AACA;AACA;AACA;EACIgE,UAAUA,CAAA,EAAS;IACf,IAAI,CAAC5F,GAAG,CAAC6F,OAAO,CAAC,IAAI,CAAC;EAC1B;;EAEA;AACJ;AACA;AACA;AACA;AACA;AACA;EACIC,oBAAoBA,CAAA,EAAG;IACnB,IAAI,CAACF,UAAU,CAAC,CAAC;EACrB;;EAEA;AACJ;AACA;AACA;AACA;AACA;AACA;EACIG,iBAAiBA,CAAA,EAAG;IAChB,MAAM;MAAEC,WAAW;MAAEC;IAAuB,CAAC,GAAG,IAAI,CAACjJ,KAAK;IAC1D,IAAI,CAAC8C,WAAW,GAAKoG,QAAQ,CAACC,cAAc,CAAC,IAAI,CAACjI,EAAE,CAAqB;IACzE,IAAI,CAACkI,UAAU,GAAK,IAAI,CAACtG,WAAW,CAACuG,iBAAqC;IAE1E,IAAIL,WAAW,KAAKpK,oBAAoB,EAAE;MACtC,IAAI,CAAC0C,WAAW,CAAC,CAAC;IACtB,CAAC,MAAM;MACH,IAAI,CAACD,WAAW,CAAC4H,eAAe,CAAC;IACrC;EACJ;;EAEA;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;EACIK,kBAAkBA,CAAC;IAAEL,eAAe,EAAEM;EAAoB,CAAC,EAAEC,SAAgB,EAAQ;IACjF,MAAM;MAAEP;IAAuB,CAAC,GAAG,IAAI,CAACjJ,KAAK;IAC7C,MAAM;MACFiB,iBAAiB,EAAE;QAAEC;MAAG;IACrB,CAAC,GAAGsI,SAAS;IAEpB,IAAID,YAAY,KAAKN,eAAe,EAAE;MAClC;IACJ;IAEA,IAAI,OAAOA,eAAe,KAAK,QAAQ,IAAI/H,EAAE,KAAK+H,eAAe,EAAE;MAC/D,IAAI,CAAC5H,WAAW,CAAC4H,eAAe,CAAC;IACrC;EACJ;EA+DA;AACJ;AACA;AACA;AACA;AACA;AACA;EACIlG,yBAAyBA,CAAA,EAAe;IACpC,MAAM;MAAE9B;IAAyB,CAAC,GAAG,IAAI,CAACd,KAAK;IAC/C,OAAOyD,QAAA,CAAc3C,iBAAiB,EAAE;MACpCsC,aAAa,EAAE;IACnB,CAAC,CAAC;EACN;EAgEA;AACJ;AACA;AACA;AACA;AACA;EACII,gBAAgBA,CAAA,EAAS;IACrB,MAAM;MAAE8F;IAAiB,CAAC,GAAG,IAAI,CAACzJ,KAAK;IACvC,MAAM;MACFiB,iBAAiB,EAAE;QAAEsC;MAAc;IAChC,CAAC,GAAG,IAAI,CAACpD,KAAK;;IAErB;IACA,IAAI,IAAI,CAAC0C,SAAS,IAAI,CAAC4G,SAAS,EAAE;MAC9B,IAAI,CAAC5G,SAAS,GAAG,KAAK;MACtB;IACJ;;IAEA;IACA,IAAIU,aAAa,KAAK,GAAG,IAAI,CAAC1F,kBAAkB,CAACqL,QAAQ,CAACQ,aAAa,CAAC,EAAE;MACtE3L,KAAK,CAAC,IAAI,CAAC+E,WAAW,EAAE,eAAe,CAAC;MACxC,IAAI,CAAC9B,QAAQ,CAAC;QAAEgF,UAAU,EAAE;MAAE,CAAC,CAAC;IACpC;IAEA,IAAI,CAACnD,SAAS,GAAG,KAAK;EAC1B;;EAEA;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;EACIO,0BAA0BA,CAACD,UAAsB,EAAEpB,sBAA+B,EAAQ;IACtF,MAAM;MAAE4H,8BAA8B;MAAE3H;IAAoB,CAAC,GAAG,IAAI,CAAChC,KAAK;IAC1E,MAAM;MAAEkB,EAAE;MAAEuD;IAAiB,CAAC,GAAGtB,UAAU;IAE3C,MAAMyG,WAAW,GAAG;MAChB3I,iBAAiB,EAAEkC,UAAU;MAC7BwF,QAAQ,EAAEzH,EAAE,KAAKc,YAAY,GAAGyC,IAAI,GAAG;IAC3C,CAAC;;IAED;IACA,MAAMyC,QAAQ,GAAGyC,8BAA8B,GAAAlJ,aAAA,CAAAA,aAAA,KAAQmJ,WAAW;MAAE1J,QAAQ,EAAE,CAAC;IAAC,KAAK0J,WAAW;;IAEhG;IACA,IAAI,CAACC,WAAW,CAAC,CAAC;;IAElB;IACA,IAAIF,8BAA8B,EAAE;MAChC,IAAI,CAAC5I,kBAAkB,CAAC,CAAC;IAC7B;IAEA,IAAIgB,sBAAsB,EAAE;MACxB;MACA,IAAI,CAACf,QAAQ,CAACkG,QAAQ,EAAE,IAAI,CAACvD,gBAAgB,CAAC;IAClD,CAAC,MAAM;MACH,IAAI,CAAC3C,QAAQ,CAACkG,QAAQ,CAAC;IAC3B;EACJ;EAwDA;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;EACI4C,sBAAsBA,CAAC3G,UAAsB,EAAEpB,sBAA+B,EAAQ;IAClF,MAAMmF,QAAQ,GAAG;MAAEjG,iBAAiB,EAAEkC;IAAW,CAAC;IAClD,IAAIpB,sBAAsB,EAAE;MACxB,IAAI,CAACf,QAAQ,CAACkG,QAAQ,EAAE,IAAI,CAACvD,gBAAgB,CAAC;IAClD,CAAC,MAAM;MACH,IAAI,CAAC3C,QAAQ,CAACkG,QAAQ,CAAC;IAC3B;EACJ;;EAEA;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACI5F,WAAWA,CAACS,sBAA+B,GAAG,IAAI,EAAQ;IACtD,MAAM;MAAEC;IAAoB,CAAC,GAAG,IAAI,CAAChC,KAAK;;IAE1C;IACA,IAAI,CAACgB,QAAQ,CAAC;MACVI,WAAW,EAAE,EAAE;MACfD,IAAI,EAAE1B,YAAY;MAClBwB,iBAAiB,EAAE,IAAI,CAAC8B,yBAAyB,CAAC,CAAC;MACnDb,aAAa,EAAE;IACnB,CAAC,CAAC;;IAEF;IACA,IAAI,CAACc,GAAG,CAAC+G,aAAa,CAAC,CAAC,CAACC,OAAO,CAC5BhI,YAAY,EACXmB,UAAsB,IAAK;MACxB,IAAI,CAAC2G,sBAAsB,CAAC3G,UAAU,EAAEpB,sBAAsB,CAAC;IACnE,CAAC,EACD,IAAI,CAACsB,aAAa,EAClB;MAAEC,UAAU,EAAE;IAAK,CACvB,CAAC;EACL;EAojBA;AACJ;AACA;AACA;AACA;AACA;AACA;EACI2G,MAAMA,CAAA,EAAG;IACL,MAAM;MACF9B,QAAQ;MACR+B,QAAQ;MACRlI,YAAY;MACZmI,OAAO;MACP/F,SAAS;MACTY,iBAAiB;MACjBL,kBAAkB;MAClByF,oBAAoB;MACpBC,UAAU;MACVnF,aAAa;MACbpD,IAAI;MACJ0G,KAAK;MACLF,UAAU;MACVC,kBAAkB;MAClBR,OAAO;MACPU,UAAU;MACV6B,mBAAmB;MACnBC,mBAAmB;MACnBC,OAAO;MACPC,SAAS;MACTC,UAAU;MACVC,iBAAiB;MACjBC,iBAAiB;MACjBxC,kBAAkB;MAClBC,mBAAmB;MACnBwC,yBAAyB;MACzBC,kBAAkB;MAClBC,KAAK;MACLC;IACG,CAAC,GAAG,IAAI,CAAChL,KAAK;IACrB,MAAM;MACFmB,IAAI;MACJwH,QAAQ;MACRzI,QAAQ;MACRe,iBAAiB;MACjBkB,eAAe;MACff,WAAW;MACXsD,uBAAuB;MACvBH,iBAAiB;MACjBM,SAAS;MACTD,SAAS;MACToB;IACG,CAAC,GAAG,IAAI,CAAC7F,KAAK;IACrB,MAAM;MAAEe,EAAE;MAAE0B,MAAM;MAAEuB,WAAW;MAAE8G;IAAuB,CAAC,GAAGhK,iBAAiB;IAC7E,MAAM;MAAEoD;IAA8B,CAAC,GAAGF,WAAW,IAAI,CAAC,CAAC;IAC3D,MAAMkB,aAAqB,GAAGjF,MAAM,CAACC,IAAI,CAACH,QAAQ,CAAC,CAACyC,MAAM;IAC1D,MAAMuI,cAAc,GAAGhG,aAAa,KAAK,CAAC;IAC1C,MAAMI,oBAA6B,GAAGD,aAAa,KAAKH,aAAa,IAAI,CAACgG,cAAc;IACxF,MAAMC,WAAoB,GAAG/G,SAAS,IAAI,CAAC,CAACC,UAAU;IACtD,MAAM+G,WAAoB,GAAGzG,kBAAkB,IAAI,CAAC,CAACN,UAAU;IAC/D,MAAMgH,cAAc,GAAGvO,UAAU,CAAC,QAAQ,EAAE2N,SAAS,CAAC;;IAEtD;IACA;IACA,oBACI7N,KAAA,CAAA0O,aAAA,CAAC9N,gBAAgB;MAAC2K,QAAQ,EAAEA,QAAS;MAAC+B,QAAQ,EAAEA;IAAS,gBACrDtN,KAAA,CAAA0O,aAAA;MAAKpK,EAAE,EAAE,IAAI,CAACA,EAAG;MAACuJ,SAAS,EAAEY,cAAe;MAACE,GAAG,EAAEb,UAAW;MAAC,eAAY;IAAgB,gBACtF9N,KAAA,CAAA0O,aAAA,CAAC3N,aAAa;MAACoN,KAAK,EAAEA;IAAM,CAAE,CAAC,eAC/BnO,KAAA,CAAA0O,aAAA;MAAKb,SAAS,EAAC,gBAAgB;MAACe,SAAS,EAAE,IAAI,CAACA,SAAU;MAACC,QAAQ,EAAE;IAAE,gBACnE7O,KAAA,CAAA0O,aAAA,CAAClO,MAAM;MACH+D,IAAI,EAAEA,IAAK;MACXmJ,mBAAmB,EAAEA,mBAAoB;MACzClJ,WAAW,EAAEA,WAAY;MACzB+I,OAAO,EAAEA,OAAQ;MACjBuB,QAAQ,EAAE,IAAI,CAACnK;IAAO,CACzB,CAAC,eACF3E,KAAA,CAAA0O,aAAA,CAACjO,SAAS;MACN8D,IAAI,EAAEA,IAAK;MACXwK,MAAM,EAAE3J,YAAa;MACrBwI,OAAO,EAAEA,OAAQ;MACjB7B,QAAQ,EAAEA,QAAS;MACnB1H,iBAAiB,EAAEA,iBAAkB;MACrCmD,SAAS,EAAE+G,WAAY;MACvBxG,kBAAkB,EAAEyG,WAAY;MAChCQ,QAAQ,EAAE,IAAI,CAAChE,MAAO;MACtBiE,QAAQ,EAAE,IAAI,CAAChE,YAAa;MAC5BiE,WAAW,EAAE,IAAI,CAACzK,WAAY;MAC9B0K,YAAY,EAAE,IAAI,CAACC;IAAK,CAC3B,CAAC,eACFpP,KAAA,CAAA0O,aAAA,CAACrN,OAAO;MACJkD,IAAI,EAAEA,IAAK;MACXqJ,OAAO,EAAEA,OAAQ;MACjBmB,MAAM,EAAE3J,YAAa;MACrBc,WAAW,EAAE,IAAI,CAACA,WAAY;MAC9BkD,UAAU,EAAEA,UAAW;MACvBf,cAAc,EAAEnD,IAAK;MACrBkD,iBAAiB,EAAEA,iBAAkB;MACrCiH,mBAAmB,EAAE5B,UAAW;MAChC/E,oBAAoB,EAAEA,oBAAqB;MAC3CrE,iBAAiB,EAAEA,iBAAkB;MACrCiK,cAAc,EAAEA,cAAe;MAC/BgB,QAAQ,EAAE,IAAI,CAACA,QAAS;MACxBC,YAAY,EAAE,IAAI,CAACpF,MAAO;MAC1B+E,WAAW,EAAE,IAAI,CAACA,WAAY;MAC9BM,aAAa,EAAE,IAAI,CAACA,aAAc;MAClCC,mBAAmB,EAAE,IAAI,CAACC,iBAAkB;MAC5CtB,WAAW,EAAEA;IAAY,CAC5B,CAAC,eACFpO,KAAA,CAAA0O,aAAA,CAACpN,MAAM;MACH+C,iBAAiB,EAAEA,iBAAkB;MACrCoE,aAAa,EAAEA,aAAc;MAC7BkH,aAAa,EAAE,IAAI,CAAC3L,gBAAgB,CAAC,CAAE;MACvCkK,kBAAkB,EAAEA,kBAAmB;MACvCxF,oBAAoB,EAAEA,oBAAqB;MAC3C4F,cAAc,EAAEA,cAAe;MAC/BsB,eAAe,EAAE,IAAI,CAAChL,YAAa;MACnCd,QAAQ,EAAE,IAAI,CAACiH,MAAO;MACtB7G,QAAQ,EAAE,IAAI,CAACoD,MAAO;MACtByG,iBAAiB,EAAEA,iBAAkB;MACrCC,iBAAiB,EAAEA,iBAAkB;MACrCC,yBAAyB,EAAEA;IAA0B,GAEpDN,mBAAmB,gBAChB3N,KAAA,CAAA0O,aAAA,CAAC1N,UAAU;MACPgF,MAAM,EAAEA,MAAO;MACf6J,cAAc,EAAE,IAAI,CAACC,QAAS;MAC9BC,QAAQ,EAAExK,eAAgB;MAC1B8I,UAAU,EAAEA;IAAW,CAC1B,CAAC,GACF,IACA,CACP,CAAC,EACLE,WAAW,IAAI,CAAC,CAAC,IAAI,CAAC/B,UAAU,gBAC7BxM,KAAA,CAAA0O,aAAA,CAAChO,YAAY;MACTsP,MAAM,EAAErI,iBAAkB;MAC1B0E,eAAe,EAAE/H,EAAG;MACpBsH,KAAK,EAAEA,KAAM;MACbF,UAAU,EAAEA,UAAW;MACvBC,kBAAkB,EAAEA,kBAAmB;MACvCR,OAAO,EAAEA,OAAQ;MACjBU,UAAU,EAAEA,UAAW;MACvBoE,OAAO,EAAE,IAAI,CAACC,oBAAqB;MACnCC,aAAa,EAAE,IAAI,CAACjK,WAAY;MAChCsG,UAAU,EAAE,IAAI,CAACA,UAAW;MAC5BgB,oBAAoB,EAAEA,oBAAqB;MAC3ChC,kBAAkB,EAAEA,kBAAmB;MACvCC,mBAAmB,EAAEA;IAAoB,CAC5C,CAAC,GACF,IAAI,EACP+C,WAAW,IAAI,CAAC,CAAC,IAAI,CAAChC,UAAU,gBAC7BxM,KAAA,CAAA0O,aAAA,CAAC/N,kBAAkB;MACfqP,MAAM,EAAElI,uBAAwB;MAChCmH,QAAQ,EAAE,IAAI,CAACrH,oBAAqB;MACpC1D,QAAQ,EAAE,IAAI,CAAC+I,WAAY;MAC3BhF,SAAS,EAAEA,SAAU;MACrBD,SAAS,EAAEA,SAAU;MACrBmI,aAAa,EAAE,IAAI,CAACjK,WAAY;MAChCsG,UAAU,EAAE,IAAI,CAACA;IAAW,CAC/B,CAAC,GACF,IACH,CACS,CAAC;IAEvB;IACA;EACJ;AACJ;AA7pC+B;AAAAnJ,eAAA,CAjBzBH,aAAa,kBAmBO;EAClBgC,IAAI,EAAEjC,WAAW;EACjBmC,YAAY,EAAEvD,YAAY;EAC1BiC,QAAQ,EAAEvD,IAAI;EACd2D,QAAQ,EAAE3D,IAAI;EACd8K,WAAW,EAAE1J,mBAAmB;EAChC2J,eAAe,EAAE1J,iBAAiB;EAClC6D,MAAM,EAAEtD,UAAU;EAClBuD,aAAa,EAAEpD,QAAQ;EACvBmL,UAAU,EAAE,EAAE;EACdnF,aAAa,EAAE8H,QAAQ;EACvB5I,SAAS,EAAE,IAAI;EACfY,iBAAiB,EAAE,IAAI;EACvBL,kBAAkB,EAAE,IAAI;EACxB8E,SAAS,EAAE,KAAK;EAChBgB,SAAS,EAAE,EAAE;EACb1C,OAAO,EAAE1J,oBAAoB;EAC7BoK,UAAU,EAAEnK,uBAAuB;EACnC0J,UAAU,EAAE7J,0BAA0B;EACtC6K,WAAW,EAAErK,kBAAkB;EAC/ByL,oBAAoB,EAAE,CAAC,CAAC;EACxBU,kBAAkB,EAAE,IAAI;EACxBnB,8BAA8B,EAAE,KAAK;EACrCW,mBAAmB,EAAE,IAAI;EACzBC,mBAAmB,EAAE;AACzB,CAAC;AAooCL,SAASzK,aAAa,IAAImN,sBAAsB;AAChD,eAAejQ,IAAI,CAAC,CAACS,cAAc,EAAEC,0BAA0B,CAAC,CAAC,CAACoC,aAAa,CAAC","ignoreList":[]}
|
|
@@ -54,7 +54,7 @@ import PreviewHeader from './preview-header';
|
|
|
54
54
|
import PreviewMask from './PreviewMask';
|
|
55
55
|
import PreviewNavigation from './PreviewNavigation';
|
|
56
56
|
import Providers from '../common/Providers';
|
|
57
|
-
import { DEFAULT_HOSTNAME_API, DEFAULT_HOSTNAME_APP, DEFAULT_HOSTNAME_STATIC, DEFAULT_PREVIEW_VERSION, DEFAULT_LOCALE, DEFAULT_PATH_STATIC_PREVIEW, CLIENT_NAME_CONTENT_PREVIEW, ORIGIN_PREVIEW, ORIGIN_CONTENT_PREVIEW, ERROR_CODE_UNKNOWN } from '../../constants';
|
|
57
|
+
import { DEFAULT_HOSTNAME_API, DEFAULT_HOSTNAME_APP, DEFAULT_HOSTNAME_STATIC, DEFAULT_PREVIEW_VERSION, DEFAULT_LOCALE, DEFAULT_PATH_STATIC_PREVIEW, CLIENT_NAME_CONTENT_PREVIEW, CLIENT_VERSION, ORIGIN_PREVIEW, ORIGIN_CONTENT_PREVIEW, ERROR_CODE_UNKNOWN } from '../../constants';
|
|
58
58
|
|
|
59
59
|
// $FlowFixMe TypeScript file
|
|
60
60
|
|
|
@@ -613,7 +613,8 @@ class ContentPreview extends React.PureComponent {
|
|
|
613
613
|
responseInterceptor,
|
|
614
614
|
sharedLink,
|
|
615
615
|
sharedLinkPassword,
|
|
616
|
-
token: _token
|
|
616
|
+
token: _token,
|
|
617
|
+
version: CLIENT_VERSION
|
|
617
618
|
});
|
|
618
619
|
this.state = _objectSpread(_objectSpread({}, this.initialState), {}, {
|
|
619
620
|
currentFileId: _fileId,
|
|
@@ -53,6 +53,7 @@ import {
|
|
|
53
53
|
DEFAULT_LOCALE,
|
|
54
54
|
DEFAULT_PATH_STATIC_PREVIEW,
|
|
55
55
|
CLIENT_NAME_CONTENT_PREVIEW,
|
|
56
|
+
CLIENT_VERSION,
|
|
56
57
|
ORIGIN_PREVIEW,
|
|
57
58
|
ORIGIN_CONTENT_PREVIEW,
|
|
58
59
|
ERROR_CODE_UNKNOWN,
|
|
@@ -298,6 +299,7 @@ class ContentPreview extends React.PureComponent<Props, State> {
|
|
|
298
299
|
sharedLink,
|
|
299
300
|
sharedLinkPassword,
|
|
300
301
|
token,
|
|
302
|
+
version: CLIENT_VERSION,
|
|
301
303
|
});
|
|
302
304
|
this.state = {
|
|
303
305
|
...this.initialState,
|