{"version":3,"file":"c_features_download_index.js","sources":["../../../../metaserver/static/js/sharing/features/download/components/post_download_modal.tsx"],"sourcesContent":["import {intl} from 'metaserver/static/js/core/i18n';\nimport {\n AuthDialogPreviousElementTag,\n Mode,\n} from 'metaserver/static/js/auth/login_or_register/types';\nimport {Modal} from '@dropbox/dig-components/modal';\nimport {RemoteWorkHero} from '@dropbox/dig-illustrations/hero/remote-work';\nimport {Text, Title} from '@dropbox/dig-components/typography';\nimport {Button} from '@dropbox/dig-components/buttons';\nimport {Modal as ReactModal} from 'metaserver/static/js/components/ui/modal';\nimport {ShareTibEventLogger} from 'metaserver/static/js/clean/analytics';\nimport {\n SHARE_ACTION_ORIGIN_TYPE,\n SharedLinkType,\n} from 'typescript/component_libraries/spectrum-sharing/src/utils/sharing_constants';\nimport type {ShareToken} from 'metaserver/static/js/sharing/models/token';\nimport type {EncryptionOptions} from 'metaserver/static/js/security/passwords';\nimport React, {useEffect} from 'react';\nimport * as Logger from 'metaserver/static/js/sharing/features/download/logger';\nimport type {LogUserAction} from 'js/file_viewer/core/types/logging';\n\n/*\n This component and everything related to it seems to be a duplicate of `post-download-pre-susi-modal.tsx`,\n but this is used for File Preview while the other is used for Folder Preview.\n*/\n\nconst PostDownloadSignInModal = ({\n encryptionOptions,\n logUserAction,\n isFolder,\n shareToken,\n linkUrl,\n handleClick,\n implicitTOSVariant,\n webSignInTag,\n}: {\n encryptionOptions?: EncryptionOptions;\n logUserAction?: LogUserAction;\n isFolder?: boolean;\n shareToken?: ShareToken;\n linkUrl?: string;\n handleClick(\n mode: Mode,\n shareToken?: ShareToken,\n linkUrl?: string,\n encryptionOptions?: EncryptionOptions,\n implicitTOSVariant?: string,\n webSignInTag?: string,\n authDialogPreviousElement?: AuthDialogPreviousElementTag\n ): void;\n implicitTOSVariant?: string;\n webSignInTag?: string;\n}) =\u003e {\n const [modalOpen, setModalOpen] = React.useState(true);\n const emitter = Logger.useEmitter();\n\n useEffect(() =\u003e {\n emitter.select(Logger.ON_MOUNT_POST_DOWNLOAD_MODAL).emit(null);\n }, [emitter]);\n\n const closeModal = () =\u003e {\n setModalOpen(false);\n logUserAction?.('post_download_signin_modal_close', 'post_download_signin_modal');\n };\n\n const cancelButtonText = intl.formatMessage({\n defaultMessage: 'Close',\n description: 'Button to close the modal',\n });\n\n return (\n \u003cModal open={modalOpen} isCentered onRequestClose={closeModal}\u003e\n \u003cModal.Header hasBottomSpacing=\"title-standard\" className=\"naming-conventions__header\"\u003e\n \u003cRemoteWorkHero aspectRatio=\"16:9\" /\u003e\n \u003c/Modal.Header\u003e\n \u003cModal.Body\u003e\n {isFolder ? (\n \u003cTitle\u003e\n {intl.formatMessage({\n defaultMessage: 'Your folder is downloading',\n description: 'Modal title: folder downloading modal title',\n })}\n \u003c/Title\u003e\n ) : (\n \u003cTitle\u003e\n {intl.formatMessage({\n defaultMessage: 'Your file is downloading',\n description: 'Modal title: file downloading modal title',\n })}\n \u003c/Title\u003e\n )}\n \u003cdiv style={{marginTop: 'var(--dig-spacing__micro__large)'}}\u003e\n \u003cText\u003e\n {intl.formatMessage({\n defaultMessage:\n 'In the meantime, sign up for Dropbox to have secure access to all your files. ',\n description: 'Modal body indicating why you should sign up to dropbox',\n })}\n \u003c/Text\u003e\n \u003c/div\u003e\n\n \u003cText tagName=\"span\"\u003e\n {intl.formatMessage({\n defaultMessage: 'Collaborate with friends, family, and coworkers from any device.',\n description:\n 'Modal text message indicating the collaboration opportunities from all devices',\n })}\n \u003c/Text\u003e\n \u003c/Modal.Body\u003e\n \u003cModal.Footer\u003e\n \u003cButton variant=\"transparent\" onClick={closeModal}\u003e\n {cancelButtonText}\n \u003c/Button\u003e\n \u003cButton\n variant=\"opacity\"\n onClick={() =\u003e {\n handleClick(\n Mode.LOGIN,\n shareToken,\n linkUrl,\n encryptionOptions,\n implicitTOSVariant,\n webSignInTag,\n AuthDialogPreviousElementTag.POST_DOWNLOAD_MODAL_LOG_IN\n );\n }}\n \u003e\n {intl.formatMessage({\n defaultMessage: 'Log in',\n description: 'Button text informing user to log in to existing account',\n })}\n \u003c/Button\u003e\n \u003cButton\n variant=\"primary\"\n onClick={() =\u003e {\n handleClick(\n Mode.REGISTER,\n shareToken,\n linkUrl,\n encryptionOptions,\n implicitTOSVariant,\n webSignInTag,\n AuthDialogPreviousElementTag.POST_DOWNLOAD_MODAL_SIGN_UP\n );\n }}\n \u003e\n {intl.formatMessage({\n defaultMessage: 'Sign up',\n description: 'Button text informing user to sign up for a new account',\n })}\n \u003c/Button\u003e\n \u003c/Modal.Footer\u003e\n \u003c/Modal\u003e\n );\n};\n\n/*\n Function to control if the post-download modal should show or not based on local storage\n settings. Based on the scope this should only show up once every 24 hours.\n*/\nexport const showPostDownloadSignInModal = (props: {\n encryptionOptions?: EncryptionOptions;\n logUserAction?: LogUserAction;\n isFolder?: boolean;\n shareToken?: ShareToken;\n linkUrl?: string;\n handleClick(\n mode: Mode,\n shareToken?: ShareToken,\n linkUrl?: string,\n encryptionOptions?: EncryptionOptions,\n implicitTOSVariant?: string,\n webSignInTag?: string,\n authDialogPreviousElement?: AuthDialogPreviousElementTag\n ): void;\n implicitTOSVariant?: string;\n webSignInTag?: string;\n}) =\u003e {\n const localStorageKey = 'dbx_previews_log_out_download_modal';\n\n if (keyHasExpired(localStorageKey)) {\n ReactModal.showInstance(\u003cPostDownloadSignInModal {...props} /\u003e);\n\n if (props.isFolder) {\n logViewPostDownloadModal(props.shareToken, props.linkUrl);\n } else {\n props.logUserAction?.('show_post_download_signin_modal', 'download');\n }\n\n // persist key to local storage, the key being now + 24 hours\n const now = new Date();\n const expiry = now.getTime() + 1000 * 60 * 60 * 24; // full day\n window.localStorage.setItem(localStorageKey, JSON.stringify(expiry));\n }\n};\n\n// check expiry key in local storage and return if the key is still valid\nfunction keyHasExpired(key: string) {\n const localStorageValue = window.localStorage.getItem(key);\n if (!localStorageValue) {\n return true;\n }\n const expiry = JSON.parse(localStorageValue);\n const now = new Date();\n\n if (now.getTime() \u003e expiry) {\n // if it has expired delete the item from storage\n window.localStorage.removeItem(key);\n return true;\n }\n return false;\n}\n\nconst logViewPostDownloadModal = (shareToken?: ShareToken, linkUrl?: string) =\u003e {\n const shareLoggingExtra =\n shareToken \u0026\u0026 shareToken.linkType === SharedLinkType.Content\n ? ShareTibEventLogger.get_scl_extra_for_logging(shareToken, linkUrl)\n : ShareTibEventLogger.get_shmodel_extra_for_logging(shareToken, linkUrl);\n return ShareTibEventLogger.log_unauth(\n 'VIEW_POST_DOWNLOAD_SIGNIN_SIGNUP_MODAL',\n SHARE_ACTION_ORIGIN_TYPE.PREVIEW_PAGE,\n shareLoggingExtra\n );\n};\n"],"names":["PostDownloadSignInModal","encryptionOptions","logUserAction","isFolder","shareToken","linkUrl","handleClick","implicitTOSVariant","webSignInTag","modalOpen","setModalOpen","React","useState","emitter","Logger.useEmitter","useEffect","select","Logger.ON_MOUNT_POST_DOWNLOAD_MODAL","emit","closeModal","cancelButtonText","intl","formatMessage","default","createElement","Modal","open","isCentered","onRequestClose","Header","hasBottomSpacing","className","RemoteWorkHero","aspectRatio","Body","Title","id","defaultMessage","style","marginTop","Text","tagName","Footer","Button","variant","onClick","Mode","LOGIN","AuthDialogPreviousElementTag","POST_DOWNLOAD_MODAL_LOG_IN","REGISTER","POST_DOWNLOAD_MODAL_SIGN_UP","logViewPostDownloadModal","shareLoggingExtra","linkType","SharedLinkType","Content","ShareTibEventLogger","get_scl_extra_for_logging","get_shmodel_extra_for_logging","log_unauth","SHARE_ACTION_ORIGIN_TYPE","PREVIEW_PAGE","props","localStorageKey","key","localStorageValue","window","localStorage","getItem","expiry","JSON","parse","Date","getTime","removeItem","keyHasExpired","ReactModal","showInstance","_a","call","setItem","stringify"],"mappings":"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","debugId":"808d7110-4c6a-3082-a4e7-7024bc5f744b","debug_id":"808d7110-4c6a-3082-a4e7-7024bc5f744b"}