@box/unified-share-modal 3.4.60 → 3.5.0

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.
@@ -1 +1 @@
1
- import{useUnifiedShareModalContext}from"../esm/lib/contexts/unified-share-modal-context.js";import{parseEmails}from"../esm/lib/utils/email.js";import{getNotificationArgs}from"../esm/lib/utils/notification.js";import{useUnifiedShareFormContext}from"../esm/lib/contexts/unified-share-form-context.js";import{useFormValidation}from"../esm/lib/hooks/use-form-validation.js";import{useCollaborationForm}from"../esm/lib/hooks/use-collaboration-form.js";import messages from"../esm/lib/components/unified-share-form-modal/collaboration-section/messages.js";import{t as CollaborationRole}from"./collaboration-role.js";import{t as SharedWithAvatars}from"./shared-with-avatars.js";import{t as ShieldRestrictionNotice}from"./shield-restriction-notice.js";import{t as TextAreaContainer}from"./text-area-container.js";import{useCallback,useEffect,useRef,useState}from"react";import{useIntl}from"react-intl";import{Focusable,Modal,Text,Tooltip,useLabelable,useNotification,useUniqueId}from"@box/blueprint-web";import{Fragment,jsx,jsxs}from"react/jsx-runtime";import{createPortal}from"react-dom";import{Globe}from"@box/blueprint-web-assets/icons/Medium";import{bpSize040}from"@box/blueprint-web-assets/tokens/tokens";import{UserSelectorContainer}from"@box/user-selector";import '../styles/collaboration-section.css';var collaboration_section_module_default={container:`_container_w04ru_27`,label:`_label_w04ru_33`,security:`_security_w04ru_60`,disclosures:`_disclosures_w04ru_64`,icon:`_icon_w04ru_70`,access:`_access_w04ru_76`};function CollaborationSection(){let{formatMessage}=useIntl(),[restrictionError,setRestrictionError]=useState(),{addNotification}=useNotification(),{validateShieldRestriction}=useFormValidation(),{contactValue,containerRef,form,setForm,setUserContacts,shieldRestriction,userContacts}=useUnifiedShareFormContext(),{collaborationAccess,collaborationNotices,config,contactService,invitationFormNotices,isFetching,isSubmitting,item,onOpenChange,sharingService,suggestedCollaborators,variant}=useUnifiedShareModalContext(),{permissions={},type:itemType}=item,{getContacts,getContactsAvatarUrls}=contactService,{sendInvitations,sendSharedLink}=sharingService,isDesktop=variant===`desktop`,isInvitationForm=form==="default"||form===`invite`,isFormExpanded=form===`invite`||form===`email`,shouldShowSuggestedOptions=isInvitationForm&&contactValue.trim().length>0,hasInviteMessage=form===`invite`&&config.collaborationMessage,hasEmailMessage=form===`email`&&config.sharedLinkEmailMessage,hasExternalUser=userContacts.some(contact=>contact.isExternalUser),formAction,formNotification;form===`invite`&&(formAction=sendInvitations,formNotification=`invite-collaborators`),form===`email`&&(formAction=sendSharedLink,formNotification=`email-shared-link`);let{errors,handleFormReset,handleFormSubmit,handleSelectedUsersChange,handleUserSelectorBlur,updateContactValue}=useCollaborationForm(formAction,formNotification),contactsForm=useRef(form===`email`?`email`:`invite`);useEffect(()=>{contactsForm.current=form===`email`?`email`:`invite`},[form]),useEffect(()=>{(!userContacts.length||!userContacts.some(contact=>contact.chipVariant===`error`))&&setRestrictionError(null)},[userContacts]);let stopEscapeKeyPropagation=useCallback(event=>(event.stopPropagation(),!0),[]),handleFetchUsers=useCallback(query=>getContacts?getContacts(query,contactsForm.current):Promise.resolve([]),[getContacts]),handleFetchAvatarUrls=useCallback(contacts=>getContactsAvatarUrls?getContactsAvatarUrls(contacts):Promise.resolve({}),[getContactsAvatarUrls]),handleContactValueChange=input=>{isFormExpanded||setForm(`invite`),updateContactValue(input)},handlePaste=useCallback(event=>{let value=event.clipboardData.getData(`text`);parseEmails(value).length!==0&&(event.preventDefault(),isFormExpanded||setForm(`invite`),handleSelectedUsersChange([...userContacts,{value}]))},[handleSelectedUsersChange,isFormExpanded,setForm,userContacts]),handleCancel=()=>{handleFormReset(),setForm(`default`)},handleSubmit=async()=>{try{if(restrictionError){let errorMessage=validateShieldRestriction(userContacts,shieldRestriction);if(errorMessage){addNotification({...getNotificationArgs(formatMessage,`error`),styledText:errorMessage});return}}if(await handleFormSubmit())return;handleFormReset(),onOpenChange(!1),setForm(`default`)}catch(error){if(!error.shieldRestriction)return;let{shieldRestriction:shieldRestrictionError}=error,restrictedContacts=[...shieldRestrictionError.restrictedEmails??[],...shieldRestrictionError.restrictedGroups??[]],updatedUserContacts=userContacts.map(contact=>restrictedContacts.includes(contact.email)||restrictedContacts.includes(`${contact.id}`)?{...contact,chipVariant:`error`}:contact);setRestrictionError(shieldRestrictionError),setUserContacts(updatedUserContacts)}},userContactsTooltip,isUserContactsDisabled=!1;isInvitationForm&&!permissions.canInviteCollaborator&&(userContactsTooltip=formatMessage(messages.inviteDisabledTooltip),isUserContactsDisabled=!0),isInvitationForm&&itemType===`web_link`&&(userContactsTooltip=formatMessage(messages.inviteWebLinkDisabledTooltip),isUserContactsDisabled=!0);let userContactsId=useUniqueId(`usm-UserContacts-`),UserContactsLabel=useLabelable(formatMessage(isInvitationForm?messages.invitePeopleLabel:messages.emailSharedLinkLabel),userContactsId);return jsxs(`form`,{className:collaboration_section_module_default.container,onSubmit:event=>event.preventDefault(),children:[restrictionError&&jsx(ShieldRestrictionNotice,{error:restrictionError,isLoading:isSubmitting,onSelectedUsersChange:handleSelectedUsersChange}),collaborationNotices,jsxs(`div`,{children:[isInvitationForm&&config.collaborators&&jsx(SharedWithAvatars,{}),jsx(UserContactsLabel,{className:collaboration_section_module_default.label}),jsx(Tooltip,{content:userContactsTooltip,"data-testid":`usm-UserContacts-tooltip`,open:userContactsTooltip?void 0:!1,side:`bottom`,children:jsx(Focusable,{focusable:isUserContactsDisabled,children:jsx(UserSelectorContainer,{autoFocus:permissions.canInviteCollaborator,className:`usm-UserContacts-input`,clearButtonAriaLabel:formatMessage(messages.clearButton),clearOnBlur:!1,"data-target-id":`PillSelectorDropdown-AddNamesOrEmailAddresses`,disabled:isUserContactsDisabled||isSubmitting,displayChipVariant:contact=>contact.chipVariant,error:errors.userContacts,fetchAvatarUrls:handleFetchAvatarUrls,fetchUsers:handleFetchUsers,hideOnEscape:stopEscapeKeyPropagation,idForLabel:userContactsId,inputValue:contactValue,label:null,onBlur:handleUserSelectorBlur,onInputValueChange:handleContactValueChange,onPaste:handlePaste,onSelectedUsersChange:handleSelectedUsersChange,placeholder:userContacts.length?``:formatMessage(messages.invitePeoplePlaceholder),portalElement:containerRef,selectedUsers:userContacts,selectOnEnterOrTab:!0,suggestedOptions:shouldShowSuggestedOptions?suggestedCollaborators:void 0,variant:isFormExpanded?`textarea`:`input`})})}),isInvitationForm&&jsxs(`div`,{className:collaboration_section_module_default.access,children:[config.collaborationRole&&jsx(CollaborationRole,{}),collaborationAccess]})]}),(hasInviteMessage||hasEmailMessage)&&jsx(TextAreaContainer,{maxCount:config.collaborationMessageLimit}),isFormExpanded&&(hasExternalUser||invitationFormNotices)&&jsxs(`div`,{className:collaboration_section_module_default.disclosures,children:[hasExternalUser&&jsxs(`div`,{className:collaboration_section_module_default.security,children:[jsx(Globe,{className:collaboration_section_module_default.icon,height:bpSize040,width:bpSize040}),jsx(Text,{as:`span`,color:`textOnLightSecondary`,children:formatMessage(messages.contentSharedWithExternalCollaborators)})]}),invitationFormNotices]}),isFormExpanded&&containerRef&&createPortal(jsxs(Fragment,{children:[!isFetching&&jsxs(Modal.Footer,{children:[jsx(Modal.Footer.SecondaryButton,{disabled:isSubmitting,onClick:handleCancel,children:formatMessage(messages.cancelButton)}),jsx(Modal.Footer.PrimaryButton,{"data-target-id":`Modal.Footer.PrimaryButton-USMSendInvite`,loading:isSubmitting,loadingAriaLabel:formatMessage(messages.loadingLabel),onClick:handleSubmit,children:formatMessage(messages.sendButton)})]}),!isDesktop&&jsx(Modal.Close,{"aria-label":formatMessage(messages.closeButton),disabled:isSubmitting})]}),containerRef)]})}export{CollaborationSection as t};
1
+ import{useUnifiedShareModalContext}from"../esm/lib/contexts/unified-share-modal-context.js";import{parseEmails}from"../esm/lib/utils/email.js";import{getNotificationArgs}from"../esm/lib/utils/notification.js";import{useUnifiedShareFormContext}from"../esm/lib/contexts/unified-share-form-context.js";import{useFormValidation}from"../esm/lib/hooks/use-form-validation.js";import{useCollaborationForm}from"../esm/lib/hooks/use-collaboration-form.js";import messages from"../esm/lib/components/unified-share-form-modal/collaboration-section/messages.js";import{t as CollaborationRole}from"./collaboration-role.js";import{t as SharedWithAvatars}from"./shared-with-avatars.js";import{t as ShieldRestrictionNotice}from"./shield-restriction-notice.js";import{t as TextAreaContainer}from"./text-area-container.js";import{useCallback,useEffect,useRef,useState}from"react";import{useIntl}from"react-intl";import{Focusable,Modal,Text,Tooltip,useLabelable,useNotification,useUniqueId}from"@box/blueprint-web";import{Fragment,jsx,jsxs}from"react/jsx-runtime";import{createPortal}from"react-dom";import{Globe}from"@box/blueprint-web-assets/icons/Medium";import{bpSize040}from"@box/blueprint-web-assets/tokens/tokens";import{UserSelectorContainer}from"@box/user-selector";import '../styles/collaboration-section.css';var collaboration_section_module_default={container:`_container_w04ru_27`,label:`_label_w04ru_33`,security:`_security_w04ru_60`,disclosures:`_disclosures_w04ru_64`,icon:`_icon_w04ru_70`,access:`_access_w04ru_76`};function CollaborationSection(){let{formatMessage}=useIntl(),[restrictionError,setRestrictionError]=useState(),{addNotification}=useNotification(),{validateShieldRestriction}=useFormValidation(),{contactValue,containerRef,form,setForm,setUserContacts,shieldRestriction,userContacts}=useUnifiedShareFormContext(),{collaborationAccess,collaborationNotices,config,contactService,invitationFormNotices,isFetching,isSubmitting,item,onOpenChange,sharingService,suggestedCollaborators,variant}=useUnifiedShareModalContext(),{permissions={},type:itemType}=item,{getContacts,getContactsAvatarUrls}=contactService,{sendInvitations,sendSharedLink}=sharingService,isDesktop=variant===`desktop`,isInvitationForm=form==="default"||form===`invite`,isFormExpanded=form===`invite`||form===`email`,shouldShowSuggestedOptions=isInvitationForm&&contactValue.trim().length>0,hasInviteMessage=form===`invite`&&config.collaborationMessage,hasEmailMessage=form===`email`&&config.sharedLinkEmailMessage,hasExternalUser=userContacts.some(contact=>contact.isExternalUser),formAction,formNotification;form===`invite`&&(formAction=sendInvitations,formNotification=`invite-collaborators`),form===`email`&&(formAction=sendSharedLink,formNotification=`email-shared-link`);let{errors,onFormReset,onFormSubmit,onSelectedUsersChange,onUserSelectorBlur,updateContactValue}=useCollaborationForm(formAction,formNotification),contactsForm=useRef(form===`email`?`email`:`invite`);useEffect(()=>{contactsForm.current=form===`email`?`email`:`invite`},[form]),useEffect(()=>{(!userContacts.length||!userContacts.some(contact=>contact.chipVariant===`error`))&&setRestrictionError(null)},[userContacts]);let stopEscapeKeyPropagation=useCallback(event=>(event.stopPropagation(),!0),[]),handleFetchUsers=useCallback(query=>getContacts?getContacts(query,contactsForm.current):Promise.resolve([]),[getContacts]),handleFetchAvatarUrls=useCallback(contacts=>getContactsAvatarUrls?getContactsAvatarUrls(contacts):Promise.resolve({}),[getContactsAvatarUrls]),handleContactValueChange=input=>{isFormExpanded||setForm(`invite`),updateContactValue(input)},handlePaste=useCallback(event=>{let value=event.clipboardData.getData(`text`);parseEmails(value).length!==0&&(event.preventDefault(),isFormExpanded||setForm(`invite`),onSelectedUsersChange([...userContacts,{value}]))},[onSelectedUsersChange,isFormExpanded,setForm,userContacts]),handleCancel=()=>{onFormReset(),setForm(`default`)},handleSubmit=async()=>{try{if(restrictionError){let errorMessage=validateShieldRestriction(userContacts,shieldRestriction);if(errorMessage){addNotification({...getNotificationArgs(formatMessage,`error`),styledText:errorMessage});return}}if(await onFormSubmit())return;onFormReset(),onOpenChange(!1),setForm(`default`)}catch(error){if(!error.shieldRestriction)return;let{shieldRestriction:shieldRestrictionError}=error,restrictedContacts=[...shieldRestrictionError.restrictedEmails??[],...shieldRestrictionError.restrictedGroups??[]],updatedUserContacts=userContacts.map(contact=>restrictedContacts.includes(contact.email)||restrictedContacts.includes(`${contact.id}`)?{...contact,chipVariant:`error`}:contact);setRestrictionError(shieldRestrictionError),setUserContacts(updatedUserContacts)}},userContactsTooltip,isUserContactsDisabled=!1;isInvitationForm&&!permissions.canInviteCollaborator&&(userContactsTooltip=formatMessage(messages.inviteDisabledTooltip),isUserContactsDisabled=!0),isInvitationForm&&itemType===`web_link`&&(userContactsTooltip=formatMessage(messages.inviteWebLinkDisabledTooltip),isUserContactsDisabled=!0);let userContactsId=useUniqueId(`usm-UserContacts-`),UserContactsLabel=useLabelable(formatMessage(isInvitationForm?messages.invitePeopleLabel:messages.emailSharedLinkLabel),userContactsId);return jsxs(`form`,{className:collaboration_section_module_default.container,onSubmit:event=>event.preventDefault(),children:[restrictionError&&jsx(ShieldRestrictionNotice,{error:restrictionError,isLoading:isSubmitting,onSelectedUsersChange}),collaborationNotices,jsxs(`div`,{children:[isInvitationForm&&config.collaborators&&jsx(SharedWithAvatars,{}),jsx(UserContactsLabel,{className:collaboration_section_module_default.label}),jsx(Tooltip,{content:userContactsTooltip,"data-testid":`usm-UserContacts-tooltip`,open:userContactsTooltip?void 0:!1,side:`bottom`,children:jsx(Focusable,{focusable:isUserContactsDisabled,children:jsx(UserSelectorContainer,{autoFocus:permissions.canInviteCollaborator,className:`usm-UserContacts-input`,clearButtonAriaLabel:formatMessage(messages.clearButton),clearOnBlur:!1,"data-target-id":`PillSelectorDropdown-AddNamesOrEmailAddresses`,disabled:isUserContactsDisabled||isSubmitting,displayChipVariant:contact=>contact.chipVariant,error:errors.userContacts,fetchAvatarUrls:handleFetchAvatarUrls,fetchUsers:handleFetchUsers,hideOnEscape:stopEscapeKeyPropagation,idForLabel:userContactsId,inputValue:contactValue,label:null,onBlur:onUserSelectorBlur,onInputValueChange:handleContactValueChange,onPaste:handlePaste,onSelectedUsersChange,placeholder:userContacts.length?``:formatMessage(messages.invitePeoplePlaceholder),portalElement:containerRef,selectedUsers:userContacts,selectOnEnterOrTab:!0,suggestedOptions:shouldShowSuggestedOptions?suggestedCollaborators:void 0,variant:isFormExpanded?`textarea`:`input`})})}),isInvitationForm&&jsxs(`div`,{className:collaboration_section_module_default.access,children:[config.collaborationRole&&jsx(CollaborationRole,{}),collaborationAccess]})]}),(hasInviteMessage||hasEmailMessage)&&jsx(TextAreaContainer,{maxCount:config.collaborationMessageLimit}),isFormExpanded&&(hasExternalUser||invitationFormNotices)&&jsxs(`div`,{className:collaboration_section_module_default.disclosures,children:[hasExternalUser&&jsxs(`div`,{className:collaboration_section_module_default.security,children:[jsx(Globe,{className:collaboration_section_module_default.icon,height:bpSize040,width:bpSize040}),jsx(Text,{as:`span`,color:`textOnLightSecondary`,children:formatMessage(messages.contentSharedWithExternalCollaborators)})]}),invitationFormNotices]}),isFormExpanded&&containerRef&&createPortal(jsxs(Fragment,{children:[!isFetching&&jsxs(Modal.Footer,{children:[jsx(Modal.Footer.SecondaryButton,{disabled:isSubmitting,onClick:handleCancel,children:formatMessage(messages.cancelButton)}),jsx(Modal.Footer.PrimaryButton,{"data-target-id":`Modal.Footer.PrimaryButton-USMSendInvite`,loading:isSubmitting,loadingAriaLabel:formatMessage(messages.loadingLabel),onClick:handleSubmit,children:formatMessage(messages.sendButton)})]}),!isDesktop&&jsx(Modal.Close,{"aria-label":formatMessage(messages.closeButton),disabled:isSubmitting})]}),containerRef)]})}export{CollaborationSection as t};
@@ -1 +1 @@
1
- import{t as OtpMode}from"./types.js";import messages from"../esm/lib/components/shared-link-settings-modal/messages.js";import{useIntl}from"react-intl";import{Button,Radio,Switch,Text}from"@box/blueprint-web";import{Fragment,jsx,jsxs}from"react/jsx-runtime";import '../styles/otp-section.css';var otp_section_module_default={otpToggleRow:`_otpToggleRow_1eiby_1`,recommendedBadge:`_recommendedBadge_1eiby_7`,countBadge:`_countBadge_1eiby_8`,modeSelector:`_modeSelector_1eiby_26`,allowlistRow:`_allowlistRow_1eiby_33`};function OtpSection({allowlistItemCount,canChange,isAvailable,isChecked,isDisabled,onConfigureAllowlist,onModeChange,onToggle,otpMode}){let{formatMessage}=useIntl();if(!isAvailable)return null;let controlsDisabled=isDisabled||!canChange;return jsxs(Fragment,{children:[jsxs(`div`,{className:otp_section_module_default.otpToggleRow,children:[jsx(Switch.Item,{checked:isChecked,disabled:controlsDisabled,label:formatMessage(messages.otpToggleText),onCheckedChange:onToggle,value:`otp-settings`}),!controlsDisabled&&jsx(Text,{as:`span`,className:otp_section_module_default.recommendedBadge,color:`textOnLightDefault`,variant:`captionBold`,children:formatMessage(messages.otpRecommendedBadge)})]}),isChecked&&jsxs(`div`,{className:otp_section_module_default.modeSelector,children:[jsx(Radio.Legend,{header:formatMessage(messages.otpModeSelectorLegend),children:jsxs(Radio.Group,{disabled:controlsDisabled,onValueChange:value=>onModeChange(value),value:otpMode,children:[jsx(Radio.Item,{label:formatMessage(messages.otpModeOpenLabel),value:OtpMode.OPEN}),jsx(Radio.Item,{label:formatMessage(messages.otpModeAccessListLabel),value:OtpMode.ALLOWLIST})]})}),otpMode===OtpMode.ALLOWLIST&&jsxs(`div`,{className:otp_section_module_default.allowlistRow,children:[jsx(Button,{disabled:controlsDisabled||!onConfigureAllowlist,onClick:onConfigureAllowlist,size:`small`,variant:`secondary`,children:formatMessage(messages.otpConfigureButton)}),allowlistItemCount>0&&jsxs(Fragment,{children:[jsx(Text,{as:`span`,color:`textOnLightSecondary`,variant:`bodyDefault`,children:formatMessage(messages.otpAccessListLabel)}),jsx(Text,{as:`span`,className:otp_section_module_default.countBadge,color:`textOnLightDefault`,variant:`captionBold`,children:formatMessage(messages.otpAccessListCountBadge,{count:allowlistItemCount})})]})]})]})]})}export{OtpSection as t};
1
+ import{OTP_MODE}from"../esm/lib/constants.js";import messages from"../esm/lib/components/shared-link-settings-modal/messages.js";import{useIntl}from"react-intl";import{Button,Radio,Switch,Text}from"@box/blueprint-web";import{Fragment,jsx,jsxs}from"react/jsx-runtime";import '../styles/otp-section.css';var otp_section_module_default={toggle:`_toggle_2m015_1`,recommendedBadge:`_recommendedBadge_2m015_7`,countBadge:`_countBadge_2m015_8`,modeSelector:`_modeSelector_2m015_26`,allowlist:`_allowlist_2m015_33`};function OtpSection({allowlistItemCount,canChange,isAvailable,isChecked,isDisabled,onConfigureAllowlist,onModeChange,onToggle,otpMode}){let{formatMessage}=useIntl();if(!isAvailable)return null;let isSectionDisabled=isDisabled||!canChange;return jsxs(Fragment,{children:[jsxs(`div`,{className:otp_section_module_default.toggle,children:[jsx(Switch.Item,{checked:isChecked,disabled:isSectionDisabled,label:formatMessage(messages.otpToggleText),onCheckedChange:onToggle,value:`otp-settings`}),!isSectionDisabled&&jsx(Text,{as:`span`,className:otp_section_module_default.recommendedBadge,color:`textOnLightDefault`,variant:`captionBold`,children:formatMessage(messages.otpRecommendedBadge)})]}),isChecked&&jsxs(`div`,{className:otp_section_module_default.modeSelector,children:[jsx(Radio.Legend,{header:formatMessage(messages.otpModeSelectorLegend),children:jsxs(Radio.Group,{disabled:isSectionDisabled,onValueChange:value=>onModeChange(value),value:otpMode,children:[jsx(Radio.Item,{label:formatMessage(messages.otpModeOpenLabel),value:OTP_MODE.OPEN}),jsx(Radio.Item,{label:formatMessage(messages.otpModeAccessListLabel),value:OTP_MODE.ALLOWLIST})]})}),otpMode===OTP_MODE.ALLOWLIST&&jsxs(`div`,{className:otp_section_module_default.allowlist,children:[jsx(Button,{disabled:isSectionDisabled||!onConfigureAllowlist,onClick:onConfigureAllowlist,size:`small`,variant:`secondary`,children:formatMessage(messages.otpConfigureButton)}),allowlistItemCount>0&&jsxs(Fragment,{children:[jsx(Text,{as:`span`,color:`textOnLightSecondary`,variant:`bodyDefault`,children:formatMessage(messages.otpAccessListLabel)}),jsx(Text,{as:`span`,className:otp_section_module_default.countBadge,color:`textOnLightDefault`,variant:`captionBold`,children:formatMessage(messages.otpAccessListCountBadge,{count:allowlistItemCount})})]})]})]})]})}export{OtpSection as t};
package/dist/esm/index.js CHANGED
@@ -1 +1 @@
1
- import{t as OtpMode}from"../chunks/types.js";import{UnifiedShareModal}from"./lib/unified-share-modal.js";export{OtpMode,UnifiedShareModal};
1
+ import{UnifiedShareModal}from"./lib/unified-share-modal.js";export{UnifiedShareModal};
@@ -1 +1 @@
1
- import{t as OtpMode}from"../../../../chunks/types.js";import{useUnifiedShareModalContext}from"../../contexts/unified-share-modal-context.js";import{useAccessLevels}from"../../hooks/use-access-levels.js";import{useSharedLinkSettingsContext}from"../../contexts/shared-link-settings-context.js";import messages from"./messages.js";import{DownloadSection}from"./download-section.js";import{ExpirationSection}from"./expiration-section.js";import{t as OtpSection}from"../../../../chunks/otp-section.js";import{PasswordSection}from"./password-section.js";import{VanitySection}from"./vanity-section.js";import{useMemo}from"react";import{useIntl}from"react-intl";import{InlineNotice,Link,Text}from"@box/blueprint-web";import{Fragment,jsx,jsxs}from"react/jsx-runtime";function SharedLinkSettings(){let{formatMessage}=useIntl(),{eventService,isSubmitting,sharedLink}=useUnifiedShareModalContext(),{settings={},vanityDomain=``}=sharedLink,{canChangeDownload,canChangeExpiration,canChangeOtp,canChangePassword,canChangeVanityName,isDownloadAvailable,isOtpAvailable,isPasswordAvailable,isVanityNameAvailable,otpAllowlistItemCount=0}=settings,{selectedAccess}=useAccessLevels(),{errors,formData,initialFormData,setFieldError,setFieldValue,validatePassword}=useSharedLinkSettingsContext(),accessNoticeMessage=useMemo(()=>{if(!selectedAccess)return null;switch(selectedAccess.id){case`collaborators`:return messages.subtitleCollaborators;case`open`:return formData.isDownloadEnabled?messages.subtitleOpenDownload:messages.subtitleOpenView;case`company`:return formData.isDownloadEnabled?messages.subtitleCompanyDownload:messages.subtitleCompanyView;default:return null}},[formData.isDownloadEnabled,selectedAccess]),handleExpirationToggle=nextChecked=>{setFieldError(`expiration`,void 0),setFieldValue(`isExpirationEnabled`,nextChecked)},handleExpirationChange=value=>{setFieldError(`expiration`,void 0),setFieldValue(`expiration`,value)},handleVanityToggle=nextChecked=>{setFieldError(`vanityName`,void 0),setFieldValue(`isVanityNameEnabled`,nextChecked)},handleVanityNameChange=event=>{setFieldError(`vanityName`,void 0),setFieldValue(`vanityName`,event.target.value)},isOtpSectionVisible=!!isOtpAvailable&&selectedAccess?.id===`open`,isPasswordSectionVisible=!!isPasswordAvailable&&selectedAccess?.id===`open`,canTogglePassword=!!canChangePassword&&!(formData.isOtpEnabled&&!canChangeOtp),canToggleOtp=!!canChangeOtp&&!(formData.isPasswordEnabled&&!canChangePassword),handlePasswordToggle=nextChecked=>{setFieldError(`password`,void 0),setFieldValue(`isPasswordEnabled`,nextChecked),nextChecked&&isOtpSectionVisible&&canChangeOtp&&setFieldValue(`isOtpEnabled`,!1)},handleOtpToggle=nextChecked=>{setFieldValue(`isOtpEnabled`,nextChecked),nextChecked&&formData.otpMode===OtpMode.NONE&&setFieldValue(`otpMode`,OtpMode.OPEN),nextChecked&&isPasswordSectionVisible&&canChangePassword&&(setFieldValue(`isPasswordEnabled`,!1),setFieldValue(`password`,``),setFieldError(`password`,void 0))},handleOtpModeChange=mode=>{setFieldValue(`otpMode`,mode)},handlePasswordChange=event=>{setFieldError(`password`,void 0),setFieldValue(`password`,event.target.value)},handleDownloadToggle=nextChecked=>{setFieldValue(`isDownloadEnabled`,nextChecked)},handlePasswordBlur=event=>{let isSubmitFocused=document.getElementById(`usm-SharedLinkSettingsModal-primaryButton`)?.contains(event.relatedTarget);initialFormData.isPasswordEnabled&&!formData.password||isSubmitFocused||validatePassword(formData.password)},canChangeAllSettings=canChangeDownload&&canChangeExpiration&&(!isOtpSectionVisible||canChangeOtp)&&(!isPasswordSectionVisible||canChangePassword)&&canChangeVanityName,passwordSection=jsx(PasswordSection,{canChange:canTogglePassword,error:errors.password,isAvailable:isPasswordSectionVisible,isChecked:formData.isPasswordEnabled,isDefaultChecked:initialFormData.isPasswordEnabled,isDisabled:isSubmitting,onBlur:handlePasswordBlur,onChange:handlePasswordChange,onFocus:()=>setFieldError(`password`,void 0),onToggle:handlePasswordToggle,password:formData.password});return jsxs(Fragment,{children:[!canChangeAllSettings&&jsx(InlineNotice,{variant:`warning`,variantIconAriaLabel:formatMessage(messages.warningNoticeIconAriaLabel),children:formatMessage(messages.inaccessibleSettingsNotice)}),accessNoticeMessage&&jsx(Text,{as:`p`,color:`textOnLightSecondary`,children:formatMessage(accessNoticeMessage,{learnSharedLinkSettingsLink:jsx(Link,{href:`https://support.box.com/hc/en-us/articles/360043697554-Configuring-Individual-Shared-Link-Settings`,rel:`noreferrer`,target:`_blank`,children:formatMessage(messages.learnSharedLinkSettingsLink)})})}),jsx(ExpirationSection,{canChange:!!canChangeExpiration,error:errors.expiration,expiration:formData.expiration,isChecked:formData.isExpirationEnabled,isDisabled:isSubmitting,onChange:handleExpirationChange,onToggle:handleExpirationToggle}),jsx(OtpSection,{allowlistItemCount:otpAllowlistItemCount,canChange:canToggleOtp,isAvailable:isOtpSectionVisible,isChecked:formData.isOtpEnabled,isDisabled:isSubmitting,onConfigureAllowlist:eventService.onOtpAllowlistConfigure,onModeChange:handleOtpModeChange,onToggle:handleOtpToggle,otpMode:formData.otpMode}),!isOtpAvailable&&passwordSection,jsx(VanitySection,{canChange:!!canChangeVanityName,error:errors.vanityName,isAvailable:!!isVanityNameAvailable,isChecked:formData.isVanityNameEnabled,isDisabled:isSubmitting,onChange:handleVanityNameChange,onToggle:handleVanityToggle,vanityDomain,vanityName:formData.vanityName}),jsx(DownloadSection,{canChange:!!canChangeDownload,isAvailable:!!isDownloadAvailable,isChecked:formData.isDownloadEnabled,isDisabled:isSubmitting,onToggle:handleDownloadToggle}),isOtpAvailable&&passwordSection]})}export{SharedLinkSettings};
1
+ import{OTP_MODE}from"../../constants.js";import{useUnifiedShareModalContext}from"../../contexts/unified-share-modal-context.js";import{useAccessLevels}from"../../hooks/use-access-levels.js";import{useSharedLinkSettingsContext}from"../../contexts/shared-link-settings-context.js";import messages from"./messages.js";import{DownloadSection}from"./download-section.js";import{ExpirationSection}from"./expiration-section.js";import{t as OtpSection}from"../../../../chunks/otp-section.js";import{PasswordSection}from"./password-section.js";import{VanitySection}from"./vanity-section.js";import{useMemo}from"react";import{useIntl}from"react-intl";import{InlineNotice,Link,Text}from"@box/blueprint-web";import{Fragment,jsx,jsxs}from"react/jsx-runtime";function SharedLinkSettings(){let{formatMessage}=useIntl(),{eventService,isSubmitting,sharedLink}=useUnifiedShareModalContext(),{settings={},vanityDomain=``}=sharedLink,{canChangeDownload,canChangeExpiration,canChangeOtp,canChangePassword,canChangeVanityName,isDownloadAvailable,isOtpAvailable,isPasswordAvailable,isVanityNameAvailable,otpAllowlistItemCount=0}=settings,{selectedAccess}=useAccessLevels(),{errors,formData,initialFormData,setFieldError,setFieldValue,validatePassword}=useSharedLinkSettingsContext(),accessNoticeMessage=useMemo(()=>{if(!selectedAccess)return null;switch(selectedAccess.id){case`collaborators`:return messages.subtitleCollaborators;case`open`:return formData.isDownloadEnabled?messages.subtitleOpenDownload:messages.subtitleOpenView;case`company`:return formData.isDownloadEnabled?messages.subtitleCompanyDownload:messages.subtitleCompanyView;default:return null}},[formData.isDownloadEnabled,selectedAccess]),handleExpirationToggle=nextChecked=>{setFieldError(`expiration`,void 0),setFieldValue(`isExpirationEnabled`,nextChecked)},handleExpirationChange=value=>{setFieldError(`expiration`,void 0),setFieldValue(`expiration`,value)},handleVanityToggle=nextChecked=>{setFieldError(`vanityName`,void 0),setFieldValue(`isVanityNameEnabled`,nextChecked)},handleVanityNameChange=event=>{setFieldError(`vanityName`,void 0),setFieldValue(`vanityName`,event.target.value)},isOtpSectionVisible=!!isOtpAvailable&&selectedAccess?.id===`open`,isPasswordSectionVisible=!!isPasswordAvailable&&selectedAccess?.id===`open`,canTogglePassword=!!canChangePassword&&!(formData.isOtpEnabled&&!canChangeOtp),canToggleOtp=!!canChangeOtp&&!(formData.isPasswordEnabled&&!canChangePassword),handlePasswordToggle=nextChecked=>{setFieldError(`password`,void 0),setFieldValue(`isPasswordEnabled`,nextChecked),nextChecked&&isOtpSectionVisible&&canChangeOtp&&setFieldValue(`isOtpEnabled`,!1)},handleOtpToggle=nextChecked=>{setFieldValue(`isOtpEnabled`,nextChecked),nextChecked&&formData.otpMode===OTP_MODE.NONE&&setFieldValue(`otpMode`,OTP_MODE.OPEN),nextChecked&&isPasswordSectionVisible&&canChangePassword&&(setFieldValue(`isPasswordEnabled`,!1),setFieldValue(`password`,``),setFieldError(`password`,void 0))},handleOtpModeChange=mode=>{setFieldValue(`otpMode`,mode)},handlePasswordChange=event=>{setFieldError(`password`,void 0),setFieldValue(`password`,event.target.value)},handleDownloadToggle=nextChecked=>{setFieldValue(`isDownloadEnabled`,nextChecked)},handlePasswordBlur=event=>{let isSubmitFocused=document.getElementById(`usm-SharedLinkSettingsModal-primaryButton`)?.contains(event.relatedTarget);initialFormData.isPasswordEnabled&&!formData.password||isSubmitFocused||validatePassword(formData.password)},canChangeAllSettings=canChangeDownload&&canChangeExpiration&&(!isOtpSectionVisible||canChangeOtp)&&(!isPasswordSectionVisible||canChangePassword)&&canChangeVanityName,passwordSection=jsx(PasswordSection,{canChange:canTogglePassword,error:errors.password,isAvailable:isPasswordSectionVisible,isChecked:formData.isPasswordEnabled,isDefaultChecked:initialFormData.isPasswordEnabled,isDisabled:isSubmitting,onBlur:handlePasswordBlur,onChange:handlePasswordChange,onFocus:()=>setFieldError(`password`,void 0),onToggle:handlePasswordToggle,password:formData.password});return jsxs(Fragment,{children:[!canChangeAllSettings&&jsx(InlineNotice,{variant:`warning`,variantIconAriaLabel:formatMessage(messages.warningNoticeIconAriaLabel),children:formatMessage(messages.inaccessibleSettingsNotice)}),accessNoticeMessage&&jsx(Text,{as:`p`,color:`textOnLightSecondary`,children:formatMessage(accessNoticeMessage,{learnSharedLinkSettingsLink:jsx(Link,{href:`https://support.box.com/hc/en-us/articles/360043697554-Configuring-Individual-Shared-Link-Settings`,rel:`noreferrer`,target:`_blank`,children:formatMessage(messages.learnSharedLinkSettingsLink)})})}),jsx(ExpirationSection,{canChange:!!canChangeExpiration,error:errors.expiration,expiration:formData.expiration,isChecked:formData.isExpirationEnabled,isDisabled:isSubmitting,onChange:handleExpirationChange,onToggle:handleExpirationToggle}),jsx(OtpSection,{allowlistItemCount:otpAllowlistItemCount,canChange:canToggleOtp,isAvailable:isOtpSectionVisible,isChecked:formData.isOtpEnabled,isDisabled:isSubmitting,onConfigureAllowlist:eventService.onOtpAllowlistConfigure,onModeChange:handleOtpModeChange,onToggle:handleOtpToggle,otpMode:formData.otpMode}),!isOtpAvailable&&passwordSection,jsx(VanitySection,{canChange:!!canChangeVanityName,error:errors.vanityName,isAvailable:!!isVanityNameAvailable,isChecked:formData.isVanityNameEnabled,isDisabled:isSubmitting,onChange:handleVanityNameChange,onToggle:handleVanityToggle,vanityDomain,vanityName:formData.vanityName}),jsx(DownloadSection,{canChange:!!canChangeDownload,isAvailable:!!isDownloadAvailable,isChecked:formData.isDownloadEnabled,isDisabled:isSubmitting,onToggle:handleDownloadToggle}),isOtpAvailable&&passwordSection]})}export{SharedLinkSettings};
@@ -1 +1 @@
1
- var DEFAULT_NOTIFICATIONS=[`invite-collaborators`,`remove-collaborator`,`create-shared-link`,`delete-shared-link`,`update-shared-link`,`email-shared-link`,`auto-copy-shared-link`],DEFAULT_CONFIGURATION={collaboration:!0,collaborationLimit:100,collaborationMessage:!0,collaborationMessageLimit:750,collaborationRole:!0,collaborators:!0,collaboratorsLimit:100,collaboratorsManagement:!0,notifications:DEFAULT_NOTIFICATIONS,sharedLink:!0,sharedLinkAccess:!0,sharedLinkAutoCopy:!1,sharedLinkAutoCreate:!1,sharedLinkEmail:!0,sharedLinkEmailMessage:!0,sharedLinkPermission:!0,sharedLinkSettings:!0},DEFAULT_COLLABORATION_ROLES=[{id:`editor`,isDefault:!0},{id:`viewer`}],SUPPORTED_INVITATION_ROLES=[`co_owner`,`editor`,`previewer`,`previewer_uploader`,`uploader`,`viewer`,`viewer_uploader`],SUPPORTED_COLLABORATOR_ROLES=[`owner`,...SUPPORTED_INVITATION_ROLES],SUPPORTED_ACCESS_LEVELS=[`open`,`company`,`collaborators`],SUPPORTED_PERMISSION_LEVELS=[`can_edit`,`can_download`,`can_preview`],FILE_EXTENSION_BOX_NOTE=`boxnote`;export{DEFAULT_COLLABORATION_ROLES,DEFAULT_CONFIGURATION,DEFAULT_NOTIFICATIONS,FILE_EXTENSION_BOX_NOTE,SUPPORTED_ACCESS_LEVELS,SUPPORTED_COLLABORATOR_ROLES,SUPPORTED_INVITATION_ROLES,SUPPORTED_PERMISSION_LEVELS};
1
+ var OTP_MODE={ALLOWLIST:`allowlist`,NONE:`none`,OPEN:`open`},DEFAULT_NOTIFICATIONS=[`invite-collaborators`,`remove-collaborator`,`create-shared-link`,`delete-shared-link`,`update-shared-link`,`email-shared-link`,`auto-copy-shared-link`],DEFAULT_CONFIGURATION={collaboration:!0,collaborationLimit:100,collaborationMessage:!0,collaborationMessageLimit:750,collaborationRole:!0,collaborators:!0,collaboratorsLimit:100,collaboratorsManagement:!0,notifications:DEFAULT_NOTIFICATIONS,sharedLink:!0,sharedLinkAccess:!0,sharedLinkAutoCopy:!1,sharedLinkAutoCreate:!1,sharedLinkEmail:!0,sharedLinkEmailMessage:!0,sharedLinkPermission:!0,sharedLinkSettings:!0},DEFAULT_COLLABORATION_ROLES=[{id:`editor`,isDefault:!0},{id:`viewer`}],SUPPORTED_INVITATION_ROLES=[`co_owner`,`editor`,`previewer`,`previewer_uploader`,`uploader`,`viewer`,`viewer_uploader`],SUPPORTED_COLLABORATOR_ROLES=[`owner`,...SUPPORTED_INVITATION_ROLES],SUPPORTED_ACCESS_LEVELS=[`open`,`company`,`collaborators`],SUPPORTED_PERMISSION_LEVELS=[`can_edit`,`can_download`,`can_preview`],FILE_EXTENSION_BOX_NOTE=`boxnote`;export{DEFAULT_COLLABORATION_ROLES,DEFAULT_CONFIGURATION,DEFAULT_NOTIFICATIONS,FILE_EXTENSION_BOX_NOTE,OTP_MODE,SUPPORTED_ACCESS_LEVELS,SUPPORTED_COLLABORATOR_ROLES,SUPPORTED_INVITATION_ROLES,SUPPORTED_PERMISSION_LEVELS};
@@ -1 +1 @@
1
- import{t as OtpMode}from"../../../chunks/types.js";import{useUnifiedShareModalContext}from"./unified-share-modal-context.js";import{formatDateFromTimestampToCalendarDate}from"../utils/date.js";import{useLinkSettingsForm}from"../hooks/use-link-settings-form.js";import{createContext,useContext,useMemo,useState}from"react";import{jsx}from"react/jsx-runtime";var SharedLinkSettingsContext=createContext(null),useSharedLinkSettingsContext=()=>{let context=useContext(SharedLinkSettingsContext);if(!context)throw Error(`useSharedLinkSettingsContext must be used with SharedLinkSettingsProvider`);return context},SharedLinkSettingsProvider=({children})=>{let{sharedLink}=useUnifiedShareModalContext(),{expiresAt=0,settings={},vanityName=``}=sharedLink,{isDownloadEnabled,isPasswordEnabled,otpMode=OtpMode.NONE}=settings,[containerRef,setContainerRef]=useState(null),initialFormData=useMemo(()=>{let isOtpEnabled=otpMode!==OtpMode.NONE;return{expiration:expiresAt?formatDateFromTimestampToCalendarDate(expiresAt):null,isDownloadEnabled:!!isDownloadEnabled,isExpirationEnabled:!!expiresAt,isOtpEnabled,isPasswordEnabled:!!isPasswordEnabled,isVanityNameEnabled:!!vanityName,otpMode,password:``,vanityName}},[expiresAt,isDownloadEnabled,isPasswordEnabled,otpMode,vanityName]),{errors,formData,handleFormReset,handleFormSubmit,setFieldError,setFieldValue,validatePassword}=useLinkSettingsForm(initialFormData),contextValue=useMemo(()=>({containerRef,errors,formData,initialFormData,resetForm:handleFormReset,setContainerRef,setFieldError,setFieldValue,submitForm:handleFormSubmit,validatePassword}),[containerRef,errors,formData,handleFormReset,handleFormSubmit,initialFormData,setFieldError,setFieldValue,validatePassword]);return jsx(SharedLinkSettingsContext.Provider,{value:contextValue,children})};export{SharedLinkSettingsContext,SharedLinkSettingsProvider,useSharedLinkSettingsContext};
1
+ import{OTP_MODE}from"../constants.js";import{useUnifiedShareModalContext}from"./unified-share-modal-context.js";import{formatDateFromTimestampToCalendarDate}from"../utils/date.js";import{useLinkSettingsForm}from"../hooks/use-link-settings-form.js";import{createContext,useContext,useMemo,useState}from"react";import{jsx}from"react/jsx-runtime";var SharedLinkSettingsContext=createContext(null),useSharedLinkSettingsContext=()=>{let context=useContext(SharedLinkSettingsContext);if(!context)throw Error(`useSharedLinkSettingsContext must be used with SharedLinkSettingsProvider`);return context},SharedLinkSettingsProvider=({children})=>{let{sharedLink}=useUnifiedShareModalContext(),{expiresAt=0,settings={},vanityName=``}=sharedLink,{isDownloadEnabled,isPasswordEnabled,otpMode=OTP_MODE.NONE}=settings,[containerRef,setContainerRef]=useState(null),initialFormData=useMemo(()=>{let isOtpEnabled=otpMode!==OTP_MODE.NONE;return{expiration:expiresAt?formatDateFromTimestampToCalendarDate(expiresAt):null,isDownloadEnabled:!!isDownloadEnabled,isExpirationEnabled:!!expiresAt,isOtpEnabled,isPasswordEnabled:!!isPasswordEnabled,isVanityNameEnabled:!!vanityName,otpMode,password:``,vanityName}},[expiresAt,isDownloadEnabled,isPasswordEnabled,otpMode,vanityName]),{errors,formData,onFormReset,onFormSubmit,setFieldError,setFieldValue,validatePassword}=useLinkSettingsForm(initialFormData),contextValue=useMemo(()=>({containerRef,errors,formData,initialFormData,resetForm:onFormReset,setContainerRef,setFieldError,setFieldValue,submitForm:onFormSubmit,validatePassword}),[containerRef,errors,formData,initialFormData,onFormReset,onFormSubmit,setFieldError,setFieldValue,validatePassword]);return jsx(SharedLinkSettingsContext.Provider,{value:contextValue,children})};export{SharedLinkSettingsContext,SharedLinkSettingsProvider,useSharedLinkSettingsContext};
@@ -1 +1 @@
1
- import{useUnifiedShareModalContext}from"../contexts/unified-share-modal-context.js";import{parseEmails}from"../utils/email.js";import{useUnifiedShareFormContext}from"../contexts/unified-share-form-context.js";import{useFormValidation}from"./use-form-validation.js";import{useSharingAction}from"./use-sharing-action.js";import{useCallback}from"react";import differenceBy from"lodash/differenceBy";import uniqBy from"lodash/uniqBy";var useCollaborationForm=(formAction,formNotification)=>{let{errors,setFieldError,validateCollaborationLimit,validateUserContact,validateUserSelector}=useFormValidation(),{config,contactService}=useUnifiedShareModalContext(),{collaborationLimit}=config,{collaborationRole,form,messageValue,setContactValue,setMessageValue,setUserContacts,shieldRestriction,userContacts}=useUnifiedShareFormContext(),{onAction:onFormSubmit}=useSharingAction(formAction,formNotification),{getContactsByEmail}=contactService,handleFormReset=()=>{setUserContacts([]),setContactValue(``),setMessageValue(``),setFieldError(`userContacts`,``)},updateContactValue=useCallback(input=>{validateCollaborationLimit(userContacts,collaborationLimit)||setFieldError(`userContacts`,``),setContactValue(input)},[collaborationLimit,setContactValue,setFieldError,userContacts,validateCollaborationLimit]),processContacts=useCallback(async emails=>{let fetchedContacts={};if(getContactsByEmail&&emails.length>0){let response=await getContactsByEmail(emails);for(let key of Object.keys(response))fetchedContacts[key.toLowerCase()]=response[key]}return emails.map(email=>fetchedContacts[email.toLowerCase()]||{email,id:0,isExternalUser:!0,name:email,value:email,type:`user`})},[getContactsByEmail]),handleSelectedUsersChange=useCallback(async users=>{setFieldError(`userContacts`,``),validateUserSelector(users);let nextUserContacts;if(users.length<=userContacts.length||users[users.length-1].id!==void 0)nextUserContacts=users;else{let previousContacts=users.slice(0,-1),rawInput=users[users.length-1].value,parsedEmails=parseEmails(rawInput);parsedEmails.length===0&&validateUserContact(rawInput);let processedContacts=await processContacts(uniqBy(differenceBy(parsedEmails,previousContacts.filter(user=>user.email).map(user=>user.email),email=>email.toLowerCase()),email=>email.toLowerCase()));nextUserContacts=[...previousContacts,...processedContacts]}collaborationLimit&&validateCollaborationLimit(nextUserContacts,collaborationLimit),setUserContacts(nextUserContacts)},[collaborationLimit,processContacts,setFieldError,setUserContacts,userContacts,validateCollaborationLimit,validateUserContact,validateUserSelector]);return{errors,handleFormReset,handleFormSubmit:async()=>{if(errors.userContacts||validateUserSelector(userContacts))return!0;let formData={contacts:userContacts,message:messageValue};return form===`invite`&&(formData.role=collaborationRole.id),shieldRestriction.isJustificationAllowed&&(formData.justificationReason=shieldRestriction.justificationReason,formData.classificationId=shieldRestriction.classificationId),await onFormSubmit(formData),handleFormReset(),!1},handleSelectedUsersChange,handleUserSelectorBlur:useCallback(event=>{let isInputFocused=event.relatedTarget?.closest(`.usm-UserContacts-input`),isPopupFocused=document.querySelector(`[aria-labelledby^="usm-UserContacts-"]`)?.contains(event.relatedTarget);if(isInputFocused||isPopupFocused)return;let value=event.target.value.trim();value&&handleSelectedUsersChange([...userContacts,{value}])},[handleSelectedUsersChange,userContacts]),updateContactValue}};export{useCollaborationForm};
1
+ import{useUnifiedShareModalContext}from"../contexts/unified-share-modal-context.js";import{parseEmails}from"../utils/email.js";import{useUnifiedShareFormContext}from"../contexts/unified-share-form-context.js";import{useFormValidation}from"./use-form-validation.js";import{useSharingAction}from"./use-sharing-action.js";import{useCallback}from"react";import differenceBy from"lodash/differenceBy";import uniqBy from"lodash/uniqBy";var useCollaborationForm=(formAction,formNotification)=>{let{errors,setFieldError,validateCollaborationLimit,validateUserContact,validateUserSelector}=useFormValidation(),{config,contactService}=useUnifiedShareModalContext(),{collaborationLimit}=config,{collaborationRole,form,messageValue,setContactValue,setMessageValue,setUserContacts,shieldRestriction,userContacts}=useUnifiedShareFormContext(),{onAction:onFormSubmit}=useSharingAction(formAction,formNotification),{getContactsByEmail}=contactService,updateContactValue=useCallback(input=>{validateCollaborationLimit(userContacts,collaborationLimit)||setFieldError(`userContacts`,``),setContactValue(input)},[collaborationLimit,setContactValue,setFieldError,userContacts,validateCollaborationLimit]),processContacts=useCallback(async emails=>{let fetchedContacts={};if(getContactsByEmail&&emails.length>0){let response=await getContactsByEmail(emails);for(let key of Object.keys(response))fetchedContacts[key.toLowerCase()]=response[key]}return emails.map(email=>fetchedContacts[email.toLowerCase()]||{email,id:0,isExternalUser:!0,name:email,value:email,type:`user`})},[getContactsByEmail]),handleSelectedUsersChange=useCallback(async users=>{setFieldError(`userContacts`,``),validateUserSelector(users);let nextUserContacts;if(users.length<=userContacts.length||users[users.length-1].id!==void 0)nextUserContacts=users;else{let previousContacts=users.slice(0,-1),rawInput=users[users.length-1].value,parsedEmails=parseEmails(rawInput);parsedEmails.length===0&&validateUserContact(rawInput);let processedContacts=await processContacts(uniqBy(differenceBy(parsedEmails,previousContacts.filter(user=>user.email).map(user=>user.email),email=>email.toLowerCase()),email=>email.toLowerCase()));nextUserContacts=[...previousContacts,...processedContacts]}collaborationLimit&&validateCollaborationLimit(nextUserContacts,collaborationLimit),setUserContacts(nextUserContacts)},[collaborationLimit,processContacts,setFieldError,setUserContacts,userContacts,validateCollaborationLimit,validateUserContact,validateUserSelector]),handleUserSelectorBlur=useCallback(event=>{let isInputFocused=event.relatedTarget?.closest(`.usm-UserContacts-input`),isPopupFocused=document.querySelector(`[aria-labelledby^="usm-UserContacts-"]`)?.contains(event.relatedTarget);if(isInputFocused||isPopupFocused)return;let value=event.target.value.trim();value&&handleSelectedUsersChange([...userContacts,{value}])},[handleSelectedUsersChange,userContacts]),handleFormReset=()=>{setUserContacts([]),setContactValue(``),setMessageValue(``),setFieldError(`userContacts`,``)};return{errors,onFormReset:handleFormReset,onFormSubmit:async()=>{if(errors.userContacts||validateUserSelector(userContacts))return!0;let formData={contacts:userContacts,message:messageValue};return form===`invite`&&(formData.role=collaborationRole.id),shieldRestriction.isJustificationAllowed&&(formData.justificationReason=shieldRestriction.justificationReason,formData.classificationId=shieldRestriction.classificationId),await onFormSubmit(formData),handleFormReset(),!1},onSelectedUsersChange:handleSelectedUsersChange,onUserSelectorBlur:handleUserSelectorBlur,updateContactValue}};export{useCollaborationForm};
@@ -1 +1 @@
1
- import{formatTomorrowDateToCalendarDate}from"../utils/date.js";import{doesPasswordContainInvalidCharacter,doesPasswordContainLetter,doesPasswordContainMinCharacters,doesPasswordContainMixedCase,doesPasswordContainNumber,doesPasswordContainSymbol,isEmailValid,isVanityNameValid}from"../utils/validation.js";import messages from"../messages.js";import{useCallback,useState}from"react";import{useIntl}from"react-intl";var useFormValidation=()=>{let{formatMessage}=useIntl(),[errors,setErrors]=useState({}),setFieldError=useCallback((field,error)=>{setErrors(prev=>({...prev,[field]:error}))},[]),validateExpiration=useCallback(expiration=>{if(!expiration)return setFieldError(`expiration`,formatMessage(messages.expirationRequiredErrorMessage)),!0;let tomorrow=formatTomorrowDateToCalendarDate();return expiration.compare(tomorrow)<0?(setFieldError(`expiration`,formatMessage(messages.expirationFutureDateErrorMessage)),!0):!1},[formatMessage,setFieldError]),validateVanityName=useCallback(vanityName=>vanityName?isVanityNameValid(vanityName)?!1:(setFieldError(`vanityName`,formatMessage(messages.vanityNameInvalidErrorMessage)),!0):(setFieldError(`vanityName`,formatMessage(messages.vanityNameRequiredErrorMessage)),!0),[formatMessage,setFieldError]),validateShieldRestriction=useCallback((users,shieldRestriction)=>{let restrictedContacts=users.filter(user=>user.chipVariant===`error`);return shieldRestriction.isJustificationAllowed&&!shieldRestriction.justificationReason?formatMessage(messages.justificationRequiredErrorNotice,{count:restrictedContacts.length}):restrictedContacts.length&&!shieldRestriction.isJustificationAllowed?formatMessage(messages.restrictedContactsErrorNotice,{count:restrictedContacts.length}):``},[formatMessage]),validateUserSelector=useCallback(users=>users.length?!1:(setFieldError(`userContacts`,formatMessage(messages.emailRequiredErrorMessage)),!0),[formatMessage,setFieldError]),validateCollaborationLimit=useCallback((users,maxContacts)=>users.filter(user=>user.value!==``).length<=maxContacts?!1:(setFieldError(`userContacts`,formatMessage(messages.contactsLimitErrorMessage,{maxContacts})),!0),[formatMessage,setFieldError]),validateUserContact=useCallback(user=>user===``?!0:isEmailValid(user)?!1:(setFieldError(`userContacts`,formatMessage(messages.invalidEmailErrorMessage)),!0),[formatMessage,setFieldError]);return{errors,validateCollaborationLimit,validateExpiration,validatePassword:useCallback(password=>doesPasswordContainMinCharacters(password)?doesPasswordContainInvalidCharacter(password)?(setFieldError(`password`,formatMessage(messages.passwordContainInvalidCharacterErrorMessage)),!0):!doesPasswordContainMixedCase(password)&&!(doesPasswordContainLetter(password)&&doesPasswordContainNumber(password))&&!(doesPasswordContainLetter(password)&&doesPasswordContainSymbol(password))&&!(doesPasswordContainNumber(password)&&doesPasswordContainSymbol(password))?(setFieldError(`password`,formatMessage(messages.passwordContainLetterNumberOrSymbolErrorMessage)),!0):!1:(setFieldError(`password`,formatMessage(messages.passwordContainMinCharactersErrorMessage)),!0),[formatMessage,setFieldError]),validateShieldRestriction,validateVanityName,validateUserContact,validateUserSelector,setErrors,setFieldError}};export{useFormValidation};
1
+ import{formatTomorrowDateToCalendarDate}from"../utils/date.js";import{doesPasswordContainInvalidCharacter,doesPasswordContainLetter,doesPasswordContainMinCharacters,doesPasswordContainMixedCase,doesPasswordContainNumber,doesPasswordContainSymbol,isEmailValid,isVanityNameValid}from"../utils/validation.js";import messages from"../messages.js";import{useCallback,useState}from"react";import{useIntl}from"react-intl";var useFormValidation=()=>{let{formatMessage}=useIntl(),[errors,setErrors]=useState({}),setFieldError=useCallback((field,error)=>{setErrors(prev=>({...prev,[field]:error}))},[]),validateUserSelector=useCallback(users=>users.length?!1:(setFieldError(`userContacts`,formatMessage(messages.emailRequiredErrorMessage)),!0),[formatMessage,setFieldError]),validateUserContact=useCallback(user=>user===``?!0:isEmailValid(user)?!1:(setFieldError(`userContacts`,formatMessage(messages.invalidEmailErrorMessage)),!0),[formatMessage,setFieldError]),validateCollaborationLimit=useCallback((users,maxContacts)=>users.filter(user=>user.value!==``).length<=maxContacts?!1:(setFieldError(`userContacts`,formatMessage(messages.contactsLimitErrorMessage,{maxContacts})),!0),[formatMessage,setFieldError]),validateShieldRestriction=useCallback((users,shieldRestriction)=>{let restrictedContacts=users.filter(user=>user.chipVariant===`error`);return shieldRestriction.isJustificationAllowed&&!shieldRestriction.justificationReason?formatMessage(messages.justificationRequiredErrorNotice,{count:restrictedContacts.length}):restrictedContacts.length&&!shieldRestriction.isJustificationAllowed?formatMessage(messages.restrictedContactsErrorNotice,{count:restrictedContacts.length}):``},[formatMessage]),validateExpiration=useCallback(expiration=>{if(!expiration)return setFieldError(`expiration`,formatMessage(messages.expirationRequiredErrorMessage)),!0;let tomorrow=formatTomorrowDateToCalendarDate();return expiration.compare(tomorrow)<0?(setFieldError(`expiration`,formatMessage(messages.expirationFutureDateErrorMessage)),!0):!1},[formatMessage,setFieldError]),validateVanityName=useCallback(vanityName=>vanityName?isVanityNameValid(vanityName)?!1:(setFieldError(`vanityName`,formatMessage(messages.vanityNameInvalidErrorMessage)),!0):(setFieldError(`vanityName`,formatMessage(messages.vanityNameRequiredErrorMessage)),!0),[formatMessage,setFieldError]);return{errors,validateCollaborationLimit,validateExpiration,validatePassword:useCallback(password=>doesPasswordContainMinCharacters(password)?doesPasswordContainInvalidCharacter(password)?(setFieldError(`password`,formatMessage(messages.passwordContainInvalidCharacterErrorMessage)),!0):!doesPasswordContainMixedCase(password)&&!(doesPasswordContainLetter(password)&&doesPasswordContainNumber(password))&&!(doesPasswordContainLetter(password)&&doesPasswordContainSymbol(password))&&!(doesPasswordContainNumber(password)&&doesPasswordContainSymbol(password))?(setFieldError(`password`,formatMessage(messages.passwordContainLetterNumberOrSymbolErrorMessage)),!0):!1:(setFieldError(`password`,formatMessage(messages.passwordContainMinCharactersErrorMessage)),!0),[formatMessage,setFieldError]),validateShieldRestriction,validateVanityName,validateUserContact,validateUserSelector,setErrors,setFieldError}};export{useFormValidation};
@@ -1 +1 @@
1
- import{useUnifiedShareModalContext}from"../contexts/unified-share-modal-context.js";import{getUpdatedLinkSettingsFormData}from"../utils/form.js";import{useFormValidation}from"./use-form-validation.js";import{useSharingAction}from"./use-sharing-action.js";import{useCallback,useEffect,useRef,useState}from"react";import isEqual from"lodash/isEqual";var useLinkSettingsForm=initialFormData=>{let[formData,setFormData]=useState(initialFormData),prevInitialFormDataRef=useRef(initialFormData),initialFormDataRef=useRef(initialFormData),{errors,setErrors,setFieldError,validateExpiration,validatePassword,validateVanityName}=useFormValidation(),{sharingService}=useUnifiedShareModalContext(),{updateSharedLink}=sharingService,{onAction:onUpdate}=useSharingAction(updateSharedLink,`update-shared-link`);useEffect(()=>{isEqual(prevInitialFormDataRef.current,initialFormData)||(setFormData(initialFormData),setErrors({}),prevInitialFormDataRef.current=initialFormData,initialFormDataRef.current=initialFormData)},[initialFormData,setErrors]);let setFieldValue=useCallback((field,value)=>{setFormData(prev=>({...prev,[field]:value}))},[]);return{errors,formData,handleFormReset:useCallback(()=>{setFormData(initialFormDataRef.current),setErrors({})},[setErrors]),handleFormSubmit:useCallback(async()=>{let updatedFormData=getUpdatedLinkSettingsFormData(formData,initialFormData),{expiration,isExpirationEnabled,isPasswordEnabled,isVanityNameEnabled,password,vanityName}=updatedFormData,hasExpirationError=isExpirationEnabled&&validateExpiration(expiration),hasPasswordError=isPasswordEnabled&&validatePassword(password),hasVanityNameError=isVanityNameEnabled&&validateVanityName(vanityName);if(hasExpirationError||hasPasswordError||hasVanityNameError)return!0;try{await onUpdate({...initialFormData,...updatedFormData})}catch(error){return Object.entries(error).forEach(([field,value])=>setFieldError(field,value)),!0}return!1},[formData,initialFormData,onUpdate,setFieldError,validateExpiration,validatePassword,validateVanityName]),setFieldError,setFieldValue,validatePassword}};export{useLinkSettingsForm};
1
+ import{useUnifiedShareModalContext}from"../contexts/unified-share-modal-context.js";import{getUpdatedLinkSettingsFormData}from"../utils/form.js";import{useFormValidation}from"./use-form-validation.js";import{useSharingAction}from"./use-sharing-action.js";import{useCallback,useEffect,useRef,useState}from"react";import isEqual from"lodash/isEqual";var useLinkSettingsForm=initialFormData=>{let initialFormDataRef=useRef(initialFormData),[formData,setFormData]=useState(initialFormData),{errors,setErrors,setFieldError,validateExpiration,validatePassword,validateVanityName}=useFormValidation(),{sharingService}=useUnifiedShareModalContext(),{updateSharedLink}=sharingService,{onAction:onUpdate}=useSharingAction(updateSharedLink,`update-shared-link`);useEffect(()=>{isEqual(initialFormData,initialFormDataRef.current)||(setFormData(initialFormData),setErrors({}),initialFormDataRef.current=initialFormData)},[initialFormData,setErrors]);let setFieldValue=useCallback((field,value)=>{setFormData(prev=>({...prev,[field]:value}))},[]);return{errors,formData,onFormReset:useCallback(()=>{setFormData(initialFormDataRef.current),setErrors({})},[setErrors]),onFormSubmit:useCallback(async()=>{let updatedFormData=getUpdatedLinkSettingsFormData(formData,initialFormData),{expiration,isExpirationEnabled,isPasswordEnabled,isVanityNameEnabled,password,vanityName}=updatedFormData,hasExpirationError=isExpirationEnabled&&validateExpiration(expiration),hasPasswordError=isPasswordEnabled&&validatePassword(password),hasVanityNameError=isVanityNameEnabled&&validateVanityName(vanityName);if(hasExpirationError||hasPasswordError||hasVanityNameError)return!0;try{await onUpdate({...initialFormData,...updatedFormData})}catch(error){return Object.entries(error).forEach(([field,value])=>setFieldError(field,value)),!0}return!1},[formData,initialFormData,onUpdate,setFieldError,validateExpiration,validatePassword,validateVanityName]),setFieldError,setFieldValue,validatePassword}};export{useLinkSettingsForm};
@@ -1 +1 @@
1
- import{t as OtpMode}from"../../../chunks/types.js";var getUpdatedLinkSettingsFormData=(nextData,prevData)=>{let{expiration,isDownloadEnabled,isExpirationEnabled,isOtpEnabled,isPasswordEnabled,isVanityNameEnabled,otpMode,password,vanityName}=nextData,updatedData={};return isDownloadEnabled!==prevData.isDownloadEnabled&&(updatedData.isDownloadEnabled=isDownloadEnabled),(isExpirationEnabled!==prevData.isExpirationEnabled||expiration?.toString()!==prevData.expiration?.toString())&&(updatedData.isExpirationEnabled=isExpirationEnabled,updatedData.expiration=isExpirationEnabled?expiration:null),(isPasswordEnabled!==prevData.isPasswordEnabled||password!==prevData.password)&&(updatedData.isPasswordEnabled=isPasswordEnabled,updatedData.password=isPasswordEnabled?password:null),(isOtpEnabled!==prevData.isOtpEnabled||otpMode!==prevData.otpMode)&&(updatedData.isOtpEnabled=isOtpEnabled,updatedData.otpMode=isOtpEnabled?otpMode:OtpMode.NONE),(isVanityNameEnabled!==prevData.isVanityNameEnabled||vanityName!==prevData.vanityName)&&(updatedData.isVanityNameEnabled=isVanityNameEnabled,updatedData.vanityName=isVanityNameEnabled?vanityName:null),updatedData};export{getUpdatedLinkSettingsFormData};
1
+ import{OTP_MODE}from"../constants.js";var getUpdatedLinkSettingsFormData=(nextData,prevData)=>{let{expiration,isDownloadEnabled,isExpirationEnabled,isOtpEnabled,isPasswordEnabled,isVanityNameEnabled,otpMode,password,vanityName}=nextData,updatedData={};return isDownloadEnabled!==prevData.isDownloadEnabled&&(updatedData.isDownloadEnabled=isDownloadEnabled),(isExpirationEnabled!==prevData.isExpirationEnabled||expiration?.toString()!==prevData.expiration?.toString())&&(updatedData.isExpirationEnabled=isExpirationEnabled,updatedData.expiration=isExpirationEnabled?expiration:null),(isPasswordEnabled!==prevData.isPasswordEnabled||password!==prevData.password)&&(updatedData.isPasswordEnabled=isPasswordEnabled,updatedData.password=isPasswordEnabled?password:null),(isOtpEnabled!==prevData.isOtpEnabled||otpMode!==prevData.otpMode)&&(updatedData.isOtpEnabled=isOtpEnabled,updatedData.otpMode=isOtpEnabled?otpMode:OTP_MODE.NONE),(isVanityNameEnabled!==prevData.isVanityNameEnabled||vanityName!==prevData.vanityName)&&(updatedData.isVanityNameEnabled=isVanityNameEnabled,updatedData.vanityName=isVanityNameEnabled?vanityName:null),updatedData};export{getUpdatedLinkSettingsFormData};
@@ -1 +1 @@
1
- ._otpToggleRow_1eiby_1{align-items:center;gap:var(--bp-space-030);display:flex}._recommendedBadge_1eiby_7,._countBadge_1eiby_8{padding:var(--bp-space-010) var(--bp-space-030);border-radius:var(--bp-radius-10);letter-spacing:.04em;text-transform:uppercase;white-space:nowrap;align-items:center;display:inline-flex}._recommendedBadge_1eiby_7{background-color:var(--bp-surface-status-surface-info-secondary)}._countBadge_1eiby_8{background-color:var(--bp-surface-status-surface-gray)}._modeSelector_1eiby_26{gap:var(--bp-space-030);flex-direction:column;margin-inline-start:var(--bp-space-140);display:flex}._allowlistRow_1eiby_33{align-items:center;gap:var(--bp-space-040);margin-inline-start:var(--bp-space-070);display:flex}
1
+ ._toggle_2m015_1{align-items:center;gap:var(--bp-space-030);display:flex}._recommendedBadge_2m015_7,._countBadge_2m015_8{padding:var(--bp-space-010) var(--bp-space-030);border-radius:var(--bp-radius-10);letter-spacing:.04em;text-transform:uppercase;white-space:nowrap;align-items:center;display:inline-flex}._recommendedBadge_2m015_7{background-color:var(--bp-surface-status-surface-info-secondary)}._countBadge_2m015_8{background-color:var(--bp-surface-status-surface-gray)}._modeSelector_2m015_26{gap:var(--bp-space-030);flex-direction:column;margin-inline-start:var(--bp-space-140);display:flex}._allowlist_2m015_33{align-items:center;gap:var(--bp-space-040);margin-inline-start:var(--bp-space-070);display:flex}
@@ -1,4 +1,4 @@
1
- import { OtpActiveModeType } from '../../types';
1
+ import { OtpAccessType } from '../../types';
2
2
  export interface OtpSectionProps {
3
3
  allowlistItemCount: number;
4
4
  canChange: boolean;
@@ -6,8 +6,8 @@ export interface OtpSectionProps {
6
6
  isChecked: boolean;
7
7
  isDisabled: boolean;
8
8
  onConfigureAllowlist?: () => void;
9
- onModeChange: (mode: OtpActiveModeType) => void;
9
+ onModeChange: (mode: OtpAccessType) => void;
10
10
  onToggle: (checked: boolean) => void;
11
- otpMode: OtpActiveModeType;
11
+ otpMode: OtpAccessType;
12
12
  }
13
13
  export declare function OtpSection({ allowlistItemCount, canChange, isAvailable, isChecked, isDisabled, onConfigureAllowlist, onModeChange, onToggle, otpMode, }: OtpSectionProps): import("react/jsx-runtime").JSX.Element;
@@ -1,4 +1,5 @@
1
- import { AccessLevelType, Configuration, NotificationType, PermissionLevelType } from './types';
1
+ import { AccessLevelType, Configuration, NotificationType, OtpModeType, PermissionLevelType } from './types';
2
+ export declare const OTP_MODE: Record<string, OtpModeType>;
2
3
  export declare const DEFAULT_NOTIFICATIONS: NotificationType[];
3
4
  export declare const DEFAULT_CONFIGURATION: Configuration;
4
5
  export declare const DEFAULT_COLLABORATION_ROLES: ({
@@ -1,5 +1,5 @@
1
1
  import { Dispatch, ReactNode, SetStateAction } from 'react';
2
- import { FormErrors } from '../hooks/use-form-validation';
2
+ import { FormErrors } from '../hooks';
3
3
  import { LinkSettingsFormData } from '../types';
4
4
  export interface SharedLinkSettingsContextValue {
5
5
  containerRef: HTMLDivElement | null;
@@ -1,9 +1,9 @@
1
1
  import { UserContactType } from '@box/user-selector';
2
2
  export declare const useCollaborationForm: (formAction: any, formNotification: any) => {
3
3
  errors: import('./use-form-validation').FormErrors;
4
- handleFormReset: () => void;
5
- handleFormSubmit: () => Promise<boolean>;
6
- handleSelectedUsersChange: (users: UserContactType[]) => Promise<void>;
7
- handleUserSelectorBlur: (event: React.FocusEvent<HTMLTextAreaElement | HTMLInputElement>) => void;
4
+ onFormReset: () => void;
5
+ onFormSubmit: () => Promise<boolean>;
6
+ onSelectedUsersChange: (users: UserContactType[]) => Promise<void>;
7
+ onUserSelectorBlur: (event: React.FocusEvent<HTMLTextAreaElement | HTMLInputElement>) => void;
8
8
  updateContactValue: (input: string) => void;
9
9
  };
@@ -1,13 +1,7 @@
1
1
  import { UserContactType } from '@box/user-selector';
2
2
  import { DateValue, ShieldRestriction } from '../types';
3
- export interface ValidationData {
4
- expiration?: DateValue | string;
5
- vanityName?: string;
6
- }
7
- export type Error = string | undefined;
8
- export type FormErrors = {
9
- [key: string | undefined]: Error;
10
- };
3
+ export type FieldError = string | undefined;
4
+ export type FormErrors = Record<string, FieldError>;
11
5
  export declare const useFormValidation: () => {
12
6
  errors: FormErrors;
13
7
  validateCollaborationLimit: (users: UserContactType[], maxContacts: number) => boolean;
@@ -2,8 +2,8 @@ import { LinkSettingsFormData } from '../types';
2
2
  export declare const useLinkSettingsForm: (initialFormData: LinkSettingsFormData) => {
3
3
  errors: import('./use-form-validation').FormErrors;
4
4
  formData: LinkSettingsFormData;
5
- handleFormReset: () => void;
6
- handleFormSubmit: () => Promise<boolean>;
5
+ onFormReset: () => void;
6
+ onFormSubmit: () => Promise<boolean>;
7
7
  setFieldError: (field: any, error: any) => void;
8
8
  setFieldValue: (field: any, value: any) => void;
9
9
  validatePassword: (password: string) => boolean;
@@ -43,6 +43,17 @@ export type ShieldPolicyType = 'access_policy' | 'malicious_content' | 'informat
43
43
  * Supported permission levels for a shared link. The allowed permission levels are dependent on the Item and Enterprise settings.
44
44
  */
45
45
  export type PermissionLevelType = 'can_edit' | 'can_download' | 'can_preview';
46
+ /**
47
+ * The verification modes for OTP-protected shared links.
48
+ */
49
+ export type OtpModeType = 'open' | 'allowlist' | 'none';
50
+ /**
51
+ * The access modes for verified OTP-protected shared links.
52
+ *
53
+ * This is a subset of {@link OtpModeType} that is selectable in the UI. When OTP is on,
54
+ * the mode is always `open` or `allowlist`.
55
+ */
56
+ export type OtpAccessType = Exclude<OtpModeType, 'none'>;
46
57
  /**
47
58
  * Supported item types in the Unified Share Modal.
48
59
  */
@@ -174,24 +185,6 @@ export interface SharedLink {
174
185
  */
175
186
  vanityName?: string;
176
187
  }
177
- /**
178
- * The verification modes for OTP-protected shared links. Backend naming.
179
- * - `NONE` - OTP is not enabled.
180
- * - `OPEN` - "Anyone with an email" can verify and access.
181
- * - `ALLOWLIST` - only allowlisted emails/domains can access.
182
- */
183
- export declare const OtpMode: {
184
- readonly ALLOWLIST: "allowlist";
185
- readonly NONE: "none";
186
- readonly OPEN: "open";
187
- };
188
- export type OtpModeType = (typeof OtpMode)[keyof typeof OtpMode];
189
- /**
190
- * The subset of {@link OtpModeType} that is user-selectable in the UI. When OTP is on,
191
- * the mode is always `open` or `allowlist`; `none` is only used on the write path to
192
- * signal that OTP is being disabled.
193
- */
194
- export type OtpActiveModeType = Exclude<OtpModeType, typeof OtpMode.NONE>;
195
188
  export interface SharedLinkSettings {
196
189
  /**
197
190
  * When `true`, the user can update the download settings of the shared link.
@@ -475,7 +468,7 @@ export interface SharingService {
475
468
  *
476
469
  * Called when the user clicks "Send" on the invite view of the sharing form.
477
470
  */
478
- sendInvitations?: (formData: CollaborationFormData) => Promise<SharingResponse | void>;
471
+ sendInvitations?: (data: CollaborationFormData) => Promise<SharingResponse | void>;
479
472
  /**
480
473
  * Function to remove an existing collaborator on the item.
481
474
  *
@@ -487,7 +480,7 @@ export interface SharingService {
487
480
  *
488
481
  * Called when the user clicks "Send" on the email view of the sharing form.
489
482
  */
490
- sendSharedLink?: (formData: CollaborationFormData) => Promise<SharingResponse | void>;
483
+ sendSharedLink?: (data: CollaborationFormData) => Promise<SharingResponse | void>;
491
484
  /**
492
485
  * Function to create a shared link for the item.
493
486
  *
@@ -505,7 +498,7 @@ export interface SharingService {
505
498
  *
506
499
  * Called when the user saves changes to the shared link settings.
507
500
  */
508
- updateSharedLink?: (formData: LinkSettingsFormData) => Promise<SharingResponse | void>;
501
+ updateSharedLink?: (data: LinkSettingsFormData) => Promise<SharingResponse | void>;
509
502
  /**
510
503
  * Function to change the access level of the shared link.
511
504
  *
package/package.json CHANGED
@@ -1,23 +1,23 @@
1
1
  {
2
2
  "name": "@box/unified-share-modal",
3
- "version": "3.4.60",
3
+ "version": "3.5.0",
4
4
  "license": "SEE LICENSE IN LICENSE",
5
5
  "peerDependencies": {
6
- "@box/blueprint-web": "^17.16.0",
7
- "@box/blueprint-web-assets": "^5.10.27",
8
- "@box/copy-input": "^2.2.71",
9
- "@box/user-selector": "^3.0.51",
6
+ "@box/blueprint-web": "^17.18.0",
7
+ "@box/blueprint-web-assets": "^5.11.0",
8
+ "@box/copy-input": "^2.3.0",
9
+ "@box/user-selector": "^3.1.0",
10
10
  "lodash": "^4.17.15",
11
11
  "react": "^18.0.0",
12
12
  "react-dom": "^18.0.0",
13
13
  "react-intl": "^6.4.2"
14
14
  },
15
15
  "devDependencies": {
16
- "@box/blueprint-web": "^17.16.0",
17
- "@box/blueprint-web-assets": "^5.10.27",
18
- "@box/copy-input": "^2.2.71",
16
+ "@box/blueprint-web": "^17.18.0",
17
+ "@box/blueprint-web-assets": "^5.11.0",
18
+ "@box/copy-input": "^2.3.0",
19
19
  "@box/eslint-plugin-blueprint": "2.2.24",
20
- "@box/storybook-utils": "1.2.71",
20
+ "@box/storybook-utils": "1.3.0",
21
21
  "react-intl": "^6.4.2"
22
22
  },
23
23
  "publishConfig": {
@@ -1 +0,0 @@
1
- var OtpMode={ALLOWLIST:`allowlist`,NONE:`none`,OPEN:`open`};export{OtpMode as t};