@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.
- package/dist/chunks/collaboration-section.js +1 -1
- package/dist/chunks/otp-section.js +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/lib/components/shared-link-settings-modal/shared-link-settings.js +1 -1
- package/dist/esm/lib/constants.js +1 -1
- package/dist/esm/lib/contexts/shared-link-settings-context.js +1 -1
- package/dist/esm/lib/hooks/use-collaboration-form.js +1 -1
- package/dist/esm/lib/hooks/use-form-validation.js +1 -1
- package/dist/esm/lib/hooks/use-link-settings-form.js +1 -1
- package/dist/esm/lib/utils/form.js +1 -1
- package/dist/styles/otp-section.css +1 -1
- package/dist/types/lib/components/shared-link-settings-modal/otp-section.d.ts +3 -3
- package/dist/types/lib/constants.d.ts +2 -1
- package/dist/types/lib/contexts/shared-link-settings-context.d.ts +1 -1
- package/dist/types/lib/hooks/use-collaboration-form.d.ts +4 -4
- package/dist/types/lib/hooks/use-form-validation.d.ts +2 -8
- package/dist/types/lib/hooks/use-link-settings-form.d.ts +2 -2
- package/dist/types/lib/types.d.ts +14 -21
- package/package.json +9 -9
- package/dist/chunks/types.js +0 -1
|
@@ -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,
|
|
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{
|
|
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{
|
|
1
|
+
import{UnifiedShareModal}from"./lib/unified-share-modal.js";export{UnifiedShareModal};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
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{
|
|
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,
|
|
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}))},[]),
|
|
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),
|
|
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{
|
|
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
|
-
.
|
|
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 {
|
|
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:
|
|
9
|
+
onModeChange: (mode: OtpAccessType) => void;
|
|
10
10
|
onToggle: (checked: boolean) => void;
|
|
11
|
-
otpMode:
|
|
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
|
|
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
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
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
|
|
4
|
-
|
|
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
|
-
|
|
6
|
-
|
|
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?: (
|
|
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?: (
|
|
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?: (
|
|
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.
|
|
3
|
+
"version": "3.5.0",
|
|
4
4
|
"license": "SEE LICENSE IN LICENSE",
|
|
5
5
|
"peerDependencies": {
|
|
6
|
-
"@box/blueprint-web": "^17.
|
|
7
|
-
"@box/blueprint-web-assets": "^5.
|
|
8
|
-
"@box/copy-input": "^2.
|
|
9
|
-
"@box/user-selector": "^3.0
|
|
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.
|
|
17
|
-
"@box/blueprint-web-assets": "^5.
|
|
18
|
-
"@box/copy-input": "^2.
|
|
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.
|
|
20
|
+
"@box/storybook-utils": "1.3.0",
|
|
21
21
|
"react-intl": "^6.4.2"
|
|
22
22
|
},
|
|
23
23
|
"publishConfig": {
|
package/dist/chunks/types.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var OtpMode={ALLOWLIST:`allowlist`,NONE:`none`,OPEN:`open`};export{OtpMode as t};
|