{"version":3,"file":"c_shared-folder-preview-page_actions_on-join-primary-folder.after-display.js","sources":["../../../../metaserver/static/js/shared_link/ui/email_verification_modals.tsx","../../../../metaserver/static/js/sharing/features/shared-folder-preview-page/actions/on-join-primary-folder.after-display.tsx"],"sourcesContent":["import EmailVerify from 'metaserver/static/js/account/email_verify';\nimport type {EmailVerificationReasons} from 'metaserver/static/js/account/email_verify_reasons';\nimport type {EmailVerificationOptions} from 'metaserver/static/js/account/email';\nimport {EmailVerification} from 'metaserver/static/js/account/email';\nimport type {User} from 'js/viewer/types';\nimport {logTiburonEvent} from 'metaserver/static/js/shared_link/logging_utils';\nimport {TiburonEventName} from 'typescript/component_libraries/spectrum-sharing/src/utils/logging';\nimport {SHARE_ACTION_ORIGIN_TYPE} from 'typescript/component_libraries/spectrum-sharing/src/utils/sharing_constants';\nimport type {ShareToken} from 'metaserver/static/js/sharing/models/token';\nimport type {Entry} from 'metaserver/static/js/shared_link/types';\nimport {fetchViewer} from 'js/viewer/fetch';\n\nexport type EmailVerificationStatus = 'isAlreadyVerified' | 'isVerified' | 'isUnverified';\n\nexport const showEmailVerificationModalsIfNeeded = async (\n user: User,\n reason: EmailVerificationReasons,\n onVerify: () =\u003e void,\n onCancel: () =\u003e void,\n entry: Entry,\n shareToken: ShareToken,\n origin: SHARE_ACTION_ORIGIN_TYPE,\n linkUrl: string,\n extra: Object,\n continuedOnReload: boolean,\n options?: EmailVerificationOptions\n) =\u003e {\n // already verified, no need to show a modal\n if (user \u0026\u0026 user.is_email_verified) {\n return;\n }\n\n const emailVerification = EmailVerification.get_for_user(await fetchViewer(), user);\n\n // show resend version of the modal since Dropbox already sent an initial verification email on account creation\n emailVerification.show_resend = true;\n emailVerification.show(onVerify, reason, onCancel, options);\n\n logTiburonEvent(\n user,\n entry,\n TiburonEventName.ViewVerifyEmailModal, // event used for all versions of verify email modal\n shareToken,\n origin ?? SHARE_ACTION_ORIGIN_TYPE.PREVIEW_PAGE,\n linkUrl,\n extra,\n continuedOnReload ?? false\n );\n\n return EmailVerify.listen_for_verification(user.id, emailVerification.email_to_verify, () =\u003e {\n return onVerify();\n });\n};\n\nexport const getEmailVerificationStatus = async (\n user: User,\n reason: EmailVerificationReasons,\n entry: Entry,\n shareToken: ShareToken,\n origin: SHARE_ACTION_ORIGIN_TYPE,\n linkUrl: string,\n extra: Object,\n continuedFromReload: boolean\n) =\u003e {\n return await new Promise\u003cEmailVerificationStatus\u003e((resolve) =\u003e {\n showEmailVerificationModalsIfNeeded(\n user,\n reason,\n () =\u003e resolve('isVerified'), // on_verify\n () =\u003e resolve('isUnverified'), // on_cancel\n entry,\n shareToken,\n origin,\n linkUrl,\n extra,\n continuedFromReload\n );\n });\n};\n","import type * as Store from 'metaserver/static/js/sharing/features/shared-folder-preview-page/store';\nimport {intl} from 'metaserver/static/js/core/i18n';\n\nimport {SHARE_ACTION_ORIGIN_TYPE} from 'typescript/component_libraries/spectrum-sharing/src/utils/sharing_constants';\n\nimport {\n joinFolder,\n JoinFolderError,\n JoinFormatting as Formatting,\n} from 'metaserver/static/js/sharing/features/join/index';\n\nimport {reportException} from 'metaserver/static/js/core/exception';\nimport {SHARED_FOLDER_LIMIT_HELP_ARTICLE_LINK} from 'metaserver/static/js/sharing/ui_util';\nimport * as Browser from 'js/browser/location';\nimport {EmailVerificationReasons} from 'metaserver/static/js/account/email_verify_reasons';\nimport {getEmailVerificationStatus} from 'metaserver/static/js/shared_link/ui/email_verification_modals';\nimport {EmailVerification} from 'metaserver/static/js/account/email';\nimport {UserIntent} from 'metaserver/static/js/sharing/common/types';\nimport type {OpenLoginOrRegisterModalProps} from 'metaserver/static/js/sharing/features/shared-folder-preview-page/components/login-modal/types';\nimport {\n AuthDialogPreviousElementTag,\n LoginOrRegisterKind,\n} from 'metaserver/static/js/auth/login_or_register/types';\nimport type {RegistrationSource} from 'metaserver/static/js/admin/registration_source_constants';\nimport {logTiburonEvent} from 'metaserver/static/js/shared_link/logging_utils';\nimport {TiburonEventName} from 'typescript/component_libraries/spectrum-sharing/src/utils/index';\nimport {fetchViewer} from 'js/viewer/fetch';\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nconst SIGNUP_TAG__SHARED_FOLDER_MOUNT_REGISTER: `${RegistrationSource.SHARED_FOLDER_MOUNT_REGISTER}` =\n 'shared_folder_mount_register';\n\nexport type OnJoinPrimaryFolderInput = {\n continuedFromReload: boolean;\n onReloadAndContinue: () =\u003e void;\n openLoginOrRegisterModal: (props: OpenLoginOrRegisterModalProps) =\u003e void;\n};\n\n/**\n * This method should only be used by shared folder preview.\n * Other surfaces should write their own implementation as we may want to show different error messages or modals.\n */\nexport const onJoinPrimaryFolder = async (\n store: Store.Store,\n {continuedFromReload, onReloadAndContinue, openLoginOrRegisterModal}: OnJoinPrimaryFolderInput\n) =\u003e {\n const origin = SHARE_ACTION_ORIGIN_TYPE.PREVIEW_PAGE;\n const folder = store.$folder.get();\n const shareToken = store.$folderShareToken.get();\n const sharePermission = store.$folderSharePermission.get();\n const sharedLinkInfo = store.$folderSharedLinkInfo.get();\n const user = store.$user.get();\n const encryptionOptions = store.$encryptionOptions.get();\n const outOfQuota = store.$outOfQuota.get() ?? false;\n const onShowRequestAccessModal = store.$onShowRequestAccessModal.get();\n const onShowOverQuotaModal = store.$onShowOverQuotaModal.get();\n const setUserIntent = store.$setUserIntent.get();\n const canRequestAccess = store.$canRequestAccessToContent.get() ?? false;\n\n logTiburonEvent(\n user,\n folder,\n TiburonEventName.AddToDropbox,\n shareToken,\n origin,\n sharedLinkInfo.url,\n {\n is_edit_folder_link: sharePermission.isEditFolderLink,\n },\n continuedFromReload\n );\n store.$isJoining.set(true);\n\n let result: {status: 'error'; error: JoinFolderError} | {status: 'success'; redirectPath: string};\n try {\n result = await joinFolder({\n outOfQuota: outOfQuota,\n canRequestAccess: canRequestAccess,\n redirectQueryParams: undefined,\n user: user,\n origin: origin,\n folder: folder,\n shareToken: shareToken,\n linkUrl: sharedLinkInfo.url,\n folderLinkPreviewType: sharePermission.folderLinkPreviewType,\n isSharedFolder: sharePermission.isSharedFolder ?? false,\n });\n\n if (result.status === 'success') {\n Browser.redirect(result.redirectPath);\n } else {\n store.$isJoining.set(false);\n switch (result.error) {\n case JoinFolderError.Unauthenticated:\n if (!encryptionOptions) {\n // EncryptionOptions are required to show Login form. If they are missing, skip any modals that prompt SI/SU\n // and log to exclog to provide count\n reportException({\n err: new Error(\n 'No encryption options provided to shared folder preview join folder button'\n ),\n severity: 'non-critical',\n tags: ['sharing-encryption-options'],\n });\n } else {\n openLoginOrRegisterModal({\n signupTag: SIGNUP_TAG__SHARED_FOLDER_MOUNT_REGISTER,\n folderShareToken: store.$folderShareToken.get(),\n linkUrl: store.$folderSharedLinkInfo.get().url,\n origin: origin,\n encryptionOptions: store.$encryptionOptions.get(),\n loginContinuationUrl: store.$folderSharedLinkInfo.get().url,\n kind: LoginOrRegisterKind.MOUNT,\n onAuthenticateSuccess: onReloadAndContinue,\n onSignUpSuccess: () =\u003e {},\n implicitTOSVariant: store.$implicitTOSVariant.get(),\n webSignInTag: store.$webSignInTag.get(),\n folder: store.$folder.get(),\n authDialogPreviousElement: AuthDialogPreviousElementTag.JOIN,\n sharedLinkInfo: sharedLinkInfo,\n });\n }\n break;\n case JoinFolderError.UnverifiedAccount:\n const verificationStatus = await getEmailVerificationStatus(\n user!,\n EmailVerificationReasons.MOUNT_FOLDER,\n folder,\n shareToken,\n origin,\n sharedLinkInfo.url,\n {},\n continuedFromReload\n );\n\n // If verificationStatus is isAlreadyVerified, no-op to continue the join action\n if (verificationStatus === 'isUnverified') {\n // Return so that the join action does not continue since user dismissed the verification modal\n return;\n } else if (verificationStatus === 'isVerified') {\n // Continue the join action\n // If there is no other modal when the join continues, show the verification success modal\n const viewer = await fetchViewer();\n if (canRequestAccess) {\n EmailVerification.get_for_user(viewer, user).close();\n } else {\n EmailVerification.get_for_user(viewer, user).show_verified_modal();\n }\n }\n break;\n case JoinFolderError.RequestAccessRequired:\n logTiburonEvent(\n user,\n folder,\n TiburonEventName.ViewRequestAccessModal,\n shareToken,\n origin,\n sharedLinkInfo.url,\n {},\n continuedFromReload\n );\n onShowRequestAccessModal();\n break;\n case JoinFolderError.OutOfQuota:\n logTiburonEvent(\n user,\n folder,\n TiburonEventName.ViewJoinAddStorageModal,\n shareToken,\n origin,\n sharedLinkInfo.url,\n {},\n continuedFromReload\n );\n setUserIntent(UserIntent.Join);\n onShowOverQuotaModal();\n break;\n case JoinFolderError.InsufficientQuotaToMount:\n logTiburonEvent(\n user,\n folder,\n TiburonEventName.ViewJoinAddStorageModal,\n shareToken,\n origin,\n sharedLinkInfo.url,\n {},\n continuedFromReload\n );\n setUserIntent(UserIntent.Join);\n onShowOverQuotaModal();\n break;\n case JoinFolderError.TotalMountsExceeded:\n store.$actionNotificationTitle.set(Formatting.treeSizeExceededText(intl));\n store.$helpCenterLink.set(SHARED_FOLDER_LIMIT_HELP_ARTICLE_LINK);\n break;\n case JoinFolderError.TreeSizeExceeded:\n store.$actionNotificationTitle.set(Formatting.genericErrorText(intl));\n store.$helpCenterLink.set(SHARED_FOLDER_LIMIT_HELP_ARTICLE_LINK);\n break;\n case JoinFolderError.HomeMountsExceeded:\n store.$actionNotificationTitle.set(Formatting.homeMountsExceededText(intl));\n store.$helpCenterLink.set(SHARED_FOLDER_LIMIT_HELP_ARTICLE_LINK);\n break;\n default:\n store.$actionNotificationTitle.set(Formatting.genericErrorText(intl));\n }\n }\n } catch (e) {\n store.$isJoining.set(false);\n store.$actionNotificationTitle.set(Formatting.genericErrorText(intl));\n }\n};\n"],"names":["getEmailVerificationStatus","async","user","reason","entry","shareToken","origin","linkUrl","extra","continuedFromReload","Promise","resolve","onVerify","onCancel","continuedOnReload","options","is_email_verified","emailVerification","EmailVerification","get_for_user","fetchViewer","show_resend","show","logTiburonEvent","TiburonEventName","ViewVerifyEmailModal","SHARE_ACTION_ORIGIN_TYPE","PREVIEW_PAGE","EmailVerify","listen_for_verification","id","email_to_verify","showEmailVerificationModalsIfNeeded","store","onReloadAndContinue","openLoginOrRegisterModal","folder","$folder","get","$folderShareToken","sharePermission","$folderSharePermission","sharedLinkInfo","$folderSharedLinkInfo","$user","encryptionOptions","$encryptionOptions","outOfQuota","_a","$outOfQuota","onShowRequestAccessModal","$onShowRequestAccessModal","onShowOverQuotaModal","$onShowOverQuotaModal","setUserIntent","$setUserIntent","canRequestAccess","_b","$canRequestAccessToContent","result","AddToDropbox","url","is_edit_folder_link","isEditFolderLink","$isJoining","set","joinFolder","redirectQueryParams","undefined","folderLinkPreviewType","isSharedFolder","_c","status","Browser.redirect","redirectPath","error","JoinFolderError","Unauthenticated","signupTag","folderShareToken","loginContinuationUrl","kind","LoginOrRegisterKind","MOUNT","onAuthenticateSuccess","onSignUpSuccess","implicitTOSVariant","$implicitTOSVariant","webSignInTag","$webSignInTag","authDialogPreviousElement","AuthDialogPreviousElementTag","JOIN","reportException","err","Error","severity","tags","UnverifiedAccount","verificationStatus","EmailVerificationReasons","MOUNT_FOLDER","viewer","close","show_verified_modal","RequestAccessRequired","ViewRequestAccessModal","OutOfQuota","InsufficientQuotaToMount","ViewJoinAddStorageModal","UserIntent","Join","TotalMountsExceeded","$actionNotificationTitle","Formatting.treeSizeExceededText","intl","$helpCenterLink","SHARED_FOLDER_LIMIT_HELP_ARTICLE_LINK","TreeSizeExceeded","Formatting.genericErrorText","HomeMountsExceeded","Formatting.homeMountsExceededText","e"],"mappings":"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","debugId":"51061965-a76b-33d5-9ef8-2732efa41c00","debug_id":"51061965-a76b-33d5-9ef8-2732efa41c00"}