@box/unified-share-modal 3.3.13 → 3.4.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,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`,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,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,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 +1 @@
1
- import{DEFAULT_COLLABORATION_ROLES,DEFAULT_CONFIGURATION}from"../constants.js";import{createContext,useContext,useEffect,useMemo,useState}from"react";import{jsx}from"react/jsx-runtime";var UnifiedShareModalContext=createContext(null),useUnifiedShareModalContext=()=>{let context=useContext(UnifiedShareModalContext);if(!context)throw Error(`useUnifiedShareModalContext must be used with UnifiedShareModalContext.Provider`);return context},UnifiedShareModalProvider=({children,collaborationAccess,collaborationNotices,collaborationRoles,collaborators,config,contactService,currentUser,eventService,initialContacts,invitationFormNotices,isFetching,isOpen,isSubmitting,item,onOpenChange,sharedLink,sharedLinkNotices,sharingService,variant})=>{let[collaborator,setCollaborator]=useState(null),[isLoading,setIsLoading]=useState(!1),[view,setView]=useState(`unified-share-form`);useEffect(()=>{isOpen||(setIsLoading(!1),setView(`unified-share-form`))},[isOpen]);let contextValue=useMemo(()=>({collaborationAccess,collaborationNotices,collaborationRoles:collaborationRoles??DEFAULT_COLLABORATION_ROLES,collaborator,collaborators:collaborators??[],config:{...DEFAULT_CONFIGURATION,...config},contactService:contactService??{},currentUser:currentUser??{},eventService:eventService??{},initialContacts:initialContacts??[],invitationFormNotices,isFetching,isOpen,isSubmitting:isSubmitting??isLoading,item,onOpenChange,setCollaborator,setIsLoading,setView,sharedLink:sharedLink??{},sharedLinkNotices,sharingService:sharingService??{},variant,view}),[collaborationAccess,collaborationNotices,collaborationRoles,collaborator,collaborators,config,contactService,currentUser,eventService,initialContacts,invitationFormNotices,isFetching,isLoading,isOpen,isSubmitting,item,onOpenChange,sharedLink,sharedLinkNotices,sharingService,variant,view]);return jsx(UnifiedShareModalContext.Provider,{value:contextValue,children})};export{UnifiedShareModalContext,UnifiedShareModalProvider,useUnifiedShareModalContext};
1
+ import{DEFAULT_COLLABORATION_ROLES,DEFAULT_CONFIGURATION}from"../constants.js";import{createContext,useContext,useEffect,useMemo,useState}from"react";import{jsx}from"react/jsx-runtime";var UnifiedShareModalContext=createContext(null),useUnifiedShareModalContext=()=>{let context=useContext(UnifiedShareModalContext);if(!context)throw Error(`useUnifiedShareModalContext must be used with UnifiedShareModalContext.Provider`);return context},UnifiedShareModalProvider=({children,collaborationAccess,collaborationNotices,collaborationRoles,collaborators,config,contactService,currentUser,eventService,initialContacts,invitationFormNotices,isFetching,isOpen,isSubmitting,item,onOpenChange,sharedLink,sharedLinkNotices,sharingService,suggestedCollaborators,variant})=>{let[collaborator,setCollaborator]=useState(null),[isLoading,setIsLoading]=useState(!1),[view,setView]=useState(`unified-share-form`);useEffect(()=>{isOpen||(setIsLoading(!1),setView(`unified-share-form`))},[isOpen]);let contextValue=useMemo(()=>({collaborationAccess,collaborationNotices,collaborationRoles:collaborationRoles??DEFAULT_COLLABORATION_ROLES,collaborator,collaborators:collaborators??[],config:{...DEFAULT_CONFIGURATION,...config},contactService:contactService??{},currentUser:currentUser??{},eventService:eventService??{},initialContacts:initialContacts??[],invitationFormNotices,isFetching,isOpen,isSubmitting:isSubmitting??isLoading,item,onOpenChange,setCollaborator,setIsLoading,setView,sharedLink:sharedLink??{},sharedLinkNotices,sharingService:sharingService??{},suggestedCollaborators:suggestedCollaborators??[],variant,view}),[collaborationAccess,collaborationNotices,collaborationRoles,collaborator,collaborators,config,contactService,currentUser,eventService,initialContacts,invitationFormNotices,isFetching,isLoading,isOpen,isSubmitting,item,onOpenChange,sharedLink,sharedLinkNotices,sharingService,suggestedCollaborators,variant,view]);return jsx(UnifiedShareModalContext.Provider,{value:contextValue,children})};export{UnifiedShareModalContext,UnifiedShareModalProvider,useUnifiedShareModalContext};
@@ -1 +1 @@
1
- import{UnifiedShareModalProvider}from"./contexts/unified-share-modal-context.js";import{UnifiedShareBase}from"./unified-share-base.js";import{useCallback,useEffect,useState}from"react";import{jsx}from"react/jsx-runtime";function UnifiedShareModal({children,collaborationAccess,collaborationNotices,collaborationRoles,collaborators,config,contactService,currentUser,eventService,initialContacts,invitationFormNotices,isFetching,isOpen:isControlledOpen,isSubmitting,item,onLoad,onOpenChange,sharedLink,sharedLinkNotices,sharingService,variant=`modal`}){let[isOpen,setIsOpen]=useState(isControlledOpen??(!children||variant===`desktop`)),[isLoading,setIsLoading]=useState(!!onLoad);useEffect(()=>{isControlledOpen!==void 0&&setIsOpen(isControlledOpen)},[isControlledOpen]),useEffect(()=>{(async()=>{onLoad&&(isOpen&&await onLoad(),setIsLoading(!isOpen))})()},[isOpen,onLoad]);let handleOpenChange=useCallback(open=>{isControlledOpen===void 0&&variant!==`desktop`&&setIsOpen(open),onOpenChange&&onOpenChange(open)},[isControlledOpen,onOpenChange,variant]);return jsx(UnifiedShareModalProvider,{collaborationAccess,collaborationNotices,collaborationRoles,collaborators,config,contactService,currentUser,eventService,initialContacts,invitationFormNotices,isFetching:isFetching??isLoading,isOpen,isSubmitting,item,onOpenChange:handleOpenChange,sharedLink,sharedLinkNotices,sharingService,variant,children:jsx(UnifiedShareBase,{children})})}export{UnifiedShareModal};
1
+ import{UnifiedShareModalProvider}from"./contexts/unified-share-modal-context.js";import{UnifiedShareBase}from"./unified-share-base.js";import{useCallback,useEffect,useState}from"react";import{jsx}from"react/jsx-runtime";function UnifiedShareModal({children,collaborationAccess,collaborationNotices,collaborationRoles,collaborators,config,contactService,currentUser,eventService,initialContacts,invitationFormNotices,isFetching,isOpen:isControlledOpen,isSubmitting,item,onLoad,onOpenChange,sharedLink,sharedLinkNotices,sharingService,suggestedCollaborators,variant=`modal`}){let[isOpen,setIsOpen]=useState(isControlledOpen??(!children||variant===`desktop`)),[isLoading,setIsLoading]=useState(!!onLoad);useEffect(()=>{isControlledOpen!==void 0&&setIsOpen(isControlledOpen)},[isControlledOpen]),useEffect(()=>{(async()=>{onLoad&&(isOpen&&await onLoad(),setIsLoading(!isOpen))})()},[isOpen,onLoad]);let handleOpenChange=useCallback(open=>{isControlledOpen===void 0&&variant!==`desktop`&&setIsOpen(open),onOpenChange&&onOpenChange(open)},[isControlledOpen,onOpenChange,variant]);return jsx(UnifiedShareModalProvider,{collaborationAccess,collaborationNotices,collaborationRoles,collaborators,config,contactService,currentUser,eventService,initialContacts,invitationFormNotices,isFetching:isFetching??isLoading,isOpen,isSubmitting,item,onOpenChange:handleOpenChange,sharedLink,sharedLinkNotices,sharingService,suggestedCollaborators,variant,children:jsx(UnifiedShareBase,{children})})}export{UnifiedShareModal};
@@ -1,5 +1,5 @@
1
1
  import { Dispatch, ReactElement, ReactNode, SetStateAction } from 'react';
2
- import { UserContactType } from '@box/user-selector';
2
+ import { SuggestedCollaborator, UserContactType } from '@box/user-selector';
3
3
  import { CollaborationRole, Collaborator, Configuration, ContactService, EventService, Item, SharedLink, SharingService, User, VariantType, ViewType } from '../types';
4
4
  export interface UnifiedShareModalContextValue {
5
5
  collaborationAccess?: ReactElement;
@@ -24,6 +24,7 @@ export interface UnifiedShareModalContextValue {
24
24
  sharedLink: Partial<SharedLink>;
25
25
  sharedLinkNotices?: ReactElement | ReactElement[];
26
26
  sharingService: SharingService;
27
+ suggestedCollaborators?: SuggestedCollaborator[];
27
28
  variant: VariantType;
28
29
  view: ViewType;
29
30
  }
@@ -49,6 +50,7 @@ export interface UnifiedShareModalProviderProps {
49
50
  sharedLink?: SharedLink;
50
51
  sharedLinkNotices?: ReactElement | ReactElement[];
51
52
  sharingService?: SharingService;
53
+ suggestedCollaborators?: SuggestedCollaborator[];
52
54
  variant: VariantType;
53
55
  }
54
- export declare const UnifiedShareModalProvider: ({ children, collaborationAccess, collaborationNotices, collaborationRoles, collaborators, config, contactService, currentUser, eventService, initialContacts, invitationFormNotices, isFetching, isOpen, isSubmitting, item, onOpenChange, sharedLink, sharedLinkNotices, sharingService, variant, }: UnifiedShareModalProviderProps) => import("react/jsx-runtime").JSX.Element;
56
+ export declare const UnifiedShareModalProvider: ({ children, collaborationAccess, collaborationNotices, collaborationRoles, collaborators, config, contactService, currentUser, eventService, initialContacts, invitationFormNotices, isFetching, isOpen, isSubmitting, item, onOpenChange, sharedLink, sharedLinkNotices, sharingService, suggestedCollaborators, variant, }: UnifiedShareModalProviderProps) => import("react/jsx-runtime").JSX.Element;
@@ -1,5 +1,5 @@
1
1
  import { ReactNode } from 'react';
2
- import { UserContactType } from '@box/user-selector';
2
+ import { UserContactType, SuggestedCollaborator } from '@box/user-selector';
3
3
  import { UnifiedShareModalContextValue } from '../contexts';
4
4
  import { UnifiedShareModalProps } from '../unified-share-modal';
5
5
  import { CollaborationRole, Collaborator, Configuration, Item, SharedLink, SharedLinkSettings } from '../types';
@@ -8,6 +8,7 @@ export declare const mockCollaborators: Collaborator[];
8
8
  export declare const mockCollaboratorsExtended: Collaborator[];
9
9
  export declare const mockConfiguration: Configuration;
10
10
  export declare const mockContacts: UserContactType[];
11
+ export declare const mockSuggestedCollaborators: SuggestedCollaborator[];
11
12
  export declare const mockContactService: {
12
13
  getContacts: (input: any) => Promise<UserContactType[]>;
13
14
  getContactsByEmail: (emails: string[]) => Promise<Record<string, UserContactType>>;
@@ -1,5 +1,5 @@
1
1
  import { ReactElement } from 'react';
2
- import { UserContactType } from '@box/user-selector';
2
+ import { UserContactType, SuggestedCollaborator } from '@box/user-selector';
3
3
  import { CollaborationRole, Collaborator, Configuration, ContactService, EventService, Item, SharedLink, SharingService, User, VariantType } from './types';
4
4
  export interface UnifiedShareModalProps {
5
5
  /**
@@ -90,6 +90,10 @@ export interface UnifiedShareModalProps {
90
90
  * The service for managing the collaborations and shared link of the item.
91
91
  */
92
92
  sharingService?: SharingService;
93
+ /**
94
+ * Candidate collaborators to prioritize in invite dropdown results.
95
+ */
96
+ suggestedCollaborators?: SuggestedCollaborator[];
93
97
  /**
94
98
  * The variant of the Unified Share Modal.
95
99
  *
@@ -99,4 +103,4 @@ export interface UnifiedShareModalProps {
99
103
  */
100
104
  variant?: VariantType;
101
105
  }
102
- export declare function UnifiedShareModal({ children, collaborationAccess, collaborationNotices, collaborationRoles, collaborators, config, contactService, currentUser, eventService, initialContacts, invitationFormNotices, isFetching, isOpen: isControlledOpen, isSubmitting, item, onLoad, onOpenChange, sharedLink, sharedLinkNotices, sharingService, variant, }: UnifiedShareModalProps): import("react/jsx-runtime").JSX.Element;
106
+ export declare function UnifiedShareModal({ children, collaborationAccess, collaborationNotices, collaborationRoles, collaborators, config, contactService, currentUser, eventService, initialContacts, invitationFormNotices, isFetching, isOpen: isControlledOpen, isSubmitting, item, onLoad, onOpenChange, sharedLink, sharedLinkNotices, sharingService, suggestedCollaborators, variant, }: UnifiedShareModalProps): import("react/jsx-runtime").JSX.Element;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@box/unified-share-modal",
3
- "version": "3.3.13",
3
+ "version": "3.4.0",
4
4
  "license": "SEE LICENSE IN LICENSE",
5
5
  "peerDependencies": {
6
6
  "@box/blueprint-web": "^16.20.6",