{"version":3,"sources":["helpers/typeCheck.ts","helpers/globalHelper.ts","data/enums.ts","i18n/en.ts","i18n/nl.ts","i18n/context.ts","helpers/appSettings.ts","components/Translate.tsx","components/ItemModificationQueue.tsx","components/ActionBar.tsx","helpers/avatarHelper.ts","components/PickDestinationDialog.tsx","components/CommandBarDropdown.tsx","components/CommandBar.tsx","components/LoadingIndicator.tsx","components/DataLoadingSpinner.tsx","components/RenameDialog.tsx","helpers/iconHelper.ts","components/MessageDialog.tsx","components/ShareDialog.tsx","components/DriveItemsList.tsx","components/MessageBar.tsx","components/BreadCrumbNavigation.tsx","components/BasePanel.tsx","components/ActionButtonList.tsx","msal/auth.ts","components/TenantInvalidMessage.tsx","components/TopNavigationBar.tsx","components/TreeViewNavigator.tsx","msal/config.ts","msal/cache.ts","data/HierarchialDataManager.ts","data/ServiceClient.ts","helpers/errorHelper.ts","data/EasyTemplateClient.ts","components/EasyTemplateDialog.tsx","App.tsx","index.tsx"],"names":["isSite","instance","id","indexOf","isRecycleBin","startsWith","isDrive","isOneDrive","isDriveItem","ActionType","ActionScope","HierarchialDataScope","MessageBarType","MessageDialogType","ErrorVisibility","ValidateName","name","length","match","Guid","Object","classCallCheck","this","createClass","key","value","replace","c","r","Math","random","toString","httpErrors","Code","Description","HTTPstatuscode","errors","internalErrorCode","correlationId","message","errorVisibility","GlobalDialog","MessageBar","getErrors_nl","getError_nl","errorResult","error","find","undefined","LanguageContext","React","AppSettingsProvider","userKey","concat","navigatorWidth","preferredLanguage","DEFAULT_FALLBACK_LANGUAGE","legacyJson","window","localStorage","getItem","legacySettings","JSON","parse","set","width","removeItem","_unused","console","warn","defaultSettings","defaults","json","migrate","_unused2","newSettings","setItem","stringify","languages","en","ActionBar","fileLabelRecycleBin","buttonFileText","buttonMoveAllText","buttonCopyAllText","buttonRefreshText","buttonDeleteText","buttonDeleteAllText","buttonRestoreText","buttonFolderText","buttonFolderCreateText","buttonDocumentCreateText","buttonNewDocumentText","newDocumentInputLabel","buttonEasyTemplate","fileAddingFailedMessage","fileTooLargeMessage","folderNameInputLabel","folderCreatingFailedMessage","nameEmptyErrorMessage","nameValidationErrorMessage","AlertDialog","loadingIndicatorMessage","App","errorDialogTitle","moveFileFailedMessage","copyFileFailedMessage","moveFileFailedMessageResult","copyFileFailedMessageResult","noSitesFoundMessage","oneDrivesDatasetName","favoriteSitesDatasetName","sharePointSitesDatasetName","noTreeviewItemSelectedMessage","noContentsToShowForSites","moveFileMessageDialogTitle","copyFileMessageDialogTitle","moveFileMessageDialogSourceAndTargetAreEqualMessage","copyFileMessageDialogSourceAndTargetAreEqualMessage","tenantIsValidSPOFailedMessage","BasePanel","closeButtonAriaLabel","CommandBar","searchBoxPlaceHolderText","searchBoxTooltipText","CommandBarDropdown","linkSignOutText","myAccountText","DataLoadingSpinnner","DriveItemsList","appNotAvailableMessage","columnHeaderNameTitle","columnHeaderSizeTitle","columnHeaderModifiedTitle","columnHeaderOriginalLocationTitle","columnHeaderDeletedByTitle","columnHeaderDeletedOnTitle","contextMenuItemRestoreText","contextMenuItemOpenInBrowserText","contextMenuItemOpenInAppText","contextMenuItemRenameText","contextMenuItemCopyText","contextMenuItemDownloadText","contextMenuItemRemoveText","contextMenuItemMoveText","contextMenuItemShareText","confirmDeletePreFixMessage","confirmDeletePostFixMessage","failedDeleteMessage","failedDeletePreFixMessage","failedDeletePostFixMessage","failedRenameMessage","messageDialogConfirmTitle","noDownloadAvailableMessage","noFilesOrFoldersMessage","fileLabelFile","fileLabelOf","folderInDragnDropSelectionMessage","folderPostFixTitle","ItemModificationQueue","addMessage","uploadMessage","removeMessage","restoreMessage","emptyMessage","updateMessage","renameMessage","moveMessage","copyMessage","loadMessage","batchRemoveMessage","batchMoveMessage","batchCopyMessage","labelFile","labelFolder","MessageDialog","buttonNoText","buttonYesText","buttonCloseText","DestinationDialog","breadCrumbKey0Title","loadingMessage","loadingIndicatorMoveMessage","emptyFolderMoveText","loadingIndicatorCopyMessage","emptyFolderCopyText","moveToHereText","copyToHereText","CopyDialog","emptyFolderText","ProgressBar","buttonCancelText","labelCancelText","labelInitText","modalTitle","RenameDialog","dialogTitle","newFileNameInputText","newFolderNameInputText","buttonSaveText","nameLabel","ShareDialog","copyShareLinkToClipboardText","creatingLinkMessage","createdLinkMessage","TenantInvalidMessage","licenseInValidMessage","signedInUserText","linkSignOutTooltipText","SPOInValidMessage","TreeViewNavigator","permissionControlText","reloadItemText","loadingText","followSite","unfollowSite","upload","cancel","clearSelectedFiles","dropFilesHere","headerStatusUploaded","headerStatusUploading","invalidFileExtension","invalidFiles","invalidMaxFileSize","invalidMinFileSize","remove","retry","select","uploadSelectedFiles","total","files","EasyTemplateDialog","Title","Error","Close","Retry","Back","Next","Unlicensed","Word","Excel","PowerPoint","Site","Sites","Library","Libraries","Folder","Folders","Templates","Loading","CreatingFile","ForWhichApplication","EnterMetadata","FilenameHelp","Preview","CopySuccesfull","NewFile","SelectTemplate","NoTemplatesFound","NoPreviewFound","SearchText","ChooseLocation","SitePages","SelectTag","NoDescriptionText","NoTagsText","nl","resolveUserPreferredLanguage","userkey","get","translateComponent","Component","TranslationComponent","_React$Component","possibleConstructorReturn","getPrototypeOf","apply","arguments","inherits","language","userPreferredLanguage","substring","react","assign","props","state","i18n","contextType","getLanguages","getLanguagesErrors","languageCode","getTranslation","componentName","keyName","languageResourceObject","getError","getError_en","ModificationType","_this","call","unloadMessage","e","preventDefault","returnValue","queue","intervalId","_this2","setState","modifications","addEventListener","checkProgressStatus","setInterval","prevProps","removeEventListener","clearInterval","self","_this3","modifiedQueue","forEach","item","monitorUrls","url","onMonitorProgressEvent","then","status","splice","onStatusCompleteEvent","modification","items","type","ADD","displayName","UPLOAD","REMOVE","isContainer","UPDATE","RESTORE","RENAME","MOVE","COPY","LOAD","onClose","_this4","currentModifications","index","push","react_default","a","createElement","className","ProgressIndicator","barHeight","label","getModificationMessage","onClick","handleOnDismiss","bind","Icon","iconName","Localization","addFileAnchor","addFolderAnchor","newDocumentAnchor","documentTypeItems","fileSelector","handleFileSelectorChange","_ref","asyncToGenerator","regenerator_default","mark","_callee","event","isFileTooBig","wrap","_context","prev","next","closeMessageBar","target","size","abrupt","showMessageBar","Warning","loadedContainer","dummyItems","getDummyItems","FilesAddingEvent","_loop","formData","FormData","append","driveId","path","referenceId","rootScope","OneDrives","FileCreationEvent","result","FileAddedEvent","objectSpread","isAdding","parentItem","catch","DummyFileRemoveEvent","stop","_x","handleClickOutside","domNode","ReactDOM","findDOMNode","assertThisInitialized","contains","filePopupNode","document","getElementById","folderPopupNode","documentPopupNode","newState","addFilePopupOpen","addFolderPopupOpen","newDocumentPopupOpen","handleEscapeKey","keyCode","NewDocumentOnClickHandler","documentType","newDocumentType","buttonCreateDisabled","showErrorMessageEmpty","showErrorMessageRegEx","AddFileOnClickHandler","AddFolderOnClickHandler","RefreshItemListOnClickHandler","RefreshItemListEvent","DeleteSelectedItemsHandler","DeleteSelectedItemsEvent","EmptyRecycleBinClickHandler","EmptyRecycleBinEvent","RestoreRecycleBinItemClickHandler","RestoreRecycleBinItemEvent","MoveSelectedItemsHandler","MoveSelectedItemsEvent","CopySelectedItemsHandler","CopySelectedItemsEvent","EasyTemplateOnClickHandler","EasyTemplateOpenEvent","handleNewFolderSubmit","stopPropagation","folderName","newDocumentOrFoldername","dummyItem","getSkeletonInstance","FolderCreatingEvent","data","Name","DriveId","ParentId","FilePath","ReferenceId","IsOneDrive","FolderCreationEvent","FolderCreatedEvent","handleNewDocumentSubmit","documentName","extension","isProcessing","DocumentCreatingEvent","Type","FolderPath","DocumentCreationEvent","DocumentCreatedEvent","handleChange","trim","handleFocus","handleFileSelect","click","text","icon","inRecycleBin","itemsSelected","buildFileSelector","elements","Array","from","getElementsByClassName","_step","_iterator","_createForOfIteratorHelper","s","n","done","setAttribute","err","f","rawFiles","newItems","newGuid","children","isUpdating","isDeleting","isExpanded","isDirty","indexPath","isLoaded","isLoading","isMoving","_this$state","ref","button","es_main","primary","itemRender","iconType","IconType","image","imageProps","src","resolveDocumentTypeItemIcon","disabled","onItemClick","clickedElement","allowShowEasyTemplate","main","show","popupClass","anchor","onSubmit","dist_es_main","minLength","required","autoComplete","autoFocus","onChange","onFocus","colors","Panels","showPanel","forceRender","displayPhoto","user","imageDataURL","imgDataURL","photoElement","onSignOut","_this$props$user","userInitials","userPrincipalName","isPhotoAvailable","alt","avatarColor","Link","handleLinkClick","handleCommandBarDropdownClose","profileButtonSelectedClassName","handleSearchBoxChange","newValue","keyword","handleTooltipHostButtonClick","onSearch","handleUserManualButtonClick","fullPath","fileExists","location","origin","open","dialogType","messageDialogContext","showMessageDialog","colorId","sum","isNaN","charCodeAt","calculateColor","Promise","resolve","fetch","response","ok","SearchBox","placeholder","handleSearchBoxSearch","hidden","TooltipHost","content","calloutProps","gapSpace","closeDelay","styles","root","display","height","handleProfileButtonClick","components_CommandBarDropdown","handleCommandBarDropdownSignOut","LoadingIndicator","LoadingIndicator_LoadingIndicator","fileExtensionWithPeriod","buttonSaveDisabled","_dragOptions","moveMenuItemText","closeMenuItemText","menu","ContextualMenu","handleOnChange","newName","getItemData","_this$props","showRenameDialog","fileName","fileExtension","getFileName","getFileExtension","isResizable","isDraggable","_this$props2","onSave","handleButtonClose","lastIndex","lastIndexOf","substr","_this$getItemData","Modal","isOpen","onDismiss","isModeless","containerClassName","dragOptions","isBlocking","TextField","defaultValue","suffix","handleButtonSave","IconHelper","_extensionToIconName","GENERIC_FILE","FileTypeIconMap","hasOwnProperty","extensions","i","toLowerCase","accdb","archive","audio","channelfolder","code","css","csv","docset","docx","dotx","email","exe","folder","font","genericfile","html","link","linkedfolder","splist","model","mpp","mpt","one","onetoc","pdf","photo","photo360","potx","ppsx","pptx","presentation","pub","spo","sponews","spreadsheet","rtf","sharedfolder","sway","sysfile","txt","vector","video","video360","vsdx","vssx","vstx","xlsx","xltx","xml","xsn","zip","onCloseEvent","messageContext","actionType","onButtonConfirmClickedEvent","showDialog","handleOnDismissModal","dangerouslySetInnerHTML","__html","Confirm","handleOnClickButtonYes","handleOnClickButtonNo","linkIcon","copyCodeToClipboard","webUrl","navigator","clipboard","writeText","copy","isCopySuccess","isCopyInactive","isCopyActive","shareContext","siteOrOneDriveUrl","found","driveIsOneDrive","driveUrl","GetSiteOrOneDriveUrl","onCreateShareLink","IconButton","iconProps","title","handleOnClickCopyLink","offset","dataItemIndex","_iconHelper","_isMounted","_mouseCoordinates","handleMousemove","x","y","handleUploadDragEnter","dataTransfer","kind","dragging","uploading","handleUploadDragLeave","handleUploadDragOver","handleUploadDrop","persist","isFolderIncluded","entry","webkitGetAsEntry","isFile","isDirectory","sortedFiles","sort","b","itemsCreatingEvent","_index3","_context2","UploadDriveItem","delegateYield","clearData","onFolderClick","itemClickedEvent","onDragStartHandler","setData","onDragEnterHandler","classList","parentElement","style","border","onDragLeaveHandler","onDragOverHandler","dropEffect","rowRender","row","rowProps","onContextMenu","ItemOnContextMenuHandler","dataItem","cloneElement","findIndex","p","left","clientX","top","scrollY","clientY","disableMenuItemOpenInApp","isFolder","itemPopupOpen","getUriPrefixForOpenInApp","uriPrefix","handleItemRemove","itemRemoveEvent","handleItemRestore","itemRestoreEvent","handleItemDelete","itemDeleteEvent","handleItemMove","itemMoveEvent","handleItemCopy","itemCopyEvent","handleItemRename","selectedItem","renameItem","itemRenameEvent","handleItemDownload","iframe","body","appendChild","downloadUrl","handleItemOpenInBrowser","handleItemOpenInApp","uriPrefixFull","endsWith","uri","customProtocolCheck","appName","fullAppName","getAppFullName","messageJSXFormed","showMessageBarJSXFormed","log","handleItemShare","shareDialogContext","handleItemContextMenuOnSelect","resetItemPopup","customSort","sortDefinitions","folders","filter","dir","toConsumableArray","orderBy","handleCloseRenameDialog","handleSaveRenameDialog","handleHeaderSelectionChange","checked","syntheticEvent","map","isSelected","itemsSelectedEvent","handleSelectionChange","selected","some","element","testFailedMessages","search","sortDefinition","cancelClicked","field","popup","offsetLeft","scrollLeft","offsetTop","scrollTop","right","offsetWidth","bottom","offsetHeight","rawFile","parentContainer","reject","itemCreationEvent","itemCreatedEvent","driveItem","_getFileTypeIconNameFromExtension","join","resolveDriveItemIcon","marginRight","verticalAlign","resolveNameFieldClassName","cursor","draggable","onDragStart","onDrop","onDropHandler","onDragEnter","onDragLeave","onDragOver","href","rel","sourceItem","getData","itemDroppedEvent","array","count","folderChildCount","formatBytes","deletedBy","dateLM","deletedDate","require","Moment","locale","dateUTC","utc","toDate","dateLocalized","local","format","bytes","decimals","k","dm","sizes","floor","pow","uom","toFixed","lastModified","fileType","appFullName","Add","Update","handleCloseMessageDialog","createShareLink","messageDialogType","_this5","position","backgroundColor","zIndex","kendo_react_grid_dist_es_main","selectedField","onSelectionChange","onHeaderSelectionChange","resizable","sortable","allowUnsort","onSortChange","headerSelectionValue","cell","buildNameColumn","buildFileSizeColumn","originalLocation","buildFileDeletedByColumn","buildDateTimeColumn","buildFileDeletedOnColumn","kendo_react_layout_dist_es_main","vertical","padding","onSelect","cssClass","components_RenameDialog","components_MessageDialog","handleConfirmMessageDialog","components_ShareDialog","handleCloseShareDialog","handleCreateShareLink","messageType","Info","MessageType","info","Success","success","warning","MessageBar_MessageBar","messageBarType","isMultiline","handleClose","BreadCrumbNavigation","_onBreadcrumbItemClicked","static","navigationChanged","Breadcrumb","overflowIndex","onRenderHeader","defaultRenderer","breadcrumb","enable","components_BreadCrumbNavigation","onBreadcrumbNavigationChanged","breadcrumbNavigationChanged","Fabric","Panel","PanelType","medium","handleDismiss","headerText","subText","ActionButtonList","actionButtonItemClickedHandler","classNameButtonIconColor","ActionButton","onItemActionClicked","_pendingRequest","_msalInteractionCacheKey","_msalApp","_msalConfig","_signInType","_sessionCache","_verboseLogging","_accountId","_resourceScope","SignInType","PickDestinationDialog","loading","active","activePanel","SITES_AND_ONEDRIVE","context","currentItems","selectedSite","selectedDrive","selectedDriveItem","oneDrives","sites","drives","driveItems","historyOfStates","updatedHistory","child","SUBSITES_AND_DRIVES","toggleLoading","reloadItemRequestEvent","loadedItem","DRIVEITEMS","targetContainer","_this$state$context","currentDriveItems","modificationType","onMoveItemClickedEvent","onCopyItemClickedEvent","onPanelClose","navigationKey","navigationIndex","Number","restoredState","onPanelCloseEvent","components_BasePanel","components_ActionButtonList","oneDrive","driveSelectedHandler","site","siteSelectedHandler","drive","driveItemSelectedHandler","PrimaryButton","buttonDriveItemClicked","allowDisabledFocus","isDarkOverlay","activeUser","str","_len","values","_key","parameterIndex","templateSplit","RegExp","isNumber","split","sentence","test","handleSignOutClick","TopNavigationBar","contextMenuOffset","contextMenuDataMember","ItemOnExpandChangeHandler","loadChildNodes","ItemOnClickHandler","treeViewItem","enabledKeys","contextMenu","itemContextMenuClickedEvent","sourceTreeviewNode","onRenderTreeViewItem","resolveTreeViewNodeItemClass","resolveTreeViewNodeIcon","resolveTreeViewNodeClass","enabledContextMenuKeys","isFollowing","color","treeViewItems","newTreeViewItems","buildTreeView","treeNode","expanded","hasChildren","scope","Favorites","AllSites","expandingOnly","itemExpandedChangeEvent","globalErrorMessageEvent","itemSelectedEvent","targetTreeviewNode","_this6","_this7","resolveRootNodeIcon","resolveTreeViewTopNodeClass","kendo_react_treeview_dist_es_main","expandIcons","onExpandChange","aria-multiselectable","enableContextMenu","auth","clientId","redirectUri","cache","cacheLocation","storeAuthStateInCookie","system","loggerOptions","loggerCallback","level","containsPii","msal","Verbose","debug","CacheHelper","_cacheStorage","sessionStorage","setCacheEntry","hasCacheEntry","clearCacheEntry","ua","userAgent","msie","msie11","isIE","ssoRequest","scopes","redirectRequest","popupRequest","loadConfig","config","preferredSignInType","verboseLogging","account","getCurrentAccount","homeAccountId","includeDomainHint","getUniqueUserId","localAccountId","signIn","accounts","signInTypeToUse","resp","hasPendingMsalInteraction","waitForPendingRedirectToFinish","getAllAccounts","logEntry","username","getSignInType","POPUP","loginPopup","sent","handleAuthenticationResponse","t0","REDIRECT","loginRedirect","getToken","_ref2","_callee2","currentAccount","deferredResult","acquireTokenPopup","acquireTokenRedirect","accessToken","apiFetch","_ref3","_callee3","options","token","o","_args3","_context3","headers","Authorization","cacheEntry","getCacheEntry","requestInfo","domainHint","URLSearchParams","getAccountByHomeId","handleRedirectPromise","currentAccounts","_ref4","_callee5","request","_context5","acquireTokenSilent","_ref5","_callee4","_context4","_x4","_x2","_x3","_ref6","_callee7","_context7","_ref7","_callee6","_context6","_x7","_x5","_x6","HierarchialDataManager","predicate","currentItem","pop","currentIndexLevel","treeviewIndex","currentParent","trail","reverse","container","shallowCopy","cloneDeep","newIndex","newChild","sortItems","sorter","natsort","insensitive","containers","currentChild","baseItem","itemIndex","stack","currentChildren","childIndex","dataSet","itemIsSet","previousParentId","newParentId","ServiceClient","_baseUrl","action","accept","Content-Type","method","endpoint","contentType","isJson","ApiRequest","dataSetName","siteCollectionHostname","GetFollowedSites","updatedDataset","GetSites","GetOneDriveDrives","recycleBinLabel","requests","GetDriveItems","GetDrives","GetRecycleBin","GetRecycleBinItems","all","results","shallowItem","newChildrens","siteId","actionName","parentId","folderPath","Path","DriveIsOneDrive","siteUrl","_this8","_this9","itemIds","monitorUrl","WebUrl","_this10","_this11","itemId","_this12","_this13","driveItemResult","sourceDriveItem","sourceDriveItemIds","sourceDriveItemNames","sourceDriveItemReferences","destinationDriveId","destinationItemId","destinationFolderPath","destinationIsOneDrive","_this14","ItemIds","ItemNames","ItemReferenceIds","destinationPath","_this15","_this16","reason","_this17","ApiRequestWithoutToken","_this18","rootdata","errorDescription","httpStatusCode","m","getErrorDescription","_this19","list","_this20","_this21","_this22","_this23","organizationData","_this24","_this25","_this26","_this27","Client","client","serviceClient","settings","_LoadSettings","Get","templatesSite","templatesDocumentLibrary","_GetLicense","licensingService","userId","licensingContext","LicensingServiceFactory","t1","enableLogging","proxyRequestHost","host","authContext","t2","GetService","AcquireLicenseForProductAndFeatures","isValid","t3","expiration","expires","Date","now","_unused3","exp","parseInt","_unused4","_unused5","_loadListItems","listId","cachedTemplates","templateResult","templates","GetCache","fields","hostType","OfficeHostType","Unknown","imgURL","thumbnails","imgObj","serverUrl","serverRelativeUrl","_unused7","docPreview","etag","docID","_unused8","tags","_unused9","template","description","parentReference","folderId","webURL","docPreviewUrl","imageURL","_unused10","SetCache","_GetWordTemplates","wordTemplates","loadListItems","t","_GetPowerPointTemplates","_GetExcelTemplates","_CopyFile","source","resultFile","Post","destinationNames","_GetSitesForUser","_callee8","_context8","_GetDrivesForSite","_callee9","_context9","_GetFoldersInDrive","_callee10","pageToken","_context10","nextPageToken","_x8","_x9","_x10","_GetClient","_callee11","_context11","LoadSettings","_x11","GetClient","newProps","activeItem","templates_ui_lib","strings","initializeIcons","_serviceClient","_hierarchialDataManager","_appSettings","_appInsights","handleItemModificationQueueClose","showModificationQueuePanel","onedrives","favoriteSites","allSites","isInitialized","isLoadingContainer","itemModifications","siteName","rootWebUrl","destinationContext","copyItems","navigationStack","messageBarContext","showEasyTemplateDialog","easyTemplateIsLicensed","ConfigureAppInsights","metadata","AppInsightsInstrumentationKey","instrumentationKey","appInsights","ApplicationInsights","connectionString","enableRequestHeaderTracking","enableResponseHeaderTracking","enableAjaxErrorStatusText","enableUnhandledPromiseRejectionTracking","disableTelemetry","disableFetchTracking","enableCorsCorrelation","userName","validatedId","loadAppInsights","setAuthenticatedUserContext","trackPageView","modifiedState","GetRootData","rootData","easyTemplateClient","GetLicense","isLicensed","GetUser","DetermineUserLanguage","GetOrganizationData","organization","ResolveUserAndOrganization","hasProductLicense","trackEvent","CollectRootData","stateWithRootData","applyDataSet","CheckEasyTemplateLicense","dataSetResult","loadedDataSet","loadDataSetAsync","currentDataSet","GetDataSetOfItem","loadItemAsync","refreshedItem","skipNavigationRebuild","buildNavigationStack","promise","itemsModification","urls","parentSite","ResolveSPList","encodeGuid","globalErrorMessageHandler","addItemAtRoot","FollowSite","removeItemFromRoot","UnfollowSite","resetItem","guid","encodeURIComponent","currentStack","findItem","removeFromNavigationStack","treeViewItemSelectedEvent","dataset","getItemPath","setItemAsChild","enqueueItemModification","RenameItemAsync","renamedItemX","renamedItem","dequeueItemModification","itemReference","itemUrl","siteFound","siteItem","RestoreItemAsync","removeItemAsChild","sisterParentSite","sisterDataSet","encodedLocationUri","encodeURI","URL","parentLocation","FindDriveOrDriveItem","parentSisterLocation","FindParentSite","recycleBin","DeleteRecycleBinItemAsync","sourceItems","MoveItems","CopyItems","ActionBarItemsCreatingHandler","addItemsAsChildren","treeItem","EMPTY","EmptyRecycleBinAsync","sisterContainer","selectedItems","setItemsAsChildren","taskIndex","taskError","taskResult","exception","ResetRestoredItemInState","appState","ResetItemInDataSet","ResetRecycleBinOfSite","DeleteItemsAsync","sisterParentLocation","sisterRecycleBin","DriveItemListItemMoveHandler","DriveItemListItemCopyHandler","ActionBarItemCreatedHandler","MoveDriveItems","itemResult","errorItems","copyAndDeleteResult","sourceDataSet","sisterSourceContainer","targetDataSet","itemDescendantOf","resetItemInContainer","itemName","CopyDriveItems","setMonitorUrlsForItemModifications","CreateDocument","CreateFolder","CreateFile","logoutRequest","logoutRedirect","CheckOperationStatusAsync","_this28","CreateShareLink","ActionBarRefreshItemListHandler","_this29","Provider","components_TenantInvalidMessage","logoutButtonClickedHandler","contents","DataLoadingSpinner","components_MessageBar","components_ActionBar","ActionBarDeleteSelectedItemsHandler","EmptyRecycleBinHandler","RestoreRecycleBinItemHandler","ActionBarMoveSelectedItemsHandler","ActionBarCopySelectedItemsHandler","ActionBarCreateDocumentHandler","ActionBarItemCreatingHandler","ActionBarDocumentCreatedHandler","ActionBarCreateFolderHandler","ActionBarCreateFileHandler","DummyItemRemoveHandler","handleCloseMessageBar","OpenEasyTemplate","components_DriveItemsList","DriveItemListFolderClickedHandler","DriveItemListItemRestoreHandler","DriveItemListItemDeleteHandler","DriveItemListItemRenameHandler","treeViewItemDroppedHandler","DriveItemListItemSelectedHandler","CreateShareLinkHandler","components_PickDestinationDialog","MoveDialogItemClickedHandler","CopyDialogItemClickedHandler","ReloadItemRequestHandler","DestinationDialogCloseHandler","Fragment","components_ItemModificationQueue","actionCompletedEvent","actionFailedEvent","handleMonitorProgress","handleStatusComplete","components_CommandBar","SearchBoxItemChangedHandler","components_TopNavigationBar","navigationStackClicked","re_resizable_lib","defaultSize","bounds","onResizeStop","direction","elementRef","delta","components_TreeViewNavigator","treeViewItemExpandedEvent","treeViewItemContextMenuClickedEvent","Version","Sprint","Build","components_EasyTemplateDialog","CloseEasyTemplate","msalConfig","AppId","AcquireLicenseForProduct","hasLicense","render","src_App"],"mappings":"8YAGO,SAASA,EAAOC,GACrB,MAAO,WAAYA,GAAYA,EAASC,GAAGC,QAAQ,MAAQ,EAItD,SAASC,EAAaH,GAC3B,OAAOA,EAASC,GAAGG,WAAW,MAIzB,SAASC,EAAQL,GACtB,MAAO,aAAcA,EAIhB,SAASM,EAAWN,GACzB,MAAO,aAAcA,GAAaA,EAAoBM,WAIjD,SAASC,EAAYP,GAC1B,MAAO,aAAcA,ECrBhB,ICHKQ,EAMAC,EAMAC,EAMAC,EAOAC,EAKAC,ED3BCC,EAAe,SAACC,GAC3B,GAAIA,EAAKC,OAAS,EAAG,CAEnB,GAAID,EAAKE,MADK,0BACS,OAAO,EAEhC,OAAO,GAGIC,EAAb,oBAAAA,IAAAC,OAAAC,EAAA,EAAAD,CAAAE,KAAAH,GAAA,OAAAC,OAAAG,EAAA,EAAAH,CAAAD,EAAA,OAAAK,IAAA,UAAAC,MAAA,WAEI,MAAO,uCAAuCC,QAAQ,QAAS,SAC7DC,GAEA,IAAIC,EAA6B,GAAhBC,KAAKC,SAAiB,EAEvC,OADoB,MAANH,EAAYC,EAAS,EAAJA,EAAW,GACjCG,SAAS,UAPxBZ,EAAA,aCXYV,uFAMAC,uKAMAC,6GAMAC,kHAOAC,sEAKAC,oGC3BG,IA4PTkB,EAAa,CACjB,CACEC,KAAM,eACNC,YAAa,4DACbC,eAAgB,KAElB,CACEF,KAAM,uBACNC,YAAa,sCACbC,eAAgB,KAElB,CACEF,KAAM,mBACNC,YAAa,qCACbC,eAAgB,KAElB,CACEF,KAAM,eACNC,YAAa,sDACbC,eAAgB,KAElB,CACEF,KAAM,iBACNC,YAAa,yCACbC,eAAgB,KAElB,CACEF,KAAM,eACNC,YAAa,mCACbC,eAAgB,KAElB,CACEF,KAAM,kBACNC,YAAa,kDACbC,eAAgB,KAElB,CACEF,KAAM,oBACNC,YAAa,0CACbC,eAAgB,KAElB,CACEF,KAAM,aACNC,YAAa,2CACbC,eAAgB,KAElB,CACEF,KAAM,eACNC,YAAa,8CACbC,eAAgB,KAElB,CACEF,KAAM,mBACNC,YACE,kGACFC,eAAgB,KAElB,CACEF,KAAM,iBACNC,YACE,6EACFC,eAAgB,KAElB,CACEF,KAAM,sBACNC,YACE,uGACFC,eAAgB,KAElB,CACEF,KAAM,oBACNC,YAAa,0CACbC,eAAgB,KAElB,CACEF,KAAM,kBACNC,YAAa,mCACbC,eAAgB,KAIlB,CACEF,KAAM,4BACNC,YACE,qKACFC,eAAgB,KAElB,CACEF,KAAM,0BACNC,YACE,iMACFC,eAAgB,KAElB,CACEF,KAAM,0BACNC,YACE,qEACFC,eAAgB,KAElB,CACEF,KAAM,gCACNC,YACE,sPACFC,eAAgB,MAQpB,IAAMC,EAAmB,CACvB,CACEC,kBAAmB,IACnBC,cAAe,GACfC,QAAS,gEACTC,gBAAiB1B,EAAgB2B,cAEnC,CACEJ,kBAAmB,IACnBC,cAAe,GACfC,QACE,6EACFC,gBAAiB1B,EAAgB2B,cAEnC,CACEJ,kBAAmB,IACnBC,cAAe,GACfC,QAAS,gEACTC,gBAAiB1B,EAAgB2B,cAEnC,CACEJ,kBAAmB,IACnBC,cAAe,GACfC,QAAS,gDACTC,gBAAiB1B,EAAgB2B,cAEnC,CACEJ,kBAAmB,IACnBC,cAAe,GACfC,QAAS,wDACTC,gBAAiB1B,EAAgB2B,cAEnC,CACEJ,kBAAmB,IACnBC,cAAe,GACfC,QACE,8EACFC,gBAAiB1B,EAAgB2B,cAEnC,CACEJ,kBAAmB,IACnBC,cAAe,GACfC,QAAS,gDACTC,gBAAiB1B,EAAgB4B,YAEnC,CACEL,kBAAmB,IACnBC,cAAe,GACfC,QAAS,gCACTC,gBAAiB1B,EAAgB4B,YAEnC,CACEL,kBAAmB,IACnBC,cAAe,GACfC,QAAS,mDACTC,gBAAiB1B,EAAgB2B,cAEnC,CACEJ,kBAAmB,IACnBC,cAAe,GACfC,QAAS,8CACTC,gBAAiB1B,EAAgB2B,cAEnC,CACEJ,kBAAmB,IACnBC,cAAe,GACfC,QAAS,mEACTC,gBAAiB1B,EAAgB2B,cAEnC,CACEJ,kBAAmB,IACnBC,cAAe,GACfC,QAAS,8CACTC,gBAAiB1B,EAAgB2B,cAEnC,CACEJ,kBAAmB,IACnBC,cAAe,GACfC,QAAS,kEACTC,gBAAiB1B,EAAgB4B,YAEnC,CACEL,kBAAmB,IACnBC,cAAe,GACfC,QACE,oEACFC,gBAAiB1B,EAAgB2B,cAEnC,CACEJ,kBAAmB,IACnBC,cAAe,GACfC,QAAS,wCACTC,gBAAiB1B,EAAgB2B,cAEnC,CACEJ,kBAAmB,IACnBC,cAAe,GACfC,QACE,8FACFC,gBAAiB1B,EAAgB2B,cAEnC,CACEJ,kBAAmB,IACnBC,cAAe,GACfC,QACE,wJACFC,gBAAiB1B,EAAgB2B,cAEnC,CACEJ,kBAAmB,IACnBC,cAAe,GACfC,QAAS,6DACTC,gBAAiB1B,EAAgB2B,cAEnC,CACEJ,kBAAmB,IACnBC,cAAe,GACfC,QAAS,6CACTC,gBAAiB1B,EAAgB2B,eCjetB,IA0PTT,EAAa,CACjB,CACEC,KAAM,eACNC,YACE,iEACFC,eAAgB,KAElB,CACEF,KAAM,uBACNC,YAAa,kCACbC,eAAgB,KAElB,CACEF,KAAM,mBACNC,YAAa,kDACbC,eAAgB,KAElB,CACEF,KAAM,eACNC,YAAa,4DACbC,eAAgB,KAElB,CACEF,KAAM,iBACNC,YAAa,uCACbC,eAAgB,KAElB,CACEF,KAAM,eACNC,YAAa,oCACbC,eAAgB,KAElB,CACEF,KAAM,kBACNC,YAAa,mDACbC,eAAgB,KAElB,CACEF,KAAM,oBACNC,YAAa,uBACbC,eAAgB,KAElB,CACEF,KAAM,aACNC,YAAa,gDACbC,eAAgB,KAElB,CACEF,KAAM,eACNC,YAAa,uDACbC,eAAgB,KAElB,CACEF,KAAM,mBACNC,YACE,0IACFC,eAAgB,KAElB,CACEF,KAAM,iBACNC,YACE,iGACFC,eAAgB,KAElB,CACEF,KAAM,sBACNC,YACE,qHACFC,eAAgB,KAElB,CACEF,KAAM,oBACNC,YAAa,gDACbC,eAAgB,KAElB,CACEF,KAAM,kBACNC,YAAa,qCACbC,eAAgB,KAIlB,CACEF,KAAM,4BACNC,YACE,yKACFC,eAAgB,KAElB,CACEF,KAAM,0BACNC,YACE,2MACFC,eAAgB,KAElB,CACEF,KAAM,0BACNC,YAAa,8DACbC,eAAgB,KAElB,CACEF,KAAM,gCACNC,YACE,gQACFC,eAAgB,MAIb,SAASQ,IACd,OAAOX,EAGT,IAAMI,EAAmB,CACvB,CACEC,kBAAmB,IACnBC,cAAe,GACfC,QACE,+EACFC,gBAAiB1B,EAAgB2B,cAEnC,CACEJ,kBAAmB,IACnBC,cAAe,GACfC,QACE,mFACFC,gBAAiB1B,EAAgB2B,cAEnC,CACEJ,kBAAmB,IACnBC,cAAe,GACfC,QAAS,mEACTC,gBAAiB1B,EAAgB2B,cAEnC,CACEJ,kBAAmB,IACnBC,cAAe,GACfC,QAAS,mEACTC,gBAAiB1B,EAAgB2B,cAEnC,CACEJ,kBAAmB,IACnBC,cAAe,GACfC,QAAS,6DACTC,gBAAiB1B,EAAgB2B,cAEnC,CACEJ,kBAAmB,IACnBC,cAAe,GACfC,QACE,qGACFC,gBAAiB1B,EAAgB2B,cAEnC,CACEJ,kBAAmB,IACnBC,cAAe,GACfC,QAAS,4CACTC,gBAAiB1B,EAAgB4B,YAEnC,CACEL,kBAAmB,IACnBC,cAAe,GACfC,QAAS,8BACTC,gBAAiB1B,EAAgB4B,YAEnC,CACEL,kBAAmB,IACnBC,cAAe,GACfC,QAAS,0DACTC,gBAAiB1B,EAAgB2B,cAEnC,CACEJ,kBAAmB,IACnBC,cAAe,GACfC,QAAS,wDACTC,gBAAiB1B,EAAgB2B,cAEnC,CACEJ,kBAAmB,IACnBC,cAAe,GACfC,QACE,oEACFC,gBAAiB1B,EAAgB2B,cAEnC,CACEJ,kBAAmB,IACnBC,cAAe,GACfC,QAAS,uDACTC,gBAAiB1B,EAAgB2B,cAEnC,CACEJ,kBAAmB,IACnBC,cAAe,GACfC,QACE,oEACFC,gBAAiB1B,EAAgB4B,YAEnC,CACEL,kBAAmB,IACnBC,cAAe,GACfC,QACE,0EACFC,gBAAiB1B,EAAgB2B,cAEnC,CACEJ,kBAAmB,IACnBC,cAAe,GACfC,QAAS,iDACTC,gBAAiB1B,EAAgB2B,cAEnC,CACEJ,kBAAmB,IACnBC,cAAe,GACfC,QACE,8GACFC,gBAAiB1B,EAAgB2B,cAEnC,CACEJ,kBAAmB,IACnBC,cAAe,GACfC,QACE,+LACFC,gBAAiB1B,EAAgB2B,cAEnC,CACEJ,kBAAmB,IACnBC,cAAe,GACfC,QACE,oFACFC,gBAAiB1B,EAAgB2B,cAEnC,CACEJ,kBAAmB,IACnBC,cAAe,GACfC,QAAS,gEACTC,gBAAiB1B,EAAgB2B,eAI9B,SAASG,EAAYC,GAC1B,IAAIC,EAA4BV,EAAOW,KAAK,SAACD,GAC3C,OAAOA,EAAMT,oBAAsBQ,EAAYR,oBAGjD,YAAcW,IAAVF,EACK,CACLT,kBAAmB,IACnBC,cACE,qEACFC,QACE,mEACFC,gBAAiB1B,EAAgB2B,eAIrCK,EAAMR,cAAgBO,EAAYP,cAE3BQ,GC1fF,IAAMG,EAAkBC,gBAAoB,ICM9BC,aACnB,SAAAA,IAAe/B,OAAAC,EAAA,EAAAD,CAAAE,KAAA6B,wDAEIC,GACjB,oBAAAC,OAAqBD,EAArB,6DAIA,MAAO,CACLE,eAAgB,IAChBC,kBAAmBC,mCAIAJ,GACrB,IAAIK,EAA4BC,OAAOC,aAAaC,QAjBtB,qCAqB9B,GAAIH,EACF,IACE,IAAMI,EAA+BC,KAAKC,MAAMN,GAQhD,OAPAnC,KAAK0C,IAAIZ,EAAS,CAChBE,eAAiBO,EAAuBI,MACxCV,kBAAmBC,IAGrBE,OAAOC,aAAaO,WA7BM,qCA+BnBL,EACP,MAAAM,GACAC,QAAQC,KACN,uFAGF,IAAMC,EAAkBnB,EAAoBoB,WAI5C,OAHAjD,KAAK0C,IAAIZ,EAASkB,GAClBZ,OAAOC,aAAaO,WAvCM,qCAyCnBI,EAIX,OAAOnB,EAAoBoB,uCAMXnB,GAChB,IAAKM,OAAOC,aAAc,OAAOR,EAAoBoB,WAErD,IAAIC,EAAsBd,OAAOC,aAAaC,QAAQtC,KAAKE,IAAI4B,IAE/D,IAAIoB,EAWF,OAAOlD,KAAKmD,QAAQrB,GAVpB,IAEE,OADqCU,KAAKC,MAAMS,GAEhD,MAAAE,GAIA,OAHAN,QAAQC,KACN,iFAEKlB,EAAoBoB,wCAUfnB,EAAiBuB,GAC5BjB,OAAOC,eAEZD,OAAOC,aAAaiB,QAAQtD,KAAKE,IAAI4B,GAAUU,KAAKe,UAAUF,IAC9DjB,OAAOC,aAAaiB,QAAQ,iCAAkCxB,aC3E5D0B,EAAiB,CACrBC,GJPa,CACbC,UAAW,CACTC,oBAAqB,cACrBC,eAAgB,SAChBC,kBAAmB,OACnBC,kBAAmB,OACnBC,kBAAmB,UACnBC,iBAAkB,SAClBC,oBAAqB,oBACrBC,kBAAmB,kBACnBC,iBAAkB,SAClBC,uBAAwB,SACxBC,yBAA0B,SAC1BC,sBAAuB,eACvBC,sBAAuB,OACvBC,mBAAoB,eACpBC,wBAAyB,2BACzBC,oBACE,8FACFC,qBAAsB,oBACtBC,4BAA6B,+BAC7BC,sBAAuB,wBACvBC,2BAA0B,mFAE5BC,YAAa,CACXC,wBAAyB,kBAE3BC,IAAK,CACHC,iBAAkB,QAClBC,sBAAuB,iBACvBC,sBAAuB,kBACvBC,4BACE,sHACFC,4BACE,mGACFC,oBAAqB,yBACrBC,qBAAsB,iBACtBC,yBAA0B,iBAC1BC,2BAA4B,YAC5BC,8BACE,4FACFC,yBACE,wFACFC,2BAA4B,iBAC5BC,2BAA4B,kBAC5BC,oDACE,oEACFC,oDACE,qEACFC,8BACE,qEACFtC,oBAAqB,eAEvBuC,UAAW,CACTC,qBAAsB,SAExBC,WAAY,CACVC,yBAA0B,uBAC1BC,qBAAsB,uBAExBC,mBAAoB,CAClBC,gBAAiB,WACjBC,cAAe,cAEjBC,oBAAqB,CACnB1B,wBAAyB,2BAE3B2B,eAAgB,CACdC,uBACE,0JACFC,sBAAuB,OACvBC,sBAAuB,OACvBC,0BAA2B,gBAC3BC,kCAAmC,oBACnCC,2BAA4B,aAC5BC,2BAA4B,aAC5BC,2BAA4B,UAC5BC,iCAAkC,kBAClCC,6BAA8B,cAC9BC,0BAA2B,SAC3BC,wBAAyB,OACzBC,4BAA6B,WAC7BC,0BAA2B,SAC3BC,wBAAyB,UACzBC,yBAA0B,QAC1BC,2BAA4B,6BAC5BC,4BAA6B,sBAC7BC,oBAAqB,0BACrBC,0BAA2B,OAC3BC,2BAA4B,qBAC5BC,oBAAqB,0BACrBC,0BAA2B,iBAC3BC,2BACE,uEACFC,wBAAyB,6BACzBC,cAAe,OACf1E,oBAAqB,cACrB2E,YAAa,KACb7D,wBAAyB,2BACzBC,oBACE,8FACF6D,kCACE,uEACFC,mBAAoB,UAEtBC,sBAAuB,CACrBC,WAAY,oBACZC,cAAe,uBACfC,cAAe,sBACfC,eAAgB,uBAChBC,aAAc,kCACdC,cAAe,sBACfC,cAAe,sBACfC,YAAa,oBACbC,YAAa,qBACbC,YAAa,qBACbC,mBAAoB,6BACpBC,iBAAkB,2BAClBC,iBAAkB,4BAClBC,UAAW,OACXC,YAAa,UAEfC,cAAe,CACbC,aAAc,KACdC,cAAe,MACfC,gBAAiB,SAEnBC,kBAAmB,CACjBC,oBAAqB,oBACrBC,eAAgB,iBAChBC,4BAA6B,yBAC7BC,oBACE,yFACFC,4BAA6B,0BAC7BC,oBACE,yFACFC,eAAgB,YAChBC,eAAgB,aAElBC,WAAY,CACVR,oBAAqB,oBACrBC,eAAgB,iBAChB/E,wBAAyB,0BACzBuF,gBACE,yFACFF,eAAgB,aAElBG,YAAa,CACXC,iBAAkB,gBAClBC,gBAAiB,2BACjBC,cAAe,wBACfC,WAAY,mBAEdC,aAAc,CACZC,YAAa,kBACbC,qBAAsB,gBACtBC,uBAAwB,kBACxBC,eAAgB,OAChBR,iBAAkB,SAClB5F,sBAAuB,wBACvBC,2BAA0B,kFAC1BoG,UAAW,QAEbC,YAAa,CACXL,YAAa,YACbM,6BAA8B,iCAC9BC,oBAAqB,2BACrBC,mBAAoB,wBAEtBC,qBAAsB,CACpBC,sBACE,uDACFC,iBACE,uGACFjF,gBAAiB,WACjBkF,uBAAwB,0CACxBC,kBACE,8FAEJC,kBAAmB,CACjBjI,oBAAqB,cACrBe,oBACE,8FACF6D,kCACE,uEACFsD,sBAAuB,qBACvBC,eAAgB,cAChBC,YAAa,iBACbC,WAAY,cACZC,aAAc,iBAEhBC,OAAQ,CACNC,OAAQ,SACRC,mBAAoB,QACpBC,cAAe,4BACfC,qBAAsB,OACtBC,sBAAuB,eACvBC,qBAAsB,yBACtBC,aAAc,0DACdC,mBAAoB,uBACpBC,mBAAoB,uBACpBC,OAAQ,SACRC,MAAO,QACPC,OAAQ,kBACRC,oBAAqB,SACrBC,MAAO,QACPC,MAAO,SAETC,mBAAoB,CAClBC,MAAO,eACPvM,YAAa,8CACbwM,MAAO,6BACPC,MAAO,QACPC,MAAO,YACPC,KAAM,OACNC,KAAM,OACNC,WAAY,gEAEZC,KAAM,OACNC,MAAO,QACPC,WAAY,aAEZC,KAAM,OACNC,MAAO,QACPC,QAAS,UACTC,UAAW,YACXC,OAAQ,SACRC,QAAS,UACTC,UAAW,YAEXC,QAAS,iBACTC,aAAc,mBACdC,oBACE,yDACFC,cAAe,oCACfC,aAAc,qCACdC,QAAS,mCACTC,eAAgB,4BAChBC,QAAS,0DACTC,eAAgB,oBAChBC,iBAAkB,qBAClBC,eAAgB,wBAChBC,WAAY,kBACZC,eAAgB,8CAEhBC,UAAW,aACXC,UAAW,mBACXC,kBAAmB,GACnBC,WAAY,KIhPdC,GHRa,CACb3L,UAAW,CACTC,oBAAqB,aACrBC,eAAgB,WAChBC,kBAAmB,YACnBC,kBAAmB,UACnBC,kBAAmB,aACnBC,iBAAkB,cAClBC,oBAAqB,uBACrBC,kBAAmB,qBACnBC,iBAAkB,MAClBC,uBAAwB,QACxBC,yBAA0B,QAC1BC,sBAAuB,iBACvBC,sBAAuB,eACvBC,mBAAoB,eACpBC,wBAAyB,yCACzBC,oBACE,sGACFC,qBAAsB,cACtBC,4BAA6B,oCAC7BC,sBAAuB,2BACvBC,2BAA0B,iFAE5BC,YAAa,CACXC,wBAAyB,4BAE3BC,IAAK,CACHC,iBAAkB,cAClBC,sBAAuB,8BACvBC,sBAAuB,8BACvBC,4BACE,mIACFC,4BACE,qGACFC,oBAAqB,iCACrBC,qBAAsB,yBACtBC,yBAA0B,kBAC1BC,2BAA4B,aAC5BC,8BACE,qGACFC,yBACE,mGACFC,2BAA4B,sBAC5BC,2BAA4B,sBAC5BC,oDACE,6EACFC,oDACE,6EACFC,8BACE,mEACFtC,oBAAqB,cAEvBuC,UAAW,CACTC,qBAAsB,aAExBC,WAAY,CACVC,yBAA0B,uBAC1BC,qBAAsB,0BAExBC,mBAAoB,CAClBC,gBAAiB,WACjBC,cAAe,gBAEjBC,oBAAqB,CACnB1B,wBAAyB,yBAE3B2B,eAAgB,CACdC,uBACE,oKACFC,sBAAuB,OACvBC,sBAAuB,kBACvBC,0BAA2B,YAC3BC,kCAAmC,0BACnCC,2BAA4B,kBAC5BC,2BAA4B,gBAC5BC,2BAA4B,cAC5BC,iCAAkC,oBAClCC,6BAA8B,gBAC9BC,0BAA2B,gBAC3BC,wBAAyB,cACzBC,4BAA6B,aAC7BC,0BAA2B,cAC3BC,wBAAyB,mBACzBC,yBAA0B,QAC1BC,2BAA4B,qBAC5BC,4BAA6B,qCAC7BC,oBAAqB,mCACrBC,0BAA2B,OAC3BC,2BAA4B,8BAC5BC,oBAAqB,iCACrBC,0BAA2B,yBAC3BC,2BACE,6EACFC,wBAAyB,oCACzBC,cAAe,UACf1E,oBAAqB,aACrB2E,YAAa,MACb7D,wBAAyB,yCACzBC,oBACE,sGACF6D,kCACE,0FACFC,mBAAoB,OAEtBC,sBAAuB,CACrBC,WAAY,sBACZC,cAAe,uBACfC,cAAe,sBACfC,eAAgB,0BAChBC,aAAc,8BACdC,cAAe,sBACfC,cAAe,oBACfC,YAAa,sBACbC,YAAa,sBACbC,YAAa,mBACbC,mBAAoB,6BACpBC,iBAAkB,6BAClBC,iBAAkB,6BAClBC,UAAW,UACXC,YAAa,OAEfC,cAAe,CACbC,aAAc,MACdC,cAAe,KACfC,gBAAiB,WAEnBC,kBAAmB,CACjBC,oBAAqB,mBACrBC,eAAgB,wBAChBE,oBACE,wGACFE,oBACE,wGACFC,eAAgB,uBAChBC,eAAgB,wBAElBC,WAAY,CACVR,oBAAqB,mBACrBC,eAAgB,wBAChB/E,wBAAyB,2BACzBuF,gBACE,wGACFF,eAAgB,wBAElBG,YAAa,CACXC,iBAAkB,mBAClBC,gBAAiB,yBACjBC,cAAe,wBACfC,WAAY,sBAEdC,aAAc,CACZC,YAAa,gBACbC,qBAAsB,sBACtBC,uBAAwB,iBACxBC,eAAgB,UAChBR,iBAAkB,YAClB5F,sBAAuB,2BACvBC,2BAA0B,gFAC1BoG,UAAW,QAEbC,YAAa,CACXL,YAAa,oBACbM,6BAA8B,yCAC9BC,oBAAqB,6BACrBC,mBAAoB,2BAEtBC,qBAAsB,CACpBC,sBACE,2EACFC,iBACE,uHACFjF,gBAAiB,WACjBkF,uBAAwB,iDACxBC,kBACE,kHAEJC,kBAAmB,CACjBjI,oBAAqB,aACrBe,oBACE,sGACF6D,kCACE,0FACFsD,sBAAuB,uBACvBC,eAAgB,gBAChBC,YAAa,oBACbC,WAAY,cACZC,aAAc,oBAEhBC,OAAQ,CACNC,OAAQ,YACRC,mBAAoB,SACpBC,cAAe,0CACfC,qBAAsB,SACtBC,sBAAuB,cACvBC,qBAAsB,gCACtBC,aACE,mFACFC,mBAAoB,4BACpBC,mBAAoB,4BACpBC,OAAQ,cACRC,MAAO,wBACPC,OAAQ,yBACRC,oBAAqB,SACrBC,MAAO,SACPC,MAAO,aAETC,mBAAoB,CAClBC,MAAO,eACPvM,YAAa,+DACbwM,MAAO,+BACPC,MAAO,UACPC,MAAO,mBACPC,KAAM,QACNC,KAAM,WACNC,WAAY,mEAEZC,KAAM,OACNC,MAAO,QACPC,WAAY,aAEZC,KAAM,OACNC,MAAO,QACPC,QAAS,cACTC,UAAW,eACXC,OAAQ,MACRC,QAAS,SACTC,UAAW,YAEXC,QAAS,eACTC,aAAc,mBACdC,oBAAqB,kDACrBC,cAAe,kCACfC,aAAc,wCACdC,QAAS,sCACTC,eAAgB,gCAChBC,QAAS,+DACTC,eAAgB,yBAChBC,iBAAkB,0BAClBC,eAAgB,6BAChBC,WAAY,oBACZC,eAAgB,kDAEhBC,UAAW,WACXC,UAAW,mBACXC,kBAAmB,GACnBC,WAAY,MG3OHlN,EAA4B,QAEnCoN,EAA+B,WACnC,IAAKlN,OAAOC,aAAc,OAAOH,EAEjC,IAAMqN,EAAyBnN,OAAOC,aAAaC,QACjD,kCAGF,OAAIiN,EACgC1N,EAAoB2N,IAAID,GAEvCtN,kBAGdC,GAOF,SAASuN,EAAyBvP,GACvC,OAAO,SAACwP,GAAmB,IACnBC,EADmB,SAAAC,GAAA,SAAAD,IAAA,OAAA7P,OAAAC,EAAA,EAAAD,CAAAE,KAAA2P,GAAA7P,OAAA+P,EAAA,EAAA/P,CAAAE,KAAAF,OAAAgQ,EAAA,EAAAhQ,CAAA6P,GAAAI,MAAA/P,KAAAgQ,YAAA,OAAAlQ,OAAAmQ,EAAA,EAAAnQ,CAAA6P,EAAAC,GAAA9P,OAAAG,EAAA,EAAAH,CAAA6P,EAAA,EAAAzP,IAAA,SAAAC,MAAA,WAKrB,IACI+P,EAKEC,EACJb,IAA+Bc,UAAU,EAAG,GAY9C,OAVEF,EADE1M,EAAU2M,GACD3M,EAAU2M,GAGV3M,EAAUtB,GAIrBmO,EAAA,cAACX,EAAD5P,OAAAwQ,OAAA,GAAetQ,KAAKuQ,MAAWvQ,KAAKwQ,MAApC,CAA2CC,KAAMP,EAAShQ,UArBvCyP,EAAA,CACU/N,aA2BnC,OA3BM+N,EACGe,YAAc/O,EA0BhBgO,GA6BJ,SAASgB,IACd,OAAOnN,EAGF,SAASoN,EAAmBC,GACjC,OAAQA,GACN,IAAK,KACH,OAAOxP,IACT,IAAK,KACH,OJoQGX,EInQL,QACE,OAAOW,KAIN,SAASyP,EACdC,EACAC,EACAd,GAEA,IAAM1M,EAAiBmN,IAGnBM,EAA8BzN,EAFL0M,EAASE,UAAU,EAAG,IAYnD,YAN+B1O,IAA3BuP,IACFA,EAAyBzN,EAAUtB,IAGvB+O,EAAuBF,GAAeC,GAK/C,SAASE,GACdL,EACAtP,GAEA,OAAQsP,GACN,IAAK,QACH,OAAOvP,EAAYC,GACrB,IAAK,QACH,OJ8VC,SAAqBA,GAC1B,IAAIC,EAA4BV,EAAOW,KAAK,SAACD,GAC3C,OAAOA,EAAMT,oBAAsBQ,EAAYR,oBAGjD,YAAcW,IAAVF,EACK,CACLT,kBAAmB,IACnBC,cAAe,GACfC,QACE,uEACFC,gBAAiB1B,EAAgB2B,eAIrCK,EAAMR,cAAgBO,EAAYP,cAE3BQ,GI/WI2P,CAAY5P,GACrB,QACE,OAAOD,EAAYC,QC3Gb6P,gQAkBN3I,eAIJ,SAAAA,EAAY8H,GAAoC,IAAAc,EAAA,OAAAvR,OAAAC,EAAA,EAAAD,CAAAE,KAAAyI,IAC9C4I,EAAAvR,OAAA+P,EAAA,EAAA/P,CAAAE,KAAAF,OAAAgQ,EAAA,EAAAhQ,CAAA2I,GAAA6I,KAAAtR,KAAMuQ,KA4BRgB,cAAgB,SAACC,GAEf,OADAA,EAAEC,iBACMD,EAAEE,YACR,uEA7BFL,EAAKb,MAAQ,CACXmB,MAAO,GACPC,gBAAYlQ,GALgC2P,mFASrB,IAAAQ,EAAA7R,KACzBA,KAAK8R,SAAS,CACZH,MAAO3R,KAAKuQ,MAAMwB,gBAGpB3P,OAAO4P,iBAAiB,eAAgBhS,KAAKuR,eAE7CvR,KAAKiS,oBAAoBjS,MACzB,IAAI4R,EAAaM,YAAY,kBAAML,EAAKI,oBAAoBJ,IAAO,KACnE7R,KAAK8R,SAAS,CAAEF,WAAYA,+CAGJO,GACpBnS,KAAKuQ,MAAMwB,gBAAkBI,EAAUJ,eACzC/R,KAAK8R,SAAS,CACZH,MAAO3R,KAAKuQ,MAAMwB,+DAYtB3P,OAAOgQ,oBAAoB,eAAgBpS,KAAKuR,eAEhDc,cAAcrS,KAAKwQ,MAAMoB,wDAGCU,GAAY,IAAAC,EAAAvS,KAClCwS,EAAgBF,EAAK9B,MAAMmB,MAE/Ba,EAAcC,QAAQ,SAACC,QACIhR,IAArBgR,EAAKC,cACPD,EAAKC,YAAYF,QAAQ,SAACG,GACxBL,EAAKhC,MACFsC,uBAAuBD,GACvBE,KAAK,SAACC,GACgB,aAAjBA,EAAOA,aACgBrR,IAArBgR,EAAKC,aACPD,EAAKC,YAAYK,OAAON,EAAKC,YAAY9T,QAAQ+T,GAAM,OAKjC,IAA5BF,EAAKC,YAAYhT,OACnB4S,EAAKhC,MAAM0C,sBAAsBP,GAEjCJ,EAAKR,SAAS,CACZH,MAAOa,sDAWcU,GAC7B,GAAiC,GAA7BA,EAAaC,MAAMxT,OACrB,OAAQuT,EAAaE,MACnB,KAAKhC,GAAiBiC,IACpB,eAAAtR,OAAgBmR,EAAaC,MAAM,GAAGG,YAAtC,MAAAvR,OAAsD/B,KAAKuQ,MAAME,KAAK/H,YACxE,KAAK0I,GAAiBmC,OACpB,SAAAxR,OAAU/B,KAAKuQ,MAAME,KAAKlH,UAA1B,MAAAxH,OAAwCmR,EAAaC,MAAM,GAAGG,YAA9D,MAAAvR,OAA8E/B,KAAKuQ,MAAME,KAAK9H,eAChG,KAAKyI,GAAiBoC,OACpB,OAAIN,EAAaC,MAAM,GAAGM,YACxB,GAAA1R,OAAU/B,KAAKuQ,MAAME,KAAKjH,YAA1B,MAAAzH,OAA0CmR,EAAaC,MAAM,GAAGG,YAAhE,MAAAvR,OAAgF/B,KAAKuQ,MAAME,KAAK7H,eAEhG,GAAA7G,OAAU/B,KAAKuQ,MAAME,KAAKlH,UAA1B,MAAAxH,OAAwCmR,EAAaC,MAAM,GAAGG,YAA9D,MAAAvR,OAA8E/B,KAAKuQ,MAAME,KAAK7H,eAElG,KAAKwI,GAAiBsC,OACpB,eAAA3R,OAAgBmR,EAAaC,MAAM,GAAGG,YAAtC,MAAAvR,OAAsD/B,KAAKuQ,MAAME,KAAK1H,eAExE,KAAKqI,GAAiBuC,QACpB,eAAA5R,OAAgBmR,EAAaC,MAAM,GAAGG,YAAtC,MAAAvR,OAAsD/B,KAAKuQ,MAAME,KAAK5H,gBACxE,KAAKuI,GAAiBwC,OACpB,OAAIV,EAAaC,MAAM,GAAGM,YACxB,GAAA1R,OAAU/B,KAAKuQ,MAAME,KAAKjH,YAA1B,MAAAzH,OAA0CmR,EAAaC,MAAM,GAAGG,YAAhE,MAAAvR,OAAgF/B,KAAKuQ,MAAME,KAAKzH,eAEhG,GAAAjH,OAAU/B,KAAKuQ,MAAME,KAAKlH,UAA1B,MAAAxH,OAAwCmR,EAAaC,MAAM,GAAGG,YAA9D,MAAAvR,OAA8E/B,KAAKuQ,MAAME,KAAKzH,eAElG,KAAKoI,GAAiByC,KACpB,OAAIX,EAAaC,MAAM,GAAGM,YACxB,GAAA1R,OAAU/B,KAAKuQ,MAAME,KAAKjH,YAA1B,MAAAzH,OAA0CmR,EAAaC,MAAM,GAAGG,YAAhE,MAAAvR,OAAgF/B,KAAKuQ,MAAME,KAAKxH,aAEhG,GAAAlH,OAAU/B,KAAKuQ,MAAME,KAAKlH,UAA1B,MAAAxH,OAAwCmR,EAAaC,MAAM,GAAGG,YAA9D,MAAAvR,OAA8E/B,KAAKuQ,MAAME,KAAKxH,aAElG,KAAKmI,GAAiB0C,KACpB,OAAIZ,EAAaC,MAAM,GAAGM,YACxB,GAAA1R,OAAU/B,KAAKuQ,MAAME,KAAKjH,YAA1B,MAAAzH,OAA0CmR,EAAaC,MAAM,GAAGG,YAAhE,MAAAvR,OAAgF/B,KAAKuQ,MAAME,KAAKvH,aAEhG,GAAAnH,OAAU/B,KAAKuQ,MAAME,KAAKlH,UAA1B,MAAAxH,OAAwCmR,EAAaC,MAAM,GAAGG,YAA9D,MAAAvR,OAA8E/B,KAAKuQ,MAAME,KAAKvH,aAElG,KAAKkI,GAAiB2C,KACpB,eAAAhS,OAAgBmR,EAAaC,MAAM,GAAGG,YAAtC,MAAAvR,OAAsD/B,KAAKuQ,MAAME,KAAKtH,kBAK1E,OAAQ+J,EAAaE,MACnB,KAAKhC,GAAiBoC,OACpB,SAAAzR,OAAUmR,EAAaC,MAAMxT,OAA7B,KAAAoC,OAAuC/B,KAAKuQ,MAAME,KAAKrH,oBACzD,KAAKgI,GAAiByC,KACpB,SAAA9R,OAAUmR,EAAaC,MAAMxT,OAA7B,KAAAoC,OAAuC/B,KAAKuQ,MAAME,KAAKpH,kBACzD,KAAK+H,GAAiB0C,KACpB,SAAA/R,OAAUmR,EAAaC,MAAMxT,OAA7B,KAAAoC,OAAuC/B,KAAKuQ,MAAME,KAAKnH,6DAQ7DtJ,KAAKuQ,MAAMyD,2CAGJ,IAAAC,EAAAjU,KACHkU,EAAsC,GAe1C,OAbAlU,KAAKwQ,MAAMmB,MAAMc,QACf,SAACS,EAAqCiB,GACpCD,EAAqBE,KACnBC,EAAAC,EAAAC,cAAA,MAAIC,UAAU,0BAA0BtU,IAAKiU,GAC3CE,EAAAC,EAAAC,cAACE,GAAA,EAAD,CACEC,UAAW,EACXC,MAAOV,EAAKW,uBAAuB1B,SAQ3CmB,EAAAC,EAAAC,cAAA,OAAKC,UAAU,0BACbH,EAAAC,EAAAC,cAAA,OAAKC,UAAU,uBACbH,EAAAC,EAAAC,cAAA,UACEnB,KAAK,SACLoB,UAAU,2BACVK,QAAS7U,KAAK8U,gBAAgBC,KAAK/U,OAEnCqU,EAAAC,EAAAC,cAACS,EAAA,EAAD,CAAMC,SAAS,cAAcT,UAAU,WAG3CH,EAAAC,EAAAC,cAAA,OAAKC,UAAU,sBACbH,EAAAC,EAAAC,cAAA,MAAIC,UAAU,2BAA2BN,YAnKftS,IAAM8N,WA0K3BwF,KAGb,wBAHaA,CAGYzM,miCC1JrB/E,eAOJ,SAAAA,EAAY6M,GAAwB,IAAAc,EAAA,OAAAvR,OAAAC,EAAA,EAAAD,CAAAE,KAAA0D,IAClC2N,EAAAvR,OAAA+P,EAAA,EAAA/P,CAAAE,KAAAF,OAAAgQ,EAAA,EAAAhQ,CAAA4D,GAAA4N,KAAAtR,KAAMuQ,KAPR4E,mBAMoC,EAAA9D,EALpC+D,qBAKoC,EAAA/D,EAJpCgE,uBAIoC,EAAAhE,EAH5BiE,uBAG4B,EAAAjE,EAF5BkE,kBAE4B,EAAAlE,EA+H5BmE,yBA/H4B,eAAAC,EAAA3V,OAAA4V,EAAA,EAAA5V,CAAA6V,EAAArB,EAAAsB,KA+HD,SAAAC,EAAOC,GAAP,IAAA7I,EAAA8I,EAAA5B,EAAA,OAAAwB,EAAArB,EAAA0B,KAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,OACjC9E,EAAKd,MAAM6F,kBAELnJ,EAAkB6I,EAAMO,OAAOpJ,MAGjC8I,GAAwB,EAEnB5B,EAAQ,EARgB,YAQbA,EAAQlH,EAAMtN,QARD,CAAAsW,EAAAE,KAAA,cAS3BlJ,EAAMkH,GAAOmC,KAAO,YATO,CAAAL,EAAAE,KAAA,eAU7BJ,GAAe,EAVcE,EAAAM,OAAA,mBAQSpC,IART8B,EAAAE,KAAA,oBAe7BJ,EAf6B,CAAAE,EAAAE,KAAA,gBAgB/B9E,EAAKd,MAAMiG,eACTnF,EAAKd,MAAME,KAAK/L,oBAChBpF,EAAemX,SAlBcR,EAAAM,OAAA,kBAuB7BtJ,GAASA,EAAMtN,OAAS,QAAoC+B,IAA/B2P,EAAKd,MAAMmG,iBAA+B,WACzE,IAAMC,EAA0BtF,EAAKuF,cAAc3J,GACnDoE,EAAKd,MAAMsG,iBAAiBF,GAE5B,IAJyE,IAAAG,EAAA,SAIhE3C,GACP,IAAI4C,EAAW,IAAIC,SAEnBD,EAASrU,IAAI,OAAQuK,EAAMkH,IAE3B4C,EAASE,OACP,UACA/X,EAAYmS,EAAKd,MAAMmG,iBAClBrF,EAAKd,MAAMmG,gBAA+BQ,QAC3C7F,EAAKd,MAAMmG,gBAAgB9X,IAEjCmY,EAASE,OAAO,WAAY5F,EAAKd,MAAMmG,gBAAgB9X,IACvDmY,EAASE,OACP,aACA5F,EAAKd,MAAMmG,gBAAgBS,KAA3B,IAAApV,OACQsP,EAAKd,MAAMmG,gBAAgBS,MAC/B,SAGgCzV,IAAlCiV,EAAWxC,GAAOiD,aACpBL,EAASE,OACP,cACAN,EAAWxC,GAAOiD,aAKpB/F,EAAKd,MAAMmG,gBAAgBW,YAC3BhY,EAAqBiY,UAErBP,EAASE,OAAO,kBAAmB,QAChCF,EAASE,OAAO,kBAAmB,SAExCF,EAASE,OAAO,YAAa,SAE7B5F,EAAKd,MACFgH,kBAAkBR,GAClBjE,KAAK,SAAC0E,QAC8B9V,IAA/B2P,EAAKd,MAAMmG,iBACfrF,EAAKd,MAAMkH,eAAX3X,OAAA4X,EAAA,EAAA5X,CAAA,GACK0X,EADL,CAEElE,YAAakE,EAAO9X,KACpB2X,UAAWhG,EAAKd,MAAMmG,gBAAgBW,UACtCM,UAAU,EACVlE,aAAa,EACb0D,KAAMK,EAAM,WACZI,WAAYvG,EAAKd,MAAMmG,qBAG1BmB,MAAM,WACLxG,EAAKd,MAAMuH,qBACTnB,EAAWxC,GACX/C,GAAiBiC,QApDhBc,EAAQ,EAAGA,EAAQlH,EAAMtN,OAAQwU,IAAS2C,EAA1C3C,GAJgE,GAvB1C,yBAAA8B,EAAA8B,SAAAlC,MA/HC,gBAAAmC,GAAA,OAAAvC,EAAA1F,MAAA/P,KAAAgQ,YAAA,GAAAqB,EAqN5B4G,mBAAqB,SAACnC,GAC5B,IAAMoC,EAAUC,IAASC,YAATtY,OAAAuY,EAAA,EAAAvY,CAAAuR,IAEhB,IAAK6G,IAAYA,EAAQI,SAASxC,EAAMO,QAAS,CAC/C,IAAMkC,EAAgBC,SAASC,eAAe,kBAC5CC,EAAkBF,SAASC,eAAe,oBAC1CE,EAAoBH,SAASC,eAAe,sBAE1CG,EAA4BvH,EAAKb,MAGjB,OAAlB+H,GACoB,OAApBG,GACsB,OAAtBC,IAEIJ,IAAkBA,EAAcD,SAASxC,EAAMO,UACjDuC,EAASC,kBAAmB,GAG1BH,IAAoBA,EAAgBJ,SAASxC,EAAMO,UACrDuC,EAASE,oBAAqB,GAG5BH,IAAsBA,EAAkBL,SAASxC,EAAMO,UACzDuC,EAASG,sBAAuB,GAGlC1H,EAAKS,SAAS8G,MAhPgBvH,EAqP5B2H,gBAAkB,SAAClD,GACH,KAAlBA,EAAMmD,SACR5H,EAAKS,SAAS,CACZ+G,kBAAkB,EAClBC,oBAAoB,KAzPUzH,EA8PpC6H,0BAA4B,SAACC,GAC3B9H,EAAKd,MAAM6F,kBAEX/E,EAAKS,SAAS,CACZ+G,kBAAkB,EAClBC,oBAAoB,EACpBC,sBAAuB1H,EAAKb,MAAMuI,qBAClCK,gBAAiBD,EACjBE,sBAAsB,EACtBC,uBAAuB,EACvBC,uBAAuB,KAxQSlI,EA4QpCmI,sBAAwB,WACtBnI,EAAKS,SAAS,CACZ+G,kBAAmBxH,EAAKb,MAAMqI,iBAC9BC,oBAAoB,EACpBC,sBAAsB,KAhRU1H,EAoRpCoI,wBAA0B,WACxBpI,EAAKd,MAAM6F,kBAEX/E,EAAKS,SAAS,CACZ+G,kBAAkB,EAClBC,oBAAqBzH,EAAKb,MAAMsI,mBAChCC,sBAAsB,EACtBM,sBAAsB,EACtBC,uBAAuB,EACvBC,uBAAuB,KA7RSlI,EAiSpCqI,8BAAgC,WAC9BrI,EAAKd,MAAMoJ,wBAlSuBtI,EAqSpCuI,2BAA6B,WAC3BvI,EAAKd,MAAMsJ,4BAtSuBxI,EAySpCyI,4BAA8B,WAC5BzI,EAAKd,MAAMwJ,wBA1SuB1I,EA6SpC2I,kCAAoC,WAClC3I,EAAKd,MAAM0J,8BA9SuB5I,EAiTpC6I,yBAA2B,WACzB7I,EAAKd,MAAM4J,0BAlTuB9I,EAqTpC+I,yBAA2B,WACzB/I,EAAKd,MAAM8J,0BAtTuBhJ,EAyTpCiJ,2BAA6B,WAC3BjJ,EAAKd,MAAMgK,yBA1TuBlJ,EAkVpCmJ,sBAAwB,SAAC1E,GAIvB,GAHAA,EAAMrE,iBACNqE,EAAM2E,uBAE6B/Y,IAA/B2P,EAAKd,MAAMmG,gBAA+B,KACXgE,EAAerJ,EAAKb,MAA7CmK,wBAER,QAAmCjZ,IAA/B2P,EAAKd,MAAMmG,gBAA+B,OAE9C,IAAIkE,EAAuBvJ,EAAKwJ,oBAC9BxJ,EAAKd,MAAMmG,iBAGbkE,EAAS9a,OAAA4X,EAAA,EAAA5X,CAAA,GACJ8a,EADI,CAEPlb,KAAMgb,EACNpH,YAAaoH,EACbjH,aAAa,IAGfpC,EAAKd,MAAMuK,oBAAoBF,GAE/B,IAAMG,EAAO,CACXC,KAAMN,EACNO,QAAS/b,EAAYmS,EAAKd,MAAMmG,iBAC3BrF,EAAKd,MAAMmG,gBAA+BQ,QAC3C7F,EAAKd,MAAMmG,gBAAgB9X,GAC/Bsc,SAAU7J,EAAKd,MAAMmG,gBAAgB9X,GACrCuc,cACsCzZ,IAApC2P,EAAKd,MAAMmG,gBAAgBS,KACvB9F,EAAKd,MAAMmG,gBAAgBS,UAC3BzV,EACN0Z,iBAC4B1Z,IAA1BkZ,EAAUxD,YACNwD,EAAUxD,iBACV1V,EACN2Z,WACEhK,EAAKd,MAAMmG,gBAAgBW,YAC3BhY,EAAqBiY,UACjB,OACA,SAGRjG,EAAKd,MACF+K,oBAAoBP,GACpBjI,KAAK,SAAC0E,QAC8B9V,IAA/B2P,EAAKd,MAAMmG,iBAEfrF,EAAKd,MAAMgL,mBAAXzb,OAAA4X,EAAA,EAAA5X,CAAA,GACK0X,EADL,CAEElE,YAAakE,EAAO9X,KACpB2X,UAAWhG,EAAKd,MAAMmG,gBAAgBW,UACtCM,UAAU,EACVlE,aAAa,EACb0D,KAAMK,EAAM,WACZI,WAAYvG,EAAKd,MAAMmG,qBAG1BmB,MAAM,WACL/U,QAAQtB,MACN,gDACAoZ,GAEFvJ,EAAKd,MAAMuH,qBAAqB8C,EAAWxJ,GAAiBiC,OAIlEhC,EAAKS,SAAS,CAAEgH,oBAAqBzH,EAAKb,MAAMsI,sBArZdzH,EAwZpCmK,wBAA0B,SAAC1F,GAGzB,GAFAA,EAAMrE,sBAE6B/P,IAA/B2P,EAAKd,MAAMmG,gBAA+B,KACX+E,EAAiBpK,EAAKb,MAA/CmK,wBAEJC,EAAuBvJ,EAAKwJ,oBAC9BxJ,EAAKd,MAAMmG,iBAGbkE,EAAS9a,OAAA4X,EAAA,EAAA5X,CAAA,GACJ8a,EADI,CAEPlb,KAAI,GAAAqC,OAAK0Z,EAAL,KAAA1Z,OAAqBsP,EAAKb,MAAM4I,gBAAgBsC,WACpDpI,YAAW,GAAAvR,OAAK0Z,EAAL,KAAA1Z,OAAqBsP,EAAKb,MAAM4I,gBAAgBsC,WAC3DjI,aAAa,EACb6C,KAAM,IAGRjF,EAAKS,SAAS,CACZ6J,cAAc,EACd5C,sBAAuB1H,EAAKb,MAAMuI,uBAGpC1H,EAAKd,MAAMqL,sBAAsBhB,GAEjC,IAAMG,EAAO,CACXC,KAAMS,EACNI,KAAMxK,EAAKb,MAAM4I,gBAAgBsC,UACjCT,QAAS/b,EAAYmS,EAAKd,MAAMmG,iBAC3BrF,EAAKd,MAAMmG,gBAA+BQ,QAC3C7F,EAAKd,MAAMmG,gBAAgB9X,GAC/Bsc,SAAU7J,EAAKd,MAAMmG,gBAAgB9X,GACrCkd,gBACsCpa,IAApC2P,EAAKd,MAAMmG,gBAAgBS,KACvB9F,EAAKd,MAAMmG,gBAAgBS,UAC3BzV,EACN0Z,iBAC4B1Z,IAA1BkZ,EAAUxD,YACNwD,EAAUxD,iBACV1V,EACN2Z,WACEhK,EAAKd,MAAMmG,gBAAgBW,YAC3BhY,EAAqBiY,UACjB,OACA,SAGRjG,EAAKd,MACFwL,sBAAsBhB,GACtBjI,KAAK,SAAC0E,GACLnG,EAAKS,SAAS,CACZ6J,cAAc,SAGmBja,IAA/B2P,EAAKd,MAAMmG,iBACbrF,EAAKd,MAAMyL,qBAAXlc,OAAA4X,EAAA,EAAA5X,CAAA,GACK0X,EADL,CAEElE,YAAakE,EAAO9X,KACpB2X,UAAWhG,EAAKd,MAAMmG,gBAAgBW,UACtCM,UAAU,EACVlE,aAAa,EACb0D,KAAMK,EAAM,WACZI,WAAYvG,EAAKd,MAAMmG,qBAI5BmB,MAAM,WACLxG,EAAKS,SAAS,CACZ6J,cAAc,IAGhBtK,EAAKd,MAAMuH,qBAAqB8C,EAAWxJ,GAAiBiC,YAGhEhC,EAAKS,SAAS,CAAE6J,cAAc,KAleEtK,EAsepC4K,aAAe,SAACnG,GACd,IAAMpW,EAAeoW,EAAMO,OAAOlW,MAAM+b,OACpC7C,GAAgC,EAChCC,GAAiC,EACjCC,GAAiC,EACjCoB,EAAkCjb,EAElB,IAAhBA,EAAKC,QACP2Z,GAAwB,EACxBD,GAAuB,EACvBsB,EAA0B,IAChBlb,EAAaC,KACvB2Z,GAAuB,EACvBE,GAAwB,EACxBoB,EAA0B,IAG5BtJ,EAAKS,SAAS,CACZ6I,wBAAyBA,EACzBtB,qBAAsBA,EACtBC,sBAAuBA,EACvBC,sBAAuBA,KA3fSlI,EA+fpC8K,YAAc,SAACrG,GACbA,EAAMO,OAAOvJ,UAhgBqBuE,EAmgBpC+K,iBAAmB,SAACtG,GAClBzE,EAAKd,MAAM6F,kBACX/E,EAAKkE,aAAa8G,SAlgBlBhL,EAAKiE,kBAAoB,CACvB,CAAEgH,KAAM,OAAQC,KAAM,eAAgBb,UAAW,QACjD,CAAEY,KAAM,QAASC,KAAM,gBAAiBb,UAAW,QACnD,CAAEY,KAAM,aAAcC,KAAM,qBAAsBb,UAAW,SAG/DrK,EAAK8D,cAAgB,KACrB9D,EAAK+D,gBAAkB,KACvB/D,EAAKgE,kBAAoB,KACzBhE,EAAKb,MAAQ,CACXqI,kBAAkB,EAClBC,oBAAoB,EACpBC,sBAAsB,EACtB4C,cAAc,EACdvC,gBAAiB/H,EAAKiE,kBAAkB,GACxC+D,sBAAsB,EACtBC,uBAAuB,EACvBC,uBAAuB,EACvBoB,wBAAyB,GACzB6B,cAAc,EACdC,gBAAepL,EAAKd,MAAMkM,eACtBpL,EAAKd,MAAMkM,eAxBiBpL,mFAoClCmH,SAASxG,iBAAiB,QAAShS,KAAKiY,oBAAoB,GAC5DO,SAASxG,iBAAiB,UAAWhS,KAAKgZ,iBAAiB,GAEjB,qBAA/BhZ,KAAKuQ,MAAMmG,kBAChB5X,EAAakB,KAAKuQ,MAAMmG,iBAC1B1W,KAAK8R,SAAS,CACZ0K,cAAc,IAGhBxc,KAAK8R,SAAS,CACZ0K,cAAc,KAKpBxc,KAAKuV,aAAevV,KAAK0c,mEAIzBlE,SAASpG,oBAAoB,QAASpS,KAAKiY,oBAAoB,GAC/DO,SAASpG,oBAAoB,UAAWpS,KAAKgZ,iBAAiB,8CAGtC7G,GACpBnS,KAAKuQ,MAAMkM,gBAAkBtK,EAAUsK,eACzCzc,KAAK8R,SAAS,CACZ2K,gBAAezc,KAAKuQ,MAAMkM,eACtBzc,KAAKuQ,MAAMkM,gBAKfzc,KAAKuQ,MAAMmG,kBAAoBvE,EAAUuE,iBACD,qBAA/B1W,KAAKuQ,MAAMmG,kBAChB5X,EAAakB,KAAKuQ,MAAMmG,iBAC1B1W,KAAK8R,SAAS,CACZ0K,cAAc,IAGhBxc,KAAK8R,SAAS,CACZ0K,cAAc,KAMtB,IAAMG,EAAWC,MAAMC,KACrBrE,SAASsE,uBAAuB,6BAElC,GAAIH,EAAShd,OAAS,EAAG,KAAAod,EAAAC,EAAAC,GACDN,GADC,IACvB,IAAAK,EAAAE,MAAAH,EAAAC,EAAAG,KAAAC,MAAgC,CAAAL,EAAA5c,MACtBkd,aAAa,QAAS,KAFT,MAAAC,GAAAN,EAAAxL,EAAA8L,GAAA,QAAAN,EAAAO,kDAQzB,IAAMhI,EAAeiD,SAASjE,cAAc,SAS5C,OARAgB,EAAa8H,aAAa,OAAQ,QAClC9H,EAAa8H,aAAa,WAAY,YACtC9H,EAAavD,iBACX,SACAhS,KAAKwV,0BACL,GAGKD,wCAGaiI,GACpB,IAAIC,EAAwB,GAE5B,QAAmC/b,IAA/B1B,KAAKuQ,MAAMmG,gBACb,IAAK,IAAIvC,EAAQ,EAAGA,EAAQqJ,EAAS7d,OAAQwU,IAAS,CACpD,IAAIyG,EAAuB5a,KAAK6a,oBAC9B7a,KAAKuQ,MAAMmG,iBAGb+G,EAASrJ,KAATtU,OAAA4X,EAAA,EAAA5X,CAAA,GACK8a,EADL,CAEElb,KAAM8d,EAASrJ,GAAOzU,KACtB4T,YAAakK,EAASrJ,GAAOzU,KAC7B+T,aAAa,EACb6C,KAAMkH,EAASrJ,GAAOmC,QAK5B,OAAOmH,8CAiMmB7F,GAC1B,MAAO,CACLhZ,GAAI,GACJwY,YAAavX,EAAK6d,UAClBpK,YAAa,GACbsE,WAAYA,EACZP,UAAWO,EAAWP,UACtBsG,SAAU,GACVhG,UAAU,EACViG,YAAY,EACZC,YAAY,EACZC,YAAY,EACZC,SAAS,EACTC,UAAW,GACXC,UAAU,EACVC,WAAW,EACXzK,aAAa,EACb0K,UAAU,uDA0LsBzL,GAOlC,IAAMuC,EAAmBvC,EAAKgJ,UAG9B,MADiB,iEAAA3Z,OADQ,GACR,KAAAA,OAAgFkT,EAAhF,yCAIV,IAAApD,EAAA7R,KAAAoe,EAkBHpe,KAAKwQ,MAHP6I,EAfK+E,EAeL/E,qBACAC,EAhBK8E,EAgBL9E,sBACAC,EAjBK6E,EAiBL7E,sBAEF,OACElF,EAAAC,EAAAC,cAAA,OAAKC,UAAU,uBACbH,EAAAC,EAAAC,cAAA,QACE8J,IAAK,SAACC,GACJzM,EAAKwD,kBAAoBiJ,KAGzBte,KAAKwQ,MAAMgM,cACXnI,EAAAC,EAAAC,cAACgK,EAAA,EAAD,CACEpL,MAAOnT,KAAKsV,kBACZkJ,SAAS,EACTC,WA7BqB,SAAClO,GAC9B,OACE8D,EAAAC,EAAAC,cAAA,WACEF,EAAAC,EAAAC,cAACS,EAAA,EAAD,CACEC,SAAU1E,EAAMmC,KAAK6J,KACrBmC,SAAUC,IAASC,MACnBpK,UAAU,OACVqK,WAAY,CAAEC,IAAKjN,EAAKkN,4BAA4BxO,EAAMmC,SAE5D2B,EAAAC,EAAAC,cAAA,QAAMC,UAAU,wBAAwBjE,EAAMmC,KAAK4J,QAqB/CA,KAAMtc,KAAKuQ,MAAME,KAAKnM,sBACtBiY,KAAK,WACL/H,UAAU,OACVwK,cAAyCtd,IAA/B1B,KAAKuQ,MAAMmG,gBACrBuI,YAAa,SAACC,GAAD,OACXrN,EAAKqH,0BAA0BgG,EAAexM,UAKpD1S,KAAKuQ,MAAM4O,wBAA2Bnf,KAAKwQ,MAAMgM,cACjDnI,EAAAC,EAAAC,cAAA,UACEC,UAAU,+CACVK,QAAS7U,KAAKsa,2BACd0E,cAAyCtd,IAA/B1B,KAAKuQ,MAAMmG,iBAErBrC,EAAAC,EAAAC,cAACS,EAAA,EAAD,CAAMC,SAAS,QAAQT,UAAU,SAChCxU,KAAKuQ,MAAME,KAAKjM,qBAGnBxE,KAAKwQ,MAAMgM,cACXnI,EAAAC,EAAAC,cAAA,UACEC,UAAU,+CACVK,QAAS7U,KAAKoc,iBACd4C,cAAyCtd,IAA/B1B,KAAKuQ,MAAMmG,iBAErBrC,EAAAC,EAAAC,cAACS,EAAA,EAAD,CAAMC,SAAS,SAAST,UAAU,SACjCxU,KAAKuQ,MAAME,KAAK7M,iBAGnB5D,KAAKwQ,MAAMgM,cACXnI,EAAAC,EAAAC,cAAA,UACEC,UAAU,+CACVK,QAAS7U,KAAKyZ,wBACd4E,IAAK,SAACC,GACJzM,EAAKuD,gBAAkBkJ,GAEzBU,cAAyCtd,IAA/B1B,KAAKuQ,MAAMmG,iBAErBrC,EAAAC,EAAAC,cAACS,EAAA,EAAD,CAAMC,SAAS,QAAQT,UAAU,SAChCxU,KAAKuQ,MAAME,KAAKtM,mBAGnBnE,KAAKwQ,MAAMgM,cAAgBxc,KAAKwQ,MAAMiM,eACtCpI,EAAAC,EAAAC,cAAA,UACEC,UAAU,+CACVK,QAAS7U,KAAK4Z,2BACdoF,cAAyCtd,IAA/B1B,KAAKuQ,MAAMmG,iBAErBrC,EAAAC,EAAAC,cAACS,EAAA,EAAD,CAAMC,SAAS,SAAST,UAAU,SACjCxU,KAAKuQ,MAAME,KAAKzM,kBAGpBhE,KAAKwQ,MAAMgM,cACVnI,EAAAC,EAAAC,cAAA,UACEC,UAAU,+CACVK,QAAS7U,KAAK8Z,4BACdkF,cAAyCtd,IAA/B1B,KAAKuQ,MAAMmG,iBAErBrC,EAAAC,EAAAC,cAACS,EAAA,EAAD,CAAMC,SAAS,SAAST,UAAU,SACjCxU,KAAKuQ,MAAME,KAAKxM,qBAGpBjE,KAAKwQ,MAAMgM,cAAgBxc,KAAKwQ,MAAMiM,eACrCpI,EAAAC,EAAAC,cAAA,UACEC,UAAU,+CACVK,QAAS7U,KAAKga,kCACdgF,cAAyCtd,IAA/B1B,KAAKuQ,MAAMmG,iBAErBrC,EAAAC,EAAAC,cAACS,EAAA,EAAD,CAAMC,SAAS,eAAeT,UAAU,SACvCxU,KAAKuQ,MAAME,KAAKvM,oBAGnBlE,KAAKwQ,MAAMgM,cAAgBxc,KAAKwQ,MAAMiM,eACtCpI,EAAAC,EAAAC,cAAA,UACEC,UAAU,+CACVK,QAAS7U,KAAKka,yBACd8E,cAAyCtd,IAA/B1B,KAAKuQ,MAAMmG,iBAErBrC,EAAAC,EAAAC,cAACS,EAAA,EAAD,CAAMC,SAAS,qBAAqBT,UAAU,SAC7CxU,KAAKuQ,MAAME,KAAK5M,oBAGnB7D,KAAKwQ,MAAMgM,cAAgBxc,KAAKwQ,MAAMiM,eACtCpI,EAAAC,EAAAC,cAAA,UACEC,UAAU,+CACVK,QAAS7U,KAAKoa,yBACd4E,cAAyCtd,IAA/B1B,KAAKuQ,MAAMmG,iBAErBrC,EAAAC,EAAAC,cAACS,EAAA,EAAD,CAAMC,SAAS,OAAOT,UAAU,SAC/BxU,KAAKuQ,MAAME,KAAK3M,mBAGrBuQ,EAAAC,EAAAC,cAAA,UACEC,UAAU,+CACVK,QAAS7U,KAAK0Z,8BACdsF,cAAyCtd,IAA/B1B,KAAKuQ,MAAMmG,iBAErBrC,EAAAC,EAAAC,cAACS,EAAA,EAAD,CAAMC,SAAS,UAAUT,UAAU,SAClCxU,KAAKuQ,MAAME,KAAK1M,mBAGnBsQ,EAAAC,EAAAC,cAAC6K,EAAA,EAAD,CACExgB,GAAG,qBACHygB,KAAMrf,KAAKwQ,MAAMuI,qBACjBuG,WAAY,gBACZC,OAAQvf,KAAKqV,mBAEbhB,EAAAC,EAAAC,cAAA,QAAMiL,SAAUxf,KAAKwb,wBAAyBhH,UAAU,cACtDH,EAAAC,EAAAC,cAACkL,EAAA,EAAD,CACE/f,KAAK,OACLiV,MAAO3U,KAAKuQ,MAAME,KAAKlM,sBACvBiQ,UAAU,OACVkL,UAAW,EACXC,UAAU,EACVC,aAAa,MACbC,WAAW,EACXC,SAAU9f,KAAKic,aAAalH,KAAK/U,MACjC+f,QAAS/f,KAAKmc,YAAYpH,KAAK/U,QAEhCsZ,GACCjF,EAAAC,EAAAC,cAAA,OAAKC,UAAU,0BACZxU,KAAKuQ,MAAME,KAAK5L,uBAGpB0U,GACClF,EAAAC,EAAAC,cAAA,OAAKC,UAAU,0BACZxU,KAAKuQ,MAAME,KAAK3L,4BAGrBuP,EAAAC,EAAAC,cAACkL,EAAA,EAAD,CACErM,KAAK,SACLoB,UAAU,0CACVrU,MAAOH,KAAKuQ,MAAME,KAAKpM,yBACvB2a,SAAU3F,GAAwBrZ,KAAKwQ,MAAMmL,iBAInDtH,EAAAC,EAAAC,cAAC6K,EAAA,EAAD,CACExgB,GAAG,mBACHygB,KAAMrf,KAAKwQ,MAAMsI,mBACjBwG,WAAY,gBACZC,OAAQvf,KAAKoV,iBAEbf,EAAAC,EAAAC,cAAA,QAAMiL,SAAUxf,KAAKwa,sBAAuBhG,UAAU,cACpDH,EAAAC,EAAAC,cAACkL,EAAA,EAAD,CACE/f,KAAK,OACLiV,MAAO3U,KAAKuQ,MAAME,KAAK9L,qBACvB6P,UAAU,OACVkL,UAAW,EACXC,UAAU,EACVC,aAAa,MACbC,WAAW,EACXC,SAAU9f,KAAKic,aAAalH,KAAK/U,MACjC+f,QAAS/f,KAAKmc,YAAYpH,KAAK/U,QAEhCsZ,GACCjF,EAAAC,EAAAC,cAAA,OAAKC,UAAU,0BACZxU,KAAKuQ,MAAME,KAAK5L,uBAGpB0U,GACClF,EAAAC,EAAAC,cAAA,OAAKC,UAAU,0BACZxU,KAAKuQ,MAAME,KAAK3L,4BAGrBuP,EAAAC,EAAAC,cAACkL,EAAA,EAAD,CACErM,KAAK,SACLoB,UAAU,qBACVrU,MAAOH,KAAKuQ,MAAME,KAAKrM,uBACvB4a,SAAU3F,cAruBAzX,IAAM8N,WA8uBfwF,KAGb,YAHaA,CAGAxR,cCvzBTsc,GAAmB,CAAC,OAAQ,SAAU,SAAU,WC6DjDC,uBC3CC1Z,eAIJ,SAAAA,EAAYgK,GAAiC,IAAAc,EAAA,OAAAvR,OAAAC,EAAA,EAAAD,CAAAE,KAAAuG,IAC3C8K,EAAAvR,OAAA+P,EAAA,EAAA/P,CAAAE,KAAAF,OAAAgQ,EAAA,EAAAhQ,CAAAyG,GAAA+K,KAAAtR,KAAMuQ,KA6BAyI,gBAAkB,SAAClD,GACH,KAAlBA,EAAMmD,SACR5H,EAAKd,MAAMyD,WA9Bb3C,EAAKb,MAAQ,CAAE0P,WAAW,GAE1B7O,EAAK4G,mBAAqB5G,EAAK4G,mBAAmBlD,KAAxBjV,OAAAuY,EAAA,EAAAvY,CAAAuR,IAJiBA,mFAQ3CmH,SAASxG,iBAAiB,YAAahS,KAAKiY,oBAC5CO,SAASxG,iBAAiB,UAAWhS,KAAKgZ,iBAAiB,GAC3DhZ,KAAKmgB,6DAIL3H,SAASpG,oBAAoB,YAAapS,KAAKiY,oBAC/CO,SAASpG,oBAAoB,UAAWpS,KAAKgZ,iBAAiB,gDAI9DhZ,KAAKogB,aAAapgB,KAAKuQ,MAAM8P,KAAKC,yDAGTxK,GACzB,IAAMoC,EAAUC,IAASC,YAAYpY,MAEhCkY,GAAYA,EAAQI,SAASxC,EAAMO,SACtCrW,KAAKuQ,MAAMyD,gDAWbhU,KAAK8R,SAAS,CAAEoO,UAAWlgB,KAAKwQ,MAAM0P,iDAGnBK,GACnB,IAAMC,EAAmChI,SAASC,eAChD,oCAEmB,OAAjB+H,GACFA,EAAanD,aAAa,MAAOkD,2CAIb/O,GACtBxR,KAAKuQ,MAAMkQ,UAAUjP,6CAIrBxR,KAAKuQ,MAAMyD,2CAGJ,IAAA0M,EAMH1gB,KAAKuQ,MAAM8P,KAJb/M,EAFKoN,EAELpN,YACAqN,EAHKD,EAGLC,aACAC,EAJKF,EAILE,kBACAC,EALKH,EAKLG,iBAEF,OACExQ,EAAA,qBAAKmE,UAAU,2CACbnE,EAAA,qBAAKmE,UAAU,8BACbnE,EAAA,sBAAMmE,UAAU,oCACbxU,KAAKuQ,MAAME,KAAKhK,eAEnB4J,EAAA,wBACE+C,KAAK,SACLoB,UAAU,kCACVK,QAAS7U,KAAK8U,gBAAgBC,KAAK/U,OAEnCqQ,EAAA,cAAC2E,EAAA,EAAD,CAAMC,SAAS,cAAcT,UAAU,WAG3CnE,EAAA,qBAAKmE,UAAU,+BACbnE,EAAA,qBAAKmE,UAAU,oDACQ9S,IAApB1B,KAAKuQ,MAAM8P,MAAsBQ,GAChCxQ,EAAA,qBACEzR,GAAG,mCACH4V,UAAU,oCACVsK,SAAKpd,EACLof,IAAI,iBAGapf,IAApB1B,KAAKuQ,MAAM8P,OAA2C,IAArBQ,GAChCxQ,EAAA,qBACEmE,UACE,mDACAxU,KAAKuQ,MAAMwQ,aAGZJ,IAIPtQ,EAAA,oBAAImE,UAAU,oCACZnE,EAAA,wBACEA,EAAA,4BACuB3O,IAApB1B,KAAKuQ,MAAM8P,MAAsC,KAAhB/M,EAC9BA,EACAqN,IAGRtQ,EAAA,6BAAyB3O,IAApB1B,KAAKuQ,MAAM8P,KAAqBO,EAAoB,MACzDvQ,EAAA,wBACEA,EAAA,cAAC2Q,GAAA,EAAD,CACExM,UAAU,mCACVK,QAAS7U,KAAKihB,gBAAgBlM,KAAK/U,OAElCA,KAAKuQ,MAAME,KAAKjK,4BArHA5E,aA+HlBsT,KAGb,qBAHaA,CAGS3O,ICvHlBH,eACJ,SAAAA,EAAYmK,GAAyB,IAAAc,EAAA,OAAAvR,OAAAC,EAAA,EAAAD,CAAAE,KAAAoG,IACnCiL,EAAAvR,OAAA+P,EAAA,EAAA/P,CAAAE,KAAAF,OAAAgQ,EAAA,EAAAhQ,CAAAsG,GAAAkL,KAAAtR,KAAMuQ,KAiDA2Q,8BAAgC,WACtC7P,EAAKS,SAAS,CAAEoO,WAAW,EAAOiB,+BAAgC,MAnD/B9P,EA0D7B+P,sBAAwB,SAACC,GAC/BhQ,EAAKS,SAAS,CACZwP,QAASD,KA5DwBhQ,EAwE7BkQ,6BAA+B,WACH,IAA9BlQ,EAAKb,MAAM8Q,QAAQ3hB,aAEK+B,IAAxB2P,EAAKd,MAAMiR,UACbnQ,EAAKd,MAAMiR,SAASnQ,EAAKb,MAAM8Q,UA5EEjQ,EAgF7BoQ,4BAA8B,WACpC,IAAMC,EAAgB,sBAAA3f,OAAyBsP,EAAKd,MAAML,SAApC,QAEtBmB,EAAKsQ,WAAL,GAAA5f,OAAmBK,OAAOwf,SAASC,QAAnC9f,OAA4C2f,IAAY5O,KACtD,SAAC0E,GACC,GAAIA,EAAQpV,OAAO0f,KAAKJ,EAAU,cAC7B,CACH,IAAMK,EAAgCxiB,EAAkB8N,MAClD2U,EAA8C,CAClDlX,YAAa,6BACb7J,QAAY,sCAALc,OACLsP,EAAKd,MAAML,SACV,kFACH6R,WAAYA,GAEd1Q,EAAKd,MAAM0R,kBAAkBD,OA7FnC3Q,EAAKb,MAAQ,CACX0P,WAAW,EACXoB,QAAS,GACTP,YAAa,OACbI,+BAAgC,IANC9P,mFAWnC,QACsB3P,IAApB1B,KAAKuQ,MAAM8P,OAC0B,IAArCrgB,KAAKuQ,MAAM8P,KAAKQ,iBAChB,CACA,IAAIE,EH3CH,SAAwBH,GAI7B,IAHA,IACIsB,EADAC,EAAM,EAGDhO,EAAQ,EAAGA,EAAQyM,EAAkBjhB,OAAQwU,IAC/CiO,MAAMxB,EAAkByB,WAAWlO,MACtCgO,GAAOvB,EAAkByB,WAAWlO,IAMxC,OAFA+N,EAAUC,EAAMnC,GAAOrgB,OAEhBqgB,GAAOkC,GG+BgBI,CACxBtiB,KAAKuQ,MAAM8P,KAAKO,mBAElB5gB,KAAK8R,SAAS,CAAEiP,YAAaA,SAG7B/gB,KAAKmgB,gEAKiBze,IAApB1B,KAAKuQ,MAAM8P,MACbrgB,KAAKogB,aAAapgB,KAAKuQ,MAAM8P,KAAKC,oDAIpCtgB,KAAK8R,SAAS,CAAEoO,UAAWlgB,KAAKwQ,MAAM0P,iDAGnBK,GACnB,IAAMC,EAAmChI,SAASC,eAChD,4BAEmB,OAAjB+H,GACFA,EAAanD,aAAa,MAAOkD,sDAKnCvgB,KAAK8R,SAAS,CACZoO,WAAW,EACXiB,+BAAgC,+FAQI3P,GACtCxR,KAAKuQ,MAAMkQ,UAAUjP,iDASO6P,GACJ,IAApBA,EAAS1hB,aAEe+B,IAAxB1B,KAAKuQ,MAAMiR,UACbxhB,KAAKuQ,MAAMiR,SAASxhB,KAAKwQ,MAAM8Q,4CAiChBI,GACjB,OAAO,IAAIa,QAAQ,SAACC,GAClBC,MAAMf,GACH5O,KAAK,SAAC4P,GACLF,EAAQE,EAASC,IAA0B,MAApBD,EAAS3P,UAEjC8E,MAAM,SAACrW,GAENghB,GAAQ,wCAMd,OACEnS,EAAA,qBAAKmE,UAAU,cACbnE,EAAA,qBAAKmE,UAAU,mCACbnE,EAAA,cAACuS,GAAA,EAAD,CACEC,YAAa7iB,KAAKuQ,MAAME,KAAKpK,yBAC7ByZ,SAAU9f,KAAKohB,sBAAsBrM,KAAK/U,MAC1CwhB,SAAUxhB,KAAK8iB,sBAAsB/N,KAAK/U,MAC1CwU,UAAU,2BAGdnE,EAAA,qBACEmE,UAAU,qCACVuO,OAAsC,IAA9B/iB,KAAKwQ,MAAM8Q,QAAQ3hB,QAE3B0Q,EAAA,cAAC2S,GAAA,EAAD,CACEC,QAASjjB,KAAKuQ,MAAME,KAAKnK,qBACzB4c,aAAc,CAAEC,SAAU,GAC1BC,WAAY,IACZC,OAAQ,CACNC,KAAM,CAAEC,QAAS,eAAgBC,OAAQ,OAAQ7gB,MAAO,UAG1D0N,EAAA,wBACEwE,QAAS7U,KAAKuhB,6BAA6BxM,KAAK/U,MAChDgf,SAAwC,IAA9Bhf,KAAKwQ,MAAM8Q,QAAQ3hB,OAC7B6U,UAAU,4BAEVnE,EAAA,cAAC2E,EAAA,EAAD,CAAMC,SAAS,eAIrB5E,EAAA,qBAAKmE,UAAU,+CACbnE,EAAA,wBACEmE,UAAW,+BACXK,QAAS7U,KAAKyhB,4BAA4B1M,KAAK/U,OAE/CqQ,EAAA,cAAC2E,EAAA,EAAD,CAAMC,SAAS,OAAOT,UAAU,iCAGpCnE,EAAA,qBAAKmE,UAAU,uCACbnE,EAAA,wBACEmE,UACE,6BACAxU,KAAKwQ,MAAM2Q,+BAEbtM,QAAS7U,KAAKyjB,yBAAyB1O,KAAK/U,YAEvB0B,IAApB1B,KAAKuQ,MAAM8P,MACVrgB,KAAKuQ,MAAM8P,KAAKQ,kBACdxQ,EAAA,qBACEzR,GAAG,2BACH4V,UAAU,2BACVsK,SAAKpd,EACLof,IAAI,iBAGWpf,IAApB1B,KAAKuQ,MAAM8P,OAC2B,IAArCrgB,KAAKuQ,MAAM8P,KAAKQ,kBACdxQ,EAAA,qBACEmE,UACE,0CACAxU,KAAKwQ,MAAMuQ,aAGZ/gB,KAAKuQ,MAAM8P,KAAKM,gBAK1B3gB,KAAKwQ,MAAM0P,gBAAiCxe,IAApB1B,KAAKuQ,MAAM8P,MAClChQ,EAAA,cAACqT,GAAD,CACErD,KAAMrgB,KAAKuQ,MAAM8P,KACjBU,YAAa/gB,KAAKwQ,MAAMuQ,YACxB/M,QAAShU,KAAKkhB,8BAA8BnM,KAAK/U,MACjDygB,UAAWzgB,KAAK2jB,gCAAgC5O,KAAK/U,gBA9LxC4B,aAsMVsT,KAGb,aAHaA,CAGC9O,IChOKwd,oLAMV,IACC3iB,EAAYjB,KAAKuQ,MAAjBtP,QAER,OACEoP,EAAA,qBAAKmE,UAAU,gBACbnE,EAAA,qBAAKmE,UAAU,mBACbnE,EAAA,qBAAKmE,UAAU,qBACbnE,EAAA,sBAAMmE,UAAU,uBAChBnE,EAAA,sBAAMmE,UAAU,qCAAqCvT,aAdnBW,aCGxC8E,oLAKF,OACE2J,EAAA,cAACwT,GAAD,CAAkB5iB,QAASjB,KAAKuQ,MAAME,KAAKzL,iCANfpD,aAWnBsT,KAGb,sBAHaA,CAGUxO,6DCFnBmE,eAeJ,SAAAA,EAAY0F,GAA2B,IAAAc,EAAA,OAAAvR,OAAAC,EAAA,EAAAD,CAAAE,KAAA6K,IACrCwG,EAAAvR,OAAA+P,EAAA,EAAA/P,CAAAE,KAAAF,OAAAgQ,EAAA,EAAAhQ,CAAA+K,GAAAyG,KAAAtR,KAAMuQ,KAZAuT,wBAAkC,GAWHzS,EAV/BiI,uBAAiC,EAUFjI,EAT/BkI,uBAAiC,EASFlI,EAR/B0S,oBAA8B,EAQC1S,EAN/B2S,aAA6B,CACnCC,iBAAkB,OAClBC,kBAAmB,QACnBC,KAAMC,MAG+B/S,EAsCvCgT,eAAiB,SAACvO,GAChB,IAAM3V,EAAgB2V,EAAMO,OAAOlW,MAAM+b,OAMzC,OAJA7K,EAAKiI,uBAAwB,EAC7BjI,EAAKkI,uBAAwB,EAC7BlI,EAAK0S,oBAAqB,EAEL,IAAjB5jB,EAAMR,QACR0R,EAAKiI,uBAAwB,EAC7BjI,EAAK0S,oBAAqB,OAC1B1S,EAAKS,SAAS,CAAEwS,QAAS,MAItB7kB,EAAaU,QAOlBkR,EAAKS,SAAS,CAAEwS,QAASnkB,KANvBkR,EAAKkI,uBAAwB,EAC7BlI,EAAK0S,oBAAqB,OAC1B1S,EAAKS,SAAS,CAAEwS,QAAS,OAvDUjT,EA8DvC8K,YAAc,SAACrG,GACbA,EAAMO,OAAOvJ,UA/DwBuE,EA8EvCkT,YAAc,WAAM,IAAAC,EACiBnT,EAAKd,MAAhCkU,EADUD,EACVC,iBAAkB/R,EADR8R,EACQ9R,KACtBgS,EAAmB,GACnBC,EAAwB,GACxBjK,EAAqB,GAUzB,OARIhI,EAAKe,YACPiH,EAAahI,EAAKY,aAElBoR,EAAWrT,EAAKuT,YAAYlS,EAAKY,aACjCqR,EAAgB,IAAMtT,EAAKwT,iBAAiBnS,EAAKY,aACjDjC,EAAKyS,wBAA0Ba,GAG1B,CAAEF,mBAAkB/J,aAAYgK,WAAUC,kBAzFjDtT,EAAKb,MAAQ,CACXsU,aAAa,EACbR,QAAS,GACTS,aAAa,GANsB1T,kFAUpB,IAAA2T,EACQhlB,KAAKuQ,MAAtBmC,EADSsS,EACTtS,KAAMuS,EADGD,EACHC,OACRX,EAAkBtkB,KAAKwQ,MAAM8T,aAErB5iB,IAAZ4iB,GACY,KAAZA,GACAA,IAAYtkB,KAAKuQ,MAAMmC,KAAKY,aAM1B7T,EAAa6kB,KACV5R,EAAKe,YAEHwR,EAAOX,GADZW,EAAOX,EAAUtkB,KAAK8jB,0BAI1B9jB,KAAK8R,SAAS,CAAEwS,QAAS,MAVvBtkB,KAAKklB,gEAcPllB,KAAKsZ,uBAAwB,EAC7BtZ,KAAKuZ,uBAAwB,EAC7BvZ,KAAK8R,SAAS,CAAEwS,QAAS,KACzBtkB,KAAKuQ,MAAMyD,8CA+BD0Q,GACV,IAAMS,EAAoBT,EAASU,YAAY,KAC/C,OAAID,EAAY,EAAU,GACnBT,EAASW,OAAO,EAAGF,4CAGXT,GACf,IAAMS,EAAoBT,EAASU,YAAY,KAC/C,OAAID,EAAY,EAAU,GACnBT,EAASW,OAAOF,EAAY,6CAqBnCnlB,KAAKklB,qDAGE,IAAAI,EAMHtlB,KAAKukB,cAJPE,EAFKa,EAELb,iBACA/J,EAHK4K,EAGL5K,WACAgK,EAJKY,EAILZ,SACAC,EALKW,EAKLX,cAEF,OACEtQ,EAAAC,EAAAC,cAAA,WACEF,EAAAC,EAAAC,cAACgR,GAAA,EAAD,CACEC,OAAQf,EACRgB,UAAWzlB,KAAK8U,gBAAgBC,KAAK/U,MACrC0lB,YAAY,EACZC,mBAAmB,qBACnBC,YAAa5lB,KAAKwQ,MAAMuU,YAAc/kB,KAAKgkB,kBAAetiB,EAC1DmkB,YAAY,GAEZxR,EAAAC,EAAAC,cAAA,OAAKC,UAAU,uBACbH,EAAAC,EAAAC,cAAA,UAAKvU,KAAKuQ,MAAME,KAAK3F,cAEvBuJ,EAAAC,EAAAC,cAAA,OAAKC,UAAU,wBACbH,EAAAC,EAAAC,cAACuR,GAAA,EAAD,CACEnR,MAAO3U,KAAKuQ,MAAME,KAAKvF,UACvB2X,YACG6B,GAAY1kB,KAAKuQ,MAAME,KAAK1F,sBAC5B2P,GAAc1a,KAAKuQ,MAAME,KAAKzF,uBAEjC+a,aAAcrB,GAAYhK,EAC1BoF,SAAU9f,KAAKqkB,eAAetP,KAAK/U,MACnC6f,WAAW,EACXmG,OAAQtB,GAAYC,KAGxBtQ,EAAAC,EAAAC,cAAA,OAAKC,UAAU,sBACZxU,KAAKsZ,uBACJtZ,KAAKuQ,MAAME,KAAK5L,sBACjB7E,KAAKuZ,uBACJvZ,KAAKuQ,MAAME,KAAK3L,4BAEpBuP,EAAAC,EAAAC,cAAA,OAAKC,UAAU,uBACbH,EAAAC,EAAAC,cAAA,UACEnB,KAAK,SACLoB,UAAU,sCACVK,QAAS7U,KAAKklB,kBAAkBnQ,KAAK/U,OAEpCA,KAAKuQ,MAAME,KAAKhG,kBAEnB4J,EAAAC,EAAAC,cAAA,UACEnB,KAAK,SACLoB,UAAU,gDACVK,QAAS7U,KAAKimB,iBAAiBlR,KAAK/U,MACpCgf,SAAUhf,KAAK+jB,oBAEd/jB,KAAKuQ,MAAME,KAAKxF,0BAvKJrJ,IAAM8N,WAgLlBwF,KAGb,eAHaA,CAGGrK,wBCxMLqb,GAAb,oBAAAA,IAAApmB,OAAAC,EAAA,EAAAD,CAAAE,KAAAkmB,GAAAlmB,KACYmmB,0BADZ,EAAAnmB,KAIYomB,aAAuB,cAJnC,OAAAtmB,OAAAG,EAAA,EAAAH,CAAAomB,EAAA,EAAAhmB,IAAA,oCAAAC,MAAA,SAM6Cub,GACrC,IAAK1b,KAAKmmB,qBAGN,IAAK,IAAMlR,KAFXjV,KAAKmmB,qBAAuB,GAELE,GACnB,GAAIA,GAAgBC,eAAerR,GAAW,CAC1C,IAAMsR,EAAaF,GAAgBpR,GAAUsR,WAE7C,GAAIA,EACA,IAAK,IAAIC,EAAI,EAAGA,EAAID,EAAW5mB,OAAQ6mB,IACnCxmB,KAAKmmB,qBAAqBI,EAAWC,IAAMvR,EAU/D,OAFAyG,EAAYA,EAAUtb,QAAQ,IAAK,IAAIqmB,cAEhCzmB,KAAKmmB,qBAAqBzK,IAAc1b,KAAKomB,iBA1B5DF,EAAA,GAmCaG,GAAgE,CACzEK,MAAO,CAAEH,WAAY,CAAC,QAAS,QAC/BI,QAAS,CACLJ,WAAY,CAAC,KAAM,MAAO,MAAO,MAAO,MAAO,KAAM,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAE1GK,MAAO,CACHL,WAAY,CACR,MACA,OACA,MACA,MACA,KACA,MACA,MACA,MACA,MACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,KACA,MACA,MACA,OAGRM,cAAe,GACfC,KAAM,CACFP,WAAY,CACR,OACA,MACA,MACA,MACA,KACA,MACA,MACA,OACA,MACA,MACA,MACA,OACA,aACA,cACA,eACA,SACA,MACA,MACA,MACA,QACA,UACA,IACA,MACA,UACA,KACA,MACA,MACA,OACA,KACA,MACA,MACA,QACA,MACA,SACA,SACA,MACA,MACA,MACA,KACA,SACA,OACA,SACA,MACA,MACA,MACA,IACA,MACA,KACA,QACA,MACA,MACA,OACA,KACA,YACA,MACA,MACA,IACA,MACA,MACA,KACA,MACA,WACA,MACA,UACA,UACA,YACA,KACA,SACA,MACA,MACA,IACA,MACA,OACA,aACA,MACA,KACA,MACA,MACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,QACA,OACA,MACA,OACA,KACA,OACA,MACA,MACA,IACA,OACA,MACA,OACA,MACA,MACA,MACA,MACA,IACA,MACA,OACA,WACA,SACA,KACA,SACA,WACA,QACA,OACA,KACA,MACA,MACA,MACA,KACA,MACA,MACA,OACA,YACA,IACA,MACA,QACA,MACA,OACA,OACA,OACA,OACA,QACA,KACA,KACA,MACA,KACA,UACA,MACA,SACA,OACA,OACA,MACA,KACA,KACA,MACA,IACA,OACA,KACA,MACA,KACA,MACA,KACA,MACA,OACA,OACA,OACA,QACA,MACA,WACA,MACA,MACA,MACA,OACA,OACA,IACA,OACA,QACA,MACA,aACA,aACA,SACA,OACA,OACA,KACA,KACA,QACA,MACA,WACA,QACA,MACA,MACA,MACA,MACA,UACA,MACA,MACA,OACA,MACA,KACA,KACA,MACA,MACA,UACA,MACA,OACA,QACA,OACA,MACA,OACA,OACA,OACA,MACA,QAGRQ,IAAK,GACLC,IAAK,CAAET,WAAY,CAAC,QACpBU,OAAQ,GACRC,KAAM,CAAEX,WA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","file":"js/main.ece886a2.chunk.js","sourcesContent":["import { ISite, IDrive, IDriveItem, IRootData, IRecycleBin } from \"../data/interfaces\";\r\n\r\n// Type guard for interface type checking of ISite instances\r\nexport function isSite(instance: any): instance is ISite {\r\n return \"webUrl\" in instance && instance.id.indexOf(\",\") > -1;\r\n}\r\n\r\n// Type guard for interface type checking of IRecycleBin instances\r\nexport function isRecycleBin(instance: any): instance is IRecycleBin {\r\n return instance.id.startsWith(\"rb\"); \r\n}\r\n\r\n// Type guard for interface type checking of IDrive instances\r\nexport function isDrive(instance: any): instance is IDrive {\r\n return \"driveUrl\" in instance;\r\n}\r\n\r\n// Type guard for interface type checking of IDrive instances\r\nexport function isOneDrive(instance: any): instance is IDrive {\r\n return \"driveUrl\" in instance && (instance as IDrive).isOneDrive;\r\n}\r\n\r\n// Type guard for interface type checking of IDriveItem instances\r\nexport function isDriveItem(instance: any): instance is IDriveItem {\r\n return \"isFolder\" in instance;\r\n}\r\n\r\n// Type guard to check the result.\r\nexport function isDriveItemServiceClient(instance: any) {\r\n var driveItem = instance as IDriveItem;\r\n if (driveItem.name !== undefined) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n}\r\n\r\n// Type guard to check the result of rootdata.\r\nexport function isRootDataServiceClient(data: any) {\r\n var rootData = data as IRootData;\r\n if (rootData.displayName !== undefined) return true;\r\n else return false;\r\n}\r\n","import { IDriveItem, IBaseItem } from \"../data/interfaces\";\r\nimport { isSite, isOneDrive } from \"./typeCheck\";\r\n\r\nexport const ValidateName = (name: string): boolean => {\r\n if (name.length > 0) {\r\n const regEx = /^[^*\":<>?/|\\\\\\t\\n\\r]*$/;\r\n if (name.match(regEx)) return true;\r\n }\r\n return false;\r\n};\r\n\r\nexport class Guid {\r\n public static newGuid(): string {\r\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, function (\r\n c: string\r\n ): string {\r\n var r: number = (Math.random() * 16) | 0,\r\n v: number = c === \"x\" ? r : (r & 0x3) | 0x8;\r\n return v.toString(16);\r\n });\r\n }\r\n}\r\n\r\nexport const GetSiteOrOneDriveUrl = (item: IDriveItem): string => {\r\n let parentItem: IBaseItem = item.parentItem;\r\n let found: boolean = false;\r\n let siteOrOneDriveUrl: string = \"\";\r\n\r\n // Check whether it is OneDrive or a site\r\n if (item.driveIsOneDrive) {\r\n while (!found) {\r\n if (isOneDrive(parentItem)) {\r\n siteOrOneDriveUrl = parentItem.driveUrl.replace(\"/Documents\", \"\");\r\n found = true;\r\n } else {\r\n parentItem = parentItem.parentItem;\r\n }\r\n }\r\n return siteOrOneDriveUrl;\r\n } else {\r\n while (!found) {\r\n if (isSite(parentItem)) {\r\n siteOrOneDriveUrl = parentItem.webUrl;\r\n found = true;\r\n } else {\r\n parentItem = parentItem.parentItem;\r\n }\r\n }\r\n\r\n return siteOrOneDriveUrl;\r\n }\r\n};\r\n","export enum ActionType {\r\n Add = 1,\r\n Update,\r\n Remove\r\n}\r\n\r\nexport enum ActionScope {\r\n TreeviewOnly = 1,\r\n DriveItemsListOnly = 2,\r\n TreeviewAndDriveItemsList = 3,\r\n}\r\n\r\nexport enum HierarchialDataScope {\r\n OneDrives,\r\n Favorites,\r\n AllSites,\r\n}\r\n\r\nexport enum MessageBarType {\r\n Info = 1,\r\n Error,\r\n Success,\r\n Warning,\r\n}\r\n\r\nexport enum MessageDialogType {\r\n Confirm = 1,\r\n Close,\r\n}\r\n\r\nexport enum ErrorVisibility {\r\n None = 1,\r\n MessageBar,\r\n GlobalDialog,\r\n}\r\n","import { IErrorResult, IError } from \"../data/interfaces\";\r\nimport { ErrorVisibility } from \"../data/enums\";\r\n\r\nexport default {\r\n ActionBar: {\r\n fileLabelRecycleBin: \"Recycle bin\",\r\n buttonFileText: \"Upload\",\r\n buttonMoveAllText: \"Move\",\r\n buttonCopyAllText: \"Copy\",\r\n buttonRefreshText: \"Refresh\",\r\n buttonDeleteText: \"Delete\",\r\n buttonDeleteAllText: \"Empty recycle bin\",\r\n buttonRestoreText: \"Restore item(s)\",\r\n buttonFolderText: \"Folder\",\r\n buttonFolderCreateText: \"Create\",\r\n buttonDocumentCreateText: \"Create\",\r\n buttonNewDocumentText: \"New Document\",\r\n newDocumentInputLabel: \"Name\",\r\n buttonEasyTemplate: \"EasyTemplate\",\r\n fileAddingFailedMessage: \"The file cannot be added\",\r\n fileTooLargeMessage:\r\n \"Upload has been canceled because at least one file is larger than the maximum size of 4 GB.\",\r\n folderNameInputLabel: \"Your folder name:\",\r\n folderCreatingFailedMessage: \"The folder cannot be created\",\r\n nameEmptyErrorMessage: \"Name cannot be empty!\",\r\n nameValidationErrorMessage: `Enter a name that does not include the following characters: \" * : < > ? / \\\\ |`,\r\n },\r\n AlertDialog: {\r\n loadingIndicatorMessage: \"Busy Moving...\",\r\n },\r\n App: {\r\n errorDialogTitle: \"Error\",\r\n moveFileFailedMessage: \"Moving Failed.\",\r\n copyFileFailedMessage: \"Copying Failed.\",\r\n moveFileFailedMessageResult:\r\n \"One or more items have not been moved. Maybe the file(s) are still in use or allready exist at the target location.\",\r\n copyFileFailedMessageResult:\r\n \"One or more items have not been copied. Maybe the file(s) allready exist at the target location.\",\r\n noSitesFoundMessage: \"No sites were found in\",\r\n oneDrivesDatasetName: \"Personal files\",\r\n favoriteSitesDatasetName: \"Favorite sites\",\r\n sharePointSitesDatasetName: \"All sites\",\r\n noTreeviewItemSelectedMessage:\r\n \"No OneDrive, site, library or folder has been selected in the tree structure on the left!\",\r\n noContentsToShowForSites:\r\n \"Click on a library or folder in the tree structure on the left to view it's contents!\",\r\n moveFileMessageDialogTitle: \"Moving item(s)\",\r\n copyFileMessageDialogTitle: \"Copying item(s)\",\r\n moveFileMessageDialogSourceAndTargetAreEqualMessage:\r\n \"Source and target location are the same. Item(s) cannot be moved.\",\r\n copyFileMessageDialogSourceAndTargetAreEqualMessage:\r\n \"Source and target location are the same. Item(s) cannot be copied.\",\r\n tenantIsValidSPOFailedMessage:\r\n \"This tenant does not have a valid license in Azure or has expired.\",\r\n fileLabelRecycleBin: \"Recycle bin\",\r\n },\r\n BasePanel: {\r\n closeButtonAriaLabel: \"Close\",\r\n },\r\n CommandBar: {\r\n searchBoxPlaceHolderText: \"Search in SharePoint\",\r\n searchBoxTooltipText: \"Submit search query\",\r\n },\r\n CommandBarDropdown: {\r\n linkSignOutText: \"Sign out\",\r\n myAccountText: \"My account\",\r\n },\r\n DataLoadingSpinnner: {\r\n loadingIndicatorMessage: \"Data is being loaded...\",\r\n },\r\n DriveItemsList: {\r\n appNotAvailableMessage:\r\n \"You are trying to open #fileName# in an app, however the required app #appName# is not installed on this computer. Or click 'Open #app#?' in the popup.\",\r\n columnHeaderNameTitle: \"Name\",\r\n columnHeaderSizeTitle: \"Size\",\r\n columnHeaderModifiedTitle: \"Last modified\",\r\n columnHeaderOriginalLocationTitle: \"Original location\",\r\n columnHeaderDeletedByTitle: \"Deleted by\",\r\n columnHeaderDeletedOnTitle: \"Deleted at\",\r\n contextMenuItemRestoreText: \"Restore\",\r\n contextMenuItemOpenInBrowserText: \"Open in browser\",\r\n contextMenuItemOpenInAppText: \"Open in app\",\r\n contextMenuItemRenameText: \"Rename\",\r\n contextMenuItemCopyText: \"Copy\",\r\n contextMenuItemDownloadText: \"Download\",\r\n contextMenuItemRemoveText: \"Remove\",\r\n contextMenuItemMoveText: \"Move to\",\r\n contextMenuItemShareText: \"Share\",\r\n confirmDeletePreFixMessage: \"Are you sure you want move\",\r\n confirmDeletePostFixMessage: \"to the recycle bin?\",\r\n failedDeleteMessage: \"Item cannot be deleted.\",\r\n failedDeletePreFixMessage: \"Item\",\r\n failedDeletePostFixMessage: \"cannot be deleted.\",\r\n failedRenameMessage: \"Item cannot be renamed.\",\r\n messageDialogConfirmTitle: \"Confirm delete\",\r\n noDownloadAvailableMessage:\r\n \"At this time it is not possible to download folders and all content.\",\r\n noFilesOrFoldersMessage: \"No folders/files available\",\r\n fileLabelFile: \"File\",\r\n fileLabelRecycleBin: \"Recycle bin\",\r\n fileLabelOf: \"of\",\r\n fileAddingFailedMessage: \"The file cannot be added\",\r\n fileTooLargeMessage:\r\n \"Upload has been canceled because at least one file is larger than the maximum size of 4 GB.\",\r\n folderInDragnDropSelectionMessage:\r\n \"Only select files please (folders cannot be dragged and dropped yet)\",\r\n folderPostFixTitle: \"folder\",\r\n },\r\n ItemModificationQueue: {\r\n addMessage: \"is being added...\",\r\n uploadMessage: \"is being uploaded...\",\r\n removeMessage: \"is being removed...\",\r\n restoreMessage: \"is being restored...\",\r\n emptyMessage: \"Recycle bin is being emptied...\",\r\n updateMessage: \"is being updated...\",\r\n renameMessage: \"is being renamed...\",\r\n moveMessage: \"is being moved...\",\r\n copyMessage: \"is being copied...\",\r\n loadMessage: \"is being loaded...\",\r\n batchRemoveMessage: \"items are being removed...\",\r\n batchMoveMessage: \"items are being moved...\",\r\n batchCopyMessage: \"items are being copied...\",\r\n labelFile: \"File\",\r\n labelFolder: \"Folder\",\r\n },\r\n MessageDialog: {\r\n buttonNoText: \"No\",\r\n buttonYesText: \"Yes\",\r\n buttonCloseText: \"Close\",\r\n },\r\n DestinationDialog: {\r\n breadCrumbKey0Title: \"Choose a location\",\r\n loadingMessage: \"Please wait...\",\r\n loadingIndicatorMoveMessage: \"Item is being moved...\",\r\n emptyFolderMoveText:\r\n \"This folder is empty. Click on the 'Move here' button to move the file to this folder.\",\r\n loadingIndicatorCopyMessage: \"Item is being copied...\",\r\n emptyFolderCopyText:\r\n \"This folder is empty. Click on the 'Copy here' button to copy the file to this folder.\",\r\n moveToHereText: \"Move here\",\r\n copyToHereText: \"Copy here\",\r\n },\r\n CopyDialog: {\r\n breadCrumbKey0Title: \"Choose a location\",\r\n loadingMessage: \"Please wait...\",\r\n loadingIndicatorMessage: \"Item is being copied...\",\r\n emptyFolderText:\r\n \"This folder is empty. Click on the 'Copy here' button to copy the file to this folder.\",\r\n copyToHereText: \"Copy here\",\r\n },\r\n ProgressBar: {\r\n buttonCancelText: \"Cancel upload\",\r\n labelCancelText: \"Canceling in progress...\",\r\n labelInitText: \"Upload in progress...\",\r\n modalTitle: \"Uploading files\",\r\n },\r\n RenameDialog: {\r\n dialogTitle: \"Modify the name\",\r\n newFileNameInputText: \"New file name\",\r\n newFolderNameInputText: \"New folder name\",\r\n buttonSaveText: \"Save\",\r\n buttonCancelText: \"Cancel\",\r\n nameEmptyErrorMessage: \"Name cannot be empty!\",\r\n nameValidationErrorMessage: `Enter a name that does not include the following characters: \" * : < > ? / \\\\ |`,\r\n nameLabel: \"Name\",\r\n },\r\n ShareDialog: {\r\n dialogTitle: \"Copy Link\",\r\n copyShareLinkToClipboardText: \"Copy the link to the clipboard\",\r\n creatingLinkMessage: \"Link is being created...\",\r\n createdLinkMessage: \"Link has been copied\",\r\n },\r\n TenantInvalidMessage: {\r\n licenseInValidMessage:\r\n \"No active product license is configured this tenant.\",\r\n signedInUserText:\r\n \"You are currently signed in as '{0}'. You can try to sign-out and sign-in using a different account.\",\r\n linkSignOutText: \"Sign out\",\r\n linkSignOutTooltipText: \"Click here to sign out the current user\",\r\n SPOInValidMessage:\r\n \"This tenant has an invalid or expired license in Azure, the application cannot be started!\",\r\n },\r\n TreeViewNavigator: {\r\n fileLabelRecycleBin: \"Recycle bin\",\r\n fileTooLargeMessage:\r\n \"Upload has been canceled because at least one file is larger than the maximum size of 4 GB.\",\r\n folderInDragnDropSelectionMessage:\r\n \"Only select files please (folders cannot be dragged and dropped yet)\",\r\n permissionControlText: \"Manage permissions\",\r\n reloadItemText: \"Reload item\",\r\n loadingText: \"are loading...\",\r\n followSite: \"Follow site\",\r\n unfollowSite: \"Unfollow site\",\r\n },\r\n upload: {\r\n cancel: \"Cancel\", //Cancel\r\n clearSelectedFiles: \"Clear\", //Clear\r\n dropFilesHere: \"Drop files here to upload\", //Drop files here to upload\r\n headerStatusUploaded: \"Done\", //Done\r\n headerStatusUploading: \"Uploading...\", //Uploading...\r\n invalidFileExtension: \"File type not allowed.\", //File type not allowed.\r\n invalidFiles: \"Invalid file(s). Please check file upload requirements.\", //Invalid file(s). Please check file upload requirements.\r\n invalidMaxFileSize: \"File size too large.\", //File size too large.\r\n invalidMinFileSize: \"File size too small.\", //File size too small.\r\n remove: \"Remove\", //Remove\r\n retry: \"Retry\", //Retry\r\n select: \"Select files...\", //Select files...\r\n uploadSelectedFiles: \"Upload\", //Upload\r\n total: \"Total\", //Total\r\n files: \"files\", //files\r\n },\r\n EasyTemplateDialog: {\r\n Title: \"EasyTemplate\",\r\n Description: \"Create a new file from an existing template\",\r\n Error: \"Oops! Something went wrong\",\r\n Close: \"Close\",\r\n Retry: \"Try again\",\r\n Back: \"Back\",\r\n Next: \"Next\",\r\n Unlicensed: \"Your organization is not licensed for using this application.\",\r\n\r\n Word: \"Word\",\r\n Excel: \"Excel\",\r\n PowerPoint: \"PowerPoint\",\r\n\r\n Site: \"Site\",\r\n Sites: \"Sites\",\r\n Library: \"Library\",\r\n Libraries: \"Libraries\",\r\n Folder: \"Folder\",\r\n Folders: \"Folders\",\r\n Templates: \"Templates\",\r\n\r\n Loading: \"Loading {0}...\",\r\n CreatingFile: \"Creating file...\",\r\n ForWhichApplication:\r\n \"For which application would you like to create a file?\",\r\n EnterMetadata: \"Please enter document information\",\r\n FilenameHelp: \"Please enter a name for your file \",\r\n Preview: \"Preview of template '{filename}'\",\r\n CopySuccesfull: \"File created succesfully.\",\r\n NewFile: \"You can find your new file here!\",\r\n SelectTemplate: \"Select a template\",\r\n NoTemplatesFound: \"No templates found\",\r\n NoPreviewFound: \"Preview not available\",\r\n SearchText: \"Find a template\",\r\n ChooseLocation: \"Where would you like to save your new file?\",\r\n\r\n SitePages: \"Site Pages\",\r\n SelectTag: \"Filter on tag...\",\r\n NoDescriptionText: \"\",\r\n NoTagsText: \"\"\r\n },\r\n};\r\n\r\nconst httpErrors = [\r\n {\r\n Code: \"accessDenied\",\r\n Description: \"The caller doesn't have permission to perform the action.\",\r\n HTTPstatuscode: 403,\r\n },\r\n {\r\n Code: \"activityLimitReached\",\r\n Description: \"The app or user has been throttled.\",\r\n HTTPstatuscode: 429,\r\n },\r\n {\r\n Code: \"generalException\",\r\n Description: \"An unspecified error has occurred.\",\r\n HTTPstatuscode: 500, // General error\r\n },\r\n {\r\n Code: \"invalidRange\",\r\n Description: \"The specified byte range is invalid or unavailable.\",\r\n HTTPstatuscode: 416,\r\n },\r\n {\r\n Code: \"invalidRequest\",\r\n Description: \"The request is malformed or incorrect.\",\r\n HTTPstatuscode: 400,\r\n },\r\n {\r\n Code: \"itemNotFound\",\r\n Description: \"The resource could not be found.\",\r\n HTTPstatuscode: 404,\r\n },\r\n {\r\n Code: \"malwareDetected\",\r\n Description: \"Malware was detected in the requested resource.\",\r\n HTTPstatuscode: 500, // General error\r\n },\r\n {\r\n Code: \"nameAlreadyExists\",\r\n Description: \"The specified item name already exists.\",\r\n HTTPstatuscode: 409,\r\n },\r\n {\r\n Code: \"notAllowed\",\r\n Description: \"The action is not allowed by the system.\",\r\n HTTPstatuscode: 405,\r\n },\r\n {\r\n Code: \"notSupported\",\r\n Description: \"The request is not supported by the system.\",\r\n HTTPstatuscode: 415,\r\n },\r\n {\r\n Code: \"resourceModified\",\r\n Description:\r\n \"The resource being updated has changed since the caller last read it, usually an eTag mismatch.\",\r\n HTTPstatuscode: 410,\r\n },\r\n {\r\n Code: \"resyncRequired\",\r\n Description:\r\n \"The delta token is no longer valid, and the app must reset the sync state.\",\r\n HTTPstatuscode: 500, // General error\r\n },\r\n {\r\n Code: \"serviceNotAvailable\",\r\n Description:\r\n \"The service is not available. Try the request again after a delay.There may be a Retry-After header.\",\r\n HTTPstatuscode: 503,\r\n },\r\n {\r\n Code: \"quotaLimitReached\",\r\n Description: \"The user has reached their quota limit.\",\r\n HTTPstatuscode: 507,\r\n },\r\n {\r\n Code: \"unauthenticated\",\r\n Description: \"The caller is not authenticated.\",\r\n HTTPstatuscode: 401,\r\n },\r\n\r\n // Custom statuscodes section\r\n {\r\n Code: \"pathIsTooLongWhenRenaming\",\r\n Description:\r\n \"The specified file or folder name is too long. The URL path for all files and folders can contain 400 characters or less. Type a shorter file or folder name for: \",\r\n HTTPstatuscode: 475,\r\n },\r\n {\r\n Code: \"pathIsTooLongWhenMoving\",\r\n Description:\r\n \"The total URL path in the new folder becomes too long. The URL path for all files and folders can contain 400 characters or less. First type a shorter file or folder name and try again for: \",\r\n HTTPstatuscode: 476,\r\n },\r\n {\r\n Code: \"tenantNoValidSPOLicense\",\r\n Description:\r\n \"This tenant does not have a valid SPO license or has been expired.\", //Tenant does not have a SPO license.\r\n HTTPstatuscode: 477,\r\n },\r\n {\r\n Code: \"pathIsTooLongWhenAddingFolder\",\r\n Description:\r\n \"By creating the new folder, the total URL path becomes too long (due to this new folder and previous folders). The URL path for all files and folders can contain 400 characters or less. Type a shorter folder name and try again for the folder: \",\r\n HTTPstatuscode: 478,\r\n },\r\n];\r\n\r\nexport function getErrors_en() {\r\n return httpErrors;\r\n}\r\n\r\nconst errors: IError[] = [\r\n {\r\n internalErrorCode: 400,\r\n correlationId: \"\",\r\n message: \"Something went wrong. Please report this to the service desk.\",\r\n errorVisibility: ErrorVisibility.GlobalDialog,\r\n },\r\n {\r\n internalErrorCode: 401,\r\n correlationId: \"\",\r\n message:\r\n \"You are not authorized to access the resources for using this application.\",\r\n errorVisibility: ErrorVisibility.GlobalDialog,\r\n },\r\n {\r\n internalErrorCode: 420,\r\n correlationId: \"\",\r\n message: \"Your organization is not licensed for using this application.\",\r\n errorVisibility: ErrorVisibility.GlobalDialog,\r\n },\r\n {\r\n internalErrorCode: 421,\r\n correlationId: \"\",\r\n message: \"The license for your organization is expired.\",\r\n errorVisibility: ErrorVisibility.GlobalDialog,\r\n },\r\n {\r\n internalErrorCode: 422,\r\n correlationId: \"\",\r\n message: \"Your organization could not be verified by Microsoft.\",\r\n errorVisibility: ErrorVisibility.GlobalDialog,\r\n },\r\n {\r\n internalErrorCode: 500,\r\n correlationId: \"\",\r\n message:\r\n \"An unknown error has occured. Please try again or contact the service desk.\",\r\n errorVisibility: ErrorVisibility.GlobalDialog,\r\n },\r\n {\r\n internalErrorCode: 608,\r\n correlationId: \"\",\r\n message: \"There is allready an item with the same name.\",\r\n errorVisibility: ErrorVisibility.MessageBar,\r\n },\r\n {\r\n internalErrorCode: 710,\r\n correlationId: \"\",\r\n message: \"The choosen name is too long.\",\r\n errorVisibility: ErrorVisibility.MessageBar,\r\n },\r\n {\r\n internalErrorCode: 711,\r\n correlationId: \"\",\r\n message: \"Moving of items to the other library has failed.\",\r\n errorVisibility: ErrorVisibility.GlobalDialog,\r\n },\r\n {\r\n internalErrorCode: 720,\r\n correlationId: \"\",\r\n message: \"It is not possible to upload an empty file.\",\r\n errorVisibility: ErrorVisibility.GlobalDialog,\r\n },\r\n {\r\n internalErrorCode: 721,\r\n correlationId: \"\",\r\n message: \"An error has occured while uploading the file. Please try again.\",\r\n errorVisibility: ErrorVisibility.GlobalDialog,\r\n },\r\n {\r\n internalErrorCode: 723,\r\n correlationId: \"\",\r\n message: \"Resolving the choosen file type has failed.\",\r\n errorVisibility: ErrorVisibility.GlobalDialog,\r\n },\r\n {\r\n internalErrorCode: 724,\r\n correlationId: \"\",\r\n message: \"An error has occured while creating the file. Please try again.\",\r\n errorVisibility: ErrorVisibility.MessageBar,\r\n },\r\n {\r\n internalErrorCode: 725,\r\n correlationId: \"\",\r\n message:\r\n \"A timeout has occured while moving the item(s). Please try again.\",\r\n errorVisibility: ErrorVisibility.GlobalDialog,\r\n },\r\n {\r\n internalErrorCode: 726,\r\n correlationId: \"\",\r\n message: \"The item is locked. Please try again.\",\r\n errorVisibility: ErrorVisibility.GlobalDialog,\r\n },\r\n {\r\n internalErrorCode: 730,\r\n correlationId: \"\",\r\n message:\r\n \"Sharing is not enabled for this item. To enable sharing, please contact your administrator.\",\r\n errorVisibility: ErrorVisibility.GlobalDialog,\r\n },\r\n {\r\n internalErrorCode: 901,\r\n correlationId: \"\",\r\n message:\r\n \"There is allready a file with the same name at the original location.

To restore the file, rename the file at the orignal location first.\",\r\n errorVisibility: ErrorVisibility.GlobalDialog,\r\n },\r\n {\r\n internalErrorCode: 902,\r\n correlationId: \"\",\r\n message: \"The original location to restore the file has been removed\",\r\n errorVisibility: ErrorVisibility.GlobalDialog,\r\n },\r\n {\r\n internalErrorCode: 903,\r\n correlationId: \"\",\r\n message: \"The file was not found in the recycle bin.\",\r\n errorVisibility: ErrorVisibility.GlobalDialog,\r\n },\r\n];\r\n\r\nexport function getError_en(errorResult: IErrorResult): IError {\r\n let error: IError | undefined = errors.find((error: IError) => {\r\n return error.internalErrorCode === errorResult.internalErrorCode;\r\n });\r\n\r\n if (error === undefined) {\r\n return {\r\n internalErrorCode: 400,\r\n correlationId: \"\",\r\n message:\r\n \"Unknown error occured. Please try again or contact the service desk.\",\r\n errorVisibility: ErrorVisibility.GlobalDialog,\r\n };\r\n }\r\n\r\n error.correlationId = errorResult.correlationId;\r\n\r\n return error;\r\n}\r\n","import { IErrorResult, IError } from \"../data/interfaces\";\r\nimport { ErrorVisibility } from \"../data/enums\";\r\n\r\nexport default {\r\n ActionBar: {\r\n fileLabelRecycleBin: \"Prullenbak\",\r\n buttonFileText: \"Uploaden\",\r\n buttonMoveAllText: \"Verplaats\",\r\n buttonCopyAllText: \"Kopieer\",\r\n buttonRefreshText: \"Vernieuwen\",\r\n buttonDeleteText: \"Verwijderen\",\r\n buttonDeleteAllText: \"Prullenbak leegmaken\",\r\n buttonRestoreText: \"Item(s) herstellen\",\r\n buttonFolderText: \"Map\",\r\n buttonFolderCreateText: \"Maken\",\r\n buttonDocumentCreateText: \"Maken\",\r\n buttonNewDocumentText: \"Nieuw Document\",\r\n newDocumentInputLabel: \"Documentnaam\",\r\n buttonEasyTemplate: \"EasyTemplate\",\r\n fileAddingFailedMessage: \"Het bestand kan niet worden toegevoegd\",\r\n fileTooLargeMessage:\r\n \"Uploaden is afgebroken omdat minstens één bestand groter is dan de maximale grootte van 4 GB.\",\r\n folderNameInputLabel: \"Uw mapnaam:\",\r\n folderCreatingFailedMessage: \"De map kan niet worden aangemaakt\",\r\n nameEmptyErrorMessage: \"Naam mag niet leeg zijn!\",\r\n nameValidationErrorMessage: `Voer een naam in waarin de volgende tekens niet voorkomen: \" * : < > ? / \\\\ |`,\r\n },\r\n AlertDialog: {\r\n loadingIndicatorMessage: \"Bezig met verplaatsen...\",\r\n },\r\n App: {\r\n errorDialogTitle: \"Foutmelding\",\r\n moveFileFailedMessage: \"Het verplaatsen is mislukt.\",\r\n copyFileFailedMessage: \"Het kopiëren is mislukt.\",\r\n moveFileFailedMessageResult:\r\n \"Één of meer items zijn niet verplaatst. Bijvoorbeeld omdat deze in gebruik is/zijn of dat ze al bestaan op de doellocatie.\",\r\n copyFileFailedMessageResult:\r\n \"Één of meer items zijn niet gekopieerd. Bijvoorbeeld omdat deze al bestaan op de doellocatie\",\r\n noSitesFoundMessage: \"Er zijn geen sites gevonden in\",\r\n oneDrivesDatasetName: \"Persoonlijke bestanden\",\r\n favoriteSitesDatasetName: \"Favoriete sites\",\r\n sharePointSitesDatasetName: \"Alle sites\",\r\n noTreeviewItemSelectedMessage:\r\n \"In de boomstructuur aan de linkerkant is nog geen OneDrive, site, bibliotheek of map geselecteerd!\",\r\n noContentsToShowForSites:\r\n \"Klik in de boomstructuur aan de linkerkant op een bibliotheek of map om de inhoud weer te geven.\",\r\n moveFileMessageDialogTitle: \"Item(s) verplaatsen\",\r\n copyFileMessageDialogTitle: \"Item(s) kopiëren\",\r\n moveFileMessageDialogSourceAndTargetAreEqualMessage:\r\n \"Bron en doellocatie zijn hetzelfde. Item(s) kunnen niet verplaatst worden.\",\r\n copyFileMessageDialogSourceAndTargetAreEqualMessage:\r\n \"Bron en doellocatie zijn hetzelfde. Item(s) kunnen niet gekopieerd worden.\",\r\n tenantIsValidSPOFailedMessage:\r\n \"Deze tenant heeft geen geldige licentie in Azure of is verlopen.\",\r\n fileLabelRecycleBin: \"Prullenbak\",\r\n },\r\n BasePanel: {\r\n closeButtonAriaLabel: \"Afsluiten\",\r\n },\r\n CommandBar: {\r\n searchBoxPlaceHolderText: \"Zoeken in SharePoint\",\r\n searchBoxTooltipText: \"Zoekopdracht verzenden\",\r\n },\r\n CommandBarDropdown: {\r\n linkSignOutText: \"Afmelden\",\r\n myAccountText: \"Mijn account\",\r\n },\r\n DataLoadingSpinnner: {\r\n loadingIndicatorMessage: \"Data wordt geladen...\",\r\n },\r\n DriveItemsList: {\r\n appNotAvailableMessage:\r\n \"U probeert #fileName# te openen in een app, echter is de betreffende app #appName# niet op deze computer geïnstalleerd. Of klik op 'Open #app#?' in de popup. \",\r\n columnHeaderNameTitle: \"Naam\",\r\n columnHeaderSizeTitle: \"Bestandsgrootte\",\r\n columnHeaderModifiedTitle: \"Gewijzigd\",\r\n columnHeaderOriginalLocationTitle: \"Oorspronkelijke locatie\",\r\n columnHeaderDeletedByTitle: \"Verwijderd door\",\r\n columnHeaderDeletedOnTitle: \"Verwijderd op\",\r\n contextMenuItemRestoreText: \"Terugzetten\",\r\n contextMenuItemOpenInBrowserText: \"Openen in browser\",\r\n contextMenuItemOpenInAppText: \"Openen in app\",\r\n contextMenuItemRenameText: \"Naam wijzigen\",\r\n contextMenuItemCopyText: \"Kopiëren\",\r\n contextMenuItemDownloadText: \"Downloaden\",\r\n contextMenuItemRemoveText: \"Verwijderen\",\r\n contextMenuItemMoveText: \"Verplaatsen naar\",\r\n contextMenuItemShareText: \"Delen\",\r\n confirmDeletePreFixMessage: \"Weet u zeker dat u\",\r\n confirmDeletePostFixMessage: \"naar de Prullenbak wilt verzenden?\",\r\n failedDeleteMessage: \"Item kan niet worden verwijderd.\",\r\n failedDeletePreFixMessage: \"Item\",\r\n failedDeletePostFixMessage: \"kan niet worden verwijderd.\",\r\n failedRenameMessage: \"Item kan niet worden hernoemd.\",\r\n messageDialogConfirmTitle: \"Verwijderen bevestigen\",\r\n noDownloadAvailableMessage:\r\n \"Op dit moment is het niet mogelijk om mappen en alle inhoud te downloaden.\",\r\n noFilesOrFoldersMessage: \"Geen bestanden of mappen aanwezig\",\r\n fileLabelFile: \"Bestand\",\r\n fileLabelRecycleBin: \"Prullenbak\",\r\n fileLabelOf: \"van\",\r\n fileAddingFailedMessage: \"Het bestand kan niet worden toegevoegd\",\r\n fileTooLargeMessage:\r\n \"Uploaden is afgebroken omdat minstens één bestand groter is dan de maximale grootte van 4 GB.\",\r\n folderInDragnDropSelectionMessage:\r\n \"Selecteer alleen bestanden a.u.b. (mappen kunnen nog niet worden gesleept en neergezet)\",\r\n folderPostFixTitle: \"map\",\r\n },\r\n ItemModificationQueue: {\r\n addMessage: \"wordt toegevoegd...\",\r\n uploadMessage: \"wordt geüpload...\",\r\n removeMessage: \"wordt verwijderd...\",\r\n restoreMessage: \"wordt teruggeplaatst...\",\r\n emptyMessage: \"Prullenbak wordt geleegd...\",\r\n updateMessage: \"wordt bijgewerkt...\",\r\n renameMessage: \"wordt hernoemd...\",\r\n moveMessage: \"wordt verplaatst...\",\r\n copyMessage: \"wordt gekopieerd...\",\r\n loadMessage: \"wordt geladen...\",\r\n batchRemoveMessage: \"items worden verwijderd...\",\r\n batchMoveMessage: \"items worden verplaatst...\",\r\n batchCopyMessage: \"items worden gekopieerd...\",\r\n labelFile: \"Bestand\",\r\n labelFolder: \"Map\",\r\n },\r\n MessageDialog: {\r\n buttonNoText: \"Nee\",\r\n buttonYesText: \"Ja\",\r\n buttonCloseText: \"Sluiten\",\r\n },\r\n DestinationDialog: {\r\n breadCrumbKey0Title: \"Kies een locatie\",\r\n loadingMessage: \"Even geduld a.u.b....\",\r\n emptyFolderMoveText:\r\n \"Deze map is leeg. Klik op de knop 'Hierheen verplaatsen' om het bestand naar deze map te verplaatsen.\",\r\n emptyFolderCopyText:\r\n \"Deze map is leeg. Klik op de knop 'Hierheen kopiëren' om het bestand naar deze map te kopiëren.\",\r\n moveToHereText: \"Hierheen verplaatsen\",\r\n copyToHereText: \"Hierheen kopiëren\",\r\n },\r\n CopyDialog: {\r\n breadCrumbKey0Title: \"Kies een locatie\",\r\n loadingMessage: \"Even geduld a.u.b....\",\r\n loadingIndicatorMessage: \"Item wordt gekopieerd...\",\r\n emptyFolderText:\r\n \"Deze map is leeg. Klik op de knop 'Hierheen kopiëren' om het bestand naar deze map te kopiëren.\",\r\n copyToHereText: \"Hierheen kopiëren\",\r\n },\r\n ProgressBar: {\r\n buttonCancelText: \"Upload annuleren\",\r\n labelCancelText: \"Bezig met annuleren...\",\r\n labelInitText: \"Bezig met uploaden...\",\r\n modalTitle: \"Bestanden uploaden\",\r\n },\r\n RenameDialog: {\r\n dialogTitle: \"Naam wijzigen\",\r\n newFileNameInputText: \"Nieuwe bestandsnaam\",\r\n newFolderNameInputText: \"Nieuwe mapnaam\",\r\n buttonSaveText: \"Opslaan\",\r\n buttonCancelText: \"Annuleren\",\r\n nameEmptyErrorMessage: \"Naam mag niet leeg zijn!\",\r\n nameValidationErrorMessage: `Voer een naam in waarin de volgende tekens niet voorkomen: \" * : < > ? / \\\\ |`,\r\n nameLabel: \"Naam\",\r\n },\r\n ShareDialog: {\r\n dialogTitle: \"Kopieer koppeling\",\r\n copyShareLinkToClipboardText: \"Kopieer de koppeling naar het klembord\",\r\n creatingLinkMessage: \"Koppeling wordt gemaakt...\",\r\n createdLinkMessage: \"Koppeling is gekopieerd\",\r\n },\r\n TenantInvalidMessage: {\r\n licenseInValidMessage:\r\n \"Er is geen actieve product licentie aangetroffen voor de huidige tenant.\",\r\n signedInUserText:\r\n \"U bent momenteel ingelogd als '{0}'. U kunt proberen om uit te loggen en opnieuw in te loggen met een ander account.\",\r\n linkSignOutText: \"Afmelden\",\r\n linkSignOutTooltipText: \"Klik hier om de huidige gebruiker af te melden\",\r\n SPOInValidMessage:\r\n \"Deze tenant heeft een ongeldige of verlopen licentie in Azure, de applicatie kan hierdoor niet worden gestart!\",\r\n },\r\n TreeViewNavigator: {\r\n fileLabelRecycleBin: \"Prullenbak\",\r\n fileTooLargeMessage:\r\n \"Uploaden is afgebroken omdat minstens één bestand groter is dan de maximale grootte van 4 GB.\",\r\n folderInDragnDropSelectionMessage:\r\n \"Selecteer alleen bestanden a.u.b. (mappen kunnen nog niet worden gesleept en neergezet)\",\r\n permissionControlText: \"Machtigingen beheren\",\r\n reloadItemText: \"Opnieuw laden\",\r\n loadingText: \"worden geladen...\",\r\n followSite: \"Site volgen\",\r\n unfollowSite: \"Site niet volgen\",\r\n },\r\n upload: {\r\n cancel: \"Annuleren\", //Cancel\r\n clearSelectedFiles: \"Wissen\", //Clear\r\n dropFilesHere: \"Plaats hier uw bestanden om te uploaden\", //Drop files here to upload\r\n headerStatusUploaded: \"Gereed\", //Done\r\n headerStatusUploading: \"Uploaden...\", //Uploading...\r\n invalidFileExtension: \"Bestandstype niet toegestaan.\", //File type not allowed.\r\n invalidFiles:\r\n \"Ongeldige bestand (en). Controleer de vereisten voor het uploaden van bestanden.\", //Invalid file(s). Please check file upload requirements.\r\n invalidMaxFileSize: \"Bestandsgrootte te groot.\", //File size too large.\r\n invalidMinFileSize: \"Bestandsgrootte te klein.\", //File size too small.\r\n remove: \"Verwijderen\", //Remove\r\n retry: \"Оpnieuw proberen\", //Retry\r\n select: \"Selecteer bestanden...\", //Select files...\r\n uploadSelectedFiles: \"Upload\", //Upload\r\n total: \"Totaal\", //Total\r\n files: \"bestanden\", //files\r\n },\r\n EasyTemplateDialog: {\r\n Title: \"EasyTemplate\",\r\n Description: \"Maak een nieuw bestand aan de hand van een bestaand sjabloon\",\r\n Error: \"Oeps! Er is iets fout gegaan\",\r\n Close: \"Sluiten\",\r\n Retry: \"Opnieuw proberen\",\r\n Back: \"Terug\",\r\n Next: \"Volgende\",\r\n Unlicensed: \"Uw organisatie heeft geen geldige licentie voor deze applicatie.\",\r\n\r\n Word: \"Word\",\r\n Excel: \"Excel\",\r\n PowerPoint: \"PowerPoint\",\r\n\r\n Site: \"Site\",\r\n Sites: \"Sites\",\r\n Library: \"Bibliotheek\",\r\n Libraries: \"Bibliotheken\",\r\n Folder: \"Map\",\r\n Folders: \"Mappen\",\r\n Templates: \"Sjablonen\",\r\n\r\n Loading: \"{0} laden...\",\r\n CreatingFile: \"Bestand maken...\",\r\n ForWhichApplication: \"Voor welke applicatie wilt u een bestand maken?\",\r\n EnterMetadata: \"Voer aub document informatie in\",\r\n FilenameHelp: \"Voer aub een naam voor uw bestand in \",\r\n Preview: \"Voorbeeld van sjabloon '{filename}'\",\r\n CopySuccesfull: \"Bestand succesvol aangemaakt.\",\r\n NewFile: \"U kunt uw nieuwe bestand hier vinden!\",\r\n SelectTemplate: \"Selecteer een sjabloon\",\r\n NoTemplatesFound: \"Geen sjablonen gevonden\",\r\n NoPreviewFound: \"Voorbeeld niet beschikbaar\",\r\n SearchText: \"Vind een sjabloon\",\r\n ChooseLocation: \"Waar moet uw nieuwe document worden opgeslagen?\",\r\n\r\n SitePages: \"Pagina's\",\r\n SelectTag: \"Filter op tag...\",\r\n NoDescriptionText: \"\",\r\n NoTagsText: \"\"\r\n },\r\n};\r\n\r\nconst httpErrors = [\r\n {\r\n Code: \"accessDenied\",\r\n Description:\r\n \"De gebruiker heeft geen toestemming om de actie uit te voeren.\", //The caller doesn't have permission to perform the action.\r\n HTTPstatuscode: 403,\r\n },\r\n {\r\n Code: \"activityLimitReached\",\r\n Description: \"De app of gebruiker is gestopt.\", // The app or user has been throttled.\r\n HTTPstatuscode: 429,\r\n },\r\n {\r\n Code: \"generalException\",\r\n Description: \"Er is een niet-gespecificeerde fout opgetreden.\", //An unspecified error has occurred.\r\n HTTPstatuscode: 500, // General error\r\n },\r\n {\r\n Code: \"invalidRange\",\r\n Description: \"Het opgegeven bytebereik is ongeldig of niet beschikbaar.\", //The specified byte range is invalid or unavailable.\r\n HTTPstatuscode: 416,\r\n },\r\n {\r\n Code: \"invalidRequest\",\r\n Description: \"Het verzoek of de opmaak is onjuist.\", //The request is malformed or incorrect.\r\n HTTPstatuscode: 400,\r\n },\r\n {\r\n Code: \"itemNotFound\",\r\n Description: \"De bron kan niet worden gevonden.\", //The resource could not be found.\r\n HTTPstatuscode: 404,\r\n },\r\n {\r\n Code: \"malwareDetected\",\r\n Description: \"Malware is gedetecteerd in de aangevraagde bron.\", //Malware was detected in the requested resource.\r\n HTTPstatuscode: 500, // General error\r\n },\r\n {\r\n Code: \"nameAlreadyExists\",\r\n Description: \"Het item bestaat al.\", //The specified item name already exists.\r\n HTTPstatuscode: 409,\r\n },\r\n {\r\n Code: \"notAllowed\",\r\n Description: \"De actie is niet toegestaan door het systeem.\", //The action is not allowed by the system.\r\n HTTPstatuscode: 405,\r\n },\r\n {\r\n Code: \"notSupported\",\r\n Description: \"Het verzoek wordt niet ondersteund door het systeem.\", //The request is not supported by the system.\r\n HTTPstatuscode: 415,\r\n },\r\n {\r\n Code: \"resourceModified\",\r\n Description:\r\n \"De bron die wordt bijgewerkt, is gewijzigd sinds de gebruiker deze voor het laatst heeft gelezen, meestal een niet-overeenkomende eTag.\", //The resource being updated has changed since the caller last read it, usually an eTag mismatch.\r\n HTTPstatuscode: 410,\r\n },\r\n {\r\n Code: \"resyncRequired\",\r\n Description:\r\n \"Het deltatoken is niet langer geldig en de app moet de synchronisatiestatus opnieuw instellen.\", //The delta token is no longer valid, and the app must reset the sync state.\r\n HTTPstatuscode: 500, // General error\r\n },\r\n {\r\n Code: \"serviceNotAvailable\",\r\n Description:\r\n \"De service is niet beschikbaar. Probeer het verzoek na een vertraging opnieuw. Er kan een Retry-After-header zijn.\", //The service is not available. Try the request again after a delay.There may be a Retry-After header.\r\n HTTPstatuscode: 503,\r\n },\r\n {\r\n Code: \"quotaLimitReached\",\r\n Description: \"De gebruiker heeft zijn quotumlimiet bereikt.\", //The user has reached their quota limit.\r\n HTTPstatuscode: 507,\r\n },\r\n {\r\n Code: \"unauthenticated\",\r\n Description: \"De gebruiker is niet geverifieerd.\", //The caller is not authenticated.\r\n HTTPstatuscode: 401,\r\n },\r\n\r\n // Custom statuscodes section\r\n {\r\n Code: \"pathIsTooLongWhenRenaming\",\r\n Description:\r\n \"De opgegeven bestands- of mapnaam is te lang. Het URL-pad voor alle bestanden en mappen mag 400 tekens of minder bevatten. Typ een kortere bestands- of mapnaam voor: \",\r\n HTTPstatuscode: 475,\r\n },\r\n {\r\n Code: \"pathIsTooLongWhenMoving\",\r\n Description:\r\n \"In de nieuwe map wordt het totale URL-pad te lang. Het URL-pad voor alle bestanden en mappen mag 400 tekens of minder bevatten. Typ eerst een kortere bestands- of mapnaam en probeer het opnieuw voor: \",\r\n HTTPstatuscode: 476,\r\n },\r\n {\r\n Code: \"tenantNoValidSPOLicense\",\r\n Description: \"Deze tenant heeft geen geldige SPO licentie of is verlopen.\", //Tenant does not have a SPO license.\r\n HTTPstatuscode: 477,\r\n },\r\n {\r\n Code: \"pathIsTooLongWhenAddingFolder\",\r\n Description:\r\n \"Door het aanmaken van de nieuwe map wordt het totale URL-pad te lang (door deze nieuwe map en voorliggende mappen). Het URL-pad voor alle bestanden en mappen mag 400 tekens of minder bevatten. Typ een kortere mapnaam en probeer het opnieuw voor de map: \",\r\n HTTPstatuscode: 478,\r\n },\r\n];\r\n\r\nexport function getErrors_nl() {\r\n return httpErrors;\r\n}\r\n\r\nconst errors: IError[] = [\r\n {\r\n internalErrorCode: 400,\r\n correlationId: \"\",\r\n message:\r\n \"Er gaat iets mis aan onze kant. Gelieve melding te maken als vaker voorkomt.\",\r\n errorVisibility: ErrorVisibility.GlobalDialog,\r\n },\r\n {\r\n internalErrorCode: 401,\r\n correlationId: \"\",\r\n message:\r\n \"U heeft geen toegang tot alle benodigde bronnen om deze applicatie te gebruiken.\",\r\n errorVisibility: ErrorVisibility.GlobalDialog,\r\n },\r\n {\r\n internalErrorCode: 420,\r\n correlationId: \"\",\r\n message: \"Uw organisatie heeft geen geldige licentie voor deze applicatie.\",\r\n errorVisibility: ErrorVisibility.GlobalDialog,\r\n },\r\n {\r\n internalErrorCode: 421,\r\n correlationId: \"\",\r\n message: \"De licentie van uw organisatie voor deze applicatie is verlopen.\",\r\n errorVisibility: ErrorVisibility.GlobalDialog,\r\n },\r\n {\r\n internalErrorCode: 422,\r\n correlationId: \"\",\r\n message: \"Uw organisatie kan niet via Microsoft worden geverifieerd.\",\r\n errorVisibility: ErrorVisibility.GlobalDialog,\r\n },\r\n {\r\n internalErrorCode: 500,\r\n correlationId: \"\",\r\n message:\r\n \"Er is een onbekende fout opgetreden. Probeer het later nog eens of neem contact op met het beheer.\",\r\n errorVisibility: ErrorVisibility.GlobalDialog,\r\n },\r\n {\r\n internalErrorCode: 608,\r\n correlationId: \"\",\r\n message: \"Er bestaat al een item met dezelfde naam.\",\r\n errorVisibility: ErrorVisibility.MessageBar,\r\n },\r\n {\r\n internalErrorCode: 710,\r\n correlationId: \"\",\r\n message: \"De gekozen naam is te lang.\",\r\n errorVisibility: ErrorVisibility.MessageBar,\r\n },\r\n {\r\n internalErrorCode: 711,\r\n correlationId: \"\",\r\n message: \"Het verplaatsen naar een andere bibliotheek is mislukt.\",\r\n errorVisibility: ErrorVisibility.GlobalDialog,\r\n },\r\n {\r\n internalErrorCode: 720,\r\n correlationId: \"\",\r\n message: \"Het is niet mogelijk om een leeg bestand te uploaden.\",\r\n errorVisibility: ErrorVisibility.GlobalDialog,\r\n },\r\n {\r\n internalErrorCode: 721,\r\n correlationId: \"\",\r\n message:\r\n \"Er is een fout opgetreden bij het uploaden. Probeer het nog eens.\",\r\n errorVisibility: ErrorVisibility.GlobalDialog,\r\n },\r\n {\r\n internalErrorCode: 723,\r\n correlationId: \"\",\r\n message: \"Het ophalen van het gekozen type bestand is mislukt.\",\r\n errorVisibility: ErrorVisibility.GlobalDialog,\r\n },\r\n {\r\n internalErrorCode: 724,\r\n correlationId: \"\",\r\n message:\r\n \"Er is een fout opgetreden bij het aanmaken. Probeer het nog eens.\",\r\n errorVisibility: ErrorVisibility.MessageBar,\r\n },\r\n {\r\n internalErrorCode: 725,\r\n correlationId: \"\",\r\n message:\r\n \"Er is een timeout opgetreden bij het verplaatsen. Probeer het nog eens.\",\r\n errorVisibility: ErrorVisibility.GlobalDialog,\r\n },\r\n {\r\n internalErrorCode: 726,\r\n correlationId: \"\",\r\n message: \"Het item is geblokkeerd. Probeer het nog eens.\",\r\n errorVisibility: ErrorVisibility.GlobalDialog,\r\n },\r\n {\r\n internalErrorCode: 730,\r\n correlationId: \"\",\r\n message:\r\n \"Delen is niet ingeschakeld voor dit item. Om delen in te schakelen kunt u contact opnemen met uw beheerder.\",\r\n errorVisibility: ErrorVisibility.GlobalDialog,\r\n },\r\n {\r\n internalErrorCode: 901,\r\n correlationId: \"\",\r\n message:\r\n \"Er bestaat reeds een bestand of map met dezelfde naam op de oorspronkelijke locatie.

Om het bestand terug te plaatsen, hernoem eerst het bestand op de oorspronkelijke locatie.\",\r\n errorVisibility: ErrorVisibility.GlobalDialog,\r\n },\r\n {\r\n internalErrorCode: 902,\r\n correlationId: \"\",\r\n message:\r\n \"De oorspronkelijke locatie om het bestand of map terug te plaatsen is verwijderd.\",\r\n errorVisibility: ErrorVisibility.GlobalDialog,\r\n },\r\n {\r\n internalErrorCode: 903,\r\n correlationId: \"\",\r\n message: \"Het bestand of map kon niet gevonden worden in de prullenbak.\",\r\n errorVisibility: ErrorVisibility.GlobalDialog,\r\n },\r\n];\r\n\r\nexport function getError_nl(errorResult: IErrorResult): IError {\r\n let error: IError | undefined = errors.find((error: IError) => {\r\n return error.internalErrorCode === errorResult.internalErrorCode;\r\n });\r\n\r\n if (error === undefined) {\r\n return {\r\n internalErrorCode: 500,\r\n correlationId:\r\n \"Als deze fout blijft optreden, neem dan contact op met het beheer.\",\r\n message:\r\n \"Er is een onbekende fout opgetreden. Probeer het later nog eens.\",\r\n errorVisibility: ErrorVisibility.GlobalDialog,\r\n };\r\n }\r\n\r\n error.correlationId = errorResult.correlationId;\r\n\r\n return error;\r\n}\r\n","import * as React from \"react\";\r\n\r\nexport const LanguageContext = React.createContext(\"\");\r\n","import { DEFAULT_FALLBACK_LANGUAGE } from \"../components/Translate\";\r\n\r\nexport interface IAppSettings {\r\n navigatorWidth: number;\r\n preferredLanguage: string;\r\n}\r\nconst LEGACY_NAVIGATOR_SETTINGS = \"iexpertsnl.fileexplorer.navigator\";\r\n\r\nexport default class AppSettingsProvider {\r\n constructor() {}\r\n\r\n private static key(userKey: string): string {\r\n return `iexpertsnl.${userKey}.fileexplorer.settings`;\r\n }\r\n\r\n public static defaults(): IAppSettings {\r\n return {\r\n navigatorWidth: 300,\r\n preferredLanguage: DEFAULT_FALLBACK_LANGUAGE,\r\n };\r\n }\r\n\r\n private static migrate(userKey: string): IAppSettings {\r\n let legacyJson: string | null = window.localStorage.getItem(\r\n LEGACY_NAVIGATOR_SETTINGS\r\n );\r\n\r\n if (legacyJson) {\r\n try {\r\n const legacySettings: IAppSettings = JSON.parse(legacyJson);\r\n this.set(userKey, {\r\n navigatorWidth: (legacySettings as any).width,\r\n preferredLanguage: DEFAULT_FALLBACK_LANGUAGE,\r\n });\r\n\r\n window.localStorage.removeItem(LEGACY_NAVIGATOR_SETTINGS);\r\n\r\n return legacySettings;\r\n } catch {\r\n console.warn(\r\n \"Could not parse navigator settings json from localstorage, returning default values\"\r\n );\r\n\r\n const defaultSettings = AppSettingsProvider.defaults();\r\n this.set(userKey, defaultSettings);\r\n window.localStorage.removeItem(LEGACY_NAVIGATOR_SETTINGS);\r\n\r\n return defaultSettings;\r\n }\r\n }\r\n\r\n return AppSettingsProvider.defaults();\r\n }\r\n\r\n /**\r\n * Resolves app settings from the localstorage cache.\r\n */\r\n public static get(userKey: string): IAppSettings {\r\n if (!window.localStorage) return AppSettingsProvider.defaults();\r\n\r\n let json: string | null = window.localStorage.getItem(this.key(userKey));\r\n\r\n if (json) {\r\n try {\r\n const parsedSettings: IAppSettings = JSON.parse(json);\r\n return parsedSettings;\r\n } catch {\r\n console.warn(\r\n \"Could not parse app settings json from localstorage, returning default values\"\r\n );\r\n return AppSettingsProvider.defaults();\r\n }\r\n } else {\r\n return this.migrate(userKey);\r\n }\r\n }\r\n\r\n /**\r\n * Sets app settings in the localstorage cache\r\n */\r\n public static set(userKey: string, newSettings: IAppSettings): void {\r\n if (!window.localStorage) return;\r\n\r\n window.localStorage.setItem(this.key(userKey), JSON.stringify(newSettings));\r\n window.localStorage.setItem(\"iexpertsnl.fileexplorer.userid\", userKey);\r\n }\r\n}\r\n","import * as React from \"react\";\r\n\r\nimport { IError, IErrorResult } from \"../data/interfaces\";\r\nimport en, { getErrors_en, getError_en } from \"../i18n/en\";\r\nimport nl, { getErrors_nl, getError_nl } from \"../i18n/nl\";\r\n\r\nimport { LanguageContext } from \"../i18n/context\";\r\nimport AppSettingsProvider, { IAppSettings } from \"../helpers/appSettings\";\r\n\r\nconst languages: any = {\r\n en,\r\n nl,\r\n};\r\n\r\nexport const DEFAULT_FALLBACK_LANGUAGE = \"nl-NL\";\r\n\r\nconst resolveUserPreferredLanguage = (): string => {\r\n if (!window.localStorage) return DEFAULT_FALLBACK_LANGUAGE;\r\n\r\n const userkey: string | null = window.localStorage.getItem(\r\n \"iexpertsnl.fileexplorer.userid\"\r\n );\r\n\r\n if (userkey) {\r\n const appSettings: IAppSettings = AppSettingsProvider.get(userkey);\r\n\r\n return appSettings.preferredLanguage;\r\n }\r\n\r\n return DEFAULT_FALLBACK_LANGUAGE;\r\n};\r\n\r\n/**\r\n * Returns a React Component which gets the localization strings inject via i18n property.\r\n * @param key String containing the type of the component used for identifying a subset of localization strings.\r\n */\r\nexport function translateComponent(key: string) {\r\n return (Component: any) => {\r\n class TranslationComponent extends React.Component {\r\n static contextType = LanguageContext;\r\n\r\n render() {\r\n let component: JSX.Element | undefined = undefined;\r\n let language: any;\r\n\r\n // Get the first to language characters to load the resource file.\r\n //const languageShort: string = this.context.substring(0, 2);\r\n\r\n const userPreferredLanguage: string =\r\n resolveUserPreferredLanguage().substring(0, 2);\r\n if (languages[userPreferredLanguage]) {\r\n language = languages[userPreferredLanguage];\r\n } else {\r\n // When an unsupported language is passed, use the fallback.\r\n language = languages[DEFAULT_FALLBACK_LANGUAGE];\r\n }\r\n\r\n component = (\r\n \r\n );\r\n\r\n return component;\r\n }\r\n }\r\n\r\n return TranslationComponent;\r\n };\r\n}\r\n\r\nexport const formatString = (\r\n str: string,\r\n ...values: Array\r\n) => {\r\n const templateSplit = new RegExp(/{(\\d)}/g);\r\n const isNumber = new RegExp(/^\\d+$/);\r\n const splitedText: string[] = str.split(templateSplit);\r\n let parameterIndex: number;\r\n\r\n return splitedText\r\n .map((sentence: string, index: number) => {\r\n if (isNumber.test(sentence)) {\r\n parameterIndex = Number(sentence);\r\n\r\n if (parameterIndex < values.length) {\r\n return values[parameterIndex];\r\n } else {\r\n return `{${parameterIndex - 1}}`;\r\n }\r\n }\r\n return sentence;\r\n })\r\n .join(\"\");\r\n};\r\n\r\nexport function getLanguages() {\r\n return languages;\r\n}\r\n\r\nexport function getLanguagesErrors(languageCode: string) {\r\n switch (languageCode) {\r\n case \"nl\":\r\n return getErrors_nl();\r\n case \"en\":\r\n return getErrors_en();\r\n default:\r\n return getErrors_nl();\r\n }\r\n}\r\n\r\nexport function getTranslation(\r\n componentName: string,\r\n keyName: string,\r\n language: string\r\n): string {\r\n const languages: any = getLanguages();\r\n const languageCode: string = language.substring(0, 2);\r\n\r\n let languageResourceObject: any = languages[languageCode];\r\n let returnValue: string = \"\";\r\n\r\n // Check if the language exists as resource file\r\n if (languageResourceObject === undefined) {\r\n languageResourceObject = languages[DEFAULT_FALLBACK_LANGUAGE];\r\n }\r\n\r\n returnValue = languageResourceObject[componentName][keyName];\r\n\r\n return returnValue;\r\n}\r\n\r\nexport function getError(\r\n languageCode: string,\r\n errorResult: IErrorResult\r\n): IError {\r\n switch (languageCode) {\r\n case \"nl-NL\":\r\n return getError_nl(errorResult);\r\n case \"en-US\":\r\n return getError_en(errorResult);\r\n default:\r\n return getError_nl(errorResult);\r\n }\r\n}\r\n","import React from \"react\";\r\nimport { ProgressIndicator } from \"office-ui-fabric-react/lib/ProgressIndicator\";\r\nimport * as Localization from \"./Translate\";\r\nimport {\r\n ITranslationProps,\r\n IBaseItem,\r\n IOperationStatus,\r\n} from \"../data/interfaces\";\r\nimport { Icon } from \"office-ui-fabric-react\";\r\n\r\nexport interface IItemModificationQueueProps extends ITranslationProps {\r\n modifications: IBaseItemModification[];\r\n actionCompletedEvent(item: IBaseItem): void;\r\n actionFailedEvent(item: IBaseItem): void;\r\n onClose(): void;\r\n onMonitorProgressEvent(monitorUrl: string): Promise;\r\n onStatusCompleteEvent(item: IBaseItemModification): void;\r\n}\r\n\r\n// export interface IItemModification extends IBaseItemModification {\r\n// item: IBaseItem;\r\n// }\r\n\r\n// export interface IModificationSummary extends IBaseItemModification {\r\n// items: number;\r\n// }\r\n\r\nexport interface IBaseItemModification {\r\n type: ModificationType;\r\n items: IBaseItem[];\r\n monitorUrls: string[] | undefined;\r\n}\r\n\r\nexport enum ModificationType {\r\n ADD,\r\n UPLOAD,\r\n REMOVE,\r\n RESTORE,\r\n UPDATE,\r\n RENAME,\r\n MOVE,\r\n LOAD,\r\n EMPTY,\r\n COPY,\r\n}\r\n\r\ninterface IItemModificationQueueState {\r\n queue: IBaseItemModification[];\r\n intervalId: any;\r\n}\r\n\r\nclass ItemModificationQueue extends React.Component<\r\n IItemModificationQueueProps,\r\n IItemModificationQueueState\r\n> {\r\n constructor(props: IItemModificationQueueProps) {\r\n super(props);\r\n\r\n this.state = {\r\n queue: [],\r\n intervalId: undefined,\r\n };\r\n }\r\n\r\n public componentDidMount() {\r\n this.setState({\r\n queue: this.props.modifications,\r\n });\r\n\r\n window.addEventListener(\"beforeunload\", this.unloadMessage);\r\n\r\n this.checkProgressStatus(this);\r\n var intervalId = setInterval(() => this.checkProgressStatus(this), 5000);\r\n this.setState({ intervalId: intervalId });\r\n }\r\n\r\n public componentDidUpdate(prevProps: IItemModificationQueueProps) {\r\n if (this.props.modifications !== prevProps.modifications) {\r\n this.setState({\r\n queue: this.props.modifications,\r\n });\r\n }\r\n }\r\n\r\n unloadMessage = (e: any) => {\r\n e.preventDefault();\r\n return (e.returnValue =\r\n \"Er worden nog bestanden verplaast, weet u zeker dat u wilt stoppen?\");\r\n };\r\n\r\n public componentWillUnmount() {\r\n window.removeEventListener(\"beforeunload\", this.unloadMessage);\r\n\r\n clearInterval(this.state.intervalId);\r\n }\r\n\r\n private checkProgressStatus(self: this) {\r\n var modifiedQueue = self.state.queue;\r\n\r\n modifiedQueue.forEach((item) => {\r\n if (item.monitorUrls !== undefined) {\r\n item.monitorUrls.forEach((url) => {\r\n this.props\r\n .onMonitorProgressEvent(url)\r\n .then((status: IOperationStatus) => {\r\n if (status.status == \"completed\") {\r\n if (item.monitorUrls !== undefined) {\r\n item.monitorUrls.splice(item.monitorUrls.indexOf(url), 1);\r\n }\r\n }\r\n });\r\n });\r\n if (item.monitorUrls.length === 0) {\r\n this.props.onStatusCompleteEvent(item);\r\n } else {\r\n self.setState({\r\n queue: modifiedQueue,\r\n });\r\n }\r\n }\r\n });\r\n }\r\n\r\n // private isItemModification(i: any) {\r\n // return i.item !== undefined;\r\n // }\r\n\r\n private getModificationMessage(modification: IBaseItemModification) {\r\n if (modification.items.length == 1) {\r\n switch (modification.type) {\r\n case ModificationType.ADD:\r\n return `Item '${modification.items[0].displayName}' ${this.props.i18n.addMessage}`;\r\n case ModificationType.UPLOAD:\r\n return `${this.props.i18n.labelFile} '${modification.items[0].displayName}' ${this.props.i18n.uploadMessage}`;\r\n case ModificationType.REMOVE:\r\n if (modification.items[0].isContainer) {\r\n return `${this.props.i18n.labelFolder} '${modification.items[0].displayName}' ${this.props.i18n.removeMessage}`;\r\n } else {\r\n return `${this.props.i18n.labelFile} '${modification.items[0].displayName}' ${this.props.i18n.removeMessage}`;\r\n }\r\n case ModificationType.UPDATE:\r\n return `Item '${modification.items[0].displayName}' ${this.props.i18n.updateMessage}`;\r\n\r\n case ModificationType.RESTORE:\r\n return `Item '${modification.items[0].displayName}' ${this.props.i18n.restoreMessage}`;\r\n case ModificationType.RENAME:\r\n if (modification.items[0].isContainer) {\r\n return `${this.props.i18n.labelFolder} '${modification.items[0].displayName}' ${this.props.i18n.renameMessage}`;\r\n } else {\r\n return `${this.props.i18n.labelFile} '${modification.items[0].displayName}' ${this.props.i18n.renameMessage}`;\r\n }\r\n case ModificationType.MOVE:\r\n if (modification.items[0].isContainer) {\r\n return `${this.props.i18n.labelFolder} '${modification.items[0].displayName}' ${this.props.i18n.moveMessage}`;\r\n } else {\r\n return `${this.props.i18n.labelFile} '${modification.items[0].displayName}' ${this.props.i18n.moveMessage}`;\r\n }\r\n case ModificationType.COPY:\r\n if (modification.items[0].isContainer) {\r\n return `${this.props.i18n.labelFolder} '${modification.items[0].displayName}' ${this.props.i18n.copyMessage}`;\r\n } else {\r\n return `${this.props.i18n.labelFile} '${modification.items[0].displayName}' ${this.props.i18n.copyMessage}`;\r\n }\r\n case ModificationType.LOAD:\r\n return `Item '${modification.items[0].displayName}' ${this.props.i18n.loadMessage}`;\r\n default:\r\n break;\r\n }\r\n } else {\r\n switch (modification.type) {\r\n case ModificationType.REMOVE:\r\n return `${modification.items.length} ${this.props.i18n.batchRemoveMessage}`;\r\n case ModificationType.MOVE:\r\n return `${modification.items.length} ${this.props.i18n.batchMoveMessage}`;\r\n case ModificationType.COPY:\r\n return `${modification.items.length} ${this.props.i18n.batchCopyMessage}`;\r\n default:\r\n break;\r\n }\r\n }\r\n }\r\n\r\n private handleOnDismiss() {\r\n this.props.onClose();\r\n }\r\n\r\n render() {\r\n let currentModifications: JSX.Element[] = [];\r\n\r\n this.state.queue.forEach(\r\n (modification: IBaseItemModification, index: number) => {\r\n currentModifications.push(\r\n
  • \r\n \r\n
  • \r\n );\r\n }\r\n );\r\n\r\n return (\r\n
    \r\n
    \r\n \r\n \r\n \r\n
    \r\n
    \r\n
      {currentModifications}
    \r\n
    \r\n
    \r\n );\r\n }\r\n}\r\n\r\nexport default Localization.translateComponent<\r\n IItemModificationQueueProps,\r\n IItemModificationQueueState\r\n>(\"ItemModificationQueue\")(ItemModificationQueue);\r\n","import React from \"react\";\r\nimport { Popup } from \"@progress/kendo-react-popup\";\r\nimport { DropDownButton } from \"@progress/kendo-react-buttons\";\r\nimport { Input } from \"@progress/kendo-react-inputs\";\r\nimport { Icon, IconType } from \"office-ui-fabric-react/lib/Icon\";\r\nimport { IDriveItem, ITranslationProps, IBaseItem } from \"../data/interfaces\";\r\nimport ReactDOM from \"react-dom\";\r\nimport { ValidateName, Guid } from \"../helpers/globalHelper\";\r\nimport * as Localization from \"./Translate\";\r\nimport { HierarchialDataScope, MessageBarType } from \"../data/enums\";\r\nimport { isDriveItem, isRecycleBin } from \"../helpers/typeCheck\";\r\nimport { ModificationType } from \"./ItemModificationQueue\";\r\n\r\nexport interface IActionBarProps extends ITranslationProps {\r\n loadedContainer?: IBaseItem;\r\n itemsSelected?: boolean;\r\n language: string; // LCID string like nl-NL (language-country)\r\n\r\n RefreshItemListEvent(): void;\r\n DeleteSelectedItemsEvent(): void;\r\n\r\n EmptyRecycleBinEvent(): void;\r\n RestoreRecycleBinItemEvent(): void;\r\n\r\n MoveSelectedItemsEvent(): void;\r\n CopySelectedItemsEvent(): void;\r\n\r\n allowShowEasyTemplate: boolean;\r\n EasyTemplateOpenEvent(): void;\r\n\r\n FolderCreationEvent(body: any): Promise;\r\n FolderCreatingEvent(items: IBaseItem): void;\r\n FolderCreatedEvent(items: IBaseItem): void;\r\n\r\n DocumentCreationEvent(body: any): Promise;\r\n DocumentCreatingEvent(item: IBaseItem): void;\r\n DocumentCreatedEvent(item: IBaseItem): void;\r\n\r\n FileCreationEvent(formData: FormData): Promise;\r\n FileAddedEvent(items: IBaseItem): void;\r\n FilesAddingEvent(items: IBaseItem[]): void;\r\n DummyFileRemoveEvent(\r\n item: IBaseItem,\r\n modificationType: ModificationType\r\n ): void;\r\n\r\n showMessageBar(message: string, messageBarType: MessageBarType): void;\r\n closeMessageBar(): void;\r\n}\r\n\r\ninterface IDocumentType {\r\n text: string;\r\n icon: string;\r\n extension: string;\r\n}\r\n\r\ninterface IActionBarState {\r\n addFilePopupOpen: boolean;\r\n addFolderPopupOpen: boolean;\r\n newDocumentPopupOpen: boolean;\r\n newDocumentType: IDocumentType;\r\n isProcessing: boolean;\r\n buttonCreateDisabled: boolean;\r\n showErrorMessageEmpty: boolean;\r\n showErrorMessageRegEx: boolean;\r\n newDocumentOrFoldername: string;\r\n inRecycleBin: boolean;\r\n itemsSelected: boolean;\r\n}\r\n\r\nclass ActionBar extends React.Component {\r\n addFileAnchor: HTMLButtonElement | null;\r\n addFolderAnchor: HTMLButtonElement | null;\r\n newDocumentAnchor: HTMLSpanElement | null;\r\n private documentTypeItems: IDocumentType[];\r\n private fileSelector: any;\r\n\r\n constructor(props: IActionBarProps) {\r\n super(props);\r\n\r\n this.documentTypeItems = [\r\n { text: \"Word\", icon: \"WordDocument\", extension: \"docx\" },\r\n { text: \"Excel\", icon: \"ExcelDocument\", extension: \"xlsx\" },\r\n { text: \"PowerPoint\", icon: \"PowerPointDocument\", extension: \"pptx\" },\r\n ];\r\n\r\n this.addFileAnchor = null;\r\n this.addFolderAnchor = null;\r\n this.newDocumentAnchor = null;\r\n this.state = {\r\n addFilePopupOpen: false,\r\n addFolderPopupOpen: false,\r\n newDocumentPopupOpen: false,\r\n isProcessing: false,\r\n newDocumentType: this.documentTypeItems[0],\r\n buttonCreateDisabled: true,\r\n showErrorMessageEmpty: false,\r\n showErrorMessageRegEx: false,\r\n newDocumentOrFoldername: \"\",\r\n inRecycleBin: false,\r\n itemsSelected: this.props.itemsSelected\r\n ? this.props.itemsSelected\r\n : false,\r\n };\r\n }\r\n\r\n public componentDidMount() {\r\n /*\r\n When using React you should generally not need to call addEventListener to add \r\n listeners to a DOM element after it is created. Instead, just provide a listener \r\n when the element is initially rendered.\r\n https://reactjs.org/docs/handling-events.html\r\n */\r\n document.addEventListener(\"click\", this.handleClickOutside, true);\r\n document.addEventListener(\"keydown\", this.handleEscapeKey, true);\r\n\r\n if (typeof this.props.loadedContainer !== \"undefined\") {\r\n if (isRecycleBin(this.props.loadedContainer)) {\r\n this.setState({\r\n inRecycleBin: true,\r\n });\r\n } else {\r\n this.setState({\r\n inRecycleBin: false,\r\n });\r\n }\r\n }\r\n\r\n this.fileSelector = this.buildFileSelector();\r\n }\r\n\r\n public componentWillUnmount() {\r\n document.removeEventListener(\"click\", this.handleClickOutside, true);\r\n document.removeEventListener(\"keydown\", this.handleEscapeKey, true);\r\n }\r\n\r\n public componentDidUpdate(prevProps: IActionBarProps) {\r\n if (this.props.itemsSelected !== prevProps.itemsSelected) {\r\n this.setState({\r\n itemsSelected: this.props.itemsSelected\r\n ? this.props.itemsSelected\r\n : false,\r\n });\r\n }\r\n\r\n if (this.props.loadedContainer !== prevProps.loadedContainer) {\r\n if (typeof this.props.loadedContainer !== \"undefined\") {\r\n if (isRecycleBin(this.props.loadedContainer)) {\r\n this.setState({\r\n inRecycleBin: true,\r\n });\r\n } else {\r\n this.setState({\r\n inRecycleBin: false,\r\n });\r\n }\r\n }\r\n }\r\n\r\n const elements = Array.from(\r\n document.getElementsByClassName(\"k-button k-upload-button\")\r\n );\r\n if (elements.length > 0) {\r\n for (const element of elements) {\r\n element.setAttribute(\"title\", \"\");\r\n }\r\n }\r\n }\r\n\r\n private buildFileSelector() {\r\n const fileSelector = document.createElement(\"input\");\r\n fileSelector.setAttribute(\"type\", \"file\");\r\n fileSelector.setAttribute(\"multiple\", \"multiple\");\r\n fileSelector.addEventListener(\r\n \"change\",\r\n this.handleFileSelectorChange,\r\n true\r\n );\r\n\r\n return fileSelector;\r\n }\r\n\r\n private getDummyItems(rawFiles: FileList): IBaseItem[] {\r\n let newItems: IBaseItem[] = [];\r\n\r\n if (this.props.loadedContainer !== undefined) {\r\n for (let index = 0; index < rawFiles.length; index++) {\r\n let dummyItem: IBaseItem = this.getSkeletonInstance(\r\n this.props.loadedContainer\r\n );\r\n\r\n newItems.push({\r\n ...dummyItem,\r\n name: rawFiles[index].name,\r\n displayName: rawFiles[index].name,\r\n isContainer: false,\r\n size: rawFiles[index].size,\r\n } as IDriveItem);\r\n }\r\n }\r\n\r\n return newItems;\r\n }\r\n\r\n private handleFileSelectorChange = async (event: any): Promise => {\r\n this.props.closeMessageBar();\r\n\r\n const files: FileList = event.target.files;\r\n\r\n // Pre-check (files not bigger than 4294967295 bytes).\r\n let isFileTooBig: boolean = false;\r\n\r\n for (let index = 0; index < files.length; index++) {\r\n if (files[index].size > 4294967295) {\r\n isFileTooBig = true;\r\n break;\r\n }\r\n }\r\n\r\n if (isFileTooBig) {\r\n this.props.showMessageBar(\r\n this.props.i18n.fileTooLargeMessage,\r\n MessageBarType.Warning\r\n );\r\n return;\r\n }\r\n\r\n if (files && files.length > 0 && this.props.loadedContainer !== undefined) {\r\n const dummyItems: IBaseItem[] = this.getDummyItems(files);\r\n this.props.FilesAddingEvent(dummyItems);\r\n\r\n for (let index = 0; index < files.length; index++) {\r\n let formData = new FormData();\r\n\r\n formData.set(\"file\", files[index]);\r\n\r\n formData.append(\r\n \"DriveId\",\r\n isDriveItem(this.props.loadedContainer)\r\n ? (this.props.loadedContainer as IDriveItem).driveId\r\n : this.props.loadedContainer.id\r\n );\r\n formData.append(\"ParentId\", this.props.loadedContainer.id);\r\n formData.append(\r\n \"FolderPath\",\r\n this.props.loadedContainer.path\r\n ? `/${this.props.loadedContainer.path}`\r\n : \"\"\r\n );\r\n\r\n if (dummyItems[index].referenceId !== undefined) {\r\n formData.append(\r\n \"ReferenceId\",\r\n dummyItems[index].referenceId as string\r\n );\r\n }\r\n\r\n if (\r\n this.props.loadedContainer.rootScope ===\r\n HierarchialDataScope.OneDrives\r\n )\r\n formData.append(\"DriveIsOneDrive\", \"true\");\r\n else formData.append(\"DriveIsOneDrive\", \"false\");\r\n\r\n formData.append(\"Overwrite\", \"false\");\r\n\r\n this.props\r\n .FileCreationEvent(formData)\r\n .then((result: IDriveItem) => {\r\n if (this.props.loadedContainer === undefined) return;\r\n this.props.FileAddedEvent({\r\n ...result,\r\n displayName: result.name,\r\n rootScope: this.props.loadedContainer.rootScope,\r\n isAdding: false,\r\n isContainer: false,\r\n path: result[\"folderPath\"],\r\n parentItem: this.props.loadedContainer,\r\n });\r\n })\r\n .catch(() => {\r\n this.props.DummyFileRemoveEvent(\r\n dummyItems[index], // Index of dummyitems object is identical to files object because these are based on the number of files.\r\n ModificationType.ADD\r\n );\r\n });\r\n }\r\n }\r\n };\r\n\r\n private handleClickOutside = (event: any) => {\r\n const domNode = ReactDOM.findDOMNode(this);\r\n\r\n if (!domNode || !domNode.contains(event.target)) {\r\n const filePopupNode = document.getElementById(\"add-file-popup\"),\r\n folderPopupNode = document.getElementById(\"add-folder-popup\"),\r\n documentPopupNode = document.getElementById(\"new-document-popup\");\r\n\r\n let newState: IActionBarState = this.state;\r\n\r\n if (\r\n filePopupNode !== null ||\r\n folderPopupNode !== null ||\r\n documentPopupNode !== null\r\n ) {\r\n if (filePopupNode && !filePopupNode.contains(event.target)) {\r\n newState.addFilePopupOpen = false;\r\n }\r\n\r\n if (folderPopupNode && !folderPopupNode.contains(event.target)) {\r\n newState.addFolderPopupOpen = false;\r\n }\r\n\r\n if (documentPopupNode && !documentPopupNode.contains(event.target)) {\r\n newState.newDocumentPopupOpen = false;\r\n }\r\n\r\n this.setState(newState);\r\n }\r\n }\r\n };\r\n\r\n private handleEscapeKey = (event: any) => {\r\n if (event.keyCode === 27) {\r\n this.setState({\r\n addFilePopupOpen: false,\r\n addFolderPopupOpen: false,\r\n });\r\n }\r\n };\r\n\r\n NewDocumentOnClickHandler = (documentType: IDocumentType) => {\r\n this.props.closeMessageBar();\r\n\r\n this.setState({\r\n addFilePopupOpen: false,\r\n addFolderPopupOpen: false,\r\n newDocumentPopupOpen: !this.state.newDocumentPopupOpen,\r\n newDocumentType: documentType,\r\n buttonCreateDisabled: true,\r\n showErrorMessageEmpty: false,\r\n showErrorMessageRegEx: false,\r\n });\r\n };\r\n\r\n AddFileOnClickHandler = () => {\r\n this.setState({\r\n addFilePopupOpen: !this.state.addFilePopupOpen,\r\n addFolderPopupOpen: false,\r\n newDocumentPopupOpen: false,\r\n });\r\n };\r\n\r\n AddFolderOnClickHandler = () => {\r\n this.props.closeMessageBar();\r\n\r\n this.setState({\r\n addFilePopupOpen: false,\r\n addFolderPopupOpen: !this.state.addFolderPopupOpen,\r\n newDocumentPopupOpen: false,\r\n buttonCreateDisabled: true,\r\n showErrorMessageEmpty: false,\r\n showErrorMessageRegEx: false,\r\n });\r\n };\r\n\r\n RefreshItemListOnClickHandler = () => {\r\n this.props.RefreshItemListEvent();\r\n };\r\n\r\n DeleteSelectedItemsHandler = () => {\r\n this.props.DeleteSelectedItemsEvent();\r\n };\r\n\r\n EmptyRecycleBinClickHandler = () => {\r\n this.props.EmptyRecycleBinEvent();\r\n };\r\n\r\n RestoreRecycleBinItemClickHandler = () => {\r\n this.props.RestoreRecycleBinItemEvent();\r\n };\r\n\r\n MoveSelectedItemsHandler = () => {\r\n this.props.MoveSelectedItemsEvent();\r\n };\r\n\r\n CopySelectedItemsHandler = () => {\r\n this.props.CopySelectedItemsEvent();\r\n };\r\n\r\n EasyTemplateOnClickHandler = () => {\r\n this.props.EasyTemplateOpenEvent();\r\n };\r\n\r\n private getSkeletonInstance(parentItem: IBaseItem): IBaseItem {\r\n return {\r\n id: \"\",\r\n referenceId: Guid.newGuid(),\r\n displayName: \"\",\r\n parentItem: parentItem,\r\n rootScope: parentItem.rootScope,\r\n children: [],\r\n isAdding: true,\r\n isUpdating: false,\r\n isDeleting: false,\r\n isExpanded: false,\r\n isDirty: true,\r\n indexPath: [],\r\n isLoaded: false,\r\n isLoading: false,\r\n isContainer: false,\r\n isMoving: false,\r\n } as IBaseItem;\r\n }\r\n\r\n handleNewFolderSubmit = (event: any) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (this.props.loadedContainer !== undefined) {\r\n const { newDocumentOrFoldername: folderName } = this.state;\r\n\r\n if (this.props.loadedContainer === undefined) return;\r\n\r\n let dummyItem: IBaseItem = this.getSkeletonInstance(\r\n this.props.loadedContainer\r\n );\r\n\r\n dummyItem = {\r\n ...dummyItem,\r\n name: folderName,\r\n displayName: folderName,\r\n isContainer: true,\r\n } as IDriveItem;\r\n\r\n this.props.FolderCreatingEvent(dummyItem);\r\n\r\n const data = {\r\n Name: folderName,\r\n DriveId: isDriveItem(this.props.loadedContainer)\r\n ? (this.props.loadedContainer as IDriveItem).driveId\r\n : this.props.loadedContainer.id,\r\n ParentId: this.props.loadedContainer.id,\r\n FilePath:\r\n this.props.loadedContainer.path !== undefined\r\n ? this.props.loadedContainer.path\r\n : undefined,\r\n ReferenceId:\r\n dummyItem.referenceId !== undefined\r\n ? dummyItem.referenceId\r\n : undefined,\r\n IsOneDrive:\r\n this.props.loadedContainer.rootScope ===\r\n HierarchialDataScope.OneDrives\r\n ? \"true\"\r\n : \"false\",\r\n };\r\n\r\n this.props\r\n .FolderCreationEvent(data)\r\n .then((result: IDriveItem) => {\r\n if (this.props.loadedContainer === undefined) return;\r\n\r\n this.props.FolderCreatedEvent({\r\n ...result,\r\n displayName: result.name,\r\n rootScope: this.props.loadedContainer.rootScope,\r\n isAdding: false,\r\n isContainer: true,\r\n path: result[\"folderPath\"],\r\n parentItem: this.props.loadedContainer,\r\n });\r\n })\r\n .catch(() => {\r\n console.error(\r\n \"Exception in handleNewFolderSubmit for item: \",\r\n dummyItem\r\n );\r\n this.props.DummyFileRemoveEvent(dummyItem, ModificationType.ADD);\r\n });\r\n }\r\n\r\n this.setState({ addFolderPopupOpen: !this.state.addFolderPopupOpen });\r\n };\r\n\r\n handleNewDocumentSubmit = (event: any) => {\r\n event.preventDefault();\r\n\r\n if (this.props.loadedContainer !== undefined) {\r\n const { newDocumentOrFoldername: documentName } = this.state;\r\n\r\n let dummyItem: IBaseItem = this.getSkeletonInstance(\r\n this.props.loadedContainer\r\n );\r\n\r\n dummyItem = {\r\n ...dummyItem,\r\n name: `${documentName}.${this.state.newDocumentType.extension}`,\r\n displayName: `${documentName}.${this.state.newDocumentType.extension}`,\r\n isContainer: false,\r\n size: 0,\r\n } as IDriveItem;\r\n\r\n this.setState({\r\n isProcessing: true,\r\n newDocumentPopupOpen: !this.state.newDocumentPopupOpen,\r\n });\r\n\r\n this.props.DocumentCreatingEvent(dummyItem);\r\n\r\n const data = {\r\n Name: documentName,\r\n Type: this.state.newDocumentType.extension,\r\n DriveId: isDriveItem(this.props.loadedContainer)\r\n ? (this.props.loadedContainer as IDriveItem).driveId\r\n : this.props.loadedContainer.id,\r\n ParentId: this.props.loadedContainer.id,\r\n FolderPath:\r\n this.props.loadedContainer.path !== undefined\r\n ? this.props.loadedContainer.path\r\n : undefined,\r\n ReferenceId:\r\n dummyItem.referenceId !== undefined\r\n ? dummyItem.referenceId\r\n : undefined,\r\n IsOneDrive:\r\n this.props.loadedContainer.rootScope ===\r\n HierarchialDataScope.OneDrives\r\n ? \"true\"\r\n : \"false\",\r\n };\r\n\r\n this.props\r\n .DocumentCreationEvent(data)\r\n .then((result: IDriveItem) => {\r\n this.setState({\r\n isProcessing: false,\r\n });\r\n\r\n if (this.props.loadedContainer !== undefined) {\r\n this.props.DocumentCreatedEvent({\r\n ...result,\r\n displayName: result.name,\r\n rootScope: this.props.loadedContainer.rootScope,\r\n isAdding: false,\r\n isContainer: false,\r\n path: result[\"folderPath\"],\r\n parentItem: this.props.loadedContainer,\r\n });\r\n }\r\n })\r\n .catch(() => {\r\n this.setState({\r\n isProcessing: false,\r\n });\r\n\r\n this.props.DummyFileRemoveEvent(dummyItem, ModificationType.ADD);\r\n });\r\n } else {\r\n this.setState({ isProcessing: false });\r\n }\r\n };\r\n\r\n handleChange = (event: any) => {\r\n const name: string = event.target.value.trim();\r\n let buttonCreateDisabled: boolean = false;\r\n let showErrorMessageEmpty: boolean = false;\r\n let showErrorMessageRegEx: boolean = false;\r\n let newDocumentOrFoldername: string = name;\r\n\r\n if (name.length === 0) {\r\n showErrorMessageEmpty = true;\r\n buttonCreateDisabled = true;\r\n newDocumentOrFoldername = \"\";\r\n } else if (!ValidateName(name)) {\r\n buttonCreateDisabled = true;\r\n showErrorMessageRegEx = true;\r\n newDocumentOrFoldername = \"\";\r\n }\r\n\r\n this.setState({\r\n newDocumentOrFoldername: newDocumentOrFoldername,\r\n buttonCreateDisabled: buttonCreateDisabled,\r\n showErrorMessageEmpty: showErrorMessageEmpty,\r\n showErrorMessageRegEx: showErrorMessageRegEx,\r\n });\r\n };\r\n\r\n handleFocus = (event: any) => {\r\n event.target.select();\r\n };\r\n\r\n handleFileSelect = (event: any) => {\r\n this.props.closeMessageBar();\r\n this.fileSelector.click();\r\n };\r\n\r\n private resolveDocumentTypeItemIcon(item: any): string {\r\n /* \r\n Get the file type via this function cause slowness in building up the icons on the dropdownlist\r\n const fileExtension: string = item.extension;\r\n const iconName: string = this.iconHelper._getFileTypeIconNameFromExtension(\r\n fileExtension\r\n ); */\r\n const iconName: string = item.extension;\r\n const iconSize: number = 16; // supported types [16, 20, 32, 40, 48, 64, 96]\r\n const png: string = `https://spoprod-a.akamaihd.net/files/fabric/assets/item-types/${iconSize}/${iconName}.png`;\r\n return png;\r\n }\r\n\r\n render() {\r\n const documentTypeItemRender = (props: any) => {\r\n return (\r\n
    \r\n \r\n {props.item.text}\r\n
    \r\n );\r\n };\r\n const {\r\n buttonCreateDisabled,\r\n showErrorMessageEmpty,\r\n showErrorMessageRegEx,\r\n } = this.state;\r\n return (\r\n
    \r\n {\r\n this.newDocumentAnchor = button;\r\n }}\r\n >\r\n {!this.state.inRecycleBin && (\r\n \r\n this.NewDocumentOnClickHandler(clickedElement.item)\r\n }\r\n />\r\n )}\r\n \r\n {(this.props.allowShowEasyTemplate && !this.state.inRecycleBin) && (\r\n \r\n \r\n {this.props.i18n.buttonEasyTemplate}\r\n \r\n )}\r\n {!this.state.inRecycleBin && (\r\n \r\n \r\n {this.props.i18n.buttonFileText}\r\n \r\n )}\r\n {!this.state.inRecycleBin && (\r\n {\r\n this.addFolderAnchor = button;\r\n }}\r\n disabled={this.props.loadedContainer === undefined}\r\n >\r\n \r\n {this.props.i18n.buttonFolderText}\r\n \r\n )}\r\n {!this.state.inRecycleBin && this.state.itemsSelected && (\r\n \r\n \r\n {this.props.i18n.buttonDeleteText}\r\n \r\n )}\r\n {this.state.inRecycleBin && (\r\n \r\n \r\n {this.props.i18n.buttonDeleteAllText}\r\n \r\n )}\r\n {this.state.inRecycleBin && this.state.itemsSelected && (\r\n \r\n \r\n {this.props.i18n.buttonRestoreText}\r\n \r\n )}\r\n {!this.state.inRecycleBin && this.state.itemsSelected && (\r\n \r\n \r\n {this.props.i18n.buttonMoveAllText}\r\n \r\n )}\r\n {!this.state.inRecycleBin && this.state.itemsSelected && (\r\n \r\n \r\n {this.props.i18n.buttonCopyAllText}\r\n \r\n )}\r\n \r\n \r\n {this.props.i18n.buttonRefreshText}\r\n \r\n\r\n \r\n
    \r\n \r\n {showErrorMessageEmpty && (\r\n
    \r\n {this.props.i18n.nameEmptyErrorMessage}\r\n
    \r\n )}\r\n {showErrorMessageRegEx && (\r\n
    \r\n {this.props.i18n.nameValidationErrorMessage}\r\n
    \r\n )}\r\n \r\n \r\n \r\n \r\n
    \r\n \r\n {showErrorMessageEmpty && (\r\n
    \r\n {this.props.i18n.nameEmptyErrorMessage}\r\n
    \r\n )}\r\n {showErrorMessageRegEx && (\r\n
    \r\n {this.props.i18n.nameValidationErrorMessage}\r\n
    \r\n )}\r\n \r\n \r\n \r\n
    \r\n );\r\n }\r\n}\r\n\r\nexport default Localization.translateComponent<\r\n IActionBarProps,\r\n IActionBarState\r\n>(\"ActionBar\")(ActionBar);\r\n","const colors: string[] = [\"blue\", \"orange\", \"purple\", \"red\"];\r\n\r\nexport function calculateColor(userPrincipalName: string): string {\r\n var sum = 0;\r\n var colorId = 0;\r\n\r\n for (let index = 0; index < userPrincipalName.length; index++) {\r\n if (!isNaN(userPrincipalName.charCodeAt(index))) {\r\n sum += userPrincipalName.charCodeAt(index);\r\n }\r\n }\r\n\r\n colorId = sum % colors.length;\r\n\r\n return colors[colorId];\r\n}\r\n","import React from \"react\";\r\nimport {\r\n ITranslationProps,\r\n IHierarchialDataset,\r\n IBaseItem,\r\n} from \"../data/interfaces\";\r\nimport { IBreadCrumbNavigationElement } from \"./BreadCrumbNavigation\";\r\nimport BasePanel from \"./BasePanel\";\r\nimport LoadingIndicator from \"./LoadingIndicator\";\r\nimport ActionButtonList, { IActionButtonListItem } from \"./ActionButtonList\";\r\nimport { PrimaryButton } from \"office-ui-fabric-react\";\r\nimport * as Localization from \"./Translate\";\r\nimport { isSite, isDrive, isDriveItem } from \"../helpers/typeCheck\";\r\nimport { ModificationType } from \"./ItemModificationQueue\";\r\n\r\ninterface IPickDestinationDialogProps extends ITranslationProps {\r\n oneDrives: IHierarchialDataset;\r\n sites: IHierarchialDataset;\r\n items: IBaseItem[];\r\n modificationType: ModificationType;\r\n\r\n onMoveItemClickedEvent(\r\n sourceItems: IBaseItem[],\r\n targetContainer: IBaseItem\r\n ): Promise;\r\n\r\n onCopyItemClickedEvent(\r\n sourceItems: IBaseItem[],\r\n targetContainer: IBaseItem\r\n ): Promise;\r\n\r\n reloadItemRequestEvent(item: IBaseItem): Promise;\r\n\r\n onPanelCloseEvent(): void;\r\n}\r\n\r\ninterface IPickDestinationDialogState {\r\n showPanel: boolean;\r\n loading: {\r\n active: boolean;\r\n message?: string;\r\n };\r\n context: {\r\n currentItems: IBaseItem[];\r\n selectedSite: IBaseItem | undefined;\r\n selectedDrive: IBaseItem | undefined;\r\n selectedDriveItem: IBaseItem | undefined;\r\n };\r\n activePanel: Panels;\r\n data: {\r\n oneDrives: IBaseItem[];\r\n sites: IBaseItem[];\r\n drives: IBaseItem[];\r\n driveItems: IBaseItem[];\r\n };\r\n breadcrumb: {\r\n historyOfStates: any[];\r\n items: IBreadCrumbNavigationElement[];\r\n };\r\n}\r\n\r\nenum Panels {\r\n SITES_AND_ONEDRIVE = 0,\r\n SUBSITES_AND_DRIVES = 1,\r\n DRIVEITEMS = 2,\r\n}\r\n\r\nclass PickDestinationDialog extends React.Component<\r\n IPickDestinationDialogProps,\r\n IPickDestinationDialogState\r\n> {\r\n constructor(props: IPickDestinationDialogProps) {\r\n super(props);\r\n\r\n this.state = {\r\n showPanel: true,\r\n loading: {\r\n active: false,\r\n },\r\n activePanel: Panels.SITES_AND_ONEDRIVE,\r\n context: {\r\n currentItems: this.props.items,\r\n selectedSite: undefined,\r\n selectedDrive: undefined,\r\n selectedDriveItem: undefined,\r\n },\r\n data: {\r\n oneDrives: this.props.oneDrives.children,\r\n sites: this.props.sites.children,\r\n drives: [],\r\n driveItems: [],\r\n },\r\n breadcrumb: {\r\n historyOfStates: [],\r\n items: [\r\n {\r\n key: \"0\",\r\n title: this.props.i18n.breadCrumbKey0Title,\r\n },\r\n ],\r\n },\r\n };\r\n }\r\n\r\n /**\r\n * Toggles the visibility of the loading component showing an (optional) message.\r\n * @param message String containing a message to shown, if not specified a default message is shown.\r\n */\r\n private toggleLoading(message?: string): void {\r\n this.setState({\r\n loading: {\r\n active: !this.state.loading.active,\r\n message:\r\n message !== undefined ? message : this.props.i18n.loadingMessage,\r\n },\r\n });\r\n }\r\n\r\n /**\r\n * Event handler when a site is selected in the panel\r\n * @param site ISite instance of the selected site\r\n */\r\n private siteSelectedHandler(item: IBaseItem): void {\r\n let updatedHistory: any[] = [...this.state.breadcrumb.historyOfStates];\r\n updatedHistory.push({ ...this.state });\r\n\r\n let breadcrumb = {\r\n historyOfStates: updatedHistory,\r\n items: [\r\n ...this.state.breadcrumb.items,\r\n {\r\n key: `${this.state.breadcrumb.items.length}`,\r\n title: item.displayName,\r\n },\r\n ],\r\n };\r\n\r\n if (item.isLoaded) {\r\n this.setState({\r\n data: {\r\n ...this.state.data,\r\n sites: item.children.filter((child: IBaseItem) => {\r\n return isSite(child);\r\n }),\r\n drives: item.children.filter((child: IBaseItem) => {\r\n return isDrive(child);\r\n }),\r\n driveItems: [],\r\n },\r\n activePanel: Panels.SUBSITES_AND_DRIVES,\r\n context: {\r\n ...this.state.context,\r\n selectedSite: item,\r\n selectedDrive: undefined,\r\n selectedDriveItem: undefined,\r\n },\r\n breadcrumb: breadcrumb,\r\n });\r\n } else {\r\n this.toggleLoading();\r\n\r\n this.props.reloadItemRequestEvent(item).then((loadedItem: IBaseItem) => {\r\n this.setState({\r\n data: {\r\n ...this.state.data,\r\n sites: loadedItem.children.filter((child: IBaseItem) => {\r\n return isSite(child);\r\n }),\r\n drives: loadedItem.children.filter((child: IBaseItem) => {\r\n return isDrive(child);\r\n }),\r\n driveItems: [],\r\n },\r\n activePanel: Panels.SUBSITES_AND_DRIVES,\r\n loading: {\r\n active: !this.state.loading.active,\r\n },\r\n context: {\r\n ...this.state.context,\r\n selectedSite: loadedItem,\r\n selectedDrive: undefined,\r\n selectedDriveItem: undefined,\r\n },\r\n breadcrumb: breadcrumb,\r\n });\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Event handler when a drive is selected in the panel\r\n * @param drive IDrive instance of the selected site\r\n */\r\n private driveSelectedHandler(item: IBaseItem): void {\r\n let updatedHistory: any[] = [...this.state.breadcrumb.historyOfStates];\r\n updatedHistory.push({ ...this.state });\r\n\r\n let breadcrumb = {\r\n ...this.state.breadcrumb,\r\n historyOfStates: updatedHistory,\r\n items: [\r\n ...this.state.breadcrumb.items,\r\n {\r\n key: `${this.state.breadcrumb.items.length}`,\r\n title: item.displayName,\r\n },\r\n ],\r\n };\r\n\r\n if (item.isLoaded) {\r\n this.setState({\r\n data: {\r\n ...this.state.data,\r\n driveItems: item.children.filter((child: IBaseItem) => {\r\n return isDriveItem(child) && child.isContainer;\r\n }),\r\n },\r\n activePanel: Panels.DRIVEITEMS,\r\n context: {\r\n ...this.state.context,\r\n selectedDrive: item,\r\n selectedDriveItem: undefined,\r\n },\r\n breadcrumb: breadcrumb,\r\n });\r\n } else {\r\n this.toggleLoading();\r\n\r\n this.props.reloadItemRequestEvent(item).then((loadedItem: IBaseItem) => {\r\n this.setState({\r\n data: {\r\n ...this.state.data,\r\n driveItems: loadedItem.children.filter((child: IBaseItem) => {\r\n return isDriveItem(child) && child.isContainer;\r\n }),\r\n },\r\n activePanel: Panels.DRIVEITEMS,\r\n loading: {\r\n active: !this.state.loading.active,\r\n },\r\n context: {\r\n ...this.state.context,\r\n selectedDrive: loadedItem,\r\n selectedDriveItem: undefined,\r\n },\r\n breadcrumb: breadcrumb,\r\n });\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Event handler when a drive item is selected in the panel\r\n * @param driveItem IDriveItem instance of the selected site\r\n */\r\n private driveItemSelectedHandler(item: IBaseItem): void {\r\n let updatedHistory: any[] = [...this.state.breadcrumb.historyOfStates];\r\n updatedHistory.push({ ...this.state });\r\n\r\n let breadcrumb = {\r\n ...this.state.breadcrumb,\r\n historyOfStates: updatedHistory,\r\n items: [\r\n ...this.state.breadcrumb.items,\r\n {\r\n key: `${this.state.breadcrumb.items.length}`,\r\n title: item.displayName,\r\n },\r\n ],\r\n };\r\n\r\n if (item.isLoaded) {\r\n this.setState({\r\n data: {\r\n ...this.state.data,\r\n driveItems: item.children.filter((child: IBaseItem) => {\r\n return isDriveItem(child) && child.isContainer;\r\n }),\r\n },\r\n activePanel: Panels.DRIVEITEMS,\r\n context: {\r\n ...this.state.context,\r\n selectedDriveItem: item,\r\n },\r\n breadcrumb: breadcrumb,\r\n });\r\n } else {\r\n this.toggleLoading();\r\n\r\n this.props.reloadItemRequestEvent(item).then((loadedItem: IBaseItem) => {\r\n this.setState({\r\n data: {\r\n ...this.state.data,\r\n driveItems: loadedItem.children.filter((child: IBaseItem) => {\r\n return isDriveItem(child) && child.isContainer;\r\n }),\r\n },\r\n activePanel: Panels.DRIVEITEMS,\r\n loading: {\r\n active: !this.state.loading.active,\r\n },\r\n context: {\r\n ...this.state.context,\r\n selectedDriveItem: loadedItem,\r\n },\r\n breadcrumb: breadcrumb,\r\n });\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Event handler for when the button is clicked.\r\n */\r\n private buttonDriveItemClicked() {\r\n const {\r\n currentItems: currentDriveItems,\r\n selectedDrive,\r\n selectedDriveItem,\r\n } = this.state.context;\r\n\r\n let targetContainer: any | undefined;\r\n\r\n // depending on wether the user selected a drive or a drive item\r\n if (typeof selectedDriveItem !== \"undefined\") {\r\n targetContainer = selectedDriveItem;\r\n } else if (typeof selectedDrive !== \"undefined\") {\r\n targetContainer = selectedDrive;\r\n }\r\n\r\n if (typeof targetContainer !== \"undefined\") {\r\n if (this.props.modificationType === ModificationType.MOVE) {\r\n this.props.onMoveItemClickedEvent(currentDriveItems, targetContainer);\r\n } else {\r\n this.props.onCopyItemClickedEvent(currentDriveItems, targetContainer);\r\n }\r\n\r\n this.onPanelClose();\r\n }\r\n }\r\n\r\n private breadcrumbNavigationChanged(navigationKey: string): void {\r\n let navigationIndex: number = Number(navigationKey);\r\n let restoredState: IPickDestinationDialogState =\r\n this.state.breadcrumb.historyOfStates[navigationIndex];\r\n\r\n if (typeof restoredState !== \"undefined\") {\r\n this.setState(restoredState);\r\n }\r\n }\r\n\r\n /**\r\n * Event handler for when the user clicks the onDismiss button of the panel\r\n */\r\n private onPanelClose() {\r\n this.props.onPanelCloseEvent();\r\n\r\n this.setState({\r\n showPanel: false,\r\n });\r\n }\r\n\r\n /**\r\n * render\r\n */\r\n render() {\r\n if (this.state.loading.active) {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n /*\r\n Panel containing (root)sites only\r\n */\r\n if (this.state.activePanel === Panels.SITES_AND_ONEDRIVE) {\r\n return (\r\n \r\n
    \r\n
    \r\n {\r\n return {\r\n id: oneDrive.id,\r\n label: oneDrive.displayName,\r\n instance: oneDrive,\r\n iconName: \"OneDriveLogo\",\r\n } as IActionButtonListItem;\r\n })}\r\n actionButtonItemClickedHandler={this.driveSelectedHandler.bind(\r\n this\r\n )}\r\n className=\"mb-3 mt-2\"\r\n classNameButtonIconColor=\"OneDriveColor\"\r\n />\r\n {\r\n return {\r\n id: site.id,\r\n label: site.displayName,\r\n instance: site,\r\n iconName: \"SharepointLogo\",\r\n } as IActionButtonListItem;\r\n })}\r\n actionButtonItemClickedHandler={this.siteSelectedHandler.bind(\r\n this\r\n )}\r\n classNameButtonIconColor=\"SharePointColor\"\r\n />\r\n
    \r\n
    \r\n \r\n );\r\n } else if (this.state.activePanel === Panels.SUBSITES_AND_DRIVES) {\r\n /*\r\n Panel containing subsites and drives of a selected site\r\n */\r\n return (\r\n \r\n
    \r\n
    \r\n {\r\n return {\r\n id: site.id,\r\n label: site.displayName,\r\n instance: site,\r\n iconName: \"SharepointLogo\",\r\n } as IActionButtonListItem;\r\n })}\r\n actionButtonItemClickedHandler={this.siteSelectedHandler.bind(\r\n this\r\n )}\r\n classNameButtonIconColor=\"SharePointColor\"\r\n />\r\n {\r\n return {\r\n id: drive.id,\r\n label: drive.displayName,\r\n instance: drive,\r\n iconName: \"DocLibrary\",\r\n } as IActionButtonListItem;\r\n })}\r\n actionButtonItemClickedHandler={this.driveSelectedHandler.bind(\r\n this\r\n )}\r\n classNameButtonIconColor=\"DocLibraryColor\"\r\n />\r\n
    \r\n
    \r\n \r\n );\r\n } else if (this.state.activePanel === Panels.DRIVEITEMS) {\r\n /*\r\n Panel containing drive items of a selected drive\r\n */\r\n return (\r\n \r\n
    \r\n {this.state.data.driveItems.length === 0 &&\r\n this.props.modificationType === ModificationType.MOVE && (\r\n

    \r\n {this.props.i18n.emptyFolderMoveText}\r\n

    \r\n )}\r\n {this.state.data.driveItems.length === 0 &&\r\n this.props.modificationType === ModificationType.COPY && (\r\n

    \r\n {this.props.i18n.emptyFolderCopyText}\r\n

    \r\n )}\r\n {this.state.data.driveItems.length > 0 && (\r\n {\r\n return {\r\n id: driveItem.id,\r\n label: driveItem.displayName,\r\n instance: driveItem,\r\n iconName: \"FolderHorizontal\",\r\n } as IActionButtonListItem;\r\n }\r\n )}\r\n actionButtonItemClickedHandler={this.driveItemSelectedHandler.bind(\r\n this\r\n )}\r\n classNameButtonIconColor=\"FolderHorizontalColor\"\r\n />\r\n )}\r\n\r\n {this.props.modificationType === ModificationType.MOVE && (\r\n \r\n )}\r\n {this.props.modificationType === ModificationType.COPY && (\r\n \r\n )}\r\n
    \r\n \r\n );\r\n } else return
    ;\r\n }\r\n}\r\n\r\nexport default Localization.translateComponent<\r\n IPickDestinationDialogProps,\r\n IPickDestinationDialogState\r\n>(\"DestinationDialog\")(PickDestinationDialog);\r\n","import * as React from \"react\";\r\nimport { IUser, ITranslationProps } from \"../data/interfaces\";\r\nimport { Link } from \"office-ui-fabric-react/lib/Link\";\r\nimport * as Localization from \"./Translate\";\r\nimport ReactDOM from \"react-dom\";\r\nimport { Icon } from \"office-ui-fabric-react\";\r\n\r\nexport interface ICommandBarDropdownProps extends ITranslationProps {\r\n user: IUser;\r\n onClose(): void;\r\n onSignOut(e: any): void;\r\n avatarColor: string;\r\n}\r\n\r\nexport interface ICommandBarDropdownState {\r\n showPanel: boolean;\r\n}\r\n\r\nclass CommandBarDropdown extends React.Component<\r\n ICommandBarDropdownProps,\r\n ICommandBarDropdownState\r\n> {\r\n constructor(props: ICommandBarDropdownProps) {\r\n super(props);\r\n this.state = { showPanel: true };\r\n\r\n this.handleClickOutside = this.handleClickOutside.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n document.addEventListener(\"mousedown\", this.handleClickOutside);\r\n document.addEventListener(\"keydown\", this.handleEscapeKey, true);\r\n this.forceRender();\r\n }\r\n\r\n componentWillUnmount() {\r\n document.removeEventListener(\"mousedown\", this.handleClickOutside);\r\n document.removeEventListener(\"keydown\", this.handleEscapeKey, true);\r\n }\r\n\r\n componentDidUpdate() {\r\n this.displayPhoto(this.props.user.imageDataURL);\r\n }\r\n\r\n private handleClickOutside(event: any) {\r\n const domNode = ReactDOM.findDOMNode(this);\r\n\r\n if (!domNode || !domNode.contains(event.target)) {\r\n this.props.onClose();\r\n }\r\n }\r\n\r\n private handleEscapeKey = (event: any) => {\r\n if (event.keyCode === 27) {\r\n this.props.onClose();\r\n }\r\n };\r\n\r\n private forceRender() {\r\n this.setState({ showPanel: this.state.showPanel });\r\n }\r\n\r\n private displayPhoto(imgDataURL: any) {\r\n const photoElement: HTMLElement | null = document.getElementById(\r\n \"commandBarDropdownProfilePhotoId\"\r\n );\r\n if (photoElement !== null) {\r\n photoElement.setAttribute(\"src\", imgDataURL);\r\n }\r\n }\r\n\r\n private handleLinkClick(e: any) {\r\n this.props.onSignOut(e);\r\n }\r\n\r\n private handleOnDismiss() {\r\n this.props.onClose();\r\n }\r\n\r\n render() {\r\n const {\r\n displayName,\r\n userInitials,\r\n userPrincipalName,\r\n isPhotoAvailable\r\n } = this.props.user;\r\n return (\r\n
    \r\n
    \r\n \r\n {this.props.i18n.myAccountText}\r\n \r\n \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n {this.props.user !== undefined && isPhotoAvailable && (\r\n \r\n )}\r\n {this.props.user !== undefined && isPhotoAvailable === false && (\r\n \r\n {userInitials}\r\n
    \r\n )}\r\n
    \r\n
      \r\n
    • \r\n \r\n {this.props.user !== undefined && displayName !== \"\"\r\n ? displayName\r\n : userInitials}\r\n \r\n
    • \r\n
    • {this.props.user !== undefined ? userPrincipalName : null}
    • \r\n
    • \r\n \r\n {this.props.i18n.linkSignOutText}\r\n \r\n
    • \r\n
    \r\n
    \r\n
    \r\n );\r\n }\r\n}\r\n\r\nexport default Localization.translateComponent<\r\n ICommandBarDropdownProps,\r\n ICommandBarDropdownState\r\n>(\"CommandBarDropdown\")(CommandBarDropdown);\r\n","import * as React from \"react\";\r\nimport { SearchBox } from \"office-ui-fabric-react/lib/SearchBox\";\r\nimport {\r\n IUser,\r\n ITranslationProps,\r\n IMessageDialogContext,\r\n} from \"../data/interfaces\";\r\nimport { calculateColor } from \"../helpers/avatarHelper\";\r\nimport { TooltipHost } from \"office-ui-fabric-react/lib/Tooltip\";\r\nimport CommandBarDropdown from \"./CommandBarDropdown\";\r\nimport * as Localization from \"./Translate\";\r\nimport { Icon } from \"office-ui-fabric-react\";\r\nimport { MessageDialogType } from \"../data/enums\";\r\n\r\nexport interface ICommandBarProps extends ITranslationProps {\r\n user: IUser | undefined;\r\n language: string;\r\n onSearch(keyword: string): void;\r\n onSignOut(e: any): void;\r\n showMessageDialog(messageDialogContext: IMessageDialogContext): void;\r\n}\r\n\r\nexport interface ICommandBarState {\r\n showPanel: boolean;\r\n keyword: string;\r\n avatarColor: string;\r\n profileButtonSelectedClassName: string;\r\n}\r\n\r\nclass CommandBar extends React.Component {\r\n constructor(props: ICommandBarProps) {\r\n super(props);\r\n this.state = {\r\n showPanel: false,\r\n keyword: \"\",\r\n avatarColor: \"blue\",\r\n profileButtonSelectedClassName: \"\",\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n if (\r\n this.props.user !== undefined &&\r\n this.props.user.isPhotoAvailable === false\r\n ) {\r\n let avatarColor: string = calculateColor(\r\n this.props.user.userPrincipalName\r\n );\r\n this.setState({ avatarColor: avatarColor });\r\n } else {\r\n // Force a render otherwise the profile picture cannot be displayed.\r\n this.forceRender();\r\n }\r\n }\r\n\r\n componentDidUpdate() {\r\n if (this.props.user !== undefined)\r\n this.displayPhoto(this.props.user.imageDataURL);\r\n }\r\n\r\n forceRender() {\r\n this.setState({ showPanel: this.state.showPanel });\r\n }\r\n\r\n private displayPhoto(imgDataURL: any) {\r\n const photoElement: HTMLElement | null = document.getElementById(\r\n \"commandBarProfilePhotoId\"\r\n );\r\n if (photoElement !== null) {\r\n photoElement.setAttribute(\"src\", imgDataURL);\r\n }\r\n }\r\n\r\n private handleProfileButtonClick() {\r\n this.setState({\r\n showPanel: true,\r\n profileButtonSelectedClassName: \"commandbar-profile-button-selected\",\r\n });\r\n }\r\n\r\n private handleCommandBarDropdownClose = () => {\r\n this.setState({ showPanel: false, profileButtonSelectedClassName: \"\" });\r\n };\r\n\r\n private handleCommandBarDropdownSignOut(e: any) {\r\n this.props.onSignOut(e);\r\n }\r\n\r\n private handleSearchBoxChange = (newValue: string) => {\r\n this.setState({\r\n keyword: newValue,\r\n });\r\n };\r\n\r\n private handleSearchBoxSearch(newValue: string) {\r\n if (newValue.length === 0) return;\r\n\r\n if (this.props.onSearch !== undefined) {\r\n this.props.onSearch(this.state.keyword);\r\n }\r\n }\r\n\r\n private handleTooltipHostButtonClick = () => {\r\n if (this.state.keyword.length === 0) return;\r\n\r\n if (this.props.onSearch !== undefined) {\r\n this.props.onSearch(this.state.keyword);\r\n }\r\n };\r\n\r\n private handleUserManualButtonClick = () => {\r\n const fullPath: string = `/manuals/Manual-FE-${this.props.language}.pdf`;\r\n\r\n this.fileExists(`${window.location.origin}${fullPath}`).then(\r\n (result: boolean) => {\r\n if (result) window.open(fullPath, \"_blank\");\r\n else {\r\n const dialogType: MessageDialogType = MessageDialogType.Close;\r\n const messageDialogContext: IMessageDialogContext = {\r\n dialogTitle: \"User manual not available!\",\r\n message: `${\"The user manual for this language (\"}${\r\n this.props.language\r\n }${\") is not available. Make a service request to get this manual in this language\"}`,\r\n dialogType: dialogType,\r\n };\r\n this.props.showMessageDialog(messageDialogContext);\r\n }\r\n }\r\n );\r\n };\r\n\r\n private fileExists(fullPath: string): Promise {\r\n return new Promise((resolve) => {\r\n fetch(fullPath)\r\n .then((response: Response) => {\r\n resolve(response.ok && response.status === 200);\r\n })\r\n .catch((error: any) => {\r\n //console.log(\"error\", error);\r\n resolve(false);\r\n });\r\n });\r\n }\r\n\r\n render() {\r\n return (\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n \r\n
    \r\n
    \r\n \r\n {this.props.user !== undefined &&\r\n this.props.user.isPhotoAvailable && (\r\n \r\n )}\r\n {this.props.user !== undefined &&\r\n this.props.user.isPhotoAvailable === false && (\r\n \r\n {this.props.user.userInitials}\r\n
    \r\n )}\r\n \r\n \r\n {this.state.showPanel && this.props.user !== undefined && (\r\n \r\n )}\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default Localization.translateComponent<\r\n ICommandBarProps,\r\n ICommandBarState\r\n>(\"CommandBar\")(CommandBar);\r\n","import * as React from \"react\";\r\n\r\nexport interface LoadingIndicatorProps {\r\n message?: string;\r\n}\r\n\r\nexport default class LoadingIndicator extends React.Component<\r\n LoadingIndicatorProps\r\n> {\r\n /**\r\n * Render()\r\n */\r\n render() {\r\n const { message } = this.props;\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n \r\n {message}\r\n
    \r\n
    \r\n
    \r\n );\r\n }\r\n}\r\n","import * as React from \"react\";\r\nimport LoadingIndicator from \"./LoadingIndicator\";\r\nimport * as Localization from \"./Translate\";\r\nimport { ITranslationProps } from \"../data/interfaces\";\r\n\r\nexport interface IDataLoadingSpinnnerProps extends ITranslationProps {}\r\n\r\nexport interface IDataLoadingSpinnnerState {}\r\n\r\nclass DataLoadingSpinnner extends React.Component<\r\n IDataLoadingSpinnnerProps,\r\n IDataLoadingSpinnnerState\r\n> {\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default Localization.translateComponent<\r\n IDataLoadingSpinnnerProps,\r\n IDataLoadingSpinnnerState\r\n>(\"DataLoadingSpinnner\")(DataLoadingSpinnner);\r\n","import React from \"react\";\r\nimport { IBaseItem, ITranslationProps } from \"../data/interfaces\";\r\nimport { ValidateName } from \"../helpers/globalHelper\";\r\nimport * as Localization from \"./Translate\";\r\nimport Modal, { IDragOptions } from \"office-ui-fabric-react/lib/Modal\";\r\nimport { ContextualMenu } from \"office-ui-fabric-react/lib/ContextualMenu\";\r\nimport { TextField } from \"office-ui-fabric-react/lib/TextField\";\r\n\r\nexport interface IRenameDialogProps extends ITranslationProps {\r\n showRenameDialog: boolean;\r\n item: IBaseItem;\r\n onClose(): void;\r\n onSave(newName: string): void;\r\n}\r\n\r\ninterface IRenameDialogState {\r\n isResizable: boolean;\r\n newName: string;\r\n isDraggable: boolean;\r\n}\r\n\r\nclass RenameDialog extends React.Component<\r\n IRenameDialogProps,\r\n IRenameDialogState\r\n> {\r\n private fileExtensionWithPeriod: string = \"\";\r\n private showErrorMessageEmpty: boolean = false;\r\n private showErrorMessageRegEx: boolean = false;\r\n private buttonSaveDisabled: boolean = true;\r\n\r\n private _dragOptions: IDragOptions = {\r\n moveMenuItemText: \"Move\",\r\n closeMenuItemText: \"Close\",\r\n menu: ContextualMenu\r\n };\r\n\r\n constructor(props: IRenameDialogProps) {\r\n super(props);\r\n\r\n this.state = {\r\n isResizable: false,\r\n newName: \"\",\r\n isDraggable: false\r\n };\r\n }\r\n\r\n handleButtonSave() {\r\n const { item, onSave } = this.props;\r\n const newName: string = this.state.newName;\r\n if (\r\n newName === undefined ||\r\n newName === \"\" ||\r\n newName === this.props.item.displayName\r\n ) {\r\n this.handleButtonClose();\r\n return;\r\n }\r\n\r\n if (ValidateName(newName)) {\r\n if (!item.isContainer) {\r\n onSave(newName + this.fileExtensionWithPeriod);\r\n } else onSave(newName);\r\n }\r\n\r\n this.setState({ newName: \"\" });\r\n }\r\n\r\n handleButtonClose() {\r\n this.showErrorMessageEmpty = false;\r\n this.showErrorMessageRegEx = false;\r\n this.setState({ newName: \"\" });\r\n this.props.onClose();\r\n }\r\n\r\n handleOnChange = (event: any) => {\r\n const value: string = event.target.value.trim();\r\n\r\n this.showErrorMessageEmpty = false;\r\n this.showErrorMessageRegEx = false;\r\n this.buttonSaveDisabled = false;\r\n\r\n if (value.length === 0) {\r\n this.showErrorMessageEmpty = true;\r\n this.buttonSaveDisabled = true;\r\n this.setState({ newName: \"\" });\r\n return;\r\n }\r\n\r\n if (!ValidateName(value)) {\r\n this.showErrorMessageRegEx = true;\r\n this.buttonSaveDisabled = true;\r\n this.setState({ newName: \"\" });\r\n return;\r\n }\r\n\r\n this.setState({ newName: value });\r\n };\r\n\r\n handleFocus = (event: any) => {\r\n event.target.select();\r\n };\r\n\r\n getFileName(fileName: string) {\r\n const lastIndex: number = fileName.lastIndexOf(\".\");\r\n if (lastIndex < 1) return \"\";\r\n return fileName.substr(0, lastIndex);\r\n }\r\n\r\n getFileExtension(fileName: string) {\r\n const lastIndex: number = fileName.lastIndexOf(\".\");\r\n if (lastIndex < 1) return \"\";\r\n return fileName.substr(lastIndex + 1);\r\n }\r\n\r\n getItemData = () => {\r\n const { showRenameDialog, item } = this.props;\r\n let fileName: string = \"\";\r\n let fileExtension: string = \"\";\r\n let folderName: string = \"\";\r\n\r\n if (item.isContainer) {\r\n folderName = item.displayName;\r\n } else {\r\n fileName = this.getFileName(item.displayName);\r\n fileExtension = \".\" + this.getFileExtension(item.displayName);\r\n this.fileExtensionWithPeriod = fileExtension;\r\n }\r\n\r\n return { showRenameDialog, folderName, fileName, fileExtension };\r\n };\r\n\r\n private handleOnDismiss() {\r\n this.handleButtonClose();\r\n }\r\n\r\n render() {\r\n const {\r\n showRenameDialog,\r\n folderName,\r\n fileName,\r\n fileExtension\r\n } = this.getItemData();\r\n return (\r\n
    \r\n \r\n
    \r\n

    {this.props.i18n.dialogTitle}

    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n {this.showErrorMessageEmpty &&\r\n this.props.i18n.nameEmptyErrorMessage}\r\n {this.showErrorMessageRegEx &&\r\n this.props.i18n.nameValidationErrorMessage}\r\n
    \r\n
    \r\n \r\n {this.props.i18n.buttonCancelText}\r\n \r\n \r\n {this.props.i18n.buttonSaveText}\r\n \r\n
    \r\n \r\n
    \r\n );\r\n }\r\n}\r\n\r\nexport default Localization.translateComponent<\r\n IRenameDialogProps,\r\n IRenameDialogState\r\n>(\"RenameDialog\")(RenameDialog);\r\n","export class IconHelper {\r\n private _extensionToIconName: {\r\n [key: string]: string;\r\n } | undefined;\r\n private GENERIC_FILE: string = 'genericfile';\r\n\r\n public _getFileTypeIconNameFromExtension(extension: string): string {\r\n if (!this._extensionToIconName) {\r\n this._extensionToIconName = {};\r\n\r\n for (const iconName in FileTypeIconMap) {\r\n if (FileTypeIconMap.hasOwnProperty(iconName)) {\r\n const extensions = FileTypeIconMap[iconName].extensions;\r\n\r\n if (extensions) {\r\n for (let i = 0; i < extensions.length; i++) {\r\n this._extensionToIconName[extensions[i]] = iconName;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Strip periods, force lowercase.\r\n extension = extension.replace('.', '').toLowerCase();\r\n\r\n return this._extensionToIconName[extension] || this.GENERIC_FILE;\r\n }\r\n}\r\n\r\n/**\r\n * Enumeration of icon file names, and what extensions they map to.\r\n * Please keep items alphabetical. Items without extensions may require specific logic in the code to map.\r\n * Always use getFileTypeIconProps to get the most up-to-date icon at the right pixel density.\r\n */\r\nexport const FileTypeIconMap: { [key: string]: { extensions?: string[] } } = {\r\n accdb: { extensions: ['accdb', 'mdb'] },\r\n archive: {\r\n extensions: ['7z', 'ace', 'arc', 'arj', 'dmg', 'gz', 'iso', 'lzh', 'pkg', 'rar', 'sit', 'tgz', 'tar', 'z']\r\n },\r\n audio: {\r\n extensions: [\r\n 'aif',\r\n 'aiff',\r\n 'aac',\r\n 'amr',\r\n 'au',\r\n 'awb',\r\n 'dct',\r\n 'dss',\r\n 'dvf',\r\n 'flac',\r\n 'gsm',\r\n 'm4a',\r\n 'm4p',\r\n 'mid',\r\n 'mmf',\r\n 'mp3',\r\n 'ogg',\r\n 'oga',\r\n 'ra',\r\n 'rm',\r\n 'wav',\r\n 'wma',\r\n 'wv'\r\n ]\r\n },\r\n channelfolder: {},\r\n code: {\r\n extensions: [\r\n 'abap',\r\n 'ada',\r\n 'adp',\r\n 'ahk',\r\n 'as',\r\n 'as3',\r\n 'asc',\r\n 'ascx',\r\n 'asm',\r\n 'asp',\r\n 'awk',\r\n 'bash',\r\n 'bash_login',\r\n 'bash_logout',\r\n 'bash_profile',\r\n 'bashrc',\r\n 'bat',\r\n 'bib',\r\n 'bsh',\r\n 'build',\r\n 'builder',\r\n 'c',\r\n 'c++',\r\n 'capfile',\r\n 'cc',\r\n 'cfc',\r\n 'cfm',\r\n 'cfml',\r\n 'cl',\r\n 'clj',\r\n 'cls',\r\n 'cmake',\r\n 'cmd',\r\n 'coffee',\r\n 'config',\r\n 'cpp',\r\n 'cpt',\r\n 'cpy',\r\n 'cs',\r\n 'cshtml',\r\n 'cson',\r\n 'csproj',\r\n 'css',\r\n 'ctp',\r\n 'cxx',\r\n 'd',\r\n 'ddl',\r\n 'di',\r\n 'disco',\r\n 'dml',\r\n 'dtd',\r\n 'dtml',\r\n 'el',\r\n 'emakefile',\r\n 'erb',\r\n 'erl',\r\n 'f',\r\n 'f90',\r\n 'f95',\r\n 'fs',\r\n 'fsi',\r\n 'fsscript',\r\n 'fsx',\r\n 'gemfile',\r\n 'gemspec',\r\n 'gitconfig',\r\n 'go',\r\n 'groovy',\r\n 'gvy',\r\n 'Hcp',\r\n 'h',\r\n 'h++',\r\n 'haml',\r\n 'handlebars',\r\n 'hbs',\r\n 'hh',\r\n 'hpp',\r\n 'hrl',\r\n 'hs',\r\n 'htc',\r\n 'hxx',\r\n 'idl',\r\n 'iim',\r\n 'inc',\r\n 'inf',\r\n 'ini',\r\n 'inl',\r\n 'ipp',\r\n 'irbrc',\r\n 'jade',\r\n 'jav',\r\n 'java',\r\n 'js',\r\n 'json',\r\n 'jsp',\r\n 'jsx',\r\n 'l',\r\n 'less',\r\n 'lhs',\r\n 'lisp',\r\n 'log',\r\n 'lst',\r\n 'ltx',\r\n 'lua',\r\n 'm',\r\n 'mak',\r\n 'make',\r\n 'manifest',\r\n 'master',\r\n 'md',\r\n 'markdn',\r\n 'markdown',\r\n 'mdown',\r\n 'mkdn',\r\n 'ml',\r\n 'mli',\r\n 'mll',\r\n 'mly',\r\n 'mm',\r\n 'mud',\r\n 'nfo',\r\n 'opml',\r\n 'osascript',\r\n 'p',\r\n 'pas',\r\n 'patch',\r\n 'php',\r\n 'php2',\r\n 'php3',\r\n 'php4',\r\n 'php5',\r\n 'phtml',\r\n 'pl',\r\n 'pm',\r\n 'pod',\r\n 'pp',\r\n 'profile',\r\n 'ps1',\r\n 'ps1xml',\r\n 'psd1',\r\n 'psm1',\r\n 'pss',\r\n 'pt',\r\n 'py',\r\n 'pyw',\r\n 'r',\r\n 'rake',\r\n 'rb',\r\n 'rbx',\r\n 'rc',\r\n 'rdf',\r\n 're',\r\n 'reg',\r\n 'rest',\r\n 'resw',\r\n 'resx',\r\n 'rhtml',\r\n 'rjs',\r\n 'rprofile',\r\n 'rpy',\r\n 'rss',\r\n 'rst',\r\n 'ruby',\r\n 'rxml',\r\n 's',\r\n 'sass',\r\n 'scala',\r\n 'scm',\r\n 'sconscript',\r\n 'sconstruct',\r\n 'script',\r\n 'scss',\r\n 'sgml',\r\n 'sh',\r\n 'sh',\r\n 'shtml',\r\n 'sml',\r\n 'svn-base',\r\n 'swift',\r\n 'sql',\r\n 'sty',\r\n 'tcl',\r\n 'tex',\r\n 'textile',\r\n 'tld',\r\n 'tli',\r\n 'tmpl',\r\n 'tpl',\r\n 'vb',\r\n 'vi',\r\n 'vim',\r\n 'vmg',\r\n 'webpart',\r\n 'wsp',\r\n 'wsdl',\r\n 'xhtml',\r\n 'xoml',\r\n 'xsd',\r\n 'xslt',\r\n 'yaml',\r\n 'yaws',\r\n 'yml',\r\n 'zsh'\r\n ]\r\n },\r\n css: {}, // we dont have the icon yet, but i believe we want it, snapping to 'code' for now\r\n csv: { extensions: ['csv'] },\r\n docset: {},\r\n docx: { extensions: ['doc', 'docm', 'docx', 'docb'] },\r\n dotx: { extensions: ['dot', 'dotm', 'dotx'] },\r\n email: { extensions: ['eml', 'msg', 'ost', 'pst'] },\r\n exe: { extensions: ['application', 'appref-ms', 'apk', 'app', 'appx', 'exe', 'ipa', 'msi', 'xap'] },\r\n folder: {},\r\n font: { extensions: ['ttf', 'otf', 'woff'] },\r\n genericfile: {},\r\n html: { extensions: ['htm', 'html', 'mht'] },\r\n link: { extensions: ['lnk', 'link', 'url', 'website', 'webloc'] },\r\n linkedfolder: {},\r\n splist: { extensions: ['listitem'] },\r\n model: {\r\n extensions: [\r\n '3ds',\r\n '3mf',\r\n 'blend',\r\n 'cool',\r\n 'dae',\r\n 'df',\r\n 'dwfx',\r\n 'dwg',\r\n 'dxf',\r\n 'fbx',\r\n 'glb',\r\n 'gltf',\r\n 'holo',\r\n 'layout',\r\n 'max',\r\n 'mtl',\r\n 'obj',\r\n 'off',\r\n 'ply',\r\n 'skp',\r\n 'stp',\r\n 'stl',\r\n 't',\r\n 'thl',\r\n 'x'\r\n ]\r\n },\r\n mpp: { extensions: ['mpp'] },\r\n mpt: { extensions: ['mpt'] },\r\n one: { extensions: ['one', 'onepkg'] }, // this is a format for exported single-file notebook pages\r\n onetoc: { extensions: ['ms-one-stub', 'onetoc', 'onetoc2'] }, // this icon represents a complete, logical notebook.\r\n pdf: { extensions: ['pdf'] },\r\n photo: {\r\n extensions: [\r\n 'arw',\r\n 'bmp',\r\n 'cr2',\r\n 'crw',\r\n 'dcr',\r\n 'dds',\r\n 'dib',\r\n 'dng',\r\n 'erf',\r\n 'gif',\r\n 'heic',\r\n 'heif',\r\n 'ico',\r\n 'jfi',\r\n 'jfif',\r\n 'jif',\r\n 'jpe',\r\n 'jpeg',\r\n 'jpg',\r\n 'kdc',\r\n 'mrw',\r\n 'nef',\r\n 'orf',\r\n 'pct',\r\n 'pict',\r\n 'png',\r\n 'pns',\r\n 'psd',\r\n 'raw',\r\n 'tga',\r\n 'tif',\r\n 'tiff',\r\n 'wdp'\r\n ]\r\n },\r\n photo360: {},\r\n potx: { extensions: ['pot', 'potm', 'potx'] },\r\n ppsx: { extensions: ['pps', 'ppsm', 'ppsx'] },\r\n pptx: { extensions: ['ppt', 'pptm', 'pptx', 'sldx', 'sldm'] },\r\n presentation: { extensions: ['odp', 'gslides', 'key'] },\r\n pub: { extensions: ['pub'] },\r\n spo: { extensions: ['aspx'] },\r\n sponews: {},\r\n spreadsheet: { extensions: ['ods', 'gsheet', 'numbers'] },\r\n rtf: { extensions: ['epub', 'gdoc', 'odt', 'rtf', 'wri', 'pages'] },\r\n sharedfolder: {},\r\n sway: {},\r\n sysfile: {\r\n extensions: [\r\n 'bak',\r\n 'bin',\r\n 'cab',\r\n 'cache',\r\n 'cat',\r\n 'cer',\r\n 'class',\r\n 'dat',\r\n 'db',\r\n 'dbg',\r\n 'dl_',\r\n 'dll',\r\n 'ithmb',\r\n 'jar',\r\n 'kb',\r\n 'kdc',\r\n 'ldt',\r\n 'lrprev',\r\n 'ppa',\r\n 'ppam',\r\n 'pdb',\r\n 'rom',\r\n 'thm',\r\n 'thmx',\r\n 'vsl',\r\n 'xla',\r\n 'xlam',\r\n 'xll'\r\n ]\r\n },\r\n txt: { extensions: ['dif', 'diff', 'readme', 'out', 'plist', 'properties', 'text', 'txt'] },\r\n vector: {\r\n extensions: [\r\n 'ai',\r\n 'dgn',\r\n 'gdraw',\r\n 'pd',\r\n 'emf',\r\n 'eps',\r\n 'fig',\r\n 'indd',\r\n 'indt',\r\n 'indb',\r\n 'ps',\r\n 'svg',\r\n 'svgz',\r\n 'wmf',\r\n 'oxps',\r\n 'xps',\r\n 'xd',\r\n 'sketch'\r\n ]\r\n },\r\n video: {\r\n extensions: [\r\n '3g2',\r\n '3gp',\r\n '3gp2',\r\n '3gpp',\r\n 'asf',\r\n 'avi',\r\n 'dvr-ms',\r\n 'flv',\r\n 'm1v',\r\n 'm4v',\r\n 'mkv',\r\n 'mod',\r\n 'mov',\r\n 'mm4p',\r\n 'mp2',\r\n 'mp2v',\r\n 'mp4',\r\n 'mpa',\r\n 'mpe',\r\n 'mpeg',\r\n 'mpg',\r\n 'mpv',\r\n 'mpv2',\r\n 'mts',\r\n 'ogg',\r\n 'qt',\r\n 'swf',\r\n 'ts',\r\n 'vob',\r\n 'webm',\r\n 'wlmp',\r\n 'wm',\r\n 'wmv',\r\n 'wmx'\r\n ]\r\n },\r\n video360: {},\r\n vsdx: { extensions: ['vsd', 'vsdm', 'vsdx', 'vdw'] },\r\n vssx: { extensions: ['vss', 'vssm', 'vssx'] },\r\n vstx: { extensions: ['vst', 'vstm', 'vstx'] },\r\n xlsx: { extensions: ['xls', 'xlsb', 'xlsm', 'xlsx'] },\r\n xltx: { extensions: ['xlt', 'xltm', 'xltx'] },\r\n xml: { extensions: ['xaml', 'xml', 'xsl'] },\r\n xsn: { extensions: ['xsn'] },\r\n zip: { extensions: ['zip'] }\r\n};\r\n","import * as React from \"react\";\r\nimport {\r\n IMessageDialogContext,\r\n ITranslationProps,\r\n IBaseItem\r\n} from \"../data/interfaces\";\r\nimport * as Localization from \"./Translate\";\r\nimport Modal, { IDragOptions } from \"office-ui-fabric-react/lib/Modal\";\r\nimport { ContextualMenu } from \"office-ui-fabric-react/lib/ContextualMenu\";\r\nimport { MessageDialogType, ActionType } from \"../data/enums\";\r\n\r\nexport interface IMessageDialogProps extends ITranslationProps {\r\n showDialog: boolean;\r\n messageContext: IMessageDialogContext;\r\n onCloseEvent(): void;\r\n onButtonConfirmClickedEvent(item: IBaseItem, actionType: ActionType): void;\r\n}\r\n\r\nexport interface IMessageDialogState {\r\n isDraggable: false;\r\n}\r\n\r\nclass MessageDialog extends React.Component<\r\n IMessageDialogProps,\r\n IMessageDialogState\r\n> {\r\n private _dragOptions: IDragOptions = {\r\n moveMenuItemText: \"Move\",\r\n closeMenuItemText: \"Close\",\r\n menu: ContextualMenu\r\n };\r\n\r\n constructor(props: IMessageDialogProps) {\r\n super(props);\r\n this.state = {\r\n isDraggable: false\r\n };\r\n }\r\n\r\n private handleOnDismissModal() {\r\n this.props.onCloseEvent();\r\n }\r\n\r\n private handleOnClickButtonYes() {\r\n if (\r\n this.props.messageContext.item !== undefined &&\r\n this.props.messageContext.actionType !== undefined\r\n ) {\r\n this.props.onButtonConfirmClickedEvent(\r\n this.props.messageContext.item,\r\n this.props.messageContext.actionType\r\n );\r\n }\r\n }\r\n\r\n private handleOnClickButtonNo() {\r\n this.props.onCloseEvent();\r\n }\r\n\r\n render() {\r\n const { messageContext, i18n } = this.props;\r\n if (messageContext === undefined) return null;\r\n else {\r\n return (\r\n
    \r\n \r\n
    \r\n

    {this.props.messageContext.dialogTitle}

    \r\n
    \r\n
    \r\n \r\n
    \r\n {messageContext.dialogType === MessageDialogType.Confirm && (\r\n
    \r\n \r\n {i18n.buttonYesText}\r\n \r\n\r\n \r\n {i18n.buttonNoText}\r\n \r\n
    \r\n )}\r\n {messageContext.dialogType === MessageDialogType.Close && (\r\n
    \r\n \r\n {i18n.buttonCloseText}\r\n \r\n
    \r\n )}\r\n \r\n
    \r\n );\r\n }\r\n }\r\n}\r\n\r\nexport default Localization.translateComponent<\r\n IMessageDialogProps,\r\n IMessageDialogState\r\n>(\"MessageDialog\")(MessageDialog);\r\n","import * as React from \"react\";\r\nimport { Modal, Icon, IconButton, IIconProps } from \"office-ui-fabric-react\";\r\nimport * as Localization from \"./Translate\";\r\nimport {\r\n IShareDialogContext,\r\n ISharingLinkData,\r\n IErrorResult,\r\n IDriveItem,\r\n ITranslationProps\r\n} from \"../data/interfaces\";\r\nimport copy from \"copy-to-clipboard\";\r\nimport { GetSiteOrOneDriveUrl } from \"../helpers/globalHelper\";\r\n\r\nexport interface IShareDialogProps extends ITranslationProps {\r\n shareContext: IShareDialogContext;\r\n onCloseEvent(): void;\r\n onCreateShareLink(\r\n item: IDriveItem,\r\n siteOrOneDriveUrl: string,\r\n driveIsOneDrive: boolean\r\n ): Promise;\r\n}\r\n\r\nexport interface IShareDialogState {\r\n isDraggable: boolean;\r\n isCopyInactive: boolean;\r\n isCopyActive: boolean;\r\n isCopySuccess: boolean;\r\n}\r\n\r\nconst linkIcon: IIconProps = { iconName: \"Link12\" };\r\n\r\nclass ShareDialog extends React.Component<\r\n IShareDialogProps,\r\n IShareDialogState\r\n> {\r\n constructor(props: IShareDialogProps) {\r\n super(props);\r\n this.state = {\r\n isDraggable: false,\r\n isCopyInactive: true,\r\n isCopyActive: false,\r\n isCopySuccess: false\r\n };\r\n }\r\n private handleOnDismissModal() {\r\n this.props.onCloseEvent();\r\n }\r\n\r\n private handleOnClickCopyLink() {\r\n this.setState({ isCopyInactive: false, isCopyActive: true }, () => {\r\n const item: IDriveItem = this.props.shareContext.item;\r\n\r\n const siteOrOneDriveUrl: string = GetSiteOrOneDriveUrl(item);\r\n\r\n this.props\r\n .onCreateShareLink(item, siteOrOneDriveUrl, item.driveIsOneDrive)\r\n .then((result: ISharingLinkData) => {\r\n // Copy the link to the clipboard\r\n this.copyCodeToClipboard(result.webUrl);\r\n this.setState({ isCopyActive: false, isCopySuccess: true });\r\n })\r\n .catch((error: IErrorResult) => {\r\n console.error(\r\n \"Exception in ShareDialog.handleOnClickCopyLink for item: \",\r\n item.displayName,\r\n error\r\n );\r\n this.setState({ isCopyInactive: true, isCopyActive: false });\r\n this.handleOnDismissModal();\r\n });\r\n });\r\n }\r\n\r\n copyCodeToClipboard = (webUrl: string) => {\r\n if (navigator.clipboard) {\r\n // Chrome\r\n navigator.clipboard.writeText(webUrl);\r\n } else {\r\n // Other browsers\r\n copy(webUrl);\r\n }\r\n\r\n this.setState({ isCopySuccess: true });\r\n };\r\n\r\n render() {\r\n const { isCopyInactive, isCopyActive, isCopySuccess } = this.state;\r\n if (isCopyInactive) {\r\n return (\r\n
    \r\n \r\n
    \r\n \r\n {this.props.i18n.dialogTitle}\r\n \r\n \r\n \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n {this.props.i18n.copyShareLinkToClipboardText}\r\n
    \r\n
    \r\n \r\n
    \r\n );\r\n } else if (isCopyActive) {\r\n return (\r\n \r\n
    \r\n \r\n {this.props.i18n.dialogTitle}\r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n {this.props.i18n.creatingLinkMessage}\r\n
    \r\n
    \r\n \r\n );\r\n } else if (isCopySuccess) {\r\n return (\r\n \r\n
    \r\n \r\n {this.props.i18n.dialogTitle}\r\n \r\n \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n {this.props.i18n.createdLinkMessage}\r\n
    \r\n
    \r\n \r\n );\r\n }\r\n }\r\n}\r\n\r\nexport default Localization.translateComponent<\r\n IShareDialogProps,\r\n IShareDialogState\r\n>(\"ShareDialog\")(ShareDialog);\r\n","import React from \"react\";\r\nimport {\r\n IDriveItem,\r\n ITranslationProps,\r\n IBaseItem,\r\n IMessageDialogContext,\r\n ISite,\r\n IDrive,\r\n IShareDialogContext,\r\n ISharingLinkData,\r\n} from \"../data/interfaces\";\r\nimport {\r\n Grid,\r\n GridColumn as Column,\r\n GridCellProps,\r\n GridNoRecords,\r\n GridRowProps,\r\n} from \"@progress/kendo-react-grid\";\r\nimport { Icon, IconType } from \"office-ui-fabric-react/lib/Icon\";\r\nimport { Popup, Offset } from \"@progress/kendo-react-popup\";\r\nimport { Menu, MenuItem } from \"@progress/kendo-react-layout\";\r\nimport { orderBy, SortDescriptor } from \"@progress/kendo-data-query\";\r\nimport RenameDialog from \"./RenameDialog\";\r\nimport Moment from \"moment\";\r\nimport { IconHelper } from \"../helpers/iconHelper\";\r\nimport * as Localization from \"./Translate\";\r\nimport {\r\n HierarchialDataScope,\r\n MessageBarType,\r\n MessageDialogType,\r\n ActionType,\r\n} from \"../data/enums\";\r\nimport { Guid } from \"../helpers/globalHelper\";\r\nimport { isDriveItem, isRecycleBin } from \"../helpers/typeCheck\";\r\nimport MessageDialog from \"./MessageDialog\";\r\nimport LoadingIndicator from \"./LoadingIndicator\";\r\nimport { ModificationType } from \"./ItemModificationQueue\";\r\nimport ShareDialog from \"./ShareDialog\";\r\nimport customProtocolCheck from \"custom-protocol-check\";\r\n\r\nexport interface IDriveItemsListProps extends ITranslationProps {\r\n loadedContainer?: IBaseItem;\r\n language: string;\r\n\r\n itemClickedEvent?(clickedItem: IBaseItem): void;\r\n itemRemoveEvent?(itemToRemove: IBaseItem[]): Promise;\r\n itemRestoreEvent?(itemToRestore: IBaseItem): Promise;\r\n itemDeleteEvent?(itemToDelete: IBaseItem): Promise;\r\n itemRenameEvent?(itemToRename: IBaseItem, newName: string): Promise;\r\n itemMoveEvent?(itemsToMove: IBaseItem[]): void;\r\n itemCopyEvent?(itemsToCopy: IBaseItem[]): void;\r\n\r\n itemDroppedEvent(sourceItems: IBaseItem[], targetContainer: IBaseItem): void;\r\n\r\n itemCreationEvent(formData: FormData): Promise;\r\n itemsCreatingEvent(item: IBaseItem[]): Promise;\r\n itemCreatedEvent(item: IBaseItem): Promise;\r\n\r\n itemsSelectedEvent(selected: boolean): void;\r\n\r\n DummyFileRemoveEvent(\r\n item: IBaseItem,\r\n modificationType: ModificationType\r\n ): Promise;\r\n\r\n showMessageBar(message: string, messageBarType: MessageBarType): void;\r\n showMessageBarJSXFormed(\r\n message: JSX.Element,\r\n messageBarType: MessageBarType\r\n ): void;\r\n closeMessageBar(): void;\r\n\r\n createShareLink(\r\n item: IDriveItem,\r\n siteOrOneDriveUrl: string,\r\n driveIsOneDrive: boolean\r\n ): Promise;\r\n}\r\n\r\ninterface IDriveItemsListState {\r\n data: IBaseItem[];\r\n itemPopupOpen: boolean;\r\n sortDefinition: SortDescriptor[];\r\n showRenameDialog: boolean;\r\n selectedItem?: IBaseItem;\r\n dragging: boolean;\r\n uploading: boolean;\r\n cancelClicked: boolean;\r\n messageDialogContext?: IMessageDialogContext;\r\n testFailedMessages: boolean;\r\n uriPrefix: string;\r\n disableMenuItemOpenInApp: boolean;\r\n inRecycleBin: boolean;\r\n shareDialogContext?: IShareDialogContext;\r\n itemsSelected: boolean;\r\n}\r\n\r\nclass DriveItemsList extends React.Component<\r\n IDriveItemsListProps,\r\n IDriveItemsListState\r\n> {\r\n private item?: IDriveItem;\r\n private offset?: Offset;\r\n private dataItemIndex?: number;\r\n private _iconHelper: IconHelper;\r\n private _isMounted = false;\r\n private _mouseCoordinates: { x: number; y: number };\r\n\r\n constructor(props: IDriveItemsListProps) {\r\n super(props);\r\n\r\n const testFailedMessages: boolean =\r\n window.location.search.indexOf(\"testFailedMessages=true\") > -1\r\n ? true\r\n : false;\r\n\r\n this.state = {\r\n data: [],\r\n itemPopupOpen: false,\r\n sortDefinition: [],\r\n showRenameDialog: false,\r\n selectedItem: undefined,\r\n dragging: false,\r\n uploading: false,\r\n cancelClicked: false,\r\n messageDialogContext: undefined,\r\n testFailedMessages: testFailedMessages,\r\n uriPrefix: \"\",\r\n disableMenuItemOpenInApp: false,\r\n inRecycleBin: false,\r\n itemsSelected: false,\r\n };\r\n\r\n this._iconHelper = new IconHelper();\r\n\r\n this._mouseCoordinates = { x: 0, y: 0 };\r\n }\r\n\r\n public componentDidMount() {\r\n /*\r\n You may call setState() immediately in componentDidMount(). It will trigger an\r\n extra rendering, but it will happen before the browser updates the screen. This\r\n guarantees that even though the render() will be called twice in this case, the\r\n user won’t see the intermediate state. Use this pattern with caution because it\r\n often causes performance issues...\r\n */\r\n this._isMounted = true;\r\n if (typeof this.props.loadedContainer !== \"undefined\") {\r\n this.setState({\r\n data: this.props.loadedContainer.children,\r\n sortDefinition: [{ field: \"displayName\", dir: \"asc\" }],\r\n });\r\n\r\n if (isRecycleBin(this.props.loadedContainer)) {\r\n this.setState({\r\n inRecycleBin: true,\r\n });\r\n } else {\r\n this.setState({\r\n inRecycleBin: false,\r\n });\r\n }\r\n }\r\n\r\n // Add a click listener to grab the mouse X and Y coordinates\r\n document.addEventListener(\"click\", this.handleMousemove);\r\n\r\n // Add a click listener to determine if the popup is allowed to close on the disabled \"Open in App menuitem\"\r\n document.addEventListener(\"click\", () => {\r\n if (this.state.itemPopupOpen) {\r\n var popup = document.getElementById(\"contextPopupMenuId\");\r\n if (popup !== null) {\r\n var left = popup.offsetLeft + document.body.scrollLeft;\r\n var top = popup.offsetTop + document.body.scrollTop;\r\n var width = popup.offsetWidth;\r\n var height = popup.offsetHeight;\r\n var right = left + width;\r\n var bottom = top + height;\r\n\r\n if (\r\n this._mouseCoordinates.x < left ||\r\n this._mouseCoordinates.x > right ||\r\n this._mouseCoordinates.y < top ||\r\n this._mouseCoordinates.y > bottom\r\n ) {\r\n this.resetItemPopup();\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n public componentDidUpdate(prevProps: IDriveItemsListProps) {\r\n if (this.props.loadedContainer === undefined) return;\r\n\r\n if (this.props.loadedContainer !== prevProps.loadedContainer) {\r\n this.setState({\r\n data: this.props.loadedContainer.children.map((item) => {\r\n item.isSelected = false;\r\n return item;\r\n }),\r\n sortDefinition: [{ field: \"name\", dir: \"asc\" }],\r\n });\r\n\r\n if (isRecycleBin(this.props.loadedContainer)) {\r\n this.setState({\r\n inRecycleBin: true,\r\n });\r\n } else {\r\n this.setState({\r\n inRecycleBin: false,\r\n });\r\n }\r\n }\r\n }\r\n\r\n public componentWillUnmount() {\r\n this._isMounted = false;\r\n document.removeEventListener(\"click\", this.handleMousemove, true);\r\n }\r\n\r\n resetItemPopup() {\r\n this.setState({\r\n itemPopupOpen: false,\r\n disableMenuItemOpenInApp: false,\r\n uriPrefix: \"\",\r\n });\r\n }\r\n\r\n handleMousemove = (event: any) => {\r\n if (this._isMounted) {\r\n this._mouseCoordinates = {\r\n x: event.x,\r\n y: event.y,\r\n };\r\n }\r\n };\r\n\r\n handleUploadDragEnter = (event: React.DragEvent): void => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (\r\n event.dataTransfer.items &&\r\n event.dataTransfer.items.length > 0 &&\r\n event.dataTransfer.items[0].kind === \"file\"\r\n ) {\r\n this.setState({ dragging: true, uploading: false });\r\n }\r\n };\r\n\r\n handleUploadDragLeave = (event: React.DragEvent): void => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n this.setState({ dragging: false, uploading: false });\r\n };\r\n\r\n handleUploadDragOver = (event: React.DragEvent): void => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n };\r\n\r\n private getSkeletonInstance(parentItem: IBaseItem): IBaseItem {\r\n return {\r\n id: \"\",\r\n referenceId: Guid.newGuid(),\r\n displayName: \"\",\r\n parentItem: parentItem,\r\n rootScope: parentItem.rootScope,\r\n children: [],\r\n isAdding: true,\r\n isUpdating: false,\r\n isDeleting: false,\r\n isExpanded: false,\r\n isDirty: true,\r\n indexPath: [],\r\n isLoaded: false,\r\n isLoading: false,\r\n isContainer: false,\r\n isMoving: false,\r\n } as IBaseItem;\r\n }\r\n\r\n private getDummyItems(rawFiles: FileList): IBaseItem[] {\r\n let newItems: IBaseItem[] = [];\r\n\r\n if (this.props.loadedContainer !== undefined) {\r\n for (let index = 0; index < rawFiles.length; index++) {\r\n let dummyItem: IBaseItem = this.getSkeletonInstance(\r\n this.props.loadedContainer\r\n );\r\n\r\n newItems.push({\r\n ...dummyItem,\r\n name: rawFiles[index].name,\r\n displayName: rawFiles[index].name,\r\n isContainer: false,\r\n size: rawFiles[index].size,\r\n } as IDriveItem);\r\n }\r\n }\r\n\r\n return newItems;\r\n }\r\n\r\n private handleUploadDrop = (event: React.DragEvent): void => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n event.persist();\r\n\r\n let isFolderIncluded: boolean = false;\r\n\r\n const items: DataTransferItemList = event.dataTransfer.items;\r\n\r\n // Several pre-checks (files-only and not files bigger than 4294967295 bytes)\r\n for (let index = 0; index < items.length; index++) {\r\n var entry: any = items[index].webkitGetAsEntry();\r\n if (entry.isFile) {\r\n } else if (entry.isDirectory) {\r\n isFolderIncluded = true;\r\n break;\r\n }\r\n }\r\n\r\n if (isFolderIncluded) {\r\n this.props.showMessageBar(\r\n this.props.i18n.folderInDragnDropSelectionMessage,\r\n MessageBarType.Warning\r\n );\r\n\r\n // Render to remove the drag and drop area.\r\n this.setState({ dragging: false });\r\n\r\n return;\r\n }\r\n\r\n let isFileTooBig: boolean = false;\r\n const files: FileList = event.dataTransfer.files;\r\n\r\n for (let index = 0; index < files.length; index++) {\r\n if (files[index].size > 4294967295) {\r\n isFileTooBig = true;\r\n break;\r\n }\r\n }\r\n\r\n if (isFileTooBig) {\r\n this.props.showMessageBar(\r\n this.props.i18n.fileTooLargeMessage,\r\n MessageBarType.Warning\r\n );\r\n\r\n // Render to remove the drag and drop area.\r\n this.setState({ dragging: false });\r\n\r\n return;\r\n }\r\n\r\n // Fill the sorted files list.\r\n let sortedFiles: any[] = [];\r\n for (let index = 0; index < files.length; index++) {\r\n sortedFiles.push(files[index]);\r\n }\r\n\r\n // Sort on name.\r\n sortedFiles.sort((a: File, b: File) => (a.name > b.name ? 1 : -1));\r\n\r\n if (\r\n sortedFiles &&\r\n sortedFiles.length > 0 &&\r\n this.props.loadedContainer !== undefined\r\n ) {\r\n this.setState(\r\n {\r\n dragging: false,\r\n uploading: true,\r\n },\r\n () => {\r\n let dummyItems: IBaseItem[] = this.getDummyItems(\r\n sortedFiles as unknown as FileList\r\n );\r\n\r\n // First trigger the event to create dummy items representing the new-files-to-be\r\n this.props.itemsCreatingEvent(dummyItems).then(async () => {\r\n if (this.props.loadedContainer !== undefined) {\r\n for (let index = 0; index < sortedFiles.length; index++) {\r\n // Now upload the actual file and get the returned IDriveItem instance\r\n await this.UploadDriveItem(\r\n sortedFiles[index],\r\n this.props.loadedContainer,\r\n dummyItems[index],\r\n dummyItems[index].referenceId\r\n ).catch(() => {\r\n this.props.DummyFileRemoveEvent(\r\n dummyItems[index],\r\n ModificationType.ADD\r\n );\r\n });\r\n }\r\n }\r\n });\r\n\r\n event.dataTransfer.clearData();\r\n }\r\n );\r\n }\r\n };\r\n\r\n /**\r\n * Handles uploading of files representing IDriveItem instances.\r\n * @param rawFile File instance representing the new file.\r\n * @param parentContainer IBaseItem instance representing the container where the new file will be uploaded to.\r\n * @param referenceId String containing a reference id used for identifying the new file while performing the upload action.\r\n */\r\n private UploadDriveItem(\r\n rawFile: File,\r\n parentContainer: IBaseItem,\r\n dummyItem: IBaseItem,\r\n referenceId?: string\r\n ): Promise {\r\n return new Promise((resolve, reject) => {\r\n let formData = new FormData();\r\n formData.set(\"file\", rawFile);\r\n\r\n formData.append(\r\n \"DriveId\",\r\n isDriveItem(parentContainer)\r\n ? (parentContainer as IDriveItem).driveId\r\n : parentContainer.id\r\n );\r\n formData.append(\"ParentId\", parentContainer.id);\r\n\r\n if (parentContainer.path !== undefined)\r\n formData.append(\"FolderPath\", parentContainer.path);\r\n if (referenceId !== undefined)\r\n formData.append(\"ReferenceId\", referenceId);\r\n\r\n if (parentContainer.rootScope === HierarchialDataScope.OneDrives)\r\n formData.append(\"DriveIsOneDrive\", \"true\");\r\n else formData.append(\"DriveIsOneDrive\", \"false\");\r\n\r\n formData.append(\"Overwrite\", \"false\");\r\n\r\n this.props\r\n .itemCreationEvent(formData)\r\n .then((result: IDriveItem) => {\r\n this.props.itemCreatedEvent({\r\n ...result,\r\n displayName: result.name,\r\n rootScope: parentContainer.rootScope,\r\n isAdding: false,\r\n isContainer: false,\r\n path: result[\"folderPath\"],\r\n parentItem: parentContainer,\r\n });\r\n resolve(result);\r\n })\r\n .catch(() => {\r\n reject();\r\n });\r\n });\r\n }\r\n\r\n private resolveDriveItemIcon(driveItem: IDriveItem): string {\r\n const fileExtension = !driveItem.isContainer\r\n ? driveItem.name.substring(\r\n driveItem.name.lastIndexOf(\".\") + 1,\r\n driveItem.name.length\r\n ) || driveItem.name\r\n : \"\";\r\n const iconName: string = !driveItem.isContainer\r\n ? this._iconHelper._getFileTypeIconNameFromExtension(fileExtension)\r\n : \"folder\";\r\n const iconSize: number = 16; // supported types [16, 20, 32, 40, 48, 64, 96]\r\n return `https://spoprod-a.akamaihd.net/files/fabric/assets/item-types/${iconSize}/${iconName}.png`;\r\n }\r\n\r\n onFolderClick = (item: IBaseItem) => {\r\n if (typeof this.props.itemClickedEvent !== \"undefined\") {\r\n if (!this.state.inRecycleBin) {\r\n this.props.itemClickedEvent(item);\r\n }\r\n }\r\n };\r\n\r\n private resolveNameFieldClassName(dataItem: any): string {\r\n let item: IBaseItem = dataItem as IBaseItem;\r\n let classList: string[] = [];\r\n\r\n if (item.isContainer) {\r\n classList.push(\"droptarget\");\r\n } else {\r\n classList.push(\"dragtarget\");\r\n }\r\n\r\n if (item.isDeleting) {\r\n classList.push(\"is-deleting\");\r\n }\r\n\r\n if (item.isUpdating) {\r\n classList.push(\"is-updating\");\r\n }\r\n\r\n if (item.isAdding) {\r\n classList.push(\"is-adding\");\r\n }\r\n\r\n if (item.isMoving) {\r\n classList.push(\"is-moving\");\r\n }\r\n\r\n return classList.join(\" \");\r\n }\r\n\r\n private buildNameColumn(props: React.PropsWithChildren) {\r\n let item: IBaseItem = props.dataItem as IBaseItem;\r\n\r\n // When the item has a modication running (adding, deleting, updating or moving) we render a non-clickable item\r\n if (item.isAdding || item.isDeleting || item.isUpdating || item.isMoving) {\r\n return (\r\n \r\n \r\n \r\n {props.dataItem.displayName}\r\n \r\n \r\n );\r\n } else if (item.isContainer) {\r\n return (\r\n \r\n \r\n \r\n this.onFolderClick(props.dataItem)}\r\n title={`Open \"${props.dataItem.name}\" ${this.props.i18n.folderPostFixTitle}.`}\r\n draggable={!this.state.inRecycleBin}\r\n onDragStart={(event: React.DragEvent) =>\r\n this.onDragStartHandler(event, props.dataItem)\r\n }\r\n onDrop={(event: React.DragEvent) =>\r\n this.onDropHandler(event, props.dataItem)\r\n }\r\n onDragEnter={(event: React.DragEvent) =>\r\n this.onDragEnterHandler(event)\r\n }\r\n onDragLeave={(event: React.DragEvent) =>\r\n this.onDragLeaveHandler(event)\r\n }\r\n onDragOver={(event: React.DragEvent) =>\r\n this.onDragOverHandler(event)\r\n }\r\n >\r\n {props.dataItem.displayName}\r\n \r\n \r\n \r\n );\r\n } else {\r\n return (\r\n \r\n \r\n \r\n this.onDragStartHandler(event, props.dataItem)\r\n }\r\n onDragOver={(event: React.DragEvent) =>\r\n this.onDragOverHandler(event)\r\n }\r\n >\r\n {props.dataItem.displayName}\r\n \r\n \r\n );\r\n }\r\n }\r\n\r\n // event on dragtarget\r\n onDragStartHandler = (event: React.DragEvent, item: IBaseItem): void => {\r\n if (event.dataTransfer === null) {\r\n return;\r\n }\r\n\r\n event.dataTransfer.setData(\"sourceItem\", JSON.stringify(item));\r\n };\r\n\r\n // event on droptarget\r\n onDropHandler(event: React.DragEvent, item: IBaseItem): void {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n if (event.dataTransfer === null) {\r\n return;\r\n }\r\n // prevent file upload\r\n if (event.dataTransfer.files && event.dataTransfer.files.length > 0) {\r\n return;\r\n }\r\n let sourceItem: IDriveItem = JSON.parse(\r\n event.dataTransfer.getData(\"sourceItem\")\r\n );\r\n // Prevent driveItem to be moved to self\r\n if (\r\n sourceItem.driveId === (item as IDriveItem).driveId &&\r\n sourceItem.id === item.id\r\n ) {\r\n return;\r\n }\r\n if (typeof this.props.itemDroppedEvent !== \"undefined\") {\r\n let array: IBaseItem[] = [sourceItem];\r\n this.props.itemDroppedEvent(array, item);\r\n }\r\n }\r\n\r\n // event on droptarget\r\n onDragEnterHandler = (event: React.DragEvent) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n let target = event.target as HTMLElement;\r\n\r\n if (\r\n target.classList.contains(\"droptarget\") &&\r\n target.parentElement !== null\r\n ) {\r\n target.parentElement.style.border = \"1px dotted black\";\r\n }\r\n };\r\n\r\n // event on droptarget\r\n onDragLeaveHandler = (event: React.DragEvent) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n if (typeof event !== \"undefined\") {\r\n let target = event.target as HTMLElement;\r\n\r\n if (\r\n target.classList.contains(\"droptarget\") &&\r\n target.parentElement !== null\r\n ) {\r\n target.parentElement.style.border = \"1px solid rgba(0,0,0,0)\";\r\n }\r\n }\r\n };\r\n\r\n // event on droptarget\r\n onDragOverHandler = (event: React.DragEvent) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n // if is file, change\r\n let target = event.target as HTMLElement;\r\n if (target.classList.contains(\"droptarget\") === false) {\r\n event.dataTransfer.dropEffect = \"none\";\r\n }\r\n };\r\n\r\n private buildFileSizeColumn(props: React.PropsWithChildren) {\r\n if (props.dataItem.isContainer) {\r\n let count = props.dataItem.folderChildCount;\r\n\r\n if (count === undefined) {\r\n count = 0;\r\n }\r\n\r\n return {count === 1 ? count + \" item\" : count + \" items\"};\r\n } else {\r\n return {this.formatBytes(props.dataItem.size)};\r\n }\r\n }\r\n\r\n private buildFileDeletedByColumn(\r\n props: React.PropsWithChildren\r\n ) {\r\n return {props.dataItem.deletedBy};\r\n }\r\n\r\n private buildFileDeletedOnColumn(\r\n props: React.PropsWithChildren\r\n ) {\r\n const dateLM: Date = props.dataItem.deletedDate;\r\n\r\n // Include all locales.\r\n require(\"moment/min/locales.min\");\r\n\r\n // Set the locale.\r\n Moment.locale(this.props.language);\r\n\r\n const dateUTC: Date = Moment.utc(dateLM).toDate();\r\n let dateLocalized: string = Moment(dateUTC).local().format(\"L\");\r\n dateLocalized += \" \";\r\n dateLocalized += Moment(dateUTC).local().format(\"LT\");\r\n\r\n return {dateLocalized};\r\n }\r\n\r\n private formatBytes(bytes: number, decimals = 2) {\r\n if (bytes === 0) return \"0 bytes\";\r\n\r\n const k = 1024;\r\n let dm = decimals < 0 ? 0 : decimals;\r\n const sizes = [\"bytes\", \"kB\", \"MB\", \"GB\", \"TB\", \"PB\", \"EB\", \"ZB\", \"YB\"];\r\n const i = Math.floor(Math.log(bytes) / Math.log(k));\r\n const pow = Math.pow(k, i);\r\n let size = bytes / pow;\r\n let uom = sizes[i];\r\n\r\n // Check when the size is in kB.\r\n if (sizes[i] === \"kB\") {\r\n // When in kB and the size is larger than 1000 convert to MB.\r\n if (size > 1000) {\r\n dm = 2;\r\n size = size / k;\r\n uom = \"MB\";\r\n } else {\r\n // When in kB the decimal is 1.\r\n dm = 1;\r\n }\r\n }\r\n\r\n // Remove decimals from bytes\r\n if (sizes[i] === \"bytes\") {\r\n dm = 0;\r\n }\r\n\r\n return size.toFixed(dm).toString() + \" \" + uom;\r\n }\r\n\r\n private buildDateTimeColumn(props: React.PropsWithChildren) {\r\n const dateLM: Date = props.dataItem.lastModified; // Last modified datetime in ISO format\r\n\r\n // Include all locales.\r\n require(\"moment/min/locales.min\");\r\n\r\n // Set the locale.\r\n Moment.locale(this.props.language);\r\n\r\n const dateUTC: Date = Moment.utc(dateLM).toDate();\r\n let dateLocalized: string = Moment(dateUTC).local().format(\"L\");\r\n dateLocalized += \" \";\r\n dateLocalized += Moment(dateUTC).local().format(\"LT\");\r\n\r\n return {dateLocalized};\r\n }\r\n\r\n rowRender = (\r\n row: React.ReactElement,\r\n props: GridRowProps\r\n ) => {\r\n const rowProps = {\r\n ...row.props,\r\n onContextMenu: (e: any) => {\r\n e.preventDefault();\r\n this.ItemOnContextMenuHandler(e, props.dataItem);\r\n },\r\n };\r\n\r\n return React.cloneElement(row, rowProps, row.props.children);\r\n };\r\n\r\n ItemOnContextMenuHandler = (e: any, item: IDriveItem) => {\r\n if (this.props.loadedContainer !== undefined) {\r\n this.item = item;\r\n\r\n this.dataItemIndex = this.props.loadedContainer.children.findIndex(\r\n (p) => p.id === (this.item === undefined ? undefined : this.item.id)\r\n );\r\n\r\n this.offset = { left: e.clientX, top: window.scrollY + e.clientY };\r\n\r\n let disableMenuItemOpenInApp: boolean = false;\r\n\r\n if (this.item.isFolder) {\r\n disableMenuItemOpenInApp = true;\r\n\r\n this.setState({\r\n itemPopupOpen: !this.state.itemPopupOpen,\r\n disableMenuItemOpenInApp: disableMenuItemOpenInApp,\r\n });\r\n } else {\r\n this.getUriPrefixForOpenInApp(item).then((uriPrefix: string) => {\r\n if (uriPrefix === \"\") disableMenuItemOpenInApp = true;\r\n\r\n this.setState({\r\n itemPopupOpen: !this.state.itemPopupOpen,\r\n uriPrefix: uriPrefix,\r\n disableMenuItemOpenInApp: disableMenuItemOpenInApp,\r\n });\r\n });\r\n }\r\n }\r\n };\r\n\r\n getUriPrefixForOpenInApp(item: IDriveItem): Promise {\r\n const name: string = item.name;\r\n const index: number = name.lastIndexOf(\".\");\r\n const fileType: string = name.substring(index + 1);\r\n let uriPrefix: string = \"\";\r\n\r\n return new Promise((resolve) => {\r\n let promise: Promise;\r\n\r\n switch (fileType) {\r\n case \"mdb\":\r\n case \"accdb\":\r\n uriPrefix = \"ms-access\";\r\n break;\r\n case \"xls\":\r\n case \"xlsx\":\r\n case \"xlsm\":\r\n case \"xlsb\":\r\n case \"csv\":\r\n uriPrefix = \"ms-excel\";\r\n break;\r\n case \"ppt\":\r\n case \"pptx\":\r\n uriPrefix = \"ms-powerpoint\";\r\n break;\r\n case \"mpp\":\r\n uriPrefix = \"ms-project\";\r\n break;\r\n case \"pub\":\r\n uriPrefix = \"ms-publisher\";\r\n break;\r\n case \"vsd\":\r\n case \"vsdx\":\r\n uriPrefix = \"ms-visio\";\r\n break;\r\n case \"doc\":\r\n case \"docx\":\r\n uriPrefix = \"ms-word\";\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n promise = Promise.resolve(uriPrefix);\r\n\r\n resolve(promise);\r\n });\r\n }\r\n\r\n handleItemRemove = () => {\r\n if (\r\n this.dataItemIndex === undefined ||\r\n this.props.loadedContainer === undefined\r\n ) {\r\n return;\r\n }\r\n let item: IBaseItem =\r\n this.props.loadedContainer.children[this.dataItemIndex];\r\n\r\n if (this.props.itemRemoveEvent) {\r\n this.props.itemRemoveEvent([item]);\r\n }\r\n };\r\n\r\n handleItemRestore = () => {\r\n if (\r\n this.dataItemIndex === undefined ||\r\n this.props.loadedContainer === undefined\r\n ) {\r\n return;\r\n }\r\n\r\n let item = this.props.loadedContainer.children[this.dataItemIndex];\r\n\r\n if (this.props.itemRestoreEvent !== undefined) {\r\n this.props.itemRestoreEvent(item);\r\n }\r\n };\r\n\r\n handleItemDelete = () => {\r\n if (\r\n this.dataItemIndex === undefined ||\r\n this.props.loadedContainer === undefined\r\n ) {\r\n return;\r\n }\r\n\r\n let item = this.props.loadedContainer.children[this.dataItemIndex];\r\n\r\n if (this.props.itemDeleteEvent !== undefined) {\r\n this.props.itemDeleteEvent(item);\r\n }\r\n };\r\n\r\n handleItemMove = () => {\r\n if (\r\n this.dataItemIndex === undefined ||\r\n this.props.loadedContainer === undefined\r\n ) {\r\n return;\r\n }\r\n\r\n let items: IBaseItem[] = [];\r\n items[0] = this.props.loadedContainer.children[this.dataItemIndex];\r\n\r\n if (this.props.itemMoveEvent !== undefined) {\r\n this.props.itemMoveEvent(items);\r\n }\r\n };\r\n\r\n handleItemCopy = () => {\r\n if (\r\n this.dataItemIndex === undefined ||\r\n this.props.loadedContainer === undefined\r\n ) {\r\n return;\r\n }\r\n\r\n let items: IBaseItem[] = [];\r\n items[0] = this.props.loadedContainer.children[this.dataItemIndex];\r\n\r\n if (this.props.itemCopyEvent !== undefined) {\r\n this.props.itemCopyEvent(items);\r\n }\r\n };\r\n\r\n handleItemRename = () => {\r\n if (\r\n this.dataItemIndex === undefined ||\r\n this.props.loadedContainer === undefined\r\n ) {\r\n return;\r\n }\r\n let item = this.props.loadedContainer.children[this.dataItemIndex];\r\n this.setState({ showRenameDialog: true, selectedItem: item });\r\n };\r\n\r\n renameItem = (newName: string) => {\r\n if (\r\n this.dataItemIndex === undefined ||\r\n this.props.loadedContainer === undefined\r\n ) {\r\n return;\r\n }\r\n let item: IBaseItem =\r\n this.props.loadedContainer.children[this.dataItemIndex];\r\n\r\n if (this.props.itemRenameEvent !== undefined) {\r\n this.props.itemRenameEvent(item, newName);\r\n }\r\n };\r\n\r\n handleItemDownload = () => {\r\n if (\r\n this.dataItemIndex === undefined ||\r\n this.props.loadedContainer === undefined\r\n ) {\r\n return;\r\n }\r\n let item: IDriveItem = this.props.loadedContainer.children[\r\n this.dataItemIndex\r\n ] as IDriveItem;\r\n // Do not allow to download folder.\r\n // To do: remove/hide download button from folder context menu\r\n if (item.isContainer) {\r\n this.props.showMessageBar(\r\n this.props.i18n.noDownloadAvailableMessage,\r\n MessageBarType.Warning\r\n );\r\n return;\r\n }\r\n\r\n // Use a hidden iframe to download the file. Hereby we get the best browser compatibility (including IE*)\r\n var hiddenIFrameID = \"hiddenDownloader\",\r\n iframe: HTMLIFrameElement = document.getElementById(\r\n hiddenIFrameID\r\n ) as HTMLIFrameElement;\r\n if (iframe === null) {\r\n iframe = document.createElement(\"iframe\");\r\n iframe.id = hiddenIFrameID;\r\n iframe.style.display = \"none\";\r\n document.body.appendChild(iframe);\r\n }\r\n iframe.src = item.downloadUrl;\r\n };\r\n\r\n handleItemOpenInBrowser = () => {\r\n if (\r\n this.dataItemIndex === undefined ||\r\n this.props.loadedContainer === undefined\r\n ) {\r\n return;\r\n }\r\n let item: IDriveItem = this.props.loadedContainer.children[\r\n this.dataItemIndex\r\n ] as IDriveItem;\r\n\r\n window.open(item.webUrl, \"_blank\");\r\n };\r\n\r\n handleItemOpenInApp = () => {\r\n if (\r\n this.dataItemIndex === undefined ||\r\n this.props.loadedContainer === undefined\r\n ) {\r\n return;\r\n }\r\n let item: IDriveItem = this.props.loadedContainer.children[\r\n this.dataItemIndex\r\n ] as IDriveItem;\r\n\r\n let webUrl: string;\r\n const { uriPrefix } = this.state;\r\n let uriPrefixFull: string = uriPrefix;\r\n\r\n const loadedContainer: ISite = this.props.loadedContainer as ISite;\r\n if (loadedContainer.webUrl !== undefined) {\r\n // Now we are in a subfolder\r\n webUrl = loadedContainer.webUrl;\r\n } else {\r\n // Now we are in the root of the library\r\n // driveUrl example contains: \"https://iexpertsnl.sharepoint.com/teams/DevColin/Algemeen\"\r\n const drive: IDrive = this.props.loadedContainer as IDrive;\r\n webUrl = drive.driveUrl;\r\n }\r\n\r\n // Open-for-edit-cmd = \"ofe|u|\" document-uri\r\n uriPrefixFull += \":ofe|u|\";\r\n\r\n if (!webUrl.endsWith(\"/\")) webUrl += \"/\";\r\n\r\n const uri: string = uriPrefixFull.concat(webUrl, item.name);\r\n\r\n // Check if the protocol exist and open the uri.\r\n customProtocolCheck(\r\n uri,\r\n () => {\r\n const appName: string = uriPrefix;\r\n let message: string = this.props.i18n.appNotAvailableMessage;\r\n const fullAppName = this.getAppFullName(appName);\r\n\r\n message = message\r\n .replace(\"#appName#\", `${fullAppName}`)\r\n .replace(\"#fileName#\", `${item.name}`)\r\n .replace(\r\n \"#app#\",\r\n `${fullAppName.substr(fullAppName.indexOf(\" \"))}`\r\n );\r\n\r\n let messageJSXFormed: JSX.Element = (\r\n \r\n );\r\n\r\n this.props.showMessageBarJSXFormed(\r\n messageJSXFormed,\r\n MessageBarType.Error\r\n );\r\n },\r\n () => {\r\n console.log(\r\n `Custom protocol for ${uriPrefix} found and opened the file successfully.`\r\n );\r\n },\r\n 5000\r\n );\r\n };\r\n\r\n getAppFullName(appName: string): string {\r\n let appFullName: string;\r\n switch (appName) {\r\n case \"ms-access\":\r\n appFullName = \"Microsoft Access\";\r\n break;\r\n case \"ms-excel\":\r\n appFullName = \"Microsoft Excel\";\r\n break;\r\n case \"ms-powerpoint\":\r\n appFullName = \"Microsoft Powerpoint\";\r\n break;\r\n case \"ms-project\":\r\n appFullName = \"Microsoft Project\";\r\n break;\r\n case \"ms-publisher\":\r\n appFullName = \"Microsoft Publisher\";\r\n break;\r\n case \"ms-visio\":\r\n appFullName = \"Microsoft Visio\";\r\n break;\r\n case \"ms-word\":\r\n appFullName = \"Microsoft Word\";\r\n break;\r\n default:\r\n appFullName = appName;\r\n break;\r\n }\r\n return appFullName;\r\n }\r\n\r\n handleItemShare = () => {\r\n if (\r\n this.dataItemIndex === undefined ||\r\n this.props.loadedContainer === undefined\r\n ) {\r\n return;\r\n }\r\n\r\n let item: IDriveItem = this.props.loadedContainer.children[\r\n this.dataItemIndex\r\n ] as IDriveItem;\r\n\r\n const shareContext: IShareDialogContext = { item: item };\r\n this.setState({ shareDialogContext: shareContext });\r\n };\r\n\r\n handleItemContextMenuOnSelect = (e: any) => {\r\n this.props.closeMessageBar();\r\n\r\n switch (e.item.data) {\r\n case \"Restore\":\r\n this.handleItemRestore();\r\n break;\r\n case \"Delete\":\r\n this.handleItemDelete();\r\n break;\r\n case \"OpenInBrowser\":\r\n this.handleItemOpenInBrowser();\r\n break;\r\n case \"OpenInApp\":\r\n this.handleItemOpenInApp();\r\n break;\r\n case \"Rename\":\r\n this.handleItemRename();\r\n break;\r\n case \"Copy\":\r\n this.handleItemCopy();\r\n break;\r\n case \"Download\":\r\n this.handleItemDownload();\r\n break;\r\n case \"Remove\":\r\n this.handleItemRemove();\r\n break;\r\n case \"Move\":\r\n this.handleItemMove();\r\n break;\r\n case \"Share\":\r\n this.handleItemShare();\r\n break;\r\n default:\r\n }\r\n this.resetItemPopup();\r\n };\r\n\r\n customSort = (\r\n data: IBaseItem[],\r\n sortDefinitions: SortDescriptor[]\r\n ): any[] => {\r\n if (sortDefinitions.length === 0) {\r\n return data;\r\n }\r\n\r\n const folders: IBaseItem[] = data.filter((item: IBaseItem) => {\r\n return item.isContainer;\r\n });\r\n\r\n const files: IBaseItem[] = data.filter((item: IBaseItem) => {\r\n return !item.isContainer;\r\n });\r\n\r\n // Depending on the sort direction, we merge the two sorted arrays differently because we don't want to mix the files and folders together\r\n if (sortDefinitions[0].dir === \"asc\") {\r\n return [\r\n ...orderBy(folders, sortDefinitions),\r\n ...orderBy(files, sortDefinitions),\r\n ];\r\n } else {\r\n return [\r\n ...orderBy(files, sortDefinitions),\r\n ...orderBy(folders, sortDefinitions),\r\n ];\r\n }\r\n };\r\n\r\n handleCloseRenameDialog = () => {\r\n this.setState({ showRenameDialog: false });\r\n };\r\n\r\n handleSaveRenameDialog = (newName: string) => {\r\n this.handleCloseRenameDialog();\r\n this.renameItem(newName);\r\n };\r\n\r\n handleCloseMessageDialog() {\r\n this.setState({ messageDialogContext: undefined });\r\n }\r\n\r\n handleCloseShareDialog() {\r\n this.setState({ shareDialogContext: undefined });\r\n }\r\n\r\n handleConfirmMessageDialog(item: IBaseItem, actionType: ActionType) {\r\n switch (actionType) {\r\n case ActionType.Add:\r\n console.log(\"can be improved with add later\");\r\n break;\r\n case ActionType.Update:\r\n console.log(\"can be improved with update later\");\r\n break;\r\n default:\r\n break;\r\n }\r\n this.handleCloseMessageDialog();\r\n }\r\n\r\n handleHeaderSelectionChange = (e: any) => {\r\n const checked = e.syntheticEvent.target.checked;\r\n\r\n const data = this.state.data.map((item) => {\r\n item.isSelected = checked;\r\n return item;\r\n });\r\n\r\n this.setState({ data: data, itemsSelected: checked });\r\n if (this.props.itemsSelectedEvent !== undefined) {\r\n this.props.itemsSelectedEvent(checked);\r\n }\r\n };\r\n\r\n handleSelectionChange = (e: any) => {\r\n const data = this.state.data.map((item) => {\r\n if (item.id === e.dataItem.id) {\r\n item.isSelected = !e.dataItem.isSelected;\r\n }\r\n return item;\r\n });\r\n\r\n if (this.props.itemsSelectedEvent !== undefined) {\r\n const selected = data.some((element: any) => element.isSelected === true);\r\n\r\n this.props.itemsSelectedEvent(selected);\r\n\r\n this.setState({\r\n data: data,\r\n itemsSelected: selected,\r\n });\r\n } else {\r\n this.setState({ data: data });\r\n }\r\n };\r\n\r\n handleCreateShareLink(\r\n item: IDriveItem,\r\n siteOrOneDriveUrl: string,\r\n driveIsOneDrive: boolean\r\n ): Promise {\r\n return this.props.createShareLink(item, siteOrOneDriveUrl, driveIsOneDrive);\r\n }\r\n\r\n private showMessageDialog(\r\n messageDialogType: MessageDialogType,\r\n dialogTitle: string,\r\n message: string,\r\n item: IBaseItem,\r\n actionType: ActionType\r\n ) {\r\n this.setState({\r\n messageDialogContext: {\r\n dialogType: messageDialogType,\r\n dialogTitle: dialogTitle,\r\n message: message,\r\n item: item,\r\n actionType: actionType,\r\n },\r\n });\r\n }\r\n\r\n render() {\r\n // Auto size column widths is not yet supported, so we use default column widths that are resizable.\r\n // https://feedback.telerik.com/kendo-react-ui/1360884-grids-width-auto\r\n\r\n const { disableMenuItemOpenInApp } = this.state;\r\n\r\n return (\r\n \r\n {this.state.dragging && (\r\n \r\n {this.state.uploading && (\r\n \r\n )}\r\n \r\n )}\r\n\r\n {\r\n this.setState({\r\n sortDefinition: e.sort,\r\n });\r\n }}\r\n >\r\n element.isSelected === true\r\n )}\r\n />\r\n this.buildNameColumn(props)}\r\n />\r\n {!this.state.inRecycleBin && (\r\n this.buildFileSizeColumn(props)}\r\n />\r\n )}\r\n {this.state.inRecycleBin && (\r\n {props.dataItem.originalLocation}}\r\n />\r\n )}\r\n {this.state.inRecycleBin && (\r\n this.buildFileDeletedByColumn(props)}\r\n />\r\n )}\r\n {!this.state.inRecycleBin && (\r\n this.buildDateTimeColumn(props)}\r\n />\r\n )}\r\n {this.state.inRecycleBin && (\r\n this.buildFileDeletedOnColumn(props)}\r\n />\r\n )}\r\n \r\n {this.props.i18n.noFilesOrFoldersMessage}\r\n \r\n \r\n {!this.state.dragging && !this.state.itemsSelected && (\r\n \r\n \r\n {this.state.inRecycleBin && (\r\n \r\n )}\r\n {this.state.inRecycleBin && (\r\n \r\n )}\r\n {!this.state.inRecycleBin && (\r\n \r\n )}\r\n {!this.state.inRecycleBin && (\r\n \r\n )}\r\n {!this.state.inRecycleBin && (\r\n \r\n )}\r\n {!this.state.inRecycleBin && (\r\n \r\n )}\r\n {!this.state.inRecycleBin && (\r\n \r\n )}\r\n {!this.state.inRecycleBin && (\r\n \r\n )}\r\n {!this.state.inRecycleBin && (\r\n \r\n )}\r\n {!this.state.inRecycleBin && (\r\n \r\n )}\r\n {!this.state.inRecycleBin && (\r\n \r\n )}\r\n {!this.state.inRecycleBin && (\r\n \r\n )}\r\n \r\n \r\n )}\r\n {!this.state.dragging && this.state.selectedItem && (\r\n \r\n )}\r\n {!this.state.dragging &&\r\n this.state.messageDialogContext !== undefined && (\r\n \r\n )}\r\n {this.state.shareDialogContext !== undefined && (\r\n \r\n )}\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default Localization.translateComponent<\r\n IDriveItemsListProps,\r\n IDriveItemsListState\r\n>(\"DriveItemsList\")(DriveItemsList);\r\n","import * as React from \"react\";\r\nimport {\r\n MessageBar as Message,\r\n MessageBarType as MessageType,\r\n} from \"office-ui-fabric-react/lib/MessageBar\";\r\nimport { Link } from \"office-ui-fabric-react/lib/Link\";\r\nimport { IMessageBarContext } from \"../data/interfaces\";\r\nimport { MessageBarType } from \"../data/enums\";\r\n\r\nexport interface IMessageBarProps {\r\n messageContext?: IMessageBarContext;\r\n onClose?(): void;\r\n}\r\n\r\nclass MessageBar extends React.Component {\r\n private handleClose() {\r\n if (this.props.onClose !== undefined) {\r\n this.props.onClose();\r\n }\r\n }\r\n\r\n render() {\r\n const { messageContext } = this.props;\r\n\r\n let message: JSX.Element;\r\n\r\n if (messageContext === undefined) return null;\r\n else {\r\n let messageType: MessageType | undefined = undefined;\r\n switch (messageContext.type) {\r\n case MessageBarType.Info:\r\n messageType = MessageType.info;\r\n break;\r\n case MessageBarType.Error:\r\n messageType = MessageType.error;\r\n break;\r\n case MessageBarType.Success:\r\n messageType = MessageType.success;\r\n break;\r\n case MessageBarType.Warning:\r\n messageType = MessageType.warning;\r\n break;\r\n default:\r\n messageType = MessageType.info;\r\n break;\r\n }\r\n\r\n if (messageContext.messageJSXFormed)\r\n message = messageContext.messageJSXFormed;\r\n else message = {messageContext.message};\r\n\r\n return (\r\n
    \r\n \r\n {message}\r\n {messageContext.link !== undefined && (\r\n \r\n {messageContext.link.text}\r\n \r\n )}\r\n \r\n
    \r\n );\r\n }\r\n }\r\n}\r\n\r\nexport default MessageBar;\r\n","import * as React from \"react\";\r\nimport {\r\n Breadcrumb,\r\n IBreadcrumbItem\r\n} from \"office-ui-fabric-react/lib/Breadcrumb\";\r\n\r\nexport interface IBreadCrumbNavigationProps {\r\n elements: IBreadCrumbNavigationElement[];\r\n navigationChanged(key: string): void;\r\n}\r\n\r\nexport interface IBreadCrumbNavigationElement {\r\n title: string;\r\n key: string;\r\n static?: boolean;\r\n}\r\n\r\nclass BreadCrumbNavigation extends React.Component<\r\n IBreadCrumbNavigationProps,\r\n { elements: IBreadCrumbNavigationElement[] }\r\n> {\r\n /**\r\n * Constructor\r\n */\r\n constructor(props: IBreadCrumbNavigationProps) {\r\n super(props, {});\r\n\r\n this.state = {\r\n elements: this.props.elements\r\n };\r\n }\r\n\r\n public componentDidUpdate(prevProps: IBreadCrumbNavigationProps) {\r\n if (this.props.elements !== prevProps.elements) {\r\n this.setState({\r\n elements: this.props.elements\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Event called when the user clicks any of the rendered breadcrumb items.\r\n */\r\n private _onBreadcrumbItemClicked = (\r\n element: IBreadCrumbNavigationElement\r\n ): void => {\r\n if (typeof element.static === \"undefined\" || !element.static) {\r\n this.props.navigationChanged(element.key);\r\n }\r\n };\r\n\r\n /**\r\n * Render()\r\n */\r\n render() {\r\n let items: IBreadcrumbItem[] = [];\r\n\r\n if (this.state.elements !== null) {\r\n items = this.state.elements.map(\r\n (element: IBreadCrumbNavigationElement) => {\r\n if(element.key == undefined){\r\n element.key = \"recyclebin\";\r\n }\r\n let item: IBreadcrumbItem = {\r\n text: element.title,\r\n key: element.key.toString() \r\n };\r\n\r\n // Static breadcrumb element should not have a onClick callback\r\n if (typeof element.static === \"undefined\" || !element.static) {\r\n item = {\r\n ...item,\r\n onClick: this._onBreadcrumbItemClicked.bind(this, element)\r\n };\r\n }\r\n\r\n return item;\r\n }\r\n );\r\n }\r\n\r\n return (\r\n \r\n {this.props.children}\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default BreadCrumbNavigation;\r\n","import * as React from \"react\";\r\nimport { Panel, PanelType } from \"office-ui-fabric-react/lib/Panel\";\r\nimport BreadCrumbNavigation, {\r\n IBreadCrumbNavigationElement\r\n} from \"./BreadCrumbNavigation\";\r\nimport { Fabric } from \"office-ui-fabric-react\";\r\nimport * as Localization from \"./Translate\";\r\nimport { ITranslationProps } from \"../data/interfaces\";\r\n\r\nexport interface IBasePanelProps extends ITranslationProps {\r\n headerText?: string;\r\n subText?: string;\r\n showPanel: boolean;\r\n\r\n breadcrumb?: {\r\n enable: boolean;\r\n items: IBreadCrumbNavigationElement[];\r\n };\r\n\r\n onDismiss(): void;\r\n breadcrumbNavigationChanged(key: string): void;\r\n}\r\n\r\nclass BasePanel extends React.Component {\r\n private handleDismiss() {\r\n this.props.onDismiss();\r\n }\r\n\r\n private onBreadcrumbNavigationChanged(key: string): void {\r\n this.props.breadcrumbNavigationChanged(key);\r\n }\r\n\r\n private onRenderHeader = (props: any, defaultRenderer: any): JSX.Element => {\r\n return (\r\n
    \r\n {this.props.breadcrumb === undefined ||\r\n (!this.props.breadcrumb.enable && defaultRenderer(props))}\r\n\r\n {this.props.breadcrumb !== undefined &&\r\n this.props.breadcrumb.enable && (\r\n \r\n )}\r\n
    \r\n );\r\n };\r\n\r\n render() {\r\n return (\r\n \r\n \r\n {this.props.subText !== undefined &&
    {this.props.subText}
    }\r\n
    {this.props.children}
    \r\n \r\n
    \r\n );\r\n }\r\n}\r\n\r\nexport default Localization.translateComponent(\r\n \"BasePanel\"\r\n)(BasePanel);\r\n","import * as React from \"react\";\r\nimport { ActionButton, Icon } from \"office-ui-fabric-react\";\r\n\r\nexport interface IActionButtonListProps {\r\n items: IActionButtonListItem[];\r\n actionButtonItemClickedHandler?(selectedItem: T): void;\r\n iconName?: string;\r\n title?: string;\r\n className?: string;\r\n classNameButtonIconColor: string;\r\n}\r\n\r\nexport interface IActionButtonListItem {\r\n label: string;\r\n id: string;\r\n instance: T;\r\n iconName: string;\r\n}\r\n\r\nclass ActionButtonList extends React.Component<\r\n IActionButtonListProps,\r\n {}\r\n> {\r\n constructor(props: IActionButtonListProps) {\r\n super(props);\r\n\r\n this.state = {\r\n items: this.props.items,\r\n selectedItem: undefined\r\n };\r\n }\r\n\r\n private onItemActionClicked(item: IActionButtonListItem): void {\r\n if (this.props.actionButtonItemClickedHandler !== undefined) {\r\n this.props.actionButtonItemClickedHandler(item.instance as T);\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n {this.props.title !== \"\" && (\r\n
    \r\n {this.props.iconName !== undefined && (\r\n \r\n )}\r\n {this.props.title !== undefined && {this.props.title}}\r\n
    \r\n )}\r\n \r\n {this.props.items.map(item => (\r\n
  • \r\n \r\n {item.label}\r\n \r\n
  • \r\n ))}\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nexport default ActionButtonList;\r\n","import * as msal from \"@azure/msal-browser\";\r\nimport CacheHelper from \"./cache\";\r\n\r\n/*\r\n * Browser check variables\r\n * If you support IE, our recommendation is that you sign-in using Redirect APIs\r\n * If you as a developer are testing using Edge InPrivate mode, please add \"isEdge\" to the if check\r\n */\r\nconst ua = window.navigator.userAgent;\r\nconst msie = ua.indexOf(\"MSIE \");\r\nconst msie11 = ua.indexOf(\"Trident/\");\r\nconst msedge = ua.indexOf(\"Edge/\");\r\nconst isIE = msie > 0 || msie11 > 0;\r\nconst isEdge = msedge > 0;\r\n\r\nlet _pendingRequest: Promise;\r\nlet _msalInteractionCacheKey: string;\r\n\r\nlet _msalApp: msal.PublicClientApplication;\r\nlet _msalConfig: msal.Configuration;\r\nlet _signInType: SignInType;\r\nlet _sessionCache: CacheHelper;\r\nlet _verboseLogging: boolean;\r\n\r\nlet _accountId: string;\r\nlet _resourceScope: string;\r\n\r\nlet ssoRequest: msal.SsoSilentRequest = {\r\n scopes: [],\r\n};\r\n\r\nlet redirectRequest: msal.RedirectRequest = {\r\n scopes: [],\r\n};\r\n\r\nlet popupRequest: msal.PopupRequest = {\r\n scopes: [],\r\n};\r\n\r\nexport enum SignInType {\r\n REDIRECT,\r\n POPUP,\r\n}\r\n\r\n/**\r\n * Applies the specified msal configuration to the internal msal application.\r\n * @param config Msal configuration to apply\r\n * @param preferredSignInType Enum of type SignInType representing the preferred signin type.\r\n * @param verboseLogging Boolean to define verbose logging should be enabled or not.\r\n */\r\nexport const loadConfig = (\r\n config: msal.Configuration,\r\n preferredSignInType: SignInType,\r\n verboseLogging: boolean\r\n) => {\r\n _msalApp = new msal.PublicClientApplication(config);\r\n _msalConfig = config;\r\n\r\n _verboseLogging = verboseLogging;\r\n _sessionCache = new CacheHelper(\"sessionStorage\");\r\n\r\n _msalInteractionCacheKey = `msal.interaction.status`;\r\n _signInType = preferredSignInType;\r\n\r\n const account: msal.AccountInfo | undefined = getCurrentAccount();\r\n\r\n if (account) {\r\n _accountId = account.homeAccountId;\r\n }\r\n\r\n _resourceScope = `${window.location.origin.replace(\"https://\", \"api://\")}/${\r\n _msalConfig.auth.clientId\r\n }/access_as_user`;\r\n\r\n ssoRequest = includeDomainHint({\r\n ...ssoRequest,\r\n scopes: [_resourceScope],\r\n });\r\n\r\n redirectRequest = includeDomainHint({\r\n ...redirectRequest,\r\n scopes: [_resourceScope],\r\n });\r\n\r\n popupRequest = includeDomainHint({\r\n ...popupRequest,\r\n scopes: [_resourceScope],\r\n });\r\n};\r\n\r\n/**\r\n * Returns an unique id representing the authenticated user.\r\n * @returns string containing an unique id if the user is authenticated, else undefined.\r\n */\r\nexport const getUniqueUserId = (): string | undefined => {\r\n const account: msal.AccountInfo | undefined = getCurrentAccount();\r\n\r\n if (account) {\r\n return account.localAccountId;\r\n }\r\n\r\n return undefined;\r\n};\r\n\r\n/**\r\n * Returns the username of the authenticated user.\r\n * @returns string containing the username if the user is authenticated, else undefined.\r\n */\r\nexport const getUsername = (): string | undefined => {\r\n const account: msal.AccountInfo | undefined = getCurrentAccount();\r\n\r\n if (account) {\r\n return account.username;\r\n }\r\n\r\n return undefined;\r\n};\r\n\r\n/**\r\n * Initiates the signin process for authenticating the user.\r\n * @returns Empty promise\r\n */\r\nexport const signIn = async (): Promise => {\r\n if (hasPendingMsalInteraction()) {\r\n await waitForPendingRedirectToFinish();\r\n } else {\r\n const accounts: msal.AccountInfo[] = _msalApp.getAllAccounts();\r\n\r\n if (accounts.length === 1) {\r\n logEntry(\r\n msal.LogLevel.Info,\r\n `Only one account '${accounts[0].username}' available from the msal context. We will be using that one.`\r\n );\r\n return Promise.resolve();\r\n }\r\n\r\n const signInTypeToUse: SignInType = getSignInType();\r\n\r\n if (signInTypeToUse === SignInType.POPUP) {\r\n try {\r\n const resp = await _msalApp.loginPopup(popupRequest);\r\n return handleAuthenticationResponse(resp);\r\n } catch (error) {\r\n logEntry(msal.LogLevel.Error, error as string);\r\n }\r\n } else if (signInTypeToUse === SignInType.REDIRECT) {\r\n return _msalApp.loginRedirect(redirectRequest);\r\n }\r\n }\r\n\r\n return Promise.resolve();\r\n};\r\n\r\n/**\r\n * Initiates the signout process.\r\n */\r\nexport const signOut = () => {\r\n const logoutRequest = {\r\n account: _msalApp.getAccountByHomeId(_accountId),\r\n };\r\n _msalApp.logoutRedirect(logoutRequest);\r\n _accountId = \"\";\r\n};\r\n\r\n/**\r\n * Returns a deferred Promise containing a string with the access token which can be used for accessing the current resource.\r\n * @returns Deferred Promise\r\n */\r\nexport const getToken = async (): Promise => {\r\n const currentAccount: msal.AccountInfo | undefined = getCurrentAccount();\r\n\r\n if (!currentAccount) {\r\n await signIn();\r\n } else {\r\n const signInTypeToUse: SignInType = getSignInType();\r\n let deferredResult: Promise;\r\n\r\n if (signInTypeToUse === SignInType.POPUP) {\r\n deferredResult = acquireTokenPopup(popupRequest, currentAccount);\r\n } else if (signInTypeToUse === SignInType.REDIRECT) {\r\n deferredResult = acquireTokenRedirect(popupRequest, currentAccount);\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n deferredResult\r\n .then(\r\n (result: void | msal.AuthenticationResult) => {\r\n if (result) {\r\n resolve(result.accessToken);\r\n } else {\r\n logEntry(\r\n msal.LogLevel.Error,\r\n `Resolving an access token for resource '${_resourceScope}' resulted in an empty authentication result`\r\n );\r\n resolve(\"\"); // We do this on purpose to keep the calling code clean\r\n }\r\n },\r\n (error) => {\r\n reject(error);\r\n }\r\n )\r\n .then((error) => {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n return Promise.resolve(\"\");\r\n};\r\n\r\n/**\r\n * Wrapper function for perfoming authenticated fetch operations to the current resource.\r\n * @param url String with the url of the requested endpoint.\r\n * @param options Additional fetch options.\r\n * @returns Deferred Promise with the response data of the fetch operation.\r\n */\r\nexport const apiFetch = async (\r\n url: string,\r\n options: any = {}\r\n): Promise => {\r\n const token: string = await getToken();\r\n const o = options || {};\r\n if (!o.headers) o.headers = {};\r\n o.headers.Authorization = `Bearer ${token}`;\r\n return fetch(url, o);\r\n};\r\n\r\nconst hasPendingMsalInteraction = (): boolean => {\r\n if (_sessionCache.hasCacheEntry(_msalInteractionCacheKey)) {\r\n const cacheEntry: string | null = _sessionCache.getCacheEntry(\r\n _msalInteractionCacheKey\r\n );\r\n\r\n if (cacheEntry) {\r\n return cacheEntry === _msalConfig.auth.clientId;\r\n }\r\n }\r\n\r\n return false;\r\n};\r\n\r\n/**\r\n * Includes any domain hint info in the msal request instances.\r\n * @param requestInfo Various msal request instances (sso, redirect, popup)\r\n * @returns Enriched request instance\r\n */\r\nconst includeDomainHint = (requestInfo: any): any => {\r\n let search: URLSearchParams = new URLSearchParams(window.location.search);\r\n let domainHint: string | null = search.get(\"domain_hint\");\r\n\r\n if (domainHint && domainHint.length > 0) {\r\n requestInfo = {\r\n ...requestInfo,\r\n domainHint: domainHint,\r\n };\r\n }\r\n\r\n return requestInfo;\r\n};\r\n\r\n/**\r\n * Gets the current msal AccountInfo instance if the user is authenticated\r\n * @returns msal AccountInfo instance if the user is authenticated, else undefined.\r\n */\r\nconst getCurrentAccount = (): msal.AccountInfo | undefined => {\r\n if (_accountId) {\r\n return _msalApp.getAccountByHomeId(_accountId) || undefined;\r\n } else {\r\n const accounts: msal.AccountInfo[] = _msalApp.getAllAccounts();\r\n\r\n if (accounts.length === 1) {\r\n logEntry(\r\n msal.LogLevel.Info,\r\n `Only one account '${accounts[0].username}' available from the msal context. We will be using that one.`\r\n );\r\n return accounts[0];\r\n } else {\r\n if (accounts.length > 1) {\r\n logEntry(\r\n msal.LogLevel.Warning,\r\n \"Multiple accounts exist in the msal context. Unable to determine the corresponding user.\"\r\n );\r\n } else {\r\n logEntry(\r\n msal.LogLevel.Warning,\r\n \"No account found in the msal context. You need to signin first.\"\r\n );\r\n }\r\n\r\n return undefined;\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Returns a deferred Promise to wait for the pending redirect request to finish.\r\n * @returns Empty Promise\r\n */\r\nconst waitForPendingRedirectToFinish = (): Promise => {\r\n if (!_pendingRequest) {\r\n _pendingRequest = new Promise((resolve, reject) => {\r\n _msalApp\r\n .handleRedirectPromise()\r\n .then((result: msal.AuthenticationResult | null) => {\r\n if (result && result.account) {\r\n _accountId = result.account.homeAccountId;\r\n resolve();\r\n } else {\r\n logEntry(\r\n msal.LogLevel.Info,\r\n \"Still waiting for the pending request to finish\"\r\n );\r\n }\r\n })\r\n .catch((error) => {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n return _pendingRequest;\r\n};\r\n\r\n/**\r\n * Processes the authentication reponse after the authorization flow finishes.\r\n * @param resp msal AuthenticationResult instance.\r\n */\r\nconst handleAuthenticationResponse = (\r\n resp: msal.AuthenticationResult | null\r\n) => {\r\n if (resp && resp.account) {\r\n _accountId = resp.account.homeAccountId;\r\n } else {\r\n // need to call getAccount here?\r\n const currentAccounts = _msalApp.getAllAccounts();\r\n if (!currentAccounts || currentAccounts.length < 1) {\r\n signIn();\r\n } else if (currentAccounts.length > 1) {\r\n logEntry(\r\n msal.LogLevel.Error,\r\n \"Unable to determine which msal account needs to be used for this resource.\"\r\n );\r\n } else if (currentAccounts.length === 1) {\r\n _accountId = currentAccounts[0].homeAccountId;\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Gets the proper SignInType type instance depending of the preference.\r\n * @returns SignInType representing the signin type to use.\r\n */\r\nconst getSignInType = (): SignInType => {\r\n return isIE ? SignInType.REDIRECT : _signInType;\r\n};\r\n\r\n/**\r\n * Returns a deferred Promise containing the authentication result using the popup scenario.\r\n * @param request msal PopupRequest instance\r\n * @param account msal account for which a token is requested.\r\n * @returns Deferred Promise containiong the authentication result.\r\n */\r\nconst acquireTokenPopup = async (\r\n request: msal.PopupRequest,\r\n account: msal.AccountInfo\r\n): Promise => {\r\n request.account = account;\r\n return await _msalApp.acquireTokenSilent(request).catch(async (error) => {\r\n logEntry(msal.LogLevel.Info, \"silent token acquisition fails.\");\r\n if (error instanceof msal.InteractionRequiredAuthError) {\r\n logEntry(msal.LogLevel.Info, \"acquiring token using popup\");\r\n return _msalApp.acquireTokenPopup(request).catch((error) => {\r\n logEntry(msal.LogLevel.Error, error);\r\n });\r\n } else {\r\n logEntry(msal.LogLevel.Error, error);\r\n }\r\n });\r\n};\r\n\r\n/**\r\n * Returns a deferred Promise containing the authentication result using the redirect scenario.\r\n * @param request msal c instance\r\n * @param account msal account for which a token is requested.\r\n * @returns Deferred Promise containiong the authentication result.\r\n */\r\nconst acquireTokenRedirect = async (\r\n request: msal.RedirectRequest,\r\n account: msal.AccountInfo\r\n): Promise => {\r\n request.account = account;\r\n return await _msalApp.acquireTokenSilent(request).catch(async (error) => {\r\n logEntry(msal.LogLevel.Info, \"silent token acquisition fails.\");\r\n if (error instanceof msal.InteractionRequiredAuthError) {\r\n logEntry(msal.LogLevel.Info, \"acquiring token using redirect\");\r\n _msalApp.acquireTokenRedirect(request);\r\n } else {\r\n logEntry(msal.LogLevel.Error, error);\r\n }\r\n });\r\n};\r\n\r\n/**\r\n * Logs the message using the specified log level.\r\n * @param level LogLevel to use\r\n * @param message String containing the message to log\r\n * @param data Object to include in the log message\r\n * @param containsPii Boolean which represents if personal identification information is present in the logging info.\r\n */\r\nconst logEntry = (\r\n level: msal.LogLevel,\r\n message: string,\r\n data?: object,\r\n containsPii?: boolean\r\n) => {\r\n if (containsPii) {\r\n return;\r\n }\r\n\r\n switch (level) {\r\n case msal.LogLevel.Error:\r\n if (data) {\r\n console.error(message, data);\r\n } else {\r\n console.error(message);\r\n }\r\n return;\r\n case msal.LogLevel.Info:\r\n if (data) {\r\n console.info(message, data);\r\n } else {\r\n console.info(message);\r\n }\r\n return;\r\n case msal.LogLevel.Verbose:\r\n if (_verboseLogging) {\r\n if (data) {\r\n console.debug(message, data);\r\n } else {\r\n console.debug(message);\r\n }\r\n }\r\n return;\r\n case msal.LogLevel.Warning:\r\n if (data) {\r\n console.warn(message, data);\r\n } else {\r\n console.warn(message);\r\n }\r\n return;\r\n }\r\n};\r\n","import * as React from \"react\";\r\nimport * as Localization from \"./Translate\";\r\nimport {\r\n ITranslationProps,\r\n IOrganizationData,\r\n IUser,\r\n} from \"../data/interfaces\";\r\nimport { Modal, Link } from \"office-ui-fabric-react\";\r\n\r\nexport interface ITenantInvalidMessageProps extends ITranslationProps {\r\n organizationData: IOrganizationData | undefined;\r\n activeUser: IUser | undefined;\r\n onSignOut(e: any): void;\r\n}\r\n\r\nexport interface ITenantInvalidMessageState {}\r\n\r\nclass TenantInvalidMessage extends React.Component<\r\n ITenantInvalidMessageProps,\r\n ITenantInvalidMessageState\r\n> {\r\n private handleSignOutClick(e: any) {\r\n this.props.onSignOut(e);\r\n }\r\n\r\n render() {\r\n return (\r\n
    \r\n \r\n
    \r\n

    Invalid product license

    \r\n
    \r\n
    \r\n

    {this.props.i18n.licenseInValidMessage}

    \r\n

    \r\n {this.props.activeUser &&\r\n Localization.formatString(\r\n this.props.i18n.signedInUserText,\r\n this.props.activeUser.userPrincipalName\r\n )}\r\n

    \r\n
    \r\n
    \r\n \r\n {this.props.i18n.linkSignOutText}\r\n \r\n
    \r\n \r\n
    \r\n );\r\n }\r\n}\r\n\r\nexport default Localization.translateComponent<\r\n ITenantInvalidMessageProps,\r\n ITenantInvalidMessageState\r\n>(\"TenantInvalidMessage\")(TenantInvalidMessage);\r\n","import React from \"react\";\r\nimport BreadCrumbNavigation from \"./BreadCrumbNavigation\";\r\n\r\nexport interface ITopNavigationBarProps {\r\n items: ITopNavigationItem[];\r\n navigationChanged(key: string, index: number, instance: any): void;\r\n}\r\n\r\nexport interface ITopNavigationItem {\r\n title: string;\r\n key: string;\r\n static?: boolean;\r\n dataset?: any;\r\n instance?: any;\r\n}\r\n\r\nclass TopNavigationBar extends React.Component {\r\n constructor(props: ITopNavigationBarProps) {\r\n super(props);\r\n\r\n this.state = {};\r\n }\r\n private onBreadcrumbNavigationChanged(key: string): void {\r\n let index: number = this.props.items.findIndex(\r\n (item: ITopNavigationItem) => {\r\n return item.key === key;\r\n }\r\n );\r\n\r\n this.props.navigationChanged(key, index, this.props.items[index].instance);\r\n }\r\n\r\n render() {\r\n return (\r\n
    \r\n \r\n
    \r\n );\r\n }\r\n}\r\n\r\nexport default TopNavigationBar;\r\n","import React from \"react\";\r\nimport {\r\n TreeView,\r\n TreeViewItemClickEvent,\r\n TreeViewExpandChangeEvent,\r\n} from \"@progress/kendo-react-treeview\";\r\nimport {\r\n IDriveItem,\r\n ITranslationProps,\r\n IHierarchialDataset,\r\n IBaseItem,\r\n IErrorResult,\r\n ISite,\r\n} from \"../data/interfaces\";\r\nimport { Icon } from \"office-ui-fabric-react/lib/Icon\";\r\nimport { Popup, Offset } from \"@progress/kendo-react-popup\";\r\nimport { Menu, MenuItem } from \"@progress/kendo-react-layout\";\r\nimport { isSite, isDrive, isDriveItem, isOneDrive, isRecycleBin } from \"../helpers/typeCheck\";\r\nimport * as Localization from \"./Translate\";\r\nimport { HierarchialDataScope, MessageBarType } from \"../data/enums\";\r\nimport { Guid } from \"../helpers/globalHelper\";\r\nimport { ModificationType } from \"./ItemModificationQueue\";\r\n\r\nexport interface ITreeViewNavigatorProps extends ITranslationProps {\r\n loadedContainer?: IBaseItem;\r\n language: string;\r\n data: IHierarchialDataset;\r\n\r\n itemExpandedChangeEvent?(\r\n expandedItem: IBaseItem\r\n ): Promise;\r\n itemSelectedEvent?(selectedItem: IBaseItem): Promise;\r\n itemContextMenuClickedEvent?(item: IBaseItem, key: string): void;\r\n itemDroppedEvent?(sourceItems: IBaseItem[], targetContainer: IBaseItem): void;\r\n\r\n itemCreationEvent(formData: FormData): Promise;\r\n itemsCreatingEvent(item: IBaseItem[]): Promise;\r\n itemCreatedEvent(item: IBaseItem): Promise;\r\n\r\n globalErrorMessageEvent(error: IErrorResult): void;\r\n\r\n DummyFileRemoveEvent(\r\n item: IBaseItem,\r\n modificationType: ModificationType\r\n ): Promise;\r\n\r\n showMessageBar(message: string, messageBarType: MessageBarType): void;\r\n\r\n enableContextMenu: boolean;\r\n}\r\n\r\ninterface ITreeViewNavigatorState {\r\n treeViewItems: any[];\r\n contextMenu: {\r\n show: boolean;\r\n enabledKeys: string[];\r\n };\r\n isLoading: boolean;\r\n}\r\n\r\nclass TreeViewNavigator extends React.Component<\r\n ITreeViewNavigatorProps,\r\n ITreeViewNavigatorState\r\n> {\r\n private contextMenuOffset?: Offset;\r\n private contextMenuDataMember?: any;\r\n\r\n constructor(props: ITreeViewNavigatorProps) {\r\n super(props);\r\n\r\n this.state = {\r\n treeViewItems: [],\r\n contextMenu: {\r\n show: false,\r\n enabledKeys: [],\r\n },\r\n isLoading: true,\r\n };\r\n }\r\n\r\n /**\r\n * Called when the component is initialized.\r\n */\r\n public componentDidMount() {\r\n if (this.props.data.children.length > 0) {\r\n let newTreeViewItems: any[] = this.buildTreeView(\r\n this.props.data.children\r\n );\r\n\r\n this.setState({\r\n treeViewItems: newTreeViewItems,\r\n isLoading: false,\r\n });\r\n }\r\n\r\n document.addEventListener(\"click\", () => {\r\n if (this.state.contextMenu.show)\r\n this.setState({ contextMenu: { show: false, enabledKeys: [] } });\r\n });\r\n }\r\n\r\n /**\r\n * Called when the component receives new prop values\r\n * @param prevProps ITreeViewNavigatorProps instance describing the previous prop value\r\n */\r\n public componentDidUpdate(prevProps: ITreeViewNavigatorProps) {\r\n // This is called when the dataset is updated via props\r\n // This happens when a user clicks a treeview node (site/list/folder) and the childrens from that level are returned from the api and need to be rendered in the tree\r\n\r\n if (this.props.data !== prevProps.data) {\r\n let newTreeViewItems: any[] = this.buildTreeView(\r\n this.props.data.children\r\n );\r\n\r\n this.setState({\r\n treeViewItems: newTreeViewItems,\r\n isLoading: false,\r\n });\r\n }\r\n }\r\n\r\n private getSkeletonInstance(parentItem: IBaseItem): IBaseItem {\r\n return {\r\n id: \"\",\r\n referenceId: Guid.newGuid(),\r\n displayName: \"\",\r\n parentItem: parentItem,\r\n rootScope: parentItem.rootScope,\r\n children: [],\r\n isAdding: true,\r\n isUpdating: false,\r\n isDeleting: false,\r\n isExpanded: false,\r\n isDirty: true,\r\n indexPath: [],\r\n isLoaded: false,\r\n isLoading: false,\r\n isContainer: false,\r\n isMoving: false,\r\n } as IBaseItem;\r\n }\r\n\r\n private getDummyItems(rawFiles: FileList): IBaseItem[] {\r\n let newItems: IBaseItem[] = [];\r\n\r\n if (this.props.loadedContainer !== undefined) {\r\n for (let index = 0; index < rawFiles.length; index++) {\r\n let dummyItem: IBaseItem = this.getSkeletonInstance(\r\n this.props.loadedContainer\r\n );\r\n\r\n newItems.push({\r\n ...dummyItem,\r\n name: rawFiles[index].name,\r\n displayName: rawFiles[index].name,\r\n isContainer: false,\r\n size: rawFiles[index].size,\r\n } as IDriveItem);\r\n }\r\n }\r\n\r\n return newItems;\r\n }\r\n\r\n /**\r\n * Builds a recursive list of tree nodes representing the hierarchial data set.\r\n * @param items Array of IBaseItem instances\r\n */\r\n private buildTreeView(items: IBaseItem[]): any[] {\r\n return items\r\n .filter((item: IBaseItem) => {\r\n // We only want container items in the treeview (Site, Drive, DriveItems which are folders)\r\n return item.isContainer;\r\n })\r\n .map((item: IBaseItem) => {\r\n let treeNode: any;\r\n\r\n if (isRecycleBin(item)){\r\n treeNode = {\r\n text: item.displayName,\r\n id: item.id,\r\n instance: item,\r\n expanded: item.isExpanded !== undefined ? item.isExpanded : false,\r\n hasChildren: false,\r\n };\r\n } else {\r\n treeNode = {\r\n text: item.displayName,\r\n id: item.id,\r\n instance: item,\r\n expanded: item.isExpanded !== undefined ? item.isExpanded : false,\r\n hasChildren: true,\r\n };\r\n\r\n if (item.isLoaded) {\r\n if (item.children !== undefined) {\r\n treeNode.hasChildren = item.children.some((child: IBaseItem) => {\r\n return child.isContainer;\r\n });\r\n \r\n treeNode = {\r\n ...treeNode,\r\n expanded: item.isExpanded !== undefined ? item.isExpanded : false,\r\n items: this.buildTreeView(item.children),\r\n };\r\n }\r\n }\r\n }\r\n\r\n return treeNode;\r\n });\r\n }\r\n\r\n /**\r\n * Resolves the root node icon based on the loaded dataset.\r\n */\r\n private resolveRootNodeIcon(): string {\r\n switch (this.props.data.scope) {\r\n case HierarchialDataScope.OneDrives:\r\n return \"D365TalentHRCore\";\r\n case HierarchialDataScope.Favorites:\r\n return \"FavoriteList\";\r\n case HierarchialDataScope.AllSites:\r\n return \"SharepointLogoInverse\";\r\n default:\r\n return \"\";\r\n }\r\n }\r\n\r\n /**\r\n * Returns a Office UI Fabric Icon name based on the treeview instance type.\r\n * @param treeViewItem TreeViewItem instance\r\n */\r\n private resolveTreeViewNodeIcon(treeViewItem: any): string {\r\n if (isDriveItem(treeViewItem.instance)) {\r\n if (\r\n typeof treeViewItem.expanded !== \"undefined\" &&\r\n treeViewItem.expanded\r\n ) {\r\n return \"FabricOpenFolderHorizontal\";\r\n } else {\r\n return \"FolderHorizontal\";\r\n }\r\n } else if (isSite(treeViewItem.instance)) {\r\n return \"SharepointLogo\";\r\n } else if (isDrive(treeViewItem.instance)) {\r\n if (isOneDrive(treeViewItem.instance)) {\r\n return \"OneDriveLogo\";\r\n } else {\r\n return \"DocLibrary\";\r\n }\r\n } else if (isRecycleBin(treeViewItem.instance)){\r\n return \"RecycleBin\";\r\n } else {\r\n return \"\";\r\n }\r\n }\r\n\r\n private resolveTreeViewTopNodeClass(): string {\r\n switch (this.props.data.scope) {\r\n case HierarchialDataScope.OneDrives:\r\n return \"treeViewTopNode-item-OneDrive\";\r\n case HierarchialDataScope.Favorites:\r\n return \"treeViewTopNode-item-Favorites\";\r\n case HierarchialDataScope.AllSites:\r\n return \"treeViewTopNode-item-SharePoint\";\r\n default:\r\n return \"\";\r\n }\r\n }\r\n\r\n /**\r\n * Returns the class name to use for the specified treeview item.\r\n * @param treeViewItem Treeview item instance\r\n */\r\n private resolveTreeViewNodeClass(treeViewItem: any): string {\r\n if (isDriveItem(treeViewItem.instance)) {\r\n return \"treeViewNode-driveItem\";\r\n } else if (isSite(treeViewItem.instance)) {\r\n return \"treeViewNode-site\";\r\n } else if (isDrive(treeViewItem.instance)) {\r\n if (isOneDrive(treeViewItem.instance)) {\r\n return \"treeViewNode-oneDrive\";\r\n } else {\r\n return \"treeViewNode-drive\";\r\n }\r\n } else {\r\n return \"treeViewNode-recycleBin\"\r\n }\r\n }\r\n\r\n private resolveTreeViewNodeItemClass(treeViewItem: any): string {\r\n if (\r\n this.props.loadedContainer !== undefined &&\r\n this.props.loadedContainer.id === treeViewItem.id\r\n ) {\r\n return \"droptarget active\";\r\n } else {\r\n return \"droptarget\";\r\n }\r\n }\r\n\r\n /**\r\n * Loads the child nodes of a tree node.\r\n * @param event TreeViewItemClickEvent or TreeViewExpandChangeEvent event\r\n */\r\n private loadChildNodes(\r\n event: TreeViewItemClickEvent | TreeViewExpandChangeEvent,\r\n expandingOnly: boolean\r\n ) {\r\n let item: IBaseItem = event.item.instance as IBaseItem;\r\n\r\n if (isSite(item) || isDrive(item) || isDriveItem(item) || isRecycleBin(item)) {\r\n if (expandingOnly) {\r\n event.item.expanded = !event.item.expanded;\r\n\r\n if (this.props.itemExpandedChangeEvent !== undefined) {\r\n this.props\r\n .itemExpandedChangeEvent(item)\r\n .then((hasChildren: boolean | IErrorResult) => {\r\n if (\r\n (hasChildren as IErrorResult).internalErrorCode !== undefined\r\n ) {\r\n let errorResult: IErrorResult = hasChildren as IErrorResult;\r\n\r\n // Show error\r\n this.props.globalErrorMessageEvent(errorResult);\r\n\r\n // Stop loading spinner\r\n event.item.hasChildren = false;\r\n\r\n return;\r\n }\r\n\r\n event.item.hasChildren = hasChildren as boolean;\r\n });\r\n }\r\n } else {\r\n if (!event.item.expanded) {\r\n event.item.expanded = true;\r\n }\r\n\r\n if (this.props.itemSelectedEvent !== undefined) {\r\n this.props\r\n .itemSelectedEvent(item)\r\n .then((hasChildren: boolean | IErrorResult) => {\r\n if (\r\n (hasChildren as IErrorResult).internalErrorCode !== undefined\r\n ) {\r\n let error = hasChildren as IErrorResult;\r\n this.props.globalErrorMessageEvent(error);\r\n event.item.hasChildren = false;\r\n\r\n // show error, eventually undo changes and do not process further\r\n\r\n return;\r\n }\r\n\r\n event.item.hasChildren = hasChildren as boolean;\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n ItemOnExpandChangeHandler = (event: TreeViewExpandChangeEvent) => {\r\n this.loadChildNodes(event, true);\r\n };\r\n\r\n ItemOnClickHandler = (event: TreeViewItemClickEvent) => {\r\n this.loadChildNodes(event, false);\r\n };\r\n\r\n ItemOnContextMenuHandler = (\r\n e: any,\r\n treeViewItem: any,\r\n enabledKeys: string[]\r\n ) => {\r\n this.contextMenuDataMember = treeViewItem;\r\n\r\n this.contextMenuOffset = {\r\n left: e.clientX,\r\n top: window.scrollY + e.clientY,\r\n };\r\n this.setState({\r\n contextMenu: {\r\n show: !this.state.contextMenu.show,\r\n enabledKeys: enabledKeys,\r\n },\r\n });\r\n };\r\n\r\n handleItemContextMenuOnSelect = (e: any) => {\r\n if (\r\n isSite(this.contextMenuDataMember.instance) ||\r\n isDrive(this.contextMenuDataMember.instance)\r\n ) {\r\n if (this.props.itemContextMenuClickedEvent !== undefined) {\r\n this.props.itemContextMenuClickedEvent(\r\n this.contextMenuDataMember.instance as IBaseItem,\r\n e.item.data\r\n );\r\n }\r\n }\r\n\r\n this.setState({ contextMenu: { show: false, enabledKeys: [] } });\r\n };\r\n\r\n // event on dragtarget\r\n onDragStartHandler = (\r\n event: React.DragEvent,\r\n sourceTreeviewNode: any\r\n ): void => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n if (event.dataTransfer === null) {\r\n return;\r\n }\r\n\r\n event.dataTransfer.setData(\r\n \"sourceItem\",\r\n JSON.stringify(sourceTreeviewNode.instance)\r\n );\r\n };\r\n\r\n // event on droptarget\r\n onDropHandler(event: React.DragEvent, targetTreeviewNode: any): void {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n event.persist();\r\n\r\n // event.dataTransfer.files.length is 0 when drag n drop from driveitems to treeview\r\n // event.dataTransfer.items.length has a length > 0 when drag n drop from driveitems to treeview\r\n const dataTransfer: DataTransfer = event.dataTransfer;\r\n\r\n // Some pre-checks.\r\n if (dataTransfer.files.length === 0) {\r\n // Drop from the driveitemslist.\r\n let sourceItem: IBaseItem = JSON.parse(\r\n dataTransfer.getData(\"sourceItem\")\r\n );\r\n\r\n // Prevent driveItem to be moved to self\r\n if (\r\n (sourceItem as IDriveItem).driveId ===\r\n targetTreeviewNode.instance.driveId &&\r\n sourceItem.id === targetTreeviewNode.instance.id\r\n ) {\r\n return;\r\n }\r\n\r\n if (typeof this.props.itemDroppedEvent !== \"undefined\") {\r\n let array: IBaseItem[] = [sourceItem];\r\n this.props.itemDroppedEvent(array, targetTreeviewNode.instance);\r\n }\r\n } else {\r\n // Drop from outside the browser.\r\n // Handle possible multiple files.\r\n let isFolderIncluded: boolean = false;\r\n\r\n const items: DataTransferItemList = dataTransfer.items;\r\n\r\n // Several pre-checks (files-only and not files bigger than 4294967295 bytes)\r\n for (let index = 0; index < items.length; index++) {\r\n var entry: any = items[index].webkitGetAsEntry();\r\n if (entry.isFile) {\r\n } else if (entry.isDirectory) {\r\n isFolderIncluded = true;\r\n break;\r\n }\r\n }\r\n\r\n if (isFolderIncluded) {\r\n this.props.showMessageBar(\r\n this.props.i18n.folderInDragnDropSelectionMessage,\r\n MessageBarType.Warning\r\n );\r\n return;\r\n }\r\n\r\n let isFileTooBig: boolean = false;\r\n const files: FileList = dataTransfer.files;\r\n\r\n for (let index = 0; index < files.length; index++) {\r\n if (files[index].size > 4294967295) {\r\n isFileTooBig = true;\r\n break;\r\n }\r\n }\r\n\r\n if (isFileTooBig) {\r\n this.props.showMessageBar(\r\n this.props.i18n.fileTooLargeMessage,\r\n MessageBarType.Warning\r\n );\r\n return;\r\n }\r\n\r\n // Fill the sorted files list.\r\n let sortedFiles: any[] = [];\r\n for (let index = 0; index < files.length; index++) {\r\n sortedFiles.push(files[index]);\r\n }\r\n\r\n // Sort on name.\r\n sortedFiles.sort((a: File, b: File) => (a.name > b.name ? 1 : -1));\r\n\r\n if (\r\n sortedFiles &&\r\n sortedFiles.length > 0 &&\r\n this.props.loadedContainer !== undefined\r\n ) {\r\n this.setState({}, () => {\r\n let dummyItems: IBaseItem[] = this.getDummyItems(\r\n sortedFiles as unknown as FileList\r\n );\r\n // First trigger the event to create dummy items representing the new-files-to-be\r\n this.props.itemsCreatingEvent(dummyItems).then(async () => {\r\n if (this.props.loadedContainer !== undefined) {\r\n for (let index = 0; index < sortedFiles.length; index++) {\r\n // Now upload the actual file and get the returned IDriveItem instance\r\n await this.UploadDriveItem(\r\n sortedFiles[index],\r\n this.props.loadedContainer,\r\n dummyItems[index],\r\n dummyItems[index].referenceId\r\n ).catch(() => {\r\n this.props.DummyFileRemoveEvent(\r\n dummyItems[index],\r\n ModificationType.ADD\r\n );\r\n });\r\n }\r\n }\r\n });\r\n event.dataTransfer.clearData();\r\n });\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Handles uploading of files representing IDriveItem instances.\r\n * @param rawFile File instance representing the new file.\r\n * @param parentContainer IBaseItem instance representing the container where the new file will be uploaded to.\r\n * @param referenceId String containing a reference id used for identifying the new file while performing the upload action.\r\n */\r\n private UploadDriveItem(\r\n rawFile: File,\r\n parentContainer: IBaseItem,\r\n dummyItem: IBaseItem,\r\n referenceId?: string\r\n ): Promise {\r\n return new Promise((resolve, reject) => {\r\n let formData = new FormData();\r\n formData.set(\"file\", rawFile);\r\n\r\n formData.append(\r\n \"DriveId\",\r\n isDriveItem(parentContainer)\r\n ? (parentContainer as IDriveItem).driveId\r\n : parentContainer.id\r\n );\r\n formData.append(\"ParentId\", parentContainer.id);\r\n formData.append(\r\n \"FolderPath\",\r\n parentContainer.path ? `/${parentContainer.path}` : \"\"\r\n );\r\n\r\n if (referenceId !== undefined)\r\n formData.append(\"ReferenceId\", referenceId);\r\n\r\n if (parentContainer.rootScope === HierarchialDataScope.OneDrives)\r\n formData.append(\"DriveIsOneDrive\", \"true\");\r\n else formData.append(\"DriveIsOneDrive\", \"false\");\r\n\r\n formData.append(\"Overwrite\", \"false\");\r\n\r\n this.props\r\n .itemCreationEvent(formData)\r\n .then((result: IDriveItem) => {\r\n this.props.itemCreatedEvent({\r\n ...result,\r\n displayName: result.name,\r\n rootScope: parentContainer.rootScope,\r\n isAdding: false,\r\n isContainer: false,\r\n path: result[\"folderPath\"],\r\n parentItem: parentContainer,\r\n });\r\n resolve(result);\r\n })\r\n .catch(() => {\r\n reject();\r\n });\r\n\r\n /*\r\n return fetch(`${window.location.origin}/api/item/addFile`, {\r\n method: \"POST\",\r\n headers: {\r\n Authorization: `Bearer ${token}`\r\n },\r\n body: formData\r\n })\r\n .then(async (response: Response) => {\r\n if (response.ok) {\r\n var data = response.json();\r\n\r\n await data.then((uploadedItem: IDriveItem) => {\r\n this.props.itemCreatedEvent({\r\n ...uploadedItem,\r\n displayName: uploadedItem.name,\r\n rootScope: parentContainer.rootScope,\r\n isAdding: false,\r\n isContainer: false,\r\n path: uploadedItem[\"folderPath\"],\r\n parentItem: parentContainer\r\n });\r\n });\r\n\r\n resolve();\r\n } else {\r\n throw new Error(response.status.toString()); // Must he here otherwise an undefined item is pushed\r\n }\r\n })\r\n .catch((error: any) => {\r\n //For example in error: Error: 409\r\n\r\n const httpStatusCode: number = +error\r\n .toString()\r\n .replace(\"Error: \", \"\");\r\n const errorMesssage: string =\r\n getErrorDescription(httpStatusCode, this.props.language) +\r\n `\"` +\r\n rawFile.name +\r\n `\"`;\r\n\r\n this.props.showMessageBar(errorMesssage, MessageBarType.Error);\r\n\r\n this.props.DummyFileRemoveEvent(dummyItem, ModificationType.ADD);\r\n resolve();\r\n });\r\n */\r\n });\r\n }\r\n\r\n // event on droptarget\r\n onDragEnterHandler = (event: React.DragEvent) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n let target = event.target as HTMLElement;\r\n if (\r\n target.classList.contains(\"droptarget\") &&\r\n target.parentElement !== null\r\n ) {\r\n target.parentElement.style.border = \"1px dotted black\";\r\n }\r\n };\r\n\r\n // event on droptarget\r\n onDragLeaveHandler = (event: React.DragEvent) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n let target = event.target as HTMLElement;\r\n\r\n if (\r\n target.classList.contains(\"droptarget\") &&\r\n target.parentElement !== null\r\n ) {\r\n target.parentElement.style.border = \"1px solid rgba(0,0,0,0)\";\r\n }\r\n };\r\n\r\n // event on droptarget\r\n onDragOverHandler = (event: React.DragEvent) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n };\r\n\r\n onRenderTreeViewItem = (item: any): JSX.Element => {\r\n // Rendering of Drive and DriveItem IBaseItem instances\r\n if (isDrive(item.instance) || isDriveItem(item.instance)) {\r\n return (\r\n \r\n this.onDragStartHandler(event, item)\r\n }\r\n onDragEnter={(event: React.DragEvent) =>\r\n this.onDragEnterHandler(event)\r\n }\r\n onDragLeave={(event: React.DragEvent) =>\r\n this.onDragLeaveHandler(event)\r\n }\r\n onDragOver={(event: React.DragEvent) => this.onDragOverHandler(event)}\r\n onDrop={(event: React.DragEvent) => this.onDropHandler(event, item)}\r\n onContextMenu={(e: any) => {\r\n // For DriveItems we keep the default behavior for the context menu, only for Sites and Drives we have a custom context menu.\r\n if (!isDriveItem(item.instance)) {\r\n e.preventDefault();\r\n this.ItemOnContextMenuHandler(e, item, [\"ManagePermissions\"]);\r\n }\r\n }}\r\n >\r\n \r\n \r\n {item.text}\r\n \r\n \r\n );\r\n } else if(isSite(item.instance)) {\r\n // Rendering of Site IBaseItem instances\r\n return (\r\n {\r\n if (isSite(item.instance)) {\r\n let site: ISite = item.instance as ISite;\r\n let enabledContextMenuKeys: string[] = [\"ManagePermissions\"];\r\n\r\n // Only enable the following context menu feature for root level sites\r\n if (site.indexPath.length === 1) {\r\n if (site.isFollowing) {\r\n enabledContextMenuKeys.push(\"UnfollowSite\");\r\n } else {\r\n enabledContextMenuKeys.push(\"FollowSite\");\r\n }\r\n }\r\n\r\n e.preventDefault();\r\n this.ItemOnContextMenuHandler(e, item, enabledContextMenuKeys);\r\n }\r\n }}\r\n >\r\n \r\n \r\n {item.text}\r\n \r\n \r\n );\r\n } else {\r\n // Rendering of IRecyclebin instances\r\n return (\r\n \r\n \r\n \r\n {item.text}\r\n \r\n \r\n );\r\n }\r\n };\r\n\r\n render() {\r\n return (\r\n
    \r\n
    \r\n \r\n {this.props.data.root}\r\n
    \r\n {!this.state.isLoading && (\r\n this.onRenderTreeViewItem(props.item)}\r\n />\r\n )}\r\n {this.state.isLoading && (\r\n
    \r\n \r\n {this.props.i18n.loadingText}\r\n
    \r\n )}\r\n {this.props.enableContextMenu && (\r\n \r\n \r\n {this.state.contextMenu.enabledKeys.indexOf(\"ManagePermissions\") >\r\n -1 && (\r\n \r\n )}\r\n {this.state.contextMenu.enabledKeys.indexOf(\"FollowSite\") >\r\n -1 && (\r\n \r\n )}\r\n {this.state.contextMenu.enabledKeys.indexOf(\"UnfollowSite\") >\r\n -1 && (\r\n \r\n )}\r\n {window.location.search.substring(1).startsWith(\"debug=true\") && (\r\n \r\n )}\r\n \r\n \r\n )}\r\n
    \r\n );\r\n }\r\n}\r\n\r\nexport default Localization.translateComponent<\r\n ITreeViewNavigatorProps,\r\n ITreeViewNavigatorState\r\n>(\"TreeViewNavigator\")(TreeViewNavigator);\r\n","import * as msal from \"@azure/msal-browser\";\r\n\r\nconst defaults: msal.Configuration = {\r\n auth: {\r\n clientId: \"\", // This needs to be set before creating the msal application\r\n redirectUri: window.location.origin,\r\n },\r\n cache: {\r\n cacheLocation: \"localStorage\", // This configures where your cache will be stored\r\n storeAuthStateInCookie: false, // Set this to \"true\" if you are having issues on IE11 or Edge\r\n },\r\n system: {\r\n loggerOptions: {\r\n loggerCallback: (level, message, containsPii) => {\r\n if (containsPii) {\r\n return;\r\n }\r\n switch (level) {\r\n case msal.LogLevel.Error:\r\n console.error(message);\r\n return;\r\n case msal.LogLevel.Info:\r\n console.info(message);\r\n return;\r\n case msal.LogLevel.Verbose:\r\n console.debug(message);\r\n return;\r\n case msal.LogLevel.Warning:\r\n console.warn(message);\r\n return;\r\n }\r\n },\r\n },\r\n },\r\n};\r\n\r\nexport const getConfig = (clientId: string): msal.Configuration => {\r\n return {\r\n ...defaults,\r\n auth: {\r\n clientId: clientId,\r\n },\r\n };\r\n};\r\n","const MSAL_LOGIN_PENDING: string = \"msal.login.pending\";\r\nconst MSAL_ACQUIRE_TOKEN_PENDING: string = \"msal.acquire.token.pending\";\r\nconst MSAL_PENDING_REDIRECT: string = \"msal.pending.redirect\";\r\n\r\nexport default class CacheHelper {\r\n private _cacheStorage: Storage | undefined;\r\n\r\n constructor(cacheLocation: string) {\r\n if (cacheLocation === \"sessionStorage\") {\r\n this._cacheStorage = sessionStorage;\r\n } else if (cacheLocation === \"localStorage\") {\r\n this._cacheStorage = localStorage;\r\n }\r\n }\r\n\r\n public setCacheEntry(key: string, value: string): void {\r\n if (this._cacheStorage) {\r\n this._cacheStorage.setItem(key, value);\r\n }\r\n }\r\n\r\n public getCacheEntry(key: string): string | null {\r\n if (this._cacheStorage) {\r\n return this._cacheStorage.getItem(key);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n public hasCacheEntry(key: string): boolean {\r\n if (this._cacheStorage) {\r\n if (this._cacheStorage.getItem(key)) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public clearCacheEntry(key: string): void {\r\n if (this._cacheStorage) {\r\n if (this._cacheStorage.getItem(key)) {\r\n this._cacheStorage.removeItem(key);\r\n }\r\n }\r\n }\r\n\r\n public setPendingRequest(value: string): void {\r\n this.setCacheEntry(MSAL_ACQUIRE_TOKEN_PENDING, value);\r\n }\r\n\r\n public hasPendingRequest(): boolean {\r\n return this.hasCacheEntry(MSAL_ACQUIRE_TOKEN_PENDING);\r\n }\r\n\r\n public clearPendingRequest(): void {\r\n this.clearCacheEntry(MSAL_ACQUIRE_TOKEN_PENDING);\r\n }\r\n\r\n public setPendingLogin(value: string): void {\r\n this.setCacheEntry(MSAL_LOGIN_PENDING, value);\r\n }\r\n\r\n public hasPendingLogin(): boolean {\r\n return this.hasCacheEntry(MSAL_LOGIN_PENDING);\r\n }\r\n\r\n public clearPendingLogin(): void {\r\n this.clearCacheEntry(MSAL_LOGIN_PENDING);\r\n }\r\n\r\n public setPendingRedirect(value: string): void {\r\n this.setCacheEntry(MSAL_PENDING_REDIRECT, value);\r\n }\r\n\r\n public hasPendingRedirect(): boolean {\r\n return this.hasCacheEntry(MSAL_PENDING_REDIRECT);\r\n }\r\n\r\n public clearPendingRedirect(): void {\r\n this.clearCacheEntry(MSAL_PENDING_REDIRECT);\r\n }\r\n}\r\n","import { IBaseItem, IHierarchialDataset } from \"./interfaces\";\r\nimport cloneDeep from \"lodash.clonedeep\";\r\n//import sortBy from \"lodash.sortby\";\r\nimport natsort from \"natsort\";\r\n\r\n/**\r\n * Purpose of this class to manage a IHierarchialDataset instance by traversing this tree for adding, updating, removing and moving items within that tree.\r\n */\r\nexport default class HierarchialDataManager {\r\n /**\r\n * Searches for an IBaseItem instance with the specified id and returns it. If no item was found, undefined is returned.\r\n * @param data IHierarchialDataset instance describing the dataset\r\n * @param id String containing the id of the item to search for.\r\n */\r\n public findItem(\r\n data: IHierarchialDataset,\r\n predicate: (value: IBaseItem) => boolean\r\n ): IBaseItem | undefined {\r\n let children: IBaseItem[] = [];\r\n let currentItem: IBaseItem | undefined;\r\n\r\n for (let child in data.children) {\r\n children.push(data.children[child]);\r\n }\r\n\r\n while (children.length > 0) {\r\n currentItem = children.pop();\r\n\r\n if (typeof currentItem !== \"undefined\") {\r\n if (predicate.apply(this, [currentItem])) {\r\n return currentItem;\r\n } else {\r\n if (currentItem.isLoaded && currentItem.children.length > 0) {\r\n for (let x = 0; x < currentItem.children.length; x++) {\r\n children.push(currentItem.children[x]);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Gets the IBaseItem instance using a path of indices by descending down the tree using these indices.\r\n * @param data IHierarchialDataset instance describing the dataset\r\n * @param indexPath Array of strings (integers in fact) describing the indices.\r\n */\r\n public getItem(\r\n data: IHierarchialDataset,\r\n indexPath: string[]\r\n ): IBaseItem | undefined {\r\n let currentIndexLevel: number = 0;\r\n let treeviewIndex: number = 0;\r\n let currentItem: IBaseItem | undefined;\r\n let children: IBaseItem[] = data.children;\r\n\r\n while (currentIndexLevel < indexPath.length) {\r\n treeviewIndex = Number(indexPath[currentIndexLevel]);\r\n\r\n if (treeviewIndex < children.length) {\r\n currentItem = children[treeviewIndex];\r\n\r\n if (currentItem.isLoaded) {\r\n children = currentItem.children;\r\n }\r\n\r\n currentIndexLevel++;\r\n } else {\r\n // This should not be possible\r\n break;\r\n }\r\n }\r\n\r\n return currentItem;\r\n }\r\n\r\n /**\r\n * Returns a array of IBaseItem instances representing the path of items to the target IBaseItem instance (starting from the root down the target item).\r\n * @param data IHierarchialDataset instance containing the items\r\n * @param item IBaseItem instance representing the item\r\n */\r\n public getItemPath(data: IHierarchialDataset, item: IBaseItem): IBaseItem[] {\r\n let currentParent: IBaseItem = item.parentItem;\r\n let trail: IBaseItem[] = [item];\r\n\r\n while (currentParent !== undefined) {\r\n trail.push(currentParent);\r\n currentParent = currentParent.parentItem;\r\n }\r\n\r\n return trail.reverse();\r\n }\r\n\r\n /**\r\n * Adds the specified item as a child item ans returns a shallow copy of the parent IBaseItem.\r\n * @param container IBaseItem instance representing the parent.\r\n * @param item New IBaseItem item instance\r\n */\r\n public addItemAsChild(\r\n container: IBaseItem,\r\n item: IBaseItem,\r\n children: IBaseItem[]\r\n ): IBaseItem {\r\n let shallowCopy: IBaseItem = cloneDeep(container);\r\n\r\n if (shallowCopy.isLoaded) {\r\n shallowCopy.children.push({\r\n ...item,\r\n parentItem: container,\r\n rootScope: container.rootScope,\r\n children: children,\r\n });\r\n\r\n // Sort commented, now the dialogbox is closed even after the last file\r\n // With this on sometimes the dialogbox is not closed after the last file\r\n //shallowCopy.children = this.sortItems(shallowCopy.children);\r\n\r\n let newIndex: number = shallowCopy.children.findIndex(\r\n (newChild: IBaseItem) => {\r\n return newChild.id === item.id;\r\n }\r\n );\r\n\r\n if (newIndex > -1) {\r\n shallowCopy.children[newIndex].indexPath = container.indexPath.concat([\r\n newIndex.toString(),\r\n ]);\r\n }\r\n }\r\n\r\n return shallowCopy;\r\n }\r\n\r\n public addItemAtRoot(\r\n data: IHierarchialDataset,\r\n item: IBaseItem\r\n ): IHierarchialDataset {\r\n let shallowCopy: IHierarchialDataset = cloneDeep(data);\r\n\r\n shallowCopy.children.push(item);\r\n shallowCopy.children = this.sortItems(shallowCopy.children);\r\n\r\n item.indexPath = [shallowCopy.children.indexOf(item).toString()];\r\n\r\n return shallowCopy;\r\n }\r\n\r\n /**\r\n * Performs a natural sort of the items in the specified array based on the expected results of a file/folder listing.\r\n * @param items Array containing IBaseItem instances.\r\n */\r\n private sortItems(items: IBaseItem[]): IBaseItem[] {\r\n const sorter = natsort({ insensitive: true });\r\n\r\n let containers: IBaseItem[] = items\r\n .filter((child: IBaseItem) => {\r\n return child.isContainer;\r\n })\r\n .sort((a: IBaseItem, b: IBaseItem) => {\r\n return sorter(a.displayName, b.displayName);\r\n });\r\n\r\n let children: IBaseItem[] = items\r\n .filter((child: IBaseItem) => {\r\n return !child.isContainer;\r\n })\r\n .sort((a: IBaseItem, b: IBaseItem) => {\r\n return sorter(a.displayName, b.displayName);\r\n });\r\n\r\n return [...containers, ...children];\r\n }\r\n\r\n /**\r\n * Adds the specified IBaseItem items as childrens to a cloned instance and returns an updated container.\r\n * @param container IBaseItem instance representing the parent of the new childrens.\r\n * @param children Array of IBaseItem instances representing the childrens.\r\n */\r\n public addItemsAsChildren(\r\n container: IBaseItem,\r\n children: IBaseItem[]\r\n ): IBaseItem {\r\n let shallowCopy: IBaseItem = cloneDeep(container);\r\n\r\n if (shallowCopy.isLoaded) {\r\n shallowCopy.children = shallowCopy.children.concat(children);\r\n }\r\n\r\n shallowCopy.children = this.sortItems(shallowCopy.children);\r\n\r\n children.forEach((newChild: IBaseItem, index: number) => {\r\n let newIndex: number = shallowCopy.children.findIndex(\r\n (currentChild: IBaseItem) => {\r\n if (\r\n currentChild.referenceId !== undefined &&\r\n newChild.referenceId !== undefined\r\n ) {\r\n return currentChild.referenceId === newChild.referenceId;\r\n } else {\r\n return currentChild.id === newChild.id;\r\n }\r\n }\r\n );\r\n\r\n if (newIndex > -1) {\r\n shallowCopy.children[newIndex].indexPath = container.indexPath.concat([\r\n newIndex.toString(),\r\n ]);\r\n }\r\n });\r\n\r\n return shallowCopy;\r\n }\r\n\r\n /**\r\n * Sets the IBaseItem instance in the IHierarchialDataset and returns a modified dataset instance with the updated item.\r\n * @param data IHierarchialDataset instance where the IBaseItem instance is located.\r\n * @param item IBaseItem instance\r\n */\r\n public setItem(\r\n data: IHierarchialDataset,\r\n item: IBaseItem\r\n ): IHierarchialDataset {\r\n let shallowCopy: IHierarchialDataset = cloneDeep(data);\r\n\r\n let currentIndexLevel: number = 0;\r\n let treeviewIndex: number = 0;\r\n let currentItem: IBaseItem | undefined;\r\n let children: IBaseItem[] = shallowCopy.children;\r\n\r\n while (currentIndexLevel < item.indexPath.length) {\r\n treeviewIndex = Number(item.indexPath[currentIndexLevel]);\r\n\r\n if (currentIndexLevel === item.indexPath.length - 1) {\r\n treeviewIndex = children.findIndex((baseItem: IBaseItem) => {\r\n if (\r\n baseItem.referenceId !== undefined &&\r\n baseItem.referenceId !== null &&\r\n item.referenceId !== undefined &&\r\n item.referenceId !== null\r\n ) {\r\n return baseItem.referenceId === item.referenceId;\r\n } else {\r\n return baseItem.id === item.id;\r\n }\r\n });\r\n\r\n if (treeviewIndex > -1) {\r\n children[treeviewIndex] = item;\r\n } else {\r\n console.warn(\r\n \"Reached index level of item but the item at that level is different then the item we are actually searching for. Therefore the item cannot be set in the tree.\"\r\n );\r\n }\r\n break;\r\n } else {\r\n currentItem = children[treeviewIndex];\r\n\r\n // We can only descent down when then item is loaded (has children)\r\n if (currentItem.isLoaded) {\r\n children = currentItem.children;\r\n }\r\n\r\n currentIndexLevel++;\r\n }\r\n }\r\n\r\n return shallowCopy;\r\n }\r\n\r\n /**\r\n * Checks if the specified child is actually an child from the container.\r\n * @param container IBaseItem instance representing the container\r\n * @param child IBaseItem instance representing the child\r\n * @returns true if the child is a descendant, else false.\r\n */\r\n public itemDescendantOf(container: IBaseItem, child: IBaseItem): boolean {\r\n let itemIndex: number = 0;\r\n\r\n let stack: IBaseItem[] = [];\r\n let currentItem: IBaseItem | undefined;\r\n\r\n stack.push(container);\r\n\r\n while (stack.length > 0) {\r\n currentItem = stack.pop();\r\n\r\n if (!currentItem) return false;\r\n\r\n if (currentItem.id === child.id) {\r\n return true;\r\n } else if (currentItem.children && currentItem.children.length) {\r\n for (\r\n itemIndex = 0;\r\n itemIndex < currentItem.children.length;\r\n itemIndex += 1\r\n ) {\r\n stack.push(currentItem.children[itemIndex]);\r\n }\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Resets the child in the specified container.\r\n * @param container IBaseItem instance representing the container\r\n * @param child IBaseItem instance representing the child\r\n * @returns Updated container instance\r\n */\r\n public resetItemInContainer(\r\n container: IBaseItem,\r\n child: IBaseItem\r\n ): IBaseItem {\r\n let shallowCopy: IBaseItem = cloneDeep(container);\r\n let itemIndex: number = 0;\r\n\r\n let stack: IBaseItem[] = [];\r\n let currentItem: IBaseItem | undefined;\r\n let currentChildren: IBaseItem[] = [];\r\n\r\n stack.push(shallowCopy);\r\n\r\n while (stack.length > 0) {\r\n currentItem = stack.pop();\r\n\r\n if (!currentItem) return shallowCopy;\r\n\r\n if (currentItem.id === child.id) {\r\n let childIndex: number = currentChildren.findIndex(\r\n (x) => x.id == child.id\r\n );\r\n\r\n currentChildren[childIndex] = {\r\n ...currentItem,\r\n isExpanded: false,\r\n isLoaded: false,\r\n children: [],\r\n };\r\n\r\n return shallowCopy;\r\n } else if (currentItem.children && currentItem.children.length) {\r\n currentChildren = currentItem.children;\r\n\r\n for (\r\n itemIndex = 0;\r\n itemIndex < currentItem.children.length;\r\n itemIndex += 1\r\n ) {\r\n stack.push(currentItem.children[itemIndex]);\r\n }\r\n }\r\n }\r\n\r\n return shallowCopy;\r\n }\r\n\r\n public resetItem(\r\n dataSet: IHierarchialDataset,\r\n item: IBaseItem | undefined\r\n ): IHierarchialDataset {\r\n if (!item) return dataSet;\r\n\r\n let shallowCopy: IHierarchialDataset = cloneDeep(dataSet);\r\n\r\n let currentIndexLevel: number = 0;\r\n let treeviewIndex: number = 0;\r\n let currentItem: IBaseItem | undefined;\r\n let children: IBaseItem[] = shallowCopy.children;\r\n let itemIsSet: boolean = false;\r\n\r\n while (currentIndexLevel < item.indexPath.length) {\r\n treeviewIndex = Number(item.indexPath[currentIndexLevel]);\r\n\r\n if (treeviewIndex < children.length) {\r\n if (currentIndexLevel === item.indexPath.length - 1) {\r\n children[treeviewIndex] = {\r\n ...item,\r\n isExpanded: false,\r\n isLoaded: false,\r\n children: [],\r\n };\r\n\r\n itemIsSet = true;\r\n break;\r\n } else {\r\n currentItem = children[treeviewIndex];\r\n\r\n // We can only descent down when then item is loaded (has children)\r\n if (currentItem.isLoaded) {\r\n children = currentItem.children;\r\n } else {\r\n // When the current item is not loaded, we cannot descent down to the children as they do not exists\r\n break;\r\n }\r\n\r\n currentIndexLevel++;\r\n }\r\n } else {\r\n // This should not be possible\r\n break;\r\n }\r\n }\r\n\r\n if (!itemIsSet) {\r\n console.warn(\r\n \"WARNING: Item could not be set using HierachialDataManager.setItem() as the item was not found using the indexPath\"\r\n );\r\n }\r\n\r\n return shallowCopy;\r\n }\r\n\r\n /**\r\n * Sets the item as a child of the specified IBaseItem container instance optionally using the predicate expression, else id-matching is performed.\r\n * @param container IBaseItem instance representing the container\r\n * @param child IBaseItem isntance representing the child\r\n * @param predicate Optional predicate to match the item to set.\r\n */\r\n public setItemAsChild(\r\n container: IBaseItem,\r\n child: IBaseItem,\r\n predicate?: (value: IBaseItem) => boolean\r\n ): IBaseItem {\r\n let shallowCopy: IBaseItem = cloneDeep(container);\r\n\r\n if (shallowCopy.isLoaded && shallowCopy.children.length > 0) {\r\n let itemIndex: number = shallowCopy.children.findIndex(\r\n (item: IBaseItem) => {\r\n if (predicate !== undefined) {\r\n return predicate.apply(this, [item]);\r\n } else {\r\n return item.id === child.id;\r\n }\r\n }\r\n );\r\n\r\n if (itemIndex > -1) {\r\n child = {\r\n ...child,\r\n parentItem: { ...shallowCopy, children: [] },\r\n indexPath: shallowCopy.indexPath.concat([itemIndex.toString()]),\r\n };\r\n\r\n shallowCopy.children[itemIndex] = child;\r\n }\r\n }\r\n\r\n return shallowCopy;\r\n }\r\n\r\n public setItemsAsChildren(\r\n container: IBaseItem,\r\n children: IBaseItem[],\r\n predicate?: (value: IBaseItem) => boolean\r\n ): IBaseItem {\r\n let shallowCopy: IBaseItem = cloneDeep(container);\r\n\r\n if (shallowCopy.isLoaded && shallowCopy.children.length > 0) {\r\n children.forEach((child: IBaseItem) => {\r\n let itemIndex: number = shallowCopy.children.findIndex(\r\n (item: IBaseItem) => {\r\n if (predicate !== undefined) {\r\n return predicate.apply(this, [item]);\r\n } else {\r\n return item.id === child.id;\r\n }\r\n }\r\n );\r\n\r\n if (itemIndex > -1) {\r\n child = {\r\n ...child,\r\n parentItem: shallowCopy,\r\n indexPath: shallowCopy.indexPath.concat([itemIndex.toString()]),\r\n };\r\n\r\n shallowCopy.children[itemIndex] = child;\r\n }\r\n });\r\n }\r\n\r\n return shallowCopy;\r\n }\r\n\r\n /**\r\n * Removes the IBaseItem instance in the IHierarchialDataset and returns a modified dataset instance with the updated item.\r\n * @param data IHierarchialDataset instance where the IBaseItem instance is located.\r\n * @param item IBaseItem instance\r\n */\r\n public removeItemFromRoot(\r\n data: IHierarchialDataset,\r\n item: IBaseItem\r\n ): IHierarchialDataset {\r\n let shallowCopy: IHierarchialDataset = cloneDeep(data);\r\n\r\n let currentIndexLevel: number = 0;\r\n let treeviewIndex: number = 0;\r\n let currentItem: IBaseItem | undefined;\r\n let children: IBaseItem[] = shallowCopy.children;\r\n\r\n while (currentIndexLevel < item.indexPath.length) {\r\n // Use the indexPath because real item index might be unknown on this level\r\n treeviewIndex = Number(item.indexPath[currentIndexLevel]);\r\n\r\n if (currentIndexLevel === item.indexPath.length - 1) {\r\n // Since we are on the right level, find real index of item and replace treeviewIndex\r\n // This is necessary because the indexPaths are not updated after an item removal\r\n treeviewIndex = children.findIndex((baseItem: IBaseItem) => {\r\n return baseItem.id === item.id;\r\n });\r\n\r\n if (treeviewIndex > -1) {\r\n children.splice(treeviewIndex, 1);\r\n } else {\r\n console.warn(\r\n \"Reached index level of item but the item at that level is different then the item we are actually searching for. Therefore the item cannot be removed from the tree.\"\r\n );\r\n }\r\n break;\r\n } else {\r\n currentItem = children[treeviewIndex];\r\n\r\n // We can only descent down when then item is loaded (has children)\r\n if (currentItem.isLoaded) {\r\n children = currentItem.children;\r\n }\r\n\r\n currentIndexLevel++;\r\n }\r\n }\r\n\r\n return shallowCopy;\r\n }\r\n\r\n /**\r\n * Removes the specified child IBaseItem instance from the container optionally using the predicate expression, else id-matching is performed.\r\n * @param container IBaseItem instance representing the container containing the child\r\n * @param child IBaseItem isntance representing the child to remove\r\n * @param predicate Optional predicate to match the item to remove.\r\n */\r\n public removeItemAsChild(\r\n container: IBaseItem,\r\n child: IBaseItem,\r\n predicate?: (value: IBaseItem) => boolean\r\n ): IBaseItem {\r\n let shallowCopy: IBaseItem = cloneDeep(container);\r\n\r\n if (shallowCopy.isLoaded && shallowCopy.children.length > 0) {\r\n let itemIndex: number = shallowCopy.children.findIndex(\r\n (item: IBaseItem) => {\r\n if (predicate !== undefined) {\r\n return predicate.apply(this, [item]);\r\n } else {\r\n if (child.referenceId !== undefined && child.referenceId !== null) {\r\n return item.referenceId === child.referenceId;\r\n } else {\r\n // console.log(\"try on id\", item.id, child.id);\r\n return item.id === child.id;\r\n }\r\n }\r\n }\r\n );\r\n\r\n if (itemIndex > -1) {\r\n shallowCopy.children.splice(itemIndex, 1);\r\n }\r\n }\r\n\r\n return shallowCopy;\r\n }\r\n\r\n /**\r\n *\r\n * @param data\r\n * @param previousParentId\r\n * @param newParentId\r\n */\r\n public moveItem(\r\n data: IHierarchialDataset,\r\n previousParentId: string,\r\n newParentId: string\r\n ): IHierarchialDataset {\r\n let clonedData: IHierarchialDataset = { ...data };\r\n\r\n // TODO\r\n\r\n return clonedData;\r\n }\r\n}\r\n","import {\r\n ISite,\r\n IDrive,\r\n IDriveItem,\r\n IUser,\r\n IList,\r\n IRootData,\r\n IConfigSetting,\r\n IHierarchialDataset,\r\n IHierarchialDataResult,\r\n IBaseItem,\r\n IOrganizationData,\r\n IErrorResult,\r\n IDriveItemResult,\r\n ISharingLinkData,\r\n IOperationStatus,\r\n IRecycleBin,\r\n IRecycleBinItem,\r\n} from \"./interfaces\";\r\nimport { HierarchialDataScope } from \"./enums\";\r\nimport {\r\n isSite,\r\n isDrive,\r\n isDriveItem,\r\n isRootDataServiceClient,\r\n isRecycleBin,\r\n} from \"../helpers/typeCheck\";\r\nimport cloneDeep from \"lodash.clonedeep\";\r\nimport { getErrorDescription } from \"../helpers/errorHelper\";\r\nimport { apiFetch } from \"../msal\";\r\nimport { request } from \"http\";\r\n\r\n/**\r\n * Proxy class used for communicating with the web api service.\r\n */\r\nexport default class ServiceClient {\r\n private _baseUrl: string = \"\";\r\n\r\n constructor() {\r\n this._baseUrl = `${window.location.origin}/api`;\r\n }\r\n\r\n /**\r\n * Helper method to perform HTTP POST request using the ApiFetch wrapper.\r\n * @param action Action method to execute\r\n * @param body Optional body to post.\r\n */\r\n private ApiRequest(\r\n action: string,\r\n body?: any,\r\n formData?: FormData\r\n ): Promise {\r\n let options: any = {\r\n headers: {\r\n accept: \"application/json;odata=verbose\",\r\n \"Content-Type\": \"application/json\",\r\n },\r\n };\r\n\r\n // Remove content type header if FormData is sent\r\n if (typeof formData !== \"undefined\") {\r\n delete options.headers[\"Content-Type\"];\r\n }\r\n\r\n // Extend the object if there is a body specified\r\n if (typeof body !== \"undefined\" || typeof formData !== \"undefined\") {\r\n options = {\r\n ...options,\r\n method: \"POST\",\r\n body: formData !== undefined ? formData : JSON.stringify(body),\r\n };\r\n }\r\n\r\n // Construct endpoint url\r\n const endpoint: string = `${this._baseUrl}/${action}`;\r\n\r\n // Return a promise for this request\r\n return new Promise((resolve, reject) => {\r\n apiFetch(endpoint, options)\r\n .then((response) => {\r\n const contentType: string | null =\r\n response.headers.get(\"content-type\");\r\n const isJson: boolean | \"\" | null =\r\n contentType && contentType.indexOf(\"application/json\") !== -1;\r\n\r\n if (response.ok) {\r\n if (isJson) {\r\n if (response.status !== 204) {\r\n return response.json();\r\n }\r\n } else {\r\n //only works with an empty resolve\r\n Promise.resolve();\r\n }\r\n } else {\r\n if (isJson) {\r\n // TODO: handle internet/browser issues where no IErrorResult is returned\r\n return response.json(); // IErrorResult\r\n } else {\r\n reject();\r\n }\r\n }\r\n })\r\n .then((json) => {\r\n resolve(json as T);\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Helper method to perform an anonymous HTTP POST (without the ApiFetch wrapper)\r\n * @param action Action method to execute\r\n * @param body Optional body to post.\r\n */\r\n private ApiRequestWithoutToken(action: string, body?: any): Promise {\r\n // Construct endpoint url\r\n const endpoint: string = `${this._baseUrl}/${action}`;\r\n\r\n // Return a promise for this request\r\n return new Promise((resolve) => {\r\n fetch(endpoint, {\r\n method: \"GET\",\r\n })\r\n .then((response) => {\r\n if (response.ok) {\r\n return response.json();\r\n } else {\r\n return response.status; // For example 400\r\n }\r\n })\r\n .then((json) => {\r\n resolve(json as T);\r\n });\r\n });\r\n }\r\n\r\n public async Get(action: string): Promise {\r\n let result: any = await this.ApiRequest(action);\r\n return result;\r\n }\r\n\r\n public async Post(action: string, body?: any): Promise {\r\n let result: any = this.ApiRequest(action, body);\r\n return result;\r\n }\r\n\r\n /**\r\n * Loads a dataset based on the specified HierarchialDataScope type\r\n * @param scope HierarchialDataScope type describing the type of dataset\r\n * @param dataSetName Name of the dataset\r\n * @param siteCollectionHostname Site collection host name to return the sites from\r\n */\r\n public loadDataSetAsync(\r\n scope: HierarchialDataScope,\r\n dataSetName: string,\r\n siteCollectionHostname: string\r\n ): Promise {\r\n return new Promise(\r\n (resolve, reject) => {\r\n let dataSet: IHierarchialDataset = {\r\n root: dataSetName,\r\n scope: scope,\r\n children: [],\r\n };\r\n\r\n // Depending on the scope, we have different endpoints to call\r\n if (scope === HierarchialDataScope.Favorites) {\r\n this.GetFollowedSites(siteCollectionHostname).then(\r\n (sites: ISite[] | IErrorResult) => {\r\n if ((sites as IErrorResult).internalErrorCode !== undefined) {\r\n resolve(sites as IErrorResult);\r\n } else {\r\n dataSet = {\r\n ...dataSet,\r\n children: (sites as ISite[]).map(\r\n (site: ISite, index: number) => {\r\n return {\r\n ...site,\r\n rootScope: scope,\r\n children: [],\r\n isContainer: true,\r\n isExpanded: false,\r\n isLoading: false,\r\n indexPath: [index.toString()],\r\n };\r\n }\r\n ),\r\n };\r\n\r\n resolve({\r\n updatedDataset: dataSet,\r\n });\r\n }\r\n }\r\n );\r\n } else if (scope === HierarchialDataScope.AllSites) {\r\n this.GetSites(undefined, siteCollectionHostname).then(\r\n (sites: ISite[] | IErrorResult) => {\r\n if ((sites as IErrorResult).internalErrorCode !== undefined) {\r\n resolve(sites as IErrorResult);\r\n } else {\r\n dataSet = {\r\n ...dataSet,\r\n children: (sites as ISite[]).map(\r\n (site: ISite, index: number) => {\r\n return {\r\n ...site,\r\n rootScope: scope,\r\n children: [],\r\n isContainer: true,\r\n isExpanded: false,\r\n isLoading: false,\r\n indexPath: [index.toString()],\r\n };\r\n }\r\n ),\r\n };\r\n\r\n resolve({\r\n updatedDataset: dataSet,\r\n });\r\n }\r\n }\r\n );\r\n } else if (scope === HierarchialDataScope.OneDrives) {\r\n this.GetOneDriveDrives().then((drives: IDrive[] | IErrorResult) => {\r\n if ((drives as IErrorResult).internalErrorCode !== undefined) {\r\n resolve(drives as IErrorResult);\r\n } else {\r\n dataSet = {\r\n ...dataSet,\r\n children: (drives as IDrive[]).map(\r\n (drive: IDrive, index: number) => {\r\n return {\r\n ...drive,\r\n rootScope: scope,\r\n displayName: drive.name,\r\n children: [],\r\n isContainer: true,\r\n isExpanded: false,\r\n isLoading: false,\r\n indexPath: [index.toString()],\r\n };\r\n }\r\n ),\r\n };\r\n\r\n resolve({\r\n updatedDataset: dataSet,\r\n });\r\n }\r\n });\r\n }\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Loads the specified IBaseItem instance and returns a modified IHierarchialDataset instance which can be used for a setState call.\r\n * @param data IHierarchialDataset instance containing the IBaseItem instance which is to be loaded.\r\n * @param item IBaseItem instance wich can be a ISite, IDrive or IDriveItem which have the isContainer flag set.\r\n */\r\n public loadItemAsync(\r\n data: IHierarchialDataset,\r\n item: IBaseItem | IRecycleBin,\r\n recycleBinLabel?: string\r\n ): Promise {\r\n return new Promise(\r\n (resolve, reject) => {\r\n let requests: Promise[] = [];\r\n\r\n if (!item.isContainer) {\r\n reject(\"Only IBaseItem which are containers can be loaded\");\r\n return;\r\n }\r\n\r\n if (isDriveItem(item)) {\r\n let driveItem: IDriveItem = item as IDriveItem;\r\n requests = [\r\n this.GetDriveItems(\r\n driveItem.driveId,\r\n item.id,\r\n data.scope === HierarchialDataScope.OneDrives,\r\n driveItem.path\r\n ),\r\n ];\r\n } else if (isDrive(item)) {\r\n let drive: IDrive = item as IDrive;\r\n requests = [\r\n this.GetDriveItems(\r\n drive.id,\r\n drive.id,\r\n data.scope === HierarchialDataScope.OneDrives\r\n ),\r\n ];\r\n } else if (isSite(item)) {\r\n requests = [this.GetSites(item.id), this.GetDrives(item.id)];\r\n\r\n if (recycleBinLabel) {\r\n requests.push(this.GetRecycleBin(item, recycleBinLabel));\r\n }\r\n } else if (isRecycleBin(item)) {\r\n const parentItem: ISite = item.parentItem as ISite;\r\n\r\n requests = [this.GetRecycleBinItems(parentItem.webUrl)];\r\n }\r\n\r\n Promise.all(requests).then(\r\n (results: (IBaseItem[] | IRecycleBin | IErrorResult)[]) => {\r\n if (\r\n (results as IErrorResult[])[0].internalErrorCode !== undefined\r\n ) {\r\n resolve((results as IErrorResult[])[0]);\r\n } else if (\r\n (results as IErrorResult[])[results.length - 1]\r\n .internalErrorCode !== undefined\r\n ) {\r\n resolve((results as IErrorResult[])[results.length - 1]);\r\n } else {\r\n let shallowItem: IBaseItem = cloneDeep(item as IBaseItem);\r\n\r\n shallowItem = {\r\n ...shallowItem,\r\n children: [],\r\n isLoaded: true,\r\n isLoading: false,\r\n isExpanded: false,\r\n };\r\n\r\n (results as IBaseItem[][]).forEach(\r\n (newChildrens: IBaseItem[], index: number) => {\r\n shallowItem = {\r\n ...shallowItem,\r\n children: [\r\n ...shallowItem.children.concat(newChildrens),\r\n ].map((newChild: IBaseItem, index: number) => {\r\n return {\r\n ...newChild,\r\n rootScope: shallowItem.rootScope,\r\n parentItem: shallowItem,\r\n indexPath:\r\n shallowItem.indexPath &&\r\n shallowItem.indexPath.concat([index.toString()]),\r\n isExpanded: false,\r\n isLoading: false,\r\n };\r\n }),\r\n };\r\n }\r\n );\r\n\r\n resolve(shallowItem);\r\n }\r\n }\r\n );\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Returns the recyclebin retreived from the specified site.\r\n * @param siteId String containing the id of the site to get the lists from.\r\n */\r\n private GetRecycleBin(\r\n site: IBaseItem,\r\n label: string\r\n ): Promise {\r\n return new Promise((resolve, reject) => {\r\n resolve({\r\n displayName: label,\r\n id: \"rb\" + site.displayName,\r\n children: [],\r\n parentItem: site,\r\n rootScope: site.rootScope,\r\n isContainer: true,\r\n isLoading: false,\r\n isLoaded: false,\r\n isExpanded: false,\r\n indexPath: [],\r\n size: 0,\r\n } as IRecycleBin);\r\n });\r\n }\r\n\r\n /**\r\n * Returns a list of OneDrives scope to the specified site name.\r\n * @param siteName String containing the name of the site.\r\n */\r\n private GetOneDriveDrives(): Promise {\r\n return new Promise((resolve, reject) => {\r\n this.ApiRequest(\"oneDriveDrives\").then(\r\n (items: IDrive[] | IErrorResult) => {\r\n resolve(items);\r\n }\r\n );\r\n });\r\n }\r\n\r\n /**\r\n * Returns a list of ISite instances describing the user's favorite sites.\r\n */\r\n private GetFollowedSites(\r\n siteCollectionHostname?: string\r\n ): Promise {\r\n return new Promise((resolve, reject) => {\r\n let body: any = undefined;\r\n\r\n // When the sitecollection hostname is specified we have to get the rootsites and exclude the sites when needed\r\n // Excluded sites are stored in Azure and are excluded in the Api\r\n if (typeof siteCollectionHostname !== \"undefined\") {\r\n body = { siteCollectionHostname: siteCollectionHostname };\r\n }\r\n\r\n this.ApiRequest(\"followedsites\", body).then(\r\n (sites: ISite[] | IErrorResult) => {\r\n if ((sites as IErrorResult).internalErrorCode !== undefined) {\r\n resolve(sites as IErrorResult);\r\n } else {\r\n resolve(\r\n (sites as ISite[]).map((site: ISite, index: number) => {\r\n return {\r\n ...site,\r\n isContainer: true,\r\n index: index,\r\n };\r\n })\r\n );\r\n }\r\n }\r\n );\r\n });\r\n }\r\n\r\n /**\r\n * Returns a list of ISite instances describing the sites retreived from the specified (optional) site level.\r\n * @param siteId (Optional) string containing the id of the parent site\r\n * @param siteCollectionHostname (Optional) string containing the tenantname to exclude sites\r\n */\r\n private GetSites(\r\n siteId?: string,\r\n siteCollectionHostname?: string\r\n ): Promise {\r\n return new Promise((resolve, reject) => {\r\n let actionName: string = \"\";\r\n let body: any = undefined;\r\n\r\n // When the sitecollection hostname is specified we have to get the rootsites and exclude the sites when needed\r\n // Excluded sites are stored in Azure and are excluded in the Api\r\n if (typeof siteCollectionHostname !== \"undefined\") {\r\n actionName = \"rootsites\";\r\n body = { siteCollectionHostname: siteCollectionHostname };\r\n }\r\n\r\n // When a siteId is specified, we need to get the subsites from it using a different action.\r\n if (typeof siteId !== \"undefined\") {\r\n actionName = \"subsites\";\r\n body = { siteId: siteId };\r\n }\r\n\r\n this.ApiRequest(actionName, body).then(\r\n (sites: ISite[] | IErrorResult) => {\r\n if ((sites as IErrorResult).internalErrorCode !== undefined) {\r\n resolve(sites as IErrorResult);\r\n } else {\r\n resolve(\r\n (sites as ISite[]).map((site: ISite, index: number) => {\r\n return {\r\n ...site,\r\n isContainer: true,\r\n index: index,\r\n };\r\n })\r\n );\r\n }\r\n }\r\n );\r\n });\r\n }\r\n\r\n /**\r\n * Returns a list of IDrive instances describing the SharePoint lists retreived from the specified site.\r\n * @param siteId String containing the id of the site to get the lists from.\r\n */\r\n private GetDrives(siteId: string): Promise {\r\n return new Promise((resolve, reject) => {\r\n this.ApiRequest(\"drives\", {\r\n siteId: siteId,\r\n }).then((drives: IDrive[] | IErrorResult) => {\r\n if ((drives as IErrorResult).internalErrorCode !== undefined) {\r\n resolve(drives as IErrorResult);\r\n } else {\r\n resolve(\r\n (drives as IDrive[]).map((drive: IDrive, index: number) => {\r\n return {\r\n ...drive,\r\n displayName: drive.name,\r\n isContainer: true,\r\n index: index,\r\n } as IDrive;\r\n })\r\n );\r\n }\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Returns a list of IDriveItem instances describing the SharePoint drive items inside a drive.\r\n * @param driveId String containing the id of the drive to return the items from\r\n * @param parentId String containing the id of the parent drive item to return the items from\r\n * @param folderPath (Optional) String to return folders from a nested folder\r\n */\r\n private GetDriveItems(\r\n driveId: string,\r\n parentId: string,\r\n driveIsOneDrive: boolean,\r\n folderPath?: string\r\n ): Promise {\r\n return new Promise((resolve, reject) => {\r\n this.ApiRequest(\"items\", {\r\n driveId: driveId,\r\n parentId: parentId,\r\n Path: folderPath,\r\n DriveIsOneDrive: driveIsOneDrive,\r\n }).then((driveItems: IDriveItem[] | IErrorResult) => {\r\n // If error then return the error model\r\n if ((driveItems as IErrorResult).internalErrorCode !== undefined) {\r\n return resolve(driveItems);\r\n }\r\n resolve(\r\n (driveItems as IDriveItem[]).map(\r\n (driveItem: IDriveItem, index: number) => {\r\n return {\r\n ...driveItem,\r\n name: driveItem.name,\r\n displayName: driveItem.name,\r\n isContainer: driveItem.isFolder,\r\n isSelected: false,\r\n index: index,\r\n path:\r\n folderPath !== undefined\r\n ? `${folderPath}/${driveItem.name}`\r\n : `${driveItem.name}`,\r\n };\r\n }\r\n )\r\n );\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Returns a list of IDriveItem instances describing the SharePoint drive items inside the RecycleBin\r\n * @param driveId String containing the id of the drive to return the items from\r\n * @param parentId String containing the id of the parent drive item to return the items from\r\n * @param folderPath (Optional) String to return folders from a nested folder\r\n */\r\n private GetRecycleBinItems(\r\n siteUrl: string,\r\n folderPath?: string\r\n ): Promise {\r\n return new Promise((resolve, reject) => {\r\n this.ApiRequest(\"recycleBinItems\", {\r\n siteUrl: siteUrl,\r\n Path: folderPath,\r\n }).then((driveItems: IRecycleBinItem[] | IErrorResult) => {\r\n // If error then return the error model\r\n if ((driveItems as IErrorResult).internalErrorCode !== undefined) {\r\n return resolve(driveItems);\r\n }\r\n\r\n resolve(\r\n (driveItems as IRecycleBinItem[]).map(\r\n (driveItem: IRecycleBinItem, index: number) => {\r\n return {\r\n ...driveItem,\r\n name: driveItem.name,\r\n displayName: driveItem.name,\r\n isContainer: driveItem.isFolder,\r\n index: index,\r\n path:\r\n folderPath !== undefined\r\n ? `${folderPath}/${driveItem.name}`\r\n : `${driveItem.name}`,\r\n };\r\n }\r\n )\r\n );\r\n });\r\n });\r\n }\r\n\r\n public DeleteItemsAsync(items: IBaseItem[]): Promise {\r\n return new Promise((resolve, reject) => {\r\n let driveItems: IDriveItem[] = items as IDriveItem[];\r\n this.ApiRequest(\"items/remove\", {\r\n driveId: driveItems[0].driveId,\r\n itemIds: driveItems.map((item) => {\r\n return item.id;\r\n }),\r\n }).then((error: IErrorResult | void) => {\r\n if (error !== undefined) {\r\n resolve(error as IErrorResult);\r\n } else {\r\n resolve();\r\n }\r\n });\r\n });\r\n }\r\n\r\n public CheckOperationStatusAsync(\r\n monitorUrl: string\r\n ): Promise {\r\n return this.ApiRequest(\"checkOperationStatus\", {\r\n WebUrl: monitorUrl,\r\n });\r\n }\r\n\r\n public DeleteRecycleBinItemAsync(\r\n driveId: string\r\n ): Promise {\r\n return new Promise((resolve, reject) => {\r\n this.ApiRequest(\"item/deleteRecycleBinItem\", {\r\n driveId: driveId,\r\n }).then((error: IErrorResult | void) => {\r\n if (error !== undefined) {\r\n resolve(error as IErrorResult);\r\n } else {\r\n resolve();\r\n }\r\n });\r\n });\r\n }\r\n\r\n public EmptyRecycleBinAsync(webUrl: string): Promise {\r\n return new Promise((resolve, reject) => {\r\n this.ApiRequest(\"item/emptyRecycleBin\", {\r\n webUrl: webUrl,\r\n }).then((error: IErrorResult | void) => {\r\n if (error !== undefined) {\r\n resolve(error as IErrorResult);\r\n } else {\r\n resolve();\r\n }\r\n });\r\n });\r\n }\r\n\r\n public RestoreItemAsync(\r\n webUrl: string,\r\n itemId: string\r\n ): Promise {\r\n return new Promise((resolve, reject) => {\r\n this.ApiRequest(\"item/restore\", {\r\n webUrl: webUrl,\r\n itemId: itemId,\r\n }).then((error: IErrorResult | void) => {\r\n if (error !== undefined) {\r\n resolve(error as IErrorResult);\r\n } else {\r\n resolve();\r\n }\r\n });\r\n });\r\n }\r\n\r\n public RenameItemAsync(\r\n item: IBaseItem,\r\n name: string\r\n ): Promise {\r\n return new Promise((resolve, reject) => {\r\n let driveItem: IDriveItem = item as IDriveItem;\r\n\r\n this.ApiRequest(\"item/rename\", {\r\n driveId: driveItem.driveId,\r\n itemId: driveItem.id,\r\n parentId: driveItem.parentItem.id,\r\n name: name,\r\n driveIsOneDrive: driveItem.driveIsOneDrive,\r\n //filePath: driveItem.parentItem.path\r\n webUrl: driveItem.webUrl,\r\n }).then((result: IDriveItem | IErrorResult) => {\r\n if ((result as IErrorResult).internalErrorCode !== undefined) {\r\n reject(result);\r\n } else {\r\n let driveItemResult = result as IDriveItem;\r\n resolve({\r\n ...item,\r\n name: driveItemResult.name,\r\n displayName: driveItemResult.name,\r\n path: item.parentItem.path + \"/\" + driveItemResult.name,\r\n isUpdating: false,\r\n } as IDriveItem);\r\n }\r\n });\r\n });\r\n }\r\n\r\n // To do: return http status: 200 OK with driveItem (success) or other (fail)\r\n // The above refactor is important to let the user know whether his action was successful or not (!)\r\n public MoveDriveItems(\r\n sourceDriveItem: IDriveItem,\r\n sourceDriveItemIds: string[],\r\n sourceDriveItemNames: string[],\r\n sourceDriveItemReferences: string[],\r\n destinationDriveId: string,\r\n destinationItemId: string,\r\n destinationFolderPath: string,\r\n destinationIsOneDrive: boolean\r\n ): Promise {\r\n return new Promise((resolve, reject) => {\r\n this.ApiRequest(\"items/move\", {\r\n DriveId: sourceDriveItem.driveId,\r\n ItemIds: sourceDriveItemIds,\r\n ItemNames: sourceDriveItemNames,\r\n DriveIsOneDrive: sourceDriveItem.driveIsOneDrive,\r\n ItemReferenceIds: sourceDriveItemReferences,\r\n destinationDriveId: destinationDriveId,\r\n destinationItemId: destinationItemId,\r\n destinationIsOneDrive: destinationIsOneDrive,\r\n destinationPath: `${\r\n typeof destinationFolderPath !== \"undefined\"\r\n ? destinationFolderPath\r\n : \"\"\r\n }/${sourceDriveItem.displayName}`,\r\n }).then((result: any | IErrorResult) => {\r\n if ((result as IErrorResult).internalErrorCode !== undefined) {\r\n reject(result);\r\n } else {\r\n resolve(result);\r\n }\r\n });\r\n });\r\n }\r\n\r\n // To do: return http status: 200 OK with driveItem (success) or other (fail)\r\n // The above refactor is important to let the user know whether his action was successful or not (!)\r\n public CopyDriveItems(\r\n sourceDriveItem: IDriveItem,\r\n sourceDriveItemIds: string[],\r\n sourceDriveItemNames: string[],\r\n destinationDriveId: string,\r\n destinationItemId: string,\r\n destinationFolderPath: string,\r\n destinationIsOneDrive: boolean\r\n ): Promise {\r\n return new Promise((resolve, reject) => {\r\n this.ApiRequest(\"items/copy\", {\r\n DriveId: sourceDriveItem.driveId,\r\n ItemIds: sourceDriveItemIds,\r\n ItemNames: sourceDriveItemNames,\r\n DriveIsOneDrive: sourceDriveItem.driveIsOneDrive,\r\n destinationDriveId: destinationDriveId,\r\n destinationItemId: destinationItemId,\r\n destinationIsOneDrive: destinationIsOneDrive,\r\n destinationPath: `${\r\n typeof destinationFolderPath !== \"undefined\"\r\n ? destinationFolderPath\r\n : \"\"\r\n }/${sourceDriveItem.displayName}`,\r\n }).then((result: string[] | IErrorResult) => {\r\n if ((result as IErrorResult).internalErrorCode !== undefined) {\r\n reject(result);\r\n } else {\r\n resolve(result as string[]);\r\n }\r\n });\r\n });\r\n }\r\n\r\n public GetUser(): Promise {\r\n return new Promise((resolve, reject) => {\r\n this.ApiRequest(\"user\", {})\r\n .then((user: IUser) => {\r\n resolve(user);\r\n })\r\n .catch((reason: any) => {\r\n console.error(\"Exception in GetUser:\", reason);\r\n reject (reason);\r\n });\r\n });\r\n }\r\n\r\n public GetConfigSetting(): Promise {\r\n return new Promise((resolve, reject) => {\r\n this.ApiRequestWithoutToken(\"config\", {}).then(\r\n (config: IConfigSetting) => {\r\n resolve(config);\r\n }\r\n );\r\n });\r\n }\r\n\r\n public GetRootData(): Promise {\r\n return new Promise((resolve, reject) => {\r\n this.ApiRequest(\"rootdata\", {})\r\n .then((rootdata: IRootData) => {\r\n const isRootData: boolean = isRootDataServiceClient(rootdata);\r\n if (isRootData) resolve(rootdata);\r\n else {\r\n const errorCode: string = rootdata as unknown as string;\r\n throw new Error(errorCode);\r\n }\r\n })\r\n .catch((reason: string) => {\r\n const httpStatusCode: number = +reason\r\n .toString()\r\n .replace(\"Error: \", \"\");\r\n\r\n const errorDescription: string = getErrorDescription(\r\n httpStatusCode,\r\n \"en\"\r\n );\r\n\r\n console.warn(\"Warning in GetRootData: \", reason, errorDescription);\r\n reject(reason); // Catch of parent method is executed.\r\n });\r\n });\r\n }\r\n\r\n public ResolveSPList(siteId: string, driveUrl: string): Promise {\r\n return new Promise((resolve, reject) => {\r\n this.ApiRequest(\"list\", {\r\n siteId: siteId,\r\n webUrl: driveUrl,\r\n }).then((list: IList | IErrorResult) => {\r\n if ((list as IErrorResult).internalErrorCode !== undefined) {\r\n reject(list as IErrorResult);\r\n } else {\r\n resolve(list as IList);\r\n }\r\n });\r\n });\r\n }\r\n\r\n public FollowSite(siteId: string): Promise {\r\n return new Promise((resolve, reject) => {\r\n this.ApiRequest(\"follow\", siteId).then(\r\n () => {\r\n resolve(true);\r\n },\r\n () => {\r\n resolve(false);\r\n }\r\n );\r\n });\r\n }\r\n\r\n public UnfollowSite(siteId: string): Promise {\r\n return new Promise((resolve, reject) => {\r\n this.ApiRequest(\"unfollow\", siteId).then(\r\n () => {\r\n resolve(true);\r\n },\r\n () => {\r\n resolve(false);\r\n }\r\n );\r\n });\r\n }\r\n\r\n public IsTenantLicenseValid(): Promise {\r\n return new Promise((resolve, reject) => {\r\n this.ApiRequest(\"isTenantLicenseValid\", {}).then(\r\n (result: boolean) => {\r\n resolve(result);\r\n }\r\n );\r\n });\r\n }\r\n\r\n public GetOrganizationData(): Promise {\r\n return new Promise((resolve, reject) => {\r\n this.ApiRequest(\"organizationData\", {}).then(\r\n (organizationData: IOrganizationData) => {\r\n resolve(organizationData);\r\n }\r\n );\r\n });\r\n }\r\n\r\n public CreateDocument(body: any): Promise {\r\n return new Promise((resolve, reject) => {\r\n this.ApiRequest(\"item/newDocument\", body).then(\r\n (result: IDriveItem | IErrorResult) => {\r\n if ((result as IErrorResult).internalErrorCode !== undefined) {\r\n reject(result as IErrorResult);\r\n } else {\r\n resolve(result as IDriveItem);\r\n }\r\n }\r\n );\r\n });\r\n }\r\n\r\n public CreateFolder(body: any): Promise {\r\n return new Promise((resolve, reject) => {\r\n this.ApiRequest(\"item/addFolder\", body).then(\r\n (result: IDriveItem | IErrorResult) => {\r\n if ((result as IErrorResult).internalErrorCode !== undefined) {\r\n reject(result as IErrorResult);\r\n } else {\r\n resolve(result as IDriveItem);\r\n }\r\n }\r\n );\r\n });\r\n }\r\n\r\n public CreateFile(formData: any): Promise {\r\n return new Promise((resolve, reject) => {\r\n this.ApiRequest(\"item/addFile\", undefined, formData).then(\r\n (result: IDriveItem | IErrorResult) => {\r\n if ((result as IErrorResult).internalErrorCode !== undefined) {\r\n reject(result as IErrorResult);\r\n } else {\r\n resolve(result as IDriveItem);\r\n }\r\n }\r\n );\r\n });\r\n }\r\n\r\n public CreateShareLink(\r\n item: IDriveItem,\r\n siteOrOneDriveUrl: string,\r\n driveIsOneDrive: boolean\r\n ): Promise {\r\n return new Promise((resolve, reject) => {\r\n this.ApiRequest(\"item/createShareLink\", {\r\n driveId: item.driveId,\r\n itemId: item.id,\r\n siteOrOneDriveUrl: siteOrOneDriveUrl,\r\n driveIsOneDrive: driveIsOneDrive,\r\n }).then((result: ISharingLinkData | IErrorResult) => {\r\n if ((result as IErrorResult).internalErrorCode !== undefined) {\r\n reject(result as IErrorResult);\r\n } else {\r\n resolve(result as ISharingLinkData);\r\n }\r\n });\r\n });\r\n }\r\n}\r\n","import * as Localization from \"../components/Translate\";\r\n\r\nexport const getErrorDescription = (\r\n httpStatusCode: number,\r\n languageCode: string\r\n): string => {\r\n const language: string = languageCode.substring(0, 2);\r\n const errors = Localization.getLanguagesErrors(language);\r\n\r\n const description = errors\r\n .filter(m => m.HTTPstatuscode === httpStatusCode)\r\n .map(x => x.Description)[0];\r\n\r\n return description;\r\n};\r\n","// temporary placeholder\r\nimport {\r\n IClient,\r\n ITemplate,\r\n OfficeHostType,\r\n ISite,\r\n IDocumentLibrary,\r\n IDriveItemList,\r\n} from \"@iexpertsnl/templates-ui\";\r\nimport {\r\n ILicensingService,\r\n ILicensingContext,\r\n LicensingServiceFactory,\r\n} from \"@iexpertsnl/licensing-core\";\r\nimport * as authContext from \"../msal\";\r\nimport ServiceClient from \"./ServiceClient\";\r\nimport { IDriveItem, IErrorResult } from \"./interfaces\";\r\nimport natsort from \"natsort\";\r\n\r\nclass Settings {\r\n public name: string | undefined;\r\n public templatesSite: string | undefined;\r\n public templatesDocumentLibrary: string | undefined;\r\n}\r\n\r\nexport class Client implements IClient {\r\n private serviceClient: ServiceClient;\r\n private static client: Client;\r\n private settings: Settings | undefined;\r\n\r\n private constructor(client: ServiceClient) {\r\n this.serviceClient = client;\r\n }\r\n\r\n public static async GetClient(serviceClient: ServiceClient): Promise {\r\n if (Client.client) return Client.client;\r\n\r\n Client.client = new Client(serviceClient);\r\n let success = await Client.client.LoadSettings();\r\n if (!success) {\r\n (Client.client as any) = undefined;\r\n throw new Error(\"Failed to initialize client\");\r\n }\r\n\r\n return Client.client;\r\n }\r\n\r\n private async LoadSettings(): Promise {\r\n try {\r\n let settings = await this.serviceClient.Get(\r\n `templates/settings/tenant`\r\n );\r\n this.settings = settings;\r\n if (this.settings) {\r\n if (!this.settings.templatesSite) this.settings.templatesSite = \"root\";\r\n if (!this.settings.templatesDocumentLibrary)\r\n this.settings.templatesDocumentLibrary = \"Templates\";\r\n\r\n return true;\r\n }\r\n } catch {}\r\n\r\n return false;\r\n }\r\n\r\n public async GetLicense(): Promise {\r\n try {\r\n const licensingService: ILicensingService =\r\n LicensingServiceFactory.GetService(\r\n {\r\n enableLogging: true,\r\n proxyRequestHost: window.location.host,\r\n },\r\n await authContext.getToken()\r\n );\r\n\r\n const userId: string | undefined = authContext.getUniqueUserId();\r\n if (userId) {\r\n let licensingContext: ILicensingContext =\r\n await licensingService.AcquireLicenseForProductAndFeatures(\r\n \"easymail\",\r\n [\"word-templates\"],\r\n userId || \"\"\r\n );\r\n\r\n return licensingContext.isValid || false;\r\n } else {\r\n return false;\r\n }\r\n } catch {\r\n return false;\r\n }\r\n }\r\n\r\n // ToDo: move cache things to NPM package\r\n // expiration in minutes\r\n private SetCache(key: string, value: string, expiration: number = 0) {\r\n try {\r\n localStorage.setItem(key, value);\r\n if (expiration > 0) {\r\n let expires = Date.now() + expiration * 60 * 1000;\r\n localStorage.setItem(key + \"_exp\", expires.toString());\r\n }\r\n } catch {}\r\n }\r\n\r\n private GetCache(key: string) {\r\n try {\r\n let exp = localStorage.getItem(key + \"_exp\");\r\n let value = localStorage.getItem(key);\r\n if (exp) {\r\n try {\r\n let expiration = parseInt(exp, 10);\r\n if (Date.now() < expiration) {\r\n return value;\r\n }\r\n } catch {\r\n return value;\r\n }\r\n } else {\r\n return value;\r\n }\r\n } catch {}\r\n\r\n return undefined;\r\n }\r\n\r\n private async loadListItems(\r\n siteId: string,\r\n listId: string\r\n ): Promise {\r\n let cache = this.GetCache(\"Templates\");\r\n if (cache) {\r\n try {\r\n let cachedTemplates: ITemplate[] = JSON.parse(cache);\r\n if (cachedTemplates && cachedTemplates.length > 0)\r\n return cachedTemplates;\r\n } catch {}\r\n }\r\n\r\n const site = await this.serviceClient.Get(`templates/sites/${siteId}`);\r\n const templateResult = await this.serviceClient.Get(\r\n `templates/sites/${siteId}/lists/${listId}/items?&top=2000&orderBy=fields/Title&withDriveItem=true`\r\n );\r\n\r\n let templates: ITemplate[] = [];\r\n if (templateResult.count > 0 && templateResult.items) {\r\n templateResult.items.forEach((item: any) => {\r\n try {\r\n let name = item.fields[\"LinkFilename\"];\r\n let hostType = OfficeHostType.Unknown;\r\n if (item.fields[\"FileLeafRef\"].endsWith(\"docx\")) {\r\n hostType = OfficeHostType.Word;\r\n name = name.replace(\".docx\", \"\");\r\n } else if (item.fields[\"FileLeafRef\"].endsWith(\"xlsx\")) {\r\n hostType = OfficeHostType.Excel;\r\n name = name.replace(\".xlsx\", \"\");\r\n } else if (item.fields[\"FileLeafRef\"].endsWith(\"pptx\")) {\r\n hostType = OfficeHostType.PowerPoint;\r\n name = name.replace(\".pptx\", \"\");\r\n }\r\n\r\n let imgURL = \"\";\r\n try {\r\n // drive thumnail preview\r\n let thumbnails = item.driveItem[\"thumbnails\"];\r\n if (item.fields[\"Image\"]) {\r\n let imgObj = JSON.parse(item.fields[\"Image\"]);\r\n imgURL = imgObj.serverUrl + imgObj.serverRelativeUrl;\r\n } else if (thumbnails && thumbnails.length > 0) {\r\n imgURL = thumbnails[0].medium.url;\r\n }\r\n } catch {}\r\n\r\n let docPreview = \"\";\r\n try {\r\n let etag: string = item.fields[\"@odata.etag\"];\r\n if (etag && site.webUrl) {\r\n let docID = etag.replace('\"', \"\").split(\",\")[0];\r\n docPreview = `${site.webUrl}/_layouts/15/Doc.aspx?sourcedoc={${docID}}&action=interactivepreview`;\r\n }\r\n } catch {}\r\n\r\n let tags: string[] = [];\r\n try {\r\n let keywordString = item.fields[\"Keywords\"];\r\n let keywords = keywordString.split(\";\");\r\n keywords.forEach((element: string) => {\r\n tags.push(element.trim());\r\n });\r\n } catch {}\r\n\r\n let template: ITemplate = {\r\n id: item.driveItem[\"id\"],\r\n title: name,\r\n name: item.fields[\"FileLeafRef\"],\r\n description: item.fields[\"Description\"],\r\n parentReference: {\r\n driveId: item.driveItem[\"driveId\"],\r\n siteId: item.driveItem[\"siteId\"],\r\n folderId: item.driveItem[\"parentId\"],\r\n },\r\n webURL: item.driveItem[\"webUrl\"],\r\n docPreviewUrl: docPreview,\r\n hostType: hostType,\r\n imageURL: imgURL,\r\n tags: tags,\r\n };\r\n\r\n templates.push(template);\r\n } catch {}\r\n });\r\n }\r\n\r\n const sorter = natsort({ insensitive: true });\r\n templates.sort((a: ITemplate, b: ITemplate) => {\r\n return sorter(a.name, b.name);\r\n });\r\n\r\n this.SetCache(\"Templates\", JSON.stringify(templates), 30);\r\n return templates;\r\n }\r\n\r\n public async GetWordTemplates(): Promise {\r\n try {\r\n if (this.settings) {\r\n let templates: ITemplate[] = await this.loadListItems(\r\n this.settings.templatesSite || \"\",\r\n this.settings.templatesDocumentLibrary || \"\"\r\n );\r\n let wordTemplates = templates.filter(\r\n (t) => t.hostType == OfficeHostType.Word\r\n );\r\n\r\n return wordTemplates;\r\n }\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n return [];\r\n }\r\n\r\n public async GetPowerPointTemplates(): Promise {\r\n try {\r\n if (this.settings) {\r\n let templates: ITemplate[] = await this.loadListItems(\r\n this.settings.templatesSite || \"\",\r\n this.settings.templatesDocumentLibrary || \"\"\r\n );\r\n let wordTemplates = templates.filter(\r\n (t) => t.hostType == OfficeHostType.PowerPoint\r\n );\r\n\r\n return wordTemplates;\r\n }\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n return [];\r\n }\r\n\r\n public async GetExcelTemplates(): Promise {\r\n try {\r\n if (this.settings) {\r\n let templates: ITemplate[] = await this.loadListItems(\r\n this.settings.templatesSite || \"\",\r\n this.settings.templatesDocumentLibrary || \"\"\r\n );\r\n let wordTemplates = templates.filter(\r\n (t) => t.hostType == OfficeHostType.Excel\r\n );\r\n\r\n return wordTemplates;\r\n }\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n return [];\r\n }\r\n\r\n public async CopyFile(\r\n source: ITemplate,\r\n target: ITemplate\r\n ): Promise {\r\n let result = await this.serviceClient.Post(\r\n \"templates/copy\",\r\n {\r\n DriveId: source.parentReference.driveId,\r\n ItemIds: [source.id],\r\n ItemNames: [source.name],\r\n DriveIsOneDrive: false, // not relevant for template copy\r\n destinationDriveId: target.parentReference.driveId,\r\n destinationItemId: target.parentReference.folderId,\r\n destinationIsOneDrive: false,\r\n destinationPath: \"\",\r\n destinationNames: [target.name],\r\n }\r\n );\r\n\r\n if ((result as IErrorResult).internalErrorCode !== undefined) {\r\n throw new Error(\"Failed to save file\");\r\n } else {\r\n let resultFile: ITemplate = {\r\n ...target,\r\n id: (result as IDriveItem).id,\r\n webURL: (result as IDriveItem).webUrl,\r\n name: (result as IDriveItem).name,\r\n parentReference: {\r\n driveId: (result as IDriveItem).driveId,\r\n folderId: (result as IDriveItem).folderPath,\r\n },\r\n };\r\n\r\n return resultFile;\r\n }\r\n }\r\n\r\n /** Not used for FileExplorer but required for Client */\r\n\r\n public async GetSitesForUser(): Promise {\r\n let sites: ISite[] = [];\r\n return sites;\r\n }\r\n\r\n public async GetDrivesForSite(siteId: string): Promise {\r\n let drives: IDocumentLibrary[] = [];\r\n return drives;\r\n }\r\n\r\n public async GetFoldersInDrive(\r\n siteId: string,\r\n driveId: string,\r\n folderPath?: string,\r\n top?: number,\r\n pageToken?: string\r\n ): Promise {\r\n return { items: [], count: 0, nextPageToken: \"\" };\r\n }\r\n}\r\n","import * as React from \"react\";\r\nimport * as Localization from \"./Translate\";\r\nimport {\r\n IBaseItem,\r\n IDrive,\r\n IDriveItem,\r\n ITranslationProps,\r\n} from \"../data/interfaces\";\r\nimport { Modal } from \"office-ui-fabric-react\";\r\nimport {\r\n EasyTemplate,\r\n IClient,\r\n OfficeHostType,\r\n} from \"@iexpertsnl/templates-ui\";\r\nimport ServiceClient from \"../data/ServiceClient\";\r\nimport { Client } from \"../data/EasyTemplateClient\";\r\nimport { isDrive, isDriveItem } from \"../helpers/typeCheck\";\r\nimport LoadingIndicator from \"./LoadingIndicator\";\r\n\r\nexport interface IEasyTemplateDialogProps extends ITranslationProps {\r\n serviceClient: ServiceClient;\r\n onCloseEvent(): void;\r\n activeItem: IBaseItem | undefined;\r\n}\r\n\r\nexport interface IEasyTemplateDialogState {\r\n folderId: string;\r\n client: Client | undefined;\r\n}\r\n\r\nclass EasyTemplateDialog extends React.Component<\r\n IEasyTemplateDialogProps,\r\n IEasyTemplateDialogState\r\n> {\r\n constructor(props: IEasyTemplateDialogProps) {\r\n super(props);\r\n this.state = {\r\n folderId: \"\",\r\n client: undefined,\r\n };\r\n }\r\n\r\n private handleOnDismissModal() {\r\n this.props.onCloseEvent();\r\n }\r\n\r\n public async componentDidMount() {\r\n let client: Client = await Client.GetClient(this.props.serviceClient);\r\n this.setState({ client: client });\r\n }\r\n\r\n public async componentWillReceiveProps(newProps: IEasyTemplateDialogProps) {\r\n if (this.props.serviceClient != newProps.serviceClient) {\r\n let client: Client = await Client.GetClient(newProps.serviceClient);\r\n this.setState({ client: client });\r\n }\r\n }\r\n\r\n public render(): React.ReactNode {\r\n if (!this.state.client || !this.props.activeItem) return ;\r\n\r\n let siteId = undefined;\r\n let driveId = undefined;\r\n let folderId = undefined;\r\n if (isDrive(this.props.activeItem)) {\r\n driveId = (this.props.activeItem as IDrive).id;\r\n } else if (isDriveItem(this.props.activeItem)) {\r\n driveId = (this.props.activeItem as IDriveItem).driveId;\r\n folderId = (this.props.activeItem as IDriveItem).id;\r\n }\r\n\r\n return (\r\n \r\n
    \r\n \r\n
    \r\n \r\n );\r\n }\r\n}\r\n\r\nexport default Localization.translateComponent<\r\n IEasyTemplateDialogProps,\r\n IEasyTemplateDialogState\r\n>(\"EasyTemplateDialog\")(EasyTemplateDialog);\r\n","import \"@progress/kendo-theme-bootstrap/dist/all.css\";\r\nimport { initializeIcons } from \"@uifabric/icons\";\r\nimport cloneDeep from \"lodash.clonedeep\";\r\nimport React from \"react\";\r\nimport ActionBar from \"./components/ActionBar\";\r\nimport CommandBar from \"./components/CommandBar\";\r\nimport DataLoadingSpinner from \"./components/DataLoadingSpinner\";\r\nimport DriveItemsList from \"./components/DriveItemsList\";\r\nimport ItemModificationQueue, {\r\n IBaseItemModification,\r\n // IItemModification,\r\n // IModificationSummary,\r\n ModificationType,\r\n} from \"./components/ItemModificationQueue\";\r\nimport LoadingIndicator from \"./components/LoadingIndicator\";\r\nimport MessageBar from \"./components/MessageBar\";\r\nimport MessageDialog from \"./components/MessageDialog\";\r\nimport PickDestinationDialog from \"./components/PickDestinationDialog\";\r\nimport TenantInvalidMessage from \"./components/TenantInvalidMessage\";\r\nimport TopNavigationBar, {\r\n ITopNavigationItem,\r\n} from \"./components/TopNavigationBar\";\r\nimport * as Localization from \"./components/Translate\";\r\nimport TreeViewNavigator from \"./components/TreeViewNavigator\";\r\nimport {\r\n ErrorVisibility,\r\n HierarchialDataScope,\r\n MessageBarType,\r\n MessageDialogType,\r\n} from \"./data/enums\";\r\nimport * as authContext from \"./msal\";\r\nimport HierarchialDataManager from \"./data/HierarchialDataManager\";\r\nimport {\r\n IAppContext,\r\n IBaseItem,\r\n IDrive,\r\n IDriveItem,\r\n IDriveItemResult,\r\n IError,\r\n IErrorResult,\r\n IHierarchialDataset,\r\n IHierarchialDataResult,\r\n IList,\r\n IMessageBarContext,\r\n IMessageDialogContext,\r\n IOrganizationData,\r\n IRecycleBin,\r\n IRootData,\r\n ISharingLinkData,\r\n ISite,\r\n ITranslationProps,\r\n IUser,\r\n IOperationStatus,\r\n IRecycleBinItem,\r\n} from \"./data/interfaces\";\r\nimport ServiceClient from \"./data/ServiceClient\";\r\n\r\nimport {\r\n isDrive,\r\n isDriveItem,\r\n isRecycleBin,\r\n isSite,\r\n} from \"./helpers/typeCheck\";\r\nimport { LanguageContext } from \"./i18n/context\";\r\nimport { Resizable } from \"re-resizable\";\r\nimport { ApplicationInsights } from \"@microsoft/applicationinsights-web\";\r\nimport \"./styles/App.scss\";\r\nimport AppSettingsProvider, { IAppSettings } from \"./helpers/appSettings\";\r\nimport EasyTemplateDialog from \"./components/EasyTemplateDialog\";\r\nimport { Client } from \"./data/EasyTemplateClient\";\r\n\r\nrequire(\"typeface-montserrat\");\r\n\r\ninitializeIcons();\r\n\r\nexport interface IAppProps extends ITranslationProps {\r\n context: IAppContext;\r\n}\r\n\r\ninterface IAppState {\r\n // Representing the available datasets shown in the treeview\r\n onedrives: IHierarchialDataset;\r\n favoriteSites: IHierarchialDataset;\r\n allSites: IHierarchialDataset;\r\n\r\n // Represents the IBaseItem instance currently loaded in the DriveItemsList\r\n loadedContainer: IBaseItem | undefined;\r\n isLoadingContainer: boolean;\r\n\r\n // Represents the IBaseItem instance currently in state of modification\r\n destinationContext: IBaseItem[] | undefined;\r\n copyItems: boolean;\r\n\r\n itemModifications: IBaseItemModification[];\r\n\r\n isInitialized: boolean;\r\n isProcessing: boolean;\r\n\r\n siteCollectionHostname: string;\r\n language: string;\r\n userPrincipalName: string;\r\n siteName: string;\r\n rootWebUrl: string;\r\n navigationStack: ITopNavigationItem[];\r\n\r\n messageBarContext?: IMessageBarContext;\r\n messageDialogContext?: IMessageDialogContext;\r\n\r\n testFailedMessages: boolean;\r\n\r\n user: IUser | undefined;\r\n\r\n organizationData: IOrganizationData | undefined;\r\n\r\n showModificationQueuePanel: boolean;\r\n\r\n itemsSelected: boolean;\r\n\r\n showEasyTemplateDialog: boolean;\r\n easyTemplateIsLicensed: boolean;\r\n}\r\n\r\nclass App extends React.Component {\r\n private _serviceClient: ServiceClient;\r\n private _hierarchialDataManager: HierarchialDataManager;\r\n private _appSettings: IAppSettings | undefined;\r\n private _appInsights: ApplicationInsights;\r\n\r\n constructor(props: any) {\r\n super(props);\r\n\r\n const testFailedMessages: boolean =\r\n window.location.search.indexOf(\"testFailedMessages=true\") > -1\r\n ? true\r\n : false;\r\n\r\n this.state = {\r\n onedrives: {\r\n scope: HierarchialDataScope.OneDrives,\r\n root: \"\",\r\n children: [],\r\n },\r\n favoriteSites: {\r\n scope: HierarchialDataScope.Favorites,\r\n root: \"\",\r\n children: [],\r\n },\r\n allSites: {\r\n scope: HierarchialDataScope.AllSites,\r\n root: \"\",\r\n children: [],\r\n },\r\n loadedContainer: undefined,\r\n isInitialized: false,\r\n isLoadingContainer: false,\r\n itemModifications: [],\r\n isProcessing: false,\r\n siteCollectionHostname: \"\",\r\n language: \"\",\r\n userPrincipalName: \"\",\r\n siteName: \"\",\r\n rootWebUrl: \"\",\r\n destinationContext: undefined,\r\n copyItems: false,\r\n navigationStack: [],\r\n messageBarContext: undefined,\r\n testFailedMessages: testFailedMessages,\r\n user: undefined,\r\n organizationData: undefined,\r\n showModificationQueuePanel: false,\r\n itemsSelected: false,\r\n showEasyTemplateDialog: false,\r\n easyTemplateIsLicensed: false,\r\n };\r\n\r\n this._serviceClient = new ServiceClient();\r\n this._hierarchialDataManager = new HierarchialDataManager();\r\n this._appInsights = this.ConfigureAppInsights(\r\n this.props.context.metadata.AppInsightsInstrumentationKey\r\n );\r\n }\r\n\r\n private ConfigureAppInsights(\r\n instrumentationKey: string\r\n ): ApplicationInsights {\r\n const appInsights = new ApplicationInsights({\r\n config: {\r\n connectionString: `InstrumentationKey=${instrumentationKey};IngestionEndpoint=https://westeurope-3.in.applicationinsights.azure.com/`,\r\n enableRequestHeaderTracking: true,\r\n enableResponseHeaderTracking: true,\r\n enableAjaxErrorStatusText: true,\r\n enableUnhandledPromiseRejectionTracking: true,\r\n disableTelemetry: false,\r\n disableFetchTracking: false,\r\n enableCorsCorrelation: true,\r\n },\r\n });\r\n\r\n const userName: string | undefined = authContext.getUsername();\r\n\r\n if (userName) {\r\n const validatedId: string = userName.replace(/[,;=| ]+/g, \"_\");\r\n appInsights.loadAppInsights();\r\n appInsights.setAuthenticatedUserContext(validatedId);\r\n appInsights.trackPageView();\r\n }\r\n\r\n return appInsights;\r\n }\r\n\r\n private DetermineUserLanguage(user: IUser): string {\r\n this._appSettings = AppSettingsProvider.get(user.id);\r\n\r\n let language: string = \"\";\r\n\r\n if (user.preferredLanguage) {\r\n language = user.preferredLanguage;\r\n }\r\n // When the preferred language is not set: use the language of the browser.\r\n else {\r\n language = window.navigator.language;\r\n console.info(\r\n \"The preferred language is not set in Sharepoint, the language set in the browser (\" +\r\n language +\r\n \") is used.\"\r\n );\r\n }\r\n\r\n this._appSettings.preferredLanguage = language;\r\n AppSettingsProvider.set(user.id, this._appSettings);\r\n\r\n return this._appSettings.preferredLanguage;\r\n }\r\n\r\n private CollectRootData(modifiedState: IAppState): Promise {\r\n return new Promise((resolve, reject) => {\r\n this._serviceClient.GetRootData().then(\r\n (rootData: IRootData) => {\r\n resolve({\r\n ...modifiedState,\r\n siteCollectionHostname: rootData.siteCollectionHostname,\r\n siteName: rootData.displayName,\r\n rootWebUrl: rootData.webUrl,\r\n onedrives: {\r\n root: Localization.getTranslation(\r\n \"App\",\r\n \"oneDrivesDatasetName\",\r\n modifiedState.language\r\n ),\r\n children: [],\r\n scope: HierarchialDataScope.OneDrives,\r\n },\r\n favoriteSites: {\r\n root: Localization.getTranslation(\r\n \"App\",\r\n \"favoriteSitesDatasetName\",\r\n modifiedState.language\r\n ),\r\n children: [],\r\n scope: HierarchialDataScope.Favorites,\r\n },\r\n allSites: {\r\n root: Localization.getTranslation(\r\n \"App\",\r\n \"sharePointSitesDatasetName\",\r\n modifiedState.language\r\n ),\r\n children: [],\r\n scope: HierarchialDataScope.AllSites,\r\n },\r\n });\r\n },\r\n (error: any) => {\r\n reject(error);\r\n }\r\n );\r\n });\r\n }\r\n \r\n private async CheckEasyTemplateLicense() {\r\n try {\r\n let easyTemplateClient = await Client.GetClient(this._serviceClient);\r\n let isLicensed = await easyTemplateClient.GetLicense();\r\n this.setState({ easyTemplateIsLicensed: isLicensed });\r\n } catch (err) {\r\n this.setState({ easyTemplateIsLicensed: false });\r\n }\r\n }\r\n\r\n private ResolveUserAndOrganization(): Promise {\r\n let modifiedState: IAppState = {\r\n ...this.state,\r\n };\r\n\r\n // In this case the GetUser and GetOrganizationData calls are made sequentially on purpose because we noticed this would cause parallel authentication flows in the backend when there is no token available for the user in the API for making the calls to Graph.\r\n return new Promise((resolve, reject) => {\r\n this._serviceClient\r\n .GetUser()\r\n .then((user: IUser) => {\r\n modifiedState = {\r\n ...modifiedState,\r\n user: user,\r\n language: this.DetermineUserLanguage(user),\r\n };\r\n\r\n this._serviceClient\r\n .GetOrganizationData()\r\n .then((organization: IOrganizationData) => {\r\n modifiedState = {\r\n ...modifiedState,\r\n organizationData: organization,\r\n };\r\n\r\n resolve(modifiedState);\r\n })\r\n .catch((error) => {\r\n console.error(error);\r\n reject(error);\r\n });\r\n })\r\n .catch((error) => {\r\n console.error(error);\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Called when the component is initialized.\r\n */\r\n public componentDidMount() {\r\n this.ResolveUserAndOrganization().then((modifiedState: IAppState) => {\r\n modifiedState = {\r\n ...modifiedState,\r\n isInitialized: true,\r\n };\r\n\r\n if (!this.props.context.hasProductLicense) {\r\n this._appInsights.trackEvent({ name: \"InvalidProductLicense\" });\r\n this.setState(modifiedState);\r\n return;\r\n }\r\n\r\n this.CollectRootData(modifiedState).then(\r\n (stateWithRootData: IAppState) => {\r\n this.setState(stateWithRootData, async () => {\r\n this.CheckEasyTemplateLicense();\r\n\r\n /**\r\n * Applies the dataset resolve from the specified promise to the application state\r\n * */\r\n const applyDataSet = (\r\n dataSetResult: Promise\r\n ): Promise => {\r\n return new Promise((resolve, reject) => {\r\n dataSetResult.then(\r\n (result: IHierarchialDataResult | IErrorResult) => {\r\n let error: IErrorResult | undefined = undefined;\r\n\r\n if (\r\n (result as IErrorResult).internalErrorCode !== undefined\r\n ) {\r\n error = result as IErrorResult;\r\n reject(error);\r\n } else {\r\n let loadedDataSet: IHierarchialDataset | undefined = (\r\n result as IHierarchialDataResult\r\n ).updatedDataset;\r\n\r\n if (typeof loadedDataSet !== \"undefined\") {\r\n switch (loadedDataSet.scope) {\r\n case HierarchialDataScope.OneDrives:\r\n return this.setState(\r\n { onedrives: loadedDataSet },\r\n () => {\r\n resolve(true);\r\n }\r\n );\r\n break;\r\n case HierarchialDataScope.Favorites:\r\n return this.setState(\r\n { favoriteSites: loadedDataSet },\r\n () => {\r\n resolve(true);\r\n }\r\n );\r\n break;\r\n case HierarchialDataScope.AllSites:\r\n return this.setState(\r\n { allSites: loadedDataSet },\r\n () => {\r\n resolve(true);\r\n }\r\n );\r\n }\r\n return resolve(true);\r\n } else {\r\n reject((result as IHierarchialDataResult).error);\r\n }\r\n }\r\n }\r\n );\r\n });\r\n };\r\n\r\n await applyDataSet(\r\n this._serviceClient.loadDataSetAsync(\r\n HierarchialDataScope.OneDrives,\r\n this.state.onedrives.root,\r\n this.state.siteName\r\n )\r\n );\r\n\r\n await applyDataSet(\r\n this._serviceClient.loadDataSetAsync(\r\n HierarchialDataScope.Favorites,\r\n this.state.favoriteSites.root,\r\n this.state.siteCollectionHostname\r\n )\r\n );\r\n\r\n await applyDataSet(\r\n this._serviceClient.loadDataSetAsync(\r\n HierarchialDataScope.AllSites,\r\n this.state.allSites.root,\r\n this.state.siteCollectionHostname\r\n )\r\n );\r\n });\r\n }\r\n );\r\n });\r\n }\r\n\r\n private GetDataSetOfItem(item: IBaseItem | IRecycleBin): IHierarchialDataset {\r\n switch (item.rootScope) {\r\n case HierarchialDataScope.OneDrives:\r\n return this.state.onedrives;\r\n case HierarchialDataScope.Favorites:\r\n return this.state.favoriteSites;\r\n case HierarchialDataScope.AllSites:\r\n return this.state.allSites;\r\n }\r\n }\r\n\r\n /**\r\n * Event called when an item in the treeview (Site, Drive or DriveItem) is expanded.\r\n * @param dataset IHierarchialDataset instance in which the user is navigating.\r\n * @param item IBaseItem instance describing the item which is expanding.\r\n */\r\n private treeViewItemExpandedEvent(\r\n item: IBaseItem\r\n ): Promise {\r\n return new Promise((resolve, reject) => {\r\n let currentDataSet: IHierarchialDataset = this.GetDataSetOfItem(item);\r\n let promise: Promise;\r\n\r\n if (!item.isLoaded) {\r\n promise = this._serviceClient.loadItemAsync(\r\n currentDataSet,\r\n item,\r\n this.props.i18n.fileLabelRecycleBin\r\n );\r\n } else {\r\n promise = Promise.resolve(item);\r\n }\r\n\r\n promise.then((refreshedItem: IBaseItem | IRecycleBin | IErrorResult) => {\r\n if ((refreshedItem as IErrorResult).internalErrorCode !== undefined) {\r\n this.setState({ isLoadingContainer: false });\r\n resolve(refreshedItem as IErrorResult);\r\n } else {\r\n (refreshedItem as IBaseItem).isExpanded = !(\r\n refreshedItem as IBaseItem\r\n ).isExpanded;\r\n\r\n let modifiedState: IAppState = {\r\n ...this.state,\r\n };\r\n\r\n // Depending on the scope of the dataset, we need to updated different state members\r\n if (item.rootScope === HierarchialDataScope.OneDrives) {\r\n modifiedState = {\r\n ...modifiedState,\r\n onedrives: this._hierarchialDataManager.setItem(\r\n this.state.onedrives,\r\n refreshedItem as IBaseItem\r\n ),\r\n };\r\n } else if (item.rootScope === HierarchialDataScope.Favorites) {\r\n modifiedState = {\r\n ...modifiedState,\r\n favoriteSites: this._hierarchialDataManager.setItem(\r\n this.state.favoriteSites,\r\n refreshedItem as IBaseItem\r\n ),\r\n };\r\n } else if (item.rootScope === HierarchialDataScope.AllSites) {\r\n modifiedState = {\r\n ...modifiedState,\r\n allSites: this._hierarchialDataManager.setItem(\r\n this.state.allSites,\r\n refreshedItem as IBaseItem\r\n ),\r\n };\r\n }\r\n\r\n this.setState(modifiedState, () => {\r\n resolve((refreshedItem as IBaseItem).children.length > 0);\r\n });\r\n }\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Event called when an item in the treeview (Site, Drive or DriveItem) is selected.\r\n * @param dataset IHierarchialDataset instance in which the user is navigating.\r\n * @param item IBaseItem instance describing the item which is selected.\r\n */\r\n private treeViewItemSelectedEvent(\r\n item: IBaseItem,\r\n skipNavigationRebuild?: boolean\r\n ): Promise {\r\n let currentDataSet: IHierarchialDataset = this.GetDataSetOfItem(item);\r\n let modifiedState: IAppState = {\r\n ...this.state,\r\n };\r\n\r\n if (skipNavigationRebuild === undefined || !skipNavigationRebuild) {\r\n modifiedState = {\r\n ...modifiedState,\r\n navigationStack: this.buildNavigationStack(currentDataSet, item),\r\n };\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n let promise: Promise;\r\n\r\n if (!item.isLoaded) {\r\n if (!isSite(item)) {\r\n this.setState({\r\n isLoadingContainer: true,\r\n });\r\n }\r\n promise = this._serviceClient.loadItemAsync(\r\n currentDataSet,\r\n item,\r\n this.props.i18n.fileLabelRecycleBin\r\n );\r\n } else {\r\n promise = Promise.resolve({ ...item, isLoading: true });\r\n }\r\n\r\n promise.then((refreshedItem: IBaseItem | IRecycleBin | IErrorResult) => {\r\n if ((refreshedItem as IErrorResult).internalErrorCode !== undefined) {\r\n this.setState({ isLoadingContainer: false });\r\n resolve(refreshedItem as IErrorResult);\r\n } else {\r\n if (!item.isExpanded) {\r\n (refreshedItem as IBaseItem).isExpanded = true;\r\n }\r\n\r\n // Depending on the scope of the dataset, we need to updated different state members\r\n if (item.rootScope === HierarchialDataScope.OneDrives) {\r\n modifiedState = {\r\n ...modifiedState,\r\n onedrives: this._hierarchialDataManager.setItem(\r\n this.state.onedrives,\r\n refreshedItem as IBaseItem\r\n ),\r\n };\r\n } else if (item.rootScope === HierarchialDataScope.Favorites) {\r\n modifiedState = {\r\n ...modifiedState,\r\n favoriteSites: this._hierarchialDataManager.setItem(\r\n this.state.favoriteSites,\r\n refreshedItem as IBaseItem\r\n ),\r\n };\r\n } else if (item.rootScope === HierarchialDataScope.AllSites) {\r\n modifiedState = {\r\n ...modifiedState,\r\n allSites: this._hierarchialDataManager.setItem(\r\n this.state.allSites,\r\n refreshedItem as IBaseItem\r\n ),\r\n };\r\n }\r\n\r\n modifiedState = {\r\n ...modifiedState,\r\n loadedContainer: refreshedItem as IBaseItem,\r\n isLoadingContainer: false,\r\n messageBarContext: undefined,\r\n itemsSelected: false,\r\n };\r\n\r\n this.setState(modifiedState, () => {\r\n resolve((refreshedItem as IBaseItem).children.length > 0);\r\n });\r\n }\r\n });\r\n });\r\n }\r\n\r\n private enqueueItemModification(\r\n currentModifications: IBaseItemModification[],\r\n items: IBaseItem[],\r\n type: ModificationType\r\n //urls?: string[]\r\n ): IBaseItemModification[] {\r\n let modifications: IBaseItemModification[] =\r\n cloneDeep(currentModifications);\r\n\r\n let itemsModification: IBaseItemModification = {\r\n items: items,\r\n type: type,\r\n monitorUrls: undefined,\r\n };\r\n modifications.push(itemsModification);\r\n\r\n return modifications;\r\n }\r\n\r\n private setMonitorUrlsForItemModifications(\r\n currentModifications: IBaseItemModification[],\r\n items: number,\r\n type: ModificationType,\r\n urls: string[]\r\n ): IBaseItemModification[] {\r\n let modifications: IBaseItemModification[] =\r\n cloneDeep(currentModifications);\r\n\r\n //TODO Use map instead\r\n modifications.forEach((modification) => {\r\n if (modification.items.length === items && modification.type === type) {\r\n console.log(urls);\r\n modification.monitorUrls = urls;\r\n }\r\n });\r\n\r\n return modifications;\r\n }\r\n\r\n // private isModificationSummary(modification: IBaseItemModification) {\r\n // let itemModification = modification as IModificationSummary;\r\n // return itemModification.quantity !== undefined;\r\n // }\r\n\r\n private dequeueItemModification(\r\n currentModifications: IBaseItemModification[],\r\n items: IBaseItem[],\r\n type: ModificationType,\r\n predicate?: (value: IBaseItem) => boolean\r\n ): IBaseItemModification[] {\r\n let modifications: IBaseItemModification[] =\r\n cloneDeep(currentModifications);\r\n\r\n let index: number = modifications.findIndex(\r\n (modification: IBaseItemModification) => {\r\n if (items.length === 1) {\r\n if (predicate !== undefined) {\r\n return (\r\n predicate.apply(this, [items[0]]) && modification.type === type\r\n );\r\n } else {\r\n if (modification.items[0].referenceId !== undefined)\r\n return (\r\n modification.items[0].referenceId === items[0].referenceId &&\r\n modification.type === type\r\n );\r\n else\r\n return (\r\n modification.items[0].id === items[0].id &&\r\n modification.type === type\r\n );\r\n }\r\n } else {\r\n return (\r\n modification.items.length === items.length &&\r\n modification.type === type\r\n );\r\n }\r\n }\r\n );\r\n\r\n if (index > -1) {\r\n modifications.splice(index, 1);\r\n } else {\r\n if (items.length === 1) {\r\n console.warn(\r\n `No item modification found for ${items[0].displayName} of type ${type}`\r\n );\r\n } else {\r\n console.warn(\r\n `No item modification found for ${items.length} items of type ${type}`\r\n );\r\n }\r\n }\r\n\r\n return modifications;\r\n }\r\n\r\n /**\r\n * Event called when the user clicks a context menu item in the treeview\r\n * @param dataset\r\n * @param item\r\n * @param key\r\n */\r\n private treeViewItemContextMenuClickedEvent(\r\n item: IBaseItem,\r\n key: string\r\n ): void {\r\n switch (key) {\r\n case \"ManagePermissions\":\r\n if (isSite(item)) {\r\n let site: ISite = item as ISite;\r\n window.open(`${site.webUrl}/_layouts/15/user.aspx`);\r\n } else if (isDrive(item)) {\r\n this.setState({ isProcessing: true });\r\n\r\n let drive: IDrive = item as IDrive;\r\n let parentSite: ISite = drive.parentItem as ISite;\r\n this._serviceClient\r\n .ResolveSPList(parentSite.id, drive.driveUrl)\r\n .then((list: IList) => {\r\n const url: string = `${\r\n parentSite.webUrl\r\n }/_layouts/15/user.aspx?obj=${this.encodeGuid(\r\n list.id\r\n )},doclib&List=${this.encodeGuid(list.id)}`;\r\n window.open(url);\r\n this.setState({ isProcessing: false });\r\n })\r\n .catch((error: IErrorResult) => {\r\n this.globalErrorMessageHandler(error);\r\n });\r\n }\r\n break;\r\n case \"FollowSite\":\r\n if (isSite(item)) {\r\n let site: ISite = cloneDeep(item);\r\n\r\n this.setState(\r\n {\r\n favoriteSites: this._hierarchialDataManager.addItemAtRoot(\r\n this.state.favoriteSites,\r\n {\r\n ...site,\r\n isFollowing: true,\r\n rootScope: HierarchialDataScope.Favorites,\r\n } as ISite\r\n ),\r\n allSites: this._hierarchialDataManager.setItem(\r\n this.state.allSites,\r\n {\r\n ...site,\r\n isFollowing: true,\r\n rootScope: HierarchialDataScope.AllSites,\r\n } as ISite\r\n ),\r\n },\r\n () => {\r\n this._serviceClient.FollowSite(item.id).then(() => {\r\n // Site is now followed\r\n });\r\n }\r\n );\r\n }\r\n\r\n break;\r\n case \"UnfollowSite\":\r\n if (isSite(item)) {\r\n let site: ISite = cloneDeep(item);\r\n\r\n this.setState(\r\n {\r\n favoriteSites: this._hierarchialDataManager.removeItemFromRoot(\r\n this.state.favoriteSites,\r\n item\r\n ),\r\n allSites: this._hierarchialDataManager.setItem(\r\n this.state.allSites,\r\n {\r\n ...site,\r\n isFollowing: false,\r\n rootScope: HierarchialDataScope.AllSites,\r\n } as ISite\r\n ),\r\n },\r\n () => {\r\n this._serviceClient.UnfollowSite(item.id).then(() => {\r\n // Site is now unfollowed\r\n });\r\n }\r\n );\r\n }\r\n\r\n break;\r\n case \"ReloadItem\":\r\n let modifiedState: IAppState = {\r\n ...this.state,\r\n };\r\n\r\n if (item.rootScope === HierarchialDataScope.OneDrives) {\r\n modifiedState = {\r\n ...modifiedState,\r\n onedrives: this._hierarchialDataManager.resetItem(\r\n this.state.onedrives,\r\n item\r\n ),\r\n };\r\n } else if (item.rootScope === HierarchialDataScope.Favorites) {\r\n modifiedState = {\r\n ...modifiedState,\r\n favoriteSites: this._hierarchialDataManager.resetItem(\r\n this.state.favoriteSites,\r\n item\r\n ),\r\n };\r\n } else if (item.rootScope === HierarchialDataScope.AllSites) {\r\n modifiedState = {\r\n ...modifiedState,\r\n allSites: this._hierarchialDataManager.resetItem(\r\n this.state.allSites,\r\n item\r\n ),\r\n };\r\n }\r\n\r\n this.setState(modifiedState, () => {\r\n let currentDataSet: IHierarchialDataset = this.GetDataSetOfItem(item);\r\n this._serviceClient\r\n .loadItemAsync(currentDataSet, {\r\n ...item,\r\n isLoading: true,\r\n })\r\n .then((refreshedItem: IBaseItem | IRecycleBin | IErrorResult) => {\r\n // Depending on the scope of the dataset, we need to updated different state members\r\n if (item.rootScope === HierarchialDataScope.OneDrives) {\r\n modifiedState = {\r\n ...modifiedState,\r\n onedrives: this._hierarchialDataManager.setItem(\r\n this.state.onedrives,\r\n {\r\n ...(refreshedItem as IBaseItem),\r\n isLoading: false,\r\n isExpanded: true,\r\n }\r\n ),\r\n };\r\n } else if (item.rootScope === HierarchialDataScope.Favorites) {\r\n modifiedState = {\r\n ...modifiedState,\r\n favoriteSites: this._hierarchialDataManager.setItem(\r\n this.state.favoriteSites,\r\n {\r\n ...(refreshedItem as IBaseItem),\r\n isLoading: false,\r\n isExpanded: item.isExpanded,\r\n }\r\n ),\r\n };\r\n } else if (item.rootScope === HierarchialDataScope.AllSites) {\r\n modifiedState = {\r\n ...modifiedState,\r\n allSites: this._hierarchialDataManager.setItem(\r\n this.state.allSites,\r\n {\r\n ...(refreshedItem as IBaseItem),\r\n isLoading: false,\r\n isExpanded: item.isExpanded,\r\n }\r\n ),\r\n };\r\n }\r\n\r\n this.setState(modifiedState);\r\n });\r\n });\r\n\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n /**\r\n * Returns a URI encoded string of the specified guid string\r\n * @param guid String containing a guid value\r\n */\r\n private encodeGuid(guid: string): string {\r\n return encodeURIComponent(`{${guid}}`).replace(/-/g, \"%2D\");\r\n }\r\n\r\n /**\r\n * Adds the specified IBaseItem instance to the navigation stack and returns new stack.\r\n * @param item IBaseItem instance to add.\r\n */\r\n private addToNavigationStack(item: IBaseItem): ITopNavigationItem[] {\r\n let currentStack: ITopNavigationItem[] = [...this.state.navigationStack];\r\n\r\n currentStack.push({\r\n key: item.id,\r\n title: item.displayName,\r\n static: false,\r\n instance: item,\r\n });\r\n\r\n return currentStack;\r\n }\r\n\r\n /**\r\n * Removes the item at the specified index (and everything after the item) from the navigation stack.\r\n * @param index Index of the item to remove.\r\n */\r\n private removeFromNavigationStack(index: number): ITopNavigationItem[] {\r\n let currentStack: ITopNavigationItem[] = [...this.state.navigationStack];\r\n\r\n for (let x: number = currentStack.length - 1; x >= 0; x--) {\r\n if (x > index) {\r\n currentStack.splice(x, 1);\r\n }\r\n }\r\n return currentStack;\r\n }\r\n\r\n /**\r\n * Event handler for when the user clicks an item in the top navigation bar.\r\n * @param key String containing the key of the clicked item.\r\n */\r\n private navigationStackClicked(\r\n key: string,\r\n index: number,\r\n instance: any\r\n ): void {\r\n if (instance !== undefined) {\r\n let item: IBaseItem | undefined = this._hierarchialDataManager.findItem(\r\n this.GetDataSetOfItem(instance),\r\n (x: IBaseItem) => {\r\n return x.id === instance.id;\r\n }\r\n );\r\n\r\n if (item !== undefined) {\r\n this.setState(\r\n {\r\n navigationStack: this.removeFromNavigationStack(index),\r\n },\r\n () => {\r\n this.treeViewItemSelectedEvent(item as IBaseItem, true);\r\n }\r\n );\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Returns an array containing ITopNavigationItem instances describing the breadcrumb path.\r\n * @param selectedItem Currently selected item (IDrive or IDriveItem).\r\n */\r\n private buildNavigationStack(\r\n dataset: IHierarchialDataset,\r\n selectedItem: IBaseItem\r\n ): ITopNavigationItem[] {\r\n let navigationStack: ITopNavigationItem[] = [];\r\n\r\n navigationStack.push({\r\n key: \"\",\r\n title: dataset.root,\r\n static: true,\r\n });\r\n\r\n let trail: IBaseItem[] = this._hierarchialDataManager.getItemPath(\r\n dataset,\r\n selectedItem\r\n );\r\n\r\n trail.forEach((item: IBaseItem) => {\r\n navigationStack.push({\r\n key: item.id,\r\n title: item.displayName,\r\n static: isRecycleBin(item) || (isSite(item) && !isDriveItem(item)), // Sites are not clickable at the moment\r\n instance: item,\r\n });\r\n });\r\n\r\n return navigationStack;\r\n }\r\n\r\n /**\r\n * Event called when the user clicks a item in the DriveItemList component.\r\n * @param item IBaseItem instance representing the clicked item.\r\n */\r\n private DriveItemListFolderClickedHandler(item: IBaseItem): void {\r\n this.treeViewItemSelectedEvent(item as IBaseItem);\r\n }\r\n\r\n /**\r\n * Event called when the user submits the rename dialog from the DriveItemList component.\r\n * @param item IBaseItem instance representing the item to rename\r\n * @param newName String containing the new name of the item\r\n */\r\n private DriveItemListItemRenameHandler(\r\n item: IBaseItem,\r\n newName: string\r\n ): Promise {\r\n return new Promise((resolve, reject) => {\r\n if (this.state.loadedContainer !== undefined) {\r\n // First update the currentItem state to ensure the isUpdating flag is set\r\n this.setState({\r\n loadedContainer: this._hierarchialDataManager.setItemAsChild(\r\n this.state.loadedContainer,\r\n {\r\n ...item,\r\n displayName: newName,\r\n isUpdating: true,\r\n }\r\n ),\r\n itemModifications: this.enqueueItemModification(\r\n this.state.itemModifications,\r\n [item],\r\n ModificationType.RENAME\r\n ),\r\n showModificationQueuePanel: true,\r\n });\r\n\r\n this._serviceClient\r\n .RenameItemAsync(item, newName)\r\n .then((renamedItemX: IBaseItem | void) => {\r\n if (this.state.loadedContainer === undefined) {\r\n // This should not be possible\r\n return;\r\n }\r\n\r\n let renamedItem: IBaseItem = renamedItemX as IBaseItem;\r\n\r\n // Create a new state\r\n let modifiedState: IAppState = {\r\n ...this.state,\r\n loadedContainer: this._hierarchialDataManager.setItemAsChild(\r\n this.state.loadedContainer,\r\n renamedItem\r\n ),\r\n itemModifications: this.dequeueItemModification(\r\n this.state.itemModifications,\r\n [item],\r\n ModificationType.RENAME\r\n ),\r\n };\r\n\r\n // Depending on the scope of the dataset, we need to updated different state members\r\n if (renamedItem.rootScope === HierarchialDataScope.OneDrives) {\r\n modifiedState = {\r\n ...modifiedState,\r\n onedrives: this._hierarchialDataManager.setItem(\r\n this.state.onedrives,\r\n renamedItem\r\n ),\r\n };\r\n } else if (\r\n renamedItem.rootScope === HierarchialDataScope.Favorites\r\n ) {\r\n modifiedState = {\r\n ...modifiedState,\r\n favoriteSites: this._hierarchialDataManager.setItem(\r\n this.state.favoriteSites,\r\n renamedItem\r\n ),\r\n };\r\n } else if (\r\n renamedItem.rootScope === HierarchialDataScope.AllSites\r\n ) {\r\n modifiedState = {\r\n ...modifiedState,\r\n allSites: this._hierarchialDataManager.setItem(\r\n this.state.allSites,\r\n renamedItem\r\n ),\r\n };\r\n }\r\n\r\n this.setState(modifiedState, () => {\r\n resolve();\r\n });\r\n })\r\n .catch((error: IErrorResult) => {\r\n this.globalErrorMessageHandler(error);\r\n\r\n // Update the state.\r\n if (this.state.loadedContainer !== undefined) {\r\n let modifiedState: IAppState = {\r\n ...this.state,\r\n loadedContainer: this._hierarchialDataManager.setItemAsChild(\r\n this.state.loadedContainer,\r\n { ...item, displayName: item.displayName, isUpdating: false }\r\n ),\r\n itemModifications: this.dequeueItemModification(\r\n this.state.itemModifications,\r\n [item],\r\n ModificationType.RENAME\r\n ),\r\n };\r\n\r\n this.setState(modifiedState, () => {\r\n resolve();\r\n });\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Finds the drive or drive item instance in the IHierarchialDataset instance.\r\n * @param dataSet IHierarchialDataset instance\r\n * @param itemReference reference to the item\r\n * @returns IBaseItem instance resolved from the IHierarchialDataset instance.\r\n */\r\n private FindDriveOrDriveItem(\r\n dataSet: IHierarchialDataset,\r\n itemReference: IBaseItem | string | undefined\r\n ): IBaseItem | undefined {\r\n let itemUrl: string = \"\";\r\n\r\n if (typeof itemReference === \"object\") {\r\n itemUrl = isDrive(itemReference)\r\n ? (itemReference as IDrive).driveUrl\r\n : (itemReference as IDriveItem).webUrl;\r\n }\r\n\r\n if (typeof itemReference === \"string\") {\r\n itemUrl = itemReference;\r\n }\r\n\r\n let item: IBaseItem | undefined = this._hierarchialDataManager.findItem(\r\n dataSet,\r\n (x: IBaseItem) => {\r\n let drive: IDrive = x as IDrive;\r\n return drive && drive.driveUrl == itemUrl;\r\n }\r\n );\r\n\r\n if (!item) {\r\n item = this._hierarchialDataManager.findItem(dataSet, (x: IBaseItem) => {\r\n let driveItem: IDriveItem = x as IDriveItem;\r\n\r\n return driveItem && driveItem.webUrl == itemUrl;\r\n });\r\n }\r\n\r\n return item;\r\n }\r\n\r\n /**\r\n * Finds the parent site instance in the IHierarchialDataset instance.\r\n * @param dataSet IHierarchialDataset isntance\r\n * @param item IBaseItem instance\r\n * @returns IBaseItem instance representing the parent site.\r\n */\r\n private FindParentSite(\r\n dataSet: IHierarchialDataset,\r\n item: IBaseItem | undefined\r\n ): IBaseItem | undefined {\r\n if (!item) return undefined;\r\n\r\n if (item.parentItem) {\r\n let siteFound: boolean = false;\r\n let currentParent: IBaseItem | undefined = item.parentItem;\r\n\r\n while (!siteFound) {\r\n if (!currentParent) break;\r\n\r\n siteFound = isSite(currentParent);\r\n\r\n if (!siteFound) {\r\n currentParent = currentParent.parentItem;\r\n }\r\n }\r\n\r\n if (siteFound) {\r\n return this._hierarchialDataManager.findItem(\r\n dataSet,\r\n (x: IBaseItem) => {\r\n let siteItem: ISite = x as ISite;\r\n if (currentParent) {\r\n return siteItem && siteItem.id === currentParent.id;\r\n }\r\n return false;\r\n }\r\n );\r\n }\r\n }\r\n\r\n let itemUrl: string = \"\";\r\n\r\n if (isDrive(item)) {\r\n itemUrl = (item as IDrive).driveUrl;\r\n } else if (isDriveItem(item)) {\r\n itemUrl = (item as IDriveItem).webUrl;\r\n }\r\n\r\n if (itemUrl === \"\") return undefined;\r\n\r\n return this._hierarchialDataManager.findItem(dataSet, (x: IBaseItem) => {\r\n let siteItem: ISite = x as ISite;\r\n const webUrl: string | undefined = siteItem.webUrl;\r\n\r\n if (webUrl) {\r\n return itemUrl.indexOf(webUrl) >= 0;\r\n }\r\n\r\n return false;\r\n });\r\n }\r\n\r\n /**\r\n * Returns the RecycleBin from the site.\r\n * @param siteItem IBaseItem instance representing the site.\r\n * @returns IBaseItem instance if recycle bin was found, else undefined.\r\n */\r\n private GetRecycleBin(siteItem: IBaseItem): IBaseItem | undefined {\r\n if (siteItem && siteItem.children) {\r\n const itemIndex: number = siteItem.children.findIndex(\r\n (child: IBaseItem) => child.id.startsWith(\"rb\")\r\n );\r\n\r\n return siteItem.children[itemIndex];\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Event called when the user submits the delete dialog from the DriveItemList component.\r\n * @param item IBaseItem instance representing the item to remove\r\n */\r\n private DriveItemListItemRestoreHandler(\r\n item: IRecycleBinItem\r\n ): Promise {\r\n return new Promise((resolve, reject) => {\r\n if (this.state.loadedContainer !== undefined) {\r\n // First update the currentItem state to ensure the isUpdating flag is set\r\n this.setState({\r\n loadedContainer: this._hierarchialDataManager.setItemAsChild(\r\n this.state.loadedContainer,\r\n {\r\n ...item,\r\n isDeleting: true,\r\n }\r\n ),\r\n itemModifications: this.enqueueItemModification(\r\n this.state.itemModifications,\r\n [item],\r\n ModificationType.RESTORE\r\n ),\r\n showModificationQueuePanel: true,\r\n });\r\n\r\n this._serviceClient\r\n .RestoreItemAsync(item.webUrl, item.id)\r\n .then((error: IErrorResult | void) => {\r\n if (this.state.loadedContainer === undefined) {\r\n // This should not be possible\r\n return;\r\n }\r\n\r\n if (error) {\r\n let modifiedState: IAppState = {\r\n ...this.state,\r\n loadedContainer: this._hierarchialDataManager.setItemAsChild(\r\n this.state.loadedContainer,\r\n { ...item, isDeleting: false }\r\n ),\r\n itemModifications: this.dequeueItemModification(\r\n this.state.itemModifications,\r\n [item],\r\n ModificationType.RESTORE\r\n ),\r\n };\r\n\r\n this.setState(modifiedState, () => {\r\n resolve();\r\n });\r\n\r\n this.globalErrorMessageHandler(error as IErrorResult);\r\n } else {\r\n let modifiedState: IAppState = {\r\n ...this.state,\r\n loadedContainer: this._hierarchialDataManager.removeItemAsChild(\r\n this.state.loadedContainer,\r\n item\r\n ),\r\n itemModifications: this.dequeueItemModification(\r\n this.state.itemModifications,\r\n [item],\r\n ModificationType.RESTORE\r\n ),\r\n };\r\n\r\n // Depending on the scope of the dataset, we need to updated different state members\r\n if (item.rootScope === HierarchialDataScope.OneDrives) {\r\n modifiedState = {\r\n ...modifiedState,\r\n onedrives: this._hierarchialDataManager.removeItemFromRoot(\r\n this.state.onedrives,\r\n item\r\n ),\r\n };\r\n } else if (\r\n item.rootScope === HierarchialDataScope.Favorites ||\r\n item.rootScope === HierarchialDataScope.AllSites\r\n ) {\r\n let currentDataSet: IHierarchialDataset =\r\n this.GetDataSetOfItem(item);\r\n let sisterDataSet: IHierarchialDataset =\r\n currentDataSet.scope === HierarchialDataScope.Favorites\r\n ? this.state.allSites\r\n : this.state.favoriteSites;\r\n\r\n const encodedLocationUri: string = encodeURI(\r\n `${new URL(item.webUrl).origin}/${item.originalLocation}`\r\n );\r\n\r\n let parentLocation: IBaseItem | undefined =\r\n this.FindDriveOrDriveItem(currentDataSet, encodedLocationUri);\r\n let parentSisterLocation: IBaseItem | undefined =\r\n this.FindDriveOrDriveItem(sisterDataSet, encodedLocationUri);\r\n\r\n let sisterParentSite: IBaseItem | undefined;\r\n\r\n if (parentSisterLocation) {\r\n sisterParentSite = this.FindParentSite(\r\n sisterDataSet,\r\n parentLocation\r\n );\r\n }\r\n\r\n currentDataSet = this._hierarchialDataManager.resetItem(\r\n currentDataSet,\r\n parentLocation\r\n );\r\n\r\n if (sisterParentSite) {\r\n if (parentSisterLocation && parentSisterLocation.isLoaded) {\r\n sisterDataSet = this._hierarchialDataManager.resetItem(\r\n sisterDataSet,\r\n parentSisterLocation\r\n );\r\n }\r\n\r\n const recycleBin: IBaseItem | undefined =\r\n this.GetRecycleBin(sisterParentSite);\r\n\r\n if (recycleBin && recycleBin.isLoaded) {\r\n sisterDataSet = this._hierarchialDataManager.resetItem(\r\n sisterDataSet,\r\n recycleBin\r\n );\r\n }\r\n }\r\n\r\n if (item.rootScope === HierarchialDataScope.Favorites) {\r\n modifiedState = {\r\n ...modifiedState,\r\n favoriteSites: currentDataSet,\r\n allSites: sisterDataSet,\r\n };\r\n } else if (item.rootScope === HierarchialDataScope.AllSites) {\r\n modifiedState = {\r\n ...modifiedState,\r\n favoriteSites: sisterDataSet,\r\n allSites: currentDataSet,\r\n };\r\n }\r\n }\r\n\r\n this.setState(modifiedState, () => {\r\n resolve();\r\n });\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Event called when the user submits the delete dialog from the DriveItemList component.\r\n * @param item IBaseItem instance representing the item to remove\r\n */\r\n private DriveItemListItemDeleteHandler(item: any): Promise {\r\n return new Promise((resolve, reject) => {\r\n if (this.state.loadedContainer !== undefined) {\r\n // First update the currentItem state to ensure the isUpdating flag is set\r\n this.setState({\r\n loadedContainer: this._hierarchialDataManager.setItemAsChild(\r\n this.state.loadedContainer,\r\n {\r\n ...item,\r\n isDeleting: true,\r\n }\r\n ),\r\n itemModifications: this.enqueueItemModification(\r\n this.state.itemModifications,\r\n [item],\r\n ModificationType.REMOVE\r\n ),\r\n showModificationQueuePanel: true,\r\n });\r\n\r\n this._serviceClient\r\n .DeleteRecycleBinItemAsync(item.driveId)\r\n .then((error: IErrorResult | void) => {\r\n if (this.state.loadedContainer === undefined) {\r\n // This should not be possible\r\n return;\r\n }\r\n\r\n if (error !== undefined) {\r\n let modifiedState: IAppState = {\r\n ...this.state,\r\n loadedContainer: this._hierarchialDataManager.setItemAsChild(\r\n this.state.loadedContainer,\r\n { ...item, isDeleting: false }\r\n ),\r\n itemModifications: this.dequeueItemModification(\r\n this.state.itemModifications,\r\n [item],\r\n ModificationType.REMOVE\r\n ),\r\n };\r\n\r\n this.setState(modifiedState, () => {\r\n resolve();\r\n });\r\n\r\n this.globalErrorMessageHandler(error as IErrorResult);\r\n } else {\r\n let modifiedState: IAppState = {\r\n ...this.state,\r\n loadedContainer: this._hierarchialDataManager.removeItemAsChild(\r\n this.state.loadedContainer,\r\n item\r\n ),\r\n itemModifications: this.dequeueItemModification(\r\n this.state.itemModifications,\r\n [item],\r\n ModificationType.REMOVE\r\n ),\r\n };\r\n\r\n // Depending on the scope of the dataset, we need to updated different state members\r\n if (item.rootScope === HierarchialDataScope.OneDrives) {\r\n modifiedState = {\r\n ...modifiedState,\r\n onedrives: this._hierarchialDataManager.removeItemFromRoot(\r\n this.state.onedrives,\r\n item\r\n ),\r\n };\r\n } else if (item.rootScope === HierarchialDataScope.Favorites) {\r\n modifiedState = {\r\n ...modifiedState,\r\n favoriteSites:\r\n this._hierarchialDataManager.removeItemFromRoot(\r\n this.state.favoriteSites,\r\n item\r\n ),\r\n };\r\n } else if (item.rootScope === HierarchialDataScope.AllSites) {\r\n modifiedState = {\r\n ...modifiedState,\r\n allSites: this._hierarchialDataManager.removeItemFromRoot(\r\n this.state.allSites,\r\n item\r\n ),\r\n };\r\n }\r\n\r\n this.setState(modifiedState, () => {\r\n resolve();\r\n });\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Event called when an error occurs during the api call via the service client.\r\n * This function deletes the created dummy item in the driveitemslist and removes\r\n * the entry from the modification queue\r\n * @param item IBaseItem instance representing the dummy item\r\n * @param modificationType Modification type of action for example: ADD\r\n */\r\n private DummyItemRemoveHandler(\r\n item: IBaseItem,\r\n modificationType: ModificationType\r\n ): Promise {\r\n return new Promise((resolve, reject) => {\r\n if (this.state.loadedContainer !== undefined) {\r\n //console.warn(\"DummyItem will be removed: \", item);\r\n\r\n if (this.state.loadedContainer !== undefined) {\r\n let modifiedState: IAppState = {\r\n ...this.state,\r\n loadedContainer: this._hierarchialDataManager.removeItemAsChild(\r\n this.state.loadedContainer,\r\n item\r\n ),\r\n itemModifications: this.dequeueItemModification(\r\n this.state.itemModifications,\r\n [item],\r\n modificationType\r\n ),\r\n };\r\n\r\n if (item.rootScope === HierarchialDataScope.OneDrives) {\r\n modifiedState = {\r\n ...modifiedState,\r\n onedrives: this._hierarchialDataManager.removeItemFromRoot(\r\n this.state.onedrives,\r\n item\r\n ),\r\n };\r\n } else if (item.rootScope === HierarchialDataScope.Favorites) {\r\n modifiedState = {\r\n ...modifiedState,\r\n favoriteSites: this._hierarchialDataManager.removeItemFromRoot(\r\n this.state.favoriteSites,\r\n item\r\n ),\r\n };\r\n } else if (item.rootScope === HierarchialDataScope.AllSites) {\r\n modifiedState = {\r\n ...modifiedState,\r\n allSites: this._hierarchialDataManager.removeItemFromRoot(\r\n this.state.allSites,\r\n item\r\n ),\r\n };\r\n }\r\n\r\n this.setState(modifiedState, () => {\r\n resolve(true);\r\n });\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Event called when the user selects the move file action from the drive item list.\r\n * @param item IBaseItem instance to move\r\n */\r\n private DriveItemListItemMoveHandler(items: IBaseItem[]): void {\r\n this.setState({\r\n destinationContext: items,\r\n copyItems: false,\r\n });\r\n }\r\n\r\n /**\r\n * Event called when the user selects the copy file action from the drive item list.\r\n * @param item IBaseItem instance to copy\r\n */\r\n private DriveItemListItemCopyHandler(items: IBaseItem[]): void {\r\n this.setState({\r\n destinationContext: items,\r\n copyItems: true,\r\n });\r\n }\r\n\r\n /**\r\n * Event called when the user closes the destination dialog\r\n */\r\n private DestinationDialogCloseHandler(): void {\r\n this.setState({\r\n destinationContext: undefined,\r\n });\r\n }\r\n\r\n /**\r\n * Event called when a IBaseItem needs to be reloaded as requested by the MoveDialog component.\r\n * @param item IBaseItem to reload\r\n */\r\n private ReloadItemRequestHandler(item: IBaseItem): Promise {\r\n return new Promise((resolve, reject) => {\r\n let currentDataSet: IHierarchialDataset = this.GetDataSetOfItem(item);\r\n\r\n this._serviceClient\r\n .loadItemAsync(currentDataSet, item)\r\n .then((loadedItem: IBaseItem | IRecycleBin | IErrorResult) => {\r\n let modifiedState: IAppState = {\r\n ...this.state,\r\n };\r\n\r\n // Depending on the scope of the dataset, we need to updated different state members\r\n if (item.rootScope === HierarchialDataScope.OneDrives) {\r\n modifiedState = {\r\n ...modifiedState,\r\n onedrives: this._hierarchialDataManager.setItem(\r\n currentDataSet,\r\n loadedItem as IBaseItem\r\n ),\r\n };\r\n } else if (item.rootScope === HierarchialDataScope.Favorites) {\r\n modifiedState = {\r\n ...modifiedState,\r\n favoriteSites: this._hierarchialDataManager.setItem(\r\n currentDataSet,\r\n loadedItem as IBaseItem\r\n ),\r\n };\r\n } else if (item.rootScope === HierarchialDataScope.AllSites) {\r\n modifiedState = {\r\n ...modifiedState,\r\n allSites: this._hierarchialDataManager.setItem(\r\n currentDataSet,\r\n loadedItem as IBaseItem\r\n ),\r\n };\r\n }\r\n\r\n this.setState(modifiedState, () => {\r\n resolve(loadedItem as IBaseItem);\r\n });\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Event called when the user submits the MoveDialog component to actually move the file.\r\n * @param sourceItem IBaseItem instance representing the item to move.\r\n * @param targetContainer IBaseItem instance representing the container the item will be moved to.\r\n */\r\n private MoveDialogItemClickedHandler(\r\n sourceItems: IBaseItem[],\r\n targetContainer: IBaseItem\r\n ): Promise {\r\n return new Promise((resolve, reject) => {\r\n this.MoveItems(sourceItems, targetContainer).then(() => {\r\n resolve();\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Event called when the user submits the CopyDialog component to actually copy the file.\r\n * @param sourceItem IBaseItem instance representing the item to copy.\r\n * @param targetContainer IBaseItem instance representing the container the item will be copied to.\r\n */\r\n private CopyDialogItemClickedHandler(\r\n sourceItems: IBaseItem[],\r\n targetContainer: IBaseItem\r\n ): Promise {\r\n return new Promise((resolve, reject) => {\r\n this.CopyItems(sourceItems, targetContainer).then(() => {\r\n resolve();\r\n });\r\n });\r\n }\r\n\r\n private ActionBarItemCreatingHandler(item: IBaseItem): void {\r\n this.ActionBarItemsCreatingHandler([item]);\r\n }\r\n\r\n /**\r\n * Event called when an one or more items are being created inside the currently loaded container.\r\n * @param item IBaseItem instance of the new item\r\n */\r\n private ActionBarItemsCreatingHandler(items: IBaseItem[]): Promise {\r\n return new Promise((resolve) => {\r\n if (this.state.loadedContainer === undefined) {\r\n console.warn(\r\n \"Loaded container is different than the parent of the new item. Possibly the user selected a different item while creating the item very quickly :).\"\r\n );\r\n return;\r\n }\r\n\r\n let modifiedState: IAppState = {\r\n ...this.state,\r\n isProcessing: true,\r\n loadedContainer: this._hierarchialDataManager.addItemsAsChildren(\r\n this.state.loadedContainer,\r\n items\r\n ),\r\n itemModifications: this.enqueueItemModification(\r\n this.state.itemModifications,\r\n items,\r\n ModificationType.ADD\r\n ),\r\n showModificationQueuePanel: true,\r\n };\r\n\r\n if (\r\n modifiedState.loadedContainer !== undefined &&\r\n modifiedState.loadedContainer.rootScope ===\r\n HierarchialDataScope.OneDrives\r\n ) {\r\n // Depending on the scope of the dataset, we need to updated different state members\r\n modifiedState = {\r\n ...modifiedState,\r\n onedrives: this._hierarchialDataManager.setItem(\r\n modifiedState.onedrives,\r\n modifiedState.loadedContainer as IBaseItem\r\n ),\r\n };\r\n } else if (\r\n modifiedState.loadedContainer !== undefined &&\r\n modifiedState.loadedContainer.rootScope ===\r\n HierarchialDataScope.Favorites\r\n ) {\r\n modifiedState = {\r\n ...modifiedState,\r\n favoriteSites: this._hierarchialDataManager.setItem(\r\n modifiedState.favoriteSites,\r\n modifiedState.loadedContainer as IBaseItem\r\n ),\r\n };\r\n } else if (\r\n modifiedState.loadedContainer !== undefined &&\r\n modifiedState.loadedContainer.rootScope ===\r\n HierarchialDataScope.AllSites\r\n ) {\r\n modifiedState = {\r\n ...modifiedState,\r\n allSites: this._hierarchialDataManager.setItem(\r\n modifiedState.allSites,\r\n modifiedState.loadedContainer as IBaseItem\r\n ),\r\n };\r\n }\r\n\r\n this.setState(modifiedState, () => {\r\n resolve();\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Event called when one or more items are created in the remote endpoint.\r\n * @param item IBaseItem instance of the new item\r\n */\r\n private ActionBarItemCreatedHandler(item: IBaseItem): Promise {\r\n return new Promise((resolve) => {\r\n let modifiedState: IAppState = {\r\n ...this.state,\r\n isProcessing: false,\r\n itemModifications: this.dequeueItemModification(\r\n this.state.itemModifications,\r\n [item],\r\n ModificationType.ADD,\r\n (x: IBaseItem) => {\r\n return x.referenceId === item.referenceId;\r\n }\r\n ),\r\n };\r\n\r\n if (\r\n this.state.loadedContainer !== undefined &&\r\n this.state.loadedContainer.id === item.parentItem.id\r\n ) {\r\n modifiedState = {\r\n ...modifiedState,\r\n loadedContainer: this._hierarchialDataManager.setItemAsChild(\r\n this.state.loadedContainer,\r\n item,\r\n (x: IBaseItem) => {\r\n return x.referenceId === item.referenceId;\r\n }\r\n ),\r\n };\r\n }\r\n\r\n let treeItem: IBaseItem | undefined =\r\n this._hierarchialDataManager.findItem(\r\n this.GetDataSetOfItem(item),\r\n (x: IBaseItem) => {\r\n return x.referenceId === item.referenceId;\r\n }\r\n );\r\n\r\n if (treeItem !== undefined) {\r\n // Depending on the scope of the dataset, we need to updated different state members\r\n if (item.rootScope === HierarchialDataScope.OneDrives) {\r\n modifiedState = {\r\n ...modifiedState,\r\n onedrives: this._hierarchialDataManager.setItem(\r\n this.state.onedrives,\r\n {\r\n ...treeItem,\r\n ...item,\r\n }\r\n ),\r\n };\r\n } else if (item.rootScope === HierarchialDataScope.Favorites) {\r\n modifiedState = {\r\n ...modifiedState,\r\n favoriteSites: this._hierarchialDataManager.setItem(\r\n this.state.favoriteSites,\r\n {\r\n ...treeItem,\r\n ...item,\r\n }\r\n ),\r\n };\r\n } else if (item.rootScope === HierarchialDataScope.AllSites) {\r\n modifiedState = {\r\n ...modifiedState,\r\n allSites: this._hierarchialDataManager.setItem(\r\n this.state.allSites,\r\n {\r\n ...treeItem,\r\n ...item,\r\n }\r\n ),\r\n };\r\n }\r\n\r\n this.setState(modifiedState, () => {\r\n resolve();\r\n });\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Event called when user selects an item in the drive item list\r\n */\r\n private DriveItemListItemSelectedHandler(selected: boolean): void {\r\n if (this.state.loadedContainer === undefined) {\r\n // this should never happen\r\n return;\r\n }\r\n\r\n this.setState({ itemsSelected: selected });\r\n }\r\n\r\n /**\r\n * Event called when user pressed refresh button for item list.\r\n */\r\n private ActionBarRefreshItemListHandler(): void {\r\n if (this.state.loadedContainer === undefined) {\r\n // this should never happen\r\n return;\r\n }\r\n\r\n this.treeViewItemSelectedEvent({\r\n ...this.state.loadedContainer,\r\n isLoaded: false,\r\n isExpanded: false,\r\n });\r\n }\r\n\r\n /**\r\n * Event called when user pressed the empty recycle bin action.\r\n */\r\n private EmptyRecycleBinHandler(): void {\r\n if (this.state.loadedContainer !== undefined) {\r\n this.setState({\r\n itemModifications: this.enqueueItemModification(\r\n this.state.itemModifications,\r\n [this.state.loadedContainer],\r\n ModificationType.EMPTY\r\n ),\r\n showModificationQueuePanel: true,\r\n });\r\n\r\n const parentItem: ISite = this.state.loadedContainer.parentItem as ISite;\r\n\r\n if (!parentItem) return;\r\n\r\n this._serviceClient\r\n .EmptyRecycleBinAsync(parentItem.webUrl)\r\n .then((error: IErrorResult | void) => {\r\n if (this.state.loadedContainer === undefined) {\r\n // This should not be possible\r\n return;\r\n }\r\n\r\n if (error !== undefined) {\r\n this.globalErrorMessageHandler(error as IErrorResult);\r\n } else {\r\n let currentDataSet: IHierarchialDataset = this.GetDataSetOfItem(\r\n this.state.loadedContainer\r\n );\r\n\r\n currentDataSet = this._hierarchialDataManager.resetItem(\r\n currentDataSet,\r\n this.state.loadedContainer\r\n );\r\n\r\n let sisterDataSet: IHierarchialDataset;\r\n\r\n if (currentDataSet.scope === HierarchialDataScope.AllSites) {\r\n sisterDataSet = this.state.favoriteSites;\r\n } else {\r\n sisterDataSet = this.state.allSites;\r\n }\r\n\r\n let sisterContainer: IBaseItem | undefined =\r\n this.FindDriveOrDriveItem(\r\n sisterDataSet,\r\n this.state.loadedContainer\r\n );\r\n\r\n if (sisterContainer && sisterContainer.isLoaded) {\r\n sisterDataSet = this._hierarchialDataManager.resetItem(\r\n sisterDataSet,\r\n sisterContainer\r\n );\r\n }\r\n\r\n let modifiedState: IAppState = {\r\n ...this.state,\r\n itemModifications: this.dequeueItemModification(\r\n this.state.itemModifications,\r\n [this.state.loadedContainer],\r\n ModificationType.EMPTY\r\n ),\r\n loadedContainer: {\r\n ...this.state.loadedContainer,\r\n children: [],\r\n },\r\n showModificationQueuePanel: false,\r\n };\r\n\r\n if (currentDataSet.scope === HierarchialDataScope.Favorites) {\r\n modifiedState = {\r\n ...modifiedState,\r\n favoriteSites: currentDataSet,\r\n allSites: sisterDataSet,\r\n };\r\n } else if (currentDataSet.scope === HierarchialDataScope.AllSites) {\r\n modifiedState = {\r\n ...modifiedState,\r\n favoriteSites: sisterDataSet,\r\n allSites: currentDataSet,\r\n };\r\n }\r\n\r\n this.setState(modifiedState);\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Event called when users restores items from the recylce bin.\r\n */\r\n private RestoreRecycleBinItemHandler(): Promise {\r\n return new Promise((resolve, reject) => {\r\n if (!this.state.loadedContainer) {\r\n // this should never happen\r\n return;\r\n }\r\n\r\n let selectedItems: IBaseItem[] =\r\n this.state.loadedContainer.children.filter((item) => {\r\n return item.isSelected;\r\n });\r\n\r\n selectedItems.forEach((x: IBaseItem) => {\r\n x.isDeleting = true;\r\n });\r\n\r\n // First update the currentItem state to ensure the isUpdating flag is set\r\n this.setState(\r\n {\r\n loadedContainer: this._hierarchialDataManager.setItemsAsChildren(\r\n this.state.loadedContainer,\r\n selectedItems\r\n ),\r\n itemModifications: this.enqueueItemModification(\r\n this.state.itemModifications,\r\n selectedItems,\r\n ModificationType.RESTORE\r\n ),\r\n showModificationQueuePanel: true,\r\n },\r\n async () => {\r\n let modifiedState: IAppState = {\r\n ...this.state,\r\n };\r\n\r\n if (!this.state.loadedContainer) {\r\n return;\r\n }\r\n\r\n for (\r\n let taskIndex: number = 0;\r\n taskIndex < selectedItems.length;\r\n taskIndex++\r\n ) {\r\n let taskError: IErrorResult | any | undefined;\r\n\r\n const taskResult: void | IErrorResult = await this._serviceClient\r\n .RestoreItemAsync(\r\n (selectedItems[taskIndex] as IRecycleBinItem).webUrl,\r\n selectedItems[taskIndex].id\r\n )\r\n .catch((exception) => {\r\n taskError = exception;\r\n });\r\n\r\n if (taskResult) {\r\n taskError = taskResult;\r\n }\r\n\r\n // Endpoint returned an error (IErrorResult) or an unhandled error occured (catch)\r\n if (taskError) {\r\n selectedItems = selectedItems.map((x: IBaseItem) => {\r\n return {\r\n ...x,\r\n isDeleting: false,\r\n };\r\n });\r\n\r\n modifiedState = {\r\n ...modifiedState,\r\n loadedContainer:\r\n this._hierarchialDataManager.setItemsAsChildren(\r\n this.state.loadedContainer,\r\n selectedItems\r\n ),\r\n itemModifications: this.dequeueItemModification(\r\n modifiedState.itemModifications,\r\n selectedItems,\r\n ModificationType.RESTORE\r\n ),\r\n };\r\n\r\n modifiedState = this.ResetRestoredItemInState(\r\n modifiedState,\r\n selectedItems[taskIndex]\r\n );\r\n\r\n this.setState(modifiedState, () => {\r\n this.globalErrorMessageHandler(taskError as IErrorResult);\r\n });\r\n\r\n break; // Don't continue with the other restore actions....\r\n } else {\r\n modifiedState = {\r\n ...modifiedState,\r\n loadedContainer: this._hierarchialDataManager.removeItemAsChild(\r\n this.state.loadedContainer,\r\n selectedItems[taskIndex]\r\n ),\r\n itemModifications: this.dequeueItemModification(\r\n modifiedState.itemModifications,\r\n [selectedItems[taskIndex]],\r\n ModificationType.RESTORE\r\n ),\r\n };\r\n\r\n modifiedState = this.ResetRestoredItemInState(\r\n modifiedState,\r\n selectedItems[taskIndex]\r\n );\r\n }\r\n\r\n this.setState(modifiedState);\r\n }\r\n }\r\n );\r\n });\r\n }\r\n\r\n /**\r\n * Resets the item when the restore action was performed (or when restore action failed). This to make sure the state allways represents the actual sitation.\r\n * @param appState Current IAppState instance\r\n * @param item IBaseItem instance\r\n * @returns Updated IAppState instance\r\n */\r\n private ResetRestoredItemInState(\r\n appState: IAppState,\r\n item: IBaseItem\r\n ): IAppState {\r\n if (!appState.loadedContainer) return appState;\r\n\r\n let modifiedState: IAppState = {\r\n ...appState,\r\n };\r\n\r\n const currentItem: IRecycleBinItem = item as IRecycleBinItem;\r\n\r\n if (\r\n item.rootScope === HierarchialDataScope.Favorites ||\r\n item.rootScope === HierarchialDataScope.AllSites\r\n ) {\r\n let currentDataSet: IHierarchialDataset = this.GetDataSetOfItem(item);\r\n let sisterDataSet: IHierarchialDataset =\r\n currentDataSet.scope === HierarchialDataScope.Favorites\r\n ? this.state.allSites\r\n : this.state.favoriteSites;\r\n const encodedLocationUri: string = encodeURI(\r\n `${new URL(currentItem.webUrl).origin}/${currentItem.originalLocation}`\r\n );\r\n let parentLocation: IBaseItem | undefined = this.FindDriveOrDriveItem(\r\n currentDataSet,\r\n encodedLocationUri\r\n );\r\n\r\n currentDataSet = this.ResetItemInDataSet(parentLocation, currentDataSet);\r\n\r\n let parentSite: IBaseItem | undefined = this.FindParentSite(\r\n currentDataSet,\r\n parentLocation\r\n );\r\n\r\n currentDataSet = this.ResetRecycleBinOfSite(parentSite, currentDataSet);\r\n\r\n let parentSisterLocation: IBaseItem | undefined =\r\n this.FindDriveOrDriveItem(sisterDataSet, encodedLocationUri);\r\n let sisterParentSite: IBaseItem | undefined;\r\n if (parentSisterLocation) {\r\n sisterParentSite = this.FindParentSite(sisterDataSet, parentLocation);\r\n }\r\n\r\n sisterDataSet = this.ResetItemInDataSet(\r\n parentSisterLocation,\r\n sisterDataSet\r\n );\r\n\r\n sisterDataSet = this.ResetRecycleBinOfSite(\r\n sisterParentSite,\r\n sisterDataSet\r\n );\r\n\r\n if (currentItem.rootScope === HierarchialDataScope.Favorites) {\r\n modifiedState = {\r\n ...modifiedState,\r\n favoriteSites: currentDataSet,\r\n allSites: sisterDataSet,\r\n };\r\n } else if (currentItem.rootScope === HierarchialDataScope.AllSites) {\r\n modifiedState = {\r\n ...modifiedState,\r\n favoriteSites: sisterDataSet,\r\n allSites: currentDataSet,\r\n };\r\n }\r\n }\r\n\r\n return modifiedState;\r\n }\r\n\r\n /**\r\n * Resets the item in in the dataset if the item was loaded.\r\n * @param item IBaseItem instance representing the item.\r\n * @param dataSet IHierarchialDataset instance\r\n * @returns Updated IHierarchialDataset instance if the item was loaded, else the unchanged IHierarchialDataset instance is returned.\r\n */\r\n private ResetItemInDataSet(\r\n item: IBaseItem | undefined,\r\n dataSet: IHierarchialDataset\r\n ): IHierarchialDataset {\r\n if (item && item.isLoaded) {\r\n return this._hierarchialDataManager.resetItem(dataSet, item);\r\n }\r\n\r\n return dataSet;\r\n }\r\n\r\n /**\r\n * Resets the recycle bin of the specified site.\r\n * @param site IBaseItem instance representing the site.\r\n * @param dataSet IHierarchialDataset instance\r\n * @returns Updated IHierarchialDataset instance if the recycle bin was loaded, else the unchanged IHierarchialDataset instance is returned.\r\n */\r\n private ResetRecycleBinOfSite(\r\n site: IBaseItem | undefined,\r\n dataSet: IHierarchialDataset\r\n ): IHierarchialDataset {\r\n if (site) {\r\n const recycleBin: IBaseItem | undefined = this.GetRecycleBin(site);\r\n if (recycleBin && recycleBin.isLoaded) {\r\n return this._hierarchialDataManager.resetItem(dataSet, recycleBin);\r\n }\r\n }\r\n\r\n return dataSet;\r\n }\r\n\r\n /**\r\n * Event called when user pressed delete items button\r\n */\r\n private ActionBarDeleteSelectedItemsHandler(\r\n items?: IBaseItem[]\r\n ): Promise {\r\n return new Promise((resolve, reject) => {\r\n if (this.state.loadedContainer === undefined) {\r\n // this should never happen\r\n return;\r\n }\r\n\r\n let selectedItems: IBaseItem[] = [];\r\n if (items === undefined) {\r\n selectedItems = this.state.loadedContainer.children.filter((item) => {\r\n return item.isSelected;\r\n });\r\n } else {\r\n selectedItems = items;\r\n }\r\n\r\n // First update the currentItem state to ensure the isUpdating flag is set\r\n this.setState({\r\n loadedContainer: this._hierarchialDataManager.setItemAsChild(\r\n this.state.loadedContainer,\r\n {\r\n ...selectedItems[0],\r\n isDeleting: true,\r\n }\r\n ),\r\n itemModifications: this.enqueueItemModification(\r\n this.state.itemModifications,\r\n selectedItems,\r\n ModificationType.REMOVE\r\n ),\r\n showModificationQueuePanel: true,\r\n });\r\n\r\n this._serviceClient\r\n .DeleteItemsAsync(selectedItems)\r\n .then((error: IErrorResult | void) => {\r\n if (this.state.loadedContainer === undefined) {\r\n // this should never happen\r\n return;\r\n }\r\n\r\n if (error) {\r\n let modifiedState: IAppState = {\r\n ...this.state,\r\n loadedContainer: this._hierarchialDataManager.setItemAsChild(\r\n this.state.loadedContainer,\r\n { ...selectedItems[0], isDeleting: false }\r\n ),\r\n itemModifications: this.dequeueItemModification(\r\n this.state.itemModifications,\r\n selectedItems,\r\n ModificationType.REMOVE\r\n ),\r\n };\r\n\r\n this.setState(modifiedState, () => {\r\n resolve();\r\n });\r\n\r\n this.globalErrorMessageHandler(error as IErrorResult);\r\n } else {\r\n let modifiedState: IAppState = {\r\n ...this.state,\r\n };\r\n\r\n selectedItems.forEach((item) => {\r\n modifiedState = {\r\n ...modifiedState,\r\n loadedContainer: this._hierarchialDataManager.removeItemAsChild(\r\n modifiedState.loadedContainer as IBaseItem,\r\n item\r\n ),\r\n };\r\n });\r\n\r\n modifiedState = {\r\n ...modifiedState,\r\n itemModifications: this.dequeueItemModification(\r\n modifiedState.itemModifications,\r\n selectedItems,\r\n ModificationType.REMOVE\r\n ),\r\n itemsSelected: false,\r\n };\r\n\r\n let currentDataSet: IHierarchialDataset = this.GetDataSetOfItem(\r\n selectedItems[0]\r\n );\r\n let sisterDataSet: IHierarchialDataset =\r\n currentDataSet.scope === HierarchialDataScope.Favorites\r\n ? this.state.allSites\r\n : this.state.favoriteSites;\r\n\r\n selectedItems.forEach((item) => {\r\n currentDataSet = this._hierarchialDataManager.removeItemFromRoot(\r\n currentDataSet,\r\n item\r\n );\r\n });\r\n\r\n if (\r\n currentDataSet.scope === HierarchialDataScope.Favorites ||\r\n currentDataSet.scope === HierarchialDataScope.AllSites\r\n ) {\r\n let parentSite: IBaseItem | undefined = this.FindParentSite(\r\n currentDataSet,\r\n selectedItems[0]\r\n );\r\n\r\n let sisterParentSite: IBaseItem | undefined = this.FindParentSite(\r\n sisterDataSet,\r\n selectedItems[0]\r\n );\r\n\r\n if (parentSite) {\r\n let recycleBin: IBaseItem | undefined =\r\n this.GetRecycleBin(parentSite);\r\n\r\n if (recycleBin && recycleBin.isLoaded) {\r\n currentDataSet = this._hierarchialDataManager.resetItem(\r\n currentDataSet,\r\n recycleBin\r\n );\r\n }\r\n\r\n if (sisterParentSite) {\r\n let sisterParentLocation: IBaseItem | undefined =\r\n this.FindDriveOrDriveItem(\r\n sisterDataSet,\r\n selectedItems[0].parentItem\r\n );\r\n\r\n if (sisterParentLocation && sisterParentLocation.isLoaded) {\r\n sisterDataSet = this._hierarchialDataManager.resetItem(\r\n sisterDataSet,\r\n sisterParentLocation\r\n );\r\n }\r\n\r\n let sisterRecycleBin: IBaseItem | undefined =\r\n this.GetRecycleBin(sisterParentSite);\r\n\r\n if (sisterRecycleBin && sisterRecycleBin.isLoaded) {\r\n sisterDataSet = this._hierarchialDataManager.resetItem(\r\n sisterDataSet,\r\n sisterRecycleBin\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n switch (currentDataSet.scope) {\r\n case HierarchialDataScope.OneDrives:\r\n modifiedState = {\r\n ...modifiedState,\r\n onedrives: currentDataSet,\r\n };\r\n break;\r\n\r\n case HierarchialDataScope.Favorites:\r\n modifiedState = {\r\n ...modifiedState,\r\n favoriteSites: currentDataSet,\r\n allSites: sisterDataSet,\r\n };\r\n break;\r\n\r\n case HierarchialDataScope.AllSites:\r\n modifiedState = {\r\n ...modifiedState,\r\n favoriteSites: sisterDataSet,\r\n allSites: currentDataSet,\r\n };\r\n break;\r\n }\r\n\r\n this.setState(modifiedState, () => {\r\n resolve();\r\n });\r\n }\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Event called when user pressed move items button\r\n */\r\n private ActionBarMoveSelectedItemsHandler(): void {\r\n if (this.state.loadedContainer === undefined) {\r\n // this should never happen\r\n return;\r\n }\r\n\r\n let selectedItems = this.state.loadedContainer.children.filter((item) => {\r\n return item.isSelected;\r\n });\r\n\r\n this.DriveItemListItemMoveHandler(selectedItems);\r\n }\r\n\r\n /**\r\n * Event called when user pressed copy items button\r\n */\r\n private ActionBarCopySelectedItemsHandler(): void {\r\n if (this.state.loadedContainer === undefined) {\r\n // this should never happen\r\n return;\r\n }\r\n\r\n let selectedItems = this.state.loadedContainer.children.filter((item) => {\r\n return item.isSelected;\r\n });\r\n\r\n this.DriveItemListItemCopyHandler(selectedItems);\r\n }\r\n\r\n /**\r\n * Event called when an (document) item is created in the remote endpoint.\r\n * @param item IBaseItem instance of the new (document) item\r\n */\r\n private ActionBarDocumentCreatedHandler(item: IBaseItem): void {\r\n this.ActionBarItemCreatedHandler(item);\r\n\r\n let driveItem: IDriveItem = item as IDriveItem;\r\n window.open(driveItem.webUrl, \"_blank\");\r\n }\r\n\r\n /**\r\n * Event called when the user submits a keyword in the searchbox\r\n * @param keyword String containing the search keyword\r\n */\r\n private SearchBoxItemChangedHandler(keyword: string): void {\r\n // Root web url like: https://iexpertsnl.sharepoint.com\r\n const rootWebUrl: string = this.state.rootWebUrl;\r\n if (rootWebUrl.length > 0) {\r\n const url: string = `${rootWebUrl}/_layouts/15/sharepoint.aspx?q=${keyword}&v=%2Fsearch%2Ffiles`;\r\n window.open(url);\r\n } else console.error(\"Invalid root web url (empty string)\");\r\n }\r\n\r\n /**\r\n * Moves the passed source IBaseItems to the new parent IBaseItem.\r\n * @param sourceItems Source IBaseItem instance\r\n * @param targetContainer Target IBaseItem instance\r\n */\r\n private MoveItems(\r\n sourceItems: IBaseItem[],\r\n targetContainer: IBaseItem\r\n ): Promise {\r\n return new Promise((resolve, reject) => {\r\n let moveAction: Promise;\r\n\r\n if (this.state.loadedContainer === undefined) return;\r\n\r\n if (sourceItems[0].parentItem.id === targetContainer.id) {\r\n const dialogTitle: string = Localization.getTranslation(\r\n \"App\",\r\n \"moveFileMessageDialogTitle\",\r\n this.state.language\r\n );\r\n\r\n const dialogMessage: string = Localization.getTranslation(\r\n \"App\",\r\n \"moveFileMessageDialogSourceAndTargetAreEqualMessage\",\r\n this.state.language\r\n );\r\n\r\n const messageDialogContext: IMessageDialogContext = {\r\n dialogTitle: dialogTitle,\r\n message: dialogMessage,\r\n dialogType: MessageDialogType.Close,\r\n };\r\n\r\n this.showMessageDialog(messageDialogContext);\r\n\r\n resolve();\r\n return;\r\n }\r\n\r\n // Mark item as being moved and populate the queue\r\n let modifiedState: IAppState = {\r\n ...this.state,\r\n };\r\n\r\n sourceItems.forEach((item) => {\r\n modifiedState = {\r\n ...modifiedState,\r\n loadedContainer: this._hierarchialDataManager.setItemAsChild(\r\n modifiedState.loadedContainer as IBaseItem,\r\n {\r\n ...item,\r\n isMoving: true,\r\n }\r\n ),\r\n };\r\n });\r\n\r\n modifiedState = {\r\n ...modifiedState,\r\n itemModifications: this.enqueueItemModification(\r\n modifiedState.itemModifications,\r\n sourceItems,\r\n ModificationType.MOVE\r\n ),\r\n showModificationQueuePanel: true,\r\n };\r\n\r\n // Move item\r\n this.setState(modifiedState, () => {\r\n // When a folder is moved to the root, the targetItem doesn't contain a driveId member (because it is a IDrive instance instead of a IDriveItem).\r\n // In this case we need to specify different parameter values for the move action\r\n\r\n let destinationDriveId: string;\r\n let destinationItemId: string;\r\n\r\n if (isDrive(targetContainer)) {\r\n destinationDriveId = targetContainer.id;\r\n destinationItemId = \"\";\r\n } else {\r\n destinationDriveId = (targetContainer as IDriveItem).driveId;\r\n destinationItemId = targetContainer.id;\r\n }\r\n\r\n moveAction = this._serviceClient.MoveDriveItems(\r\n sourceItems[0] as IDriveItem,\r\n sourceItems.map((x) => {\r\n return x.id;\r\n }),\r\n sourceItems.map((x) => {\r\n return x.displayName;\r\n }),\r\n sourceItems.map((x) => {\r\n return x.referenceId as string;\r\n }),\r\n destinationDriveId,\r\n destinationItemId,\r\n targetContainer.path ? targetContainer.path : \"\",\r\n targetContainer.rootScope === HierarchialDataScope.OneDrives\r\n );\r\n\r\n // Now actually move the file using the remove endpoint\r\n moveAction\r\n .then((itemResult: IDriveItemResult[]): void => {\r\n // Check if there are any errors\r\n const errorItems: IDriveItemResult[] = itemResult.filter(\r\n (x) => x.copyAndDeleteResult === false\r\n );\r\n\r\n let sourceDataSet: IHierarchialDataset = this.GetDataSetOfItem(\r\n sourceItems[0]\r\n );\r\n\r\n // There are no errors, removed the source item from the grid and hierarchy\r\n if (errorItems.length === 0) {\r\n sourceItems.forEach((sourceItem) => {\r\n if (this.state.loadedContainer) {\r\n modifiedState = {\r\n ...modifiedState,\r\n loadedContainer:\r\n this._hierarchialDataManager.removeItemAsChild(\r\n {\r\n ...(modifiedState.loadedContainer as IBaseItem),\r\n isLoading: false,\r\n },\r\n sourceItem\r\n ),\r\n destinationContext: undefined,\r\n itemsSelected: false,\r\n };\r\n }\r\n\r\n sourceDataSet = this._hierarchialDataManager.removeItemFromRoot(\r\n sourceDataSet,\r\n sourceItem\r\n );\r\n\r\n // First remove the source item from the tree and call setState to update components\r\n if (sourceDataSet.scope === HierarchialDataScope.OneDrives) {\r\n modifiedState = {\r\n ...modifiedState,\r\n onedrives: sourceDataSet,\r\n };\r\n } else if (\r\n sourceDataSet.scope == HierarchialDataScope.Favorites ||\r\n sourceDataSet.scope == HierarchialDataScope.AllSites\r\n ) {\r\n let sisterDataSet: IHierarchialDataset =\r\n sourceItem.rootScope === HierarchialDataScope.AllSites\r\n ? modifiedState.favoriteSites\r\n : modifiedState.allSites;\r\n\r\n let sisterSourceContainer: IBaseItem | undefined =\r\n this.FindDriveOrDriveItem(\r\n sisterDataSet,\r\n sourceItem.parentItem\r\n );\r\n if (sisterSourceContainer && sisterSourceContainer.isLoaded) {\r\n sisterDataSet = this._hierarchialDataManager.resetItem(\r\n sisterDataSet,\r\n sisterSourceContainer\r\n );\r\n }\r\n\r\n if (sourceItem.rootScope === HierarchialDataScope.Favorites) {\r\n modifiedState = {\r\n ...modifiedState,\r\n favoriteSites: sourceDataSet,\r\n allSites: sisterDataSet,\r\n };\r\n } else if (\r\n sourceItem.rootScope === HierarchialDataScope.AllSites\r\n ) {\r\n modifiedState = {\r\n ...modifiedState,\r\n favoriteSites: sisterDataSet,\r\n allSites: sourceDataSet,\r\n };\r\n }\r\n }\r\n });\r\n\r\n modifiedState = {\r\n ...modifiedState,\r\n itemModifications: this.dequeueItemModification(\r\n modifiedState.itemModifications,\r\n sourceItems,\r\n ModificationType.MOVE\r\n ),\r\n };\r\n } else {\r\n // There are errors\r\n const message: string = Localization.getTranslation(\r\n \"App\",\r\n \"moveFileFailedMessageResult\",\r\n this.state.language\r\n );\r\n\r\n const messageBarContext: IMessageBarContext = {\r\n message: message,\r\n type: MessageBarType.Warning,\r\n };\r\n\r\n // Revert the situation in the source container\r\n sourceItems.forEach((sourceItem) => {\r\n if (this.state.loadedContainer !== undefined) {\r\n modifiedState = {\r\n ...modifiedState,\r\n loadedContainer:\r\n this._hierarchialDataManager.setItemAsChild(\r\n modifiedState.loadedContainer as IBaseItem,\r\n { ...sourceItem, isMoving: false }\r\n ),\r\n messageBarContext: messageBarContext,\r\n };\r\n }\r\n });\r\n\r\n modifiedState = {\r\n ...modifiedState,\r\n itemModifications: this.dequeueItemModification(\r\n modifiedState.itemModifications,\r\n sourceItems,\r\n ModificationType.MOVE\r\n ),\r\n showModificationQueuePanel: false,\r\n destinationContext: undefined,\r\n };\r\n }\r\n\r\n this.setState(modifiedState, () => {\r\n let targetDataSet: IHierarchialDataset =\r\n this.GetDataSetOfItem(targetContainer);\r\n\r\n targetDataSet = this._hierarchialDataManager.resetItem(\r\n targetDataSet,\r\n targetContainer\r\n );\r\n\r\n let sisterDataSet: IHierarchialDataset | undefined;\r\n\r\n // Note; target dataset is allways the AllSites, as the move/copy panel only offers the AllSites dataset to pick from\r\n if (targetDataSet.scope === HierarchialDataScope.AllSites) {\r\n sisterDataSet = this.state.favoriteSites;\r\n\r\n let sisterContainer: IBaseItem | undefined =\r\n this.FindDriveOrDriveItem(sisterDataSet, targetContainer);\r\n\r\n if (sisterContainer && sisterContainer.isLoaded) {\r\n sisterDataSet = this._hierarchialDataManager.resetItem(\r\n sisterDataSet,\r\n sisterContainer\r\n );\r\n }\r\n }\r\n\r\n modifiedState = {\r\n ...this.state,\r\n };\r\n\r\n if (\r\n this.state.loadedContainer &&\r\n this._hierarchialDataManager.itemDescendantOf(\r\n this.state.loadedContainer,\r\n targetContainer\r\n )\r\n ) {\r\n modifiedState = {\r\n ...modifiedState,\r\n loadedContainer:\r\n this._hierarchialDataManager.resetItemInContainer(\r\n this.state.loadedContainer,\r\n targetContainer\r\n ),\r\n };\r\n }\r\n\r\n switch (targetDataSet.scope) {\r\n case HierarchialDataScope.OneDrives:\r\n modifiedState = {\r\n ...modifiedState,\r\n onedrives: targetDataSet,\r\n };\r\n break;\r\n case HierarchialDataScope.AllSites:\r\n if (sisterDataSet) {\r\n modifiedState = {\r\n ...modifiedState,\r\n favoriteSites: sisterDataSet,\r\n };\r\n }\r\n\r\n modifiedState = {\r\n ...modifiedState,\r\n allSites: targetDataSet,\r\n };\r\n break;\r\n }\r\n\r\n this.setState(modifiedState, () => {\r\n resolve();\r\n });\r\n });\r\n })\r\n .catch((error: IErrorResult): void => {\r\n this.globalErrorMessageHandler(error);\r\n\r\n // Revert the situation.\r\n let modifiedState: IAppState = {\r\n ...this.state,\r\n };\r\n sourceItems.forEach((item) => {\r\n if (this.state.loadedContainer !== undefined) {\r\n modifiedState = {\r\n ...modifiedState,\r\n loadedContainer: this._hierarchialDataManager.setItemAsChild(\r\n this.state.loadedContainer,\r\n { ...item, isMoving: false }\r\n ),\r\n };\r\n\r\n let itemName: string = item.displayName;\r\n const length: number = itemName.length;\r\n\r\n if (length > 64) {\r\n itemName =\r\n itemName.substr(0, 32) +\r\n \" ... \" +\r\n itemName.substring(length - 32);\r\n }\r\n\r\n this.setState(modifiedState, () => {\r\n resolve();\r\n });\r\n }\r\n });\r\n\r\n modifiedState = {\r\n ...modifiedState,\r\n itemModifications: this.dequeueItemModification(\r\n modifiedState.itemModifications,\r\n sourceItems,\r\n ModificationType.MOVE\r\n ),\r\n };\r\n\r\n modifiedState.showModificationQueuePanel =\r\n modifiedState.itemModifications.length >= 1;\r\n\r\n this.setState(modifiedState);\r\n });\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Copies the passed source IBaseItem to the new parent IBaseItem.\r\n * @param sourceItems Source IBaseItem instance\r\n * @param targetContainer Target IBaseItem instance\r\n */\r\n private CopyItems(\r\n sourceItems: IBaseItem[],\r\n targetContainer: IBaseItem\r\n ): Promise {\r\n return new Promise((resolve, reject) => {\r\n let copyAction: Promise;\r\n\r\n if (this.state.loadedContainer === undefined) return;\r\n\r\n if (sourceItems[0].parentItem.id === targetContainer.id) {\r\n const dialogTitle: string = Localization.getTranslation(\r\n \"App\",\r\n \"copyFileMessageDialogTitle\",\r\n this.state.language\r\n );\r\n\r\n const dialogMessage: string = Localization.getTranslation(\r\n \"App\",\r\n \"copyFileMessageDialogSourceAndTargetAreEqualMessage\",\r\n this.state.language\r\n );\r\n\r\n const messageDialogContext: IMessageDialogContext = {\r\n dialogTitle: dialogTitle,\r\n message: dialogMessage,\r\n dialogType: MessageDialogType.Close,\r\n };\r\n\r\n this.showMessageDialog(messageDialogContext);\r\n\r\n resolve();\r\n return;\r\n }\r\n\r\n // Mark item as being copied and populate the queue\r\n let modifiedState: IAppState = {\r\n ...this.state,\r\n showModificationQueuePanel: true,\r\n itemModifications: this.enqueueItemModification(\r\n this.state.itemModifications,\r\n sourceItems,\r\n ModificationType.COPY\r\n ),\r\n };\r\n\r\n sourceItems.forEach((item) => {\r\n modifiedState = {\r\n ...modifiedState,\r\n loadedContainer: this._hierarchialDataManager.setItemAsChild(\r\n modifiedState.loadedContainer as IBaseItem,\r\n {\r\n ...item,\r\n isMoving: false,\r\n }\r\n ),\r\n showModificationQueuePanel: true,\r\n };\r\n });\r\n\r\n // modifiedState = {\r\n // ...modifiedState,\r\n // showModificationQueuePanel: true,\r\n // itemModifications: this.enqueueItemModification(\r\n // modifiedState.itemModifications,\r\n // sourceItems,\r\n // ModificationType.COPY\r\n // ),\r\n // };\r\n\r\n // Copy item\r\n this.setState(modifiedState, () => {\r\n // When a folder is copied to the root, the targetItem doesn't contain a driveId member (because it is a IDrive instance instead of a IDriveItem).\r\n // In this case we need to specify different parameter values for the copy action\r\n let destinationDriveId: string;\r\n let destinationItemId: string;\r\n\r\n if (isDrive(targetContainer)) {\r\n destinationDriveId = targetContainer.id;\r\n destinationItemId = \"\";\r\n } else {\r\n destinationDriveId = (targetContainer as IDriveItem).driveId;\r\n destinationItemId = targetContainer.id;\r\n }\r\n\r\n copyAction = this._serviceClient.CopyDriveItems(\r\n sourceItems[0] as IDriveItem,\r\n sourceItems.map((x) => {\r\n return x.id;\r\n }),\r\n sourceItems.map((x) => {\r\n return x.displayName;\r\n }),\r\n destinationDriveId,\r\n destinationItemId,\r\n targetContainer.path ? targetContainer.path : \"\",\r\n targetContainer.rootScope === HierarchialDataScope.OneDrives\r\n );\r\n\r\n // Now actually copy the file using the remove endpoint\r\n copyAction\r\n .then((urls: string[]): void => {\r\n modifiedState = {\r\n ...modifiedState,\r\n itemModifications: this.setMonitorUrlsForItemModifications(\r\n modifiedState.itemModifications,\r\n sourceItems.length,\r\n ModificationType.COPY,\r\n urls\r\n ),\r\n destinationContext: undefined,\r\n itemsSelected: false,\r\n };\r\n\r\n this.setState(modifiedState, () => {\r\n let targetDataSet: IHierarchialDataset =\r\n this.GetDataSetOfItem(targetContainer);\r\n\r\n targetDataSet = this._hierarchialDataManager.resetItem(\r\n targetDataSet,\r\n targetContainer\r\n );\r\n\r\n let sisterDataSet: IHierarchialDataset | undefined;\r\n\r\n // Note; target dataset is allways the AllSites, as the move/copy panel only offers the AllSites dataset to pick from\r\n if (targetDataSet.scope === HierarchialDataScope.AllSites) {\r\n sisterDataSet = this.state.favoriteSites;\r\n\r\n let sisterContainer: IBaseItem | undefined =\r\n this.FindDriveOrDriveItem(sisterDataSet, targetContainer);\r\n\r\n if (sisterContainer && sisterContainer.isLoaded) {\r\n sisterDataSet = this._hierarchialDataManager.resetItem(\r\n sisterDataSet,\r\n sisterContainer\r\n );\r\n }\r\n }\r\n\r\n modifiedState = {\r\n ...this.state,\r\n };\r\n\r\n modifiedState = {\r\n ...this.state,\r\n };\r\n\r\n if (\r\n this.state.loadedContainer &&\r\n this._hierarchialDataManager.itemDescendantOf(\r\n this.state.loadedContainer,\r\n targetContainer\r\n )\r\n ) {\r\n modifiedState = {\r\n ...modifiedState,\r\n loadedContainer:\r\n this._hierarchialDataManager.resetItemInContainer(\r\n this.state.loadedContainer,\r\n targetContainer\r\n ),\r\n };\r\n }\r\n\r\n switch (targetDataSet.scope) {\r\n case HierarchialDataScope.OneDrives:\r\n modifiedState = {\r\n ...modifiedState,\r\n onedrives: targetDataSet,\r\n };\r\n break;\r\n case HierarchialDataScope.AllSites:\r\n if (sisterDataSet) {\r\n modifiedState = {\r\n ...modifiedState,\r\n favoriteSites: sisterDataSet,\r\n };\r\n }\r\n\r\n modifiedState = {\r\n ...modifiedState,\r\n allSites: targetDataSet,\r\n };\r\n break;\r\n }\r\n\r\n this.setState(modifiedState, () => {\r\n resolve();\r\n });\r\n });\r\n })\r\n .catch((error: IErrorResult): void => {\r\n this.globalErrorMessageHandler(error);\r\n\r\n // Revert the situation.\r\n let modifiedState: IAppState = {\r\n ...this.state,\r\n };\r\n\r\n sourceItems.forEach((item) => {\r\n if (this.state.loadedContainer !== undefined) {\r\n modifiedState = {\r\n ...modifiedState,\r\n loadedContainer: this._hierarchialDataManager.setItemAsChild(\r\n this.state.loadedContainer,\r\n { ...item, isMoving: false }\r\n ),\r\n };\r\n\r\n let itemName: string = item.displayName;\r\n const length: number = itemName.length;\r\n\r\n if (length > 64) {\r\n itemName =\r\n itemName.substr(0, 32) +\r\n \" ... \" +\r\n itemName.substring(length - 32);\r\n }\r\n\r\n this.setState(modifiedState, () => {\r\n resolve();\r\n });\r\n }\r\n });\r\n\r\n modifiedState = {\r\n ...modifiedState,\r\n itemModifications: this.dequeueItemModification(\r\n modifiedState.itemModifications,\r\n sourceItems,\r\n ModificationType.COPY\r\n ),\r\n };\r\n });\r\n });\r\n });\r\n }\r\n\r\n private ActionBarCreateDocumentHandler(body: any): Promise {\r\n return new Promise((resolve, reject) => {\r\n return this._serviceClient\r\n .CreateDocument(body)\r\n .then((result: IDriveItem) => {\r\n resolve(result);\r\n })\r\n .catch((error: IErrorResult) => {\r\n this.globalErrorMessageHandler(error);\r\n reject();\r\n });\r\n });\r\n }\r\n\r\n private ActionBarCreateFolderHandler(body: any): Promise {\r\n return new Promise((resolve, reject) => {\r\n return this._serviceClient\r\n .CreateFolder(body)\r\n .then((result: IDriveItem) => {\r\n resolve(result);\r\n })\r\n .catch((error: IErrorResult) => {\r\n this.globalErrorMessageHandler(error);\r\n reject();\r\n });\r\n });\r\n }\r\n\r\n private ActionBarCreateFileHandler(formData: FormData): Promise {\r\n return new Promise((resolve, reject) => {\r\n return this._serviceClient\r\n .CreateFile(formData)\r\n .then((result: IDriveItem) => {\r\n resolve(result);\r\n })\r\n .catch((error: IErrorResult) => {\r\n this.globalErrorMessageHandler(error);\r\n reject();\r\n });\r\n });\r\n }\r\n\r\n private treeViewItemDroppedHandler(\r\n sourceItems: IBaseItem[],\r\n targetContainer: IBaseItem\r\n ): void {\r\n this.MoveItems(sourceItems, targetContainer);\r\n }\r\n\r\n private logoutButtonClickedHandler(e: any) {\r\n e.preventDefault();\r\n authContext.signOut();\r\n }\r\n\r\n private showMessageBar(message: string, messageBarType: MessageBarType) {\r\n this.setState({\r\n messageBarContext: {\r\n message: message,\r\n type: messageBarType,\r\n },\r\n });\r\n }\r\n\r\n private showMessageBarJSXFormed(\r\n message: JSX.Element,\r\n messageBarType: MessageBarType\r\n ) {\r\n this.setState({\r\n messageBarContext: {\r\n messageJSXFormed: message,\r\n type: messageBarType,\r\n },\r\n });\r\n }\r\n\r\n private showMessageDialog(messageDialogContext: IMessageDialogContext) {\r\n this.setState({\r\n messageDialogContext: messageDialogContext,\r\n });\r\n }\r\n\r\n private handleCloseMessageBar() {\r\n this.setState({ messageBarContext: undefined });\r\n }\r\n\r\n private handleCloseMessageDialog() {\r\n this.setState({ messageDialogContext: undefined });\r\n }\r\n\r\n private handleConfirmMessageDialog() {\r\n // Nothing yet to handle\r\n }\r\n\r\n private globalErrorMessageHandler(errorResult: IErrorResult): void {\r\n let error: IError = Localization.getError(this.state.language, errorResult);\r\n\r\n switch (error.errorVisibility) {\r\n case ErrorVisibility.GlobalDialog:\r\n let messageDialogContext: IMessageDialogContext = {\r\n dialogTitle: this.props.i18n.errorDialogTitle,\r\n dialogType: MessageDialogType.Close,\r\n message: `${error.message}

    ${error.correlationId}`,\r\n };\r\n this.setState({ messageDialogContext: messageDialogContext });\r\n break;\r\n\r\n case ErrorVisibility.MessageBar:\r\n let messageBarContext: IMessageBarContext = {\r\n message: error.message,\r\n type: MessageBarType.Error,\r\n };\r\n this.setState({ messageBarContext: messageBarContext });\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n private handleItemModificationQueueClose = () => {\r\n this.setState({ showModificationQueuePanel: false });\r\n };\r\n\r\n private handleMonitorProgress(monitorUrl: string): Promise {\r\n return new Promise((resolve, reject) => {\r\n return this._serviceClient\r\n .CheckOperationStatusAsync(monitorUrl)\r\n .then((status: IOperationStatus) => {\r\n resolve(status);\r\n })\r\n .catch((error: IErrorResult) => {\r\n this.globalErrorMessageHandler(error);\r\n reject();\r\n });\r\n });\r\n }\r\n\r\n private handleStatusComplete(item: any): void {\r\n this.setState({\r\n itemModifications: this.dequeueItemModification(\r\n this.state.itemModifications,\r\n item.items,\r\n item.type\r\n ),\r\n });\r\n }\r\n\r\n private CreateShareLinkHandler(\r\n item: IDriveItem,\r\n siteOrOneDriveUrl: string,\r\n driveIsOneDrive: boolean\r\n ): Promise {\r\n return new Promise((resolve, reject) => {\r\n return this._serviceClient\r\n .CreateShareLink(item, siteOrOneDriveUrl, driveIsOneDrive)\r\n .then((result: ISharingLinkData) => {\r\n resolve(result);\r\n })\r\n .catch((error: IErrorResult) => {\r\n this.globalErrorMessageHandler(error);\r\n reject();\r\n });\r\n });\r\n }\r\n\r\n private OpenEasyTemplate() {\r\n this.setState({ showEasyTemplateDialog: true });\r\n }\r\n\r\n private CloseEasyTemplate() {\r\n this.setState(\r\n { showEasyTemplateDialog: false },\r\n this.ActionBarRefreshItemListHandler.bind(this)\r\n );\r\n }\r\n\r\n public render() {\r\n if (!this.state.isInitialized) {\r\n return ;\r\n }\r\n\r\n if (!this.props.context.hasProductLicense) {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n let contents: JSX.Element =
    ;\r\n\r\n if (this.state.isLoadingContainer) {\r\n contents = ;\r\n } else if (\r\n this.state.loadedContainer === undefined ||\r\n isSite(this.state.loadedContainer)\r\n ) {\r\n let message: string | undefined = undefined,\r\n messageType: MessageBarType | undefined = undefined;\r\n\r\n // Depending on the state value, we show different messages using the MessageBar component\r\n if (this.state.loadedContainer === undefined) {\r\n message = Localization.getTranslation(\r\n \"App\",\r\n \"noTreeviewItemSelectedMessage\",\r\n this.state.language\r\n );\r\n messageType = MessageBarType.Warning;\r\n } else if (isSite(this.state.loadedContainer)) {\r\n message = Localization.getTranslation(\r\n \"App\",\r\n \"noContentsToShowForSites\",\r\n this.state.language\r\n );\r\n messageType = MessageBarType.Info;\r\n }\r\n\r\n if (message !== undefined && messageType !== undefined) {\r\n contents = (\r\n
    \r\n \r\n
    \r\n );\r\n }\r\n } else {\r\n contents = (\r\n
    \r\n \r\n {this.state.messageBarContext !== undefined && (\r\n \r\n )}\r\n {this.state.loadedContainer !== undefined &&\r\n !isSite(this.state.loadedContainer) && (\r\n \r\n )}\r\n {this.state.copyItems === false && this.state.destinationContext && (\r\n \r\n )}\r\n {this.state.copyItems === true && this.state.destinationContext && (\r\n \r\n )}\r\n
    \r\n );\r\n }\r\n\r\n return (\r\n <>\r\n {this.state.isInitialized && (\r\n \r\n \r\n {this.state.showModificationQueuePanel &&\r\n this.state.itemModifications.length > 0 && (\r\n {}}\r\n actionFailedEvent={() => {}}\r\n onClose={this.handleItemModificationQueueClose.bind(this)}\r\n onMonitorProgressEvent={this.handleMonitorProgress.bind(\r\n this\r\n )}\r\n onStatusCompleteEvent={this.handleStatusComplete.bind(this)}\r\n />\r\n )}\r\n\r\n
    \r\n
    \r\n
    \r\n
    \r\n File Explorer\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n {\r\n if (this.state.user && this._appSettings) {\r\n AppSettingsProvider.set(this.state.user.id, {\r\n ...this._appSettings,\r\n navigatorWidth:\r\n this._appSettings.navigatorWidth + delta.width,\r\n });\r\n }\r\n }}\r\n >\r\n
    \r\n {this.state.onedrives.children.length !== 0 && (\r\n \r\n )}\r\n \r\n \r\n
    \r\n \r\n\r\n
    {contents}
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n {this.props.context.metadata.Version}{\" \"}\r\n {this.props.context.metadata.Sprint}.\r\n {this.props.context.metadata.Build}\r\n
    \r\n
    \r\n © 2021 File Explorer\r\n Powered by\r\n \r\n \"\"\r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n {this.state.messageDialogContext !== undefined && (\r\n \r\n )}\r\n {this.state.showEasyTemplateDialog && (\r\n \r\n )}\r\n
    \r\n )}\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default Localization.translateComponent(\"App\")(\r\n App\r\n);\r\n","import React from \"react\";\r\nimport ReactDOM from \"react-dom\";\r\nimport \"./styles/index.scss\";\r\nimport \"bootstrap/dist/css/bootstrap.min.css\";\r\nimport App from \"./App\";\r\n\r\nimport {\r\n ILicensingService,\r\n ILicensingContext,\r\n LicensingServiceFactory,\r\n} from \"@iexpertsnl/licensing-core\";\r\nimport { IAppMetadata } from \"./data/interfaces\";\r\nimport * as msal from \"@azure/msal-browser\";\r\nimport * as authContext from \"./msal\";\r\n\r\nconst licenseCheck = (): Promise => {\r\n return new Promise(async (resolve, reject) => {\r\n const licensingService: ILicensingService =\r\n LicensingServiceFactory.GetService(\r\n {\r\n enableLogging: true,\r\n proxyRequestHost: window.location.host,\r\n },\r\n await authContext.getToken()\r\n );\r\n\r\n const userId: string | undefined = authContext.getUniqueUserId();\r\n\r\n if (userId) {\r\n licensingService\r\n .AcquireLicenseForProduct(\"fileexplorer\", userId)\r\n .then((licensingContext: ILicensingContext | undefined) => {\r\n resolve(licensingContext ? licensingContext.isValid : false);\r\n })\r\n .catch((error) => reject(error));\r\n } else {\r\n resolve(false);\r\n }\r\n });\r\n};\r\n\r\nconst initializeApp = () => {\r\n fetch(`${window.location.origin}/.metadata`, {\r\n method: \"GET\",\r\n })\r\n .then((response) => response.json())\r\n .then(async (settings: IAppMetadata) => {\r\n const msalConfig: msal.Configuration = authContext.getConfig(\r\n settings.AppId\r\n );\r\n\r\n authContext.loadConfig(msalConfig, authContext.SignInType.REDIRECT, true);\r\n\r\n await authContext.signIn();\r\n\r\n licenseCheck().then((hasLicense: boolean) => {\r\n ReactDOM.render(\r\n ,\r\n document.getElementById(\"root\") as HTMLElement\r\n );\r\n });\r\n });\r\n\r\n // Prevent default DnD browser behaviour\r\n window.addEventListener(\r\n \"dragover\",\r\n function (e) {\r\n var event: Event | undefined;\r\n e = e || event;\r\n e.preventDefault();\r\n\r\n let dt: DataTransfer = e.dataTransfer as DataTransfer;\r\n dt.dropEffect = \"none\";\r\n },\r\n false\r\n );\r\n window.addEventListener(\r\n \"drop\",\r\n function (e) {\r\n var event: Event | undefined;\r\n e = e || event;\r\n e.preventDefault();\r\n },\r\n false\r\n );\r\n};\r\n\r\ninitializeApp();\r\n"],"sourceRoot":""}