{"version":3,"file":"568.js","mappings":"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KAAM,QACN,KAAM,SACN,KAAM,SACN,KAAM,SACN,KAAM,QACN,KAAM,QACN,KAAM,SACN,KAAM,QACN,KAAM,QACN,KAAM,QACN,KAAM,QACN,KAAM,QACN,KAAM,QACN,KAAM,QACN,KAAM,QACN,KAAM,QACN,KAAM,QACN,KAAM,QACN,KAAM,QACN,KAAM,QACN,KAAM,SACN,KAAM,QACN,KAAM,QACN,KAAM,QACN,KAAM,QACN,KAAM,QACN,KAAM,QACN,KAAM,QACN,KAAM,SACN,KAAM,SACN,KAAM,QACN,KAAM,QACN,KAAM,QACN,KAAM,QACN,KAAM,QACN,KAAM,QACN,KAAM,QACN,KAAM,QACN,KAAM,SACN,KAAM,QACN,KAAM,QACN,KAAM,QACN,KAAM,QACN,KAAM,QACN,KAAM,QACN,KAAM,QACN,KAAM,SACN,KAAM,QACN,KAAM,QACN,KAAM,QACN,KAAM,QACN,KAAM,QACN,KAAM,QACN,KAAM,SACN,KAAM,QACN,KAAM,QACN,KAAM,QACN,KAAM,QACN,KAAM,SACN,KAAM,QACN,KAAM,QACN,KAAM,QACN,KAAM,QACN,KAAM,SACN,KAAM,QACN,KAAM,QACN,KAAM,QACN,KAAM,QACN,KAAM,SACN,KAAM,QACN,KAAM,QACN,KAAM,QACN,KAAM,SACN,MAAO,QACP,MAAO,QACP,MAAO,QACP,MAAO,QACP,MAAO,QACP,MAAO,QACP,MAAO,QACP,MAAO,QACP,MAAO,QACP,MAAO,QACP,MAAO,QACP,MAAO,QACP,MAAO,QACP,MAAO,QACP,MAAO,QACP,MAAO,QACP,MAAO,QACP,MAAO,QACP,MAAO,QACP,MAAO,QACP,MAAO,QACP,MAAO,QACP,MAAO,QACP,MAAO,QACP,MAAO,QACP,MAAO,U","sources":["webpack:///./contentManager/Body/useFileUpload.tsx?","webpack:///./contentManager/Body/useMetaDataFormInputs.ts?","webpack:///./contentManager/Hooks/useMailSendPopUpAuth.tsx?","webpack:///./contentManager/Panels/CMAddDatasourceItemPanel.tsx?","webpack:///./contentManager/Panels/CMCheckinModal.tsx?","webpack:///./contentManager/Panels/CMConfirmModal.tsx?","webpack:///./contentManager/Panels/CMEmailAttachmentPanel.tsx?","webpack:///./contentManager/Panels/CMErrorModal.tsx?","webpack:///./contentManager/Panels/CMFileFilterPanel/CMFileFilterPanelSection.tsx?","webpack:///./contentManager/Panels/CMFileFilterPanel/FileFilterHelper.ts?","webpack:///./contentManager/Panels/CMFileInfoPanel.tsx?","webpack:///./contentManager/Panels/CMFileSharePanel.tsx?","webpack:///./contentManager/Panels/CMFilesUpdatePanel.tsx?","webpack:///./contentManager/Panels/CMMultipleFilesMetaDataPanel.tsx?","webpack:///./contentManager/Panels/CMVersionHistoryModal.tsx?","webpack:///./contentManager/Services/ShareToTeamsService.ts?","webpack:///./src/taskpane/components/CustomToast.ts?","webpack:///./src/taskpane/components/Loader.tsx?","webpack:///./src/taskpane/components/_v2/_shared/PeopleFinder/PeopleFinder.tsx?","webpack:///./src/taskpane/components/_v2/_shared/SuccessErrorMessage/SuccessErrorMessage.tsx?","webpack:///./src/taskpane/components/_v2/_shared/VersionSelector/VersionSelector.tsx?","webpack:///./src/taskpane/components/_v2/_shared/VersionSelector/VersionSelectorMinMajOnly.tsx?","webpack:///./src/taskpane/components/_v2/_shared/WebPanel/WebPanel.tsx?","webpack:///./src/taskpane/components/_v2/components/Explorer/Fileview/Fileview.tsx?","webpack:///./src/taskpane/components/_v2/components/Panels/ApprovalPanel/ApprovalPanel.tsx?","webpack:///./src/taskpane/components/_v2/components/Panels/SigningPanel/SigningPanel.tsx?","webpack:///./src/taskpane/components/_v2/components/Tooltips/PiiTooltip.tsx?","webpack:///./src/taskpane/components/_v2/redux/api/local/api-local-interfaces.ts?","webpack:///./src/taskpane/components/_v2/redux/hooks/useFiles.ts?","webpack:///./src/taskpane/components/directoryComponents/AfterSaveAppSelector.tsx?","webpack:///./src/taskpane/components/directoryComponents/InputMetadataFactory.tsx?","webpack:///./src/taskpane/components/directoryComponents/SavingInBackgroundContent.tsx?","webpack:///./src/taskpane/components/directoryComponents/advancedSearch/components/CollapsibleSection.tsx?","webpack:///./src/taskpane/components/directoryComponents/advancedSearch/components/SectionTitle.tsx?","webpack:///./src/taskpane/components/directoryComponents/factories/ValidatorFactory.ts?","webpack:///./src/taskpane/components/directoryComponents/factories/inputFactory.tsx?","webpack:///./src/taskpane/components/directoryComponents/factories/inputFactoryHelper.tsx?","webpack:///./src/taskpane/components/directoryComponents/oneDrive/DuplicateFiles.tsx?","webpack:///./src/taskpane/components/directoryComponents/oneDrive/DuplicateFolders.tsx?","webpack:///./src/taskpane/components/directoryComponents/sharepoint/SaveToSharepoint.tsx?","webpack:///./src/taskpane/components/enums/EmailCreationEnum.ts?","webpack:///./src/taskpane/components/enums/FolderTypeIconEnum.ts?","webpack:///./src/taskpane/components/enums/ImageTypeEnum.ts?","webpack:///./src/taskpane/components/enums/OfficeService.ts?","webpack:///./src/taskpane/components/enums/SaveModeEnum.ts?","webpack:///./src/taskpane/components/enums/ValidationResult.ts?","webpack:///./src/taskpane/components/enums/datasourceTypeEnum.ts?","webpack:///./src/taskpane/components/enums/inputTypeEnum.ts?","webpack:///./src/taskpane/components/file/fileItems.tsx?","webpack:///./src/taskpane/components/helpers/SearchOpenExtensionHelper.ts?","webpack:///./src/taskpane/components/helpers/UrlHelper.ts?","webpack:///./src/taskpane/components/helpers/dataSourceDropdownBinder.ts?","webpack:///./src/taskpane/components/helpers/dataSourceFieldHelper.ts?","webpack:///./src/taskpane/components/helpers/dataSourceHelper.ts?","webpack:///./src/taskpane/components/helpers/dataSourceSharePointClassifier.ts?","webpack:///./src/taskpane/components/helpers/datasourceDropdownInitializer.ts?","webpack:///./src/taskpane/components/helpers/datasourceValidationHelper.ts?","webpack:///./src/taskpane/components/helpers/detailListBuilder.tsx?","webpack:///./src/taskpane/components/helpers/fileDownloader.ts?","webpack:///./src/taskpane/components/helpers/fileUploadHelper.ts?","webpack:///./src/taskpane/components/helpers/folderCreationHelper.ts?","webpack:///./src/taskpane/components/helpers/folderTypeIconQuery.ts?","webpack:///./src/taskpane/components/helpers/inputTypeSharePointClassifier.ts?","webpack:///./src/taskpane/components/helpers/metaDataHelper.ts?","webpack:///./src/taskpane/components/helpers/officeHelper.ts?","webpack:///./src/taskpane/components/helpers/oneDriveUrlHelper.ts?","webpack:///./src/taskpane/components/helpers/renderHelper.tsx?","webpack:///./src/taskpane/components/helpers/shareFileEmailTemplateHelper.ts?","webpack:///./src/taskpane/components/helpers/sharepointContentTypeHelper.ts?","webpack:///./src/taskpane/components/helpers/tagHelper.ts?","webpack:///./src/taskpane/components/helpers/validateEmail.ts?","webpack:///./src/taskpane/components/inputs/YesNo.tsx?","webpack:///./src/taskpane/components/inputs/checkboxMultiColumn.tsx?","webpack:///./src/taskpane/components/inputs/choice.tsx?","webpack:///./src/taskpane/components/inputs/contentTypeNameDatasourcePicker.tsx?","webpack:///./src/taskpane/components/inputs/currency.tsx?","webpack:///./src/taskpane/components/inputs/datasourceDropdown.tsx?","webpack:///./src/taskpane/components/inputs/datasourceMultipleDropdown.tsx?","webpack:///./src/taskpane/components/inputs/datasourcePanel.tsx?","webpack:///./src/taskpane/components/inputs/datasourceTagPicker.tsx?","webpack:///./src/taskpane/components/inputs/datasourceTextTagPicker.tsx?","webpack:///./src/taskpane/components/inputs/dateOnly.tsx?","webpack:///./src/taskpane/components/inputs/dateTime.tsx?","webpack:///./src/taskpane/components/inputs/errorMessage/ErrorMessage.tsx?","webpack:///./src/taskpane/components/inputs/hyperLink.tsx?","webpack:///./src/taskpane/components/inputs/listItemPicker/ComboBoxListItemPicker.tsx?","webpack:///./src/taskpane/components/inputs/listItemPicker/ListItemPicker.tsx?","webpack:///./src/taskpane/components/inputs/listItemPicker/index.ts?","webpack:///./src/taskpane/components/inputs/lookupMulti.tsx?","webpack:///./src/taskpane/components/inputs/multiLine.tsx?","webpack:///./src/taskpane/components/inputs/normalTextInput.tsx?","webpack:///./src/taskpane/components/inputs/number.tsx?","webpack:///./src/taskpane/components/inputs/peoplePicker.tsx?","webpack:///./src/taskpane/components/inputs/percentage.tsx?","webpack:///./src/taskpane/components/inputs/pictureHyperLink.tsx?","webpack:///./src/taskpane/components/inputs/taxonomy.tsx?","webpack:///./src/taskpane/components/inputs/taxonomyPicker/TaxonomyPicker.tsx?","webpack:///./src/taskpane/components/inputs/taxonomyPicker/Term.tsx?","webpack:///./src/taskpane/components/inputs/taxonomyPicker/TermParent.tsx?","webpack:///./src/taskpane/components/inputs/taxonomyPicker/TermPicker.tsx?","webpack:///./src/taskpane/components/inputs/taxonomyPicker/index.ts?","webpack:///./src/taskpane/components/inputs/taxonomyPicker/termActions/ButtonTermAction.tsx?","webpack:///./src/taskpane/components/inputs/taxonomyPicker/termActions/DropdownTermAction.tsx?","webpack:///./src/taskpane/components/inputs/taxonomyPicker/termActions/ITermsActions.ts?","webpack:///./src/taskpane/components/inputs/taxonomyPicker/termActions/TermActions.ts?","webpack:///./src/taskpane/components/inputs/taxonomyPicker/termActions/TermActionsControl.tsx?","webpack:///./src/taskpane/components/inputs/taxonomyPicker/termActions/getTermActionChange.ts?","webpack:///./src/taskpane/components/inputs/taxonomyPicker/termActions/index.ts?","webpack:///./src/taskpane/components/panels/NewFolderPanel.tsx?","webpack:///./src/taskpane/components/panels/UploaderContainer.tsx?","webpack:///./src/taskpane/components/validators/BaseValidator.ts?","webpack:///./src/taskpane/components/validators/CollectionValidator.ts?","webpack:///./src/taskpane/components/validators/CurrencyValidator.ts?","webpack:///./src/taskpane/components/validators/DateValidator.ts?","webpack:///./src/taskpane/components/validators/HyperLinkValidator.ts?","webpack:///./src/taskpane/components/validators/NoValidation.ts?","webpack:///./src/taskpane/components/validators/NumberValidator.ts?","webpack:///./src/taskpane/components/validators/PercentageValidator.ts?","webpack:///./src/taskpane/components/validators/PickerValidator.ts?","webpack:///./src/taskpane/components/validators/TaxonomyValidator.ts?","webpack:///./src/taskpane/components/validators/TextValidator.ts?","webpack:///./src/taskpane/config/datasourceConstants.ts?","webpack:///./src/taskpane/config/dateSettings.ts?","webpack:///./src/taskpane/interfaces/ISPService.ts?","webpack:///./src/taskpane/services/BasePersistor.ts?","webpack:///./src/taskpane/services/DatasourceService.ts?","webpack:///./src/taskpane/services/DefaultValueService.ts?","webpack:///./src/taskpane/services/FileFolderNameExtensions.ts?","webpack:///./src/taskpane/services/FileService.ts?","webpack:///./src/taskpane/services/FileSystemEntryPersistor.ts?","webpack:///./src/taskpane/services/HooksService.ts?","webpack:///./src/taskpane/services/OfficePersistor.ts?","webpack:///./src/taskpane/services/OutlookPersistor.ts?","webpack:///./src/taskpane/services/OutlookService.ts?","webpack:///./src/taskpane/services/SPService.ts?","webpack:///./src/taskpane/services/SPTermStorePickerService.ts?","webpack:///./src/taskpane/services/dal/ListItemRepository.ts?","webpack:///./src/taskpane/services/factories/PersistorFactory.ts?","webpack:///./src/taskpane/styles/datePickerStyles.ts?","webpack:///./utilities/DragAndDropHelper.ts?","webpack:///./utilities/FileNameDownloadTemplateHelper.ts?","webpack:///./utilities/Hooks/useDidMountEffect.ts?","webpack:///./utilities/OutlookUtils.ts?","webpack:///./utilities/SavingLocationStructureModule.ts?","webpack:///./utilities/UserModule.ts?","webpack:///./utilities/lcid/lcid.ts?","webpack:///./utilities/lcid/lcidTable.ts?"],"sourcesContent":["import React from \"react\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport { customToast } from \"../../src/taskpane/components/CustomToast\";\r\nimport { ContentManagerCopyMoveModeEnum } from \"../../src/taskpane/components/enums/ContentManagerCopyMoveModeEnum\";\r\nimport { FileTypeEnum } from \"../../src/taskpane/components/enums/fileTypeEnum\";\r\nimport { FolderTypeEnum } from \"../../src/taskpane/components/enums/FolderTypeEnum\";\r\nimport { FolderTypeIconEnum } from \"../../src/taskpane/components/enums/FolderTypeIconEnum\";\r\nimport { OneDriveOverWriteEnum } from \"../../src/taskpane/components/enums/oneDriveOverWriteEnum\";\r\nimport { renameDuplicateNames } from \"../../src/taskpane/components/helpers/fileUploadHelper\";\r\nimport { FolderTypeIconQuery } from \"../../src/taskpane/components/helpers/folderTypeIconQuery\";\r\nimport { OneDriveUrlHelper } from \"../../src/taskpane/components/helpers/oneDriveUrlHelper\";\r\nimport { StoreItemHelper } from \"../../src/taskpane/components/helpers/storeItemHelper\";\r\nimport { RecentFilesMapper } from \"../../src/taskpane/components/mappers/recentFilesMapper\";\r\nimport { CheckinTypes, ExchangeMailFolderUploadRequest, IFileSaveFileItem, IFileSaveResult, ListSettings } from \"../../src/taskpane/components/_v2/redux/api/local/api-local-interfaces\";\r\nimport { RootState } from \"../../src/taskpane/components/_v2/redux/storeMain\";\r\nimport { ComponentTypes } from \"../../src/taskpane/config/config\";\r\nimport { DocubirdCache, sharePointInternalFileName, sharePointInternalTitleName } from \"../../src/taskpane/config/constants\";\r\nimport { IFileToUpload } from \"../../src/taskpane/interfaces/IFileToUpload\";\r\nimport { IPageSettings } from \"../../src/taskpane/interfaces/IPageSettings\";\r\nimport { ISharepointRelativeFileInfo } from \"../../src/taskpane/interfaces/ISharepointRelativeFileInfo\";\r\nimport { IStoreItem } from \"../../src/taskpane/interfaces/IStoredItem\";\r\nimport { ListItemCreationData } from \"../../src/taskpane/interfaces/ListItemCreationData\";\r\nimport { FileMetaData } from \"../../src/taskpane/interfaces/props/FileMetaData\";\r\nimport { SharePointInputData } from \"../../src/taskpane/interfaces/props/SharePointInputData\";\r\nimport { setContentManagerExchange, setContentManagerExchangeProgress, setContentManagerMoveTo } from \"../../src/taskpane/redux/modules/contentManagerDirectory\";\r\nimport { resetDuplicateFilesAndOverWriteSettings, setFiles, setOneDriveOverwriteOptionSelected } from \"../../src/taskpane/redux/modules/file\";\r\nimport { resetLocationBeforeSaving } from \"../../src/taskpane/redux/modules/oneDrive\";\r\nimport { addRecentItem } from \"../../src/taskpane/redux/modules/recentItems\";\r\nimport { setIsBusySaving, setIsCheckingForDuplicates, setIsSavingInBackground, setNeedsRedirectToHome } from \"../../src/taskpane/redux/modules/savingInBackground\";\r\nimport { resetWorkingDirectories } from \"../../src/taskpane/redux/modules/workingDirectory\";\r\nimport { DefaultValueService } from \"../../src/taskpane/services/DefaultValueService\";\r\nimport emailMapper from \"../../src/taskpane/services/EmailMapper\";\r\nimport { PersistorFactory } from \"../../src/taskpane/services/factories/PersistorFactory\";\r\nimport { FileService } from \"../../src/taskpane/services/FileService\";\r\nimport { getOneDriveRootDetails, getRelativeFileInfo } from \"../../src/taskpane/services/GraphService\";\r\nimport authModule from \"../../utilities/AuthModule\";\r\nimport { CacheHelper } from \"../../utilities/CacheHelper\";\r\nimport { DragAndDropHelper, IFileSystemFolder } from \"../../utilities/DragAndDropHelper\";\r\nimport { LanguageContext } from \"../../utilities/LocalizationModule\";\r\nimport { logger } from \"../../utilities/logger\";\r\nimport { CategoryDisplayNames } from \"../../utilities/OutlookUtils\";\r\nimport savingLocationStructureModule from \"../../utilities/SavingLocationStructureModule\";\r\nimport { FileSystemEntryPersistor } from \"../../src/taskpane/services/FileSystemEntryPersistor\";\r\nimport { apiAddListItem, apiUploadExchangeMailFolder } from \"../../src/taskpane/services/ApiService\";\r\nimport { SaveMode } from \"../../src/taskpane/components/enums/SaveModeEnum\";\r\nimport { useFiles } from \"../../src/taskpane/components/_v2/redux/hooks/useFiles\";\r\n\r\nexport function useFileUpload() {\r\n const dispatch = useDispatch();\r\n const languageStrings = React.useContext(LanguageContext);\r\n\r\n // const hasDuplicateFiles = useSelector((state: RootState) => state.files.files.some(item => item.isDuplicate && item.isSelected && !item.isFolder));\r\n // const hasDuplicateFolders = useSelector((state: RootState) => state.files.files.some(item => item.isDuplicate && item.isSelected && item.isFolder));\r\n // const canOverwrite = useSelector((state: RootState) => state.files.canOverwrite);\r\n const currentDirectory = useSelector((state: RootState) => state.workingDirectories.workingDirectories.length > 0 ? state.workingDirectories.workingDirectories[state.workingDirectories.workingDirectories.length - 1] : null);\r\n const mode = useSelector((state: RootState) => state.mode.mode);\r\n const currentSharepointFolder = useSelector((state: RootState) => state.currentSharepointFolder);\r\n const files = useSelector((state: RootState) => state.files.files);\r\n // const selectedFiles = useSelector((state: RootState) => state.files.files.filter(item => item.isSelected));\r\n const savingLocation = useSelector((state: RootState) => state.savingLocation);\r\n const accountUniqueId = useSelector((state: RootState) => state.user?.account?.uniqueId);\r\n const accountId = useSelector((state: RootState) => state.user?.account?.accountId);\r\n const convertEmailToPDF = useSelector((state: RootState) => state.user.settings.convertEmailToPDF);\r\n\r\n const userSettings = useSelector((state: RootState) => state.user);\r\n const oneDriveRootDetails = useSelector((state: RootState) => state.workingDirectories.oneDriveRootDetails);\r\n const oneDriveOverwriteOption = useSelector((state: RootState) => state.files.oneDriveOverwriteOption);\r\n const oneDriveLocationBeforeSaving = useSelector((state: RootState) => state.oneDrive.locationBeforeSaving);\r\n const rootOneDriveId = useSelector((state: RootState) => state.workingDirectories.oneDriveRootDetails?.driveId);\r\n const tenantReplaceFileNameWithGUID = useSelector((state: RootState) => state.tenantInfo?.replaceFileNameWithGUID);\r\n const moveToEnabled = useSelector((state: RootState) => state.contentManagerDirectory.moveTo.moveToEnabled);\r\n const moveToMode = useSelector((state: RootState) => state.contentManagerDirectory.moveTo.mode);\r\n const exchange = useSelector((state: RootState) => state.contentManagerDirectory.exchange);\r\n const exchangeSelectedAccount = useSelector((state: RootState) => state.contentManagerDirectory.exchange.selectedAccount);\r\n\r\n const { checkPdfFiles } = useFiles();\r\n\r\n const [showSelectVersion, setShowSelectVersion] = React.useState(false);\r\n const [spHasDuplicateFiles, setSpHasDuplicateFiles] = React.useState(false);\r\n const [spHasDuplicateFolders, setSpHasDuplicateFolders] = React.useState(false);\r\n const [selectedCheckinType, setSelectedCheckinType] = React.useState(CheckinTypes.minorCheckIn);\r\n const selectedCheckinTypeRef = React.useRef(CheckinTypes.minorCheckIn);\r\n\r\n const [_isFileSystemFileUpload, _setIsFileSystemFileUpload] = React.useState();\r\n const isFileSystemFileUploadRef = React.useRef(false);\r\n const setIsFileSystemFileUpload = (isFileSystemFileUpload: boolean) => {\r\n isFileSystemFileUploadRef.current = isFileSystemFileUpload;\r\n _setIsFileSystemFileUpload(isFileSystemFileUpload);\r\n };\r\n\r\n const filesRef = React.useRef([]);\r\n const selectedFilesRef = React.useRef([]);\r\n React.useEffect(() => {\r\n filesRef.current = files;\r\n selectedFilesRef.current = files.filter(item => item.isSelected);\r\n }, [files]);\r\n\r\n React.useEffect(() => {\r\n selectedCheckinTypeRef.current = selectedCheckinType;\r\n }, [selectedCheckinType])\r\n\r\n const saveEntireEmailFolder = async (\r\n autoFolderCreation: boolean,\r\n inputValuesToSave: SharePointInputData[],\r\n isInOneDrive: boolean,\r\n folderName: string\r\n ) => {\r\n const siteUrl = !isInOneDrive ? currentDirectory?.webUrl : oneDriveRootDetails?.sharePointSiteUrl;\r\n const saveLocation = savingLocation ?? currentDirectory;\r\n const sharePointListId = !isInOneDrive ? currentDirectory.sharePointListId : oneDriveRootDetails?.sharePointListId;\r\n const sharePointToken = !isInOneDrive ? await authModule.getSharePointAccessToken() : await authModule.getOneDriveAccessToken();\r\n\r\n const emailMappings = CacheHelper.get(DocubirdCache.spEmailPropertyMappings);\r\n\r\n dispatch(setIsBusySaving({ isBusySaving: true, isSuccess: false }));\r\n dispatch(setContentManagerMoveTo({\r\n moveToEnabled: false,\r\n workingDirectories: [],\r\n selectedFiles: [],\r\n siteUrl: \"\",\r\n sourceServerRelPath: \"\",\r\n }));\r\n\r\n try {\r\n const request: ExchangeMailFolderUploadRequest = {\r\n sharePointToken,\r\n mailToken: await authModule.getMailboxAccessToken(true),\r\n siteUrl,\r\n listId: sharePointListId,\r\n destinationUrl: !saveLocation.directory ? saveLocation.webUrl : `${saveLocation.webUrl}/${saveLocation.directory}`,\r\n autoFolderCreation,\r\n exchangeAccountEmail: exchangeSelectedAccount,\r\n mailItemCategory: getCategoryType(getFolderType()),\r\n mailFolderId: exchange.selectedFolderId,\r\n metadata: inputValuesToSave.map(inputValue => {\r\n return {\r\n ...inputValue,\r\n }\r\n }),\r\n sharePointEmailMappings: emailMappings,\r\n folderName\r\n }\r\n\r\n const uploadResults = await apiUploadExchangeMailFolder(request);\r\n dispatch(setContentManagerExchangeProgress(uploadResults));\r\n dispatch(setContentManagerExchange({ selectedFolderId: \"\", selectedFolderName: \"\", selectedAccount: \"\" }));\r\n\r\n CacheHelper.remove(DocubirdCache.spEmailPropertyMappings);\r\n } catch (error) {\r\n let message = error.error ? error.error : languageStrings.ErrorMessageGeneric;\r\n dispatch(setIsBusySaving({ isBusySaving: false, isSuccess: false, errorMessages: [message] }));\r\n logger(error, \"useFileUpload.tsx (uploadExchangeMailFolder)\");\r\n }\r\n }\r\n\r\n const saveSharePointEmailandMetadata = async (\r\n autoFolderCreation: boolean,\r\n inputValuesToSave: SharePointInputData[],\r\n informationProtectionId: string,\r\n fileMetaData?: FileMetaData[],\r\n setIsCMMultipleFilesMetaDataPanelOpen?: (isOpen: boolean) => void,\r\n savingIndividualFile?: boolean,\r\n setSelectedIndividualFile?: (fileId: string, isSaving: boolean, saveSuccess: boolean, saveError: boolean) => void,\r\n optionsSelected?: boolean,\r\n saveMode?: SaveMode\r\n ) => {\r\n const fileMetaDataToValidate: FileMetaData[] = [];\r\n if (fileMetaData) {\r\n fileMetaData.forEach(fileMetaData => {\r\n const file = selectedFilesRef.current.find(x => x.id === fileMetaData.fileId);\r\n if (file) {\r\n fileMetaDataToValidate.push({\r\n fileId: fileMetaData.fileId,\r\n name: fileMetaData.name,\r\n isSelected: fileMetaData.isSelected,\r\n metaData: fileMetaData.metaData?.filter(x => x.internalName !== sharePointInternalFileName)\r\n });\r\n }\r\n });\r\n }\r\n\r\n const updatedSelectedFiles = renameDuplicateNames([...selectedFilesRef.current].filter(f => !f.isFolder));\r\n const hasDuplicateFolders: boolean = selectedFilesRef.current?.some(x => x.isDuplicate && x.isFolder);\r\n let hasDuplicateFiles: boolean;\r\n\r\n let metaDataInvalid: boolean = false;\r\n if (fileMetaDataToValidate?.length > 0) {\r\n metaDataInvalid = !sharepointDataListIsValid(fileMetaDataToValidate, savingIndividualFile);\r\n }\r\n else {\r\n metaDataInvalid = !sharepointDataIsValid(inputValuesToSave);\r\n }\r\n\r\n if (metaDataInvalid) {\r\n dispatch(setIsSavingInBackground(false));\r\n if (savingIndividualFile) {\r\n setSelectedIndividualFile(fileMetaDataToValidate.find(x => x.isSelected === true)?.fileId, false, false, false);\r\n }\r\n return false;\r\n }\r\n else if (saveMode === SaveMode.SaveAsPdf) {\r\n const fileCheckResults: IFileToUpload[] = await checkPdfFiles(saveMode, updatedSelectedFiles);\r\n selectedFilesRef.current = fileCheckResults?.filter(file => file.isSelected);\r\n hasDuplicateFiles = fileCheckResults?.some(item => item.isSelected && item.isDuplicate && !item.isFolder);\r\n if (oneDriveOverwriteOption === OneDriveOverWriteEnum.notSelected && fileCheckResults?.some(res => res.isDuplicate || res.filePreCommitResult?.checkedOut || res.filePreCommitResult?.locked)) {\r\n dispatch(setIsSavingInBackground(false));\r\n setSpHasDuplicateFiles(true);\r\n return false;\r\n }\r\n }\r\n\r\n if (savingIndividualFile) {\r\n const individualFile = fileMetaDataToValidate.find(x => x.isSelected === true);\r\n setSelectedIndividualFile(individualFile.fileId, true, false, false);\r\n\r\n hasDuplicateFiles = selectedFilesRef.current?.some(x => x.id === individualFile.fileId && x.isDuplicate && !x.isFolder);\r\n } else {\r\n dispatch(setIsSavingInBackground(true, ComponentTypes.SharePoint));\r\n hasDuplicateFiles = selectedFilesRef.current?.some(x => x.isDuplicate && !x.isFolder);\r\n }\r\n\r\n if (fileMetaDataToValidate?.length > 0) {\r\n const individualFile = fileMetaDataToValidate.find(x => x.isSelected === true);\r\n\r\n if (currentSharepointFolder?.enableMinorVersions === true && !optionsSelected) {\r\n setShowSelectVersion(true);\r\n setSpHasDuplicateFiles(hasDuplicateFiles);\r\n setSpHasDuplicateFolders(hasDuplicateFolders);\r\n dispatch(setIsSavingInBackground(false));\r\n if (savingIndividualFile) {\r\n setSelectedIndividualFile(individualFile.fileId, false, false, false);\r\n }\r\n return false;\r\n }\r\n else if ((hasDuplicateFiles || hasDuplicateFolders) && oneDriveOverwriteOption === OneDriveOverWriteEnum.notSelected) {\r\n setSpHasDuplicateFiles(hasDuplicateFiles);\r\n setSpHasDuplicateFolders(hasDuplicateFolders);\r\n dispatch(setIsSavingInBackground(false));\r\n if (savingIndividualFile) {\r\n setSelectedIndividualFile(individualFile.fileId, false, false, false);\r\n }\r\n return false;\r\n }\r\n\r\n if (!savingIndividualFile && setIsCMMultipleFilesMetaDataPanelOpen) {\r\n setIsCMMultipleFilesMetaDataPanelOpen(false);\r\n }\r\n }\r\n else {\r\n if (currentSharepointFolder?.enableMinorVersions === true && showSelectVersion === false) {\r\n setShowSelectVersion(true);\r\n setSpHasDuplicateFiles(hasDuplicateFiles);\r\n setSpHasDuplicateFolders(hasDuplicateFolders);\r\n dispatch(setIsSavingInBackground(false));\r\n return false;\r\n }\r\n else if (hasDuplicateFiles && oneDriveOverwriteOption === OneDriveOverWriteEnum.notSelected) {\r\n setSpHasDuplicateFiles(hasDuplicateFiles);\r\n setSpHasDuplicateFolders(hasDuplicateFolders);\r\n dispatch(setIsSavingInBackground(false));\r\n return false;\r\n }\r\n else if (hasDuplicateFolders && !spHasDuplicateFolders) {\r\n setSpHasDuplicateFiles(hasDuplicateFiles);\r\n setSpHasDuplicateFolders(hasDuplicateFolders);\r\n dispatch(setIsSavingInBackground(false));\r\n return false;\r\n }\r\n }\r\n\r\n if (!savingIndividualFile) {\r\n dispatch(setIsBusySaving({ isBusySaving: true, isSuccess: false }));\r\n }\r\n setShowSelectVersion(false);\r\n setSpHasDuplicateFiles(false);\r\n setSpHasDuplicateFolders(false);\r\n setIsFileSystemFileUpload(DragAndDropHelper.isDroppedModeActive);\r\n\r\n try {\r\n const selectedItems = CacheHelper.get(DocubirdCache.selectedExchangeItems);\r\n\r\n const fileMetaDataInput: FileMetaData[] = fileMetaDataToValidate?.length > 0\r\n ? fileMetaDataToValidate\r\n : updatedSelectedFiles.map(file => {\r\n const selectedItem = (moveToEnabled && moveToMode === ContentManagerCopyMoveModeEnum.CopySelectedEmails) ? selectedItems?.find(x => x.id === file.graphMailItemId) : null;\r\n return {\r\n fileId: file.id,\r\n name: file.name,\r\n isSelected: false,\r\n metaData: inputValuesToSave.filter(x => x.internalName !== sharePointInternalFileName).map(inputValue => {\r\n let value = (inputValue.internalName === sharePointInternalTitleName && inputValue.value === languageStrings.TitleAutoSet) ? file.name : inputValue.value;\r\n\r\n if (selectedItem) {\r\n if (inputValue.xml && inputValue.xml.DisplayName) {\r\n const colName = inputValue.xml.DisplayName.trim().toLowerCase(); //directly from sharepoint\r\n const spColumnNames = emailMapper.getAllListedColumns(); //list of all saved columns we should check for mapping\r\n const spColumnName = spColumnNames.find(col => col.toLowerCase() === colName); //either returns undefined or a sharepoint column name \r\n if (spColumnName) {\r\n const mappedResult = emailMapper.getOfficeJSToEmailMapping(spColumnName, selectedItem);\r\n if (mappedResult.mappedVal?.value) {\r\n value = DefaultValueService.setMappedDefault(inputValue, mappedResult.mappedVal);\r\n }\r\n }\r\n }\r\n }\r\n\r\n return {\r\n ...inputValue,\r\n value\r\n }\r\n })\r\n }\r\n });\r\n\r\n let fileSaveResult: IFileSaveResult;\r\n\r\n if (moveToEnabled) {\r\n dispatch(setContentManagerMoveTo({\r\n moveToEnabled: false,\r\n workingDirectories: [],\r\n selectedFiles: [],\r\n siteUrl: \"\",\r\n sourceServerRelPath: \"\",\r\n }));\r\n dispatch(setContentManagerExchange({ selectedFolderId: \"\", selectedFolderName: \"\", selectedAccount: \"\" }));\r\n dispatch(setIsBusySaving({ isBusySaving: true, isSuccess: false }));\r\n }\r\n else if (DragAndDropHelper.isDroppedModeActive) {\r\n const folderEntriesToUpload: IFileSystemFolder[] = [...DragAndDropHelper.folderEntries];\r\n const fileSystemFilesUploadResult = await DragAndDropHelper.uploadDroppedFiles(accountUniqueId, updatedSelectedFiles, folderEntriesToUpload);\r\n if (fileSystemFilesUploadResult.success === false) {\r\n dispatch(setIsBusySaving({ isBusySaving: false, isSuccess: false, errorMessages: fileSystemFilesUploadResult.failedFileNames }));\r\n setShowSelectVersion(false);\r\n setSpHasDuplicateFiles(false);\r\n setSpHasDuplicateFolders(false);\r\n return false;\r\n }\r\n\r\n // const siteUrl: string = savingLocation.webUrl;\r\n // const parentUrl: string = `${siteUrl}${savingLocation.directory ? `/${savingLocation.directory}` : ''}`;\r\n // await DragAndDropHelper.createFolders(await authModule.getSharePointAccessToken(), siteUrl, parentUrl, savingLocation.sharePointListId, autoFolderCreation, updatedSelectedFiles);\r\n\r\n try {\r\n fileSaveResult = await new FileSystemEntryPersistor().saveToSharepoint(\r\n false,\r\n savingIndividualFile ? updatedSelectedFiles.filter(x => x.id === fileMetaDataToValidate[0].fileId) : updatedSelectedFiles,\r\n folderEntriesToUpload,\r\n savingLocation,\r\n autoFolderCreation,\r\n fileMetaDataInput,\r\n accountUniqueId,\r\n informationProtectionId,\r\n userSettings.tenantOcrLanguage,\r\n tenantReplaceFileNameWithGUID,\r\n null,\r\n selectedCheckinTypeRef.current,\r\n oneDriveOverwriteOption === OneDriveOverWriteEnum.rename,\r\n saveMode\r\n );\r\n } catch (error) {\r\n logger(error, \"useFileUpload.tsx (saveSharePointEmailandMetadata - FileSystemEntryPersistor.saveToSharepoint)\");\r\n }\r\n }\r\n\r\n const folderType = getFolderType();\r\n if (!isFileSystemFileUploadRef.current) {\r\n const persistor = PersistorFactory.create(null, null, mode, isFileSystemFileUploadRef.current);\r\n const listSettings: ListSettings = {\r\n enableMinorVersions: currentSharepointFolder.enableMinorVersions ? currentSharepointFolder.enableMinorVersions : false,\r\n }\r\n\r\n fileSaveResult = await persistor.saveToSharepoint(\r\n savingIndividualFile ? updatedSelectedFiles.filter(x => x.id === fileMetaDataToValidate[0].fileId) : updatedSelectedFiles,\r\n savingLocation,\r\n autoFolderCreation,\r\n fileMetaDataInput,\r\n accountUniqueId,\r\n informationProtectionId,\r\n null,\r\n folderType,\r\n false,\r\n userSettings.convertEmailToPDF,\r\n userSettings.tenantOcrLanguage,\r\n userSettings.tenantEnablePII,\r\n tenantReplaceFileNameWithGUID,\r\n listSettings,\r\n selectedCheckinTypeRef.current,\r\n oneDriveOverwriteOption === OneDriveOverWriteEnum.rename ? true : false,\r\n exchangeSelectedAccount,\r\n getCategoryType(folderType),\r\n saveMode\r\n );\r\n }\r\n\r\n if (savingIndividualFile) {\r\n const savingSuccess = fileSaveResult.success === true;\r\n const savingError = fileSaveResult.success === false;\r\n const individualFile = fileMetaDataToValidate.find(x => x.isSelected === true);\r\n setSelectedIndividualFile(individualFile.fileId, false, savingSuccess, savingError);\r\n }\r\n else {\r\n if (fileSaveResult.success === true) {\r\n const recentFolder = saveToSharepointRecent(folderType);\r\n const recentFiles = await savesFileToRecent(await buildFilesToGetRecent(null, fileSaveResult.succeededFiles), autoFolderCreation);\r\n dispatch(addRecentItem(accountId, [...recentFiles, ...recentFolder]));\r\n dispatch(setIsBusySaving({ isBusySaving: false, isSuccess: true }));\r\n }\r\n else if (fileSaveResult.success === false) {\r\n dispatch(setIsBusySaving({ isBusySaving: false, isSuccess: false, errorMessages: fileSaveResult.failedFileNames }));\r\n }\r\n else {\r\n dispatch(setIsBusySaving({ isBusySaving: false, isSuccess: false, errorMessages: [languageStrings.ErrorMessageGeneric] }));\r\n }\r\n }\r\n\r\n setShowSelectVersion(false);\r\n setSpHasDuplicateFiles(false);\r\n setSpHasDuplicateFolders(false);\r\n dispatch(setOneDriveOverwriteOptionSelected(OneDriveOverWriteEnum.notSelected));\r\n } catch (err) {\r\n dispatch(setIsBusySaving({ isBusySaving: false, isSuccess: false, errorMessages: err?.response?.data }));\r\n setShowSelectVersion(false);\r\n setSpHasDuplicateFiles(false);\r\n setSpHasDuplicateFolders(false);\r\n }\r\n\r\n return true;\r\n };\r\n\r\n const getCategoryType = (folderType: FolderTypeEnum) => {\r\n let categoryToSet = \"\";\r\n switch (folderType) {\r\n case FolderTypeEnum.teamChannel:\r\n categoryToSet = CategoryDisplayNames.Teams;\r\n break;\r\n case FolderTypeEnum.sharepoint:\r\n categoryToSet = CategoryDisplayNames.SharePoint;\r\n break;\r\n case FolderTypeEnum.oneDrive:\r\n categoryToSet = CategoryDisplayNames.OneDrive;\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n return categoryToSet;\r\n }\r\n\r\n const addListItem = async (data: ListItemCreationData) => {\r\n try {\r\n dispatch(setIsSavingInBackground(true));\r\n dispatch(setIsBusySaving({ isBusySaving: true, isSuccess: false }));\r\n\r\n await apiAddListItem(data);\r\n\r\n dispatch(setIsSavingInBackground(false));\r\n dispatch(setIsBusySaving({ isBusySaving: false, isSuccess: true }));\r\n } catch (error) {\r\n logger(error, \"useFileUpload.tsx (addListItem)\");\r\n\r\n dispatch(setIsSavingInBackground(false));\r\n dispatch(setIsBusySaving({ isBusySaving: false, isSuccess: false, errorMessages: [languageStrings.ErrorMessageGeneric] }));\r\n }\r\n\r\n return true;\r\n }\r\n\r\n const sharepointDataIsValid = (inputValuesToSave: SharePointInputData[]) => {\r\n let itemsWithErrors = inputValuesToSave.filter(item => item.hasError).map(item => item.displayName);\r\n\r\n if (itemsWithErrors.length > 0) {\r\n generateToastError(itemsWithErrors);\r\n return false;\r\n }\r\n\r\n //double check validations\r\n inputValuesToSave.forEach(inputValue => {\r\n if (inputValue.xml?.Required === \"TRUE\") {\r\n if (!inputValue.value) {\r\n itemsWithErrors.push(inputValue.displayName);\r\n }\r\n else if (Array.isArray(inputValue.value) && inputValue.value?.length === 0) {\r\n itemsWithErrors.push(inputValue.displayName);\r\n }\r\n else if (Array.isArray(inputValue.value?.terms) && inputValue.value?.terms?.length === 0) {\r\n itemsWithErrors.push(inputValue.displayName);\r\n }\r\n }\r\n });\r\n\r\n if (itemsWithErrors.length > 0) {\r\n generateToastError(itemsWithErrors);\r\n return false\r\n }\r\n\r\n return true;\r\n };\r\n\r\n const sharepointDataListIsValid = (fileMetaData: FileMetaData[], savingIndividualFile: boolean) => {\r\n let allErrors: string[] = [];\r\n\r\n fileMetaData.forEach(file => {\r\n if (savingIndividualFile && file.isSelected) {\r\n const itemsWithErrors = file.metaData.filter(item => item.hasError).map(item => `${item.displayName} (${file.name})`);\r\n allErrors = allErrors.concat(itemsWithErrors);\r\n }\r\n\r\n if (!savingIndividualFile) {\r\n const itemsWithErrors = file.metaData.filter(item => item.hasError).map(item => `${item.displayName} (${file.name})`);\r\n allErrors = allErrors.concat(itemsWithErrors);\r\n }\r\n\r\n });\r\n\r\n if (allErrors.length > 0) {\r\n generateToastError(allErrors);\r\n }\r\n\r\n return allErrors.length === 0;\r\n };\r\n\r\n const sharepointDataListEntireFolderIsValid = (inputValues: SharePointInputData[]) => {\r\n let allErrors: string[] = [];\r\n\r\n const itemsWithErrors = inputValues.filter(item => item.hasError).map(item => `${item.displayName}`);\r\n allErrors = allErrors.concat(itemsWithErrors);\r\n\r\n if (allErrors.length > 0) {\r\n generateToastError(allErrors);\r\n }\r\n\r\n return allErrors.length === 0;\r\n };\r\n\r\n const generateToastError = (items: string[]) => {\r\n customToast.error(\r\n
\r\n {languageStrings.MetadataValidationFailed}
\r\n {generateErrors(items)}\r\n
\r\n );\r\n };\r\n\r\n const generateErrors = (items: string[]) => {\r\n return items.map((item, index) => {\r\n return (\r\n \r\n • {item}
\r\n
\r\n );\r\n });\r\n };\r\n\r\n const getFolderType = () => {\r\n if (currentDirectory.isTeamsRootFolder) return FolderTypeEnum.teamChannel;\r\n if (currentDirectory.type === ComponentTypes.OneDrive)\r\n return FolderTypeEnum.oneDrive;\r\n\r\n return FolderTypeEnum.sharepoint;\r\n };\r\n\r\n const saveToSharepointRecent = (folderType: FolderTypeEnum.sharepoint | FolderTypeEnum.oneDrive | FolderTypeEnum.teamChannel): IStoreItem[] => {\r\n try {\r\n const savinglocationStructure = savingLocationStructureModule.getSavingLocationStructure();\r\n const lastDirectoryItem = savinglocationStructure ? savinglocationStructure[savinglocationStructure.length - 1] : null;\r\n const item: IStoreItem = {\r\n driveId: !lastDirectoryItem?.parentId ? lastDirectoryItem.id : lastDirectoryItem?.parentId,\r\n locations: savinglocationStructure && [...savinglocationStructure],\r\n itemId: !lastDirectoryItem?.parentId ? null : lastDirectoryItem?.id,\r\n name: lastDirectoryItem.fileTitle,\r\n fileType: FileTypeEnum.folder,\r\n folderTypeIcon: FolderTypeIconQuery.getIconType(\r\n folderType,\r\n {\r\n driveId: !lastDirectoryItem?.parentId ? lastDirectoryItem.id : lastDirectoryItem?.parentId,\r\n id: !lastDirectoryItem?.parentId ? null : lastDirectoryItem.id,\r\n name: \"\",\r\n contentTypeId: lastDirectoryItem?.contentTypeId\r\n },\r\n currentDirectory?.isTeamsFolder\r\n ),\r\n datePinned: new Date(),\r\n folderId: !lastDirectoryItem?.parentId ? null : lastDirectoryItem?.id,\r\n sharePointListId: lastDirectoryItem?.sharePointListId\r\n };\r\n\r\n StoreItemHelper.removeSaveLocation(item.locations);\r\n if (item.locations?.length > 0) {\r\n return [item];\r\n }\r\n } catch (e) {\r\n logger(e, \"useFileUpload.tsx (saveToSharepointRecent)\");\r\n }\r\n return [];\r\n };\r\n\r\n const savesFileToRecent = async (files: ISharepointRelativeFileInfo[], autoFolderCreation: boolean): Promise => {\r\n const data = await getRelativeFileInfo(files, autoFolderCreation); //info of files being saved\r\n if (!data.length) {\r\n return [];\r\n }\r\n\r\n try {\r\n const mapper = new RecentFilesMapper(languageStrings);\r\n return mapper.map(data, true);\r\n } catch (e) {\r\n logger(e, \"App.tsx (savesFileToRecent)\");\r\n }\r\n return [];\r\n }\r\n\r\n const buildFilesToGetRecent = async (fileSavedLocation?: IPageSettings, succeededFiles?: IFileSaveFileItem[]): Promise => {\r\n const fileLocation: IPageSettings = fileSavedLocation ?? savingLocationStructureModule.getSavingDestination() ?? currentDirectory;\r\n /*\r\n Required due to inconsistent property casing.\r\n */\r\n let fileDocumentLibrary: string = fileLocation.DocumentLibrary;\r\n if (!fileDocumentLibrary) {\r\n try {\r\n fileDocumentLibrary = fileLocation[\"documentLibrary\"];\r\n } catch (error) {\r\n logger(error, \"App.tsx (buildFilesToGetRecent)\");\r\n }\r\n }\r\n\r\n const driveId: string = await determineDriveIdForSaving(fileLocation);\r\n return selectedFilesRef.current.map((email, index) => ({\r\n driveId: driveId,\r\n documentLibrary: fileDocumentLibrary,\r\n directory: fileLocation.directory,\r\n fileName: `${succeededFiles[index] ? succeededFiles[index].name : `${email.name}.${email.extension}`}`\r\n }));\r\n }\r\n\r\n const determineDriveIdForSaving = async (destinationLocation: IPageSettings) => {\r\n const destinationLocationType = destinationLocation?.type;\r\n return destinationLocationType == ComponentTypes.OneDrive || destinationLocationType == ComponentTypes.OneDriveSubFolder\r\n ? getOneDriveBusinessDriveId(destinationLocation)\r\n : getSharepointDriveId(destinationLocation);\r\n }\r\n\r\n const getSharepointDriveId = (destinationLocation: IPageSettings) => {\r\n return !destinationLocation?.parentId ? destinationLocation.id : destinationLocation.parentId;\r\n }\r\n\r\n const getOneDriveBusinessDriveId = async (destinationLocation: IPageSettings) => {\r\n return destinationLocation.type === ComponentTypes.OneDrive ? oneDriveRootDetails?.driveId ?? (await getOneDriveRootDetails())?.driveId : destinationLocation.parentId;\r\n }\r\n\r\n const saveToOneDrive = async (\r\n folderName: string = \"\",\r\n fromLocationItemCurrentDirectory?: IPageSettings,\r\n savingLocationDirectory?: string,\r\n locationBeforeSaving?: IPageSettings[],\r\n searchedFolderLocation?: IPageSettings[],\r\n goToHome: boolean = false,\r\n saveMode?: SaveMode\r\n ): Promise => {\r\n\r\n dispatch(setIsCheckingForDuplicates(true));\r\n try {\r\n const duplicateFileResult = await getDuplicateOneDriveResult(saveMode);\r\n\r\n await doOneDriveSavingWork(\r\n folderName,\r\n duplicateFileResult,\r\n goToHome,\r\n fromLocationItemCurrentDirectory,\r\n savingLocationDirectory,\r\n locationBeforeSaving,\r\n searchedFolderLocation,\r\n saveMode\r\n );\r\n } catch (error) {\r\n logger(error, \"CMUploadFilesPanel.tsx (saveToOneDrive)\");\r\n dispatch(setIsCheckingForDuplicates(false));\r\n }\r\n };\r\n\r\n const getDuplicateOneDriveResult = async (saveMode?: SaveMode): Promise => {\r\n const savinglocationStructure = savingLocationStructureModule.getSavingLocationStructure();\r\n const lastDirectoryItem = savinglocationStructure ? savinglocationStructure[savinglocationStructure.length - 1] : null;\r\n const directoryUrl = !lastDirectoryItem?.directory\r\n ? lastDirectoryItem?.webUrl\r\n : `${lastDirectoryItem?.webUrl}${lastDirectoryItem?.directory?.startsWith('/') ? lastDirectoryItem.directory : `/${lastDirectoryItem?.directory}`}`;\r\n\r\n return await FileService.getFilePreCommitCheck(\r\n filesRef.current,\r\n {\r\n autoFolderCreation: false,\r\n destinationUrl: directoryUrl,\r\n siteUrl: OneDriveUrlHelper.getSiteUrl(lastDirectoryItem?.webUrl)\r\n },\r\n convertEmailToPDF,\r\n saveMode\r\n );\r\n };\r\n\r\n const doOneDriveSavingWork = async (\r\n folderName: string,\r\n duplicateFileResult: IFileToUpload[],\r\n goToHome: boolean,\r\n fromLocationItemCurrentDirectory?: IPageSettings,\r\n savingLocationDirectory?: string,\r\n locationBeforeSaving?: IPageSettings[],\r\n searchedFolderLocation?: IPageSettings[],\r\n saveMode?: SaveMode\r\n ): Promise => {\r\n dispatch(setFiles(duplicateFileResult));\r\n dispatch(setIsCheckingForDuplicates(false));\r\n\r\n const duplicateFiles = duplicateFileResult.some(item => item.isDuplicate && !item.isFolder);\r\n const duplicateFolders = duplicateFileResult.some(item => item.isDuplicate && item.isFolder);\r\n\r\n if (duplicateFiles || duplicateFolders) {\r\n if (duplicateFiles && (!oneDriveOverwriteOption || oneDriveOverwriteOption === OneDriveOverWriteEnum.notSelected)) {\r\n setSpHasDuplicateFiles(true);\r\n dispatch(setOneDriveOverwriteOptionSelected(OneDriveOverWriteEnum.rename));\r\n\r\n if (duplicateFolders && !spHasDuplicateFolders) {\r\n setSpHasDuplicateFolders(true);\r\n }\r\n\r\n if (goToHome) dispatch(setNeedsRedirectToHome(goToHome));\r\n return;\r\n }\r\n if (duplicateFolders && !spHasDuplicateFolders) {\r\n if (goToHome) dispatch(setNeedsRedirectToHome(goToHome));\r\n setSpHasDuplicateFolders(true);\r\n return;\r\n }\r\n }\r\n\r\n dispatch(setIsBusySaving({ isBusySaving: true, isSuccess: false }));\r\n dispatch(setIsSavingInBackground(true, ComponentTypes.OneDrive));\r\n\r\n setIsFileSystemFileUpload(DragAndDropHelper.isDroppedModeActive);\r\n\r\n const updatedSelectedFiles = renameDuplicateNames([...selectedFilesRef.current].filter(f => !f.isFolder));\r\n const folderType = getFolderType();\r\n\r\n let fileSaveResult: IFileSaveResult;\r\n try {\r\n if (moveToEnabled) {\r\n dispatch(setContentManagerMoveTo({\r\n moveToEnabled: false,\r\n workingDirectories: [],\r\n selectedFiles: [],\r\n siteUrl: \"\",\r\n sourceServerRelPath: \"\",\r\n }));\r\n dispatch(setContentManagerExchange({ selectedFolderId: \"\", selectedFolderName: \"\", selectedAccount: \"\" }));\r\n dispatch(setIsBusySaving({ isBusySaving: true, isSuccess: false }));\r\n CacheHelper.remove(DocubirdCache.selectedExchangeItems);\r\n }\r\n else if (DragAndDropHelper.isDroppedModeActive) {\r\n const folderEntriesToUpload: IFileSystemFolder[] = [...DragAndDropHelper.folderEntries];\r\n const fileSystemFilesUploadResult = await DragAndDropHelper.uploadDroppedFiles(accountUniqueId, updatedSelectedFiles, folderEntriesToUpload);\r\n if (fileSystemFilesUploadResult.success === false) {\r\n dispatch(setIsBusySaving({ isBusySaving: false, isSuccess: false, errorMessages: fileSystemFilesUploadResult?.failedFileNames }));\r\n return;\r\n }\r\n\r\n // const oneDriveDetails: IOneDriveRootDetails = oneDriveRootDetails ?? await getOneDriveRootDetails();\r\n // const savingDestination = savingLocationStructureModule.getSavingDestination();\r\n // const directory = savingLocationDirectory ? savingLocationDirectory : savingDestination?.directory;\r\n // const parentUrl = !directory\r\n // ? savingDestination?.webUrl\r\n // : `${savingDestination?.webUrl}${directory.startsWith('/') ? directory : `/${directory}`}`;\r\n // await DragAndDropHelper.createFolders(await authModule.getOneDriveAccessToken(), oneDriveDetails?.sharePointSiteUrl, parentUrl, oneDriveDetails?.sharePointListId, false, selectedFiles);\r\n try {\r\n fileSaveResult = await new FileSystemEntryPersistor().saveToSharepoint(\r\n true,\r\n updatedSelectedFiles,\r\n folderEntriesToUpload,\r\n savingLocation,\r\n false,\r\n [],\r\n accountUniqueId,\r\n null,\r\n userSettings.tenantOcrLanguage,\r\n false,\r\n null,\r\n CheckinTypes.majorCheckIn,\r\n oneDriveOverwriteOption === OneDriveOverWriteEnum.rename,\r\n saveMode\r\n );\r\n } catch (error) {\r\n logger(error, \"useFileUpload.tsx (doOneDriveSavingWork - FileSystemEntryPersistor.saveToSharepoint)\");\r\n }\r\n }\r\n\r\n if (!isFileSystemFileUploadRef.current) {\r\n const persistor = PersistorFactory.create(null, null, mode, isFileSystemFileUploadRef.current);\r\n fileSaveResult = await persistor.saveToOneDrive(\r\n updatedSelectedFiles,\r\n savingLocationDirectory ? savingLocationDirectory : savingLocation.directory,\r\n oneDriveOverwriteOption,\r\n null,\r\n savingLocationDirectory ? null : folderName,\r\n accountUniqueId,\r\n false,\r\n false,\r\n userSettings.tenantOcrLanguage,\r\n exchangeSelectedAccount,\r\n getCategoryType(folderType)\r\n );\r\n }\r\n\r\n if (fileSaveResult.success === true) {\r\n const recentFolder = saveToOneDriveRecent();\r\n const recentFiles = await savesFileToRecent(await buildFilesToGetRecent(fromLocationItemCurrentDirectory, fileSaveResult.succeededFiles), false);\r\n addRecentItem(accountId, [...recentFiles, ...recentFolder]);\r\n\r\n dispatch(setIsBusySaving({ isBusySaving: false, isSuccess: true }));\r\n //dispatch(setIsBusySaving({ isBusySaving: false, isSuccess: false, errorMessages: ['file 1', 'file 2'] }));\r\n resetToPreviousOneDriveLocationBeforeSaving(locationBeforeSaving ?? oneDriveLocationBeforeSaving);\r\n dispatch(resetDuplicateFilesAndOverWriteSettings(filesRef.current));\r\n }\r\n else if (fileSaveResult.success === false) {\r\n dispatch(setIsBusySaving({ isBusySaving: false, isSuccess: false, errorMessages: fileSaveResult.failedFileNames }));\r\n }\r\n else {\r\n dispatch(setIsBusySaving({ isBusySaving: false, isSuccess: false, errorMessages: [languageStrings.ErrorMessageGeneric] }));\r\n }\r\n } catch (err) {\r\n logger(err, \"CMUploadFilesPanel.txs (doOneDriveSavingWork)\");\r\n customToast.error(languageStrings.ErrorMessageGeneric, { autoClose: false });\r\n dispatch(setIsBusySaving({ isBusySaving: false, isSuccess: false }));\r\n }\r\n\r\n setSpHasDuplicateFolders(false);\r\n setSpHasDuplicateFiles(false);\r\n\r\n if (goToHome) {\r\n dispatch(resetWorkingDirectories());\r\n dispatch(setIsSavingInBackground(false));\r\n dispatch(resetDuplicateFilesAndOverWriteSettings(filesRef.current));\r\n dispatch(setNeedsRedirectToHome(false));\r\n }\r\n };\r\n\r\n const saveToOneDriveRecent = (): IStoreItem[] => {\r\n try {\r\n const savinglocationStructure = savingLocationStructureModule.getSavingLocationStructure();\r\n const lastDirectoryItem = savinglocationStructure ? savinglocationStructure[savinglocationStructure.length - 1] : null;\r\n const item: IStoreItem = {\r\n driveId: !lastDirectoryItem?.parentId ? rootOneDriveId : lastDirectoryItem?.parentId,\r\n locations: savinglocationStructure && [...savinglocationStructure],\r\n itemId: !lastDirectoryItem?.parentId ? null : lastDirectoryItem?.id,\r\n name: !lastDirectoryItem?.parentId ? ComponentTypes.OneDrive : lastDirectoryItem.fileTitle,\r\n fileType: FileTypeEnum.folder,\r\n folderTypeIcon: lastDirectoryItem?.type === ComponentTypes.OneDrive ? FolderTypeIconEnum.oneDrive : FolderTypeIconEnum.oneDriveSubFolder,\r\n datePinned: new Date(),\r\n folderId: !lastDirectoryItem?.parentId ? null : lastDirectoryItem?.id\r\n };\r\n StoreItemHelper.removeSaveLocation(item.locations);\r\n //recentMode.save(item);\r\n if (item.locations?.length > 0) {\r\n return [item];\r\n }\r\n } catch (error) {\r\n logger(error, \"App.tsx (saveToOneDriveRecent)\");\r\n }\r\n return [];\r\n };\r\n\r\n const resetToPreviousOneDriveLocationBeforeSaving = (previousLocation: IPageSettings[]) => {\r\n if (previousLocation?.length > 0) {\r\n dispatch(resetWorkingDirectories(previousLocation));\r\n dispatch(resetLocationBeforeSaving());\r\n }\r\n };\r\n\r\n return {\r\n saveSharePointEmailandMetadata,\r\n saveToOneDrive,\r\n showSelectVersion,\r\n setShowSelectVersion,\r\n setSelectedCheckinType,\r\n addListItem,\r\n spHasDuplicateFiles,\r\n setSpHasDuplicateFiles,\r\n spHasDuplicateFolders,\r\n setSpHasDuplicateFolders,\r\n saveEntireEmailFolder,\r\n sharepointDataListEntireFolderIsValid\r\n }\r\n}","import React from \"react\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport { useLazyGetItemByUniqueIDQuery } from \"../../src/taskpane/components/_v2/redux/api/sharepoint/api-sharepoint-slice\";\r\nimport { RootState } from \"../../src/taskpane/components/_v2/redux/storeMain\";\r\nimport { ComponentTypes } from \"../../src/taskpane/config/config\";\r\nimport { SharePointFolderContentTypeIds, sharePointInternalFileName } from \"../../src/taskpane/config/constants\";\r\nimport { SharePointMetadataBooleans } from \"../../src/taskpane/config/sharepointConstants\";\r\nimport { SharePointInputData } from \"../../src/taskpane/interfaces/props/SharePointInputData\";\r\nimport { DefaultValueService } from \"../../src/taskpane/services/DefaultValueService\";\r\nimport authModule from \"../../utilities/AuthModule\";\r\nimport { setDatasourceValues } from \"../../src/taskpane/redux/modules/datasource\";\r\nimport { IDocUrlDropdown } from \"../../src/taskpane/interfaces/IDocUrlDropdown\";\r\nimport { DatasourceValidationHelper } from \"../../src/taskpane/components/helpers/datasourceValidationHelper\";\r\nimport { FilePreCommitRequest, FolderPreCommitRequest } from \"../../src/taskpane/components/_v2/redux/api/local/api-local-interfaces\";\r\nimport { LanguageContext } from \"../../utilities/LocalizationModule\";\r\nimport { InfoPanelMode } from \"../Panels/CMFileInfoPanel\";\r\nimport generalModule from \"../../utilities/GeneralModule\";\r\nimport { logger } from \"../../utilities/logger\";\r\nimport { IFilePreCommitResult } from \"../../src/taskpane/interfaces/IFilePreCommitResult\";\r\nimport { CacheHelper } from \"../../utilities/CacheHelper\";\r\nimport { apiFilePreCommitCheck, apiFolderPreCommitCheck } from \"../../src/taskpane/services/ApiService\";\r\nimport { getDriveRootWebUrl } from \"../../src/taskpane/services/GraphService\";\r\nimport { FileFolderNameExtensions } from \"../../src/taskpane/services/FileFolderNameExtensions\";\r\nimport { refrehOptionsRequest } from \"../../src/taskpane/config/datasourceConstants\";\r\nimport { NewDocumentTemplate } from \"../../src/taskpane/interfaces/IDocumentTemplate\";\r\n\r\nexport function useMetaDataFormInputs(selectedItem: any, selectedDocumentLibrary?: IDocUrlDropdown, infoPanelMode?: InfoPanelMode, webAddinItem?: any, selectedTemplate?: NewDocumentTemplate) {\r\n const languageStrings = React.useContext(LanguageContext);\r\n\r\n const dispatch = useDispatch();\r\n\r\n const currentDirectory = useSelector((state: RootState) => state.workingDirectories?.workingDirectories?.length > 0 ? state.workingDirectories?.workingDirectories[state.workingDirectories?.workingDirectories?.length - 1] : null);\r\n const oneDriveRootDetails = useSelector((state: RootState) => state.workingDirectories?.oneDriveRootDetails);\r\n const datasourceValues = useSelector((state: RootState) => state.datasource?.values);\r\n const datasourceInitialLoad = useSelector((state: RootState) => state.datasource?.initialLoad);\r\n const user = useSelector((state: RootState) => state.user);\r\n const requiredMetadataOnPublish = useSelector((state: RootState) => state.tenantInfo.requiredMetadataOnPublish);\r\n\r\n const [inputValuesToSave, setInputValuesToSave] = React.useState([]);\r\n const [itemWebUrl, setItemWebUrl] = React.useState(null);\r\n const [itemSharepointListId, setItemSharepointListId] = React.useState(null);\r\n const [fieldsLoaded, setFieldsLoaded] = React.useState(false);\r\n const [extention, setExtention] = React.useState('');\r\n\r\n const [getItemByUniqueId] = useLazyGetItemByUniqueIDQuery();\r\n\r\n const checkIfInOneDrive = () => {\r\n if (currentDirectory) {\r\n return currentDirectory?.type == ComponentTypes.OneDrive || currentDirectory?.type == ComponentTypes.OneDriveSubFolder\r\n }\r\n else if (user?.oneDriveWebUrl && webAddinItem?.webUrl?.startsWith(user.oneDriveWebUrl)) {\r\n return true;\r\n }\r\n else if ((webAddinItem?.webUrl || webAddinItem?.weburl)?.indexOf(\"sharepoint.com/personal/\") > -1) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n const isInOneDrive = React.useRef(checkIfInOneDrive());\r\n const firstLoad = React.useRef(true);\r\n\r\n React.useEffect(() => {\r\n if (datasourceValues) {\r\n updateMetadataPropertiesFromDataSource(datasourceValues);\r\n }\r\n }, [datasourceValues]);\r\n\r\n React.useEffect(() => {\r\n if (isInOneDrive.current) {\r\n let siteUrl = webAddinItem ? webAddinItem.sharepointIds.siteUrl : oneDriveRootDetails?.sharePointSiteUrl;\r\n let sharePointListId = webAddinItem ? webAddinItem.sharepointIds.listId : oneDriveRootDetails?.sharePointListId;\r\n\r\n setItemWebUrl(siteUrl);\r\n setItemSharepointListId(sharePointListId);\r\n } else {\r\n let webUrl = itemWebUrl;\r\n let sharePointListId = itemSharepointListId;\r\n\r\n if (selectedDocumentLibrary) {\r\n webUrl = selectedDocumentLibrary.webUrl;\r\n sharePointListId = selectedDocumentLibrary.sharePointListId;\r\n }\r\n else if (webAddinItem) {\r\n webUrl = webAddinItem.sharepointIds.siteUrl;\r\n sharePointListId = webAddinItem.sharepointIds.listId;\r\n }\r\n else {\r\n webUrl = currentDirectory?.webUrl;\r\n sharePointListId = currentDirectory?.sharePointListId;\r\n }\r\n\r\n setItemWebUrl(webUrl);\r\n setItemSharepointListId(sharePointListId);\r\n }\r\n }, []);\r\n\r\n const updateMetadataPropertiesFromDataSource = (values: any) => {\r\n const isMultipleValues: boolean = Array.isArray(values) && values.length > 0;\r\n const propertyKeys = isMultipleValues\r\n ? Object.keys(values[0])\r\n : Object.keys(values);\r\n\r\n if (propertyKeys.length > 0) {\r\n const updatedinputValuesToSave = [...inputValuesToSave];\r\n propertyKeys.forEach((propKey) => {\r\n let updatedValue: any;\r\n if (isMultipleValues) {\r\n const uniqueValues = values\r\n .map(value => value[propKey])\r\n .filter((value, index, self) => self.indexOf(value) === index);\r\n updatedValue = uniqueValues?.length === 1 ? uniqueValues[0] : uniqueValues;\r\n }\r\n else {\r\n updatedValue = values[propKey];\r\n }\r\n updateDatasourceDisplayNameInputData(updatedinputValuesToSave, propKey, updatedValue, Array.isArray(updatedValue) && updatedValue.length > 0);\r\n });\r\n //updateSharepointMetadataToSave(updatedinputValuesToSave, informationProtectionId);\r\n updateSharepointMetadataToSave(updatedinputValuesToSave, null);\r\n }\r\n dispatch(setDatasourceValues(null));\r\n };\r\n\r\n const updateDatasourceDisplayNameInputData = (\r\n updatedinputValuesToSave: SharePointInputData[],\r\n propKey: string,\r\n value: any,\r\n isMultipleValues: boolean\r\n ) => {\r\n let inputToUpdate = inputValuesToSave.find(\r\n (item) => {\r\n const boundName: string = (item?.xml?.ContentTypeInputName ?? item?.displayName)?.trim().toLowerCase();\r\n return boundName && (item.internalName !== sharePointInternalFileName || item?.xml?.ContentTypeInputName) && boundName === propKey.trim().toLowerCase();\r\n }\r\n );\r\n\r\n if (inputToUpdate) {\r\n if (value === refrehOptionsRequest) {\r\n const updatedInput: SharePointInputData = updatedinputValuesToSave[inputToUpdate.index];\r\n if (updatedInput) {\r\n updatedInput.resetDatasourceOptionsToggle = !updatedInput.resetDatasourceOptionsToggle;\r\n }\r\n }\r\n else if (isMultipleValues) {\r\n try {\r\n const updatedInput: SharePointInputData = updatedinputValuesToSave[inputToUpdate.index];\r\n if (updatedInput) {\r\n if (updatedInput.value) {\r\n if (Array.isArray(updatedInput.value) && updatedInput.value.length > 0) {\r\n updatedInput.value = updatedInput.value\r\n .map(val => {\r\n if (val && value.some(x => x?.trim().toLowerCase() === val.trim().toLowerCase())) {\r\n return val;\r\n }\r\n return null;\r\n })\r\n .filter(val => val);\r\n }\r\n else if (!datasourceInitialLoad && (value.length > 1 || !value.some(x => x?.trim().toLowerCase() === updatedInput?.value?.trim().toLowerCase()))) {\r\n updatedInput.value = null;\r\n }\r\n }\r\n else if (value.length === 1) {\r\n const validatedValue = DatasourceValidationHelper.validateAndTransformDatasourceValue(inputToUpdate, value[0]);\r\n if (validatedValue) {\r\n updatedInput.value = validatedValue;\r\n updatedInput.hasError = false;\r\n updatedInput.updatedFromDataSourceToggle = !updatedInput.updatedFromDataSourceToggle;\r\n }\r\n }\r\n updatedInput.updatedDatasourceOptions = value;\r\n }\r\n } catch (error) {\r\n logger(error, \"useMetadataFormsInput.ts (updateDatasourceDisplayNameInputData)\");\r\n }\r\n }\r\n else {\r\n const validatedValue = DatasourceValidationHelper.validateAndTransformDatasourceValue(inputToUpdate, value);\r\n if (validatedValue) {\r\n const updatedInput: SharePointInputData = updatedinputValuesToSave[inputToUpdate.index];\r\n updatedInput.value = validatedValue;\r\n updatedInput.hasError = false;\r\n updatedInput.updatedFromDataSourceToggle = !updatedInput.updatedFromDataSourceToggle;\r\n }\r\n }\r\n }\r\n };\r\n\r\n const mapColumnsToSaveFieldsOneDrive = async () => {\r\n try {\r\n let fields = [{\r\n Choices: undefined,\r\n CurrentValue: null,\r\n DefaultValue: null,\r\n Id: \"5cc6dc79-3710-4374-b433-61cb4a686c12\",\r\n InternalName: sharePointInternalFileName,\r\n isValid: true,\r\n xml: {\r\n ColName: \"nvarchar8\",\r\n DisplayName: languageStrings.Name,\r\n ID: \"{5cc6dc79-3710-4374-b433-61cb4a686c12}\",\r\n Name: \"Name\",\r\n ReadOnly: infoPanelMode === InfoPanelMode.Replace ? \"TRUE\" : \"FALSE\",\r\n Required: \"TRUE\",\r\n Sealed: \"TRUE\",\r\n ShowInEditForm: \"TRUE\",\r\n ShowInFileDlg: \"FALSE\",\r\n ShowInNewForm: \"FALSE\",\r\n SourceID: \"http://schemas.microsoft.com/sharepoint/v3\",\r\n StaticName: \"Name\",\r\n Type: \"Text\",\r\n }\r\n },\r\n // {\r\n // Choices: undefined,\r\n // CurrentValue: null,\r\n // DefaultValue: null,\r\n // Id: \"5cc6dc79-3710-4374-b433-61cb4a686c12\",\r\n // InternalName: \"Title\",\r\n // isValid: true,\r\n // xml: {\r\n // ColName: \"nvarchar8\",\r\n // DisplayName: languageStrings.Title,\r\n // ID: \"{5cc6dc79-3710-4374-b433-61cb4a686c12}\",\r\n // Name: \"Title\",\r\n // Required: \"FALSE\",\r\n // Sealed: \"TRUE\",\r\n // ShowInEditForm: \"TRUE\",\r\n // ShowInFileDlg: \"FALSE\",\r\n // ShowInNewForm: \"FALSE\",\r\n // SourceID: \"http://schemas.microsoft.com/sharepoint/v3\",\r\n // StaticName: \"Title\",\r\n // Type: \"Text\",\r\n // }\r\n // }\r\n ];\r\n\r\n if (!selectedTemplate) {\r\n let file: any;\r\n let extention: string;\r\n\r\n try {\r\n file = await getItemByUniqueId({\r\n siteUrl: itemWebUrl,\r\n sharePointListId: itemSharepointListId,\r\n uniqueId: webAddinItem ? webAddinItem.sharepointIds.listItemUniqueId : selectedItem?.UniqueId.replace(\"{\", \"\").replace(\"}\", \"\"),\r\n accessToken: await authModule.getOneDriveAccessToken(),\r\n }).unwrap();\r\n } catch (error) {\r\n logger(error, \"useMetadataFormInputs.tsx (getItemByUniqueId)\");\r\n }\r\n\r\n let inputSaveFields: SharePointInputData[] = await Promise.all(\r\n fields.map(async (item, index) => {\r\n try {\r\n\r\n let defaultValue: any;\r\n let nameValue = webAddinItem ? webAddinItem.name : selectedItem?.FileLeafRef;\r\n\r\n if (item.InternalName === sharePointInternalFileName) {\r\n const fileParts = nameValue?.split('.');\r\n if (Array.isArray(fileParts) && fileParts.length > 1) {\r\n defaultValue = fileParts.slice(0, -1).join('.');\r\n extention = fileParts[fileParts.length - 1];\r\n setExtention(extention);\r\n } else {\r\n defaultValue = nameValue;\r\n }\r\n } else {\r\n defaultValue = file[item.InternalName];\r\n }\r\n\r\n let initialIsRequiredAndHasNoDefaultValue: boolean;\r\n\r\n if (!defaultValue) {\r\n initialIsRequiredAndHasNoDefaultValue = item.xml.Required === SharePointMetadataBooleans.true && !item.DefaultValue;\r\n defaultValue = DefaultValueService.setValue(item.xml.Type, item.DefaultValue);\r\n }\r\n\r\n return {\r\n index: index,\r\n internalName: item.InternalName,\r\n value: defaultValue,\r\n hasError: initialIsRequiredAndHasNoDefaultValue,\r\n type: item.xml.Type,\r\n displayName: item.xml.DisplayName,\r\n xml: item.xml,\r\n choices: item.Choices,\r\n extention: item.InternalName === sharePointInternalFileName ? extention : null\r\n };\r\n } catch (error) {\r\n logger(error, \"useMetadataFormInputs.tsx (OneDrive fields map)\");\r\n }\r\n\r\n return null;\r\n })\r\n );\r\n\r\n setInputValuesToSave(inputSaveFields);\r\n } else {\r\n let inputSaveFields: SharePointInputData[] =\r\n fields.map((item, index) => {\r\n try {\r\n let initialValue: any;\r\n\r\n const initialValueIsRequired: boolean = (!initialValue || (Array.isArray(initialValue) && initialValue?.length === 0)) && item.xml.Required === SharePointMetadataBooleans.true;\r\n\r\n return {\r\n index: index,\r\n internalName: item.InternalName,\r\n value: initialValue,\r\n hasError: initialValueIsRequired,\r\n type: item.xml.Type,\r\n displayName: item.xml.DisplayName,\r\n xml: item.xml,\r\n choices: item.Choices,\r\n };\r\n } catch (error) {\r\n logger(error, \"useMetadataFormInputs.tsx (fields map)\");\r\n }\r\n\r\n return null;\r\n });\r\n\r\n if (requiredMetadataOnPublish) {\r\n addRequiredMetadataToCache(inputSaveFields);\r\n }\r\n setInputValuesToSave(inputSaveFields);\r\n }\r\n\r\n } catch (error) {\r\n logger(error, \"useMetadataFormInputs.tsx (mapColumnsToSaveFieldsOneDrive)\");\r\n }\r\n };\r\n\r\n const mapColumnsToSaveFields = async (fields: any[], inputValues?: SharePointInputData[]) => {\r\n try {\r\n if (!selectedTemplate) {\r\n let extention: string;\r\n\r\n let file: any = await getItemByUniqueId({\r\n siteUrl: itemWebUrl,\r\n sharePointListId: itemSharepointListId,\r\n uniqueId: webAddinItem ? webAddinItem?.sharepointIds?.listItemUniqueId : selectedItem?.uniqueid || selectedItem.UniqueId?.replace(\"{\", \"\").replace(\"}\", \"\"),\r\n accessToken: isInOneDrive.current ? await authModule.getOneDriveAccessToken() : await authModule.getSharePointAccessToken(),\r\n }).unwrap();\r\n\r\n let fileParts = [];\r\n if (selectedItem) {\r\n fileParts = selectedItem.name ? selectedItem.name.split('.') : selectedItem.FileLeafRef?.split('.');\r\n }\r\n else if (webAddinItem) {\r\n fileParts = webAddinItem.name?.split('.');\r\n }\r\n\r\n let fileNameWithOutExtension: string;\r\n if (Array.isArray(fileParts) && fileParts.length > 0) {\r\n if (fileParts.length > 1) {\r\n fileNameWithOutExtension = fileParts.slice(0, -1).join('.');\r\n extention = fileParts[fileParts.length - 1];\r\n setExtention(extention);\r\n }\r\n else {\r\n fileNameWithOutExtension = fileParts[0];\r\n }\r\n } else {\r\n fileNameWithOutExtension = selectedItem?.name ?? selectedItem?.FileLeafRef;\r\n }\r\n\r\n let inputSaveFields: SharePointInputData[] =\r\n fields.map((item, index) => {\r\n try {\r\n let initialValue: any;\r\n if (item.InternalName === sharePointInternalFileName) {\r\n initialValue = fileNameWithOutExtension;\r\n }\r\n else if (item.xml.Type === 'URL' && typeof file[item.InternalName] === 'object') {\r\n initialValue = file[item.InternalName] ? file[item.InternalName]?.Url : null;\r\n }\r\n else if (item.xml.Type === 'TaxonomyFieldType' && typeof file[item.InternalName] === 'object') {\r\n initialValue = file[item.InternalName] ? [file[item.InternalName]?.Label] : null;\r\n }\r\n else if (item.xml.Type === 'Lookup') {\r\n initialValue = file[`${item.InternalName}Id`] ? [file[`${item.InternalName}Id`]] : null;\r\n }\r\n else if (item.xml.Type === 'LookupMulti') {\r\n initialValue = file[`${item.InternalName}Id`] && file[`${item.InternalName}Id`]?.length > 0 ? file[`${item.InternalName}Id`] : null;\r\n }\r\n else if (item.xml.Type === 'User') {\r\n initialValue = file[`${item.InternalName}Id`] ? [file[`${item.InternalName}Id`]] : null;\r\n }\r\n else if (item.xml.Type === 'UserMulti') {\r\n initialValue = file[`${item.InternalName}Id`] && file[`${item.InternalName}Id`]?.length > 0 ? file[`${item.InternalName}Id`] : null;\r\n }\r\n else if (item.xml.Type === \"DateTime\") {\r\n let dateValue: Date = file[item.InternalName] && file[item.InternalName]?.length > 0 && new Date(file[item.InternalName]);\r\n if (dateValue) {\r\n dateValue = new Date(dateValue.getFullYear(), dateValue.getMonth(), dateValue.getDate(), dateValue.getHours(), dateValue.getMinutes(), dateValue.getSeconds(), dateValue.getMilliseconds());\r\n }\r\n initialValue = dateValue || null;\r\n }\r\n else {\r\n initialValue = file[item.InternalName] ?? null;\r\n }\r\n\r\n const initialValueIsRequired: boolean = (!initialValue || (Array.isArray(initialValue) && initialValue?.length === 0)) && item.xml.Required === SharePointMetadataBooleans.true;\r\n\r\n return {\r\n index: index,\r\n internalName: item.InternalName,\r\n value: initialValue,\r\n hasError: initialValueIsRequired,\r\n type:\r\n item.xml.Percentage === SharePointMetadataBooleans.true\r\n ? `${item.xml.Type}Percentage`\r\n : item.xml.Type,\r\n displayName: item.xml.DisplayName,\r\n xml: item.xml,\r\n choices: item.Choices,\r\n extention: item.InternalName === sharePointInternalFileName ? extention : null\r\n };\r\n } catch (error) {\r\n logger(error, \"useMetadataFormInputs.tsx (fields map)\");\r\n }\r\n\r\n return null;\r\n });\r\n\r\n if (requiredMetadataOnPublish) {\r\n addRequiredMetadataToCache(inputSaveFields);\r\n }\r\n\r\n setInputValuesToSave(inputSaveFields);\r\n } else {\r\n let inputSaveFields: SharePointInputData[] =\r\n fields.map((item, index) => {\r\n try {\r\n const populatedInput = inputValues?.find(x => x.internalName === item.InternalName);\r\n\r\n if (populatedInput) {\r\n return populatedInput;\r\n } else {\r\n let initialValue: any;\r\n\r\n const initialValueIsRequired: boolean = (!initialValue || (Array.isArray(initialValue) && initialValue?.length === 0)) && item.xml.Required === SharePointMetadataBooleans.true;\r\n\r\n return {\r\n index: index,\r\n internalName: item.InternalName,\r\n value: initialValue,\r\n hasError: initialValueIsRequired,\r\n type:\r\n item.xml.Percentage === SharePointMetadataBooleans.true\r\n ? `${item.xml.Type}Percentage`\r\n : item.xml.Type,\r\n displayName: item.xml.DisplayName,\r\n xml: item.xml,\r\n choices: item.Choices,\r\n };\r\n }\r\n } catch (error) {\r\n logger(error, \"useMetadataFormInputs.tsx (fields map)\");\r\n }\r\n\r\n return null;\r\n });\r\n\r\n if (requiredMetadataOnPublish) {\r\n addRequiredMetadataToCache(inputSaveFields);\r\n }\r\n setInputValuesToSave(inputSaveFields);\r\n }\r\n\r\n } catch (error) {\r\n logger(error, \"useMetadataFormInputs.tsx (mapColumnsToSaveFields)\");\r\n }\r\n };\r\n\r\n const addRequiredMetadataToCache = (inputValues?: SharePointInputData[]) => {\r\n if (inputValues && requiredMetadataOnPublish) {\r\n const requiredMetaFieldsInternalNames: string[] = requiredMetadataOnPublish.split(\",\");\r\n for (let index = 0; index < inputValues.length; index++) {\r\n const inputValue = inputValues[index];\r\n if (inputValue && requiredMetaFieldsInternalNames.some(x => x.toLowerCase() === inputValue.displayName.toLowerCase())) {\r\n let valueToCache: any;\r\n if (inputValue.type === \"NumberPercentage\") {\r\n valueToCache = inputValue.value ? (Number(inputValue.value) * 100).toString() : \"\";\r\n }\r\n else if (inputValue.type === \"TaxonomyFieldTypeMulti\") {\r\n valueToCache = Array.isArray(inputValue.value) ? inputValue.value.map(x => x.Label).join(\",\") : \"\";\r\n }\r\n else {\r\n valueToCache = inputValue.value;\r\n }\r\n\r\n CacheHelper.set(inputValue.internalName, valueToCache ? JSON.stringify(valueToCache.toString()) : \"\");\r\n }\r\n }\r\n }\r\n }\r\n\r\n const updateSharepointMetadataToSave = (metadata: SharePointInputData[], informationProtectionId: string) => {\r\n try {\r\n if (isInOneDrive.current) {\r\n setInputValuesToSave(metadata);\r\n }\r\n else if (!firstLoad.current) {\r\n setInputValuesToSave(metadata);\r\n }\r\n else {\r\n firstLoad.current = false;\r\n }\r\n\r\n } catch (error) {\r\n logger(error, \"useMetadataFormInputs.tsx (updateSharepointMetadataToSave)\");\r\n }\r\n }\r\n\r\n\r\n const validateName = async (input: SharePointInputData, addInItem: any, forceNameCheck: boolean = false) => {\r\n const sanitizedName: string = FileFolderNameExtensions.EnsureValidName(input.value, true, !forceNameCheck);\r\n if (!sanitizedName) {\r\n input.hasError = true;\r\n input.errorMessage = languageStrings.FieldRequired;\r\n return;\r\n }\r\n\r\n let isFolder = false;\r\n\r\n if (generalModule.isInConentMangerMode()) {\r\n if (infoPanelMode !== InfoPanelMode.NewTemplate) {\r\n isFolder = selectedDocumentLibrary ? selectedItem.contenttypeid?.startsWith(SharePointFolderContentTypeIds.folder) : selectedItem.ContentTypeId?.startsWith(SharePointFolderContentTypeIds.folder)\r\n }\r\n }\r\n else {\r\n isFolder = addInItem?.contenttypeid?.startsWith(SharePointFolderContentTypeIds.folder);\r\n }\r\n\r\n let siteUrl: string;\r\n let destinationUrl: string;\r\n let originalFileName: string;\r\n let newFileName = infoPanelMode === InfoPanelMode.NewTemplate ? `${sanitizedName}.${selectedTemplate.extention}` : `${sanitizedName}${extention ? `.${extention}` : ''}`;\r\n\r\n if (webAddinItem) {\r\n siteUrl = webAddinItem.sharepointIds.siteUrl;\r\n destinationUrl = (webAddinItem.webUrl || webAddinItem.weburl).replace(`/${encodeURI(webAddinItem.name)}`, '');\r\n originalFileName = webAddinItem.name;\r\n }\r\n else if (selectedDocumentLibrary) {\r\n siteUrl = selectedDocumentLibrary.webUrl;\r\n destinationUrl = selectedItem.weburl.replace(`/${selectedItem.name}`, '');\r\n originalFileName = selectedItem.name;\r\n }\r\n else {\r\n siteUrl = isInOneDrive.current ? oneDriveRootDetails.sharePointSiteUrl : currentDirectory?.webUrl;\r\n\r\n if (isInOneDrive.current) {\r\n destinationUrl = `${currentDirectory?.webUrl}${currentDirectory.directory ? `${currentDirectory.directory}` : ''}`\r\n } else if (currentDirectory?.isTeamsRootFolder && !currentDirectory.parentId) {\r\n destinationUrl = await getDriveRootWebUrl(currentDirectory.id);\r\n } else {\r\n destinationUrl = `${siteUrl}${currentDirectory?.directory ? `/${currentDirectory.directory}` : ''}`;\r\n }\r\n\r\n originalFileName = infoPanelMode !== InfoPanelMode.NewTemplate ? (selectedItem?.FileLeafRef ?? \"\") : \"\";\r\n }\r\n\r\n let results: IFilePreCommitResult;\r\n\r\n if (!isFolder) {\r\n const isNameChanged: boolean = originalFileName.toLowerCase().trim() !== newFileName.toLowerCase().trim();\r\n\r\n const fileRequest: FilePreCommitRequest = {\r\n accessToken: isInOneDrive.current ? await authModule.getOneDriveAccessToken() : await authModule.getSharePointAccessToken(),\r\n destinationUrl,\r\n siteUrl,\r\n fileName: newFileName,\r\n autoFolderCreation: false,\r\n ignoreSameUserLock: !isNameChanged\r\n }\r\n\r\n if (isNameChanged) {\r\n // Check if current file is locked or checked out.\r\n results = await apiFilePreCommitCheck({ ...fileRequest, fileName: originalFileName });\r\n if (results?.checkedOut) {\r\n input.hasError = true;\r\n input.errorMessage = languageStrings.FileSameCheckedOut;\r\n return;\r\n }\r\n else if (results?.locked) {\r\n input.hasError = true;\r\n input.errorMessage = languageStrings.FileSameLocked;\r\n return;\r\n }\r\n }\r\n\r\n results = await apiFilePreCommitCheck(fileRequest);\r\n\r\n if (results?.exists && isNameChanged) {\r\n input.hasError = true;\r\n input.errorMessage = languageStrings.FileSameName;\r\n }\r\n else if (results?.checkedOut) {\r\n input.hasError = true;\r\n input.errorMessage = languageStrings.FileSameCheckedOut;\r\n }\r\n else if (results?.locked) {\r\n input.hasError = true;\r\n input.errorMessage = languageStrings.FileSameLocked;\r\n }\r\n else {\r\n input.hasError = false;\r\n input.errorMessage = '';\r\n }\r\n } else {\r\n const folderRequest: FolderPreCommitRequest = {\r\n accessToken: isInOneDrive.current ? await authModule.getOneDriveAccessToken() : await authModule.getSharePointAccessToken(),\r\n destinationUrl,\r\n siteUrl,\r\n folderName: newFileName\r\n }\r\n\r\n results = await apiFolderPreCommitCheck(folderRequest);\r\n if (results?.exists && originalFileName.toLowerCase() !== newFileName.toLowerCase()) {\r\n input.hasError = true;\r\n input.errorMessage = languageStrings.FolderSameName;\r\n }\r\n else {\r\n input.hasError = false;\r\n input.errorMessage = '';\r\n }\r\n }\r\n }\r\n\r\n return {\r\n inputValuesToSave,\r\n itemSharepointListId,\r\n itemWebUrl,\r\n extention,\r\n fieldsLoaded,\r\n updateSharepointMetadataToSave,\r\n mapColumnsToSaveFields,\r\n mapColumnsToSaveFieldsOneDrive,\r\n validateName,\r\n setFieldsLoaded,\r\n checkIfInOneDrive,\r\n setInputValuesToSave\r\n }\r\n}","import React from \"react\";\r\nimport { PopUpConstants, shared } from \"../../src/taskpane/config/constants\";\r\nimport { IAuthTokenResultDto } from \"../../src/taskpane/interfaces/IAuthTokenResultDto\";\r\nimport authModule, { DialogMessageResponse, DialogMessageStatus, TokenResource } from \"../../utilities/AuthModule\";\r\nimport { logger } from \"../../utilities/logger\";\r\n\r\nexport function useMailSendPopUpAuth() {\r\n const [isMailSendTokenAvailable, setIsMailSendTokenAvailable] = React.useState(authModule.getPersistedAuthState()?.mailSendToken?.length > 0);\r\n const [isMailSendTokenRequestInProgress, setIsMailSendTokenRequestInProgress] = React.useState(false);\r\n\r\n const authDialogRef = React.useRef();\r\n\r\n const requestMailSendToken = () => {\r\n let authState: IAuthTokenResultDto = authModule.getPersistedAuthState();\r\n\r\n let authUrl: URL = new URL(`${process.env.baseUri}/auth.html`);\r\n authUrl.searchParams.append(shared.params.app, \"content_manager\");\r\n authUrl.searchParams.append(shared.params.resource, TokenResource.MailSend.toString());\r\n authUrl.searchParams.append(shared.params.username, authState.account?.username);\r\n /**\r\n * adding winLeft and winTop to account for dual monitor\r\n * using screenLeft and screenTop for IE8 and earlier\r\n */\r\n const winLeft = window.screenLeft ? window.screenLeft : window.screenX;\r\n const winTop = window.screenTop ? window.screenTop : window.screenY;\r\n /**\r\n * window.innerWidth displays browser window\"s height and width excluding toolbars\r\n * using document.documentElement.clientWidth for IE8 and earlier\r\n */\r\n const width = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;\r\n const height = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;\r\n const left = Math.max(0, ((width / 2) - (PopUpConstants.POPUP_WIDTH / 2)) + winLeft);\r\n const top = Math.max(0, ((height / 2) - (PopUpConstants.POPUP_HEIGHT / 2)) + winTop);\r\n\r\n authDialogRef.current = window.open(authUrl.href, `${PopUpConstants.POPUP_NAME_PREFIX}.${TokenResource.MailSend}`, `width=${PopUpConstants.POPUP_WIDTH}, height=${PopUpConstants.POPUP_HEIGHT}, top=${top}, left=${left}, scrollbars=yes`);\r\n }\r\n\r\n const processAuthDialogResponse = (event) => {\r\n if (event.origin != process.env.baseUri)\r\n return;\r\n\r\n try {\r\n if (event.data) {\r\n const messageFromDialog: DialogMessageResponse = event.data;\r\n if (messageFromDialog?.status === DialogMessageStatus.Success) {\r\n if (messageFromDialog.result?.mailSendToken?.length > 0) {\r\n let authState: IAuthTokenResultDto = authModule.getPersistedAuthState(); \r\n if (authState) {\r\n authState.mailSendToken = messageFromDialog.result.mailSendToken;\r\n authState.mailSendTokenExpiresOn = messageFromDialog.result.mailSendTokenExpiresOn;\r\n authModule.persistAuthState(authState);\r\n setIsMailSendTokenAvailable(true);\r\n }\r\n }\r\n }\r\n }\r\n } catch (error) {\r\n logger(error, \"useMailSendPopUpAuth.tsx (processAuthDialogResponse)\", event.data);\r\n }\r\n\r\n authDialogRef?.current?.close();\r\n }\r\n\r\n React.useEffect(() => {\r\n window.addEventListener(\"message\", processAuthDialogResponse);\r\n if (!isMailSendTokenAvailable) {\r\n (async () => {\r\n setIsMailSendTokenRequestInProgress(true);\r\n const mailSendToken: string = await authModule.getMailSendAccessToken(true);\r\n if (mailSendToken) {\r\n setIsMailSendTokenAvailable(true);\r\n }\r\n setIsMailSendTokenRequestInProgress(false);\r\n })();\r\n }\r\n return () => window.removeEventListener(\"message\", processAuthDialogResponse);\r\n }, [isMailSendTokenAvailable]);\r\n\r\n return { isMailSendTokenAvailable, isMailSendTokenRequestInProgress, requestMailSendToken }\r\n}","import { Checkbox, DatePicker, DefaultButton, Dropdown, IPanelStyles, IStackTokens, ITextFieldStyles, mergeStyles, Panel, PanelType, PrimaryButton, ScrollablePane, ScrollbarVisibility, Stack, TextField } from \"@fluentui/react\";\r\nimport React from \"react\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport generalModule from \"../../utilities/GeneralModule\";\r\nimport { LanguageContext } from \"../../utilities/LocalizationModule\";\r\nimport { dataSourceItem } from \"../../src/taskpane/redux/models/reduxModels\";\r\nimport { DatasourceHelper } from \"../../src/taskpane/components/helpers/dataSourceHelper\";\r\nimport { logger } from \"../../utilities/logger\";\r\nimport { DateService } from \"../../src/taskpane/services/dateService\";\r\n\r\nexport const scrollStyle = mergeStyles({\r\n position: \"relative\",\r\n height: \"calc(100vh - 135px)\",\r\n});\r\n\r\nconst stackTokens: IStackTokens = { childrenGap: 15 };\r\n\r\nconst panelStyles: Partial = {\r\n content: {\r\n paddingLeft: 15,\r\n paddingRight: 15\r\n }\r\n}\r\n\r\nexport type AddDataResponse = {\r\n name: string;\r\n title: string;\r\n type: string;\r\n required: boolean;\r\n options: string[];\r\n}\r\n\r\nexport type AddDataForm = AddDataResponse & {\r\n value?: string | boolean | number;\r\n hasError?: boolean;\r\n}\r\n\r\nexport interface ICMAddDatasourceItemPanelProps {\r\n panelIsOpen: boolean;\r\n closePanel: () => void;\r\n displayName: string;\r\n dataSourceItem?: dataSourceItem;\r\n dataSourceHelper?: DatasourceHelper;\r\n}\r\n\r\n\r\n\r\nexport const CMAddDatasourceItemPanel = ({ panelIsOpen, closePanel, displayName, dataSourceItem, dataSourceHelper }: ICMAddDatasourceItemPanelProps) => {\r\n const languageStrings = React.useContext(LanguageContext);\r\n\r\n const [formData, setFormData] = React.useState([]);\r\n\r\n React.useEffect(() => {\r\n const setupAsyncWrapper = async () => {\r\n try {\r\n const result = await dataSourceHelper.getEditStructure(dataSourceItem);\r\n setFormData(result.map(item => ({ ...item })))\r\n } catch (error) {\r\n logger(error, \"CMAddDatasourceItemPanel.tsx (useEffect 1)\");\r\n }\r\n };\r\n setupAsyncWrapper();\r\n }, []);\r\n\r\n const vaildateForm = () => {\r\n let isValid = true;\r\n\r\n const updatedData = formData.map(item => {\r\n if (item.required) {\r\n if (item.value === undefined || item.value === null || item.value === '') {\r\n isValid = false;\r\n return { ...item, hasError: true };\r\n }\r\n }\r\n return { ...item, hasError: false };\r\n });\r\n\r\n setFormData(updatedData);\r\n\r\n return isValid;\r\n }\r\n\r\n\r\n const onRenderFooterContent = React.useCallback(\r\n () => (\r\n \r\n {\r\n const isValid = vaildateForm();\r\n\r\n if (!isValid) {\r\n return;\r\n }\r\n\r\n //Add post logic\r\n }}\r\n text={languageStrings.Add} />\r\n {\r\n closePanel();\r\n }}\r\n text={languageStrings.Close}\r\n />\r\n \r\n ),\r\n [formData],\r\n );\r\n\r\n return (\r\n closePanel()}\r\n isLightDismiss\r\n closeButtonAriaLabel=\"Close\"\r\n type={PanelType.custom}\r\n customWidth={!generalModule.isInConentMangerMode() ? \"300px\" : \"350px\"}\r\n styles={panelStyles}\r\n onRenderFooterContent={onRenderFooterContent}\r\n isFooterAtBottom={true}\r\n >\r\n
\r\n \r\n
\r\n \r\n {formData.map(property => {\r\n switch (property.type) {\r\n case 'string':\r\n return form.name === property.name).value as string}\r\n onChange={(e, newValue) => {\r\n const updatedData = formData.map(form =>\r\n form.name === property.name\r\n ? { ...form, value: newValue }\r\n : form\r\n );\r\n setFormData(updatedData);\r\n }}\r\n errorMessage={property.hasError ? languageStrings.FieldRequired : \"\"}\r\n />;\r\n case 'number':\r\n return form.name === property.name).value as string}\r\n onChange={(e, newValue) => {\r\n const updatedData = formData.map(form =>\r\n form.name === property.name\r\n ? { ...form, value: newValue }\r\n : form\r\n );\r\n setFormData(updatedData);\r\n }}\r\n className=\"xb-sp-input\"\r\n errorMessage={property.hasError ? languageStrings.FieldRequired : \"\"}\r\n />;\r\n case 'boolean':\r\n return form.name === property.name).value}\r\n required={property.required}\r\n onChange={(e, newValue) => {\r\n const updatedData = formData.map(form =>\r\n form.name === property.name\r\n ? { ...form, value: newValue }\r\n : form\r\n );\r\n setFormData(updatedData);\r\n }}\r\n />;\r\n case 'datetime':\r\n const dateValue = formData.find(form => form.name === property.name).value as string;\r\n const parsedDate = dateValue ? new Date(dateValue) : undefined;\r\n\r\n return (\r\n
\r\n {\r\n const updatedData = formData.map(form =>\r\n form.name === property.name\r\n ? { ...form, value: newDate?.toISOString() } // converting Date object back to string\r\n : form\r\n );\r\n setFormData(updatedData);\r\n }}\r\n textField={{\r\n errorMessage: property.hasError ? languageStrings.FieldRequired : undefined\r\n }}\r\n />\r\n {/* {property.hasError && } */}\r\n
\r\n );\r\n case 'choice':\r\n return (\r\n ({ key: option, text: option }))}\r\n selectedKey={formData.find(form => form.name === property.name).value as string}\r\n onChange={(event, option, index) => {\r\n const updatedData = formData.map(form =>\r\n form.name === property.name\r\n ? { ...form, value: option?.key }\r\n : form\r\n );\r\n setFormData(updatedData);\r\n }}\r\n errorMessage={property.hasError ? languageStrings.FieldRequired : \"\"}\r\n />\r\n );\r\n default:\r\n return null;\r\n }\r\n })}\r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n )\r\n};","import { DefaultButton, Dialog, DialogContent, DialogFooter, DialogType, IDialogContentProps, IPanelStyles, mergeStyles, Panel, PanelType, PrimaryButton, ScrollablePane, ScrollbarVisibility, Spinner, SpinnerSize, Stack, TextField } from \"@fluentui/react\";\r\nimport React from \"react\";\r\nimport { useSelector } from \"react-redux\";\r\nimport { CheckinTypes, MetadataDto, MetadataUpdateRequest } from \"../../src/taskpane/components/_v2/redux/api/local/api-local-interfaces\";\r\nimport { useLazyCheckinItemQuery, useLazyDeleteVersionByLabelQuery, useLazyGetItemVersionsQuery, useLazyPublishItemQuery } from \"../../src/taskpane/components/_v2/redux/api/sharepoint/api-sharepoint-slice\";\r\nimport { RootState } from \"../../src/taskpane/components/_v2/redux/storeMain\";\r\nimport { IVersionSelectorProps, VersionSelector } from \"../../src/taskpane/components/_v2/_shared/VersionSelector/VersionSelector\";\r\nimport { SharePointInputData } from \"../../src/taskpane/interfaces/props/SharePointInputData\";\r\nimport authModule from \"../../utilities/AuthModule\";\r\nimport generalModule from \"../../utilities/GeneralModule\";\r\nimport { LanguageContext } from \"../../utilities/LocalizationModule\";\r\nimport { logger } from \"../../utilities/logger\";\r\nimport { getFileVersionData, getSharePointDocumentLibraryFields } from \"../../src/taskpane/services/SharePointRestServices\";\r\nimport { piiConfig, SharepointFilters } from \"../../src/taskpane/config/constants\";\r\nimport { BaseSharepointHelper } from \"../../src/taskpane/components/helpers/sharepointContentTypeHelper\";\r\nimport InputMetaDataFactory from \"../../src/taskpane/components/directoryComponents/InputMetadataFactory\";\r\nimport { SharepointSpServices } from \"../../src/taskpane/services/SharepointSpServices\";\r\nimport Loader from \"../../src/taskpane/components/Loader\";\r\nimport { SharePointMetadataBooleans } from \"../../src/taskpane/config/sharepointConstants\";\r\nimport { ComponentTypes } from \"../../src/taskpane/config/config\";\r\nimport { apiUpdateItemMetadata } from \"../../src/taskpane/services/ApiService\";\r\n\r\nconst dialogContentProps: IDialogContentProps = {\r\n type: DialogType.normal,\r\n showCloseButton: true,\r\n closeButtonAriaLabel: 'Close',\r\n};\r\n\r\nexport const scrollStyle = mergeStyles({\r\n position: \"relative\",\r\n height: \"calc(100vh - 160px)\",\r\n});\r\n\r\n\r\nexport const panelButtonsContainer = mergeStyles({\r\n float: \"right\",\r\n paddingTop: 5\r\n});\r\n\r\nconst panelStyles: Partial = {\r\n content: {\r\n paddingLeft: 10,\r\n paddingRight: 10\r\n }\r\n}\r\n\r\nexport interface ICMCheckinModalProps {\r\n selectedItems?: any[];\r\n selectedAddInItems?: any[];\r\n showDialog: boolean;\r\n isInOneDrive: boolean;\r\n isPublish?: boolean;\r\n closeDialog: () => void;\r\n closeOnSuccess: (updatedInputValues: SharePointInputData[]) => void;\r\n fileUpdatePublishInfo?: IFileUpdatePublishProps;\r\n updateOfficeXML?: () => Promise;\r\n}\r\n\r\nexport interface IFileUpdatePublishProps {\r\n request: MetadataUpdateRequest;\r\n originalInputValues: SharePointInputData[];\r\n}\r\n\r\nexport const CMCheckinModal = ({ selectedItems, selectedAddInItems, showDialog, isInOneDrive, isPublish, closeDialog, closeOnSuccess, fileUpdatePublishInfo, updateOfficeXML }: ICMCheckinModalProps) => {\r\n const languageStrings = React.useContext(LanguageContext);\r\n\r\n const workingDirectories = useSelector((state: RootState) => state.workingDirectories.workingDirectories);\r\n const currentSharepointFolder = useSelector((state: RootState) => state.currentSharepointFolder);\r\n const currentDirectory = useSelector((state: RootState) => state.workingDirectories.workingDirectories.length > 0 ? state.workingDirectories.workingDirectories[state.workingDirectories.workingDirectories.length - 1] : null);\r\n const oneDriveRootDetails = useSelector((state: RootState) => state.workingDirectories.oneDriveRootDetails);\r\n const requiredMetadataOnPublish = useSelector((state: RootState) => state.tenantInfo.requiredMetadataOnPublish);\r\n const autoDeleteMinorVersionsOnPublish = useSelector((state: RootState) => state.tenantInfo.autoDeleteMinorVersionsOnPublish);\r\n const regionalSettings = useSelector((state: RootState) => state.regionalSettings);\r\n\r\n const [versionProps, setVersionProps] = React.useState();\r\n const [checkinType, setCheckinType] = React.useState(CheckinTypes.majorCheckIn);\r\n const [comment, setComment] = React.useState('');\r\n const [checkinError, setCheckinError] = React.useState('');\r\n const [isBusy, setIsBusy] = React.useState(false);\r\n const [hasError, setHasError] = React.useState(false);\r\n\r\n const [inputValuesToSave, setInputValuesToSave] = React.useState([]);\r\n const [sharepointService, setSharepointService] = React.useState(null);\r\n const [fields, setFields] = React.useState([]);\r\n const [retrievingInformation, setRetrievingInformation] = React.useState(false);\r\n const [updateMetaDepsLoaded, setUpdateMetaDepsLoaded] = React.useState(false);\r\n\r\n const [checkinItem] = useLazyCheckinItemQuery();\r\n const [publishItem] = useLazyPublishItemQuery();\r\n const [getItemVersions] = useLazyGetItemVersionsQuery();\r\n const [deleteVersionByLabel] = useLazyDeleteVersionByLabelQuery();\r\n\r\n React.useEffect(() => {\r\n if (requiredMetadataOnPublish) {\r\n (async () => {\r\n const metaFieldsOnPublish: string[] = requiredMetadataOnPublish?.split(\",\");\r\n setRetrievingInformation(true);\r\n\r\n const sharepointSpService = new SharepointSpServices(fileUpdatePublishInfo ? fileUpdatePublishInfo.request.siteUrl : currentDirectory.webUrl, fileUpdatePublishInfo ? fileUpdatePublishInfo.request.accessToken : await authModule.getSharePointAccessToken());\r\n setSharepointService(sharepointSpService);\r\n\r\n let result = await getSharePointDocumentLibraryFields(\r\n await authModule.getSharePointAccessToken(),\r\n currentDirectory.webUrl,\r\n currentSharepointFolder.sharepointListId,\r\n SharepointFilters.metadata.search\r\n );\r\n\r\n let fields = result\r\n .map(BaseSharepointHelper.convertMetadataToFields)\r\n .filter(field => field && metaFieldsOnPublish.includes(field.InternalName))\r\n .map(field => {\r\n return {\r\n ...field,\r\n xml: {\r\n ...field.xml,\r\n Required: \"TRUE\"\r\n }\r\n };\r\n });\r\n\r\n if (fields?.length > 0) {\r\n setFields(fields);\r\n }\r\n else {\r\n setRetrievingInformation(false);\r\n }\r\n })();\r\n }\r\n }, [requiredMetadataOnPublish, fileUpdatePublishInfo]);\r\n\r\n React.useEffect(() => {\r\n if (requiredMetadataOnPublish && fields?.length > 0) {\r\n (async () => {\r\n const metaFieldsOnPublish: string[] = requiredMetadataOnPublish?.split(\",\");\r\n if (!updateMetaDepsLoaded) {\r\n if (fileUpdatePublishInfo && fileUpdatePublishInfo.originalInputValues?.length > 0) {\r\n setInputValuesToSave(fileUpdatePublishInfo.originalInputValues.map(inputValue => {\r\n return {\r\n ...inputValue,\r\n value: metaFieldsOnPublish.includes(inputValue.internalName) ? null : inputValue.value,\r\n hasError: metaFieldsOnPublish.includes(inputValue.internalName) ? true : false\r\n }\r\n }));\r\n } else {\r\n let inputValuesToSaveFields: SharePointInputData[] = fields.map((item, index) => {\r\n return setupInputValues(item, index);\r\n });\r\n setInputValuesToSave(inputValuesToSaveFields);\r\n }\r\n setRetrievingInformation(false);\r\n setUpdateMetaDepsLoaded(true);\r\n }\r\n })();\r\n }\r\n }, [requiredMetadataOnPublish, fields, fileUpdatePublishInfo, updateMetaDepsLoaded]);\r\n\r\n React.useEffect(() => {\r\n setHasError(inputValuesToSave.some(value => value.hasError));\r\n }, [inputValuesToSave]);\r\n\r\n React.useEffect(() => {\r\n if (currentSharepointFolder?.enableMinorVersions === true && selectedItems?.length > 0) {\r\n setCheckinType(CheckinTypes.minorCheckIn);\r\n (async () => {\r\n const fileVersionData = await getFileVersionData(\r\n isInOneDrive ? await authModule.getOneDriveAccessToken() : await authModule.getSharePointAccessToken(),\r\n currentDirectory?.webUrl,\r\n selectedItems[0].UniqueId?.replace(\"{\", \"\").replace(\"}\", \"\")\r\n );\r\n\r\n if (fileVersionData) {\r\n setVersionProps({\r\n multipleFilesSelected: selectedItems?.length > 1,\r\n level: fileVersionData.Level,\r\n majorVersion: fileVersionData.MajorVersion,\r\n minorVersion: fileVersionData.MinorVersion\r\n });\r\n }\r\n })();\r\n }\r\n }, [selectedItems]);\r\n\r\n const setupInputValues = (item, index): SharePointInputData => {\r\n return {\r\n index: index,\r\n internalName: item.InternalName,\r\n value: null,\r\n hasError: item.xml.Required === SharePointMetadataBooleans.true,\r\n type: item.xml.Percentage === SharePointMetadataBooleans.true ? `${item.xml.Type}Percentage` : item.xml.Type,\r\n displayName: item.xml.DisplayName,\r\n xml: item.xml,\r\n choices: item.Choices\r\n };\r\n };\r\n\r\n const onConfirmCheckin = async () => {\r\n setIsBusy(true);\r\n setCheckinError('');\r\n\r\n let listItemUniqueId;\r\n\r\n if (selectedItems && selectedItems.length > 0) {\r\n listItemUniqueId = selectedItems[0]?.uniqueid ?? selectedItems[0]?.UniqueId?.replace('{', '').replace('}', '')\r\n }\r\n else if (selectedAddInItems && selectedAddInItems.length > 0) {\r\n listItemUniqueId = selectedAddInItems[0]?.UniqueId ? selectedAddInItems[0]?.UniqueId : selectedAddInItems[0]?.sharepointIds?.listItemUniqueId\r\n }\r\n\r\n if (requiredMetadataOnPublish) {\r\n if (!fileUpdatePublishInfo) {\r\n let isCurrentDirectorySPList = workingDirectories && workingDirectories.some(x => x.type === ComponentTypes.SharePointList)\r\n\r\n let request: MetadataUpdateRequest = {\r\n accessToken: await authModule.getSharePointAccessToken(),\r\n siteUrl: currentDirectory.webUrl,\r\n listId: currentDirectory.sharePointListId,\r\n listItemUniqueId,\r\n isFolder: false,\r\n isListItem: isCurrentDirectorySPList ? true : false,\r\n listSettings: {\r\n enableMinorVersions: currentSharepointFolder?.enableMinorVersions === true,\r\n },\r\n metadata: inputValuesToSave.map(input => {\r\n const meta: MetadataDto = {\r\n type: input.type,\r\n internalName: input.internalName,\r\n value: !(input?.value === 0) && (!input?.value || (Array.isArray(input?.value) && !input?.value?.length)) ? undefined : input.value\r\n }\r\n return meta;\r\n })\r\n }\r\n\r\n if (updateOfficeXML) await updateOfficeXML();\r\n await apiUpdateItemMetadata(request);\r\n } else {\r\n try {\r\n let newRequest: MetadataUpdateRequest;\r\n\r\n // inputValuesToSave will have a length if there are any requered meta data fields on publish, other wise we will use the passed through request\r\n if (inputValuesToSave?.length > 0) {\r\n let newRequest: MetadataUpdateRequest = {\r\n ...fileUpdatePublishInfo.request,\r\n metadata: inputValuesToSave.map(input => {\r\n const meta: MetadataDto = {\r\n type: input.type,\r\n internalName: input.internalName,\r\n value: !(input?.value === 0) && (!input?.value || (Array.isArray(input?.value) && !input?.value?.length)) ? undefined : input.value\r\n }\r\n return meta;\r\n })\r\n }\r\n \r\n const contentTypeMeta = fileUpdatePublishInfo.request.metadata.find(x => x.type === \"Content\");\r\n if (contentTypeMeta) {\r\n newRequest.metadata.unshift(contentTypeMeta);\r\n }\r\n }\r\n \r\n if (updateOfficeXML) await updateOfficeXML();\r\n await apiUpdateItemMetadata(newRequest ?? fileUpdatePublishInfo.request);\r\n } catch (error) {\r\n logger(error, \"CMCheckinModal.tsx (onConfirmCheckin)\");\r\n }\r\n }\r\n }\r\n\r\n if (!isPublish) {\r\n try {\r\n if (generalModule.isInConentMangerMode()) {\r\n await Promise.all(selectedItems.map(async item => {\r\n await checkinItem({\r\n siteUrl: isInOneDrive ? oneDriveRootDetails?.sharePointSiteUrl : currentDirectory?.webUrl,\r\n uniqueId: item.UniqueId.replace(\"{\", \"\").replace(\"}\", \"\"),\r\n accessToken: isInOneDrive ? await authModule.getOneDriveAccessToken() : await authModule.getSharePointAccessToken(),\r\n checkinType,\r\n comment\r\n }).unwrap();\r\n }));\r\n }\r\n else {\r\n await Promise.all(selectedAddInItems.map(async item => {\r\n await checkinItem({\r\n siteUrl: isInOneDrive ? oneDriveRootDetails?.sharePointSiteUrl : currentDirectory?.webUrl,\r\n uniqueId: item.UniqueId,\r\n accessToken: isInOneDrive ? await authModule.getOneDriveAccessToken() : await authModule.getSharePointAccessToken(),\r\n checkinType,\r\n comment\r\n }).unwrap();\r\n }));\r\n }\r\n } catch (error) {\r\n logger(error, \"CMCheckinModal.tsx (onConfirmCheckin)\");\r\n setCheckinError(error?.data?.['odata.error']?.message?.value);\r\n }\r\n } else {\r\n try {\r\n if (generalModule.isInConentMangerMode()) {\r\n await Promise.all(selectedItems.map(async item => {\r\n await publishItem({\r\n siteUrl: isInOneDrive ? oneDriveRootDetails?.sharePointSiteUrl : currentDirectory?.webUrl,\r\n uniqueId: item.UniqueId.replace(\"{\", \"\").replace(\"}\", \"\"),\r\n accessToken: isInOneDrive ? await authModule.getOneDriveAccessToken() : await authModule.getSharePointAccessToken(),\r\n comment\r\n }).unwrap();\r\n }));\r\n }\r\n else {\r\n await Promise.all(selectedAddInItems.map(async item => {\r\n await publishItem({\r\n siteUrl: isInOneDrive ? oneDriveRootDetails?.sharePointSiteUrl : currentDirectory?.webUrl,\r\n uniqueId: item.UniqueId ? item.UniqueId : item.sharepointIds.listItemUniqueId,\r\n accessToken: isInOneDrive ? await authModule.getOneDriveAccessToken() : await authModule.getSharePointAccessToken(),\r\n comment\r\n }).unwrap();\r\n }));\r\n }\r\n } catch (error) {\r\n logger(error, \"CMCheckinModal.tsx (onConfirmCheckin - publish)\");\r\n setCheckinError(error?.data?.['odata.error']?.message?.value);\r\n }\r\n }\r\n\r\n if (autoDeleteMinorVersionsOnPublish) {\r\n try {\r\n const itemVersions = await getItemVersions({\r\n siteUrl: currentDirectory?.webUrl,\r\n uniqueId: listItemUniqueId,\r\n accessToken: await authModule.getSharePointAccessToken(),\r\n }).unwrap();\r\n\r\n const versions = itemVersions.d?.results;\r\n\r\n if (versions && versions.length > 0) {\r\n await Promise.all(versions.map(async version => {\r\n if (!version.IsCurrentVersion && version.ID % 512 > 0) {\r\n deleteVersionByLabel({\r\n siteUrl: isInOneDrive ? oneDriveRootDetails?.sharePointSiteUrl : currentDirectory?.webUrl,\r\n uniqueId: listItemUniqueId,\r\n accessToken: await authModule.getSharePointAccessToken(),\r\n versionLabel: version.VersionLabel\r\n }).unwrap();\r\n }\r\n }));\r\n }\r\n } catch (error) {\r\n logger(error, \"CMCheckinMoadal.tsx (autoDeleteMinorVersionsOnPublish)\");\r\n }\r\n }\r\n\r\n setIsBusy(false);\r\n closeOnSuccess(inputValuesToSave);\r\n }\r\n\r\n const checkinTypeChanged = (checkinType: CheckinTypes) => {\r\n setCheckinType(checkinType);\r\n }\r\n\r\n const onCommentChanged = (event: React.FormEvent, newValue?: string) => {\r\n setComment(newValue);\r\n }\r\n\r\n const updateSharepointMetadataToSave = (metadata: SharePointInputData[], informationProtectionId: string, changedIndex?: number) => {\r\n setInputValuesToSave(metadata);\r\n };\r\n\r\n const handleInputChange = (index: number, value: any, hasError: boolean) => {\r\n const updatedinputValuesToSave = [...inputValuesToSave];\r\n updatedinputValuesToSave[index].value = value;\r\n updatedinputValuesToSave[index].hasError = hasError;\r\n updateSharepointMetadataToSave(updatedinputValuesToSave, null, index);\r\n };\r\n\r\n const onRenderFooterContent = React.useCallback(\r\n () => (\r\n \r\n closeDialog()} text={languageStrings.Cancel} disabled={isBusy} style={{ marginRight: \"5px\" }} />\r\n onConfirmCheckin()} text={isPublish ? languageStrings.Publish : languageStrings.CheckIn} disabled={isBusy || hasError}>\r\n {isBusy && }\r\n \r\n \r\n ), [isBusy, hasError, comment, inputValuesToSave]);\r\n\r\n return (\r\n {!generalModule.isInConentMangerMode() && closeDialog()}\r\n isLightDismiss\r\n closeButtonAriaLabel=\"Close\"\r\n type={PanelType.custom}\r\n customWidth={!generalModule.isInConentMangerMode() ? \"300px\" : \"450px\"}\r\n styles={panelStyles}\r\n onRenderFooterContent={onRenderFooterContent}\r\n isFooterAtBottom={true}\r\n >\r\n
\r\n \r\n
\r\n {versionProps && !isPublish && \r\n 1} />\r\n }\r\n {retrievingInformation && !isBusy && }\r\n {updateMetaDepsLoaded &&\r\n \r\n {fields.map((item, index, _arr) => {\r\n let inputValueIndex = inputValuesToSave.findIndex(x => x.internalName === item.InternalName)\r\n return inputValueIndex !== -1 && item.InternalName !== piiConfig.privacySentitiveColumnName && item.InternalName !== piiConfig.privacySentitiveDataColumnName ? (\r\n \r\n \r\n \r\n ) : null;\r\n })}\r\n }\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n }\r\n\r\n {generalModule.isInConentMangerMode() && }\r\n
\r\n\r\n )\r\n};","import { DefaultButton, Dialog, DialogFooter, DialogType, IDialogContentProps, PrimaryButton, Spinner, SpinnerSize } from \"@fluentui/react\";\r\nimport React from \"react\";\r\n\r\nexport interface ICMConfirmModalProps {\r\n title: string;\r\n message?: string;\r\n htmlContent?: JSX.Element;\r\n showDialog: boolean;\r\n closeText?: string;\r\n confirmText: string;\r\n closeDialog: () => void;\r\n onConfirm?: () => void;\r\n isBusy?: boolean;\r\n}\r\n\r\nexport const CMConfirmModal = ({ title, message, htmlContent, showDialog, closeDialog, onConfirm, closeText, confirmText, isBusy }: ICMConfirmModalProps) => {\r\n let dialogContentProps: IDialogContentProps = {\r\n type: DialogType.normal,\r\n title,\r\n subText: message,\r\n showCloseButton: true,\r\n closeButtonAriaLabel: 'Close'\r\n };\r\n\r\n if (message) {\r\n dialogContentProps.subText = message;\r\n }\r\n\r\n return (\r\n \r\n )\r\n};","import { Checkbox, DefaultButton, DirectionalHint, Icon, IPanelStyles, IStackTokens, ITextFieldStyles, Link, mergeStyles, Panel, PanelType, PrimaryButton, ScrollablePane, ScrollbarVisibility, Stack, TextField, TooltipDelay, TooltipHost } from \"@fluentui/react\";\r\nimport { getFileTypeIconProps } from \"@fluentui/react-file-type-icons\";\r\nimport React from \"react\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport { ContentManagerCopyMoveModeEnum } from \"../../src/taskpane/components/enums/ContentManagerCopyMoveModeEnum\";\r\nimport { setContentManagerMoveTo } from '../../src/taskpane/redux/modules/contentManagerDirectory';\r\nimport { ChangedInput } from \"../../src/taskpane/components/file/fileItems\";\r\nimport { RootState } from \"../../src/taskpane/components/_v2/redux/storeMain\";\r\nimport { ComponentTypes } from \"../../src/taskpane/config/config\";\r\nimport { IFileToUpload } from \"../../src/taskpane/interfaces/IFileToUpload\";\r\nimport { setFiles, updateFileName } from \"../../src/taskpane/redux/modules/file\";\r\nimport generalModule from \"../../utilities/GeneralModule\";\r\nimport { LanguageContext } from \"../../utilities/LocalizationModule\";\r\nimport { CMConfirmModal } from \"./CMConfirmModal\";\r\n\r\nexport const scrollStyle = mergeStyles({\r\n position: \"relative\",\r\n height: \"calc(100vh - 135px)\",\r\n});\r\n\r\nconst themedLargeStackTokens: IStackTokens = {\r\n childrenGap: \"s2\",\r\n padding: \"0px 0px\"\r\n};\r\n\r\nconst textFieldStyles: Partial = {\r\n suffix: {\r\n paddingLeft: 0\r\n }\r\n};\r\n\r\nconst stackTokens: IStackTokens = { childrenGap: 5 };\r\n\r\nconst panelStyles: Partial = {\r\n content: {\r\n paddingLeft: 15,\r\n paddingRight: 15\r\n }\r\n}\r\nexport interface ICMEmailAttachmentPanelProps {\r\n panelIsOpen: boolean;\r\n closePanel: () => void;\r\n}\r\n\r\nexport const CMEmailAttachmentPanel = ({ panelIsOpen, closePanel }: ICMEmailAttachmentPanelProps) => {\r\n const languageStrings = React.useContext(LanguageContext);\r\n\r\n const VISIBLE_FILES_PER_LOAD = 30;\r\n const MAX_SELECTED_FILES = 50;\r\n\r\n const dispatch = useDispatch();\r\n\r\n const currentDirectory = useSelector((state: RootState) => state.workingDirectories?.workingDirectories?.length > 0 ? state.workingDirectories.workingDirectories[state.workingDirectories.workingDirectories.length - 1] : null);\r\n const files = useSelector((state: RootState) => state.files.files);\r\n\r\n const [showConfirmMoveToDialog, setShowConfirmMoveToDialog] = React.useState(false);\r\n const [visibleFiles, setVisibleFiles] = React.useState([]);\r\n const [showMaxFilesSelectedDialog, setShowMaxFilesSelectedDialog] = React.useState(false);\r\n\r\n const isOneDrive = currentDirectory?.type === ComponentTypes.OneDrive || currentDirectory?.type === ComponentTypes.OneDriveSubFolder;\r\n\r\n React.useEffect(() => {\r\n if (files) {\r\n if (visibleFiles.length === 0) {\r\n setVisibleFiles(files.filter(item => item.isGraphMailItem).slice(0, VISIBLE_FILES_PER_LOAD));\r\n } else {\r\n setVisibleFiles(files.filter(item => item.isGraphMailItem).slice(0, visibleFiles.length));\r\n }\r\n }\r\n }, [files]);\r\n\r\n const addMoreVisibleFiles = () => {\r\n setVisibleFiles(files.filter(item => item.isGraphMailItem).slice(0, visibleFiles.length + VISIBLE_FILES_PER_LOAD));\r\n }\r\n const handleTextFieldOnchange = async (event: any, newValue: string): Promise => {\r\n const currentChangedInput: ChangedInput = {\r\n id: event.target.name,\r\n value: newValue\r\n }\r\n dispatch(updateFileName({ name: currentChangedInput.value, id: currentChangedInput.id }));\r\n };\r\n\r\n const getFileErrorMessage = (file: IFileToUpload) => {\r\n if (file.filePreCommitResult) {\r\n if (file.filePreCommitResult.exists && !file.filePreCommitResult.locked && !file.filePreCommitResult.checkedOut)\r\n return languageStrings.FileSameName;\r\n if (file.filePreCommitResult.exists && file.filePreCommitResult.locked && !file.filePreCommitResult.checkedOut)\r\n return languageStrings.FileSameLocked;\r\n if (file.filePreCommitResult.exists && !file.filePreCommitResult.locked && file.filePreCommitResult.checkedOut)\r\n return languageStrings.FileSameCheckedOut;\r\n }\r\n\r\n return \"\";\r\n };\r\n\r\n const handleEmailChecked = async (event, isChecked: boolean, item: any) => {\r\n dispatch(setFiles(files.map(file => {\r\n return {\r\n ...file,\r\n isSelected: item.id === file.id ? isChecked : file.isSelected\r\n }\r\n })))\r\n };\r\n\r\n const onRenderFooterContent = React.useCallback(\r\n () => (\r\n \r\n {!generalModule.isInConentMangerMode() && {\r\n if (files.filter(x => x.isSelected && x.isGraphMailItem).length > MAX_SELECTED_FILES) {\r\n setShowMaxFilesSelectedDialog(true);\r\n } else {\r\n setShowConfirmMoveToDialog(true);\r\n }\r\n }\r\n }\r\n text={languageStrings.Save} />}\r\n {\r\n closePanel();\r\n }}\r\n text={languageStrings.Close}\r\n />\r\n \r\n ),\r\n [files],\r\n );\r\n\r\n return (\r\n closePanel()}\r\n isLightDismiss\r\n closeButtonAriaLabel=\"Close\"\r\n type={PanelType.custom}\r\n customWidth={!generalModule.isInConentMangerMode() ? \"300px\" : \"350px\"}\r\n styles={panelStyles}\r\n onRenderFooterContent={onRenderFooterContent}\r\n isFooterAtBottom={true}\r\n >\r\n
\r\n \r\n \r\n {visibleFiles.map((item, index) => {\r\n let mailClass = \"xb-select-documents-mail-border xb-select-documents-mail\";\r\n let attachmentClass = \"xb-select-documents-mail-border xb-select-documents-attachment\";\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n {item.isAttachment ? (\r\n x.isSelected === true).length === 1)}\r\n styles={textFieldStyles}\r\n borderless\r\n value={item.name}\r\n name={item.id}\r\n onChange={handleTextFieldOnchange}\r\n suffix={item.extension ? `.${item.extension}` : undefined}\r\n className=\"xb-select-documents-input\"\r\n />\r\n ) : (\r\n x.isSelected === true).length === 1)}\r\n styles={textFieldStyles}\r\n borderless\r\n name={item.id}\r\n value={item.name}\r\n onChange={handleTextFieldOnchange}\r\n className=\"xb-select-documents-input\"\r\n />\r\n )}\r\n \r\n \r\n handleEmailChecked(ev, checked, item)}\r\n />\r\n \r\n
\r\n )\r\n })}\r\n {files.filter(x => x.isGraphMailItem).length > visibleFiles.length &&\r\n
\r\n addMoreVisibleFiles()}>{languageStrings.LoadMore}\r\n
\r\n }\r\n
\r\n
\r\n {showConfirmMoveToDialog && !generalModule.isInConentMangerMode() && {\r\n setShowConfirmMoveToDialog(false);\r\n }}\r\n closeText=\"\"\r\n confirmText={languageStrings.Ok}\r\n onConfirm={() => {\r\n dispatch(setContentManagerMoveTo({\r\n mode: ContentManagerCopyMoveModeEnum.CopySelectedEmails,\r\n error: \"\",\r\n moveToEnabled: true,\r\n workingDirectories: [],\r\n selectedFiles: [],\r\n siteUrl: \"\",\r\n sourceSiteUrl: \"\",\r\n sourceServerRelPath: \"\",\r\n busyMovingFiles: false,\r\n copyJobResults: [],\r\n isMoveComplete: false,\r\n isMoveCancelled: false,\r\n destinationDirectory: {},\r\n progressCountCompleted: 0,\r\n progressCountTotal: 0\r\n }));\r\n dispatch(setFiles(files.map(file => {\r\n return {\r\n ...file,\r\n isSelected: !file.isGraphMailItem ? false : file.isSelected\r\n }\r\n })));\r\n setShowConfirmMoveToDialog(false);\r\n closePanel();\r\n }}\r\n />}\r\n {showMaxFilesSelectedDialog && {\r\n setShowMaxFilesSelectedDialog(false);\r\n }}\r\n closeText=\"\"\r\n confirmText={languageStrings.Ok}\r\n onConfirm={() => {\r\n setShowMaxFilesSelectedDialog(false);\r\n }}\r\n />}\r\n
\r\n\r\n \r\n )\r\n};","import { DefaultButton, Dialog, DialogFooter, DialogType, IDialogContentProps } from \"@fluentui/react\";\r\nimport React from \"react\";\r\nimport { LanguageContext } from \"../../utilities/LocalizationModule\";\r\n\r\nexport interface ICMConfirmModalProps {\r\n message: string;\r\n showDialog: boolean;\r\n closeDialog: () => void;\r\n}\r\n\r\nexport const CMErrorModal = ({ message, showDialog, closeDialog }: ICMConfirmModalProps) => {\r\n const languageStrings = React.useContext(LanguageContext);\r\n\r\n const dialogContentProps: IDialogContentProps = {\r\n type: DialogType.normal,\r\n title: languageStrings.Error,\r\n subText: message,\r\n showCloseButton: true,\r\n closeButtonAriaLabel: 'Close'\r\n };\r\n\r\n return (\r\n \r\n )\r\n};","import { ActionButton, Checkbox, FontIcon, Icon, IIconProps, ILabelStyles, ILinkStyles, ISearchBoxStyles, IStackItemStyles, IStackTokens, Label, Link, mergeStyles, SearchBox, Slider, Stack, StackItem, TooltipHost } from \"@fluentui/react\";\r\nimport { getFileTypeIconProps } from \"@fluentui/react-file-type-icons\";\r\nimport dayjs from \"dayjs\";\r\nimport React from \"react\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport { useLazyRenderListAsStreamQuery } from \"../../../src/taskpane/components/_v2/redux/api/sharepoint/api-sharepoint-slice\";\r\nimport { RootState } from \"../../../src/taskpane/components/_v2/redux/storeMain\";\r\nimport { IOneDriveRootDetails } from \"../../../src/taskpane/interfaces/IOneDriveRootDetails\";\r\nimport { IPageSettings } from \"../../../src/taskpane/interfaces/IPageSettings\";\r\nimport { FilterItem, FilterSection } from \"../../../src/taskpane/redux/models/reduxModels\";\r\nimport { setContentManagerFilterSectionItem, setContentManagerFilterSectionItems, setContentManagerFilterSectionItemsFromRange, setContentManagerFilterSectionToggleShowMOre, setContentManagerFilterSectionToggleSlider } from \"../../../src/taskpane/redux/modules/contentManagerDirectory\";\r\nimport { toggleReload } from \"../../../src/taskpane/redux/modules/reload\";\r\nimport authModule from \"../../../utilities/AuthModule\";\r\nimport { LanguageContext } from \"../../../utilities/LocalizationModule\";\r\nimport { logger } from \"../../../utilities/logger\";\r\nimport { GridProps } from \"../../Body/useContentManagerBody\";\r\n\r\nexport interface DateRangeStep {\r\n index: number;\r\n label: string;\r\n daysOffset?: number;\r\n}\r\n\r\nconst checkboxLabelStyles: IStackItemStyles = {\r\n root: {\r\n textOverflow: \"ellipsis\",\r\n overflow: \"hidden\",\r\n whiteSpace: \"nowrap\"\r\n }\r\n}\r\n\r\nconst labelStyles: ILabelStyles = {\r\n root: { marginBottom: 10 }\r\n}\r\n\r\nconst linkStyles: ILinkStyles = {\r\n root: { marginTop: 10 }\r\n}\r\n\r\nconst filterButtonStackItemStyles: IStackItemStyles = {\r\n root: {\r\n marginTop: -10\r\n }\r\n}\r\n\r\nconst searchIcon: IIconProps = { iconName: \"Search\" };\r\nconst searchBoxStyles: Partial = {\r\n root: { height: \"100%\", marginBottom: 10, paddingBottom: 5 }\r\n};\r\n\r\nconst horizontalGapStackTokens: IStackTokens = {\r\n childrenGap: 10\r\n};\r\n\r\nexport interface CMFileFilterPanelSectionProps {\r\n filterSections: FilterSection[];\r\n filterSection: FilterSection;\r\n isInOneDrive: boolean;\r\n serverRelPath: string;\r\n oneDriveRootDetails: IOneDriveRootDetails;\r\n currentDirectory: IPageSettings;\r\n isInContentManagerMode: boolean;\r\n setFilterSectionItem?: (filterSection: FilterSection, sectionItem: FilterItem, isChecked: boolean) => void;\r\n setFilterSectionItems?: (filterSection: FilterSection, sectionItems: FilterItem[]) => void;\r\n setFilterSectionItemsFromRange?: (filterSection: FilterSection, daysOffset: number) => void;\r\n setFilterSectionToggleSlider?: (filterSection: FilterSection, skipApiCall?: boolean) => void;\r\n setFilterSectionToggleShowMore?: (filterSection: FilterSection) => void;\r\n}\r\n\r\nexport interface FilterSectionItemsExpandSearchParams {\r\n field: string;\r\n value: string;\r\n}\r\n\r\nexport const CMFileFilterPanelSection = ({ filterSections, filterSection, isInOneDrive, serverRelPath, oneDriveRootDetails, currentDirectory, isInContentManagerMode, setFilterSectionItem, setFilterSectionItems, setFilterSectionItemsFromRange, setFilterSectionToggleSlider, setFilterSectionToggleShowMore }: CMFileFilterPanelSectionProps) => {\r\n const dispatch = useDispatch();\r\n\r\n const languageStrings = React.useContext(LanguageContext);\r\n\r\n //const filterSections = isInContentManagerMode ? useSelector((state: RootState) => state.contentManagerDirectory.filterSections) : localFilterSections;\r\n\r\n const [sectionElement, setSectionElement] = React.useState();\r\n const [minItems, setMinItems] = React.useState(5);\r\n const [loadSection, setLoadSection] = React.useState(false);\r\n const [showFilterIcon, setShowFilterIcon] = React.useState(false);\r\n const [showFilterSearchBox, setFilterSearchBox] = React.useState(false);\r\n const [sectionFilterValue, setSectionFilterValue] = React.useState(\"\");\r\n const [uniqueSearches, setUniqueSearches] = React.useState([]);\r\n\r\n const [getListAsStream] = useLazyRenderListAsStreamQuery();\r\n\r\n const [dateRangeSteps, setDateRangeSteps] = React.useState([\r\n { index: -5, label: languageStrings.FilterDateStepSince },\r\n { index: -4, label: languageStrings.FilterDateStepLast3Months, daysOffset: -92 },\r\n { index: -3, label: languageStrings.FilterDateStepLast30Days, daysOffset: -30 },\r\n { index: -2, label: languageStrings.FilterDateStepLast7Days, daysOffset: -7 },\r\n { index: -1, label: languageStrings.FilterDateStepSinceYesterday, daysOffset: -1 },\r\n { index: 0, label: languageStrings.FilterDateStepToday, daysOffset: 0 },\r\n { index: 1, label: languageStrings.FilterDateStepTomorrow, daysOffset: 1 },\r\n { index: 2, label: languageStrings.FilterDateStepIn7Days, daysOffset: 7 },\r\n { index: 3, label: languageStrings.FilterDateStepIn30Days, daysOffset: 30 },\r\n { index: 4, label: languageStrings.FilterDateStepIn3Months, daysOffset: 92 },\r\n { index: 5, label: languageStrings.FilterDateStepIn3MonthsOrMore, daysOffset: 93 }\r\n ]);\r\n\r\n const [selectedDateRangeStep, setSelectedDateRangeStep] = React.useState(dateRangeSteps[0]);\r\n const [sliderValue, setSliderValue] = React.useState(selectedDateRangeStep.index);\r\n const [hasFutureDateValues, setHasFutureDateValues] = React.useState(false);\r\n\r\n const onChange = (value: number) => {\r\n if (value !== selectedDateRangeStep.index) {\r\n const dateRangeStep = dateRangeSteps.find(x => x.index === value);\r\n setSelectedDateRangeStep(dateRangeStep);\r\n setSliderValue(value);\r\n }\r\n };\r\n\r\n const onChanged = (event: any, value: number, range?: [number, number]) => {\r\n if (selectedDateRangeStep.index !== value) {\r\n const dateRangeStep = dateRangeSteps.find(x => x.index === value);\r\n if (isInContentManagerMode) {\r\n dispatch(setContentManagerFilterSectionItemsFromRange(filterSection, dateRangeStep.daysOffset));\r\n dispatch(toggleReload());\r\n }\r\n else {\r\n setFilterSectionItemsFromRange(filterSection, dateRangeStep.daysOffset);\r\n }\r\n }\r\n };\r\n\r\n React.useEffect(() => {\r\n const currentFilterSection = filterSections.find(x => x.filterField.RealFieldName === filterSection.filterField.RealFieldName)\r\n if (currentFilterSection) {\r\n if (currentFilterSection.filterField.Type === 'DateTime') {\r\n const selectedDateRange = (!currentFilterSection.daysOffset && currentFilterSection.daysOffset !== 0) ? dateRangeSteps[0] : dateRangeSteps.find(x => x.daysOffset === currentFilterSection.daysOffset);\r\n setSelectedDateRangeStep(selectedDateRange);\r\n setSliderValue(selectedDateRange.index);\r\n\r\n let hasFutureDates: boolean = false;\r\n if (currentFilterSection.items.length > 0) {\r\n try {\r\n const filterDate = new Date(currentFilterSection.items[currentFilterSection.items.length - 1].value);\r\n const filterTimeStamp = filterDate.getTime();\r\n if (!isNaN(filterTimeStamp) && filterTimeStamp > (new Date()).getTime()) {\r\n hasFutureDates = true;\r\n setHasFutureDateValues(true);\r\n }\r\n } catch (error) {\r\n // Ignore\r\n }\r\n }\r\n\r\n if (!hasFutureDates) {\r\n setDateRangeSteps(dateRangeSteps.slice(0, 6));\r\n }\r\n }\r\n\r\n const itemHeight: number = 30;\r\n let containerHeight: number;\r\n\r\n if (currentFilterSection.items.length > minItems && currentFilterSection.showMoreExpanded === false) {\r\n containerHeight = itemHeight * minItems;\r\n }\r\n else {\r\n containerHeight = itemHeight * currentFilterSection.items.length;\r\n }\r\n\r\n if (!currentFilterSection.hasSlider && currentFilterSection.items.length > minItems) {\r\n setShowFilterIcon(true);\r\n }\r\n\r\n const sectionStyle = mergeStyles({\r\n maxHeight: containerHeight - 10,\r\n overflow: \"hidden\",\r\n transition: \"max-height 0.3s ease-in-out\",\r\n });\r\n\r\n if (currentFilterSection?.items?.length > 0) {\r\n setSectionElement(\r\n \r\n {currentFilterSection.items.filter(x => x.title?.toLowerCase().includes(sectionFilterValue?.toLowerCase())).slice(0, currentFilterSection.showMoreExpanded ? currentFilterSection.items.length : currentFilterSection.items.length > minItems ? minItems : currentFilterSection.items.length).map((item, index) => {\r\n return (\r\n _onRenderLabel(item)} checked={item.selected} onChange={(ev?: React.FormEvent, isChecked?: boolean) => _onCheckboxChange(ev, isChecked, item)} />\r\n )\r\n })}\r\n \r\n );\r\n } else {\r\n setSectionElement(undefined);\r\n }\r\n\r\n setLoadSection(true);\r\n }\r\n }, [filterSection, sectionFilterValue])\r\n\r\n React.useEffect(() => {\r\n if (uniqueSearches?.length > 0) {\r\n (async () => {\r\n const lastSearchValue = uniqueSearches[uniqueSearches?.length - 1];\r\n\r\n const gridProps: GridProps = {\r\n sort: []\r\n }\r\n\r\n if (lastSearchValue) {\r\n try {\r\n const listStream = await getListAsStream({\r\n siteUrl: isInOneDrive ? oneDriveRootDetails?.sharePointSiteUrl : currentDirectory?.webUrl,\r\n sharePointListId: currentDirectory?.sharePointListId,\r\n gridProps: { ...gridProps },\r\n accessToken: isInOneDrive ? await authModule.getOneDriveAccessToken() : await authModule.getSharePointAccessToken(),\r\n serverRelativePath: serverRelPath,\r\n filterSections: [],\r\n filterSectionItemsExpandParams: {\r\n field: filterSection.filterField.RealFieldName,\r\n value: lastSearchValue\r\n }\r\n }).unwrap();\r\n\r\n const items: string[] = listStream.ListData.Row\r\n .map(item => item[filterSection.filterField.RealFieldName])\r\n .filter((v, i, a) => a.indexOf(v) === i); //Remove duplicates\r\n\r\n const oldSectionItems = [...filterSection.items];\r\n const newSectionItems: FilterItem[] = [...filterSection.items];\r\n\r\n items.forEach(item => {\r\n if (item) {\r\n const filterItem = newSectionItems.find(x => x.value?.toUpperCase() === item.toUpperCase());\r\n\r\n if (!filterItem) {\r\n let newFilterItem: FilterItem = {\r\n title: item,\r\n value: item,\r\n selected: false\r\n }\r\n\r\n newSectionItems.push(newFilterItem);\r\n }\r\n }\r\n });\r\n\r\n if (newSectionItems?.length > oldSectionItems?.length) {\r\n const sectionItemsSorted = newSectionItems.sort((a, b) => (a.title?.toUpperCase() > b.title?.toUpperCase()) ? 1 : -1).map((item, index) => {\r\n return {\r\n ...item,\r\n index\r\n }\r\n });\r\n if (isInContentManagerMode)\r\n dispatch(setContentManagerFilterSectionItems(filterSection, sectionItemsSorted));\r\n else\r\n setFilterSectionItems(filterSection, sectionItemsSorted);\r\n }\r\n } catch (error) {\r\n logger(error, \"CMFileFilterPanelSection.tsx (Search filters)\");\r\n }\r\n }\r\n })();\r\n }\r\n }, [uniqueSearches]);\r\n\r\n const _onRenderLabel = (item: FilterItem) => {\r\n return (\r\n
\r\n \r\n {filterSection.filterField.RealFieldName === 'DocIcon' && }\r\n {item.title}\r\n \r\n
\r\n )\r\n }\r\n\r\n function _onCheckboxChange(ev?: React.FormEvent, isChecked?: boolean, item?: FilterItem) {\r\n\r\n if (isInContentManagerMode) {\r\n dispatch(setContentManagerFilterSectionItem(filterSection, item, isChecked));\r\n dispatch(toggleReload());\r\n } else {\r\n setFilterSectionItem(filterSection, item, isChecked);\r\n }\r\n }\r\n\r\n const showMoreClicked = () => {\r\n if (isInContentManagerMode) {\r\n dispatch(setContentManagerFilterSectionToggleShowMOre(filterSection))\r\n } else {\r\n setFilterSectionToggleShowMore(filterSection);\r\n }\r\n }\r\n\r\n const showDatesClicked = () => {\r\n const reloadGrid: boolean = selectedDateRangeStep.index !== dateRangeSteps[0].index;\r\n setSelectedDateRangeStep(dateRangeSteps[0]);\r\n setSliderValue(0);\r\n if (isInContentManagerMode) {\r\n dispatch(setContentManagerFilterSectionItemsFromRange(filterSection, dateRangeSteps[0].daysOffset));\r\n dispatch(setContentManagerFilterSectionToggleSlider(filterSection));\r\n if (reloadGrid)\r\n dispatch(toggleReload());\r\n }\r\n else {\r\n setFilterSectionItemsFromRange(filterSection, dateRangeSteps[0].daysOffset);\r\n setFilterSectionToggleSlider(filterSection, !reloadGrid);\r\n }\r\n }\r\n\r\n const showSliderClicked = () => {\r\n let reloadGrid = filterSection.items.some(x => x.selected);\r\n if (isInContentManagerMode) {\r\n dispatch(setContentManagerFilterSectionToggleSlider(filterSection));\r\n if (reloadGrid) {\r\n dispatch(toggleReload());\r\n }\r\n }\r\n else {\r\n setFilterSectionToggleSlider(filterSection, !reloadGrid);\r\n }\r\n }\r\n\r\n const getSectionSubtitle = () => {\r\n if (filterSection.showSlider) {\r\n if (selectedDateRangeStep.index === dateRangeSteps[0]?.index) {\r\n let hasEmptyItem = (filterSection.items.some(x => x.title === `(Empty)`) || filterSection.items.some(x => x.title === `(Leeg)`)) ? true : false;\r\n let firstItem = hasEmptyItem ? filterSection?.items[1] : filterSection?.items[0]\r\n let dateString = dayjs(firstItem?.value).isValid() ? dayjs(firstItem?.value).format(\"ll\") : firstItem?.title\r\n return `(${selectedDateRangeStep.label} ${dateString})`;\r\n } else {\r\n return `(${selectedDateRangeStep.label})`;\r\n }\r\n }\r\n\r\n if (filterSection.items?.some(x => x.selected)) {\r\n return `(${filterSection.items?.filter(x => x.selected)?.length})`;\r\n }\r\n\r\n return '';\r\n }\r\n\r\n const onFilterClick = () => {\r\n setFilterSearchBox(prev => !prev);\r\n setSectionFilterValue(\"\");\r\n }\r\n\r\n const onChangeFilter = React.useCallback(async (event?: React.ChangeEvent, newValue?: string) => {\r\n setSectionFilterValue(newValue);\r\n const searchValue = newValue.toLowerCase();\r\n const minItemsBeforeAdditionalSearch = 6;\r\n if (filterSection.items?.length > minItemsBeforeAdditionalSearch && newValue?.length > 0 && !uniqueSearches.includes(searchValue)) {\r\n const oldValues = [...uniqueSearches];\r\n oldValues.push(newValue);\r\n setUniqueSearches(oldValues);\r\n }\r\n }, [uniqueSearches]);\r\n\r\n return (\r\n <>\r\n {loadSection && <>\r\n {filterSection?.items?.length > 0 &&\r\n \r\n \r\n \r\n \r\n {showFilterIcon &&\r\n \r\n \r\n \r\n \r\n }\r\n \r\n }\r\n {showFilterSearchBox && }\r\n {!filterSection.showSlider && sectionElement &&\r\n <>\r\n {sectionElement}\r\n {filterSection?.items?.filter(x => x.title?.toLowerCase().includes(sectionFilterValue?.toLowerCase())).length > minItems &&
{ showMoreClicked() }}>\r\n \r\n {!filterSection.showMoreExpanded ? languageStrings.ShowMore : languageStrings.ShowLess}\r\n
}\r\n }\r\n {filterSection.hasSlider && filterSection.showSlider && dateRangeSteps[0]?.index}\r\n />}\r\n {filterSection.hasSlider && filterSection.showSlider && showDatesClicked()}>{languageStrings.SelectSpecificDates}}\r\n {filterSection.hasSlider && !filterSection.showSlider && showSliderClicked()}>{languageStrings.ShowDateRangeSlider}}\r\n }\r\n \r\n )\r\n};\r\n","import Axios from \"axios\";\r\nimport { officeExtentions } from \"../../../src/taskpane/config/constants\";\r\nimport { IPageSettings } from \"../../../src/taskpane/interfaces/IPageSettings\";\r\nimport { FilterItem, FilterSection } from \"../../../src/taskpane/redux/models/reduxModels\";\r\nimport authModule from \"../../../utilities/AuthModule\";\r\nimport { logger } from \"../../../utilities/logger\";\r\nimport { tryDecodeUriComponent, tryEncodeUriComponent } from \"../../../utilities/EncodeDecode\";\r\nimport { IAuthAccount } from \"../../../src/taskpane/interfaces/IAuthTokenResultDto\";\r\nimport { IViewsDropdown } from \"../../../src/taskpane/interfaces/IViewsDropdown\";\r\nimport { parseDocument } from \"htmlparser2\";\r\nimport { getElementsByTagName } from \"domutils\";\r\n\r\nconst extractSelectOptions = (data: any) => {\r\n const options = getElementsByTagName(\"option\", parseDocument(data));\r\n\r\n if (Array.isArray(options)) {\r\n return options.map((el) => {\r\n const option: FilterItem = {\r\n title: el.children[0]['data'],\r\n value: el.attribs.value,\r\n selected: false\r\n }\r\n return option;\r\n });\r\n }\r\n\r\n return [];\r\n}\r\n\r\nconst extractListItems = (data: any) => {\r\n const list = getElementsByTagName(\"li\", parseDocument(data)).splice(1);\r\n const options: FilterItem[] = [];\r\n\r\n if (Array.isArray(list)) {\r\n list.forEach((el, index) => {\r\n if (index % 5 === 0) {\r\n options.push({\r\n title: el.children[0]['data'],\r\n value: el.children[0]['data'],\r\n selected: false\r\n })\r\n }\r\n });\r\n }\r\n\r\n return options;\r\n}\r\n\r\nexport const resetFilterValues = (\r\n filterSections: FilterSection[]\r\n): FilterSection[] => {\r\n return filterSections.map(section => {\r\n return {\r\n ...section,\r\n showMoreExpanded: false,\r\n daysOffset: null,\r\n items: section.items.map(item => {\r\n return {\r\n ...item,\r\n selected: false\r\n }\r\n })\r\n }\r\n });\r\n}\r\n\r\nexport const setFilterSectionsFromFields = async (\r\n isInOneDrive: boolean,\r\n oneDriveRootDetails: any,\r\n currentDirectory: IPageSettings,\r\n userAccount: IAuthAccount,\r\n filterFieldList: any[],\r\n serverRelPath: string,\r\n localizedMeText: string,\r\n selectedView?: IViewsDropdown\r\n): Promise => {\r\n try {\r\n const siteUrl = isInOneDrive ? oneDriveRootDetails?.sharePointSiteUrl : currentDirectory?.webUrl;\r\n const config = {\r\n headers: {\r\n Authorization: `Bearer ${isInOneDrive ? await authModule.getOneDriveAccessToken() : await authModule.getSharePointAccessToken()}`,\r\n }\r\n }\r\n\r\n const filterSections = await Promise.all(\r\n filterFieldList\r\n ?.filter(x => x.RealFieldName !== 'FileSizeDisplay'\r\n && x.RealFieldName !== 'Title'\r\n && x.RealFieldName !== '_UIVersionString'\r\n && x.Filterable !== 'FALSE'\r\n && x.ShowInFiltersPane !== 'FALSE'\r\n && x.GroupField !== 'TRUE'\r\n )\r\n ?.map(async field => {\r\n try {\r\n const data = (await Axios.post(`${siteUrl}/_api/web/lists('${currentDirectory?.sharePointListId}')/RenderListFilterData?&FieldInternalName=${field.RealFieldName}&RootFolder=${tryEncodeUriComponent(tryDecodeUriComponent(serverRelPath))}&ExcludeFieldFilteringHtml=true${selectedView?.Id ? `&ViewId=${selectedView.Id}` : \"\"}`, {}, config)).data;\r\n\r\n const section: FilterSection = {\r\n filterField: field,\r\n items: data.includes(' {\r\n if (item.title !== '(All)' && item.title !== '(Alles)') {\r\n if (field.RealFieldName === 'DocIcon') {\r\n if (officeExtentions.word.items.includes(item.value)) {\r\n if (!compactItems.some(x => x.fileType === 'docx')) {\r\n compactItems.push({\r\n title: 'Word',\r\n value: officeExtentions.word.values,\r\n fileType: 'docx',\r\n selected: false\r\n })\r\n }\r\n }\r\n else if (officeExtentions.excel.items.includes(item.value)) {\r\n if (!compactItems.some(x => x.fileType === 'xlsx')) {\r\n compactItems.push({\r\n title: 'Excel',\r\n value: officeExtentions.excel.values,\r\n fileType: 'xlsx',\r\n selected: false\r\n })\r\n }\r\n }\r\n else if (officeExtentions.powerPoint.items.includes(item.value)) {\r\n if (!compactItems.some(x => x.fileType === 'pptx')) {\r\n compactItems.push({\r\n title: 'PowerPoint',\r\n value: officeExtentions.powerPoint.values,\r\n fileType: 'pptx',\r\n selected: false\r\n })\r\n }\r\n }\r\n else if (officeExtentions.visio.items.includes(item.value)) {\r\n if (!compactItems.some(x => x.fileType === 'vsdx')) {\r\n compactItems.push({\r\n title: 'Visio',\r\n value: officeExtentions.visio.values,\r\n fileType: 'vsdx',\r\n selected: false\r\n })\r\n }\r\n }\r\n else if (item.title !== `(Empty)` && item.title !== `(Leeg)`) {\r\n compactItems.push({ ...item, fileType: item.value });\r\n }\r\n }\r\n else if (field.FieldType === \"User\" || field.FieldType === \"UserMulti\") {\r\n if (item.title === userAccount.displayName) {\r\n compactItems.push({ ...item, title: `@${localizedMeText}` });\r\n }\r\n else {\r\n compactItems.push({ ...item });\r\n }\r\n }\r\n else {\r\n compactItems.push({ ...item });\r\n }\r\n }\r\n });\r\n\r\n // try {\r\n // const dataSourceField = dataSourceHelper.getInputDataSource(datasourceItems, field.DisplayName);\r\n // if (dataSourceField) {\r\n // const dropdownBinder = new dataSourceDropdownBinder(dataSourceService, dataSourceField, field.DisplayName);\r\n // const property = dropdownBinder.getDataSourcePropertyToBindTo();\r\n // if (property) {\r\n // const datasourceData = await dropdownBinder.getDatasourceEntries();\r\n // const datasourceValues = dropdownBinder.bindDataSourceToDropdown(datasourceData, property);\r\n\r\n // datasourceValues.forEach(datasourceValue => {\r\n // const datasourceFilterValue: string = (datasourceValue.key as string)?.trim();\r\n // if (datasourceFilterValue) {\r\n // const compactItem = compactItems.find(x => x.value?.trim().toUpperCase() === datasourceFilterValue.toUpperCase());\r\n // if (!compactItem) {\r\n // const newFilterItem: FilterItem = {\r\n // title: datasourceFilterValue,\r\n // value: datasourceFilterValue,\r\n // selected: false\r\n // }\r\n\r\n // compactItems.push(newFilterItem);\r\n // }\r\n // }\r\n // });\r\n // }\r\n // }\r\n // } catch (error) {\r\n // logger(error, \"CMFileFilterPanel.tsx (Add datasource options)\");\r\n // }\r\n\r\n if (field.FieldType === \"DateTime\") {\r\n compactItems.sort((a, b) => {\r\n try {\r\n // Convert the value of a and b to Date objects\r\n const aDate = new Date(a.value);\r\n const bDate = new Date(b.value);\r\n\r\n // Check if both a and b are valid dates\r\n if (!isNaN(aDate.getTime()) && !isNaN(bDate.getTime())) {\r\n // If both are valid dates, compare their timestamps to sort them\r\n return aDate.getTime() - bDate.getTime();\r\n }\r\n } catch (error) {\r\n // Ignore\r\n }\r\n\r\n // If either a or b (or both) are not valid dates, don't change their order\r\n return 0;\r\n });\r\n } else {\r\n compactItems = compactItems\r\n .sort((a, b) => (a.title?.toUpperCase() > b.title?.toUpperCase()) ? 1 : -1)\r\n .map((item) => {\r\n return {\r\n ...item\r\n }\r\n });\r\n }\r\n\r\n // section.items = [...compactItems];\r\n section.items = compactItems?.filter((obj, index, self) => index === self.findIndex((o) => o.title === obj.title));\r\n\r\n return section;\r\n } catch (error) {\r\n logger(error, \"FileFilterHelper.ts (filterFields)\");\r\n return null;\r\n }\r\n }));\r\n\r\n let displayFilterSections: FilterSection[] = [];\r\n\r\n (filterSections as FilterSection[])\r\n ?.filter(section => section)\r\n ?.forEach(section => {\r\n if (!(section.filterField.RealFieldName === 'ID' && section.filterField.FromBaseType === 'TRUE')) {\r\n if (section.items?.length === 1) {\r\n // Hide section if only (Empty)\r\n if (section.items[0].title !== \"(Empty)\" && section.items[0].title !== \"(Leeg)\") {\r\n section.showSlider = false;\r\n section.hasSlider = false;\r\n displayFilterSections.push(section);\r\n }\r\n }\r\n else if (section.items?.length === 2) {\r\n // Hide section slider if only 1 item\r\n if (section.items[0].title === \"(Empty)\" || section.items[0].title === \"(Leeg)\") {\r\n section.showSlider = false;\r\n section.hasSlider = false;\r\n }\r\n displayFilterSections.push(section);\r\n }\r\n else {\r\n displayFilterSections.push(section);\r\n }\r\n }\r\n });\r\n\r\n const forceToFrontFieldName: string = \"ContentType\";\r\n const forceToFrontIndex: number = displayFilterSections.findIndex(x => x?.filterField?.RealFieldName === forceToFrontFieldName);\r\n if (forceToFrontIndex !== -1) {\r\n displayFilterSections.unshift(displayFilterSections.splice(forceToFrontIndex, 1)[0]);\r\n }\r\n return displayFilterSections.filter(section => section?.items?.length > 1);\r\n } catch (error) {\r\n logger(error, \"FileFilterHelper.ts (setFilterSectionsFromFields)\");\r\n }\r\n\r\n return [];\r\n}","import React, { useState } from \"react\";\r\nimport { SharePointInputData } from \"../../src/taskpane/interfaces/props/SharePointInputData\";\r\nimport SaveWithMetaData from \"../../src/taskpane/components/directoryComponents/sharepoint/SaveToSharepoint\";\r\nimport { FontIcon, IButtonStyles, Icon, IPanelProps, IPanelStyles, IRenderFunction, IStackStyles, IStackTokens, Label, mergeStyles, MessageBar, MessageBarType, Panel, PanelType, PrimaryButton, ScrollablePane, ScrollbarVisibility, Spinner, SpinnerSize, Stack, TooltipHost } from \"@fluentui/react\";\r\nimport { LanguageContext } from \"../../utilities/LocalizationModule\";\r\nimport { CheckinTypes, CreateDocumentFromTemplateRequest, FilePreCommitRequest, MetadataDto, MetadataUpdateRequest, ReplaceFileRequest } from \"../../src/taskpane/components/_v2/redux/api/local/api-local-interfaces\";\r\nimport { RootState } from \"../../src/taskpane/components/_v2/redux/storeMain\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport authModule from \"../../utilities/AuthModule\";\r\nimport { FileIconType, getFileTypeIconProps } from \"@fluentui/react-file-type-icons\";\r\nimport { useMetaDataFormInputs } from \"../Body/useMetaDataFormInputs\";\r\nimport { Slide, ToastContainer } from \"react-toastify\";\r\nimport { customToast } from \"../../src/taskpane/components/CustomToast\";\r\nimport { DocubirdCache, internalSharepointName, SharePointFolderContentTypeIds, sharePointInternalFileName } from \"../../src/taskpane/config/constants\";\r\nimport { IDocUrlDropdown } from \"../../src/taskpane/interfaces/IDocUrlDropdown\";\r\nimport UploaderContainer from \"../../src/taskpane/components/panels/UploaderContainer\";\r\nimport { Fileview } from \"../../src/taskpane/components/_v2/components/Explorer/Fileview/Fileview\";\r\nimport { isMobile, mobileListItemStyle } from \"../../src/taskpane/styles/mobileStyles\";\r\nimport { useLazyCreateDocumentAndGetEditLinkQuery, useLazyDeleteVersionByLabelQuery, useLazyGetItemByUniqueIDQuery, useLazyGetItemVersionsQuery, useLazyPublishItemQuery } from \"../../src/taskpane/components/_v2/redux/api/sharepoint/api-sharepoint-slice\";\r\nimport { IVersionSelectorProps, VersionSelector } from \"../../src/taskpane/components/_v2/_shared/VersionSelector/VersionSelector\";\r\nimport { resetFiles } from \"../../src/taskpane/redux/modules/file\";\r\nimport { IFileToUpload } from \"../../src/taskpane/interfaces/IFileToUpload\";\r\nimport generalModule from \"../../utilities/GeneralModule\";\r\nimport { logger } from \"../../utilities/logger\";\r\nimport { ModeEnum } from \"../../src/taskpane/components/enums/modeEnum\";\r\nimport { OutlookUtils } from \"../../utilities/OutlookUtils\";\r\nimport { OutlookService } from \"../../src/taskpane/services/OutlookService\";\r\nimport { FileService } from \"../../src/taskpane/services/FileService\";\r\nimport { tryEncodeUriComponent } from \"../../utilities/EncodeDecode\";\r\nimport dayjs from \"dayjs\";\r\nimport { getFilePreCommitInfo, getFileVersionData, getItemAbsoluteUrl, getListSettings, getUserEffectivePermissions, getUserEffectivePermissionsFromMask } from \"../../src/taskpane/services/SharePointRestServices\";\r\nimport { currentSharepointFolderState, currentSharepointFolderUserPermissions } from \"../../src/taskpane/redux/models/reduxModels\";\r\nimport { IOutlookRestDto } from \"../../src/taskpane/interfaces/IOutlookRestDto\";\r\nimport { ComponentTypes } from \"../../src/taskpane/config/config\";\r\nimport { IFilePreCommitResult } from \"../../src/taskpane/interfaces/IFilePreCommitResult\";\r\nimport { SearchOpenExtensionHelper } from \"../../src/taskpane/components/helpers/SearchOpenExtensionHelper\";\r\nimport { CMCheckinModal } from \"./CMCheckinModal\";\r\nimport { CMConfirmModal } from \"./CMConfirmModal\";\r\nimport { CacheHelper } from \"../../utilities/CacheHelper\";\r\nimport { apiFileCreateDocumentFromTemplate, apiFileReplace, apiUpdateItemMetadata } from \"../../src/taskpane/services/ApiService\";\r\nimport { getContainerSharePointIds, getDriveRootWebUrl, getOneDriveRootDetails } from \"../../src/taskpane/services/GraphService\";\r\nimport { NewDocumentTemplate } from \"../../src/taskpane/interfaces/IDocumentTemplate\";\r\nimport { DatasourceTypeEnum } from \"../../src/taskpane/components/enums/datasourceTypeEnum\";\r\n// import { updateExcelXML, updateWordXML } from \"../../src/taskpane/services/OfficeCustomXmlService\";\r\n\r\nexport const scrollStyle = mergeStyles({\r\n position: \"relative\",\r\n height: \"calc(100vh - 140px)\",\r\n marginTop: 5,\r\n marginBottom: 10\r\n});\r\n\r\nexport const panelActionButtonStyle: Partial = {\r\n root: {\r\n marginTop: 20,\r\n }\r\n}\r\n\r\nconst tooltipHostCalloutProps = { gapSpace: 7 };\r\n\r\nconst panelStyles: Partial = {\r\n content: {\r\n paddingLeft: 5,\r\n paddingRight: 5\r\n },\r\n navigation: {\r\n justifyContent: \"space-between\",\r\n marginTop: 5\r\n }\r\n}\r\n\r\nconst uploaderContainerStyles: React.CSSProperties = {\r\n marginBottom: 10\r\n};\r\n\r\nconst fileNameContainerTokens: IStackTokens = {\r\n childrenGap: 10\r\n};\r\n\r\nconst fileIconContainerStyles: IStackStyles = {\r\n root: {\r\n display: \"flex\"\r\n }\r\n};\r\n\r\nconst fileNameContainerStyles: IStackStyles = {\r\n root: {\r\n margin: 5,\r\n paddingLeft: 10,\r\n minWidth: 0\r\n }\r\n};\r\n\r\nconst fileNameTextContainerStyles: IStackStyles = {\r\n root: {\r\n minWidth: 0\r\n }\r\n};\r\n\r\nconst defaultCloseButtonContainerStyles: React.CSSProperties = {\r\n marginRight: 14,\r\n display: \"flex\"\r\n}\r\n\r\nconst showMoreContainerStyles: React.CSSProperties = {\r\n marginTop: 5\r\n}\r\n\r\nconst paddedContainerStyles: React.CSSProperties = {\r\n paddingBottom: 10\r\n}\r\n\r\nconst fileNameTextStyles = mergeStyles({\r\n whiteSpace: \"nowrap\",\r\n textOverflow: \"ellipsis\",\r\n overflow: \"hidden\",\r\n fontWeight: 600,\r\n});\r\n\r\nconst minItems = 5;\r\n\r\nexport enum InfoPanelMode {\r\n Update,\r\n Replace,\r\n NewTemplate\r\n}\r\n\r\nexport interface ICMFileInfoPanelProps {\r\n item?: any;\r\n panelIsOpen: boolean;\r\n selectedDocumentLibrary?: IDocUrlDropdown;\r\n infoPanelMode?: InfoPanelMode;\r\n webAddinItem?: any;\r\n selectedTemplate?: NewDocumentTemplate;\r\n folderPath?: string;\r\n userPermissions?: currentSharepointFolderUserPermissions;\r\n keepOpenOnSave?: boolean;\r\n closePanel: () => void;\r\n closeOnSuccess: (item: any, inputValuesToSave: SharePointInputData[], selectedContentTypeId: string, extention?: string, replacementFile?: IFileToUpload) => void;\r\n}\r\n\r\nexport const CMFileInfoPanel = ({ item, panelIsOpen, selectedDocumentLibrary, infoPanelMode, webAddinItem, selectedTemplate, folderPath, userPermissions, keepOpenOnSave, closePanel, closeOnSuccess }: ICMFileInfoPanelProps) => {\r\n const languageStrings = React.useContext(LanguageContext);\r\n const dispatch = useDispatch();\r\n\r\n const workingDirectories = useSelector((state: RootState) => state.workingDirectories?.workingDirectories);\r\n const currentDirectory = useSelector((state: RootState) => state.workingDirectories?.workingDirectories?.length > 0 ? state.workingDirectories?.workingDirectories[state.workingDirectories?.workingDirectories?.length - 1] : null);\r\n const oneDriveRootDetails = useSelector((state: RootState) => state.workingDirectories?.oneDriveRootDetails);\r\n const currentSharepointFolder = useSelector((state: RootState) => state.currentSharepointFolder);\r\n const userAccount = useSelector((state: RootState) => state.user?.account);\r\n const files = useSelector((state: RootState) => state.files?.files);\r\n const mode = useSelector((state: RootState) => state.mode.mode);\r\n const tenantReplaceFileNameWithGUID = useSelector((state: RootState) => state.tenantInfo?.replaceFileNameWithGUID);\r\n const tenantOpenDocumentsInClientApp = useSelector((state: RootState) => state.tenantInfo?.openDocumentsInClientApp);\r\n const minVersionLimit = useSelector((state: RootState) => state.tenantInfo.minVersionLimit);\r\n const requiredMetadataOnPublish = useSelector((state: RootState) => state.tenantInfo.requiredMetadataOnPublish);\r\n const autoDeleteMinorVersionsOnPublish = useSelector((state: RootState) => state.tenantInfo.autoDeleteMinorVersionsOnPublish);\r\n\r\n const [getItemByUniqueId] = useLazyGetItemByUniqueIDQuery();\r\n const [createDocumentAndGetEditLink] = useLazyCreateDocumentAndGetEditLinkQuery();\r\n const [publishItem] = useLazyPublishItemQuery();\r\n const [getItemVersions] = useLazyGetItemVersionsQuery();\r\n const [deleteVersionByLabel] = useLazyDeleteVersionByLabelQuery();\r\n\r\n const [isBusy, setIsBusy] = React.useState(false);\r\n const [showSelectVersion, setShowSelectVersion] = React.useState(false);\r\n const [replacementFileView, setReplacementFileView] = React.useState();\r\n const [selectedOutlookFileViews, setSelectedOutlookFileViews] = React.useState([]);\r\n const [versionProps, setVersionProps] = React.useState();\r\n const [checkinType, setCheckinType] = React.useState();\r\n const [replacementFile, setReplacementFile] = React.useState();\r\n const [selectedItem, setSelectedItem] = React.useState();\r\n const [sectionStyle, setSectionStyle] = React.useState();\r\n const [selectedContentTypeId, setSelectedContentTypeId] = useState(selectedItem?.contenttypeid ?? selectedItem?.ContentTypeId);\r\n const [showMoreIsClicked, setShowMore] = React.useState(false);\r\n const [showMessageBar, setShowMessageBar] = React.useState(true);\r\n const [currentSharepointFolderInfo, setCurrentSharepointFolderInfo] = React.useState(currentSharepointFolder);\r\n const [isCurrentDirectorySPList, setIsCurrentDirectorySPList] = React.useState(false);\r\n const [showSaveSuccessIndicator, setShowSaveSuccessIndicator] = React.useState(false);\r\n const [showConfirmPublishDialog, setShowConfirmPublishDialog] = React.useState(false);\r\n const [showCheckinDialog, setShowCheckinDialog] = React.useState(false);\r\n const [updateRequest, setUpdateRequest] = React.useState();\r\n const [currentMinorVersion, setCurrentMinorVersion] = React.useState();\r\n const [fileUpdated, setFileUpdated] = React.useState(\"\");\r\n const [requiredMetadataValueChanged, setRequiredMetadataValueChanged] = React.useState(false);\r\n const [permissionsLoaded, setPermissionsLoaded] = React.useState(false);\r\n const [isUpdateItemError, setIsUpdateItemError] = React.useState(false);\r\n const userPermissionsRef = React.useRef(currentSharepointFolder?.userPermissions);\r\n\r\n const { inputValuesToSave, itemWebUrl, itemSharepointListId, fieldsLoaded, updateSharepointMetadataToSave, mapColumnsToSaveFields, mapColumnsToSaveFieldsOneDrive, extention, validateName, setFieldsLoaded, checkIfInOneDrive, setInputValuesToSave } = useMetaDataFormInputs(item, selectedDocumentLibrary, infoPanelMode, webAddinItem, selectedTemplate);\r\n\r\n const isInOneDrive = React.useRef(checkIfInOneDrive());\r\n const isCurrentOfficeFile = React.useRef(false);\r\n\r\n const removeMessage = React.useCallback(() => setShowMessageBar(false), []);\r\n\r\n React.useEffect(() => {\r\n if (workingDirectories && workingDirectories.some(x => x.type === ComponentTypes.SharePointList)) {\r\n setIsCurrentDirectorySPList(true);\r\n }\r\n }, [workingDirectories])\r\n\r\n React.useEffect(() => {\r\n generalModule.setIsFileInfoPanelOpen(true);\r\n if (item) {\r\n setSelectedItem(item);\r\n } else if (webAddinItem) {\r\n (async () => {\r\n try {\r\n let currentFileUniqueId: string = webAddinItem.sharepointIds?.listItemUniqueId;\r\n if (currentFileUniqueId) {\r\n CacheHelper.set(DocubirdCache.currentFileUniqueId, currentFileUniqueId);\r\n let officeFileUniqueId: string = CacheHelper.get(DocubirdCache.officeFileUniqueId);\r\n if (officeFileUniqueId && currentFileUniqueId === officeFileUniqueId) {\r\n isCurrentOfficeFile.current = true;\r\n }\r\n\r\n const file = await getItemByUniqueId({\r\n siteUrl: webAddinItem.sharepointIds?.siteUrl,\r\n sharePointListId: webAddinItem.sharepointIds?.listId,\r\n uniqueId: currentFileUniqueId,\r\n accessToken: isInOneDrive?.current ? await authModule.getOneDriveAccessToken() : await authModule.getSharePointAccessToken(),\r\n }).unwrap();\r\n\r\n setSelectedItem({ ...file, name: webAddinItem.name });\r\n }\r\n } catch (error) {\r\n logger(error, \"CMFileInfoPanel.tsx (getItemByUniqueId - init)\");\r\n }\r\n })();\r\n }\r\n }, [item, webAddinItem]);\r\n\r\n React.useEffect(() => {\r\n if (isUpdateItemError) {\r\n generateToastError([languageStrings.ErrorMessageGeneric]);\r\n }\r\n }, [isUpdateItemError]);\r\n\r\n React.useEffect(() => {\r\n (async () => {\r\n try {\r\n const accessToken = isInOneDrive.current ? await authModule.getOneDriveAccessToken() : await authModule.getSharePointAccessToken();\r\n\r\n let webUrl: string;\r\n let listId: string;\r\n let uniqueId: string;\r\n let userItemPermissions: currentSharepointFolderUserPermissions = userPermissions;\r\n\r\n if (webAddinItem) {\r\n webUrl = webAddinItem.sharepointIds?.siteUrl;\r\n listId = webAddinItem.sharepointIds?.listId;\r\n uniqueId = webAddinItem.sharepointIds?.listItemUniqueId;\r\n }\r\n else if (selectedDocumentLibrary) {\r\n webUrl = selectedDocumentLibrary.webUrl;\r\n listId = selectedDocumentLibrary.sharePointListId;\r\n uniqueId = item.uniqueid;\r\n }\r\n else {\r\n webUrl = currentDirectory?.webUrl;\r\n listId = currentDirectory?.sharePointListId;\r\n uniqueId = item?.UniqueId?.replace(\"{\", \"\").replace(\"}\", \"\");\r\n\r\n if (item?.PermMask) {\r\n userItemPermissions = getUserEffectivePermissionsFromMask(item.PermMask);\r\n }\r\n }\r\n\r\n const refreshSettings = !currentSharepointFolder?.sharepointListId || currentSharepointFolder?.sharepointListId !== listId;\r\n const refreshPermissions = !userItemPermissions && uniqueId;\r\n\r\n if (webUrl && listId) {\r\n const [settings, permissions] = await Promise.all([\r\n refreshSettings && getListSettings(accessToken, webUrl, listId),\r\n refreshPermissions && getUserEffectivePermissions(accessToken, webUrl, listId, uniqueId)\r\n ]);\r\n\r\n setCurrentSharepointFolderInfo({\r\n sharepointListId: listId,\r\n canView: false,\r\n canCreateFolder: refreshSettings && settings ? settings.EnableFolderCreation : currentSharepointFolder?.canCreateFolder ?? false,\r\n contentTypesEnabled: refreshSettings && settings ? settings.ContentTypesEnabled : currentSharepointFolder?.contentTypesEnabled ?? false,\r\n enableMinorVersions: refreshSettings && settings ? settings.EnableMinorVersions : currentSharepointFolder?.enableMinorVersions ?? false,\r\n userPermissions: refreshPermissions ? permissions : userItemPermissions\r\n });\r\n\r\n userPermissionsRef.current = refreshPermissions ? permissions : userItemPermissions\r\n }\r\n else {\r\n setCurrentSharepointFolderInfo({ ...currentSharepointFolder });\r\n }\r\n\r\n setPermissionsLoaded(true);\r\n } catch (error) {\r\n logger(error, \"CMFileInfoPanel.tsx (getListSettings - useEffect)\");\r\n }\r\n })();\r\n }, [currentSharepointFolder, item, webAddinItem, selectedDocumentLibrary]);\r\n\r\n React.useEffect(() => {\r\n if (currentSharepointFolderInfo?.enableMinorVersions === true) {\r\n if (itemWebUrl && selectedItem) {\r\n (async () => {\r\n const fileVersionData = await getFileVersionData(\r\n isInOneDrive.current ? await authModule.getOneDriveAccessToken() : await authModule.getSharePointAccessToken(),\r\n itemWebUrl,\r\n webAddinItem ? webAddinItem.sharepointIds?.listItemUniqueId : selectedItem.uniqueid ? selectedItem.uniqueid : selectedItem.UniqueId?.replace(\"{\", \"\").replace(\"}\", \"\")\r\n );\r\n\r\n if (fileVersionData) {\r\n setVersionProps({\r\n multipleFilesSelected: false,\r\n level: fileVersionData.Level,\r\n majorVersion: fileVersionData.MajorVersion,\r\n minorVersion: fileVersionData.MinorVersion\r\n });\r\n }\r\n })();\r\n }\r\n else if (selectedTemplate?.datasource?.type?.id === DatasourceTypeEnum.SharePointDocumentTemplate) {\r\n setVersionProps({\r\n multipleFilesSelected: true,\r\n level: 2,\r\n majorVersion: 0,\r\n minorVersion: 0\r\n });\r\n }\r\n }\r\n }, [currentSharepointFolderInfo?.enableMinorVersions, itemWebUrl, selectedItem, fileUpdated, selectedTemplate]);\r\n\r\n React.useEffect(() => {\r\n if (minVersionLimit > 0 && versionProps) {\r\n setCurrentMinorVersion(versionProps.minorVersion ?? 0);\r\n }\r\n }, [minVersionLimit, versionProps]);\r\n\r\n React.useEffect(() => {\r\n if (files?.length > 0 && selectedItem) {\r\n const selectedFileExtention = getFileExtension()?.trim().toLowerCase();\r\n setSelectedOutlookFileViews(files.filter(x => x.extension?.trim().toLowerCase() === selectedFileExtention).map((file, index) => {\r\n return (
\r\n \r\n
)\r\n }));\r\n }\r\n }, [files, selectedItem]);\r\n\r\n React.useEffect(() => {\r\n if (replacementFile) {\r\n setReplacementFileView(\r\n setReplacementFile(null)}\r\n />\r\n );\r\n }\r\n }, [replacementFile]);\r\n\r\n React.useEffect(() => {\r\n const itemHeight = isMobile() ? mobileListItemStyle.height : 40;\r\n let containerHeight = itemHeight * selectedOutlookFileViews?.length;\r\n\r\n if (!showMoreIsClicked) {\r\n containerHeight = selectedOutlookFileViews?.length > minItems ? itemHeight * minItems : itemHeight * selectedOutlookFileViews?.length;\r\n }\r\n\r\n setSectionStyle(\r\n mergeStyles({\r\n maxHeight: containerHeight,\r\n overflow: \"hidden\",\r\n transition: \"max-height 0.5s ease-in-out\"\r\n })\r\n );\r\n }, [showMoreIsClicked, selectedOutlookFileViews]);\r\n\r\n React.useEffect(() => {\r\n let timeOutId: NodeJS.Timeout;\r\n if (showSaveSuccessIndicator) {\r\n timeOutId = setTimeout(() => {\r\n setShowSaveSuccessIndicator(false);\r\n }, 800);\r\n }\r\n return () => {\r\n if (timeOutId) {\r\n clearTimeout(timeOutId);\r\n }\r\n }\r\n }, [showSaveSuccessIndicator, setShowSaveSuccessIndicator]);\r\n\r\n React.useEffect(() => {\r\n let hasChanged = false;\r\n\r\n if (requiredMetadataOnPublish && inputValuesToSave) {\r\n const requiredMetaFieldsInternalNames: string[] = requiredMetadataOnPublish.split(\",\");\r\n for (let index = 0; index < inputValuesToSave.length; index++) {\r\n const inputValue = inputValuesToSave[index];\r\n if (inputValue?.displayName && requiredMetaFieldsInternalNames.some(x => x.toLowerCase() === inputValue.displayName.toLowerCase())) {\r\n const originalValue = CacheHelper.get(inputValue.internalName);\r\n\r\n let newValue: any;\r\n if (inputValue.type === \"TaxonomyFieldType\") {\r\n newValue = Array.isArray(inputValue.value?.terms)\r\n ? inputValue.value.terms.map(x => x.label).join(\",\")\r\n : Array.isArray(inputValue.value)\r\n ? inputValue.value.join(\",\")\r\n : null;\r\n }\r\n else if (inputValue.type === \"TaxonomyFieldTypeMulti\") {\r\n newValue = Array.isArray(inputValue.value?.terms)\r\n ? inputValue.value.terms.map(x => x.label).join(\",\")\r\n : Array.isArray(inputValue.value)\r\n ? inputValue.value?.map(x => x.Label).join(\",\")\r\n : null;\r\n }\r\n else {\r\n newValue = inputValue.value;\r\n }\r\n\r\n if (originalValue !== (newValue ? JSON.stringify(newValue.toString()) : \"\")) {\r\n hasChanged = true;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n setRequiredMetadataValueChanged(hasChanged);\r\n }, [inputValuesToSave, requiredMetadataOnPublish]);\r\n\r\n const outlookItemSelected = (item: IFileToUpload) => {\r\n setReplacementFile(item);\r\n }\r\n\r\n const sharepointDataIsValid = async (forceNameCheck: boolean = false) => {\r\n const inputValues = [...inputValuesToSave];\r\n\r\n if (forceNameCheck\r\n || (infoPanelMode !== InfoPanelMode.Replace && (infoPanelMode !== InfoPanelMode.NewTemplate || !tenantReplaceFileNameWithGUID))) {\r\n const nameField = inputValues.find(x => x.internalName === sharePointInternalFileName);\r\n if (nameField) await validateName(nameField, selectedItem, forceNameCheck);\r\n }\r\n\r\n const itemsWithErrors = inputValues.filter(item => item.hasError === true).map(item => item.errorMessage ? `${item.displayName} - ${item.errorMessage}` : item.displayName);\r\n\r\n if (itemsWithErrors.length > 0) {\r\n generateToastError(itemsWithErrors);\r\n }\r\n\r\n return itemsWithErrors.length === 0;\r\n };\r\n\r\n const generateToastError = (items: string[]) => {\r\n customToast.error(\r\n
\r\n {languageStrings.MetadataValidationFailed}
\r\n {generateErrors(items)}\r\n
\r\n );\r\n };\r\n\r\n const generateErrors = (items: string[]) => {\r\n return items.map((item, index) => {\r\n return (\r\n \r\n • {item}
\r\n
\r\n );\r\n });\r\n };\r\n\r\n const saveMetadata = async () => {\r\n setIsBusy(true);\r\n try {\r\n const isValidSharepointData = await sharepointDataIsValid();\r\n if (isValidSharepointData) {\r\n const contentTypeMeta: MetadataDto = {\r\n type: \"Content\",\r\n internalName: internalSharepointName.contentTypeId,\r\n value: selectedContentTypeId\r\n }\r\n\r\n let request: MetadataUpdateRequest = {\r\n accessToken: isInOneDrive.current ? await authModule.getOneDriveAccessToken() : await authModule.getSharePointAccessToken(),\r\n siteUrl: isInOneDrive.current ? oneDriveRootDetails.sharePointSiteUrl : itemWebUrl,\r\n listId: itemSharepointListId,\r\n listItemUniqueId: webAddinItem ? webAddinItem?.sharepointIds?.listItemUniqueId : selectedItem?.uniqueid ?? selectedItem?.UniqueId?.replace('{', '').replace('}', ''),\r\n isFolder: selectedItem?.contenttypeid ? selectedItem?.contenttypeid?.startsWith(SharePointFolderContentTypeIds.folder) : selectedItem?.ContentTypeId?.startsWith(SharePointFolderContentTypeIds.folder),\r\n isListItem: isCurrentDirectorySPList ? true : false,\r\n listSettings: {\r\n enableMinorVersions: currentSharepointFolderInfo?.enableMinorVersions === true,\r\n },\r\n metadata: inputValuesToSave.map(input => {\r\n const meta: MetadataDto = {\r\n type: input.type,\r\n internalName: input.internalName,\r\n value: !(input?.value === 0) && (!input?.value || (Array.isArray(input?.value) && !input?.value?.length)) ? undefined : input.value\r\n }\r\n return meta;\r\n })\r\n }\r\n\r\n request.metadata.unshift(contentTypeMeta);\r\n\r\n let isNormalUpdate = true;\r\n if (currentMinorVersion >= (minVersionLimit - 1) && !requiredMetadataValueChanged) {\r\n isNormalUpdate = false;\r\n setShowConfirmPublishDialog(true);\r\n setUpdateRequest(request);\r\n }\r\n\r\n if (isNormalUpdate) {\r\n try {\r\n setIsUpdateItemError(false);\r\n await updateOfficeXML();\r\n await apiUpdateItemMetadata(request);\r\n\r\n //one of the required meta fields' values changed\r\n //publish & then delete minor versions if applicable\r\n if (requiredMetadataValueChanged) {\r\n const uniqueId = webAddinItem ? webAddinItem.UniqueId ? webAddinItem.UniqueId : webAddinItem.sharepointIds.listItemUniqueId : item.UniqueId.replace(\"{\", \"\").replace(\"}\", \"\");\r\n try {\r\n await publishItem({\r\n siteUrl: isInOneDrive.current ? oneDriveRootDetails?.sharePointSiteUrl : currentDirectory?.webUrl,\r\n uniqueId,\r\n accessToken: isInOneDrive.current ? await authModule.getOneDriveAccessToken() : await authModule.getSharePointAccessToken(),\r\n comment: \"\"\r\n }).unwrap();\r\n\r\n } catch (error) {\r\n logger(error, \"CMCFileInfoModal.tsx (onConfirmCheckin - publish)\");\r\n }\r\n\r\n if (autoDeleteMinorVersionsOnPublish) {\r\n try {\r\n const itemVersions = await getItemVersions({\r\n siteUrl: currentDirectory?.webUrl,\r\n uniqueId,\r\n accessToken: await authModule.getSharePointAccessToken(),\r\n }).unwrap();\r\n\r\n const versions = itemVersions.d?.results;\r\n\r\n if (versions && versions.length > 0) {\r\n await Promise.all(versions.map(async version => {\r\n if (!version.IsCurrentVersion && version.ID % 512 > 0) {\r\n deleteVersionByLabel({\r\n siteUrl: isInOneDrive.current ? oneDriveRootDetails?.sharePointSiteUrl : currentDirectory?.webUrl,\r\n uniqueId,\r\n accessToken: await authModule.getSharePointAccessToken(),\r\n versionLabel: version.VersionLabel\r\n }).unwrap();\r\n }\r\n }));\r\n }\r\n } catch (error) {\r\n logger(error, \"CMCheckinMoadal.tsx (autoDeleteMinorVersionsOnPublish)\");\r\n }\r\n }\r\n }\r\n\r\n if (keepOpenOnSave) {\r\n setShowSaveSuccessIndicator(true);\r\n setFileUpdated(Date.now().toString());\r\n }\r\n else {\r\n generalModule.setIsFileInfoPanelOpen(false);\r\n closeOnSuccess(selectedItem, inputValuesToSave, selectedContentTypeId, extention);\r\n }\r\n } catch (error) {\r\n logger(error, \"CMFileInfoPanel.tsx (updateItemMetadata)\");\r\n setIsBusy(false);\r\n setIsUpdateItemError(true);\r\n }\r\n }\r\n }\r\n } catch (error) {\r\n logger(error, \"CMFileInfoPanel.tsx (saveMetadata)\");\r\n }\r\n setIsBusy(false);\r\n }\r\n\r\n const updateOfficeXML = async () => {\r\n try {\r\n // if (!generalModule.isInConentMangerMode() && mode === ModeEnum.office) {\r\n // if (Office.context.requirements.isSetSupported(\"WordApi\", \"1.1\") && Office.context.document?.customXmlParts?.getByNamespaceAsync) {\r\n // await updateWordXML(updatedInputValues);\r\n // }\r\n // else if (Office.context.requirements.isSetSupported(\"ExcelApi\", \"1.11\")) {\r\n // await updateExcelXML(updatedInputValues);\r\n // }\r\n // setInputValuesToSave(updatedInputValues);\r\n // await new Promise(res => setTimeout(res, 2000));\r\n // }\r\n if (!generalModule.isInConentMangerMode() && mode === ModeEnum.office) {\r\n if (Office.context.requirements.isSetSupported(\"WordApi\", \"1.1\")) {\r\n await Word.run(async (context) => {\r\n context.document.save();\r\n await context.sync();\r\n });\r\n }\r\n else if (Office.context.requirements.isSetSupported(\"ExcelApi\", \"1.11\")) {\r\n await Excel.run(async (context) => {\r\n if (context?.workbook) {\r\n context.workbook.save(Excel.SaveBehavior.save);\r\n await context.sync();\r\n }\r\n });\r\n }\r\n // setInputValuesToSave(updatedInputValues);\r\n await new Promise(res => setTimeout(res, 1000));\r\n }\r\n } catch (error) {\r\n logger(error, \"CMFileInfoPanel.tsx (updateOfficeXML)\");\r\n }\r\n }\r\n\r\n const createNewNemplate = async () => {\r\n setIsBusy(true);\r\n try {\r\n const isValidSharepointData = await sharepointDataIsValid(true);\r\n\r\n if (isValidSharepointData) {\r\n let siteUrl: string = isInOneDrive.current ? oneDriveRootDetails?.sharePointSiteUrl : currentDirectory?.webUrl;\r\n let filename: string;\r\n if (tenantReplaceFileNameWithGUID) {\r\n const retryLimit: number = 10;\r\n let attempt: number = 0;\r\n do {\r\n filename = `${dayjs.utc().format('YYMM-SSS')}${dayjs.utc().format('SSS').charAt(0)}`;\r\n\r\n let destinationUrl: string;\r\n if (isInOneDrive.current) {\r\n destinationUrl = `${currentDirectory?.webUrl}${currentDirectory.directory ? `${currentDirectory.directory}` : ''}`\r\n } else if (currentDirectory?.isTeamsRootFolder && !currentDirectory.parentId) {\r\n destinationUrl = await getDriveRootWebUrl(currentDirectory.id);\r\n } else {\r\n destinationUrl = `${siteUrl}${currentDirectory.directory ? `/${currentDirectory.directory}` : ''}`;\r\n }\r\n\r\n const fileRequest: FilePreCommitRequest = {\r\n accessToken: isInOneDrive.current ? await authModule.getOneDriveAccessToken() : await authModule.getSharePointAccessToken(),\r\n destinationUrl,\r\n siteUrl,\r\n fileName: `${filename}.${selectedTemplate.extention}`,\r\n autoFolderCreation: false\r\n }\r\n\r\n const preCommitResult: IFilePreCommitResult = await getFilePreCommitInfo(fileRequest);\r\n if (!preCommitResult || preCommitResult.exists === false) {\r\n break;\r\n }\r\n } while (++attempt < retryLimit);\r\n }\r\n else {\r\n filename = inputValuesToSave.find(x => x.internalName === sharePointInternalFileName)?.value;\r\n }\r\n\r\n let newFileId: any;\r\n let editLink: string;\r\n\r\n if (selectedTemplate?.datasource?.type?.id === DatasourceTypeEnum.SharePointDocumentTemplate) {\r\n\r\n if (currentSharepointFolderInfo?.enableMinorVersions === true && showSelectVersion === false) {\r\n setShowSelectVersion(true);\r\n setIsBusy(false);\r\n return;\r\n }\r\n\r\n const driveId: string = !isInOneDrive.current ? (!currentDirectory.parentId ? currentDirectory.id : currentDirectory.parentId) : oneDriveRootDetails.driveId;\r\n const itemId: string = !currentDirectory?.parentId ? null : currentDirectory?.id;\r\n const destSharePointIds = await getContainerSharePointIds(driveId, itemId);\r\n if (destSharePointIds) {\r\n const destSiteUrl: string = destSharePointIds.siteUrl;\r\n const destListId: string = destSharePointIds.listId;\r\n const destFolderUniqueId: string = destSharePointIds.listItemUniqueId;\r\n const templateSiteUrl: string = selectedTemplate.datasource.url;\r\n const templateUniqueId: string = selectedTemplate.templateId;\r\n const teamId: string = workingDirectories?.find(dir => dir.teamGroupId)?.teamGroupId;\r\n const channelId: string = workingDirectories?.find(dir => dir.teamChannelId)?.teamChannelId;\r\n\r\n const createDocumentFromTemplateRequest: CreateDocumentFromTemplateRequest = {\r\n destAccessToken: isInOneDrive.current ? await authModule.getOneDriveAccessToken() : await authModule.getSharePointAccessToken(),\r\n templateAccessToken: await authModule.getSharePointAccessToken(),\r\n tenantGuid: userAccount?.tenantId,\r\n destSiteUrl,\r\n destListId,\r\n destFolderUniqueId,\r\n templateSiteUrl,\r\n templateUniqueId,\r\n teamId,\r\n channelId,\r\n fileName: filename,\r\n checkinType: currentSharepointFolderInfo?.enableMinorVersions === true ? (checkinType ? checkinType : CheckinTypes.minorCheckIn) : undefined,\r\n metadata: inputValuesToSave\r\n .filter(x => x.internalName !== sharePointInternalFileName)\r\n .map(input => {\r\n const meta: MetadataDto = {\r\n type: input.type,\r\n internalName: input.internalName,\r\n displayName: input.displayName,\r\n value: !(input?.value === 0) && (!input?.value || (Array.isArray(input?.value) && !input?.value?.length)) ? undefined : input.value\r\n }\r\n return meta;\r\n })\r\n };\r\n\r\n const createdDocumentRes = await apiFileCreateDocumentFromTemplate(createDocumentFromTemplateRequest);\r\n newFileId = createdDocumentRes?.value;\r\n if (newFileId && tenantOpenDocumentsInClientApp) {\r\n try {\r\n const absUrl = await getItemAbsoluteUrl(isInOneDrive?.current ? await authModule.getOneDriveAccessToken() : await authModule.getSharePointAccessToken(), siteUrl, itemSharepointListId, newFileId);\r\n if (absUrl) {\r\n const fileInfo = SearchOpenExtensionHelper.determineOfficeFileType(selectedTemplate.extention);\r\n if (fileInfo?.localUrlPrepended) {\r\n editLink = `${fileInfo.localUrlPrepended}${absUrl}`;\r\n }\r\n }\r\n } catch (error) {\r\n logger(error, \"CMFileInfoPanel.tsx (getItemAbsoluteUrl)\");\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n const results = await createDocumentAndGetEditLink({\r\n siteUrl,\r\n accessToken: isInOneDrive.current ? await authModule.getOneDriveAccessToken() : await authModule.getSharePointAccessToken(),\r\n sharePointListId: currentSharepointFolderInfo?.sharepointListId,\r\n folderPath: tryEncodeUriComponent(folderPath)?.replaceAll(\"'\", \"''\"),\r\n template: selectedTemplate,\r\n filename: tryEncodeUriComponent(filename)?.replaceAll(\"'\", \"''\")\r\n }).unwrap();\r\n\r\n editLink = results.value;\r\n newFileId = results.value?.split('sourcedoc={')[1].split('}')[0];\r\n\r\n const contentTypeMeta: MetadataDto = {\r\n type: \"Content\",\r\n internalName: internalSharepointName.contentTypeId,\r\n value: selectedContentTypeId\r\n }\r\n\r\n const metadataUpdateRequest: MetadataUpdateRequest = {\r\n accessToken: isInOneDrive.current ? await authModule.getOneDriveAccessToken() : await authModule.getSharePointAccessToken(),\r\n siteUrl: isInOneDrive.current ? oneDriveRootDetails.sharePointSiteUrl : itemWebUrl,\r\n listId: itemSharepointListId,\r\n listItemUniqueId: newFileId,\r\n isFolder: selectedItem?.contenttypeid ? selectedItem?.contenttypeid?.startsWith(SharePointFolderContentTypeIds.folder) : selectedItem?.ContentTypeId?.startsWith(SharePointFolderContentTypeIds.folder),\r\n isListItem: false,\r\n listSettings: {\r\n enableMinorVersions: currentSharepointFolderInfo?.enableMinorVersions === true,\r\n },\r\n metadata: inputValuesToSave\r\n .filter(x => x.internalName !== sharePointInternalFileName)\r\n .map(input => {\r\n const meta: MetadataDto = {\r\n type: input.type,\r\n internalName: input.internalName,\r\n value: !(input?.value === 0) && (!input?.value || (Array.isArray(input?.value) && !input?.value?.length)) ? undefined : input.value\r\n }\r\n return meta;\r\n })\r\n };\r\n\r\n if (selectedTemplate.extention === 'onetoc') {\r\n metadataUpdateRequest.isFolder = true;\r\n }\r\n\r\n metadataUpdateRequest.metadata.unshift(contentTypeMeta);\r\n\r\n // Ancorus tenant workaround to auto set a specific metadata value until alternative has been found \r\n if (tenantReplaceFileNameWithGUID && siteUrl.toLowerCase().startsWith(\"https://ancorus\")) {\r\n metadataUpdateRequest.metadata.push({\r\n type: \"Text\",\r\n internalName: \"DO_Nummer\",\r\n value: filename\r\n });\r\n }\r\n\r\n await updateOfficeXML();\r\n\r\n await Promise.all([\r\n (async () => {\r\n try {\r\n setIsUpdateItemError(false);\r\n await apiUpdateItemMetadata(metadataUpdateRequest);\r\n } catch (error) {\r\n logger(error, \"CMFileInfoPanel.tsx (createNewNemplate(updateItemMetadata))\");\r\n setIsUpdateItemError(true);\r\n }\r\n })(),\r\n (async () => {\r\n if (tenantOpenDocumentsInClientApp) {\r\n try {\r\n const absUrl = await getItemAbsoluteUrl(isInOneDrive?.current ? await authModule.getOneDriveAccessToken() : await authModule.getSharePointAccessToken(), siteUrl, itemSharepointListId, newFileId);\r\n if (absUrl) {\r\n const fileInfo = SearchOpenExtensionHelper.determineOfficeFileType(selectedTemplate.extention);\r\n if (fileInfo?.localUrlPrepended) {\r\n editLink = `${fileInfo.localUrlPrepended}${absUrl}`;\r\n }\r\n }\r\n } catch (error) {\r\n logger(error, \"CMFileInfoPanel.tsx (getItemAbsoluteUrl)\");\r\n }\r\n }\r\n })()\r\n ]);\r\n }\r\n\r\n setIsBusy(false);\r\n if (editLink) window.open(editLink);\r\n generalModule.setIsFileInfoPanelOpen(false);\r\n closeOnSuccess(selectedItem, inputValuesToSave, selectedContentTypeId, extention);\r\n }\r\n } catch (error) {\r\n logger(error, \"CMFileInfoPanel.tsx (createNewNemplate)\");\r\n }\r\n setIsBusy(false);\r\n }\r\n\r\n const getHeaderFileIcon = () => {\r\n if (selectedItem?.FSObjType === '0' && isCurrentDirectorySPList) {\r\n return \r\n }\r\n\r\n if ((selectedItem?.FSObjType === '0' || selectedItem?.FileSystemObjectType === 0 || (selectedItem?.contenttypeid && !selectedItem?.contenttypeid.startsWith(SharePointFolderContentTypeIds.folder)))) {\r\n return \r\n }\r\n\r\n if ((selectedItem?.FSObjType === '1' || selectedItem?.FileSystemObjectType === 1 || selectedItem?.contenttypeid?.startsWith(SharePointFolderContentTypeIds.folder))) {\r\n return \r\n }\r\n\r\n if (selectedTemplate) {\r\n return \r\n }\r\n\r\n // Advanced search item\r\n if ((selectedItem as any)?.contenttypeid && item?.name) {\r\n if (!item[\"contenttypeid\"].startsWith(SharePointFolderContentTypeIds.folder)) {\r\n let extension: string;\r\n const fileParts = item.name?.split('.');\r\n if (fileParts?.length > 0) {\r\n extension = fileParts[fileParts.length - 1];\r\n }\r\n\r\n return \r\n }\r\n else {\r\n return \r\n }\r\n }\r\n\r\n // Advanced search recent item\r\n if ((selectedItem as any)?.sizetext) {\r\n if ((selectedItem as any)?.isdocument) {\r\n let extension: string;\r\n const fileParts = item.name?.split('.');\r\n if (fileParts?.length > 0) {\r\n extension = fileParts[fileParts.length - 1];\r\n }\r\n\r\n return \r\n }\r\n else {\r\n return \r\n }\r\n }\r\n\r\n return ;\r\n }\r\n\r\n const getHeaderText = () => {\r\n if (selectedItem) {\r\n if (selectedItem.FSObjType === \"1\") {\r\n return selectedItem.FileLeafRef ?? selectedItem.Title;\r\n }\r\n else if (isCurrentDirectorySPList) {\r\n return selectedItem.Title;\r\n }\r\n else {\r\n return selectedItem?.name ?? selectedItem?.FileLeafRef;\r\n }\r\n }\r\n else if (selectedTemplate) {\r\n return `${languageStrings.New} ${selectedTemplate.title}`;\r\n }\r\n return \"\";\r\n }\r\n\r\n const onRenderNavigationContent: IRenderFunction = React.useCallback(\r\n (props, defaultRender) => (\r\n <>\r\n \r\n \r\n {getHeaderFileIcon()}\r\n \r\n \r\n \r\n \r\n \r\n
\r\n {defaultRender!(props)}\r\n
\r\n \r\n ),\r\n [selectedItem, currentDirectory],\r\n );\r\n\r\n const getFileExtension = () => {\r\n if (selectedItem?.name) {\r\n const fileParts = selectedItem.name?.split('.');\r\n if (fileParts?.length > 0) {\r\n return fileParts[fileParts.length - 1];\r\n }\r\n }\r\n\r\n return selectedItem?.File_x0020_Type;\r\n };\r\n\r\n const fieldsChanged = (fields: any[], contentTypeId: string, inputValues?: SharePointInputData[]) => {\r\n if (isInOneDrive.current) {\r\n mapColumnsToSaveFieldsOneDrive();\r\n } else {\r\n mapColumnsToSaveFields(fields, inputValues);\r\n }\r\n\r\n if (contentTypeId) {\r\n setSelectedContentTypeId(contentTypeId);\r\n }\r\n }\r\n\r\n const onUploadComplete = (fails: number, successes: number, total: number) => {\r\n }\r\n\r\n const onUploadClear = () => {\r\n // Ignore due to Syncfusion component calling Clear on unmount\r\n }\r\n\r\n const onFileUploaded = (uploadedFile: IFileToUpload) => {\r\n setReplacementFile(uploadedFile);\r\n }\r\n\r\n const onReplaceFile = async () => {\r\n if (currentSharepointFolderInfo?.enableMinorVersions === true && showSelectVersion === false && replacementFile?.extension === selectedItem.File_x0020_Type) {\r\n setShowSelectVersion(true);\r\n }\r\n else {\r\n\r\n setIsBusy(true);\r\n\r\n const isValidSharepointData = await sharepointDataIsValid();\r\n if (isValidSharepointData) {\r\n try {\r\n let request: ReplaceFileRequest = {\r\n accessToken: isInOneDrive.current ? await authModule.getOneDriveAccessToken() : await authModule.getSharePointAccessToken(),\r\n accountId: userAccount?.uniqueId ?? (await authModule.getAccount(false))?.uniqueId,\r\n siteUrl: isInOneDrive.current ? oneDriveRootDetails.sharePointSiteUrl : itemWebUrl,\r\n listId: itemSharepointListId,\r\n fileUniqueId: webAddinItem ? webAddinItem.sharepointIds.listItemUniqueId : selectedItem.uniqueid ?? selectedItem.UniqueId.replace('{', '').replace('}', ''),\r\n fileName: `${replacementFile?.name}.${replacementFile?.extension}`,\r\n checkinType: currentSharepointFolderInfo?.enableMinorVersions === true ? (checkinType ? checkinType : CheckinTypes.minorCheckIn) : undefined,\r\n metadata: inputValuesToSave.map(input => {\r\n const meta: MetadataDto = {\r\n type: input.type,\r\n internalName: input.internalName,\r\n value: !(input?.value === 0) && (!input?.value || (Array.isArray(input?.value) && !input?.value?.length)) ? undefined : input.value\r\n }\r\n return meta;\r\n })\r\n }\r\n\r\n if (!generalModule.isInConentMangerMode()) {\r\n if (mode === ModeEnum.office) {\r\n const officeFile = !replacementFile.originalName && replacementFile;\r\n if (officeFile) {\r\n let base64Content: string = await FileService.GetFileContent();\r\n if (base64Content) {\r\n request.officeFile = { ContentBase64: base64Content, name: officeFile.name, extension: officeFile.extension, id: officeFile.id, isDuplicate: officeFile.isDuplicate === true };\r\n }\r\n }\r\n }\r\n else {\r\n const itemId = mode !== ModeEnum.mailSend ? Office?.context?.mailbox?.item?.itemId : null;\r\n if (itemId) {\r\n const outlookRestInfo: IOutlookRestDto = {\r\n url: await OutlookUtils.getRestURL(),\r\n outlookToken: await OutlookUtils.getOutlookToken(),\r\n ewsUrl: OutlookUtils.getEWSURL(),\r\n ewsToken: await OutlookUtils.getEWSToken(),\r\n ewsMailItemId: OutlookService.getItemEWSId(Office.context.mailbox?.item?.itemId)\r\n };\r\n const emailItemId: string = OutlookService.getItemRestId(Office.context.mailbox?.item?.itemId);\r\n request.outlookRestInfo = outlookRestInfo;\r\n request.emailItemId = emailItemId;\r\n request.attachmentFile = replacementFile;\r\n }\r\n }\r\n }\r\n\r\n const contentTypeMeta: MetadataDto = {\r\n type: \"Content\",\r\n internalName: internalSharepointName.contentTypeId,\r\n value: selectedContentTypeId\r\n }\r\n request.metadata.push(contentTypeMeta);\r\n\r\n await updateOfficeXML();\r\n await apiFileReplace(request);\r\n generalModule.setIsFileInfoPanelOpen(false);\r\n closeOnSuccess(selectedItem, inputValuesToSave, selectedContentTypeId, extention, replacementFile);\r\n } catch (error) {\r\n logger(error, \"CMFileInfoPanel.tsx (onReplaceFile)\");\r\n }\r\n }\r\n\r\n setIsBusy(false);\r\n }\r\n }\r\n\r\n const onPanelCLose = () => {\r\n if (generalModule.isInConentMangerMode()) {\r\n dispatch(resetFiles([]));\r\n }\r\n generalModule.setIsFileInfoPanelOpen(false);\r\n closePanel();\r\n }\r\n\r\n const checkinTypeChanged = (checkinType: CheckinTypes) => {\r\n setCheckinType(checkinType);\r\n }\r\n\r\n const saveButtonText: string = React.useMemo(() => {\r\n if (isBusy || showSaveSuccessIndicator) {\r\n return languageStrings.SaveInProgress;\r\n }\r\n else if (infoPanelMode === InfoPanelMode.NewTemplate) {\r\n return languageStrings.Create;\r\n }\r\n else if (infoPanelMode !== InfoPanelMode.Replace && (requiredMetadataValueChanged || (currentMinorVersion >= (minVersionLimit - 1)))) {\r\n return languageStrings.Publish;\r\n }\r\n return infoPanelMode !== InfoPanelMode.Replace\r\n ? languageStrings.SaveProperties\r\n : languageStrings.Save;\r\n\r\n }, [isBusy, showSaveSuccessIndicator, infoPanelMode, requiredMetadataValueChanged, currentMinorVersion, minVersionLimit]);\r\n\r\n return (\r\n onPanelCLose()}\r\n onRenderNavigationContent={onRenderNavigationContent}\r\n isLightDismiss\r\n closeButtonAriaLabel=\"Close\"\r\n type={PanelType.custom}\r\n customWidth={!generalModule.isInConentMangerMode() ? \"300px\" : \"350px\"}\r\n styles={panelStyles}\r\n >\r\n <>\r\n
\r\n \r\n
\r\n {showSelectVersion && versionProps && \r\n \r\n }\r\n {!showSelectVersion && \r\n {fieldsLoaded && (currentMinorVersion >= (minVersionLimit - 1) && !requiredMetadataValueChanged) && \r\n {languageStrings.FileVersionLimitReached}\r\n }\r\n {fieldsLoaded && infoPanelMode === InfoPanelMode.Replace && !replacementFile &&\r\n
\r\n {showMessageBar &&\r\n
\r\n \r\n {languageStrings.ReplacementFileRequired} {languageStrings.ReplacementFileRequiredMessage}\r\n \r\n
}\r\n {selectedOutlookFileViews?.length > 0 &&
\r\n \r\n
\r\n {selectedOutlookFileViews}\r\n
\r\n {selectedOutlookFileViews?.length > minItems &&\r\n setShowMore((prevShowMoreIsClicked) => !prevShowMoreIsClicked)}\r\n style={showMoreContainerStyles}\r\n >\r\n \r\n {!showMoreIsClicked ? languageStrings.ShowMore : languageStrings.ShowLess}\r\n
}\r\n
}\r\n\r\n \r\n
}\r\n {infoPanelMode === InfoPanelMode.Replace && replacementFile &&\r\n
\r\n {replacementFileView}\r\n
\r\n }\r\n {(selectedItem || selectedTemplate) && itemSharepointListId && itemWebUrl && permissionsLoaded && updateSharepointMetadataToSave(metadata, informationProtectionId)}\r\n addNameField={!isCurrentDirectorySPList && !tenantReplaceFileNameWithGUID ? true : false}\r\n disableNameField={infoPanelMode === InfoPanelMode.Replace || isCurrentOfficeFile.current === true}\r\n isCreateFromTemplate={infoPanelMode === InfoPanelMode.NewTemplate}\r\n itemContentTypeId={selectedItem?.contenttypeid ?? selectedItem?.ContentTypeId}\r\n itemWebUrl={itemWebUrl}\r\n itemSharepointListId={itemSharepointListId}\r\n fieldsChanged={fieldsChanged}\r\n fieldsLoaded={() => setFieldsLoaded(true)}\r\n userItemPermissions={userPermissionsRef.current}\r\n >}\r\n }\r\n
\r\n \r\n \r\n \r\n \r\n {\r\n if (infoPanelMode === InfoPanelMode.Update) {\r\n saveMetadata();\r\n }\r\n else if (infoPanelMode === InfoPanelMode.Replace) {\r\n onReplaceFile();\r\n }\r\n else if (infoPanelMode === InfoPanelMode.NewTemplate) {\r\n createNewNemplate();\r\n }\r\n }}\r\n text={saveButtonText}\r\n >\r\n {isBusy && }\r\n {showSaveSuccessIndicator && }\r\n \r\n \r\n \r\n \r\n {showCheckinDialog && updateRequest &&\r\n {\r\n setShowCheckinDialog(false);\r\n setIsBusy(false);\r\n }}\r\n closeOnSuccess={(updatedInputValues?: SharePointInputData[]) => {\r\n setShowCheckinDialog(false);\r\n setIsBusy(false);\r\n if (keepOpenOnSave) {\r\n if (updatedInputValues?.length > 0) setInputValuesToSave(updatedInputValues);\r\n setShowSaveSuccessIndicator(true);\r\n setFileUpdated(Date.now().toString());\r\n }\r\n else {\r\n generalModule.setIsFileInfoPanelOpen(false);\r\n closeOnSuccess(selectedItem, inputValuesToSave, selectedContentTypeId, extention);\r\n }\r\n }}\r\n selectedItems={generalModule.isInConentMangerMode() ? [item] : undefined}\r\n selectedAddInItems={!generalModule.isInConentMangerMode() ? [webAddinItem] : undefined}\r\n isInOneDrive={isInOneDrive.current}\r\n fileUpdatePublishInfo={{ request: updateRequest, originalInputValues: inputValuesToSave }}\r\n updateOfficeXML={updateOfficeXML}\r\n />}\r\n {showConfirmPublishDialog && {\r\n try {\r\n setIsBusy(true);\r\n setIsUpdateItemError(false);\r\n setShowConfirmPublishDialog(false);\r\n await updateOfficeXML();\r\n await apiUpdateItemMetadata(updateRequest);\r\n setIsBusy(false);\r\n if (keepOpenOnSave) {\r\n setShowSaveSuccessIndicator(true);\r\n setFileUpdated(Date.now().toString());\r\n }\r\n else {\r\n generalModule.setIsFileInfoPanelOpen(false);\r\n closeOnSuccess(selectedItem, inputValuesToSave, selectedContentTypeId, extention);\r\n }\r\n } catch (error) {\r\n logger(error, \"CMFileInfoPanel.tsx (confirm modal close)\");\r\n setIsBusy(false);\r\n setIsUpdateItemError(true);\r\n }\r\n\r\n }}\r\n closeText={languageStrings.No}\r\n confirmText={languageStrings.Yes}\r\n onConfirm={() => {\r\n setShowConfirmPublishDialog(false);\r\n setShowCheckinDialog(true);\r\n }}\r\n />}\r\n \r\n \r\n )\r\n};","import { ActivityItem, ChoiceGroup, DefaultButton, DirectionalHint, Dropdown, FontIcon, IActivityItemProps, IChoiceGroupOption, IDropdownOption, IPanelStyles, IPersonaProps, IPersonaSharedProps, IStackTokens, Label, mergeStyles, MessageBar, MessageBarType, Panel, PanelType, PrimaryButton, ResponsiveMode, ScrollablePane, ScrollbarVisibility, Spinner, SpinnerSize, Stack, StackItem, TextField, Toggle, TooltipHost } from \"@fluentui/react\";\r\nimport React from \"react\";\r\nimport { useSelector } from \"react-redux\";\r\nimport { getEmailTemplateHtml } from \"../../src/taskpane/components/helpers/shareFileEmailTemplateHelper\";\r\nimport { Fileview } from \"../../src/taskpane/components/_v2/components/Explorer/Fileview/Fileview\";\r\nimport { IGraphCreateShareableLinkRequest, ShareableLinkRequestScope, ShareableLinkRequestType } from \"../../src/taskpane/components/_v2/redux/api/graph/api-graph-interfaces\";\r\nimport { useLazySendMailQuery } from \"../../src/taskpane/components/_v2/redux/api/graph/api-graph-slice\";\r\nimport { useLazyGetSharingInformationQuery } from \"../../src/taskpane/components/_v2/redux/api/sharepoint/api-sharepoint-slice\";\r\nimport { RootState } from \"../../src/taskpane/components/_v2/redux/storeMain\";\r\nimport { PeopleFinder } from \"../../src/taskpane/components/_v2/_shared/PeopleFinder/PeopleFinder\";\r\nimport { ComponentTypes } from \"../../src/taskpane/config/config\";\r\nimport { createItemShareableLink, getFileItemIdFromRelativePath, getItemWebViewUrl } from \"../../src/taskpane/services/GraphService\";\r\nimport { isMobile, mobileListItemStyle } from \"../../src/taskpane/styles/mobileStyles\";\r\nimport authModule from \"../../utilities/AuthModule\";\r\nimport generalModule from \"../../utilities/GeneralModule\";\r\nimport { LanguageContext } from \"../../utilities/LocalizationModule\";\r\nimport { logger } from \"../../utilities/logger\";\r\nimport { useMailSendPopUpAuth } from \"../Hooks/useMailSendPopUpAuth\";\r\nimport { IPageSettings } from \"../../src/taskpane/interfaces/IPageSettings\";\r\nimport { FileIconType, getFileTypeIconAsUrl, IFileTypeIconOptions } from \"@fluentui/react-file-type-icons\";\r\nimport { SharePointFolderContentTypeIds } from \"../../src/taskpane/config/constants\";\r\nimport { IAuthAccount } from \"../../src/taskpane/interfaces/IAuthTokenResultDto\";\r\n\r\nconst scrollStyle = mergeStyles({\r\n position: \"relative\",\r\n height: \"calc(100vh - 160px)\",\r\n});\r\n\r\nconst stackTokens: IStackTokens = { childrenGap: 20 };\r\n\r\nconst panelStyles: Partial = {\r\n content: {\r\n paddingLeft: 15,\r\n paddingRight: 15\r\n }\r\n}\r\n\r\nexport const enum SharePanelMode {\r\n Share,\r\n Copy\r\n}\r\n\r\nconst minItems = 5;\r\n\r\nconst navigatorClipboardWriteText = (text: string): Promise => {\r\n return new Promise((resolve, reject) => {\r\n try {\r\n const textArea = document.createElement(\"textarea\");\r\n textArea.value = text;\r\n document.body.appendChild(textArea);\r\n textArea.select();\r\n document.execCommand(\"copy\");\r\n textArea.remove();\r\n resolve();\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n}\r\n\r\nexport interface ICMFileSharePanelProps {\r\n panelIsOpen: boolean;\r\n closePanel: () => void;\r\n items: any[];\r\n mode: SharePanelMode;\r\n isContainer?: boolean;\r\n hideSharingInfo?: boolean;\r\n userAccount?: IAuthAccount;\r\n}\r\n\r\nexport const CMFileSharePanel = ({ panelIsOpen, closePanel, items, mode, isContainer, hideSharingInfo, userAccount }: ICMFileSharePanelProps) => {\r\n const languageStrings = React.useContext(LanguageContext);\r\n\r\n const currentDirectory = useSelector((state: RootState) => state.workingDirectories?.workingDirectories?.length > 0 ? state.workingDirectories.workingDirectories[state.workingDirectories.workingDirectories.length - 1] : null);\r\n const oneDriveRootDetails = useSelector((state: RootState) => state.workingDirectories?.oneDriveRootDetails);\r\n const currentSharepointFolder = useSelector((state: RootState) => state.currentSharepointFolder);\r\n const user = useSelector((state: RootState) => state.user);\r\n\r\n const [message, setMessage] = React.useState('');\r\n const [errorMessage, setErrorMessage] = React.useState('');\r\n const [filenameWithoutExtention, setFilenameWithoutExtention] = React.useState('');\r\n const [blockDownload, setBlockDownload] = React.useState(false);\r\n const [isCreatingLink, setIsCreatingLink] = React.useState(false);\r\n const [sharedSuccess, setSharedSuccess] = React.useState(false);\r\n\r\n const [types] = React.useState([\r\n { key: 'edit', text: languageStrings.CanEditMakesChanges },\r\n { key: 'view', text: languageStrings.CanViewCannotMakeChanges }\r\n ]);\r\n const [selectedType, setSelectedType] = React.useState(types[0]);\r\n\r\n const [scopes] = React.useState([\r\n { key: ShareableLinkRequestScope.Anonymous, text: languageStrings.Anyone },\r\n { key: ShareableLinkRequestScope.Organization, text: languageStrings.MyOrganization },\r\n { key: ShareableLinkRequestScope.Users, text: languageStrings.PeopleYouChoose }\r\n ]);\r\n const [selectedScope, setSelectedScope] = React.useState(ShareableLinkRequestScope.Users);\r\n\r\n const [activityItem, setActivityItem] = React.useState();\r\n const [tooltipContent, setTooltipContent] = React.useState();\r\n\r\n const [selectedPeople, setSelectedPeople] = React.useState([]);\r\n const selectedPersonasChanged = (selectedPersonas: IPersonaProps[], customTextValue?: string) => {\r\n const people = selectedPersonas.map(x => x.secondaryText);\r\n if (customTextValue) {\r\n people.push(customTextValue);\r\n }\r\n setSelectedPeople(people);\r\n }\r\n\r\n const [getSharingInformation] = useLazyGetSharingInformationQuery();\r\n const [sendMail] = useLazySendMailQuery();\r\n\r\n const { isMailSendTokenAvailable, isMailSendTokenRequestInProgress, requestMailSendToken } = useMailSendPopUpAuth();\r\n\r\n const isInOneDrive = React.useRef(currentDirectory?.type == ComponentTypes.OneDrive || currentDirectory?.type == ComponentTypes.OneDriveSubFolder);\r\n\r\n const [showMoreIsClicked, setShowMore] = React.useState(false);\r\n const [sectionStyle, setSectionStyle] = React.useState();\r\n React.useEffect(() => {\r\n const itemHeight = isMobile() ? mobileListItemStyle.height : 40;\r\n let containerHeight = itemHeight * items.length;\r\n\r\n if (!showMoreIsClicked) {\r\n containerHeight = items.length > minItems ? itemHeight * minItems : itemHeight * items.length;\r\n }\r\n\r\n setSectionStyle(\r\n mergeStyles({\r\n maxHeight: containerHeight,\r\n overflow: \"hidden\",\r\n transition: \"max-height 0.5s ease-in-out\",\r\n })\r\n );\r\n }, [showMoreIsClicked]);\r\n\r\n const showMore = items.length > minItems && (\r\n setShowMore((prevShowMoreIsClicked) => !prevShowMoreIsClicked)}\r\n style={{ marginTop: \"5px\" }}\r\n >\r\n \r\n {!showMoreIsClicked ? languageStrings.ShowMore : languageStrings.ShowLess}\r\n \r\n );\r\n\r\n React.useEffect(() => {\r\n if (!hideSharingInfo && items?.length === 1) {\r\n const item = items[0];\r\n (async () => {\r\n let siteUrl: string;\r\n if (item.currentLocation) {\r\n const currentLocation: IPageSettings = item.currentLocation;\r\n isInOneDrive.current = currentLocation.type == ComponentTypes.OneDrive || currentLocation.type == ComponentTypes.OneDriveSubFolder;\r\n siteUrl = isInOneDrive.current ? oneDriveRootDetails?.sharePointSiteUrl : currentLocation.webUrl;\r\n }\r\n else {\r\n siteUrl = isInOneDrive.current ? oneDriveRootDetails?.sharePointSiteUrl : currentDirectory?.webUrl;\r\n }\r\n\r\n const sharingInformation = await getSharingInformation({\r\n siteUrl,\r\n sharePointListId: item.sharePointListId || item.sharepointIds?.listId || currentSharepointFolder.sharepointListId,\r\n uniqueId: item.UniqueId ? item.UniqueId.replace(\"{\", \"\").replace(\"}\", \"\") : item.sharepointIds.listItemUniqueId,\r\n accessToken: isInOneDrive.current ? await authModule.getOneDriveAccessToken() : await authModule.getSharePointAccessToken(),\r\n }).unwrap();\r\n\r\n const personas: IPersonaSharedProps[] = sharingInformation?.permissionsInformation?.principals?.map(principal => {\r\n let initials = \"\";\r\n\r\n const parts = principal.principal.name?.split(\" \");\r\n\r\n if (parts.length === 1) {\r\n initials = `${parts[0].charAt(0)}`;\r\n }\r\n else if (parts.length > 1) {\r\n initials = `${parts[0].charAt(0)}${parts[1].charAt(0)}`;\r\n }\r\n\r\n const persona: IPersonaSharedProps = {\r\n text: principal.principal.name,\r\n imageInitials: initials\r\n }\r\n return persona;\r\n });\r\n\r\n if (personas?.length > 0) {\r\n let activityDescription: any;\r\n if (personas.length === 1) {\r\n activityDescription = [{personas[0].text}]\r\n }\r\n else if (personas.length === 2) {\r\n activityDescription = [{personas[0].text}, {personas[1].text}]\r\n }\r\n else if (personas.length === 3) {\r\n activityDescription = [{personas[0].text}, {personas[1].text} and 1 other]\r\n }\r\n else if (personas.length > 3) {\r\n activityDescription = [{personas[0].text}, {personas[1].text} and {personas.length - 2} others]\r\n }\r\n\r\n setTooltipContent(\r\n <>\r\n \r\n
    \r\n {personas.map((persona, index) => {\r\n return (\r\n
  • {persona.text}
  • \r\n )\r\n })}\r\n
\r\n \r\n );\r\n\r\n setActivityItem({\r\n activityDescription: activityDescription,\r\n activityPersonas: personas,\r\n isCompact: true,\r\n });\r\n }\r\n })();\r\n }\r\n }, [items]);\r\n\r\n React.useEffect(() => {\r\n (async () => {\r\n if (isCreatingLink && isMailSendTokenAvailable) {\r\n if (selectedScope === ShareableLinkRequestScope.Users && (!selectedPeople || selectedPeople.length === 0)) {\r\n setIsCreatingLink(false);\r\n setErrorMessage(languageStrings.PleaseSelectSomeoneShare);\r\n return;\r\n }\r\n\r\n setErrorMessage(\"\");\r\n\r\n let hasFailedLinks: boolean = false;\r\n const links: string[] = [];\r\n\r\n await Promise.all(items.map(async item => {\r\n try {\r\n let driveId = '';\r\n let itemId = '';\r\n\r\n if (item.driveId && item.id) {\r\n driveId = item.driveId;\r\n itemId = item.id;\r\n }\r\n else if (item.driveId && item.itemId) {\r\n driveId = item.driveId;\r\n itemId = item.itemId;\r\n }\r\n else if (item.driveid && item[\"serverrelativepath\"]) { // Advanced search item\r\n driveId = item.driveid;\r\n itemId = item.itemid ?? await getFileItemIdFromRelativePath(await authModule.getGraphAccessToken(), item.driveid, item[\"serverrelativepath\"]);\r\n }\r\n else {\r\n const spItemUrlparts = item['.spItemUrl'].split('/');\r\n driveId = isInOneDrive.current ? oneDriveRootDetails?.driveId : (currentDirectory?.parentId ? currentDirectory?.parentId : currentDirectory?.id);\r\n itemId = spItemUrlparts[spItemUrlparts.length - 1].split('?')[0];\r\n }\r\n\r\n if (!itemId) {\r\n const driveUrl = new URL(await getItemWebViewUrl(await authModule.getGraphAccessToken(), driveId, null));\r\n const folderUrl = new URL(driveUrl.origin + item['FileRef']);\r\n itemId = await getFileItemIdFromRelativePath(await authModule.getGraphAccessToken(), driveId, folderUrl.pathname.replace(driveUrl.pathname, \"\"), false);\r\n }\r\n\r\n if (itemId) {\r\n const request: IGraphCreateShareableLinkRequest = {\r\n driveId,\r\n itemId,\r\n // recipients: selectedPeople,\r\n message,\r\n type: selectedType.key === ShareableLinkRequestType.Edit\r\n ? ShareableLinkRequestType.Edit\r\n : blockDownload === true\r\n ? ShareableLinkRequestType.BlocksDownload\r\n : ShareableLinkRequestType.View,\r\n scope: selectedScope\r\n }\r\n\r\n if (selectedScope === ShareableLinkRequestScope.Users) {\r\n request.recipients = selectedPeople\r\n }\r\n\r\n try {\r\n const createLinkResults = await createItemShareableLink(request);\r\n if (createLinkResults) {\r\n if (createLinkResults.link?.webUrl) {\r\n links.push(createLinkResults.link.webUrl);\r\n }\r\n\r\n if (mode === SharePanelMode.Share) {\r\n const fileParts = getFileParts(item.FileLeafRef ?? item.name);\r\n setFilenameWithoutExtention(fileParts.nameWithoutExtention);\r\n\r\n let isFolderOrDocumentSet: boolean = false;\r\n\r\n let iconUrl: string;\r\n try {\r\n let iconType: IFileTypeIconOptions;\r\n const itemContentTypeId: string = item.ContentTypeId || item.currentLocation?.contentTypeId || item[\"contenttypeid\"];\r\n if (itemContentTypeId\r\n && (itemContentTypeId.startsWith(SharePointFolderContentTypeIds.documentSet)\r\n || itemContentTypeId.startsWith(SharePointFolderContentTypeIds.folder))\r\n ) {\r\n if (itemContentTypeId.startsWith(SharePointFolderContentTypeIds.documentSet)) {\r\n iconType = { type: FileIconType.docset, size: 48, imageFileType: \"svg\" };\r\n }\r\n else if (itemContentTypeId.startsWith(SharePointFolderContentTypeIds.folder)) {\r\n iconType = { type: FileIconType.folder, size: 48, imageFileType: \"svg\" };\r\n }\r\n isFolderOrDocumentSet = true;\r\n }\r\n\r\n if (!iconType) {\r\n if (isContainer) {\r\n iconType = { type: FileIconType.folder, size: 48, imageFileType: \"svg\" };\r\n isFolderOrDocumentSet = true;\r\n }\r\n else {\r\n iconType = { extension: fileParts.extention?.trim(), size: 48, imageFileType: \"svg\" };\r\n }\r\n }\r\n\r\n iconUrl = getFileTypeIconAsUrl(iconType);\r\n } catch (error) {\r\n iconUrl = `${process.env.baseUri}/assets/icon-unknown.png`;\r\n }\r\n\r\n const sharedByText: string = (isFolderOrDocumentSet\r\n ? languageStrings.FolderSharedWithYouBy\r\n : languageStrings.DocumentSharedWithYouBy)\r\n .replace(\"[person]\", user?.account?.displayName ?? userAccount?.displayName);\r\n\r\n const res = await sendMail({\r\n accessToken: await authModule.getMailSendAccessToken(),\r\n html: getEmailTemplateHtml(\r\n createLinkResults.link.webUrl,\r\n iconUrl,\r\n sharedByText,\r\n fileParts.nameWithoutExtention,\r\n message,\r\n languageStrings.Open\r\n ),\r\n subject: languageStrings.DocumentSharedWithYouByEmailSubject.replace(\"[person]\", user?.account?.displayName ?? userAccount?.displayName).replace(\"[file_name]\", fileParts.nameWithoutExtention),\r\n toRecipients: selectedPeople\r\n });\r\n\r\n if (res.isError) {\r\n hasFailedLinks = true;\r\n setErrorMessage(res.error[\"data\"][\"error\"][\"message\"] ? res.error[\"data\"][\"error\"][\"message\"] : languageStrings.ErrorMessageGeneric);\r\n logger(res.error[\"data\"][\"error\"][\"message\"], \"CMFileSharePanel.tsx (sendMail)\");\r\n }\r\n }\r\n }\r\n else {\r\n hasFailedLinks = true;\r\n setErrorMessage(languageStrings.ErrorMessageGeneric);\r\n logger(new Error(`Sharing link could not be created for request ${JSON.stringify(request)}`), \"CMFileSharePanel.tsx (getCreateShareableLink)\");\r\n }\r\n } catch (error) {\r\n hasFailedLinks = true;\r\n setErrorMessage(languageStrings.ErrorMessageGeneric);\r\n logger(error, \"CMFileSharePanel.tsx (getCreateShareableLink)\");\r\n }\r\n }\r\n } catch (error) {\r\n hasFailedLinks = true;\r\n setErrorMessage(languageStrings.ErrorMessageGeneric);\r\n logger(error, \"CMFileSharePanel.tsx (items.map -> getCreateShareableLink)\");\r\n }\r\n }));\r\n\r\n if (mode === SharePanelMode.Copy && links.length > 0) {\r\n try {\r\n const textToCopy: string = links.join(\"\\r\\n\");\r\n if (generalModule.getIsOfficeJSAvailable()) {\r\n await navigatorClipboardWriteText(textToCopy);\r\n }\r\n else {\r\n await navigator.clipboard.writeText(textToCopy);\r\n }\r\n } catch (error) {\r\n hasFailedLinks = true;\r\n setErrorMessage(error?.message ?? languageStrings.ErrorMessageGeneric);\r\n logger(error, \"CMFileSharePanel.tsx (Clipboard write text)\");\r\n }\r\n }\r\n\r\n setSharedSuccess(!hasFailedLinks);\r\n setIsCreatingLink(false);\r\n }\r\n setIsCreatingLink(false);\r\n })();\r\n }, [isCreatingLink, isMailSendTokenAvailable])\r\n\r\n const getFileParts = (name: string) => {\r\n let extention = '';\r\n let nameWithoutExtention = '';\r\n\r\n const fileParts = name.split('.');\r\n if (fileParts) {\r\n if (fileParts.length > 1) extention = fileParts[fileParts.length - 1];\r\n nameWithoutExtention = fileParts[0];\r\n }\r\n\r\n return {\r\n extention,\r\n nameWithoutExtention\r\n }\r\n }\r\n\r\n const createShareableLink = async () => {\r\n setIsCreatingLink(true);\r\n setSharedSuccess(false);\r\n if (!isMailSendTokenAvailable) {\r\n requestMailSendToken();\r\n }\r\n }\r\n\r\n const onRenderFooterContent = React.useCallback(\r\n () => (\r\n \r\n {!sharedSuccess && {\r\n createShareableLink();\r\n }}\r\n disabled={isCreatingLink || isMailSendTokenRequestInProgress}\r\n text={mode === SharePanelMode.Copy\r\n ? languageStrings.CopyLink\r\n : languageStrings.Send}\r\n >\r\n {(isCreatingLink) && }\r\n }\r\n {sharedSuccess && {\r\n closePanel();\r\n }}\r\n text={languageStrings.Close}\r\n />}\r\n \r\n ),\r\n [createShareableLink, isCreatingLink],\r\n );\r\n\r\n const onTypeChange = (event: React.FormEvent, item: IDropdownOption): void => {\r\n setSelectedType(item);\r\n };\r\n\r\n const onScopeChange = (ev: React.FormEvent, option: IChoiceGroupOption): void => {\r\n setSelectedScope(option.key as ShareableLinkRequestScope);\r\n }\r\n\r\n return (\r\n closePanel()}\r\n isLightDismiss\r\n closeButtonAriaLabel=\"Close\"\r\n type={PanelType.custom}\r\n customWidth={!generalModule.isInConentMangerMode() ? \"300px\" : \"450px\"}\r\n styles={panelStyles}\r\n onRenderFooterContent={onRenderFooterContent}\r\n isFooterAtBottom={true}\r\n >\r\n
\r\n \r\n \r\n {errorMessage && \r\n {errorMessage}\r\n }\r\n {sharedSuccess && \r\n {mode === SharePanelMode.Share\r\n ? languageStrings.DocumentShareSuccess.replace(\"[file_name]\", filenameWithoutExtention)\r\n : `${items.length} ${languageStrings.SharedLinkSuccessfullyCopied}`}\r\n }\r\n
\r\n {items?.map((item, index) => (\r\n
\r\n \r\n
\r\n ))}\r\n
\r\n {showMore}\r\n {mode === SharePanelMode.Copy && }\r\n {selectedScope === ShareableLinkRequestScope.Users && }\r\n {mode === SharePanelMode.Share && setMessage(newValue)} />}\r\n \r\n {selectedType.key === ShareableLinkRequestType.View && {\r\n setBlockDownload(prev => !prev);\r\n }} />}\r\n {activityItem && \r\n \r\n \r\n \r\n \r\n }\r\n
\r\n
\r\n
\r\n \r\n )\r\n};","import React from \"react\";\r\nimport SaveWithMetaData from \"../../src/taskpane/components/directoryComponents/sharepoint/SaveToSharepoint\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport { ComponentTypes } from \"../../src/taskpane/config/config\";\r\nimport { SharePointInputData } from \"../../src/taskpane/interfaces/props/SharePointInputData\";\r\nimport { RootState } from \"../../src/taskpane/components/_v2/redux/storeMain\";\r\nimport savingLocationStructureModule from \"../../utilities/SavingLocationStructureModule\";\r\nimport DuplicateFiles from \"../../src/taskpane/components/directoryComponents/oneDrive/DuplicateFiles\";\r\nimport { IPanelStyles, IStackItemStyles, IStackStyles, IStackTokens, MessageBar, MessageBarButton, MessageBarType, Panel, PanelType, PrimaryButton, Spinner, SpinnerSize, Stack } from \"@fluentui/react\";\r\nimport { resetFiles, setOneDriveOverwriteOptionSelected } from \"../../src/taskpane/redux/modules/file\";\r\nimport { setSavingLocation } from \"../../src/taskpane/redux/modules/savingLocation\";\r\nimport { Slide, ToastContainer } from \"react-toastify\";\r\nimport { DatasourceValidationHelper } from \"../../src/taskpane/components/helpers/datasourceValidationHelper\";\r\nimport { setDatasourceValues } from \"../../src/taskpane/redux/modules/datasource\";\r\nimport { useFileUpload } from \"../Body/useFileUpload\";\r\nimport { LanguageContext } from \"../../utilities/LocalizationModule\";\r\nimport generalModule from \"../../utilities/GeneralModule\";\r\nimport { FileOption } from \"../../src/taskpane/interfaces/IFileOption\";\r\nimport { updateIndividualFileOptionsValue } from \"../../src/taskpane/components/helpers/metaDataHelper\";\r\nimport { logger } from \"../../utilities/logger\";\r\nimport { VersionSelectorMinMajOnly } from \"../../src/taskpane/components/_v2/_shared/VersionSelector/VersionSelectorMinMajOnly\";\r\nimport authModule from \"../../utilities/AuthModule\";\r\nimport { SharePointFolderContentTypeIds, sharePointInternalFileName } from \"../../src/taskpane/config/constants\";\r\nimport { OneDriveOverWriteEnum } from \"../../src/taskpane/components/enums/oneDriveOverWriteEnum\";\r\nimport DuplicateFolders from \"../../src/taskpane/components/directoryComponents/oneDrive/DuplicateFolders\";\r\nimport { BulkMetadataUpdateRequest, MetadataDto } from \"../../src/taskpane/components/_v2/redux/api/local/api-local-interfaces\";\r\nimport { getListSettings } from \"../../src/taskpane/services/SharePointRestServices\";\r\nimport { getItem } from \"../../src/taskpane/services/GraphService\";\r\nimport { apiBulkUpdateItemMetadata } from \"../../src/taskpane/services/ApiService\";\r\nimport { refrehOptionsRequest } from \"../../src/taskpane/config/datasourceConstants\";\r\n\r\nconst panelStyles: Partial = {\r\n main: {\r\n overflow: \"hidden\"\r\n },\r\n content: {\r\n paddingLeft: 5,\r\n paddingRight: 5,\r\n },\r\n header: {\r\n marginBottom: 10,\r\n paddingLeft: 15\r\n },\r\n footer: {\r\n backgroundColor: \"#fff\"\r\n },\r\n commands: {\r\n backgroundColor: \"#fff\"\r\n }\r\n}\r\n\r\nconst containerStackTokens: IStackTokens = {\r\n childrenGap: 5\r\n};\r\n\r\nconst containerStackStyles: IStackStyles = {\r\n root: {\r\n height: \"100%\",\r\n }\r\n};\r\n\r\nconst metadataStackItemStyles: IStackItemStyles = {\r\n root: {\r\n overflowY: \"auto\"\r\n }\r\n};\r\n\r\nexport interface ICMFilesUpdatePanel {\r\n closePanel?: () => void;\r\n reloadGrid?: () => void;\r\n panelIsOpen: boolean;\r\n selectedItems?: any[];\r\n}\r\n\r\nexport const CMFilesUpdatePanel = ({ closePanel, reloadGrid, panelIsOpen, selectedItems }: ICMFilesUpdatePanel) => {\r\n const languageStrings = React.useContext(LanguageContext);\r\n\r\n const dispatch = useDispatch();\r\n\r\n const workingDirectories = useSelector((state: RootState) => state.workingDirectories.workingDirectories);\r\n const currentDirectory = useSelector((state: RootState) => state.workingDirectories.workingDirectories.length > 0 ? state.workingDirectories.workingDirectories[state.workingDirectories.workingDirectories.length - 1] : null);\r\n const datasourceValues = useSelector((state: RootState) => state.datasource.values);\r\n const datasourceInitialLoad = useSelector((state: RootState) => state.datasource.initialLoad);\r\n const canOverwrite = useSelector((state: RootState) => state.files.canOverwrite);\r\n const siteInfo = useSelector((state: RootState) => state.tenantInfo?.sites);\r\n const currentSharepointFolder = useSelector((state: RootState) => state.currentSharepointFolder);\r\n const moveTo = useSelector((state: RootState) => state.contentManagerDirectory.moveTo);\r\n\r\n const [files, setFilesLocal] = React.useState(selectedItems);\r\n const [inputValuesToSave, setInputValuesToSave] = React.useState([]);\r\n const [filesUploaded, setFilesUploaded] = React.useState(files?.length > 0);\r\n const [isCurrentDirectorySPList, setIsCurrentDirectorySPList] = React.useState(false);\r\n const [isBusy, setIsBusy] = React.useState(false);\r\n const [showErrorMessage, setShowErrorMessage] = React.useState(false);\r\n\r\n const [_fileOptions, _setFileOptions] = React.useState([]);\r\n const fileOptionsRef = React.useRef([]);\r\n const setFileOptions = (fileOptions: FileOption[]) => {\r\n fileOptionsRef.current = fileOptions;\r\n _setFileOptions(fileOptions);\r\n };\r\n\r\n const removeMessage = React.useCallback(() => setShowErrorMessage(false), []);\r\n\r\n const sharedContentType = React.useMemo(() => {\r\n if (Array.isArray(selectedItems)\r\n && selectedItems.length > 0\r\n && selectedItems.every(item => item?.ContentTypeId === selectedItems[0]?.ContentTypeId)) {\r\n return selectedItems[0]?.ContentTypeId;\r\n }\r\n return null;\r\n }, [selectedItems]);\r\n\r\n const isInOneDrive = React.useRef(currentDirectory.type == ComponentTypes.OneDrive || currentDirectory.type == ComponentTypes.OneDriveSubFolder);\r\n\r\n const { showSelectVersion, setShowSelectVersion, setSelectedCheckinType, spHasDuplicateFiles, setSpHasDuplicateFiles, spHasDuplicateFolders, setSpHasDuplicateFolders } = useFileUpload();\r\n\r\n React.useEffect(() => {\r\n const workingDirectoriesAvailable: boolean = Array.isArray(workingDirectories) && workingDirectories.length > 0;\r\n setIsCurrentDirectorySPList(workingDirectoriesAvailable && workingDirectories.some(x => x.type === ComponentTypes.SharePointList));\r\n }, [workingDirectories, siteInfo]);\r\n\r\n React.useEffect(() => {\r\n dispatch(setOneDriveOverwriteOptionSelected(OneDriveOverWriteEnum.notSelected));\r\n }, []);\r\n\r\n React.useEffect(() => {\r\n if (!generalModule.getIsMultiMetaFileUpdatePanelOpen() && datasourceValues) {\r\n updateMetadataPropertiesFromDataSource(datasourceValues);\r\n }\r\n }, [datasourceValues]);\r\n\r\n React.useEffect(() => {\r\n generalModule.setIsMultiMetaFileUpdatePanelOpen(false);\r\n\r\n savingLocationStructureModule.setSavingLocationStructure(workingDirectories);\r\n dispatch(\r\n setSavingLocation({\r\n display: currentDirectory?.displayName,\r\n webUrl: currentDirectory?.webUrl,\r\n directory: currentDirectory?.directory,\r\n teamId: workingDirectories?.find(dir => dir.teamGroupId)?.teamGroupId,\r\n channelId: workingDirectories?.find(dir => dir.teamChannelId)?.teamChannelId\r\n }, isInOneDrive.current)\r\n );\r\n }, []);\r\n\r\n React.useEffect(() => {\r\n if (fileOptionsRef.current?.length > 0) {\r\n const updateFileOptions = fileOptionsRef.current.map(fileOption => {\r\n return {\r\n ...fileOption,\r\n canOverwrite\r\n }\r\n })\r\n\r\n setFileOptions(updateFileOptions);\r\n }\r\n }, [canOverwrite]);\r\n\r\n const updateMetadataPropertiesFromDataSource = (values: any) => {\r\n const isMultipleValues: boolean = Array.isArray(values) && values.length > 0;\r\n const propertyKeys = isMultipleValues\r\n ? Object.keys(values[0])\r\n : Object.keys(values);\r\n\r\n if (propertyKeys.length > 0) {\r\n const updatedinputValuesToSave = [...inputValuesToSave];\r\n propertyKeys.forEach((propKey) => {\r\n let updatedValue: any;\r\n if (isMultipleValues) {\r\n const uniqueValues = values\r\n .map(value => value[propKey])\r\n .filter((value, index, self) => self.indexOf(value) === index);\r\n updatedValue = uniqueValues?.length === 1 ? uniqueValues[0] : uniqueValues;\r\n }\r\n else {\r\n updatedValue = values[propKey];\r\n }\r\n updateDatasourceDisplayNameInputData(updatedinputValuesToSave, propKey, updatedValue, Array.isArray(updatedValue) && updatedValue.length > 0);\r\n });\r\n updateSharepointMetadataToSave(updatedinputValuesToSave, null);\r\n }\r\n dispatch(setDatasourceValues(null));\r\n };\r\n\r\n const updateDatasourceDisplayNameInputData = (\r\n updatedinputValuesToSave: SharePointInputData[],\r\n propKey: string,\r\n value: any,\r\n isMultipleValues: boolean\r\n ) => {\r\n let inputToUpdate = inputValuesToSave.find(\r\n (item) => item.internalName !== sharePointInternalFileName && item.displayName && item.displayName.trim().toLowerCase() === propKey.trim().toLowerCase()\r\n );\r\n\r\n if (inputToUpdate) {\r\n if (value === refrehOptionsRequest) {\r\n const updatedInput: SharePointInputData = updatedinputValuesToSave[inputToUpdate.index];\r\n if (updatedInput) {\r\n updatedInput.resetDatasourceOptionsToggle = !updatedInput.resetDatasourceOptionsToggle;\r\n }\r\n }\r\n else if (isMultipleValues) { //value param is an array\r\n try {\r\n const updatedInput: SharePointInputData = updatedinputValuesToSave[inputToUpdate.index];\r\n if (updatedInput) {\r\n if (updatedInput.value) {\r\n if (Array.isArray(updatedInput.value) && updatedInput.value.length > 0) {\r\n updatedInput.value = updatedInput.value\r\n .map(val => {\r\n if (val && value.some(x => x?.trim().toLowerCase() === val.trim().toLowerCase())) {\r\n return val;\r\n }\r\n return null;\r\n })\r\n .filter(val => val);\r\n }\r\n else if (!datasourceInitialLoad && (value.length > 1 || !value.some(x => x?.trim().toLowerCase() === updatedInput?.value?.trim().toLowerCase()))) {\r\n updatedInput.value = null;\r\n }\r\n }\r\n else if (value.length === 1) {\r\n const validatedValue = DatasourceValidationHelper.validateAndTransformDatasourceValue(inputToUpdate, value[0]);\r\n if (validatedValue) {\r\n updatedInput.value = validatedValue;\r\n updatedInput.hasError = false;\r\n updatedInput.updatedFromDataSourceToggle = !updatedInput.updatedFromDataSourceToggle;\r\n }\r\n }\r\n updatedInput.updatedDatasourceOptions = value;\r\n }\r\n } catch (error) {\r\n logger(error, \"CMFilesUpdatePanel.tsx (updateDatasourceDisplayNameInputData)\");\r\n }\r\n }\r\n else {\r\n const validatedValue = DatasourceValidationHelper.validateAndTransformDatasourceValue(inputToUpdate, value);\r\n if (validatedValue) {\r\n const updatedInput: SharePointInputData = updatedinputValuesToSave[inputToUpdate.index];\r\n updatedInput.value = validatedValue;\r\n updatedInput.hasError = false;\r\n updatedInput.updatedFromDataSourceToggle = !updatedInput.updatedFromDataSourceToggle;\r\n }\r\n }\r\n }\r\n };\r\n\r\n const onPanelCLose = () => {\r\n if (!moveTo.moveToEnabled) {\r\n dispatch(resetFiles([]));\r\n }\r\n closePanel();\r\n }\r\n\r\n const updateSharepointMetadataToSave = (metadata: SharePointInputData[], informationProtectionId: string, changedIndex?: number) => {\r\n setInputValuesToSave(metadata);\r\n\r\n if (fileOptionsRef.current?.length > 0) {\r\n setFileOptions(updateIndividualFileOptionsValue(fileOptionsRef.current, metadata, changedIndex, languageStrings.TitleAutoSet));\r\n }\r\n };\r\n\r\n const getItemWithExistingGraphId = async (driveId, itemId) => {\r\n const fileItem = await getItem(\r\n await authModule.getGraphAccessToken(),\r\n driveId,\r\n itemId\r\n )\r\n if (fileItem) {\r\n return fileItem?.sharepointIds?.listItemUniqueId\r\n } else {\r\n return null\r\n }\r\n };\r\n\r\n const processSelectedItems = async (items) => {\r\n const itemIds = await Promise.all(items.map(async (item) => {\r\n if (item.hasGraphItemId === true) {\r\n return await getItemWithExistingGraphId(item?.driveId, item.id);\r\n } else if ('UniqueId' in item && item.UniqueId) {\r\n return item.UniqueId.replace('{', '').replace('}', '');\r\n } else if ('id' in item) {\r\n return item.id;\r\n }\r\n return null;\r\n }));\r\n\r\n return itemIds.filter(id => id !== null);\r\n }\r\n\r\n const updateFilesSplit = async () => {\r\n const filesArray = files?.filter((item) => !item?.ContentTypeId?.startsWith(SharePointFolderContentTypeIds.folder));\r\n const documentSetsArray = files?.filter((item) => item?.ContentTypeId?.startsWith(SharePointFolderContentTypeIds.documentSet));\r\n\r\n setIsBusy(true);\r\n\r\n const [filesResponse, foldersResponse] = await Promise.all([\r\n Array.isArray(filesArray) && filesArray.length > 0 ? bulkUpdateItems(filesArray) : true,\r\n Array.isArray(documentSetsArray) && documentSetsArray.length > 0 ? bulkUpdateItems(documentSetsArray, true) : true\r\n ]);\r\n\r\n if (filesResponse && foldersResponse) {\r\n reloadGrid();\r\n closePanel();\r\n }\r\n else {\r\n setShowErrorMessage(true);\r\n }\r\n\r\n setIsBusy(false);\r\n }\r\n\r\n const bulkUpdateItems = async (items: any[], isFolder: boolean = false): Promise => {\r\n try {\r\n const accessToken = isInOneDrive.current ? await authModule.getOneDriveAccessToken() : await authModule.getSharePointAccessToken();\r\n\r\n let currentSharepointFolderInfo;\r\n const webUrl = currentDirectory?.webUrl;\r\n const listId = currentDirectory?.sharePointListId;\r\n if (webUrl && listId) {\r\n const [settings] = await Promise.all([\r\n getListSettings(accessToken, webUrl, listId)\r\n ]);\r\n\r\n currentSharepointFolderInfo = {\r\n sharepointListId: listId,\r\n canView: false,\r\n canCreateFolder: settings ? settings.EnableFolderCreation : currentSharepointFolder?.canCreateFolder ?? false,\r\n contentTypesEnabled: settings ? settings.ContentTypesEnabled : currentSharepointFolder?.contentTypesEnabled ?? false,\r\n enableMinorVersions: settings ? settings.EnableMinorVersions : currentSharepointFolder?.enableMinorVersions ?? false,\r\n };\r\n }\r\n\r\n const request: BulkMetadataUpdateRequest = {\r\n accessToken: isInOneDrive.current ? await authModule.getOneDriveAccessToken() : await authModule.getSharePointAccessToken(),\r\n siteUrl: webUrl,\r\n listId: listId,\r\n listItemUniqueIds: await processSelectedItems(items),\r\n isFolder: isFolder,\r\n isListItem: isCurrentDirectorySPList ? true : false,\r\n listSettings: {\r\n enableMinorVersions: currentSharepointFolderInfo?.enableMinorVersions === true,\r\n },\r\n metadata: inputValuesToSave\r\n .map(input => {\r\n const meta: MetadataDto = {\r\n type: input.type,\r\n internalName: input.internalName,\r\n value: !(input?.value === 0) && (!input?.value || (Array.isArray(input?.value) && !input?.value?.length)) ? undefined : input.value\r\n }\r\n return meta;\r\n })\r\n .filter(meta => meta.value)\r\n }\r\n\r\n await apiBulkUpdateItemMetadata(request);\r\n return true;\r\n } catch (error) {\r\n logger(error, \"CMFilesUpdatePanel.tsx (ApiBulkUpdate)\");\r\n return false;\r\n }\r\n }\r\n\r\n const cancelDuplicateAndVersionOptionSelection = () => {\r\n setShowSelectVersion(false);\r\n setSpHasDuplicateFiles(false);\r\n setSpHasDuplicateFolders(false);\r\n }\r\n\r\n const resetIndividualFileInputValues = () => {\r\n setFileOptions([]);\r\n }\r\n\r\n const onRenderFooterContent = React.useCallback(\r\n () => (\r\n \r\n {\r\n updateFilesSplit();\r\n }}\r\n text={isBusy ? languageStrings.SaveInProgress : languageStrings.SaveProperties}\r\n >\r\n {isBusy && }\r\n \r\n \r\n ),\r\n [isBusy, inputValuesToSave],\r\n );\r\n\r\n return (\r\n onPanelCLose()}\r\n isLightDismiss={false}\r\n closeButtonAriaLabel=\"Close\"\r\n type={PanelType.custom}\r\n customWidth={'350px'}\r\n styles={panelStyles}\r\n onRenderFooterContent={onRenderFooterContent}\r\n isFooterAtBottom={true}\r\n >\r\n <>\r\n \r\n {files?.length > 1 && _fileOptions?.some(x => x.isModified) && \r\n {\r\n resetIndividualFileInputValues();\r\n }}>{languageStrings.Reset}\r\n \r\n }\r\n >{languageStrings.IndividualFilesUpdated}}\r\n \r\n {(showSelectVersion || spHasDuplicateFiles || spHasDuplicateFolders) &&
\r\n {spHasDuplicateFolders && !spHasDuplicateFiles && }\r\n {spHasDuplicateFiles && }\r\n {showSelectVersion && }\r\n
}\r\n
\r\n {((moveTo.moveToEnabled || isCurrentDirectorySPList || filesUploaded) && !isInOneDrive.current) && }\r\n
\r\n
\r\n \r\n {showErrorMessage && \r\n \r\n {languageStrings.ErrorWhileUpdatingMetadata}\r\n \r\n }\r\n
\r\n \r\n \r\n )\r\n}","import React from \"react\";\r\nimport SaveWithMetaData from \"../../src/taskpane/components/directoryComponents/sharepoint/SaveToSharepoint\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport { SharePointInputData } from \"../../src/taskpane/interfaces/props/SharePointInputData\";\r\nimport { RootState } from \"../../src/taskpane/components/_v2/redux/storeMain\";\r\nimport { Dropdown, Icon, IPanelStyles, IStackItemStyles, IStackStyles, IStackTokens, ITooltipHostStyles, MessageBar, MessageBarType, Panel, PanelType, PrimaryButton, ResponsiveMode, Separator, Spinner, SpinnerSize, Stack, Toggle, TooltipHost, TooltipOverflowMode } from \"@fluentui/react\";\r\nimport { Slide, ToastContainer } from \"react-toastify\";\r\nimport { DatasourceValidationHelper } from \"../../src/taskpane/components/helpers/datasourceValidationHelper\";\r\nimport { setDatasourceValues } from \"../../src/taskpane/redux/modules/datasource\";\r\nimport { LanguageContext } from \"../../utilities/LocalizationModule\";\r\nimport { IFileToUpload } from \"../../src/taskpane/interfaces/IFileToUpload\";\r\nimport generalModule from \"../../utilities/GeneralModule\";\r\nimport { FolderView } from \"../../src/taskpane/components/helpers/folderView\";\r\nimport { logger } from \"../../utilities/logger\";\r\nimport { FileOption } from \"../../src/taskpane/interfaces/IFileOption\";\r\nimport { getFileTypeIconProps } from \"@fluentui/react-file-type-icons\";\r\nimport { VersionSelectorMinMajOnly } from \"../../src/taskpane/components/_v2/_shared/VersionSelector/VersionSelectorMinMajOnly\";\r\nimport { CheckinTypes } from \"../../src/taskpane/components/_v2/redux/api/local/api-local-interfaces\";\r\nimport DuplicateFiles from \"../../src/taskpane/components/directoryComponents/oneDrive/DuplicateFiles\";\r\nimport { DragAndDropHelper } from \"../../utilities/DragAndDropHelper\";\r\nimport { CacheHelper } from \"../../utilities/CacheHelper\";\r\nimport { DocubirdCache, sharePointInternalFileName, sharePointInternalTitleName } from \"../../src/taskpane/config/constants\";\r\nimport { ContentManagerCopyMoveModeEnum } from \"../../src/taskpane/components/enums/ContentManagerCopyMoveModeEnum\";\r\nimport emailMapper from \"../../src/taskpane/services/EmailMapper\";\r\nimport { DefaultValueService } from \"../../src/taskpane/services/DefaultValueService\";\r\nimport { IFilePreCommitResult } from \"../../src/taskpane/interfaces/IFilePreCommitResult\";\r\nimport authModule from \"../../utilities/AuthModule\";\r\nimport { getFilePreCommitInfo } from \"../../src/taskpane/services/SharePointRestServices\";\r\nimport { setFile } from \"../../src/taskpane/redux/modules/file\";\r\nimport { getDriveRootWebUrl } from \"../../src/taskpane/services/GraphService\";\r\nimport { SaveMode } from \"../../src/taskpane/components/enums/SaveModeEnum\";\r\nimport { ISaveButtonProps } from \"../../src/taskpane/interfaces/ISaveButtonProps\";\r\nimport { getPlatform } from \"../../src/taskpane/styles/mobileStyles\";\r\nimport { refrehOptionsRequest } from \"../../src/taskpane/config/datasourceConstants\";\r\n\r\nconst containerStackTokens: IStackTokens = {\r\n childrenGap: 5\r\n};\r\n\r\nconst containerStackStyles: IStackStyles = {\r\n root: {\r\n height: \"100%\",\r\n }\r\n};\r\n\r\nconst metadataStackItemStyles: IStackItemStyles = {\r\n root: {\r\n overflowY: \"auto\"\r\n }\r\n};\r\n\r\nconst tooltipHostCalloutProps = { gapSpace: 7 };\r\n\r\nconst stackTokens: IStackTokens = {\r\n childrenGap: 8\r\n};\r\n\r\nconst fileOptionStackStyles: IStackStyles = {\r\n root: {\r\n minWidth: 0\r\n }\r\n}\r\n\r\nconst fileTypeIconStyles: React.CSSProperties = {\r\n flexShrink: 0\r\n}\r\n\r\nconst fileNameStyles: ITooltipHostStyles = {\r\n root: {\r\n overflow: \"hidden\",\r\n whiteSpace: \"nowrap\",\r\n textOverflow: \"ellipsis\",\r\n msTextOverflow: \"ellipsis\"\r\n }\r\n}\r\n\r\nconst dropdownStyles: React.CSSProperties = {\r\n marginTop: \"10px\",\r\n paddingLeft: \"10px\",\r\n paddingRight: \"10px\",\r\n marginBottom: \"-10px\"\r\n};\r\n\r\nexport interface ICMMultipleFilesMetaDataPanelProps {\r\n closePanel?: () => void;\r\n panelIsOpen: boolean;\r\n originalInputValues: SharePointInputData[];\r\n saveFiles?: (savemode: SaveMode, selectedFile?: FileOption, optionsSelected?: boolean, autoRenameDuplicateFolder?: boolean) => void;\r\n fileOptions: FileOption[];\r\n setFileOptions?: (fileOptions: any[]) => void;\r\n checkForDuplicates: boolean;\r\n setCheckForDuplicates?: (checkForDuplicates: boolean) => void;\r\n showSelectVersion?: boolean;\r\n spHasDuplicateFiles?: boolean;\r\n setSelectedCheckinType?: (checkinType: CheckinTypes) => void;\r\n onCancel?: (selectedFileOption: FileOption) => void;\r\n saveMode: SaveMode;\r\n setSaveMode: (saveMode: SaveMode) => void;\r\n}\r\n\r\nexport const CMMultipleFilesMetaDataPanel = ({ closePanel, panelIsOpen, originalInputValues, fileOptions, setFileOptions, saveFiles, checkForDuplicates, setCheckForDuplicates, showSelectVersion, spHasDuplicateFiles, setSelectedCheckinType, onCancel, saveMode, setSaveMode }: ICMMultipleFilesMetaDataPanelProps) => {\r\n const languageStrings = React.useContext(LanguageContext);\r\n\r\n const dispatch = useDispatch();\r\n\r\n const files = useSelector((state: RootState) => !DragAndDropHelper.isDroppedModeActive ? state.files.files.filter(x => x.isSelected === true) : state.files.files.filter(x => x.isSelected === true && x.isFileSystemEntry && !x.isFolder));\r\n const currentDirectory = useSelector((state: RootState) => state.workingDirectories.workingDirectories.length > 0 ? state.workingDirectories.workingDirectories[state.workingDirectories.workingDirectories.length - 1] : null);\r\n const currentSharepointFolder = useSelector((state: RootState) => state.currentSharepointFolder);\r\n const siteInfo = useSelector((state: RootState) => state.tenantInfo?.sites);\r\n const tenantReplaceFileNameWithGUID = useSelector((state: RootState) => state.tenantInfo?.replaceFileNameWithGUID);\r\n const isBusySaving = useSelector((state: RootState) => state.savingInBackground.isBusySaving);\r\n const canOverwrite = useSelector((state: RootState) => state.files.canOverwrite);\r\n const datasourceValues = useSelector((state: RootState) => state.datasource.values);\r\n const datasourceInitialLoad = useSelector((state: RootState) => state.datasource.initialLoad);\r\n const moveTo = useSelector((state: RootState) => state.contentManagerDirectory.moveTo);\r\n const convertEmailToPDF = useSelector((state: RootState) => state.user.settings.convertEmailToPDF);\r\n const savingLocation = useSelector((state: RootState) => state.savingLocation);\r\n\r\n const initialLoad = React.useRef(true);\r\n\r\n const [selectedFile, _setSelectedFile] = React.useState();\r\n const selectedFileRef = React.useRef();\r\n const setSelectedFile = (fileOption: FileOption) => {\r\n selectedFileRef.current = fileOption;\r\n _setSelectedFile(fileOption);\r\n };\r\n\r\n const [inputValues, setInputValues] = React.useState([]);\r\n const [isBusy, setIsBusy] = React.useState(false);\r\n const [savingButtonProps, setSavingButtonProps] = React.useState();\r\n const [saveAllFilesDisabledTooltip, setSaveAllFilesDisabledTooltip] = React.useState(\"\");\r\n const [saveFileDisabledTooltip, setSaveFileDisabledTooltip] = React.useState(\"\");\r\n const [updatedName, setUpdatedName] = React.useState(\"\");\r\n const [verifyingFiles, setVerifyingFiles] = React.useState(false);\r\n const [fieldsLoaded, setFieldsLoaded] = React.useState(false);\r\n const [selectionOpen, setSelectionOpen] = React.useState(false);\r\n\r\n React.useEffect(() => {\r\n if (checkForDuplicates || (initialLoad.current && selectedFileRef.current)) {\r\n // checkFileNamesForDuplicates(files);\r\n checkFileForDuplicates();\r\n initialLoad.current = false;\r\n }\r\n }, [checkForDuplicates, initialLoad.current, selectedFileRef.current])\r\n\r\n React.useEffect(() => {\r\n if (showSelectVersion || spHasDuplicateFiles) {\r\n setSelectionOpen(true);\r\n } else {\r\n setSelectionOpen(false);\r\n }\r\n }, [showSelectVersion, spHasDuplicateFiles])\r\n\r\n React.useEffect(() => {\r\n generalModule.setIsMultiMetaFileUpdatePanelOpen(true);\r\n setSelectedCheckinType(CheckinTypes.minorCheckIn);\r\n }, []);\r\n\r\n React.useEffect(() => {\r\n if (datasourceValues) {\r\n updateMetadataPropertiesFromDataSource(datasourceValues);\r\n }\r\n }, [datasourceValues, selectedFile, fileOptions]);\r\n\r\n React.useEffect(() => {\r\n if (updatedName) {\r\n setVerifyingFiles(true);\r\n }\r\n\r\n let debounceTimer = setTimeout(() => {\r\n if (updatedName) {\r\n checkFileForDuplicates(updatedName);\r\n } else {\r\n setVerifyingFiles(false);\r\n }\r\n }, 800);\r\n\r\n return () => {\r\n clearTimeout(debounceTimer);\r\n };\r\n }, [updatedName]);\r\n\r\n React.useEffect(() => {\r\n if (selectedFile) {\r\n const selectedFileOption = fileOptions?.find(x => x.key === selectedFile.key);\r\n if (selectedFileOption) {\r\n const selectedFileHasChanged = JSON.stringify(selectedFileOption) !== JSON.stringify(selectedFile);\r\n if (selectedFileHasChanged) {\r\n setSelectedFile(selectedFileOption);\r\n }\r\n }\r\n }\r\n }, [selectedFile, fileOptions]);\r\n\r\n React.useEffect(() => {\r\n setSavingButtonProps(prevVal => {\r\n return {\r\n ...prevVal,\r\n text: saveMode === SaveMode.Default\r\n ? `${languageStrings.SaveTo} ${savingLocation.display}`\r\n : `${languageStrings.SaveTo} ${savingLocation.display} ${languageStrings.AsPdf}`\r\n };\r\n });\r\n }, [saveMode, savingLocation]);\r\n\r\n const canConvertToPDF = React.useMemo(() => {\r\n return files.filter(f => f.isSelected).some(f => f.canSaveAsPDF);\r\n }, [savingButtonProps, files]);\r\n\r\n const panelCssStyles = React.useMemo(() => {\r\n const partialStyles: Partial = {\r\n main: {\r\n overflow: \"hidden\"\r\n },\r\n content: {\r\n height: canConvertToPDF ? \"calc(100vh - 190px);\" : \"calc(100vh - 140px);\",\r\n paddingLeft: 5,\r\n paddingRight: 5,\r\n paddingBottom: 0\r\n },\r\n footer: {\r\n backgroundColor: \"#fff\"\r\n },\r\n };\r\n return partialStyles;\r\n }, [canConvertToPDF]);\r\n\r\n const updateMetadataPropertiesFromDataSource = (values: any) => {\r\n if (selectedFile && fileOptions?.length > 0) {\r\n const isMultipleValues: boolean = Array.isArray(values) && values.length > 0;\r\n const propertyKeys = isMultipleValues\r\n ? Object.keys(values[0])\r\n : Object.keys(values);\r\n\r\n if (propertyKeys.length > 0) {\r\n const selectedFileInputValues = fileOptions.find(x => x.key === selectedFile.key)?.fileInputValues;\r\n if (selectedFileInputValues) {\r\n const updatedinputValuesToSave = [...selectedFileInputValues];\r\n propertyKeys.forEach((propKey) => {\r\n let updatedValue: any;\r\n if (isMultipleValues) {\r\n const uniqueValues = values\r\n .map(value => value[propKey])\r\n .filter((value, index, self) => self.indexOf(value) === index);\r\n updatedValue = uniqueValues?.length === 1 ? uniqueValues[0] : uniqueValues;\r\n }\r\n else {\r\n updatedValue = values[propKey];\r\n }\r\n updateDatasourceDisplayNameInputData(updatedinputValuesToSave, propKey, updatedValue, Array.isArray(updatedValue) && updatedValue.length > 0);\r\n });\r\n updateSharepointMetadataToSave(updatedinputValuesToSave, null);\r\n }\r\n }\r\n }\r\n dispatch(setDatasourceValues(null));\r\n };\r\n\r\n const updateDatasourceDisplayNameInputData = (\r\n updatedinputValuesToSave: SharePointInputData[],\r\n propKey: string,\r\n value: any,\r\n isMultipleValues: boolean\r\n ) => {\r\n const selectedFileInputValues = fileOptions.find(x => x.key === selectedFile.key)?.fileInputValues;\r\n let inputToUpdate = selectedFileInputValues.find(\r\n (item) => item.displayName && item.displayName.trim().toLowerCase() === propKey.trim().toLowerCase()\r\n );\r\n\r\n if (inputToUpdate) {\r\n if (value === refrehOptionsRequest) {\r\n const updatedInput: SharePointInputData = updatedinputValuesToSave[inputToUpdate.index];\r\n if (updatedInput) {\r\n updatedInput.resetDatasourceOptionsToggle = !updatedInput.resetDatasourceOptionsToggle;\r\n }\r\n }\r\n else if (isMultipleValues) { //value param is an array\r\n try {\r\n const updatedInput: SharePointInputData = updatedinputValuesToSave[inputToUpdate.index];\r\n if (updatedInput) {\r\n if (updatedInput.value) {\r\n if (Array.isArray(updatedInput.value) && updatedInput.value.length > 0) {\r\n updatedInput.value = updatedInput.value\r\n .map(val => {\r\n if (val && value.some(x => x?.trim().toLowerCase() === val.trim().toLowerCase())) {\r\n return val;\r\n }\r\n return null;\r\n })\r\n .filter(val => val);\r\n }\r\n else if (!datasourceInitialLoad && (value.length > 1 || !value.some(x => x?.trim().toLowerCase() === updatedInput?.value?.trim().toLowerCase()))) {\r\n updatedInput.value = null;\r\n }\r\n }\r\n else if (value.length === 1) {\r\n const validatedValue = DatasourceValidationHelper.validateAndTransformDatasourceValue(inputToUpdate, value[0]);\r\n if (validatedValue) {\r\n updatedInput.value = validatedValue;\r\n updatedInput.hasError = false;\r\n updatedInput.updatedFromDataSourceToggle = !updatedInput.updatedFromDataSourceToggle;\r\n }\r\n }\r\n updatedInput.updatedDatasourceOptions = value;\r\n }\r\n } catch (error) {\r\n logger(error, \"CMMultipleFilesMetaDataPanel.tsx (updateDatasourceDisplayNameInputData)\");\r\n }\r\n }\r\n else {\r\n const validatedValue = DatasourceValidationHelper.validateAndTransformDatasourceValue(inputToUpdate, value);\r\n if (validatedValue) {\r\n const updatedInput: SharePointInputData = updatedinputValuesToSave[inputToUpdate.index];\r\n updatedInput.value = validatedValue;\r\n updatedInput.hasError = false;\r\n updatedInput.updatedFromDataSourceToggle = !updatedInput.updatedFromDataSourceToggle;\r\n }\r\n }\r\n }\r\n };\r\n\r\n const fieldsChanged = async (fields: any[], contentTypeId: string, inputValues?: SharePointInputData[]) => {\r\n if (fileOptions?.length === 0) {\r\n const selectedItems = CacheHelper.get(DocubirdCache.selectedExchangeItems);\r\n\r\n const options = await Promise.all((files as IFileToUpload[])?.map(async (file, index) => {\r\n const selectedItem = (moveTo.moveToEnabled && moveTo.mode === ContentManagerCopyMoveModeEnum.CopySelectedEmails) ? selectedItems?.find(x => x.id === file.graphMailItemId) : null;\r\n\r\n return {\r\n key: file.id,\r\n text: file.name,\r\n file: file,\r\n isSelectedFile: index === 0,\r\n isModified: false,\r\n canOverwrite,\r\n isSaving: false,\r\n savingSuccess: false,\r\n savingError: false,\r\n fileInputValues: await Promise.all(inputValues.map(async inputValue => {\r\n let extention;\r\n let value = inputValue.value;\r\n if (inputValue.internalName === sharePointInternalFileName || inputValue.internalName === sharePointInternalTitleName) {\r\n value = file.name;\r\n if (inputValue.internalName === sharePointInternalFileName) {\r\n extention = file.extension;\r\n }\r\n } else {\r\n value = originalInputValues.find(x => x.internalName === inputValue.internalName)?.value;\r\n }\r\n\r\n if (selectedItem) {\r\n if (inputValue.xml && inputValue.xml.DisplayName) {\r\n const colName = inputValue.xml.DisplayName.trim().toLowerCase(); //directly from sharepoint\r\n const spColumnNames = emailMapper.getAllListedColumns(); //list of all saved columns we should check for mapping\r\n const spColumnName = spColumnNames.find(col => col.toLowerCase() === colName); //either returns undefined or a sharepoint column name \r\n if (spColumnName) {\r\n const mappedResult = emailMapper.getOfficeJSToEmailMapping(spColumnName, selectedItem);\r\n if (mappedResult.mappedVal?.value) {\r\n value = DefaultValueService.setMappedDefault(inputValue, mappedResult.mappedVal);\r\n }\r\n }\r\n }\r\n }\r\n\r\n let hasError = inputValue.hasError;\r\n if (inputValue.internalName === sharePointInternalFileName) {\r\n hasError = false;\r\n }\r\n else if (inputValue.xml?.Required === \"TRUE\" && value) {\r\n hasError = false;\r\n }\r\n\r\n return {\r\n ...inputValue,\r\n hasError,\r\n value,\r\n extention\r\n }\r\n })),\r\n }\r\n }));\r\n\r\n setFileOptions(options);\r\n setSelectedFile((options as any[])[0]);\r\n setFieldsLoaded(true);\r\n }\r\n else {\r\n const selectedOption = fileOptions.find(x => x.isSelectedFile);\r\n setSelectedFile(selectedOption ? selectedOption : (fileOptions as any[])[0]);\r\n setFieldsLoaded(true);\r\n }\r\n }\r\n\r\n const onPanelCLose = () => {\r\n generalModule.setIsMultiMetaFileUpdatePanelOpen(false);\r\n closePanel();\r\n }\r\n\r\n const updateSharepointMetadataToSave = (metadata: SharePointInputData[], informationProtectionId: string, changedIndex?: number) => {\r\n try {\r\n if (changedIndex !== undefined) {\r\n const changedInput = metadata.find(x => x.index === changedIndex);\r\n if (changedInput?.internalName === sharePointInternalFileName) {\r\n setUpdatedName(changedInput.value);\r\n }\r\n }\r\n\r\n const newFileOptions = fileOptions.map(option => {\r\n if (selectedFile && selectedFile?.key === option.key) {\r\n return {\r\n ...option,\r\n isModified: true,\r\n fileInputValues: metadata.map(inputValue => {\r\n let value = inputValue.value;\r\n\r\n return {\r\n ...inputValue,\r\n value\r\n }\r\n })\r\n }\r\n }\r\n\r\n return {\r\n ...option\r\n }\r\n });\r\n\r\n setFileOptions(newFileOptions);\r\n } catch (error) {\r\n logger(error, \"CMMultipleFilesMetaDataPanel.tsx (updateSharepointMetadataToSave)\");\r\n }\r\n };\r\n\r\n const checkFileForDuplicates = async (updatedName?: string) => {\r\n if (selectedFileRef.current?.file) {\r\n try {\r\n const file: IFileToUpload = { ...selectedFileRef.current.file, name: updatedName ? updatedName : selectedFileRef.current.file.name };\r\n\r\n let preCommitResult: IFilePreCommitResult;\r\n if (!file.isFolder && !file.parentFolderId) {\r\n\r\n let dest: string;\r\n if (currentDirectory?.isTeamsRootFolder && !currentDirectory.parentId) {\r\n dest = await getDriveRootWebUrl(currentDirectory.id);\r\n }\r\n else {\r\n dest = `${currentDirectory.webUrl}/${currentDirectory.directory}`;\r\n }\r\n\r\n preCommitResult = await getFilePreCommitInfo({\r\n accessToken: await authModule.getSharePointAccessToken(),\r\n destinationUrl: dest,\r\n siteUrl: currentDirectory.webUrl,\r\n fileName: (file.isMainMailItem && convertEmailToPDF) || (saveMode === SaveMode.SaveAsPdf && file.canSaveAsPDF) ? `${file.name}.pdf` : `${file.name}.${file.extension}`,\r\n autoFolderCreation: !(new FolderView(siteInfo, currentDirectory).canViewFolder())\r\n });\r\n }\r\n\r\n if (!preCommitResult) {\r\n preCommitResult = { exists: false, checkedOut: false, checkedOutBy: null, locked: false, lockedBy: null };\r\n }\r\n\r\n const fileToSet: IFileToUpload = {\r\n ...file,\r\n isDuplicate: preCommitResult.exists,\r\n filePreCommitResult: preCommitResult\r\n }\r\n\r\n dispatch(setFile(fileToSet));\r\n\r\n const updatedFileOptions = fileOptions.map(option => {\r\n if (selectedFileRef.current.key === option.key) {\r\n return {\r\n ...option,\r\n fileInputValues: option.fileInputValues.map(inputValue => {\r\n return {\r\n ...inputValue,\r\n hasError: (inputValue.internalName === sharePointInternalFileName && preCommitResult.exists) ? true : inputValue.hasError,\r\n errorMessage: (inputValue.internalName === sharePointInternalFileName && preCommitResult.exists) ? languageStrings.FileSameName : inputValue.errorMessage,\r\n }\r\n }),\r\n file: fileToSet,\r\n name: fileToSet.name,\r\n text: fileToSet.name\r\n }\r\n }\r\n\r\n return {\r\n ...option\r\n }\r\n });\r\n\r\n setSelectedFile(updatedFileOptions.find(x => x.key === selectedFileRef.current.key));\r\n setFileOptions(updatedFileOptions);\r\n }\r\n catch (error) {\r\n logger(error, \"CMMultipleFilesMetaDataPanel.tsx (checkFileNamesForDuplicates)\");\r\n }\r\n }\r\n setCheckForDuplicates(false);\r\n setVerifyingFiles(false);\r\n }\r\n\r\n const onFileChange = (event: React.FormEvent, selectedOption?: FileOption, index?: number) => {\r\n const newFileOptions = fileOptions.map(option => {\r\n return {\r\n ...option,\r\n isSelectedFile: selectedOption.key === option.key ? true : false,\r\n }\r\n })\r\n setFileOptions(newFileOptions);\r\n\r\n const option = newFileOptions.find(x => x.key === selectedOption.key);\r\n setSelectedFile(option);\r\n setUpdatedName(option.file.name);\r\n }\r\n\r\n const setSelectedIndividualFile = (selectedIndividualFile: FileOption) => {\r\n setSelectedFile(selectedIndividualFile);\r\n\r\n setFileOptions(fileOptions.map(fileOption => {\r\n if (fileOption.key === selectedIndividualFile.key) {\r\n return {\r\n ...selectedIndividualFile,\r\n isModified: true\r\n }\r\n }\r\n\r\n return { ...fileOption }\r\n }));\r\n }\r\n\r\n const isSaveAllFilesButtonDisabled = React.useMemo(() => {\r\n if (verifyingFiles || isBusySaving || selectedFile?.isSaving) {\r\n return true;\r\n }\r\n\r\n if (currentSharepointFolder.userPermissions?.canEditListItem === false) {\r\n setSaveAllFilesDisabledTooltip(languageStrings.WrongUserPermissionsUpdate);\r\n return true;\r\n }\r\n\r\n if (selectedFile?.file?.isDuplicate && !selectedFile?.canOverwrite) {\r\n setSaveAllFilesDisabledTooltip(languageStrings.OverwriteRequired);\r\n return true;\r\n }\r\n\r\n let isDisabled = false;\r\n fileOptions.forEach(fileOption => {\r\n if (!isDisabled && fileOption?.file?.isDuplicate && !fileOption?.canOverwrite) {\r\n isDisabled = true;\r\n }\r\n });\r\n\r\n setSaveAllFilesDisabledTooltip(isDisabled ? languageStrings.OverwriteRequired : \"\");\r\n return isDisabled;\r\n }, [currentSharepointFolder, selectedFile, fileOptions, verifyingFiles, isBusySaving]);\r\n\r\n const isSaveFileButtonDisabled = React.useMemo(() => {\r\n if (verifyingFiles || isBusySaving) {\r\n return true;\r\n }\r\n\r\n if (currentSharepointFolder.userPermissions?.canEditListItem === false) {\r\n setSaveFileDisabledTooltip(languageStrings.WrongUserPermissionsUpdate);\r\n return true;\r\n }\r\n\r\n setSaveFileDisabledTooltip(\"\");\r\n return false;\r\n }, [currentSharepointFolder, selectedFile, verifyingFiles, isBusySaving])\r\n\r\n const onRenderOption = (option: FileOption): JSX.Element => {\r\n return (\r\n \r\n \r\n \r\n {option.text}\r\n \r\n \r\n );\r\n };\r\n\r\n const onRenderTitle = (options: FileOption[]): JSX.Element => {\r\n const option = options?.length > 0 && options[0];\r\n return (\r\n \r\n \r\n \r\n {option?.text}\r\n \r\n \r\n );\r\n };\r\n\r\n const onRenderFooterContent = React.useCallback(\r\n () => (\r\n \r\n {canConvertToPDF\r\n && setSaveMode(checked ? SaveMode.SaveAsPdf : SaveMode.Default)}\r\n />}\r\n \r\n {\r\n saveFiles(saveMode, undefined, selectionOpen, files.some(x => x.parentFolderId));\r\n setSelectionOpen(false);\r\n }}\r\n text={verifyingFiles ? languageStrings.VerifyingFiles : savingButtonProps?.text}\r\n >\r\n {isBusy && }\r\n \r\n \r\n \r\n ),\r\n [saveAllFilesDisabledTooltip, isSaveAllFilesButtonDisabled, verifyingFiles, saveFileDisabledTooltip, isSaveFileButtonDisabled, selectedFile, isBusy, selectionOpen, saveMode, savingButtonProps, files],\r\n );\r\n\r\n return (\r\n onPanelCLose()}\r\n isLightDismiss={false}\r\n closeButtonAriaLabel=\"Close\"\r\n type={generalModule.isInConentMangerMode() ? PanelType.custom : PanelType.smallFluid}\r\n customWidth={generalModule.isInConentMangerMode() ? '350px' : undefined}\r\n styles={panelCssStyles}\r\n onRenderFooterContent={onRenderFooterContent}\r\n isFooterAtBottom={true}\r\n >\r\n {selectionOpen &&
\r\n {spHasDuplicateFiles && { onCancel(selectedFile); setSelectionOpen(false); }} />}\r\n {showSelectVersion && { onCancel(selectedFile); setSelectionOpen(false); }} labelFontSize={16} paddingTop={0} paddingLeft={0} />}\r\n
}\r\n \r\n \r\n {selectedFile?.isSaving === true &&\r\n \r\n \r\n {`${languageStrings.SavingFiles}...`}\r\n \r\n \r\n }\r\n {selectedFile?.savingSuccess === true && {languageStrings.FileSaveSuccessSingle}}\r\n {selectedFile?.savingError === true && {languageStrings.ErrorMessageGeneric}}\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 )\r\n}","import { Selection, CommandBar, DetailsList, DetailsListLayoutMode, Dialog, DialogContent, DialogType, IColumn, ICommandBarItemProps, ICommandBarStyles, IDialogContentProps, Link, mergeStyleSets, ScrollablePane, ScrollbarVisibility, Spinner, SpinnerSize, PanelType, IPanelStyles, Panel, ConstrainMode } from \"@fluentui/react\";\r\nimport dayjs from \"dayjs\";\r\nimport React from \"react\";\r\nimport { useSelector } from \"react-redux\";\r\nimport { useLazyDeleteAllVersionsQuery, useLazyDeleteVersionByLabelQuery, useLazyGetItemByUniqueIDVersionsQuery, useLazyGetItemVersionsQuery, useLazyRestoreVersionByLabelQuery, useLazyUnpublishItemQuery } from \"../../src/taskpane/components/_v2/redux/api/sharepoint/api-sharepoint-slice\";\r\nimport { RootState } from \"../../src/taskpane/components/_v2/redux/storeMain\";\r\nimport { currentSharepointFolderUserPermissions } from \"../../src/taskpane/redux/models/reduxModels\";\r\nimport { getUserEffectivePermissions, getUserEffectivePermissionsFromMask } from \"../../src/taskpane/services/SharePointRestServices\";\r\nimport authModule from \"../../utilities/AuthModule\";\r\nimport generalModule from \"../../utilities/GeneralModule\";\r\nimport { LanguageContext } from \"../../utilities/LocalizationModule\";\r\nimport { logger } from \"../../utilities/logger\";\r\nimport { CMConfirmModal } from \"./CMConfirmModal\";\r\n\r\nconst classNames = mergeStyleSets({\r\n wrapper: {\r\n height: \"300px\",\r\n position: \"relative\",\r\n }\r\n});\r\n\r\nconst panelStyles: Partial = {\r\n content: {\r\n paddingLeft: 10,\r\n paddingRight: 10\r\n }\r\n}\r\n\r\nconst commandBarStyle: Partial = {\r\n root: {\r\n borderTop: '1px solid rgb(237, 235, 233);',\r\n borderBottom: '1px solid rgb(237, 235, 233);',\r\n paddingLeft: 0,\r\n paddingRight: 10,\r\n paddingBottom: 3,\r\n paddingTop: 3\r\n }\r\n};\r\n\r\nconst formatBytes = (bytes: number, decimals: number = 2): string => {\r\n if (bytes === 0) return '0 Bytes';\r\n\r\n const k = 1024;\r\n const dm = decimals < 0 ? 0 : decimals;\r\n const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\r\n\r\n const i = Math.floor(Math.log(bytes) / Math.log(k));\r\n\r\n return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i];\r\n}\r\n\r\nfunction _copyAndSort(items: T[], columnKey: string, isSortedDescending?: boolean): T[] {\r\n const key = columnKey as keyof T;\r\n return items.slice(0).sort((a: T, b: T) => ((isSortedDescending ? a[key] < b[key] : a[key] > b[key]) ? 1 : -1));\r\n};\r\n\r\nconst _getKey = (item: any, index?: number): string => {\r\n return item?.key;\r\n};\r\n\r\nexport interface ICMVersionHistoryModalProps {\r\n selectedItem?: any;\r\n selectedAddinItem?: any;\r\n showDialog: boolean;\r\n isInOneDrive: boolean;\r\n closeDialog: () => void;\r\n}\r\n\r\nexport const CMVersionHistoryModal = ({ selectedItem, selectedAddinItem, showDialog, isInOneDrive, closeDialog }: ICMVersionHistoryModalProps) => {\r\n const languageStrings = React.useContext(LanguageContext);\r\n\r\n const currentDirectory = useSelector((state: RootState) => state.workingDirectories.workingDirectories.length > 0 ? state.workingDirectories.workingDirectories[state.workingDirectories.workingDirectories.length - 1] : null);\r\n const currentSharepointFolder = useSelector((state: RootState) => state.currentSharepointFolder);\r\n const oneDriveRootDetails = useSelector((state: RootState) => state.workingDirectories.oneDriveRootDetails);\r\n\r\n const [getItemVersions] = useLazyGetItemVersionsQuery();\r\n const [getItemByUniqueIdVersions] = useLazyGetItemByUniqueIDVersionsQuery();\r\n const [restoreVersionByLabel] = useLazyRestoreVersionByLabelQuery();\r\n const [deleteVersionByLabel] = useLazyDeleteVersionByLabelQuery();\r\n const [deleteAllVersions] = useLazyDeleteAllVersionsQuery();\r\n const [unpublishItem] = useLazyUnpublishItemQuery();\r\n\r\n const [userPermissions, setUserPermissions] = React.useState();\r\n const [fileVersions, setFileVersions] = React.useState([]);\r\n const [itemVersions, setItemVersions] = React.useState([]);\r\n const [columns, setColumns] = React.useState([]);\r\n const [commandbarItems, setCommandbarItems] = React.useState([]);\r\n const [commandbarFarItems, setCommandbarFarItems] = React.useState([]);\r\n\r\n const [selectedVersions, setSelectedVersions] = React.useState([]);\r\n const [selectedVersion, setSelectedVersion] = React.useState();\r\n\r\n const [updateVersionList, setUpdateVersionList] = React.useState();\r\n const [waitFor, setWaitFor] = React.useState(false);\r\n const [waitForText, setWaitForText] = React.useState('');\r\n const [selectionCleared, setSelectionCleared] = React.useState(false);\r\n\r\n const [showDeleteAllDialog, setShowDeleteAllDialog] = React.useState(false);\r\n const [showDeleteAllMinorDialog, setShowDeleteAllMinorDialog] = React.useState(false);\r\n\r\n const _selection = React.useRef(new Selection({\r\n onSelectionChanged: () => _getSelectionDetails()\r\n }));\r\n\r\n const _getSelectionDetails = () => {\r\n setSelectedVersions(_selection.current.getSelection());\r\n\r\n if (_selection.current.count === 1) {\r\n let version: any = _selection.current.getSelection()[0];\r\n setSelectedVersion(version);\r\n } else {\r\n setSelectedVersion(null);\r\n }\r\n };\r\n\r\n React.useEffect(() => {\r\n if (selectionCleared) {\r\n _selection.current.setAllSelected(false);\r\n setSelectedVersions(_selection.current.getSelection());\r\n setSelectedVersion(null);\r\n setSelectionCleared(false);\r\n }\r\n }, [selectionCleared]);\r\n\r\n React.useEffect(() => {\r\n (async () => {\r\n let permissions: currentSharepointFolderUserPermissions;\r\n if (selectedItem && selectedItem.PermMask) {\r\n permissions = getUserEffectivePermissionsFromMask(selectedItem.PermMask);\r\n }\r\n else if (selectedAddinItem && selectedAddinItem.PermMask) {\r\n permissions = getUserEffectivePermissionsFromMask(selectedAddinItem.PermMask);\r\n }\r\n\r\n if (!permissions) {\r\n const accessToken: string = isInOneDrive ? await authModule.getOneDriveAccessToken() : await authModule.getSharePointAccessToken();\r\n const webUrl: string = isInOneDrive ? oneDriveRootDetails?.sharePointSiteUrl : currentDirectory?.webUrl;\r\n const uniqueId: string = selectedItem ? selectedItem.UniqueId?.replace(\"{\", \"\").replace(\"}\", \"\") : selectedAddinItem.UniqueId;\r\n if (webUrl && currentSharepointFolder?.sharepointListId && uniqueId) {\r\n permissions = await getUserEffectivePermissions(accessToken, webUrl, currentSharepointFolder.sharepointListId, uniqueId);\r\n }\r\n }\r\n\r\n setUserPermissions(permissions);\r\n })();\r\n }, [selectedItem, selectedAddinItem, currentSharepointFolder]);\r\n\r\n React.useEffect(() => {\r\n (async () => {\r\n try {\r\n const [versions, versionsAlt] = await Promise.all([\r\n getItemVersions({\r\n siteUrl: isInOneDrive ? oneDriveRootDetails?.sharePointSiteUrl : currentDirectory?.webUrl,\r\n uniqueId: selectedItem ? selectedItem.UniqueId.replace(\"{\", \"\").replace(\"}\", \"\") : selectedAddinItem.UniqueId,\r\n accessToken: isInOneDrive ? await authModule.getOneDriveAccessToken() : await authModule.getSharePointAccessToken(),\r\n }).unwrap(),\r\n\r\n getItemByUniqueIdVersions({\r\n siteUrl: isInOneDrive ? oneDriveRootDetails?.sharePointSiteUrl : currentDirectory?.webUrl,\r\n sharePointListId: currentSharepointFolder.sharepointListId,\r\n uniqueId: selectedItem ? selectedItem.UniqueId.replace(\"{\", \"\").replace(\"}\", \"\") : selectedAddinItem.UniqueId,\r\n accessToken: isInOneDrive ? await authModule.getOneDriveAccessToken() : await authModule.getSharePointAccessToken(),\r\n }).unwrap()\r\n ]);\r\n\r\n if (versions?.d?.results && versionsAlt?.value) {\r\n const fileVersions = versions.d.results;\r\n const itemVersions = versionsAlt.value\r\n .map(item => {\r\n let fileSize: number = fileVersions.find(fileVersion => fileVersion.VersionLabel === item.VersionLabel)?.Size;\r\n if (isNaN(fileSize)) {\r\n fileSize = Number(item.File_x005f_x0020_x005f_Size);\r\n }\r\n return { ...item, VersionLabelNumeric: Number(item.VersionLabel), FileSizeNumeric: fileSize };\r\n });\r\n\r\n setColumns([\r\n {\r\n key: 'version',\r\n name: languageStrings.Version,\r\n fieldName: 'VersionLabelNumeric',\r\n minWidth: 65,\r\n maxWidth: 65,\r\n isResizable: true,\r\n isSorted: true,\r\n isSortedDescending: true,\r\n onRender: (item: any) => {\r\n return (\r\n {item?.VersionLabel}\r\n )\r\n }\r\n },\r\n {\r\n key: 'modified',\r\n name: languageStrings.Modified,\r\n fieldName: 'Modified',\r\n minWidth: 120,\r\n maxWidth: 120,\r\n isResizable: true,\r\n onRender: (item: any) => {\r\n let versionUrl: string;\r\n const siteUrl: string = isInOneDrive ? oneDriveRootDetails?.sharePointSiteUrl : currentDirectory?.webUrl;\r\n const fileVersion = fileVersions.find(fileVersion => fileVersion.VersionLabel === item.VersionLabel);\r\n if (fileVersion) {\r\n versionUrl = (!siteUrl.endsWith(\"/\") ? siteUrl + \"/\" : siteUrl) + fileVersion.Url;\r\n }\r\n else {\r\n const siteOrigin: string = new URL(siteUrl)?.origin;\r\n versionUrl = (siteOrigin.endsWith(\"/\") ? siteOrigin.slice(0, -1) : siteOrigin) + item.FileRef;\r\n }\r\n return (\r\n <>\r\n {dayjs(item.Modified).format('L LT')}\r\n {currentSharepointFolder?.enableMinorVersions && item.IsCurrentVersion === true && (item.VersionId % 512) === 0 &&\r\n
\r\n {languageStrings.PublishedMajorVersion}\r\n
}\r\n \r\n )\r\n },\r\n },\r\n {\r\n key: 'modifiedBy',\r\n name: languageStrings.ModifiedBy,\r\n minWidth: 120,\r\n maxWidth: 120,\r\n isResizable: true,\r\n onRender: (item: any) => {\r\n return (\r\n {item?.Editor?.LookupValue}\r\n )\r\n },\r\n },\r\n {\r\n key: 'size',\r\n name: languageStrings.Size,\r\n fieldName: \"FileSizeNumeric\",\r\n minWidth: 50,\r\n maxWidth: 50,\r\n isResizable: true,\r\n onRender: (item: any) => {\r\n return (\r\n {formatBytes(item.FileSizeNumeric, 1)}\r\n )\r\n },\r\n },\r\n {\r\n key: 'comments',\r\n name: 'Comments',\r\n minWidth: 100,\r\n maxWidth: 300,\r\n isResizable: true,\r\n onRender: (item: any) => {\r\n let versionComment: string;\r\n const fileVersion = fileVersions.find(fileVersion => fileVersion.VersionLabel === item.VersionLabel);\r\n if (fileVersion) {\r\n versionComment = fileVersion.CheckInComment;\r\n }\r\n else {\r\n versionComment = item.OData__x005f_CheckinComment;\r\n }\r\n\r\n return (\r\n {versionComment}\r\n )\r\n },\r\n },\r\n ]);\r\n\r\n setFileVersions(fileVersions);\r\n setItemVersions(itemVersions);\r\n }\r\n } catch (error) {\r\n logger(error, \"CMVersionHistoryModal.tsx (init)\");\r\n }\r\n\r\n setSelectionCleared(true);\r\n })();\r\n }, [updateVersionList]);\r\n\r\n React.useEffect(() => {\r\n (async () => {\r\n try {\r\n const items: ICommandBarItemProps[] = [];\r\n\r\n if (selectedVersions.length === 0 && userPermissions?.canDeleteVersions) {\r\n items.push(\r\n {\r\n key: 'DeleteAll',\r\n disabled: itemVersions?.length === 0 || waitFor === true,\r\n text: languageStrings.VersionsDeleteAll,\r\n iconProps: { iconName: 'Delete' },\r\n onClick: () => {\r\n setShowDeleteAllDialog(true);\r\n }\r\n })\r\n\r\n if (currentSharepointFolder.enableMinorVersions === true && userPermissions?.canDeleteVersions && itemVersions.some(x => !x.IsCurrentVersion && x.VersionId % 512 > 0)) {\r\n items.push(\r\n {\r\n key: 'DeleteMinors',\r\n disabled: itemVersions?.length === 0 || waitFor === true,\r\n text: languageStrings.VersionsDeleteMinors,\r\n iconProps: { iconName: 'DependencyRemove' },\r\n onClick: () => {\r\n setShowDeleteAllMinorDialog(true);\r\n }\r\n })\r\n }\r\n }\r\n\r\n if (selectedVersions.length === 1) {\r\n items.push(\r\n {\r\n key: 'view',\r\n text: languageStrings.VersionView,\r\n disabled: waitFor === true,\r\n iconProps: { iconName: 'OpenFile' },\r\n onClick: () => {\r\n let versionUrl: string;\r\n const siteUrl: string = isInOneDrive ? oneDriveRootDetails?.sharePointSiteUrl : currentDirectory?.webUrl;\r\n const fileVersion = fileVersions.find(fileVersion => fileVersion.VersionLabel === selectedVersion.VersionLabel);\r\n if (fileVersion) {\r\n versionUrl = (!siteUrl.endsWith(\"/\") ? siteUrl + \"/\" : siteUrl) + fileVersion.Url;\r\n }\r\n else {\r\n const siteOrigin: string = new URL(siteUrl)?.origin;\r\n versionUrl = (siteOrigin.endsWith(\"/\") ? siteOrigin.slice(0, -1) : siteOrigin) + selectedVersion.FileRef;\r\n }\r\n\r\n window.open(versionUrl, \"_blank\");\r\n }\r\n });\r\n\r\n const isPublishedMajorVersion: boolean = selectedVersion.IsCurrentVersion === true && (selectedVersion.VersionId % 512) === 0;\r\n const isPublishedMajorSucceededByDraft: boolean = isPublishedMajorVersion && itemVersions.find(ver => ver.IsCurrentVersion)?.VersionId > selectedVersion.VersionId;\r\n if (userPermissions?.canEditListItem && (!selectedVersion.IsCurrentVersion || isPublishedMajorSucceededByDraft)) {\r\n items.push({\r\n key: 'restore',\r\n disabled: waitFor === true,\r\n text: languageStrings.VersionRestore,\r\n iconProps: { iconName: 'Refresh' },\r\n onClick: () => {\r\n restoreVersion();\r\n }\r\n });\r\n\r\n if (!isPublishedMajorVersion && userPermissions?.canDeleteVersions) {\r\n items.push(\r\n {\r\n key: 'delete',\r\n disabled: waitFor === true,\r\n text: languageStrings.VersionDelete,\r\n iconProps: { iconName: 'Delete' },\r\n onClick: () => {\r\n deleteVersion();\r\n }\r\n }\r\n );\r\n }\r\n }\r\n\r\n if (isPublishedMajorVersion && !isPublishedMajorSucceededByDraft && userPermissions?.canEditListItem) {\r\n items.push(\r\n {\r\n key: 'unpublish',\r\n disabled: waitFor === true,\r\n name: languageStrings.Unpublish,\r\n iconProps: { iconName: \"UnpublishContent\" },\r\n onClick: () => {\r\n onUnpublishVersion(selectedVersion);\r\n }\r\n }\r\n )\r\n }\r\n }\r\n\r\n if (selectedVersions.length > 1 && userPermissions?.canDeleteVersions) {\r\n items.push(\r\n {\r\n key: 'deletemulti',\r\n disabled: waitFor === true,\r\n text: languageStrings.VersionDelete,\r\n iconProps: { iconName: 'Delete' },\r\n onClick: () => {\r\n deleteVersion();\r\n }\r\n }\r\n );\r\n }\r\n\r\n setCommandbarItems(items)\r\n\r\n const farItems: ICommandBarItemProps[] = [];\r\n if (waitFor) {\r\n farItems.push(\r\n {\r\n key: \"loadingFiles\",\r\n text: waitForText,\r\n disabled: true,\r\n onRenderIcon: () => {\r\n return \r\n }\r\n }\r\n )\r\n }\r\n\r\n if (selectedVersions.length > 0) {\r\n farItems.push(\r\n {\r\n key: \"selectedFileCount\",\r\n text: `${selectedVersions.length} ${languageStrings.Selected.toLowerCase()}`,\r\n disabled: waitFor === true,\r\n iconProps: { iconName: \"Clear\" },\r\n onClick: () => {\r\n setSelectionCleared(true);\r\n }\r\n }\r\n )\r\n }\r\n\r\n setCommandbarFarItems(farItems)\r\n\r\n } catch (error) {\r\n logger(error, \"CMVersionHistoryModal.tsx (Commandbar init)\");\r\n }\r\n })();\r\n }, [selectedVersions, fileVersions, itemVersions, waitFor, currentSharepointFolder, userPermissions]);\r\n\r\n const restoreVersion = async () => {\r\n setWaitForText(`${languageStrings.Restoring}...`);\r\n setWaitFor(true);\r\n\r\n try {\r\n const results = await restoreVersionByLabel({\r\n siteUrl: isInOneDrive ? oneDriveRootDetails?.sharePointSiteUrl : currentDirectory?.webUrl,\r\n uniqueId: selectedItem ? selectedItem.UniqueId.replace(\"{\", \"\").replace(\"}\", \"\") : selectedAddinItem.UniqueId,\r\n accessToken: isInOneDrive ? await authModule.getOneDriveAccessToken() : await authModule.getSharePointAccessToken(),\r\n versionLabel: selectedVersion.VersionLabel\r\n }).unwrap();\r\n } catch (error) {\r\n logger(error, \"CMVersionHistoryModal.tsx (restoreVersion)\");\r\n }\r\n\r\n setWaitFor(false);\r\n setWaitForText('')\r\n setUpdateVersionList(prev => prev ? !prev : true);\r\n }\r\n\r\n const deleteVersion = async () => {\r\n setWaitForText(`${languageStrings.Deleting}...`);\r\n setWaitFor(true);\r\n\r\n try {\r\n await Promise.all(selectedVersions.map(async version => {\r\n if (!version.IsCurrentVersion) {\r\n await deleteVersionByLabel({\r\n siteUrl: isInOneDrive ? oneDriveRootDetails?.sharePointSiteUrl : currentDirectory?.webUrl,\r\n uniqueId: selectedItem ? selectedItem.UniqueId.replace(\"{\", \"\").replace(\"}\", \"\") : selectedAddinItem.UniqueId,\r\n accessToken: isInOneDrive ? await authModule.getOneDriveAccessToken() : await authModule.getSharePointAccessToken(),\r\n versionLabel: version.VersionLabel\r\n }).unwrap();\r\n }\r\n }));\r\n } catch (error) {\r\n logger(error, \"CMVersionHistoryModal.tsx (deleteVersion)\");\r\n }\r\n\r\n setWaitFor(false);\r\n setWaitForText('')\r\n setUpdateVersionList(prev => prev ? !prev : true);\r\n }\r\n\r\n const onUnpublishVersion = async (item: any) => {\r\n setWaitFor(true);\r\n\r\n try {\r\n await unpublishItem({\r\n siteUrl: isInOneDrive ? oneDriveRootDetails?.sharePointSiteUrl : currentDirectory?.webUrl,\r\n uniqueId: item.UniqueId.replace(\"{\", \"\").replace(\"}\", \"\"),\r\n accessToken: isInOneDrive ? await authModule.getOneDriveAccessToken() : await authModule.getSharePointAccessToken(),\r\n }).unwrap();\r\n } catch (error) {\r\n logger(error, \"CMVersionHistoryModal.tsx (onUnpublishVersion)\");\r\n }\r\n\r\n setWaitFor(false);\r\n setUpdateVersionList(prev => prev ? !prev : true);\r\n }\r\n\r\n const onDeleteAllVersions = async () => {\r\n setWaitForText(`${languageStrings.Deleting}...`);\r\n setWaitFor(true);\r\n\r\n try {\r\n const results = await deleteAllVersions({\r\n siteUrl: isInOneDrive ? oneDriveRootDetails?.sharePointSiteUrl : currentDirectory?.webUrl,\r\n uniqueId: selectedItem ? selectedItem.UniqueId.replace(\"{\", \"\").replace(\"}\", \"\") : selectedAddinItem.UniqueId,\r\n accessToken: isInOneDrive ? await authModule.getOneDriveAccessToken() : await authModule.getSharePointAccessToken()\r\n }).unwrap();\r\n } catch (error) {\r\n logger(error, \"CMVersionHistoryModal.tsx (onDeleteAllVersions)\");\r\n }\r\n\r\n setWaitFor(false);\r\n setWaitForText('')\r\n setUpdateVersionList(prev => prev ? !prev : true);\r\n }\r\n\r\n const onDeleteAllMinorVersions = async () => {\r\n setWaitForText(`${languageStrings.Deleting}...`);\r\n setWaitFor(true);\r\n\r\n try {\r\n await Promise.all(itemVersions.map(async version => {\r\n if (!version.IsCurrentVersion && version.VersionId % 512 > 0) {\r\n await deleteVersionByLabel({\r\n siteUrl: isInOneDrive ? oneDriveRootDetails?.sharePointSiteUrl : currentDirectory?.webUrl,\r\n uniqueId: selectedItem ? selectedItem.UniqueId.replace(\"{\", \"\").replace(\"}\", \"\") : selectedAddinItem.UniqueId,\r\n accessToken: isInOneDrive ? await authModule.getOneDriveAccessToken() : await authModule.getSharePointAccessToken(),\r\n versionLabel: version.VersionLabel\r\n }).unwrap();\r\n }\r\n }));\r\n } catch (error) {\r\n logger(error, \"CMVersionHistoryModal.tsx (onDeleteAllMinorVersions)\");\r\n }\r\n\r\n setWaitFor(false);\r\n setWaitForText('')\r\n setUpdateVersionList(prev => prev ? !prev : true);\r\n }\r\n\r\n const onColumnHeaderClick = React.useCallback((ev: React.MouseEvent, column: IColumn): void => {\r\n const newColumns: IColumn[] = columns.slice();\r\n const currColumn: IColumn = newColumns.filter(currCol => column.key === currCol.key)[0];\r\n newColumns.forEach((newCol: IColumn) => {\r\n if (newCol === currColumn) {\r\n currColumn.isSortedDescending = !currColumn.isSortedDescending;\r\n currColumn.isSorted = true;\r\n } else {\r\n newCol.isSorted = false;\r\n newCol.isSortedDescending = true;\r\n }\r\n });\r\n setColumns(newColumns);\r\n setItemVersions(_copyAndSort(itemVersions, currColumn.fieldName!, currColumn.isSortedDescending));\r\n }, [columns, itemVersions, setColumns, setItemVersions]);\r\n\r\n const dialogContentProps: IDialogContentProps = {\r\n type: DialogType.normal,\r\n showCloseButton: true,\r\n closeButtonAriaLabel: 'Close',\r\n };\r\n\r\n return (\r\n \r\n {selectedItem && }\r\n {selectedAddinItem && closeDialog()}\r\n isLightDismiss\r\n closeButtonAriaLabel=\"Close\"\r\n type={PanelType.custom}\r\n customWidth={!generalModule.isInConentMangerMode() ? \"300px\" : \"450px\"}\r\n styles={panelStyles}\r\n >\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n }\r\n
\r\n )\r\n};","import { FileIconType, getFileTypeIconAsUrl, IFileTypeIconOptions } from \"@fluentui/react-file-type-icons\";\r\nimport { IGraphCreateShareableLinkRequest, ShareableLinkRequestScope, ShareableLinkRequestType } from \"../../src/taskpane/components/_v2/redux/api/graph/api-graph-interfaces\";\r\nimport { createItemShareableLink, getItemThumbnail } from \"../../src/taskpane/services/GraphService\";\r\nimport { getExtension } from \"../../src/taskpane/components/helpers/stringHelper\";\r\nimport { SharePointFolderContentTypeIds } from \"../../src/taskpane/config/constants\";\r\nimport { ICardRequest } from \"../../src/taskpane/interfaces/ICardRequest\";\r\nimport * as microsoftTeams from '@microsoft/teams-js'\r\n\r\nconst shareToTeams = async (driveId, itemId, isDocument, fileName, contentTypeId, webUrl) => {\r\n\r\n const sharedLinkRequest: IGraphCreateShareableLinkRequest = {\r\n driveId: driveId,\r\n itemId: itemId,\r\n type: ShareableLinkRequestType.View,\r\n scope: ShareableLinkRequestScope.Anonymous\r\n };\r\n\r\n const [createLinkResult, thumbNailResult] = await Promise.all([\r\n createItemShareableLink(sharedLinkRequest),\r\n getItemThumbnail(driveId, itemId)\r\n ]);\r\n\r\n const iconType: IFileTypeIconOptions = isDocument\r\n ? { extension: getExtension(fileName), size: 32, imageFileType: \"png\" }\r\n : { type: contentTypeId?.startsWith(SharePointFolderContentTypeIds.documentSet) ? FileIconType.docset : FileIconType.folder, size: 32, imageFileType: \"png\" };\r\n\r\n const taskRequest: ICardRequest = {\r\n fileName: fileName,\r\n url: createLinkResult?.link?.webUrl ?? webUrl,\r\n iconUrl: getFileTypeIconAsUrl(iconType),\r\n thumbUrl: thumbNailResult?.url,\r\n };\r\n\r\n microsoftTeams.getContext((context) => {\r\n if (context.frameContext === \"content\") {\r\n microsoftTeams.sharing.shareWebContent({\r\n content: [\r\n {\r\n type: \"URL\",\r\n url: `${createLinkResult?.link?.webUrl ?? webUrl}`,\r\n // message: 'Send as Message',\r\n preview: true\r\n }\r\n ]\r\n });\r\n } else if (context.frameContext === \"task\") {\r\n microsoftTeams.tasks.submitTask(taskRequest);\r\n }\r\n });\r\n}\r\n\r\nexport default shareToTeams;","// customToast.js\r\nimport { toast, ToastContent } from \"react-toastify\";\r\n\r\nexport const customToast = {\r\n success(msg: ToastContent, options = {}) {\r\n return toast.success(msg, {\r\n ...options,\r\n className: \"toast-container toast-success-container\",\r\n });\r\n },\r\n error(msg: ToastContent, options = {}) {\r\n return toast.error(msg, {\r\n ...options,\r\n className: \"toast-container toast-error-container\",\r\n });\r\n },\r\n info(msg: ToastContent, options = {}) {\r\n return toast.info(msg, {\r\n ...options,\r\n className: \"toast-container toast-info-container\",\r\n });\r\n }\r\n};\r\n","import * as React from \"react\";\r\nimport { Spinner } from \"@fluentui/react/lib/Spinner\";\r\nimport { LanguageContext } from \"../../../utilities/LocalizationModule\";\r\nimport { IStackStyles, Stack, StackItem } from \"@fluentui/react\";\r\n\r\nconst loaderStackStyles: Partial = {\r\n root: { width: \"100%\", height: \"100%\", margin: 0, padding: 0, overflow: \"auto\" }\r\n};\r\n\r\ninterface ILoaderProps {\r\n label?: string;\r\n hideLabel?: boolean;\r\n hide?: boolean;\r\n}\r\n\r\nexport const Loader: React.FunctionComponent = props => {\r\n const languageStrings = React.useContext(LanguageContext);\r\n\r\n return (\r\n !props.hide && \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default Loader;\r\n","import { IBasePickerSuggestionsProps, IPersonaProps, ValidationState, NormalPeoplePicker, Label } from \"@fluentui/react\";\r\nimport React from \"react\";\r\nimport { useLazyGetUsersQuery } from \"../../redux/api/graph/api-graph-slice\";\r\nimport { IGraphGetUsersRequest, IGraphGetUsersResponse } from \"../../redux/api/graph/api-graph-interfaces\";\r\nimport authModule from \"../../../../../../utilities/AuthModule\";\r\nimport { logger } from \"../../../../../../utilities/logger\";\r\nimport { validateEmail } from \"../../../helpers/validateEmail\";\r\n\r\nexport interface ICustomPersonaProps extends IPersonaProps {\r\n isCustomEmail?: boolean;\r\n isGuest?: boolean;\r\n}\r\n\r\nexport interface IPeopleFinderProps {\r\n label: string;\r\n disabled?: boolean;\r\n selectedPersonasChanged: (selectedPersonas: ICustomPersonaProps[], customTextValue?: string) => void;\r\n}\r\n\r\nconst suggestionProps: IBasePickerSuggestionsProps = {\r\n noResultsFoundText: 'No results found',\r\n loadingText: 'Loading',\r\n showRemoveButtons: true,\r\n suggestionsAvailableAlertText: 'People Picker Suggestions available',\r\n};\r\n\r\nexport const PeopleFinder = ({ label, disabled, selectedPersonasChanged }: IPeopleFinderProps) => {\r\n const [mostRecentlyUsed, setMostRecentlyUsed] = React.useState([]);\r\n const selectedPersonas = React.useRef([]);\r\n\r\n const [getUsers] = useLazyGetUsersQuery();\r\n\r\n const picker = React.useRef(null);\r\n\r\n const onFilterChanged = async (filterText: string) => {\r\n if (filterText) {\r\n const request: IGraphGetUsersRequest = {\r\n filter: filterText,\r\n orderby: 'displayName',\r\n select: 'id,displayName,mail,userPrincipalName,userType'\r\n }\r\n let result: any;\r\n\r\n try {\r\n result = await getUsers({ request, accessToken: await authModule.getGraphAccessToken() }).unwrap();\r\n } catch (error) {\r\n logger(error, \"PeopleFinder.tsx (getUsers)\");\r\n }\r\n\r\n if (result) {\r\n const users: IGraphGetUsersResponse[] = result.value;\r\n\r\n const personas: ICustomPersonaProps[] = [];\r\n if (users?.length > 0) {\r\n users.forEach(user => {\r\n const validatedEmailAddress: string = user.mail ?? (validateEmail(user.userPrincipalName) ? user.userPrincipalName : undefined);\r\n if (validatedEmailAddress) {\r\n personas.push({\r\n text: user.displayName,\r\n secondaryText: validatedEmailAddress,\r\n isGuest: user.userType === \"Guest\"\r\n });\r\n }\r\n });\r\n } else if (validateEmail(filterText)) {\r\n personas.push({\r\n text: filterText,\r\n secondaryText: filterText,\r\n isGuest: true,\r\n isCustomEmail: true\r\n });\r\n }\r\n\r\n const filteredPersonas = sortResults(filterText, removeDuplicates(personas, selectedPersonas.current));\r\n setMostRecentlyUsed(filteredPersonas);\r\n\r\n return filteredPersonas;\r\n }\r\n }\r\n\r\n return [];\r\n };\r\n\r\n const onSelectedPersonasChange = (items: IPersonaProps[]) => {\r\n //item added\r\n if (items?.length > selectedPersonas.current?.length) {\r\n selectedPersonas.current = items;\r\n setMostRecentlyUsed(removeDuplicates(mostRecentlyUsed, selectedPersonas.current));\r\n }\r\n //item removed\r\n else if (items?.length < selectedPersonas.current?.length) {\r\n const itemRemoved = selectedPersonas.current.find(x => !items.includes(x));\r\n\r\n const newMostRecentlyList: IPersonaProps[] = [...mostRecentlyUsed];\r\n newMostRecentlyList.push(itemRemoved);\r\n\r\n selectedPersonas.current = items;\r\n\r\n setMostRecentlyUsed(removeDuplicates(newMostRecentlyList.sort((a, b) => (a.secondaryText > b.secondaryText) ? 1 : ((b.secondaryText > a.secondaryText) ? -1 : 0)), selectedPersonas.current));\r\n }\r\n }\r\n\r\n return
\r\n \r\n ) => {\r\n let customTextValue = \"\";\r\n if (!selectedPersonas.current.some(x => x.secondaryText?.toLowerCase() === ev.target.value?.toLowerCase() || x.primaryText?.toLowerCase() === ev.target.value?.toLowerCase())) {\r\n customTextValue = ev.target.value;\r\n }\r\n\r\n selectedPersonasChanged(selectedPersonas.current, customTextValue);\r\n }\r\n }}\r\n componentRef={picker}\r\n onInputChange={onInputChange}\r\n resolveDelay={300}\r\n />\r\n
;\r\n};\r\n\r\nconst sortResults = (input: string, data: ICustomPersonaProps[]): ICustomPersonaProps[] => {\r\n try {\r\n let first: ICustomPersonaProps[] = [];\r\n let others: ICustomPersonaProps[] = [];\r\n for (let i = 0; i < data.length; i++) {\r\n if (data[i].text.indexOf(input) == 0 || data[i].secondaryText.indexOf(input) == 0) {\r\n first.push(data[i]);\r\n } else {\r\n others.push(data[i]);\r\n }\r\n }\r\n first.sort((a, b) => a.text.toLowerCase() < b.text.toLowerCase() ? -1 : 1);\r\n others.sort((a, b) => a.text.toLowerCase() < b.text.toLowerCase() ? -1 : 1);\r\n // return (first.concat(others));\r\n return (first.concat(others).sort((a, b) => Number(a.isGuest) - Number(b.isGuest)));\r\n } catch (error) {\r\n console.warn(error);\r\n }\r\n return data;\r\n}\r\n\r\nfunction removeDuplicates(personas: IPersonaProps[], possibleDupes: IPersonaProps[]) {\r\n return personas.filter(persona => !listContainsPersona(persona, possibleDupes));\r\n}\r\n\r\nfunction listContainsPersona(persona: IPersonaProps, personas: IPersonaProps[]) {\r\n if (!personas || !personas.length || personas.length === 0) {\r\n return false;\r\n }\r\n return personas.filter(item => item.text === persona.text).length > 0;\r\n}\r\n\r\nfunction validateInput(input: string): ValidationState {\r\n if (input.indexOf('@') !== -1) {\r\n return ValidationState.valid;\r\n } else if (input.length > 1) {\r\n return ValidationState.warning;\r\n } else {\r\n return ValidationState.invalid;\r\n }\r\n}\r\n\r\n/**\r\n * Takes in the picker input and modifies it in whichever way\r\n * the caller wants, i.e. parsing entries copied from Outlook (sample\r\n * input: \"Aaron Reid \").\r\n *\r\n * @param input The text entered into the picker.\r\n */\r\nfunction onInputChange(input: string): string {\r\n const outlookRegEx = /<.*>/g;\r\n const emailAddress = outlookRegEx.exec(input);\r\n\r\n if (emailAddress && emailAddress[0]) {\r\n return emailAddress[0].substring(1, emailAddress[0].length - 1);\r\n }\r\n\r\n return input;\r\n}","import { FontSizes, FontWeights, Icon, ILabelStyles, Label, Stack } from \"@fluentui/react\";\r\nimport React from \"react\";\r\n\r\ninterface ISuccessErrorMessageProps {\r\n isSuccess?: boolean;\r\n isError?: boolean;\r\n successMessage?: string;\r\n errorMessage?: string;\r\n errorList?: string[];\r\n}\r\n\r\nexport const SuccessErrorMessage = (props: ISuccessErrorMessageProps) => {\r\n const { isSuccess, isError, successMessage, errorMessage, errorList} = props\r\n \r\n return (\r\n <>\r\n {isSuccess && (\r\n \r\n \r\n \r\n \r\n )}\r\n {isError && (\r\n
\r\n \r\n \r\n \r\n
    {errorList?.filter(Boolean).map((item, index) => (
  • {item}
  • ))}
\r\n
\r\n )}\r\n \r\n );\r\n};\r\n\r\nconst responseStyle: React.CSSProperties = {\r\n padding: 15,\r\n}\r\n\r\nconst errorStyle: React.CSSProperties = {\r\n ...responseStyle,\r\n backgroundColor: \"#fde7e9\",\r\n}\r\n\r\nconst errorLabel: ILabelStyles = {\r\n root: {\r\n fontSize: FontSizes.size16,\r\n fontWeight: FontWeights.semibold,\r\n margin: 0,\r\n padding: 0,\r\n color: \"#a80000\",\r\n textAlign: 'center'\r\n }\r\n}\r\n\r\nconst successStyle: React.CSSProperties = {\r\n ...responseStyle,\r\n backgroundColor: \"#dff6dd\",\r\n}\r\n\r\nconst successLabel: ILabelStyles = {\r\n root: {\r\n fontSize: FontSizes.size14,\r\n fontWeight: FontWeights.regular,\r\n margin: 0,\r\n padding: 0,\r\n color: \"#107c10\",\r\n }\r\n}\r\n","import { ChoiceGroup, IChoiceGroupOption } from \"@fluentui/react\";\r\nimport React from \"react\";\r\nimport { LanguageContext } from \"../../../../../../utilities/LocalizationModule\";\r\nimport { CheckinTypes } from \"../../redux/api/local/api-local-interfaces\";\r\n\r\nexport interface IVersionSelectorProps {\r\n multipleFilesSelected: boolean;\r\n level: number;\r\n majorVersion: number;\r\n minorVersion: number;\r\n checkinTypeChanged?: (checkinType: CheckinTypes) => void;\r\n}\r\n\r\nexport const VersionSelector = (props: IVersionSelectorProps) => {\r\n const languageStrings = React.useContext(LanguageContext);\r\n \r\n const { multipleFilesSelected, level, majorVersion, minorVersion, checkinTypeChanged } = props;\r\n const [options, setOptions] = React.useState([])\r\n let defaultSelectedKey = \"0\";\r\n\r\n React.useEffect(() => {\r\n let choiceOptions: IChoiceGroupOption[] = [];\r\n\r\n if (multipleFilesSelected) {\r\n choiceOptions.push(\r\n { key: '0', text: `${languageStrings.VersionMinorDraft}` },\r\n { key: '1', text: `${languageStrings.VersionMajorPublished}` }\r\n );\r\n } else {\r\n //major version\r\n if (level === 1) {\r\n choiceOptions.push(\r\n { key: '0', text: `${majorVersion}.${minorVersion + 1} ${languageStrings.VersionMinorDraft}` },\r\n { key: '1', text: `${majorVersion + 1}.0 ${languageStrings.VersionMajorPublished}` }\r\n );\r\n }\r\n\r\n //minor version\r\n if (level === 2) {\r\n choiceOptions.push(\r\n { key: '0', text: `${majorVersion}.${minorVersion + 1} ${languageStrings.VersionMinorDraft}` },\r\n { key: '1', text: `${majorVersion + 1}.0 ${languageStrings.VersionMajorPublished}` },\r\n { key: '2', text: `${majorVersion}.${minorVersion} ${languageStrings.VersionMinorOverwrite}` }\r\n );\r\n }\r\n\r\n //checked out\r\n if (level === 255) {\r\n choiceOptions.push(\r\n { key: '0', text: `${majorVersion}.${minorVersion} ${languageStrings.VersionMinorDraft}` },\r\n { key: '1', text: `${majorVersion + 1}.0 ${languageStrings.VersionMajorPublished}` }\r\n );\r\n\r\n if (minorVersion > 1) {\r\n choiceOptions.push(\r\n { key: '2', text: `${majorVersion}.${minorVersion - 1} ${languageStrings.VersionMinorOverwrite}` }\r\n );\r\n }\r\n }\r\n }\r\n\r\n setOptions(choiceOptions);\r\n }, []);\r\n\r\n const _onChange = (ev: React.FormEvent, option: IChoiceGroupOption): void => {\r\n checkinTypeChanged(+option.key)\r\n }\r\n\r\n return (\r\n <>\r\n \r\n \r\n );\r\n};\r\n\r\n","import React from \"react\";\r\nimport { ChoiceGroup, IChoiceGroupOption, PrimaryButton, Spinner, SpinnerSize, Stack } from \"@fluentui/react\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport { LanguageContext } from \"../../../../../../utilities/LocalizationModule\";\r\nimport { setOneDriveOverwriteOptionSelected } from \"../../../../redux/modules/file\";\r\nimport { OneDriveOverWriteEnum } from \"../../../enums/oneDriveOverWriteEnum\";\r\nimport { CheckinTypes } from \"../../redux/api/local/api-local-interfaces\";\r\n\r\nexport interface IVersionSelectorProps {\r\n checkinTypeChanged?: (checkinType: CheckinTypes) => void;\r\n onCancel?: () => void;\r\n onSave?: () => void;\r\n labelFontSize: number;\r\n paddingTop: number;\r\n paddingLeft: number;\r\n isBusy?: boolean;\r\n}\r\n\r\nexport const VersionSelectorMinMajOnly = (props: IVersionSelectorProps) => {\r\n const languageStrings = React.useContext(LanguageContext);\r\n\r\n const dispatch = useDispatch();\r\n\r\n const { checkinTypeChanged } = props;\r\n const [options] = React.useState([\r\n { key: \"0\", text: `${languageStrings.VersionMinorDraft}` },\r\n { key: \"1\", text: `${languageStrings.VersionMajorPublished}` }\r\n ]);\r\n let defaultSelectedKey = \"0\";\r\n\r\n const _onChange = (ev: React.FormEvent, option: IChoiceGroupOption): void => {\r\n checkinTypeChanged(+option.key);\r\n }\r\n\r\n return (\r\n <>\r\n
\r\n \r\n \r\n {props.onSave &&\r\n {\r\n props.onSave();\r\n }}\r\n style={{ marginTop: \"20px\" }} text={languageStrings.Save} disabled={props?.isBusy}>{props?.isBusy && }}\r\n {props.onCancel &&\r\n {\r\n dispatch(setOneDriveOverwriteOptionSelected(OneDriveOverWriteEnum.notSelected));\r\n props.onCancel();\r\n }}\r\n style={{ marginTop: \"20px\" }} disabled={props?.isBusy}>{languageStrings.Cancel}}\r\n \r\n
\r\n \r\n );\r\n};","import { IPanelStyles, Panel, PanelType } from \"@fluentui/react\";\r\nimport React from \"react\";\r\nimport '../../../../styles/taskpane.css'\r\n\r\ninterface IWebPanelProps {\r\n headerText?: string;\r\n isOpen: boolean;\r\n closePanel(): any;\r\n children?: JSX.Element;\r\n width?: string;\r\n styles?: Partial\r\n}\r\n\r\n// const panelStyles:Partial = {\r\n// content: {\r\n// paddingLeft: 5,\r\n// paddingRight: 0\r\n// }\r\n// }\r\n\r\nexport const WebPanel = (props: IWebPanelProps) => {\r\n const { headerText, isOpen, closePanel, children, width, styles } = props;\r\n\r\n const [panelIsOpen] = React.useState(isOpen);\r\n\r\n return (\r\n closePanel()}\r\n isLightDismiss\r\n closeButtonAriaLabel=\"Close\"\r\n type={PanelType.custom}\r\n customWidth={width ? width : '350px'}\r\n styles={styles}\r\n >\r\n {children}\r\n \r\n );\r\n};\r\n","import { Check, FontIcon, Icon, IIconStyles, Spinner, SpinnerSize, Text, TooltipDelay, TooltipHost, TooltipOverflowMode } from \"@fluentui/react\";\r\nimport { FileIconType, getFileTypeIconProps } from \"@fluentui/react-file-type-icons\";\r\nimport dayjs from \"dayjs\";\r\nimport React from \"react\";\r\nimport { useSelector } from \"react-redux\";\r\nimport { LanguageContext } from \"../../../../../../../utilities/LocalizationModule\";\r\nimport { ComponentTypes } from \"../../../../../config/config\";\r\nimport { SharePointFolderContentTypeIds, sharePointInternalFileName } from \"../../../../../config/constants\";\r\nimport { IFile } from \"../../../../../interfaces/IFile\";\r\nimport { mobileListItemStyle } from \"../../../../../styles/mobileStyles\";\r\nimport { RootState } from \"../../../redux/storeMain\";\r\nimport { PiiTooltip } from \"../../Tooltips/PiiTooltip\";\r\nimport { getItemCustomSelect } from \"../../../../../services/GraphService\";\r\nimport authModule from \"../../../../../../../utilities/AuthModule\";\r\nimport { getExtension } from \"../../../../helpers/stringHelper\";\r\n\r\nconst iconStyles: IIconStyles = {\r\n root: {\r\n // paddingTop: 3\r\n }\r\n}\r\n\r\nexport interface IFileviewProps {\r\n item?: IFile,\r\n exchangeItem?: any,\r\n isMobile: boolean,\r\n tenantEnablePII: boolean;\r\n selectFile?: (selectedFile: IFile) => void;\r\n selectExchangeItem?: (selectedItem: any) => void;\r\n openFileOptions?: (selectedFile: IFile) => void;\r\n multiSelect?: boolean;\r\n hasShowMore?: boolean;\r\n isLocalFile?: boolean;\r\n fileRemoved?: () => void;\r\n itemSelected?: (item: any) => void;\r\n isBusy?: boolean;\r\n nonClickable?: boolean;\r\n}\r\n\r\nexport const Fileview = ({ item, exchangeItem, isMobile, tenantEnablePII = false, selectFile, selectExchangeItem, openFileOptions, fileRemoved, itemSelected, isBusy = false, multiSelect = true, hasShowMore = true, isLocalFile = false, nonClickable = false }: IFileviewProps) => {\r\n const languageStrings = React.useContext(LanguageContext);\r\n\r\n const currentDirectory = useSelector((state: RootState) => state.workingDirectories?.workingDirectories?.length > 0 ? state.workingDirectories.workingDirectories[state.workingDirectories.workingDirectories.length - 1] : null);\r\n\r\n const [modifiedBy, setModifiedBy] = React.useState();\r\n\r\n const removableAndNonClickable: boolean = isLocalFile && fileRemoved ? true : false;\r\n\r\n React.useEffect(() => {\r\n if (!isLocalFile && currentDirectory?.type !== ComponentTypes.SharePointList) {\r\n initModifiedBy(item);\r\n }\r\n }, [item, isLocalFile, currentDirectory]);\r\n\r\n const getFileItemClass = (item: IFile) => {\r\n if (removableAndNonClickable || nonClickable) {\r\n return 'list-item non-clickable';\r\n }\r\n\r\n if (!tenantEnablePII) {\r\n return 'list-item';\r\n }\r\n\r\n if (tenantEnablePII) {\r\n if (item.pii?.piiError) {\r\n return 'pii-error';\r\n }\r\n if (!item.pii ||\r\n (item.pii.pii === null && item.pii.piiDetected === null) ||\r\n (item.pii.pii === null && item.pii.piiDetected === false) ||\r\n (item.pii.pii === undefined && item.pii.piiDetected === false) ||\r\n item.pii?.piiError\r\n ) {\r\n return 'list-item';\r\n }\r\n return item.pii.piiDetected === true ? 'pii-detected' : 'pii-not-detected';\r\n }\r\n return 'list-item';\r\n }\r\n\r\n const getFileItemIcon = (item: IFile) => {\r\n if (isBusy) {\r\n return \r\n }\r\n\r\n if (currentDirectory?.type === ComponentTypes.SharePointList) {\r\n return \r\n }\r\n\r\n if (item[\"FSObjType\"] === '1' && item[\"ProgId\"] !== 'OneNote.Notebook') {\r\n return \r\n }\r\n\r\n if (item[\"FSObjType\"] === '1' && item[\"ProgId\"] === 'OneNote.Notebook') {\r\n return \r\n }\r\n\r\n if (item[\"contentTypeId\"]?.startsWith(SharePointFolderContentTypeIds.folder)) {\r\n return \r\n }\r\n\r\n if ((item as any).currentLocation?.contentTypeId && item[\"currentLocation\"][\"contentTypeId\"]?.startsWith(SharePointFolderContentTypeIds.folder)) {\r\n return \r\n }\r\n\r\n const itemExt: string = getExtension(item?.name);\r\n if (itemExt) {\r\n return \r\n }\r\n\r\n // Advanced search item\r\n if ((item as any)?.contenttypeid && item?.name) {\r\n if (!item[\"contenttypeid\"].startsWith(SharePointFolderContentTypeIds.folder)) {\r\n let extension: string;\r\n const fileParts = item.name?.split('.');\r\n if (fileParts?.length > 0) {\r\n extension = fileParts[fileParts.length - 1];\r\n }\r\n\r\n return \r\n }\r\n else {\r\n return \r\n }\r\n }\r\n\r\n // Advanced search recent item\r\n if ((item as any)?.sizetext) {\r\n if ((item as any)?.isdocument) {\r\n let extension: string;\r\n const fileParts = item.name?.split('.');\r\n if (fileParts?.length > 0) {\r\n extension = fileParts[fileParts.length - 1];\r\n }\r\n\r\n return \r\n }\r\n else {\r\n return \r\n }\r\n }\r\n\r\n if (!tenantEnablePII || !item.pii) {\r\n return ;\r\n }\r\n\r\n if (item.pii.isChecking) {\r\n return \r\n {multiSelect ? : }\r\n ;\r\n }\r\n\r\n if (!item.pii.piiError\r\n && ((item.pii?.pii === null && item.pii?.piiDetected === null)\r\n || (item.pii?.pii === null && item.pii?.piiDetected === false)\r\n || (item.pii?.pii === undefined && item.pii?.piiDetected === false))) {\r\n\r\n return \r\n \r\n ;\r\n }\r\n\r\n return }\r\n calloutProps={{ gapSpace: 0, calloutWidth: 250 }}\r\n styles={{\r\n root: {\r\n display: \"inline-block\",\r\n paddingTop: 3\r\n },\r\n }}\r\n delay={TooltipDelay.medium}\r\n >\r\n \r\n ;\r\n }\r\n\r\n const fileClicked = (selectedFile: IFile) => {\r\n if (openFileOptions) {\r\n openFileOptions(selectedFile)\r\n }\r\n if (itemSelected) {\r\n itemSelected(item)\r\n }\r\n }\r\n\r\n const initModifiedBy = async (item: IFile) => {\r\n let modifiedByValue: string;\r\n if (item.modifiedBy) {\r\n modifiedByValue = item.modifiedBy;\r\n }\r\n else if (item['Modified By']) {\r\n modifiedByValue = item['Modified By'];\r\n }\r\n else if (item['Editor']?.length > 0) {\r\n modifiedByValue = item['Editor'][0]['title'];\r\n }\r\n else if (item[\"modifiedby\"]?.length > 0) {\r\n modifiedByValue = item[\"modifiedby\"];\r\n }\r\n else if (item[\"modified by\"]?.length > 0) {\r\n modifiedByValue = item[\"modified by\"];\r\n }\r\n else if (item.driveId && item.id) {\r\n const graphItemData = await getItemCustomSelect(await authModule.getGraphAccessToken(), item.driveId, item.id, \"lastModifiedBy\");\r\n modifiedByValue = graphItemData?.lastModifiedBy?.user?.displayName ?? languageStrings.Unknown;\r\n }\r\n else {\r\n modifiedByValue = languageStrings.Unknown;\r\n }\r\n\r\n setModifiedBy(modifiedByValue);\r\n }\r\n\r\n const getFileName = () => {\r\n if (currentDirectory?.type === ComponentTypes.SharePointList) {\r\n return item['Title'];\r\n }\r\n if (item.name) {\r\n return item.name;\r\n }\r\n if (item['Name']) {\r\n return item['Name'];\r\n }\r\n if (item[sharePointInternalFileName]) {\r\n return item[sharePointInternalFileName];\r\n }\r\n\r\n return '';\r\n }\r\n\r\n const getFileExtension = (name: string) => {\r\n const fileParts = name?.split('.');\r\n return fileParts?.length > 0 ? fileParts[fileParts.length - 1] : \"\";\r\n }\r\n\r\n return (\r\n <>\r\n {item &&
\r\n {multiSelect && !isMobile &&
selectFile(item)}>\r\n \r\n
}\r\n
fileClicked(item)}>\r\n
\r\n {getFileItemIcon(item)}\r\n
\r\n \r\n \r\n {getFileName()}\r\n \r\n
\r\n {dayjs(item.lastModifiedDateTime).format(\"l\")} {modifiedBy && (languageStrings.By + \" \" + modifiedBy)}\r\n
\r\n
\r\n
\r\n {removableAndNonClickable &&
fileRemoved()} >\r\n \r\n
}\r\n {hasShowMore && \r\n
\r\n openFileOptions(item)} />\r\n
\r\n
}\r\n
}\r\n {exchangeItem &&\r\n
\r\n {multiSelect && !isMobile &&
selectExchangeItem(exchangeItem)}>\r\n \r\n
}\r\n
{ }}>\r\n
\r\n \r\n
\r\n \r\n \r\n {exchangeItem.subject}\r\n \r\n
\r\n {`${dayjs(exchangeItem.receivedDateTime).format(\"l\")} ${languageStrings.From} ${exchangeItem.sender.emailAddress.name}`}\r\n
\r\n
\r\n
\r\n {exchangeItem.hasAttachments &&
\r\n \r\n
}\r\n
\r\n }\r\n \r\n )\r\n};","import { IDropdownOption, Stack, Dropdown, IStackTokens, ResponsiveMode, TextField, PrimaryButton, IButtonStyles, Label, FontSizes, FontWeights, ILabelStyles, mergeStyles, Spinner, SpinnerSize, FontIcon, DatePicker, IconButton } from \"@fluentui/react\";\r\nimport React from \"react\";\r\nimport { useSelector } from \"react-redux\";\r\nimport { LanguageContext } from \"../../../../../../../utilities/LocalizationModule\";\r\nimport { IFile } from \"../../../../../interfaces/IFile\";\r\nimport { IFilePanelInfo } from \"../../../../../interfaces/IFilePanelInfo\";\r\nimport { isMobile, mobileListItemStyle } from \"../../../../../styles/mobileStyles\";\r\nimport { useLazyGetDriveInfoFromSharepointIdQuery } from \"../../../redux/api/graph/api-graph-slice\";\r\nimport { IGraphCreateShareableLinkRequest, ShareableLinkRequestScope, ShareableLinkRequestType } from \"../../../redux/api/graph/api-graph-interfaces\";\r\nimport { RootState } from \"../../../redux/storeMain\";\r\nimport { ICustomPersonaProps, PeopleFinder } from \"../../../_shared/PeopleFinder/PeopleFinder\";\r\nimport { Fileview } from \"../../Explorer/Fileview/Fileview\";\r\nimport { ApprovalRequest, ItemLink, HookType, IHookResult } from \"../../../redux/api/local/api-local-interfaces\";\r\nimport { SuccessErrorMessage } from \"../../../_shared/SuccessErrorMessage/SuccessErrorMessage\";\r\nimport { createItemShareableLink, getFileItemIdFromRelativePath, getFileItemInfo, getItem, getItemApprovalRequestInfo, getItemWebViewUrl } from \"../../../../../services/GraphService\";\r\nimport { IDriveInfo } from \"../../../../../interfaces/IDriveInfo\";\r\nimport authModule from \"../../../../../../../utilities/AuthModule\";\r\nimport { ComponentTypes } from \"../../../../../config/config\";\r\nimport { apiGetHooksByType, apiRequestApproval } from \"../../../../../services/ApiService\";\r\nimport { sharePointInternalFileName } from \"../../../../../config/constants\";\r\nimport { getValidHooks } from \"../../../../../services/HooksService\";\r\nimport { DateService } from \"../../../../../services/dateService\";\r\nimport { DayPickerStrings, firstDayOfWeek } from \"../../../../../config/dateSettings\";\r\nimport dayjs from \"dayjs\";\r\nimport { clearButtonClass } from \"../../../../../config/controlStyles\";\r\nimport { clearButtonProps, datePickerStyles, iconButtonProps, iconButtonStyles, textFieldStyles } from \"../../../../../styles/datePickerStyles\";\r\n\r\nconst labelInfoStyle: Partial = {\r\n root: {\r\n fontWeight: FontWeights.regular,\r\n fontSize: FontSizes.medium,\r\n marginTop: 0,\r\n },\r\n};\r\n\r\nconst panelActionButtonStyle: Partial = {\r\n root: {\r\n marginTop: 20,\r\n },\r\n};\r\n\r\ninterface PeoplePickerAddress {\r\n email: string;\r\n isCustomEmail?: boolean;\r\n}\r\n\r\nexport interface IFileApproval extends IFile {\r\n itemId?: string\r\n folderId?: string;\r\n serverRelativePath?: string;\r\n}\r\n\r\nexport interface IApprovalPanelProps {\r\n file?: IFilePanelInfo;\r\n files?: IFileApproval[];\r\n isGraphQuery?: boolean;\r\n tenantEnablePII?: boolean;\r\n tenantGuid?: string;\r\n requestor?: string;\r\n isContentManager?: boolean;\r\n closeClicked: () => void;\r\n listName?: string;\r\n}\r\n\r\nconst stackTokens: IStackTokens = { childrenGap: 20 };\r\n\r\nexport const ApprovalPanel = ({ file, files, tenantEnablePII = false, tenantGuid, requestor, isContentManager, closeClicked, listName }: IApprovalPanelProps) => {\r\n const languageStrings = React.useContext(LanguageContext);\r\n\r\n const user = useSelector((state: RootState) => state.user);\r\n const currentDirectory = useSelector((state: RootState) => state.workingDirectories?.workingDirectories?.length > 0 ? state.workingDirectories.workingDirectories[state.workingDirectories.workingDirectories.length - 1] : null);\r\n const oneDriveRootDetails = useSelector((state: RootState) => state.workingDirectories?.oneDriveRootDetails);//state.workingDirectories.rootOneDriveId,\r\n\r\n const [getDriveInfoFromSharepointId] = useLazyGetDriveInfoFromSharepointIdQuery();\r\n\r\n const [fileViews, setFileViews] = React.useState([]);\r\n const [isBusySending, setIsBusySending] = React.useState(false);\r\n const [formDisabled, setFormDisabled] = React.useState(true);\r\n const [otherError, setOtherError] = React.useState('');\r\n const [hooks, setHooks] = React.useState([]);\r\n const [selectedFlow, setSelectedFlow] = React.useState();\r\n const [isSuccessRequestApproval, setIsSuccessRequestApproval] = React.useState(false);\r\n const [isErrorRequestApproval, setIsErrorRequestApproval] = React.useState(false);\r\n const [errorRequestApproval, setErrorRequestApproval] = React.useState();\r\n const [options, setOptions] = React.useState();\r\n const [approvalFiles, setApprovalFiles] = React.useState();\r\n const [additionalDetails, setAdditionalDetails] = React.useState('');\r\n const [dueDate, setDueDate] = React.useState();\r\n const [dateFormat] = React.useState(new Intl.DateTimeFormat());\r\n\r\n const isInOneDrive = React.useRef(currentDirectory?.type == ComponentTypes.OneDrive || currentDirectory?.type == ComponentTypes.OneDriveSubFolder);\r\n\r\n React.useEffect(() => {\r\n (async () => {\r\n const hooks = await apiGetHooksByType({\r\n TenantGUID: tenantGuid ?? user.account.tenantId,\r\n HookTypeId: HookType.AllApproval\r\n });\r\n\r\n const validHooks = getValidHooks(hooks, currentDirectory);\r\n\r\n setHooks(validHooks);\r\n\r\n setSelectedFlow(validHooks.length === 1 ? validHooks[0] : null);\r\n\r\n setOptions(validHooks.map(hook => {\r\n return {\r\n key: hook.id,\r\n text: hook.name\r\n }\r\n }));\r\n })();\r\n }, []);\r\n\r\n React.useEffect(() => {\r\n if (approvalFiles) {\r\n setFileViews(\r\n approvalFiles?.map((item, index) => (\r\n
\r\n \r\n
\r\n\r\n ))\r\n );\r\n }\r\n\r\n }, [approvalFiles]);\r\n\r\n React.useEffect(() => {\r\n let tempFiles: IFileApproval[] = [];\r\n if (file) {\r\n tempFiles.push({\r\n ...file\r\n })\r\n setApprovalFiles(tempFiles);\r\n }\r\n else {\r\n setApprovalFiles(files);\r\n }\r\n }, []);\r\n\r\n const [selectedApprovers, setSelectedApprovers] = React.useState([]);\r\n const selectedPersonasChanged = (selectedPersonas: ICustomPersonaProps[]) => {\r\n setSelectedApprovers(selectedPersonas.map(x => {\r\n return {\r\n email: x.secondaryText,\r\n isCustomEmail: x.isCustomEmail\r\n }\r\n }));\r\n }\r\n\r\n const sendClicked = async () => {\r\n setIsBusySending(true);\r\n setOtherError('');\r\n setErrorRequestApproval(null);\r\n setIsErrorRequestApproval(false);\r\n setIsSuccessRequestApproval(false);\r\n\r\n const tempFiles = [...approvalFiles];\r\n\r\n const links: ItemLink[] = [];\r\n let hasError = false;\r\n const result = await Promise.all(\r\n\r\n tempFiles.map(async tempFile => {\r\n let itemId = '';\r\n let driveId = '';\r\n\r\n if (!isContentManager) {\r\n driveId = tempFile.driveId;\r\n if (tempFile.id && !tempFile.itemId && !tempFile.hasGraphItemId) {\r\n\r\n const driveInfoResults = await getDriveInfoFromSharepointId({ request: { driveId, sharepointId: tempFile.id }, accessToken: await authModule.getGraphAccessToken() }).unwrap();\r\n\r\n if (driveInfoResults.value.length > 0) {\r\n itemId = driveInfoResults.value[0].id;\r\n }\r\n else {\r\n const driveInfo: IDriveInfo = !tempFile.folderId ? { id: driveId, driveId: null } : { id: tempFile.folderId, driveId }\r\n\r\n const fileItem = await getFileItemInfo(driveInfo, tempFile.name, \"id,webUrl\");\r\n if (fileItem) {\r\n itemId = fileItem.id;\r\n }\r\n }\r\n }\r\n else if (tempFile.hasGraphItemId) {\r\n itemId = tempFile?.id;\r\n }\r\n else {\r\n //source: Advanced Search\r\n itemId = tempFile.itemId;\r\n if (!itemId) {\r\n itemId = await getFileItemIdFromRelativePath(await authModule.getGraphAccessToken(), driveId, tempFile[\"serverRelativePath\"]);\r\n }\r\n }\r\n } else {\r\n //source: Content Manager\r\n driveId = isInOneDrive.current ? oneDriveRootDetails?.driveId : (currentDirectory?.parentId ? currentDirectory?.parentId : currentDirectory?.id);\r\n\r\n const spItemUrlparts = tempFile['.spItemUrl'].split('/');\r\n itemId = spItemUrlparts[spItemUrlparts.length - 1].split('?')[0];\r\n\r\n if (!itemId) {\r\n const driveUrl = new URL(await getItemWebViewUrl(await authModule.getGraphAccessToken(), driveId, null));\r\n const folderUrl = new URL(driveUrl.origin + tempFile['FileRef']);\r\n itemId = await getFileItemIdFromRelativePath(await authModule.getGraphAccessToken(), driveId, folderUrl.pathname.replace(driveUrl.pathname, \"\"), false);\r\n }\r\n }\r\n\r\n if (itemId) {\r\n const request: IGraphCreateShareableLinkRequest = {\r\n driveId,\r\n itemId,\r\n recipients: selectedApprovers.map(x => x.email),\r\n type: ShareableLinkRequestType.View,\r\n scope: ShareableLinkRequestScope.Users\r\n }\r\n\r\n try {\r\n let [createLinkResults, fileDetails] = await Promise.all([createItemShareableLink(request), getItemApprovalRequestInfo(driveId, itemId)]);\r\n\r\n if (createLinkResults === null) {\r\n // Create sharing links for internal users only. The flow implementation has to accommodate external users\r\n createLinkResults = await createItemShareableLink({\r\n ...request,\r\n recipients: selectedApprovers.filter(x => !x.isCustomEmail).map(x => x.email)\r\n });\r\n }\r\n\r\n const link: ItemLink = {\r\n name: tempFile.name || tempFile[\"Name\"] || tempFile[sharePointInternalFileName] || \"\",\r\n sharingUrl: createLinkResults?.link?.webUrl ?? fileDetails?.listItem?.webUrl,\r\n fullWebUrl: fileDetails?.listItem?.webUrl,\r\n uniqueId: fileDetails?.sharepointIds?.listItemUniqueId,\r\n siteUrl: fileDetails?.sharepointIds?.siteUrl,\r\n listId: fileDetails?.sharepointIds?.listId,\r\n listName: listName || currentDirectory?.DocumentLibrary || (await getItem(await authModule.getGraphAccessToken(), driveId, null))?.name,\r\n serverRelativeUrl: tempFile[\"FileRef\"],\r\n itemId: tempFile[\"ID\"] || fileDetails?.sharepointIds?.listItemId\r\n }\r\n\r\n links.push(link);\r\n\r\n Promise.resolve(link);\r\n } catch (error) {\r\n hasError = true;\r\n setOtherError(languageStrings.AutomationFlowRequestError);\r\n Promise.reject(languageStrings.AutomationFlowRequestError);\r\n }\r\n }\r\n })\r\n );\r\n\r\n if (result && !hasError) {\r\n const approvalRequest: ApprovalRequest = {\r\n hookId: selectedFlow.id,\r\n hookTypeId: selectedFlow.typeId,\r\n hookName: selectedFlow.name,\r\n tenantGuid: tenantGuid ? tenantGuid : user.account.tenantId,\r\n requestor: requestor ? requestor : user.account.username,\r\n approvers: selectedApprovers.map(x => x.email),\r\n dueDate: dueDate ?? (selectedFlow.dueDateDays > 0 ? dayjs().add(selectedFlow.dueDateDays, \"day\").toDate() : null),\r\n details: additionalDetails,\r\n itemLinks: links\r\n }\r\n\r\n try {\r\n await apiRequestApproval(approvalRequest);\r\n setIsSuccessRequestApproval(true);\r\n setIsBusySending(false);\r\n } catch (error) {\r\n setIsErrorRequestApproval(true);\r\n setIsBusySending(false);\r\n error?.response ? setErrorRequestApproval(error?.response) : setOtherError(languageStrings.AutomationFlowRequestError);\r\n }\r\n\r\n } else {\r\n setIsBusySending(false);\r\n }\r\n }\r\n\r\n React.useEffect(() => {\r\n let isDisabled = false;\r\n if (!selectedFlow) {\r\n isDisabled = true;\r\n } else if ((selectedFlow.typeId !== HookType.Generic || selectedFlow.isPeoplePickerRequired) && selectedApprovers?.length === 0) {\r\n isDisabled = true;\r\n }\r\n\r\n setFormDisabled(isDisabled);\r\n }, [selectedFlow, selectedApprovers]);\r\n\r\n const flowChanged = (event: React.FormEvent, item: IDropdownOption): void => {\r\n setSelectedFlow(hooks.find(x => x.id === item.key));\r\n }\r\n\r\n const minItems = 5;\r\n const [showMoreIsClicked, setShowMore] = React.useState(false);\r\n const [sectionStyle, setSectionStyle] = React.useState();\r\n\r\n React.useEffect(() => {\r\n const itemHeight = isMobile() ? mobileListItemStyle.height : 40;\r\n let containerHeight = itemHeight * approvalFiles?.length;\r\n\r\n if (!showMoreIsClicked) {\r\n containerHeight = approvalFiles?.length > minItems ? itemHeight * minItems : itemHeight * approvalFiles?.length;\r\n }\r\n\r\n setSectionStyle(\r\n mergeStyles({\r\n maxHeight: containerHeight,\r\n overflow: \"hidden\",\r\n transition: \"max-height 0.5s ease-in-out\",\r\n })\r\n );\r\n }, [showMoreIsClicked, approvalFiles]);\r\n\r\n const onFormatDate = React.useCallback((date?: Date): string => {\r\n return !date || date?.getTime() !== date?.getTime() ? \"\" : dateFormat.format(date);\r\n }, [dateFormat]);\r\n\r\n const onClearClick = (ev: React.MouseEvent) => {\r\n if (!ev.defaultPrevented) {\r\n setDueDate(undefined);\r\n ev.stopPropagation();\r\n ev.preventDefault();\r\n }\r\n };\r\n\r\n const showMore = approvalFiles?.length > minItems && (\r\n setShowMore((prevShowMoreIsClicked) => !prevShowMoreIsClicked)}\r\n style={{ marginTop: \"5px\" }}\r\n >\r\n \r\n {!showMoreIsClicked ? languageStrings.ShowMore : languageStrings.ShowLess}\r\n \r\n );\r\n\r\n return (\r\n <>\r\n
\r\n
\r\n {fileViews}\r\n
\r\n
\r\n {showMore}\r\n \r\n flowChanged(event, item)}\r\n />\r\n\r\n \r\n \r\n {selectedFlow?.description ? selectedFlow.description : languageStrings.AutomationFlowNotSelected}\r\n \r\n\r\n {(selectedFlow && (selectedFlow.typeId !== HookType.Generic || selectedFlow.isPeoplePickerRequired))\r\n && }\r\n\r\n {Number.isInteger(selectedFlow?.dueDateDays) &&\r\n 0\r\n // ? dayjs().add(selectedFlow.dueDateDays, \"day\").toDate()\r\n // : undefined}\r\n minDate={dayjs().add(1, \"day\").toDate()}\r\n placeholder={selectedFlow.dueDateDays > 0 ? languageStrings.DueDateDescription.replace(\"{days}\", selectedFlow.dueDateDays.toString()) : languageStrings.EnterDate}\r\n ariaLabel={languageStrings.DueDate}\r\n showMonthPickerAsOverlay={true}\r\n onSelectDate={setDueDate}\r\n formatDate={onFormatDate}\r\n textField={{\r\n onRenderSuffix: () => {\r\n return (\r\n
\r\n \r\n
)\r\n },\r\n styles: textFieldStyles\r\n }}\r\n styles={datePickerStyles}\r\n />}\r\n\r\n setAdditionalDetails(newValue)} />\r\n\r\n {(isSuccessRequestApproval || isErrorRequestApproval || otherError) && \r\n 1}\r\n successMessage={languageStrings.AutomationFlowRequestSuccess}\r\n errorMessage={otherError?.length > 1 ? otherError : languageStrings.AutomationFlowRequestError}\r\n errorList={errorRequestApproval ? (errorRequestApproval as any)?.data?.failedFileNames : null}\r\n />\r\n }\r\n\r\n \r\n {!isSuccessRequestApproval && sendClicked()}\r\n disabled={isBusySending || formDisabled}\r\n >\r\n {isBusySending && }\r\n }\r\n {isSuccessRequestApproval && closeClicked()}\r\n />}\r\n \r\n
\r\n \r\n )\r\n};","import { IPersonaProps, IDropdownOption, Stack, IStackTokens, TextField, PrimaryButton, IButtonStyles, mergeStyles, Spinner, SpinnerSize, FontIcon, Dropdown, ResponsiveMode, DatePicker, IconButton } from \"@fluentui/react\";\r\nimport React from \"react\";\r\nimport { useSelector } from \"react-redux\";\r\nimport { LanguageContext } from \"../../../../../../../utilities/LocalizationModule\";\r\nimport { IFile } from \"../../../../../interfaces/IFile\";\r\nimport { IFilePanelInfo } from \"../../../../../interfaces/IFilePanelInfo\";\r\nimport { isMobile, mobileListItemStyle } from \"../../../../../styles/mobileStyles\";\r\nimport { useLazyGetDriveInfoFromSharepointIdQuery } from \"../../../redux/api/graph/api-graph-slice\";\r\nimport { IGraphCreateShareableLinkRequest, ShareableLinkRequestType } from \"../../../redux/api/graph/api-graph-interfaces\";\r\nimport { RootState } from \"../../../redux/storeMain\";\r\nimport { PeopleFinder } from \"../../../_shared/PeopleFinder/PeopleFinder\";\r\nimport { Fileview } from \"../../Explorer/Fileview/Fileview\";\r\nimport { ItemLink, HookType, IHookResult, SignRequestRecipient, SignRequestResult, ApprovalRequest } from \"../../../redux/api/local/api-local-interfaces\";\r\nimport { SuccessErrorMessage } from \"../../../_shared/SuccessErrorMessage/SuccessErrorMessage\";\r\nimport { getFileItemIdFromRelativePath, getFileItemInfo, getItem, getItemApprovalRequestInfo, getItemWebViewUrl } from \"../../../../../services/GraphService\";\r\nimport { IDriveInfo } from \"../../../../../interfaces/IDriveInfo\";\r\nimport authModule from \"../../../../../../../utilities/AuthModule\";\r\nimport { ComponentTypes } from \"../../../../../config/config\";\r\nimport { splitName } from \"../../../../helpers/stringHelper\";\r\nimport { apiGetHooksByType, apiRequestApproval } from \"../../../../../services/ApiService\";\r\nimport { sharePointInternalFileName } from \"../../../../../config/constants\";\r\nimport { getValidHooks } from \"../../../../../services/HooksService\";\r\nimport { DateService } from \"../../../../../services/dateService\";\r\nimport { DayPickerStrings, firstDayOfWeek } from \"../../../../../config/dateSettings\";\r\nimport dayjs from \"dayjs\";\r\nimport { clearButtonClass } from \"../../../../../config/controlStyles\";\r\nimport { clearButtonProps, datePickerStyles, iconButtonProps, iconButtonStyles, textFieldStyles } from \"../../../../../styles/datePickerStyles\";\r\n\r\nconst panelActionButtonStyle: Partial = {\r\n root: {\r\n marginTop: 20,\r\n },\r\n};\r\n\r\nexport interface IFileApproval extends IFile {\r\n itemId?: string\r\n folderId?: string;\r\n serverRelativePath?: string;\r\n}\r\n\r\nexport interface ISigningPanelProps {\r\n file?: IFilePanelInfo;\r\n files?: IFileApproval[];\r\n tenantEnablePII?: boolean;\r\n tenantGuid?: string;\r\n requestor?: string;\r\n isContentManager?: boolean;\r\n closeClicked: () => void;\r\n listName?: string;\r\n}\r\n\r\nconst stackTokens: IStackTokens = { childrenGap: 20 };\r\n\r\nexport const SigningPanel = ({ file, files, tenantEnablePII = false, tenantGuid, requestor, isContentManager, closeClicked, listName }: ISigningPanelProps) => {\r\n const user = useSelector((state: RootState) => state.user);\r\n const currentDirectory = useSelector((state: RootState) => state.workingDirectories?.workingDirectories?.length > 0 ? state.workingDirectories.workingDirectories[state.workingDirectories.workingDirectories.length - 1] : null);\r\n const oneDriveRootDetails = useSelector((state: RootState) => state.workingDirectories?.oneDriveRootDetails);\r\n\r\n const [getDriveInfoFromSharepointId] = useLazyGetDriveInfoFromSharepointIdQuery();\r\n\r\n const [fileViews, setFileViews] = React.useState([]);\r\n const [isBusySending, setIsBusySending] = React.useState(false);\r\n const [formDisabled, setFormDisabled] = React.useState(true);\r\n const [otherError, setOtherError] = React.useState('');\r\n\r\n const languageStrings = React.useContext(LanguageContext);\r\n\r\n const [isSuccessRequestSigning, setIsSuccessRequestSigning] = React.useState(false);\r\n const [isErrorRequestSigning, setIsErrorRequestSigning] = React.useState(false);\r\n const [errorRequestSigning, setErrorRequestSigning] = React.useState();\r\n\r\n const [hooks, setHooks] = React.useState([])\r\n\r\n const [selectedFlow, setSelectedFlow] = React.useState()\r\n\r\n const [options, setOptions] = React.useState();\r\n const [signingFiles, setSigningFiles] = React.useState();\r\n const [additionalDetails, setAdditionalDetails] = React.useState('');\r\n const [dueDate, setDueDate] = React.useState();\r\n const [dateFormat] = React.useState(new Intl.DateTimeFormat());\r\n\r\n const isInOneDrive = React.useRef(currentDirectory?.type == ComponentTypes.OneDrive || currentDirectory?.type == ComponentTypes.OneDriveSubFolder);\r\n\r\n React.useEffect(() => {\r\n (async () => {\r\n const hooks = await apiGetHooksByType({ \r\n TenantGUID: tenantGuid ?? user.account.tenantId,\r\n HookTypeId: HookType.Sign \r\n });\r\n\r\n\r\n const validHooks = getValidHooks(hooks, currentDirectory);\r\n\r\n setHooks(validHooks);\r\n\r\n if (validHooks.length === 1) {\r\n setSelectedFlow(validHooks[0]);\r\n }\r\n\r\n setOptions(validHooks.map(hook => {\r\n return {\r\n key: hook.id,\r\n text: hook.name\r\n }\r\n }));\r\n })();\r\n }, []);\r\n\r\n React.useEffect(() => {\r\n if (signingFiles) {\r\n setFileViews(\r\n signingFiles?.map((item, index) => (\r\n
\r\n \r\n
\r\n ))\r\n );\r\n }\r\n }, [signingFiles]);\r\n\r\n React.useEffect(() => {\r\n let tempFiles: IFileApproval[] = [];\r\n if (file) {\r\n tempFiles.push({\r\n ...file\r\n })\r\n setSigningFiles(tempFiles);\r\n }\r\n else {\r\n setSigningFiles(files);\r\n }\r\n }, [])\r\n\r\n const [selectedRecipients, setSelectedRecipients] = React.useState([])\r\n const selectedPersonasChanged = (selectedPersonas: IPersonaProps[]) => {\r\n setSelectedRecipients(selectedPersonas.map(persona => {\r\n let { firstName, lastName } = splitName(persona.text);\r\n return {\r\n email: persona.secondaryText,\r\n firstName,\r\n lastName\r\n }\r\n }));\r\n }\r\n\r\n const openSigningRequestWindow = (signRequestResults: SignRequestResult) => {\r\n const winLeft = window.screenLeft ? window.screenLeft : window.screenX;\r\n const winTop = window.screenTop ? window.screenTop : window.screenY;\r\n\r\n const width = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;\r\n const height = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;\r\n const left = Math.max(0, ((width / 2) - (600 / 2)) + winLeft);\r\n const top = Math.max(0, ((height / 2) - (800 / 2)) + winTop);\r\n\r\n window.open(signRequestResults.designerUrl, \"Docubird.Signing\", `width=800, height=600, top=${top}, left=${left}, scrollbars=yes`);\r\n }\r\n\r\n const sendClicked = async () => {\r\n setIsBusySending(true);\r\n setIsErrorRequestSigning(false);\r\n setIsSuccessRequestSigning(false);\r\n setErrorRequestSigning(null);\r\n setOtherError('');\r\n const tempFiles = [...signingFiles];\r\n\r\n const links: ItemLink[] = [];\r\n let hasError = false;\r\n const result = await Promise.all(\r\n\r\n tempFiles.map(async tempFile => {\r\n let itemId = '';\r\n let driveId = '';\r\n\r\n if (!isContentManager) {\r\n driveId = tempFile.driveId;\r\n if (tempFile.id && !tempFile.itemId && !tempFile.hasGraphItemId) {\r\n\r\n const driveInfoResults = await getDriveInfoFromSharepointId({ request: { driveId, sharepointId: tempFile.id }, accessToken: await authModule.getGraphAccessToken() }).unwrap();\r\n\r\n if (driveInfoResults.value.length > 0) {\r\n itemId = driveInfoResults.value[0].id;\r\n }\r\n else {\r\n const driveInfo: IDriveInfo = !tempFile.folderId ? { id: driveId, driveId: null } : { id: tempFile.folderId, driveId }\r\n\r\n const fileItem = await getFileItemInfo(driveInfo, tempFile.name, \"id,webUrl\");\r\n if (fileItem) {\r\n itemId = fileItem.id;\r\n }\r\n }\r\n }\r\n else if (tempFile.hasGraphItemId) {\r\n itemId = tempFile?.id;\r\n }\r\n else {\r\n //source: Advanced Search\r\n itemId = tempFile.itemId;\r\n if (!itemId) {\r\n itemId = await getFileItemIdFromRelativePath(await authModule.getGraphAccessToken(), driveId, tempFile[\"serverRelativePath\"]);\r\n }\r\n }\r\n } else {\r\n //source: Content Manager\r\n driveId = isInOneDrive.current ? oneDriveRootDetails?.driveId : (currentDirectory?.parentId ? currentDirectory?.parentId : currentDirectory?.id);\r\n\r\n const spItemUrlparts = tempFile['.spItemUrl'].split('/');\r\n itemId = spItemUrlparts[spItemUrlparts.length - 1].split('?')[0];\r\n\r\n if (!itemId) {\r\n const driveUrl = new URL(await getItemWebViewUrl(await authModule.getGraphAccessToken(), driveId, null));\r\n const folderUrl = new URL(driveUrl.origin + tempFile['FileRef']);\r\n itemId = await getFileItemIdFromRelativePath(await authModule.getGraphAccessToken(), driveId, folderUrl.pathname.replace(driveUrl.pathname, \"\"), false);\r\n }\r\n }\r\n\r\n if (itemId) {\r\n try {\r\n const fileDetails = await getItemApprovalRequestInfo(driveId, itemId);\r\n\r\n const link: ItemLink = {\r\n name: tempFile.name || tempFile[\"Name\"] || tempFile[sharePointInternalFileName] || \"\",\r\n fullWebUrl: fileDetails?.listItem?.webUrl,\r\n uniqueId: fileDetails?.sharepointIds?.listItemUniqueId,\r\n siteUrl: fileDetails?.sharepointIds?.siteUrl,\r\n listId: fileDetails?.sharepointIds?.listId,\r\n listName: listName || currentDirectory?.DocumentLibrary || (await getItem(await authModule.getGraphAccessToken(), driveId, null))?.name,\r\n serverRelativeUrl: tempFile[\"FileRef\"],\r\n itemId: tempFile[\"ID\"] || fileDetails?.sharepointIds?.listItemId\r\n }\r\n\r\n links.push(link);\r\n\r\n Promise.resolve(link);\r\n } catch (error) {\r\n hasError = true;\r\n setOtherError(languageStrings.SigningRequestError);\r\n Promise.reject(languageStrings.SigningRequestError);\r\n }\r\n }\r\n })\r\n );\r\n\r\n if (result && !hasError) {\r\n const signingRequest: ApprovalRequest = {\r\n hookId: selectedFlow.id,\r\n hookTypeId: HookType.Sign,\r\n hookName: selectedFlow.name,\r\n tenantGuid: tenantGuid ? tenantGuid : user.account.tenantId,\r\n requestor: requestor ? requestor : user.account.username,\r\n approvers: selectedRecipients.map(x => x.email),\r\n dueDate: dueDate ?? (selectedFlow.dueDateDays > 0 ? dayjs().add(selectedFlow.dueDateDays, \"day\").toDate() : null),\r\n // message: additionalDetails,\r\n details: additionalDetails,\r\n // documents: links\r\n itemLinks: links,\r\n }\r\n\r\n try {\r\n await apiRequestApproval(signingRequest);\r\n setIsSuccessRequestSigning(true);\r\n setIsBusySending(false);\r\n } catch (error) {\r\n setIsErrorRequestSigning(true);\r\n setIsBusySending(false);\r\n error?.response ? setErrorRequestSigning(error?.response) : setOtherError(languageStrings.SigningRequestError);\r\n }\r\n\r\n } else {\r\n setIsBusySending(false);\r\n }\r\n }\r\n\r\n React.useEffect(() => {\r\n let isDisabled = false;\r\n if (!selectedFlow) {\r\n isDisabled = true;\r\n } else if (selectedRecipients?.length === 0) {\r\n isDisabled = true;\r\n }\r\n\r\n setFormDisabled(isDisabled);\r\n }, [selectedFlow, selectedRecipients]);\r\n\r\n const minItems = 5;\r\n const [showMoreIsClicked, setShowMore] = React.useState(false);\r\n const [sectionStyle, setSectionStyle] = React.useState();\r\n\r\n React.useEffect(() => {\r\n const itemHeight = isMobile() ? mobileListItemStyle.height : 40;\r\n let containerHeight = itemHeight * signingFiles?.length;\r\n\r\n if (!showMoreIsClicked) {\r\n containerHeight = signingFiles?.length > minItems ? itemHeight * minItems : itemHeight * signingFiles?.length;\r\n }\r\n\r\n setSectionStyle(\r\n mergeStyles({\r\n maxHeight: containerHeight,\r\n overflow: \"hidden\",\r\n transition: \"max-height 0.5s ease-in-out\",\r\n })\r\n );\r\n }, [showMoreIsClicked, signingFiles]);\r\n\r\n const showMore = signingFiles?.length > minItems && (\r\n setShowMore((prevShowMoreIsClicked) => !prevShowMoreIsClicked)}\r\n style={{ marginTop: \"5px\" }}\r\n >\r\n \r\n {!showMoreIsClicked ? languageStrings.ShowMore : languageStrings.ShowLess}\r\n \r\n );\r\n\r\n const flowChanged = (event: React.FormEvent, item: IDropdownOption): void => {\r\n setSelectedFlow(hooks.find(x => x.id === item.key));\r\n }\r\n\r\n const onFormatDate = React.useCallback((date?: Date): string => {\r\n return !date || date?.getTime() !== date?.getTime() ? \"\" : dateFormat.format(date);\r\n }, [dateFormat]);\r\n\r\n const onClearClick = (ev: React.MouseEvent) => {\r\n if (!ev.defaultPrevented) {\r\n setDueDate(undefined);\r\n ev.stopPropagation();\r\n ev.preventDefault();\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n
\r\n
\r\n {fileViews}\r\n
\r\n
\r\n {showMore}\r\n \r\n\r\n flowChanged(event, item)}\r\n />\r\n\r\n \r\n\r\n {Number.isInteger(selectedFlow?.dueDateDays) &&\r\n 0 ? languageStrings.DueDateDescription.replace(\"{days}\", selectedFlow.dueDateDays.toString()) : languageStrings.EnterDate}\r\n ariaLabel={languageStrings.DueDate}\r\n showMonthPickerAsOverlay={true}\r\n onSelectDate={setDueDate}\r\n formatDate={onFormatDate}\r\n textField={{\r\n onRenderSuffix: () => {\r\n return (\r\n
\r\n \r\n
)\r\n },\r\n styles: textFieldStyles\r\n }}\r\n styles={datePickerStyles}\r\n />}\r\n\r\n setAdditionalDetails(newValue)} />\r\n\r\n {(isSuccessRequestSigning || isErrorRequestSigning || otherError) && \r\n 1}\r\n successMessage={languageStrings.SigningRequestCreated}\r\n errorMessage={otherError?.length > 1 ? otherError : languageStrings.SigningRequestError}\r\n errorList={errorRequestSigning ? (errorRequestSigning as any).data.failedFileNames : null}\r\n />\r\n }\r\n\r\n \r\n {!isSuccessRequestSigning && sendClicked()}\r\n disabled={isBusySending || formDisabled}\r\n >\r\n {isBusySending && }\r\n }\r\n {isSuccessRequestSigning && closeClicked()}\r\n />}\r\n \r\n
\r\n \r\n )\r\n};","import { FontSizes, FontWeights, ILabelStyles, Label, Stack } from \"@fluentui/react\";\r\nimport React from \"react\";\r\nimport { LanguageContext } from \"../../../../../../utilities/LocalizationModule\";\r\n\r\nconst tooltipTextStyle: Partial = {\r\n root: {\r\n fontWeight: FontWeights.regular,\r\n fontSize: FontSizes.small,\r\n }\r\n}\r\n\r\nexport interface IPiiTooltipProps {\r\n isLoading?: boolean;\r\n PIIDetected: boolean;\r\n PII: string;\r\n piiError?: string;\r\n}\r\n\r\nexport const PiiTooltip = ({ isLoading, PIIDetected, PII, piiError }: IPiiTooltipProps) => {\r\n const languageStrings = React.useContext(LanguageContext);\r\n return <>\r\n {isLoading && }\r\n {!isLoading && PIIDetected === true &&\r\n <>\r\n {!piiError &&}\r\n \r\n {PII?.split('\\n').filter(x => x.length > 0).sort().map((u, i) =>\r\n )}\r\n \r\n \r\n }\r\n {!isLoading && PIIDetected === false && PII === '-' && !piiError && }\r\n {!isLoading && PIIDetected === false && !PII && !piiError && }\r\n {!isLoading && piiError && }\r\n \r\n};\r\n","import { IFileToUpload } from \"../../../../../interfaces/IFileToUpload\";\r\nimport { IOfficeFileDto } from \"../../../../../interfaces/IOfficeFileDto\";\r\nimport { IOutlookRestDto } from \"../../../../../interfaces/IOutlookRestDto\";\r\n\r\nexport interface PIIRequest {\r\n accessToken: string;\r\n siteUrl?: string;\r\n fileUrl?: string;\r\n fileData?: string;\r\n forceRecheck?: boolean;\r\n redactPiiData?: boolean;\r\n}\r\n\r\nexport interface PIIResult {\r\n piiDetected?: boolean;\r\n pii?: string;\r\n piiError?: string;\r\n isChecking?: boolean;\r\n rawPII?: string[];\r\n}\r\n\r\nexport interface GraphItemPIIRequest {\r\n accessToken: string;\r\n driveId?: string;\r\n itemId?: string;\r\n fileName?: string;\r\n redactPiiData?: boolean;\r\n}\r\n\r\nexport interface ApprovalRequest {\r\n hookId: number;\r\n hookTypeId: number;\r\n hookName: string;\r\n tenantGuid: string;\r\n requestor: string;\r\n approvers: string[];\r\n dueDate?: Date;\r\n details: string;\r\n itemLinks: ItemLink[];\r\n}\r\n\r\nexport interface ItemLink {\r\n name: string;\r\n sharingUrl?: string;\r\n fullWebUrl?: string;\r\n uniqueId: string;\r\n siteUrl: string;\r\n listId: string;\r\n listName?: string;\r\n serverRelativeUrl?: string;\r\n itemId?: string;\r\n}\r\n\r\nexport interface ApprovalExecutionResult {\r\n success: boolean;\r\n errorMessage: string;\r\n statusCode: number;\r\n failedFileNames: string[];\r\n}\r\n\r\nexport interface SignRequest {\r\n hookId: number;\r\n hookName: string;\r\n tenantGuid: string;\r\n accessToken: string;\r\n requestor: string;\r\n recipients: SignRequestRecipient[];\r\n message: string;\r\n documents: ItemLink[];\r\n}\r\n\r\nexport interface SignRequestRecipient {\r\n firstName: string;\r\n lastName: string;\r\n email: string;\r\n}\r\n\r\n\r\nexport interface SignRequestResult {\r\n packageId: string;\r\n designerUrl: string;\r\n}\r\n\r\nexport interface FilePreCommitRequest {\r\n accessToken: string;\r\n siteUrl: string;\r\n destinationUrl: string;\r\n fileName: string;\r\n autoFolderCreation: boolean;\r\n ignoreSameUserLock?: boolean;\r\n}\r\n\r\nexport interface FolderPreCommitRequest {\r\n accessToken: string;\r\n siteUrl: string;\r\n destinationUrl: string;\r\n folderName: string;\r\n}\r\n\r\nexport interface FilePreCommitResult {\r\n exists: boolean;\r\n checkedOut: boolean;\r\n checkedOutBy: string;\r\n locked: boolean;\r\n lockedBy: string;\r\n}\r\n\r\nexport enum HookType {\r\n All = -1,\r\n AllApproval = 0,\r\n Approval = 1,\r\n Sign = 2,\r\n BatchApproval = 3,\r\n Generic = 4\r\n}\r\n\r\nexport interface IHookRequest {\r\n TenantGUID: string,\r\n HookTypeId: HookType\r\n}\r\n\r\nexport interface IHookResult {\r\n id: number;\r\n typeId: number;\r\n name: string;\r\n description: string;\r\n sites: string[];\r\n libraries: string[];\r\n dueDateDays?: number;\r\n isPeoplePickerRequired?: boolean;\r\n peoplePickerTitle?: string;\r\n}\r\n\r\nexport interface IFileSaveResult {\r\n success: boolean,\r\n message: string,\r\n succeededFiles: IFileSaveFileItem[],\r\n failedFileNames: string[]\r\n}\r\n\r\nexport interface IFileSaveFileItem {\r\n name: string,\r\n uniqueId: string\r\n}\r\n\r\ninterface BaseMetadataUpdateRequest {\r\n accessToken: string;\r\n siteUrl: string;\r\n listId: string;\r\n isFolder: boolean;\r\n isListItem: boolean;\r\n listSettings: ListSettings;\r\n metadata: MetadataDto[];\r\n}\r\n\r\nexport interface MetadataUpdateRequest extends BaseMetadataUpdateRequest {\r\n listItemUniqueId: string;\r\n}\r\n\r\nexport interface BulkMetadataUpdateRequest extends BaseMetadataUpdateRequest {\r\n listItemUniqueIds: string[];\r\n}\r\n\r\nexport interface ReplaceFileRequest {\r\n accessToken: string;\r\n accountId: string;\r\n siteUrl: string;\r\n listId: string;\r\n fileUniqueId: string;\r\n fileName?: string;\r\n checkinType: CheckinTypes;\r\n metadata: MetadataDto[];\r\n outlookRestInfo?: IOutlookRestDto;\r\n emailItemId?: string;\r\n attachmentFile?: IFileToUpload;\r\n officeFile?: IOfficeFileDto;\r\n}\r\n\r\nexport interface CreateDocumentFromTemplateRequest {\r\n destAccessToken: string;\r\n templateAccessToken: string;\r\n tenantGuid: string;\r\n destSiteUrl: string;\r\n destListId: string;\r\n destFolderUniqueId: string;\r\n templateSiteUrl: string;\r\n templateUniqueId: string;\r\n teamId: string;\r\n channelId: string;\r\n fileName: string;\r\n checkinType: CheckinTypes;\r\n metadata: MetadataDto[];\r\n}\r\n\r\nexport interface ReplaceFileRequest {\r\n accessToken: string;\r\n accountId: string;\r\n siteUrl: string;\r\n listId: string;\r\n fileUniqueId: string;\r\n fileName?: string;\r\n checkinType: CheckinTypes;\r\n metadata: MetadataDto[];\r\n outlookRestInfo?: IOutlookRestDto;\r\n emailItemId?: string;\r\n attachmentFile?: IFileToUpload;\r\n officeFile?: IOfficeFileDto;\r\n}\r\n\r\nexport interface ConvertAndSaveAsPDFRequest {\r\n graphToken: string;\r\n sharePointToken: string;\r\n driveId: string;\r\n itemId: string;\r\n siteUrl: string;\r\n listId: string;\r\n fileUniqueId: string;\r\n EnsureUniqueFilename: boolean;\r\n checkinType?: CheckinTypes;\r\n}\r\n\r\nexport interface MetadataDto {\r\n type: string;\r\n internalName: string;\r\n displayName?: string;\r\n value: any;\r\n}\r\n\r\nexport interface ListSettings {\r\n enableMinorVersions: boolean;\r\n}\r\n\r\nexport interface ISharePointToEmailMapping {\r\n columnName: string;\r\n emailProperty: string;\r\n}\r\n\r\nexport interface ExchangeMailFolderUploadRequest {\r\n sharePointToken: string;\r\n mailToken: string;\r\n siteUrl: string;\r\n listId: string;\r\n destinationUrl: string;\r\n autoFolderCreation: boolean;\r\n exchangeAccountEmail: string;\r\n mailItemCategory: string;\r\n mailFolderId: string;\r\n metadata: MetadataDto[];\r\n sharePointEmailMappings?: ISharePointToEmailMapping[];\r\n folderName?: string\r\n}\r\n\r\nexport interface BackgroundTaskProgress {\r\n taskId: string;\r\n number: string;\r\n message: string;\r\n logs: string[];\r\n}\r\n\r\nexport enum CheckinTypes {\r\n minorCheckIn = 0,\r\n majorCheckIn = 1,\r\n overwriteCheckIn = 2\r\n}","import { useDispatch, useSelector } from \"react-redux\";\r\nimport authModule from \"../../../../../../utilities/AuthModule\";\r\nimport { IFilePreCommitResult } from \"../../../../interfaces/IFilePreCommitResult\";\r\nimport { IFileToUpload } from \"../../../../interfaces/IFileToUpload\";\r\nimport { ISiteFileDestinationInfo } from \"../../../../interfaces/ISiteFileDestinationInfo\";\r\nimport { setFiles } from \"../../../../redux/modules/file\";\r\nimport { RootState } from \"../storeMain\";\r\nimport { FolderPreCommitRequest } from \"../api/local/api-local-interfaces\";\r\nimport { apiFilePreCommitCheck, apiFolderPreCommitCheck } from \"../../../../services/ApiService\";\r\nimport { SaveMode } from \"../../../enums/SaveModeEnum\";\r\nimport { setIsCheckingForDuplicates } from \"../../../../redux/modules/savingInBackground\";\r\nimport { getDriveRootWebUrl } from \"../../../../services/GraphService\";\r\nimport { FolderView } from \"../../../helpers/folderView\";\r\nimport { logger } from \"../../../../../../utilities/logger\";\r\n\r\nexport function useFiles() {\r\n const dispatch = useDispatch();\r\n\r\n const convertEmailToPDF = useSelector((state: RootState) => state.user?.settings.convertEmailToPDF);\r\n const tenantReplaceFileNameWithGUID = useSelector((state: RootState) => state.tenantInfo?.replaceFileNameWithGUID);\r\n const siteInfo = useSelector((state: RootState) => state.tenantInfo?.sites);\r\n const currentDirectory = useSelector((state: RootState) => state.workingDirectories?.workingDirectories.length > 0 ? state.workingDirectories.workingDirectories[state.workingDirectories.workingDirectories.length - 1] : null);\r\n \r\n const checkPdfFiles = async (saveMode: SaveMode, files: IFileToUpload[]) => {\r\n let fileCheckResults: IFileToUpload[];\r\n if (!tenantReplaceFileNameWithGUID) {\r\n dispatch(setIsCheckingForDuplicates(true));\r\n try {\r\n\r\n let destUrl: string;\r\n if (currentDirectory.isTeamsRootFolder && !currentDirectory.parentId) {\r\n destUrl = await getDriveRootWebUrl(currentDirectory.id);\r\n }\r\n else {\r\n destUrl = `${currentDirectory.webUrl}/${currentDirectory.directory}`;\r\n }\r\n\r\n fileCheckResults = await getFilePreCommitCheckAsync(files, {\r\n autoFolderCreation: !(new FolderView(siteInfo, currentDirectory).canViewFolder()),\r\n destinationUrl: destUrl,\r\n siteUrl: currentDirectory.webUrl\r\n }, false, saveMode);\r\n\r\n } catch (error) {\r\n logger(error, \"useFiles.ts (checkPdfFiles)\");\r\n }\r\n dispatch(setIsCheckingForDuplicates(false));\r\n }\r\n return fileCheckResults;\r\n }\r\n\r\n const getFilePreCommitCheckAsync = async (\r\n files: IFileToUpload[],\r\n siteFileDestinationInfo: ISiteFileDestinationInfo,\r\n isOneDrive: boolean,\r\n saveMode?: SaveMode\r\n ): Promise => {\r\n const accessToken = !isOneDrive\r\n ? await authModule.getSharePointAccessToken()\r\n : await authModule.getOneDriveAccessToken();\r\n\r\n const results = await Promise.all(\r\n files.map(async (item) => {\r\n try {\r\n let result: IFilePreCommitResult;\r\n\r\n if (item.isSelected) {\r\n //root folder\r\n if (item.isFolder && !item.parentFolderId) {\r\n const folderRequest: FolderPreCommitRequest = {\r\n accessToken: isOneDrive ? await authModule.getOneDriveAccessToken() : await authModule.getSharePointAccessToken(),\r\n destinationUrl: siteFileDestinationInfo.destinationUrl,\r\n siteUrl: siteFileDestinationInfo.siteUrl,\r\n folderName: item.name\r\n }\r\n\r\n result = await apiFolderPreCommitCheck(folderRequest);\r\n }\r\n //root file\r\n else if (!item.isFolder && !item.parentFolderId) {\r\n result = await apiFilePreCommitCheck({\r\n accessToken,\r\n autoFolderCreation: siteFileDestinationInfo.autoFolderCreation,\r\n fileName: (item.isMainMailItem && convertEmailToPDF) || (saveMode === SaveMode.SaveAsPdf && item.canSaveAsPDF) ? `${item.name}.pdf` : `${item.name}.${item.extension}`,\r\n destinationUrl: siteFileDestinationInfo.destinationUrl,\r\n siteUrl: siteFileDestinationInfo.siteUrl,\r\n })\r\n } else {\r\n result = { exists: false, checkedOut: false, checkedOutBy: null, locked: false, lockedBy: null }\r\n }\r\n } else {\r\n result = { exists: false, checkedOut: false, checkedOutBy: null, locked: false, lockedBy: null }\r\n }\r\n\r\n return {\r\n ...item,\r\n isDuplicate: result.exists,\r\n filePreCommitResult: result,\r\n };\r\n\r\n } catch (error) {\r\n const result: IFilePreCommitResult = {\r\n exists: false,\r\n checkedOut: false,\r\n checkedOutBy: \"\",\r\n locked: false,\r\n lockedBy: \"\"\r\n };\r\n\r\n return {\r\n ...item,\r\n isDuplicate: result.exists,\r\n filePreCommitResult: result,\r\n };\r\n }\r\n })\r\n );\r\n\r\n if (results) {\r\n dispatch(setFiles(results));\r\n }\r\n\r\n return results;\r\n };\r\n\r\n return {\r\n getFilePreCommitCheckAsync,\r\n checkPdfFiles\r\n }\r\n}","import * as React from \"react\";\r\nimport { Stack, MessageBar, MessageBarType, ActionButton, Spinner, CompoundButton, SpinnerSize } from \"@fluentui/react\";\r\nimport { LanguageContext } from \"../../../../utilities/LocalizationModule\";\r\nimport { RootState } from \"../../redux\";\r\nimport { useSelector } from \"react-redux\";\r\nimport { logger } from \"../../../../utilities/logger\";\r\nimport { IFileSaveResult } from \"../_v2/redux/api/local/api-local-interfaces\";\r\nimport authModule from \"../../../../utilities/AuthModule\";\r\nimport { getItemAbsoluteUrl } from \"../../services/SharePointRestServices\";\r\nimport { ComponentTypes } from \"../../config/config\";\r\nimport { SearchOpenExtensionHelper } from \"../helpers/SearchOpenExtensionHelper\";\r\nimport { getFileItemInfo, getItemCustomSelect, getItemWebViewUrl, getListItemWebUrl } from \"../../services/GraphService\";\r\nimport { GetOfficeContextApp } from \"../helpers/officeHelper\";\r\nimport { SaveMode } from \"../enums/SaveModeEnum\";\r\nimport { IDriveInfo } from \"../../interfaces/IDriveInfo\";\r\nimport generalModule from \"../../../../utilities/GeneralModule\";\r\nimport { OneDriveUrlHelper } from \"../helpers/oneDriveUrlHelper\";\r\n\r\ninterface IAfterSaveAppSelectorProps {\r\n onSaveLocation?: () => void;\r\n saveResult?: IFileSaveResult;\r\n saveMode: SaveMode\r\n}\r\n\r\nconst getFileExtension = (name: string) => {\r\n const fileParts = name?.split(\".\");\r\n return fileParts?.length > 1 ? fileParts[fileParts.length - 1] : \"\";\r\n}\r\n\r\nexport const AfterSaveAppSelector = ({ onSaveLocation, saveResult, saveMode }: IAfterSaveAppSelectorProps) => {\r\n const languageStrings = React.useContext(LanguageContext);\r\n const currentDirectory = useSelector((state: RootState) => state.workingDirectories?.workingDirectories?.length > 0 ? state.workingDirectories?.workingDirectories[state.workingDirectories?.workingDirectories?.length - 1] : null);\r\n const oneDriveRootDetails = useSelector((state: RootState) => state.workingDirectories?.oneDriveRootDetails);\r\n const oneDriveWebUrl = useSelector((state: RootState) => state.user.oneDriveWebUrl);\r\n const userAccount = useSelector((state: RootState) => state.user.account);\r\n\r\n const [isOpeningOnline, setIsOpeningOnline] = React.useState(false);\r\n const [isOpeningLocal, setIsOpeningLocal] = React.useState(false);\r\n\r\n const isInOneDrive = React.useRef(currentDirectory?.type == ComponentTypes.OneDrive || currentDirectory?.type == ComponentTypes.OneDriveSubFolder || currentDirectory?.webUrl === oneDriveWebUrl);\r\n\r\n const getDriveInfo = (): IDriveInfo => {\r\n return !currentDirectory.parentId\r\n ? { id: currentDirectory.id, driveId: null }\r\n : { id: currentDirectory.id, driveId: currentDirectory.parentId };\r\n };\r\n\r\n const openFile = async (isLocal: boolean) => {\r\n try {\r\n isLocal ? setIsOpeningLocal(true) : setIsOpeningOnline(true);\r\n\r\n if (saveResult && saveResult.succeededFiles?.length > 0) {\r\n const uploadedFile = saveResult.succeededFiles[0];\r\n\r\n if (uploadedFile) {\r\n if (isLocal && saveMode === SaveMode.SaveAsPdf && getFileExtension(uploadedFile.name)?.trim().toLowerCase() === \"pdf\") {\r\n const driveId = !isInOneDrive.current ? (!currentDirectory.parentId ? currentDirectory.id : currentDirectory.parentId) : oneDriveRootDetails.driveId;\r\n\r\n const userEmail: string = userAccount.username;\r\n const userId: string = userAccount.uniqueId;\r\n\r\n let file: any;\r\n let itemId: string;\r\n let fileName: string;\r\n let fileId: string;\r\n let siteId: string;\r\n let listId: string;\r\n let webUrl: string;\r\n\r\n if (isInOneDrive.current) {\r\n itemId = uploadedFile.uniqueId;\r\n file = itemId && await getItemCustomSelect(await authModule.getGraphAccessToken(), driveId, itemId, \"name,sharepointIds\");\r\n }\r\n else {\r\n file = await getFileItemInfo(getDriveInfo(), uploadedFile.name, \"id,name,sharepointIds\");\r\n }\r\n\r\n fileId = file.sharepointIds.listItemUniqueId;\r\n siteId = file.sharepointIds.siteId;\r\n listId = file.sharepointIds.listId;\r\n webUrl = file.sharepointIds.siteUrl;\r\n\r\n window.open(OneDriveUrlHelper.getOpenInOneDriveDesktopUrl(fileId, siteId, listId, userEmail, userId, webUrl, fileName), generalModule.isInConentMangerMode() ? \"_self\" : \"_blank\");\r\n }\r\n else {\r\n let url: string;\r\n if (isLocal) {\r\n url = isInOneDrive.current ? await getListItemWebUrl(await authModule.getGraphAccessToken(), oneDriveRootDetails.driveId, uploadedFile.uniqueId) : await getItemAbsoluteUrl(await authModule.getSharePointAccessToken(), currentDirectory.webUrl, currentDirectory.sharePointListId, uploadedFile.uniqueId);\r\n } else {\r\n const driveId = !isInOneDrive.current ? (!currentDirectory.parentId ? currentDirectory.id : currentDirectory.parentId) : oneDriveRootDetails.driveId;\r\n url = await getItemWebViewUrl(await authModule.getGraphAccessToken(), driveId, uploadedFile.uniqueId);\r\n }\r\n\r\n if (url) {\r\n if (isLocal) {\r\n const fileInfo = SearchOpenExtensionHelper.determineOfficeFileType(getFileExtension(uploadedFile.name));\r\n if (fileInfo?.localUrlPrepended) {\r\n window.open(`${fileInfo.localUrlPrepended}${url}`);\r\n }\r\n } else {\r\n window.open(url);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n setIsOpeningLocal(false);\r\n setIsOpeningOnline(false);\r\n\r\n } catch (error) {\r\n logger(error, \"AfterSaveAppSelector.tsx (openFile)\");\r\n }\r\n }\r\n\r\n return (\r\n \r\n {saveMode === SaveMode.Default && \r\n {languageStrings.NotWorkingOnOnlineVersion}\r\n }\r\n openFile(true)}>\r\n {isOpeningLocal && }\r\n \r\n openFile(false)}>\r\n {isOpeningOnline && }\r\n \r\n {\r\n onSaveLocation()\r\n }}\r\n text={languageStrings.Continue}\r\n />\r\n \r\n );\r\n};\r\n","import * as React from \"react\";\r\nimport { SharePointMetadataBooleans } from \"../../config/sharepointConstants\";\r\nimport InputFactory from \"./factories/inputFactory\";\r\nimport { InputTypeEnum } from \"../enums/inputTypeEnum\";\r\nimport { InputMetaDataFactoryProps } from \"../../interfaces/props/InputMetaDataFactoryProps\";\r\nimport { dataSourceSharePointClassifier } from \"../helpers/dataSourceSharePointClassifier\";\r\nimport { SharePointInputData } from \"../../interfaces/props/SharePointInputData\";\r\nimport { inputResult } from \"../helpers/inputResult\";\r\n\r\nconst InputMetaDataFactory: React.FunctionComponent = ({\r\n xml,\r\n choices,\r\n webUrl,\r\n sharepointService,\r\n inputData,\r\n handleInputChange,\r\n internalName,\r\n sharepointListId,\r\n regionalSetting,\r\n datasourceFields\r\n}: InputMetaDataFactoryProps) => {\r\n const [error, setError] = React.useState(\"\");\r\n const classifier = React.useRef(new dataSourceSharePointClassifier());\r\n \r\n React.useEffect(() => {\r\n const inputType: InputTypeEnum = classifier.current.getSharepointInputType(xml, datasourceFields);\r\n if (inputType == InputTypeEnum.Percentage && inputData?.value) {\r\n handleInputChange(inputData.index, inputData.value * 100, false);\r\n }\r\n\r\n if (\r\n (inputType == InputTypeEnum.DateOnly || inputType == InputTypeEnum.DateTime) &&\r\n (inputData?.value === \"[today]\")\r\n ) {\r\n handleInputChange(inputData.index, new Date(), false);\r\n }\r\n }, []);\r\n\r\n const isRequired = React.useCallback(() => {\r\n return xml.Required === SharePointMetadataBooleans.true;\r\n }, [xml]);\r\n\r\n const updateValue = React.useCallback((index: number, value: any, error: string) => {\r\n setError(error ? error : \"\");\r\n handleInputChange(index, value, error ? true : false);\r\n }, [setError, handleInputChange]);\r\n\r\n const updateInputValidationStatus = React.useCallback((result: inputResult): void => { \r\n updateValue(inputData.index, result.value, result.error);\r\n }, [inputData, updateValue]);\r\n\r\n const determineInitialInputValue = React.useCallback((inputType: InputTypeEnum): SharePointInputData => {\r\n if (inputData) {\r\n if (inputType === InputTypeEnum.DateOnly || inputType === InputTypeEnum.DateTime) {\r\n if (typeof inputData.value === 'string') {\r\n return { ...inputData, value: inputData.value === \"[today]\" ? new Date() : inputData.value ? new Date(inputData.value) : null }\r\n }\r\n }\r\n\r\n if (inputType === InputTypeEnum.taxonomyDouble && inputData.value?.length > 0) {\r\n if (typeof inputData.value[0] === 'object') {\r\n return { ...inputData, value: inputData.value.map(x => x.Label) }\r\n }\r\n }\r\n }\r\n\r\n return inputData;\r\n }, [inputData]);\r\n\r\n const generateField = () => {\r\n let inputType = classifier.current.getSharepointInputType(xml, datasourceFields);\r\n const inputValue = determineInitialInputValue(inputType);\r\n return (\r\n \r\n );\r\n };\r\n\r\n return generateField();\r\n};\r\n\r\nexport default InputMetaDataFactory;","import * as React from \"react\";\r\nimport { Stack, PrimaryButton, Spinner, StackItem, Label, ILabelStyles, FontSizes } from \"@fluentui/react\";\r\nimport { LanguageContext } from \"../../../../utilities/LocalizationModule\";\r\nimport { RootState } from \"../../redux\";\r\nimport { useSelector } from \"react-redux\";\r\nimport { ModeEnum } from \"../enums/modeEnum\";\r\nimport { getPlatform } from \"../../styles/mobileStyles\";\r\nimport generalModule from \"../../../../utilities/GeneralModule\";\r\nimport { AfterSaveAppSelector } from \"./AfterSaveAppSelector\";\r\nimport { IFileSaveResult } from \"../_v2/redux/api/local/api-local-interfaces\";\r\nimport { GetOfficeContextApp } from \"../helpers/officeHelper\";\r\nimport { SaveMode } from \"../enums/SaveModeEnum\";\r\nimport savingLocationStructureModule from \"../../../../utilities/SavingLocationStructureModule\";\r\nimport { ComponentTypes } from \"../../config/config\";\r\nimport { tryDecodeUriComponent } from \"../../../../utilities/EncodeDecode\";\r\n\r\ninterface ISavingInBackgroundContentProps {\r\n dismissPanel: () => void;\r\n saveResult?: IFileSaveResult;\r\n isFileSystemFileUpload?: boolean;\r\n saveMode: SaveMode\r\n}\r\n\r\nconst fileNameStyles: ILabelStyles = {\r\n root: {\r\n fontSize: FontSizes.size16\r\n }\r\n}\r\n\r\nconst pathStyles: ILabelStyles = {\r\n root: {\r\n fontSize: FontSizes.size12,\r\n fontWeight: 400\r\n }\r\n}\r\n\r\nconst headingStyle: React.CSSProperties = {\r\n fontSize: 18\r\n}\r\n\r\nexport const SavingInBackgroundContent = ({ dismissPanel, saveResult, isFileSystemFileUpload, saveMode }: ISavingInBackgroundContentProps) => {\r\n const languageStrings = React.useContext(LanguageContext);\r\n\r\n const isBusySaving = useSelector((state: RootState) => state.savingInBackground.isBusySaving);\r\n const isSuccess = useSelector((state: RootState) => state.savingInBackground.isSuccess);\r\n const errorMessages = useSelector((state: RootState) => state.savingInBackground.errorMessages);\r\n const mode = useSelector((state: RootState) => state.mode.mode);\r\n const savingLocation = useSelector((state: RootState) => state.savingLocation);\r\n const workingDirectories = useSelector((state: RootState) => state.workingDirectories.workingDirectories);\r\n\r\n const [saveLocationText, setSaveLocationText] = React.useState();\r\n\r\n React.useEffect(() => {\r\n if (isSuccess || saveResult?.success) {\r\n if (mode === ModeEnum.office) {\r\n let savingStructure = workingDirectories?.length > 0 ? workingDirectories : savingLocationStructureModule.getSavingLocationStructure();\r\n if (savingStructure?.length > 0 && savingLocation) {\r\n if (savingStructure.length > 1 && savingStructure[savingStructure.length - 1].type === ComponentTypes.Saving) {\r\n savingStructure = savingStructure.slice(0, -1);\r\n }\r\n const finalSavingLocationDetails: string[] = savingStructure.slice(0, 2).map(s => s.displayName);\r\n if (savingLocation) {\r\n const savingDirectoryList: string[] = savingLocation.directory?.split(\"/\") ?? [];\r\n if (savingLocation.documentLibrary) {\r\n finalSavingLocationDetails.push(savingDirectoryList.length > 1 ? savingLocation.documentLibrary : savingLocation.display);\r\n }\r\n if (savingDirectoryList.length > 1) {\r\n savingDirectoryList.slice(1).forEach(x => finalSavingLocationDetails.push(tryDecodeUriComponent(x)));\r\n }\r\n setSaveLocationText(finalSavingLocationDetails?.join(\" > \"));\r\n }\r\n }\r\n }\r\n }\r\n }, [saveResult, isSuccess, mode, workingDirectories, savingLocation]);\r\n\r\n const getFileSaveResultText = React.useCallback(() => {\r\n if (isSuccess || saveResult?.success) {\r\n if (mode === ModeEnum.office) {\r\n return languageStrings.UploadCompletedSuccessfully;\r\n } else {\r\n return languageStrings.Success;\r\n }\r\n } else {\r\n return languageStrings.FileBackgroundSaveFailure;\r\n }\r\n }, [saveResult, isSuccess]);\r\n\r\n const savingProgressMarkup = isBusySaving ? (\r\n
\r\n \r\n

{languageStrings.FileBackgroundSave}

\r\n
\r\n ) : (\r\n
\r\n

{getFileSaveResultText()}

\r\n {errorMessages?.length ? (\r\n <>\r\n
{languageStrings.FilesNotSuccessfullyUploaded}
\r\n
    {errorMessages?.map((item, index) => (
  • {item}
  • ))}
\r\n \r\n ) : null}\r\n {(mode !== ModeEnum.office || isFileSystemFileUpload) &&

{isSuccess ? languageStrings.FileSaveSuccess : languageStrings.RetryAfter}

}\r\n {mode === ModeEnum.office && !isFileSystemFileUpload && (!errorMessages || errorMessages?.length === 0) &&\r\n <>\r\n \r\n {saveMode === SaveMode.Default\r\n ? \r\n : }\r\n \r\n {saveMode === SaveMode.Default ? : }\r\n \r\n {saveLocationText && }\r\n \r\n \r\n }\r\n
\r\n );\r\n return (\r\n <>\r\n {savingProgressMarkup}\r\n \r\n {(mode !== ModeEnum.office || isFileSystemFileUpload) && }\r\n \r\n \r\n );\r\n};\r\n","import * as React from \"react\";\r\nimport { connect, ConnectedProps } from \"react-redux\";\r\nimport { mergeStyles } from \"@fluentui/react\";\r\nimport SectionTitle from \"./SectionTitle\";\r\nimport { LanguageContext } from \"../../../../../../utilities/LocalizationModule\";\r\nimport { RootState } from \"../../../../redux\";\r\nimport { setExpandedItem } from \"../../../../redux/modules/expanders\";\r\n\r\nconst mapStateToProps = (state: RootState) => {\r\n return {\r\n expanders: state.expanders\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = { setExpandedItem };\r\n\r\nconst connector = connect(mapStateToProps, mapDispatchToProps);\r\ntype PropsFromRedux = ConnectedProps;\r\ninterface CollapsibleSectionProps extends PropsFromRedux {\r\n title: string;\r\n isExpanded: boolean;\r\n toggleIsExpanded: () => void;\r\n item: JSX.Element;\r\n itemCount?: number;\r\n itemHeight?: number;\r\n}\r\n\r\nconst CollapsibleSection: React.FunctionComponent = ({\r\n title,\r\n isExpanded,\r\n toggleIsExpanded,\r\n item,\r\n itemCount,\r\n itemHeight\r\n}: CollapsibleSectionProps) => {\r\n const sectionTitleHeight = 34;\r\n\r\n const calculateItemsToDisplay = () => {\r\n return itemHeight * itemCount + sectionTitleHeight;\r\n };\r\n\r\n const sectionStyle = mergeStyles({\r\n maxHeight: isExpanded ? calculateItemsToDisplay() : sectionTitleHeight,\r\n overflowY: \"hidden\",\r\n transition: \"max-height 0.5s ease-in-out\"\r\n // padding: \"15px\"\r\n });\r\n\r\n return (\r\n
\r\n \r\n {item}\r\n
\r\n );\r\n};\r\nexport default connector(CollapsibleSection);\r\n","import * as React from \"react\";\r\nimport { FontIcon, FontSizes, FontWeights, getTheme, IStackItemStyles, IStackTokens, mergeStyles, Stack, Text } from \"@fluentui/react\";\r\n\r\ninterface SectionTitleProps {\r\n title: string;\r\n isExpanded: boolean;\r\n toggleIsExpanded: () => void;\r\n}\r\n\r\nconst theme = getTheme();\r\n\r\nconst containerStackTokens: IStackTokens = { childrenGap: 10 };\r\n\r\nconst iconClass = mergeStyles({\r\n color: theme.palette.neutralPrimary,\r\n // fontSize: 16\r\n});\r\n\r\nconst textRegular = mergeStyles({\r\n color: theme.palette.neutralPrimary,\r\n fontSize: FontSizes.size18,\r\n fontWeight: FontWeights.regular,\r\n});\r\n\r\nconst SectionTitle: React.FunctionComponent = ({\r\n title,\r\n isExpanded,\r\n toggleIsExpanded\r\n}: SectionTitleProps) => {\r\n return (\r\n \r\n \r\n {title}\r\n \r\n );\r\n};\r\nexport default SectionTitle;\r\n","import { IValidate } from \"../../../interfaces/IValidate\";\r\nimport { TextValidator } from \"../../validators/TextValidator\";\r\nimport { NumberValidator } from \"../../validators/NumberValidator\"\r\nimport { CurrencyValidator } from \"../../validators/CurrencyValidator\";\r\nimport { HyperLinkValidator } from \"../../validators/HyperLinkValidator\"\r\nimport { CollectionValidator } from \"../../validators/CollectionValidator\";\r\nimport { NoValidation } from \"../../validators/NoValidation\";\r\nimport { PickerValidator } from \"../../validators/PickerValidator\";\r\nimport { IValidationProperties } from \"../../../interfaces/IValidationProperties\";\r\nimport { PercentageValidator } from \"../../validators/PercentageValidator\";\r\nimport { DateValidator } from \"../../validators/DateValidator\";\r\nimport { TaxonomyValidator } from \"../../validators/TaxonomyValidator\";\r\n\r\nexport class ValidatorFactory {\r\n\r\n static createTextValidator(validationProperties: IValidationProperties): IValidate {\r\n return new TextValidator(validationProperties); //only uses base validator\r\n }\r\n\r\n static createNumberValidator(validationProperties: IValidationProperties): IValidate {\r\n return new NumberValidator(validationProperties); //uses event.target.max /min\r\n }\r\n\r\n static createPercentageValidator(validationProperties: IValidationProperties): IValidate {\r\n return new PercentageValidator(validationProperties); //uses event.target.max /min\r\n }\r\n\r\n static createCurrencyValidator(validationProperties: IValidationProperties): IValidate {\r\n return new CurrencyValidator(validationProperties); //uses event.target.max /min\r\n }\r\n\r\n static createHyperLinkValidator(validationProperties: IValidationProperties): IValidate {\r\n return new HyperLinkValidator(validationProperties); //only uses base validator\r\n }\r\n\r\n static createCollectionValidator(validationProperties: IValidationProperties): IValidate {\r\n return new CollectionValidator(validationProperties); //uses aria required\r\n }\r\n\r\n static createNoValidation(validationProperties: IValidationProperties): IValidate {\r\n return new NoValidation(validationProperties); //returns success\r\n }\r\n\r\n static createPickerValidation(validationProperties: IValidationProperties): IValidate {\r\n return new PickerValidator(validationProperties); //has no event\r\n }\r\n\r\n static createDateValidation(validationProperties: IValidationProperties): IValidate {\r\n return new DateValidator(validationProperties); //has no event\r\n }\r\n\r\n static createTaxonomyValidation(validationProperties: IValidationProperties): IValidate {\r\n return new TaxonomyValidator(validationProperties); //has no event\r\n }\r\n}\r\n","import * as React from \"react\";\r\nimport { AllInputProps } from \"../../../interfaces/props/AllInputProps\";\r\nimport { InputFactoryHelper } from \"./inputFactoryHelper\";\r\n\r\nexport const InputFactory: React.FunctionComponent = props => {\r\n const factory = new InputFactoryHelper(props);\r\n return <>{factory.create(props.type)};\r\n};\r\n\r\nexport default InputFactory;\r\n","import { InputTypeEnum } from \"../../enums/inputTypeEnum\";\r\nimport * as React from \"react\";\r\nimport { AllInputProps } from \"../../../interfaces/props/AllInputProps\";\r\nimport { Currency } from \"../../inputs/currency\";\r\nimport DateOnly from \"../../inputs/dateOnly\";\r\nimport YesNo from \"../../inputs/YesNo\";\r\nimport PictureHyperLink from \"../../inputs/pictureHyperLink\";\r\nimport { HyperLink } from \"../../inputs/hyperLink\";\r\nimport DateTime from \"../../inputs/dateTime\";\r\nimport Choice from \"../../inputs/choice\";\r\nimport CheckboxMultiColumn from \"../../inputs/checkboxMultiColumn\";\r\nimport PeoplePicker from \"../../inputs/peoplePicker\";\r\nimport Taxonomy from \"../../inputs/taxonomy\";\r\nimport { Number } from \"../../inputs/number\";\r\nimport { Percentage } from \"../../inputs/percentage\";\r\nimport Multiline from \"../../inputs/multiLine\";\r\nimport NormalTextInput from \"../../inputs/normalTextInput\";\r\nimport { DataSourceDropdown } from \"../../inputs/datasourceDropdown\";\r\nimport { DataSourceMultipleDropdown } from \"../../inputs/datasourceMultipleDropdown\";\r\nimport LookupMulti from \"../../inputs/lookupMulti\";\r\nimport { ValidatorFactory } from \"./ValidatorFactory\";\r\nimport { DatasourceTagPicker } from \"../../inputs/datasourceTagPicker\";\r\nimport { DatasourceTextTagPicker } from \"../../inputs/datasourceTextTagPicker\";\r\n\r\nexport class InputFactoryHelper {\r\n constructor(private props: AllInputProps) { }\r\n\r\n create = (inputType: InputTypeEnum) => {\r\n switch (inputType) {\r\n case InputTypeEnum.DateOnly:\r\n return (\r\n \r\n );\r\n case InputTypeEnum.DateTime:\r\n return (\r\n \r\n );\r\n case InputTypeEnum.Currency:\r\n return (\r\n \r\n );\r\n case InputTypeEnum.YesNo:\r\n return (\r\n \r\n );\r\n case InputTypeEnum.hyperLink:\r\n return (\r\n \r\n );\r\n case InputTypeEnum.picture:\r\n return (\r\n \r\n );\r\n case InputTypeEnum.choice:\r\n return (\r\n \r\n );\r\n case InputTypeEnum.multiChoice:\r\n return (\r\n \r\n );\r\n case InputTypeEnum.peoplePickerSingle:\r\n return (\r\n \r\n );\r\n case InputTypeEnum.peoplePickerMultiple:\r\n return (\r\n \r\n );\r\n case InputTypeEnum.taxonomySingle:\r\n return (\r\n \r\n );\r\n case InputTypeEnum.taxonomyDouble:\r\n return (\r\n \r\n );\r\n case InputTypeEnum.Number:\r\n return (\r\n \r\n );\r\n case InputTypeEnum.Percentage:\r\n return (\r\n \r\n );\r\n case InputTypeEnum.MultiLine:\r\n return (\r\n \r\n );\r\n case InputTypeEnum.datasourceText:\r\n return ( \r\n \r\n );\r\n case InputTypeEnum.datasourceDropdown:\r\n return (\r\n \r\n );\r\n case InputTypeEnum.datasourceMultipleDropdown:\r\n return (\r\n \r\n );\r\n case InputTypeEnum.lookupSingle:\r\n return (\r\n \r\n );\r\n case InputTypeEnum.lookupMulti:\r\n return (\r\n \r\n );\r\n case InputTypeEnum.Text:\r\n return (\r\n \r\n );\r\n case InputTypeEnum.datasourceTagPicker:\r\n return ()\r\n default:\r\n return (\r\n \r\n );\r\n }\r\n };\r\n\r\n private setMainProps = (props: AllInputProps) => {\r\n return {\r\n displayName: props.displayName,\r\n internalName: props.internalName,\r\n isRequired: props.isRequired,\r\n inputValue: props.inputValue,\r\n error: props.error,\r\n webUrl: props.webUrl,\r\n updateInputValidationStatus: props.updateInputValidationStatus,\r\n regionalSetting: props.regionalSetting,\r\n listId: props?.listId,\r\n columnInternalName: props?.columnInternalName,\r\n validationProperties: props.validationProperties,\r\n };\r\n };\r\n\r\n private taxonomyProps = (props: AllInputProps) => {\r\n return {\r\n sharepointService: props.sharepointService,\r\n //documentLibrary: props.documentLibrary,\r\n sharepointListId: props.sharepointListId\r\n };\r\n };\r\n}\r\n","import * as React from \"react\";\r\nimport { connect, ConnectedProps } from \"react-redux\";\r\nimport { ChoiceGroup, IChoiceGroupOption, IChoiceGroupStyles, IStackItemStyles, IStackStyles, IStackTokens, Label, MessageBar, MessageBarType, PrimaryButton, Stack } from \"@fluentui/react\";\r\nimport { OneDriveOverWriteEnum } from \"../../enums/oneDriveOverWriteEnum\";\r\nimport {\r\n setOneDriveOverwriteOptionSelected,\r\n resetDuplicateFilesAndOverWriteSettings\r\n} from \"../../../redux/modules/file\";\r\nimport { resetWorkingDirectories, addWorkingDirectories } from \"../../../redux/modules/workingDirectory\";\r\nimport { setNeedsRedirectToHome } from \"../../../redux/modules/savingInBackground\";\r\nimport { resetLocationBeforeSaving } from \"../../../redux/modules/oneDrive\";\r\nimport { LanguageContext } from \"../../../../../utilities/LocalizationModule\";\r\nimport { RootState } from \"../../../redux\";\r\nimport { DocubirdCache } from \"../../../config/constants\";\r\nimport { CacheHelper } from \"../../../../../utilities/CacheHelper\";\r\nimport { ModeEnum } from \"../../enums/modeEnum\";\r\n\r\nconst stackStylesDefault: IStackStyles = {\r\n root: {\r\n paddingTop: 15\r\n }\r\n};\r\nconst stackStylesPadded: IStackStyles = {\r\n root: {\r\n paddingTop: 15,\r\n paddingBottom: 15\r\n }\r\n};\r\nconst stackTokens: IStackTokens = {\r\n childrenGap: 20\r\n};\r\nconst choiceGroupStyles: IChoiceGroupStyles = { label: { fontSize: 16 } };\r\n\r\nconst mapStateToProps = (state: RootState) => {\r\n return {\r\n hasDuplicateEmails: state.files.files.some(item => item.isDuplicate && item.isSelected),\r\n hasLockedCheckedOutFiles: state.files.files.some(item => item.filePreCommitResult?.locked || item.filePreCommitResult?.checkedOut),\r\n files: state.files.files.filter(item => item.isSelected),\r\n needsRedirect: state.savingInBackground.needsRedirectToHome,\r\n oneDriveLocationsBeforeSaving: state.oneDrive.locationBeforeSaving,\r\n mode: state.mode.mode\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setOneDriveOverwriteOptionSelected,\r\n resetDuplicateFilesAndOverWriteSettings,\r\n setNeedsRedirectToHome,\r\n resetWorkingDirectories,\r\n resetLocationBeforeSaving,\r\n addWorkingDirectories\r\n};\r\n\r\nconst connector = connect(mapStateToProps, mapDispatchToProps);\r\ntype PropsFromRedux = ConnectedProps;\r\n\r\ninterface DuplicateFilesProps extends PropsFromRedux {\r\n showSelectVersion?: boolean;\r\n onCancel?: () => void;\r\n hasDuplicateFolders?: boolean;\r\n mode\r\n}\r\n\r\nconst DuplicateFiles: React.FunctionComponent = (props: DuplicateFilesProps) => {\r\n const languageStrings = React.useContext(LanguageContext);\r\n\r\n const [isFileOpenLocally, setIsFileOpenLocally] = React.useState(false);\r\n\r\n const [options, setOptions] = React.useState([\r\n { key: OneDriveOverWriteEnum.rename.toString(), text: languageStrings.Rename },\r\n { key: OneDriveOverWriteEnum.replace.toString(), text: languageStrings.Replace }\r\n ]);\r\n\r\n const [folderOptions] = React.useState([\r\n { key: OneDriveOverWriteEnum.rename.toString(), text: languageStrings.Rename }\r\n ]);\r\n\r\n React.useEffect(() => {\r\n const currentFileUniqueId = CacheHelper.get(DocubirdCache.currentFileUniqueId);\r\n if (props.mode === ModeEnum.office && props.files[0]?.filePreCommitResult?.uniqueId === currentFileUniqueId) {\r\n setIsFileOpenLocally(true);\r\n } else {\r\n setIsFileOpenLocally(false);\r\n }\r\n }, [props.mode, props.files]);\r\n\r\n React.useEffect(() => {\r\n setOptions([\r\n { key: OneDriveOverWriteEnum.rename.toString(), text: languageStrings.Rename },\r\n { key: OneDriveOverWriteEnum.replace.toString(), text: languageStrings.Replace, disabled: (props.hasLockedCheckedOutFiles || isFileOpenLocally) }\r\n ])\r\n }, [props.hasLockedCheckedOutFiles, isFileOpenLocally]);\r\n\r\n React.useEffect(() => {\r\n props.setOneDriveOverwriteOptionSelected(OneDriveOverWriteEnum.rename);\r\n }, []);\r\n\r\n const handleRadioSelection = (ev: React.FormEvent, option: IChoiceGroupOption): void => {\r\n let selectedProp: string = OneDriveOverWriteEnum[option.key]; // to avoid language collissions\r\n props.setOneDriveOverwriteOptionSelected(OneDriveOverWriteEnum[selectedProp]);\r\n };\r\n\r\n const cancelDuplicateSave = () => {\r\n if (props.needsRedirect) {\r\n props.setNeedsRedirectToHome(false);\r\n props.resetWorkingDirectories();\r\n }\r\n\r\n if (props.onCancel) {\r\n props.onCancel();\r\n }\r\n\r\n props.setOneDriveOverwriteOptionSelected(OneDriveOverWriteEnum.notSelected);\r\n //props.resetDuplicateFilesAndOverWriteSettings(props.files);\r\n goToLastPageBeforeSavingForSeachedFolders();\r\n };\r\n\r\n const goToLastPageBeforeSavingForSeachedFolders = () => {\r\n if (props.oneDriveLocationsBeforeSaving?.length > 0) {\r\n props.resetWorkingDirectories(props.oneDriveLocationsBeforeSaving);\r\n props.resetLocationBeforeSaving();\r\n }\r\n };\r\n\r\n return (\r\n \r\n {props.hasLockedCheckedOutFiles &&\r\n \r\n {languageStrings.OneOrMoreFilesLockedCheckedOut}\r\n }\r\n {props.hasDuplicateEmails\r\n ? \r\n : \r\n }\r\n {props.hasDuplicateFolders &&\r\n }\r\n {!props.showSelectVersion &&\r\n \r\n \r\n }\r\n \r\n )\r\n};\r\n\r\nexport default connector(DuplicateFiles);\r\n","import * as React from \"react\";\r\nimport { ChoiceGroup, IChoiceGroupOption, IChoiceGroupStyles, IStackStyles, IStackTokens, PrimaryButton, Stack } from \"@fluentui/react\";\r\nimport { OneDriveOverWriteEnum } from \"../../enums/oneDriveOverWriteEnum\";\r\nimport { LanguageContext } from \"../../../../../utilities/LocalizationModule\";\r\n\r\nconst stackStylesDefault: IStackStyles = {\r\n root: {\r\n paddingTop: 15\r\n }\r\n};\r\nconst stackStylesPadded: IStackStyles = {\r\n root: {\r\n paddingTop: 15,\r\n paddingBottom: 15\r\n }\r\n};\r\nconst stackTokens: IStackTokens = {\r\n childrenGap: 20\r\n};\r\nconst choiceGroupStyles: IChoiceGroupStyles = { label: { fontSize: 16 } };\r\n\r\ninterface DuplicateFoldersProps {\r\n showSelectVersion?: boolean;\r\n onCancel?: () => void;\r\n}\r\n\r\nconst DuplicateFolders: React.FunctionComponent = (props: DuplicateFoldersProps) => {\r\n const languageStrings = React.useContext(LanguageContext);\r\n\r\n const [folderOptions] = React.useState([\r\n { key: OneDriveOverWriteEnum.rename.toString(), text: languageStrings.Rename }\r\n ]);\r\n\r\n const cancelDuplicateSave = () => {\r\n if (props.onCancel) {\r\n props.onCancel();\r\n }\r\n };\r\n\r\n return (\r\n \r\n \r\n {!props.showSelectVersion && \r\n \r\n }\r\n \r\n )\r\n};\r\n\r\nexport default DuplicateFolders;\r\n","import * as React from \"react\";\r\nimport { Dropdown, IDropdownOption, ResponsiveMode, IStackTokens, Stack, ActionButton, StackItem, TextField, IStackStyles, Label } from \"@fluentui/react\";\r\nimport { getLibraryDefaultValues, getListSettings, getSharePointContentTypeFields, getSharePointContentTypes, getUserEffectivePermissions } from \"../../../services/SharePointRestServices\";\r\nimport { ComponentTypes } from \"../../../config/config\";\r\nimport InputMetaDataFactory from \"../InputMetadataFactory\";\r\nimport { SharepointSpServices } from \"../../../services/SharepointSpServices\";\r\nimport { SharePointInputData } from \"../../../interfaces/props/SharePointInputData\";\r\nimport { SharePointMetadataBooleans } from \"../../../config/sharepointConstants\";\r\nimport Loader from \"../../Loader\";\r\nimport { connect, ConnectedProps } from \"react-redux\";\r\nimport { RootState } from \"../../../redux\";\r\nimport { setSavingLocation } from \"../../../redux/modules/savingLocation\";\r\nimport { setIsBusyLoadingMetadata, setIsCheckingForDuplicates } from \"../../../redux/modules/savingInBackground\";\r\nimport { setFile, setFileExpander, setFilesCanOverwrite } from \"../../../redux/modules/file\";\r\nimport { addRegionalSettings } from \"../../../redux/modules/regional\";\r\nimport authModule from \"../../../../../utilities/AuthModule\";\r\nimport { LanguageContext } from \"../../../../../utilities/LocalizationModule\";\r\nimport { DefaultValueService } from \"../../../services/DefaultValueService\";\r\nimport { BaseSharepointHelper, SharepointContentTypeHelper } from \"../../helpers/sharepointContentTypeHelper\";\r\nimport { DocubirdCache, internalSharepointName, piiConfig, SharepointFilters, SharePointFolderContentTypeIds, sharePointInternalFileName, sharePointInternalTitleName } from \"../../../config/constants\";\r\nimport { FolderView } from \"../../helpers/folderView\";\r\nimport { getDriveItemSharepointUniqueId, getDriveRootWebUrl, getProtectionLabels } from \"../../../services/GraphService\"\r\nimport { InfoProtectionFileTypeEnum } from \"../../enums/InformationProtectionFileTypesEnum\"\r\nimport savingLocationStructureModule from \"../../../../../utilities/SavingLocationStructureModule\";\r\nimport { logger } from \"../../../../../utilities/logger\";\r\nimport { IOfficeService } from \"../../../interfaces/IOfficeService\";\r\nimport emailMapper, { IMappedValue } from \"../../../services/EmailMapper\";\r\nimport { OutlookService } from \"../../../services/OutlookService\";\r\nimport { OutlookUtils } from \"../../../../../utilities/OutlookUtils\";\r\nimport { axiosRetryGet } from \"../../../../../utilities/AxiosRetryUtil\";\r\nimport { IDocumentSetSettings } from \"../../../interfaces/IDocumentSetSettings\";\r\nimport { IContentType } from \"../../../interfaces/IContentType\";\r\nimport { useFiles } from \"../../_v2/redux/hooks/useFiles\";\r\nimport generalModule from \"../../../../../utilities/GeneralModule\";\r\nimport { setCanViewFolder } from \"../../../redux/modules/currentSharepointFolder\";\r\nimport { FileOption } from \"../../../interfaces/IFileOption\";\r\nimport { editFilePropertiesButtonStyles } from \"../../../config/controlStyles\";\r\nimport { boundField, currentSharepointFolderUserPermissions } from \"../../../redux/models/reduxModels\";\r\nimport { DatasourceFieldHelper } from \"../../helpers/dataSourceFieldHelper\";\r\nimport { ModeEnum } from \"../../enums/modeEnum\";\r\nimport { IFileToUpload } from \"../../../interfaces/IFileToUpload\";\r\nimport { IFilePreCommitResult } from \"../../../interfaces/IFilePreCommitResult\";\r\nimport { IPageSettings } from \"../../../interfaces/IPageSettings\";\r\nimport { OneDriveUrlHelper } from \"../../helpers/oneDriveUrlHelper\";\r\nimport { DragAndDropHelper } from \"../../../../../utilities/DragAndDropHelper\";\r\nimport { ContentManagerCopyMoveModeEnum } from \"../../enums/ContentManagerCopyMoveModeEnum\";\r\nimport { CacheHelper } from \"../../../../../utilities/CacheHelper\";\r\nimport { ISharePointToEmailMapping } from \"../../_v2/redux/api/local/api-local-interfaces\";\r\nimport { apiFilePreCommitCheck } from \"../../../services/ApiService\";\r\nimport { ILibraryDefault, ILibraryDefaultValue } from \"../../../interfaces/ILibraryDefaults\";\r\nimport { tryDecodeUriComponent } from \"../../../../../utilities/EncodeDecode\";\r\nimport { DatasourceHelper } from \"../../helpers/dataSourceHelper\";\r\nimport { DatasourceService } from \"../../../services/DatasourceService\";\r\nimport { formatNameFieldValue } from \"../../../services/FileFolderNameExtensions\";\r\nimport { IMailSendConfig } from \"../../../interfaces/IMailSendPayload\";\r\nimport useDidMountEffect from \"../../../../../utilities/Hooks/useDidMountEffect\";\r\n\r\nconst multipleMetaUpdateIcon = { iconName: \"Edit\" };\r\n\r\nconst inputFieldsStackStyles: React.CSSProperties = {\r\n paddingBottom: 15\r\n}\r\n\r\nconst loaderStackStyles: Partial = {\r\n root: { width: \"100%\", height: \"100%\", margin: 0, paddingTop: 20, overflow: \"auto\" }\r\n};\r\n\r\nconst stackTokens: IStackTokens = {\r\n childrenGap: 15\r\n};\r\n\r\nconst undefinedString: string = \"_undefined_\";\r\n\r\nconst mapStateToProps = (state: RootState) => {\r\n return {\r\n workingDirectories: state.workingDirectories?.workingDirectories,\r\n isSavingInBackground: state.savingInBackground?.isSavingInBackground,\r\n currentDirectory:\r\n state.workingDirectories?.workingDirectories[state.workingDirectories?.workingDirectories?.length - 1],\r\n files: state.files?.files,\r\n regionalSettings: state.regionalSettings,\r\n siteInfo: state.tenantInfo?.sites,\r\n hiddenMetadataFields: state.tenantInfo?.hiddenMetadataFields,\r\n reload: state.reload?.toggle,\r\n currentSharepointFolder: state.currentSharepointFolder,\r\n tenantReplaceFileNameWithGUID: state.tenantInfo?.replaceFileNameWithGUID,\r\n tenantDisableFileRename: state.tenantInfo?.disableFileRename,\r\n datasources: state.tenantInfo?.datasources,\r\n mode: state.mode?.mode,\r\n moveTo: state.contentManagerDirectory?.moveTo,\r\n convertEmailToPDF: state.user?.settings.convertEmailToPDF,\r\n oneDriveWebUrl: state.user?.oneDriveWebUrl,\r\n oneDriveRootDetails: state.workingDirectories?.oneDriveRootDetails\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setIsCheckingForDuplicates,\r\n setSavingLocation,\r\n setFilesCanOverwrite,\r\n addRegionalSettings,\r\n setCanViewFolder,\r\n setFile,\r\n setFileExpander,\r\n setIsBusyLoadingMetadata\r\n};\r\n\r\nconst connector = connect(mapStateToProps, mapDispatchToProps);\r\ntype PropsFromRedux = ConnectedProps;\r\n\r\ninterface SaveWithMetaDataProps extends PropsFromRedux {\r\n updateSharepointMetadataToSave: (value: SharePointInputData[], informationProtectionId: string, changedIndex?: number) => void;\r\n inputValuesToSave: SharePointInputData[];\r\n OfficeService?: IOfficeService;\r\n isInfoMode?: boolean;\r\n addNameField?: boolean;\r\n disableNameField?: boolean;\r\n isCreateFromTemplate?: boolean;\r\n isInOneDrive?: boolean;\r\n itemContentTypeId?: string;\r\n itemWebUrl?: string;\r\n itemSharepointListId?: string;\r\n fieldsChanged?: (fields: any[], contentTypeId: string, inputValues?: SharePointInputData[]) => void;\r\n fieldsLoaded?: () => void;\r\n selectedIndividualFile?: FileOption;\r\n setSelectedIndividualFile?: (selectedIndividualFile: FileOption) => void;\r\n showUpdateIndividualFilesButton?: boolean;\r\n setIsCMMultipleFilesMetaDataPanelOpen?: (isCMMultipleFilesMetaDataPanelOpen: boolean) => void;\r\n userItemPermissions?: currentSharepointFolderUserPermissions;\r\n showSelectedFileCount?: boolean;\r\n isCurrentDirectorySPList?: boolean;\r\n isBulkEdit?: boolean;\r\n mailSendConfig?: IMailSendConfig;\r\n}\r\n\r\nconst SaveWithMetaData: React.FunctionComponent = ({\r\n updateSharepointMetadataToSave,\r\n inputValuesToSave,\r\n setSavingLocation,\r\n setIsCheckingForDuplicates,\r\n setCanViewFolder,\r\n workingDirectories,\r\n currentDirectory,\r\n files,\r\n setFilesCanOverwrite,\r\n regionalSettings,\r\n addRegionalSettings,\r\n siteInfo,\r\n hiddenMetadataFields,\r\n OfficeService,\r\n reload,\r\n currentSharepointFolder,\r\n isInfoMode,\r\n addNameField,\r\n disableNameField,\r\n isInOneDrive,\r\n itemContentTypeId,\r\n itemWebUrl,\r\n itemSharepointListId,\r\n fieldsLoaded,\r\n fieldsChanged,\r\n tenantReplaceFileNameWithGUID,\r\n tenantDisableFileRename,\r\n isCreateFromTemplate,\r\n selectedIndividualFile,\r\n setSelectedIndividualFile,\r\n showUpdateIndividualFilesButton,\r\n setIsCMMultipleFilesMetaDataPanelOpen,\r\n datasources,\r\n mode,\r\n setFile,\r\n moveTo,\r\n userItemPermissions,\r\n showSelectedFileCount,\r\n setFileExpander,\r\n convertEmailToPDF,\r\n isCurrentDirectorySPList,\r\n isBulkEdit,\r\n mailSendConfig,\r\n oneDriveWebUrl,\r\n oneDriveRootDetails,\r\n setIsBusyLoadingMetadata\r\n}: SaveWithMetaDataProps) => {\r\n const languageStrings = React.useContext(LanguageContext);\r\n\r\n const [fileList, setFileList] = React.useState(!DragAndDropHelper.isDroppedModeActive ? files : files.filter(f => f.isFileSystemEntry));\r\n const [selectedFileList, setSelectedFileList] = React.useState(fileList?.filter(x => x.isSelected) ?? []);\r\n const [isLoading, setLoading] = React.useState(true);\r\n const [contentTypes, setContentTypes] = React.useState([]);\r\n const [documentSetSettings, setDocumentSetSettings] = React.useState();\r\n const [fields, setFields] = React.useState([]);\r\n const [selectedContentType, setSelectedContentType] = React.useState();\r\n\r\n const [protectionLabels, setProtectionLabels] = React.useState([]);\r\n const [selectedProtectionLabel, setSelectedProtectionLabel] = React.useState();\r\n const [showProtectionDropdown, setShowProtectionDropdown] = React.useState(false);\r\n\r\n const [sharepointService, setSharepointService] = React.useState(null);\r\n const [datasourceFields] = React.useState(DatasourceFieldHelper.getDatasourceFields(datasources, [currentDirectory?.siteDisplayName ?? \"\"], [currentDirectory?.DocumentLibrary ?? \"\"]));\r\n\r\n // const [officeFileName, setOfficeFileName] = React.useState(mode === ModeEnum.office && fileList?.length === 1 ? fileList[0].name : \"\");\r\n const [selectedFileName, setSelectedFileName] = React.useState(selectedFileList?.length === 1 ? selectedFileList[0].name : \"\");\r\n\r\n const emailMappings = React.useRef([]);\r\n const locationDefaultValues = React.useRef(null);\r\n\r\n const { getFilePreCommitCheckAsync } = useFiles();\r\n\r\n const isOneDriveBusiness = React.useRef(isInOneDrive\r\n || (itemWebUrl ?? currentDirectory?.webUrl)?.startsWith(oneDriveRootDetails?.sharePointSiteUrl ?? undefinedString)\r\n || (itemWebUrl ?? currentDirectory?.webUrl)?.startsWith(oneDriveWebUrl ?? undefinedString)\r\n || oneDriveWebUrl?.startsWith((itemWebUrl ?? currentDirectory?.webUrl) ?? undefinedString));\r\n\r\n const showStaticNameField: boolean = React.useMemo(() => {\r\n return !isInfoMode && !isCurrentDirectorySPList && !tenantReplaceFileNameWithGUID && !isBulkEdit;\r\n }, [isInfoMode, isCurrentDirectorySPList, tenantReplaceFileNameWithGUID, isBulkEdit]);\r\n\r\n React.useEffect(() => {\r\n setIsLoading(true);\r\n setIsCheckingForDuplicates(true);\r\n const setupAsyncWrapper = async () => {\r\n try {\r\n const accessToken = !isOneDriveBusiness.current\r\n ? await authModule.getSharePointAccessToken()\r\n : await authModule.getOneDriveAccessToken();\r\n\r\n const webUrl: string = !isOneDriveBusiness.current\r\n ? (itemWebUrl ?? currentDirectory.webUrl)\r\n : OneDriveUrlHelper.getSiteUrl(itemWebUrl ?? currentDirectory.webUrl);\r\n\r\n const isOneDrive: boolean = isOneDriveBusiness.current\r\n || (itemWebUrl ?? currentDirectory?.webUrl)?.startsWith(oneDriveRootDetails?.sharePointSiteUrl ?? undefinedString)\r\n || webUrl?.startsWith(oneDriveWebUrl ?? undefinedString)\r\n || oneDriveWebUrl?.startsWith(webUrl ?? undefinedString);\r\n\r\n if (isOneDrive && !isOneDriveBusiness.current) {\r\n isOneDriveBusiness.current = true;\r\n }\r\n\r\n const sharepointSpService = new SharepointSpServices(webUrl, accessToken);\r\n setSharepointService(sharepointSpService);\r\n const regionalSettingsAvailable = regionalSettings[webUrl];\r\n if (!regionalSettingsAvailable) {\r\n const regionalSettings = !isOneDrive ? await sharepointSpService.getSiteRegionalSettings() : null;\r\n if (regionalSettings) {\r\n addRegionalSettings({ ...regionalSettings, webUrl: webUrl });\r\n }\r\n }\r\n\r\n // await Promise.all([\r\n // getProtectionLabelsGraph(),\r\n // getContentTypes(accessToken),\r\n // ]);\r\n await getContentTypes(accessToken);\r\n\r\n if (!isInfoMode) {\r\n if (!currentDirectory.isSaveLocationStructureSet) {\r\n savingLocationStructureModule.setSavingLocationStructure(workingDirectories);\r\n }\r\n\r\n setSavingLocation({\r\n display: currentDirectory.fileTitle ?? currentDirectory.displayName,\r\n webUrl: webUrl,\r\n directory: currentDirectory.directory,\r\n documentLibrary: currentDirectory.DocumentLibrary,\r\n sharePointListId: currentDirectory.sharePointListId ?? itemSharepointListId,\r\n teamId: workingDirectories?.find(dir => dir.teamGroupId)?.teamGroupId,\r\n channelId: workingDirectories?.find(dir => dir.teamChannelId)?.teamChannelId\r\n }, isOneDrive);\r\n }\r\n\r\n setIsLoading(false);\r\n\r\n if (fieldsLoaded) {\r\n fieldsLoaded();\r\n }\r\n\r\n if (!isInfoMode && !tenantReplaceFileNameWithGUID) {\r\n if (fileList?.length > 1) {\r\n let destUrl: string;\r\n if (!isOneDrive && currentDirectory?.isTeamsRootFolder && !currentDirectory.parentId) {\r\n destUrl = await getDriveRootWebUrl(currentDirectory.id);\r\n }\r\n else if (isOneDrive && oneDriveWebUrl) {\r\n destUrl = !currentDirectory.directory ? oneDriveWebUrl : `${oneDriveWebUrl}/${currentDirectory.directory}`;\r\n }\r\n else {\r\n destUrl = !currentDirectory.directory ? webUrl : `${webUrl}/${currentDirectory.directory}`;\r\n }\r\n\r\n const preComitResult = await getFilePreCommitCheckAsync(\r\n files,\r\n {\r\n autoFolderCreation: !(new FolderView(siteInfo, currentDirectory).canViewFolder()),\r\n destinationUrl: destUrl,\r\n siteUrl: isOneDrive ? OneDriveUrlHelper.getSiteUrl(webUrl) : webUrl\r\n },\r\n isOneDrive\r\n );\r\n\r\n if (preComitResult?.some(file => file?.isDuplicate === true)) {\r\n setFileExpander(true);\r\n }\r\n }\r\n else if (selectedFileList?.length === 1) {\r\n setFile(await checkFile(selectedFileList[0].name));\r\n }\r\n }\r\n } catch (e) {\r\n logger(e, \"SaveToSharepoint.tsx (useEffect 1)\");\r\n setIsLoading(false);\r\n if (fieldsLoaded) {\r\n fieldsLoaded();\r\n }\r\n }\r\n setIsCheckingForDuplicates(false);\r\n };\r\n\r\n setupAsyncWrapper();\r\n }, [reload]);\r\n\r\n React.useEffect(() => {\r\n const updatedFileList = !DragAndDropHelper.isDroppedModeActive ? files : files.filter(f => f.isFileSystemEntry);\r\n const updatedSelectedFileList = updatedFileList?.filter(x => x.isSelected) ?? [];\r\n setFileList(updatedFileList);\r\n setSelectedFileList(updatedFileList?.filter(x => x.isSelected) ?? []);\r\n setSelectedFileName(updatedSelectedFileList?.length === 1 ? updatedSelectedFileList[0].name : \"\");\r\n }, [files]);\r\n\r\n useDidMountEffect(() => {\r\n let isCurrentCall = true;\r\n let debounceTimer;\r\n\r\n debounceTimer = setTimeout(async () => {\r\n if (!isInfoMode && selectedFileName) {\r\n const checkedFile: IFileToUpload = await checkFile(selectedFileName);\r\n if (isCurrentCall) {\r\n setFile(checkedFile);\r\n }\r\n }\r\n }, 900);\r\n\r\n return () => {\r\n isCurrentCall = false;\r\n clearTimeout(debounceTimer);\r\n };\r\n }, [isInfoMode, selectedFileName]);\r\n\r\n // React.useEffect(() => {\r\n // //check if there are any files in the list of FileToUpload that are compatible with protection labels\r\n // try {\r\n // if (protectionLabels?.length > 0) {\r\n // const someCompatible = fileList\r\n // .filter(f => f.isSelected)\r\n // .some(f => isCompatibleType(f.extension));\r\n // setShowProtectionDropdown(someCompatible);\r\n // if (!someCompatible) {\r\n // setSelectedProtectionLabel({\r\n // key: null,\r\n // text: \"\",\r\n // title: \"\"\r\n // });\r\n // }\r\n // } else {\r\n // setShowProtectionDropdown(false);\r\n // setSelectedProtectionLabel({\r\n // key: null,\r\n // text: \"\",\r\n // title: \"\"\r\n // });\r\n // }\r\n // } catch (e) {\r\n // logger(e, \"SaveToSharepoint.tsx (useEffect 2)\");\r\n // }\r\n\r\n // }, [fileList, protectionLabels, selectedIndividualFile]);\r\n\r\n useDidMountEffect(() => {\r\n const asyncWrapper = async () => {\r\n await getMailExchangeInformation();\r\n\r\n let inputValuesToSaveFields: SharePointInputData[] = await Promise.all(fields.map(async (item, index) => {\r\n return await setupInputValues(item, index);\r\n }));\r\n\r\n //Typecasting here, because \".key\" can be int or string\r\n const sensitivityLabelId: string = selectedProtectionLabel ? selectedProtectionLabel.key as string : null;\r\n updateSharepointMetadataToSave(inputValuesToSaveFields, sensitivityLabelId);\r\n }\r\n\r\n asyncWrapper();\r\n }, [OfficeService]);\r\n\r\n const setIsLoading = (isLoading: boolean) => {\r\n setLoading(isLoading);\r\n setIsBusyLoadingMetadata(isLoading);\r\n }\r\n\r\n const checkFile = async (selectedFileName: string) => {\r\n let file: IFileToUpload = { ...(selectedFileList[0]), name: selectedFileName };\r\n let preCommitResult: IFilePreCommitResult;\r\n if (selectedFileName) {\r\n setIsCheckingForDuplicates(true);\r\n try {\r\n const saveLocation: IPageSettings = savingLocationStructureModule.getSavingDestination() ?? currentDirectory;\r\n\r\n const isOneDrive: boolean = isOneDriveBusiness.current\r\n || (itemWebUrl ?? currentDirectory?.webUrl)?.startsWith(oneDriveRootDetails?.sharePointSiteUrl ?? undefinedString)\r\n || saveLocation.webUrl?.startsWith(oneDriveWebUrl ?? undefinedString)\r\n || oneDriveWebUrl?.startsWith(saveLocation.webUrl ?? undefinedString);\r\n\r\n if (isOneDrive && !isOneDriveBusiness.current) {\r\n isOneDriveBusiness.current = true;\r\n }\r\n\r\n if (saveLocation) {\r\n let destUrl: string;\r\n if (!isOneDrive && saveLocation.isTeamsRootFolder && !saveLocation.parentId) {\r\n destUrl = await getDriveRootWebUrl(currentDirectory.id);\r\n }\r\n else if (isOneDrive && oneDriveWebUrl) {\r\n destUrl = !saveLocation.directory ? oneDriveWebUrl : `${oneDriveWebUrl}/${saveLocation.directory}`;\r\n }\r\n else {\r\n destUrl = !saveLocation.directory ? saveLocation.webUrl : `${saveLocation.webUrl}/${saveLocation.directory}`;\r\n }\r\n\r\n preCommitResult = await apiFilePreCommitCheck({\r\n accessToken: !isOneDrive ? await authModule.getSharePointAccessToken() : await authModule.getOneDriveAccessToken(),\r\n autoFolderCreation: isOneDrive ? false : !(new FolderView(siteInfo, saveLocation).canViewFolder()),\r\n fileName: (file.isMainMailItem && convertEmailToPDF) ? `${file.name}.pdf` : `${file.name}.${file.extension}`,\r\n destinationUrl: destUrl,\r\n siteUrl: isOneDrive ? OneDriveUrlHelper.getSiteUrl(saveLocation.webUrl) : saveLocation.webUrl\r\n });\r\n }\r\n } catch (error) {\r\n logger(error, \"SaveToSharepoint.tsx (checkFile)\");\r\n }\r\n setIsCheckingForDuplicates(false);\r\n }\r\n\r\n if (!preCommitResult) {\r\n preCommitResult = { exists: false, checkedOut: false, checkedOutBy: null, locked: false, lockedBy: null };\r\n }\r\n\r\n const fileToSet: IFileToUpload = {\r\n ...file,\r\n name: selectedFileName,\r\n isDuplicate: preCommitResult.exists,\r\n filePreCommitResult: preCommitResult\r\n }\r\n\r\n return fileToSet;\r\n }\r\n\r\n const getMailExchangeInformation = async (mailSendConfig?: IMailSendConfig) => {\r\n let mailItemRestId: string;\r\n let mailItemRestUrl: string;\r\n let token: string;\r\n\r\n if (!mailSendConfig) {\r\n const itemId = !generalModule.isInConentMangerMode() ? Office?.context?.mailbox?.item?.itemId : null;\r\n if (itemId) {\r\n mailItemRestId = OutlookService.getItemRestId(itemId);\r\n mailItemRestUrl = await OutlookUtils.getRestURL();\r\n token = await OutlookUtils.getOutlookToken();\r\n }\r\n }\r\n else {\r\n mailItemRestId = mailSendConfig.mailItemRestId;\r\n mailItemRestUrl = mailSendConfig.restURL;\r\n token = mailSendConfig.outlookToken;\r\n }\r\n\r\n if (mailItemRestId && mailItemRestUrl && token) {\r\n const updateMessageUrl = mailItemRestUrl + \"/messages/\" + mailItemRestId;\r\n const headers = {\r\n \"Authorization\": \"Bearer \" + token\r\n }\r\n\r\n try {\r\n const response = (await axiosRetryGet(updateMessageUrl, {\r\n headers: headers\r\n }))?.data;\r\n emailMapper.updateValuesFromExchange(response);\r\n } catch (e) {\r\n logger(e, \"SaveToSharepoint.tsx (getMailExchangeInformation)\");\r\n }\r\n }\r\n }\r\n\r\n // const isCompatibleType = (extension: string): boolean => {\r\n // const objVals = Object.keys(InfoProtectionFileTypeEnum);\r\n // let any = objVals.filter((value) => {\r\n // return value.toLowerCase() === extension?.trim().toLowerCase()\r\n // })\r\n // return any.length > 0;\r\n // }\r\n\r\n const getContentTypes = async (accessToken: string) => {\r\n if (!isOneDriveBusiness.current) {\r\n const documentSetContentTypeId: string =\r\n currentDirectory?.parentDocumentSetContentTypeId\r\n ??\r\n workingDirectories?.find(dir => dir?.contentTypeId?.startsWith(SharePointFolderContentTypeIds.documentSet))?.contentTypeId;\r\n\r\n let [contentTypeResult, documentSetSettings, libraryDefaults] = await Promise.all(\r\n [\r\n getSharePointContentTypes(accessToken, itemWebUrl ?? currentDirectory.webUrl, itemSharepointListId ?? currentDirectory.sharePointListId, documentSetContentTypeId ? true : false),\r\n getDocumentSetSettings(accessToken, documentSetContentTypeId),\r\n getLibraryDefaultValues(accessToken, itemWebUrl ?? currentDirectory?.webUrl, currentDirectory?.directory),\r\n getMailExchangeInformation(mailSendConfig),\r\n getLibrarySettings(),\r\n ]\r\n );\r\n\r\n setLocationDefaultValues(libraryDefaults);\r\n\r\n if (contentTypeResult?.length > 0) {\r\n const isFolderOrDocumentSetContentType: boolean = itemContentTypeId?.startsWith(SharePointFolderContentTypeIds.folder);\r\n let contentTypes: IContentType[];\r\n if (!isFolderOrDocumentSetContentType) {\r\n contentTypes = SharepointContentTypeHelper.mapDocumentContentTypes(contentTypeResult);\r\n }\r\n else {\r\n contentTypes = SharepointContentTypeHelper.mapFolderOrDocumentSetContentTypes(contentTypeResult, itemContentTypeId);\r\n }\r\n\r\n if (!isFolderOrDocumentSetContentType && documentSetSettings?.allowedContentTypeIds?.length > 0) {\r\n let allowedContentTypes = contentTypes.filter(contentType => documentSetSettings.allowedContentTypeIds.some(allowedContentType => allowedContentType === contentType.parent?.id));\r\n if (allowedContentTypes.length > 0) { // Ensure to always show content types should filter not return any results\r\n contentTypes = allowedContentTypes;\r\n }\r\n }\r\n\r\n let availableContentTypeDropdownOptions: IDropdownOption[];\r\n if (isBulkEdit && !itemContentTypeId) {\r\n availableContentTypeDropdownOptions = [{ key: \"\", text: \"\" }].concat(contentTypes.map(contentType => ({ key: contentType.id, text: contentType.name })));\r\n }\r\n else {\r\n availableContentTypeDropdownOptions = contentTypes.map(contentType => ({ key: contentType.id, text: contentType.name }));\r\n }\r\n setContentTypes(availableContentTypeDropdownOptions);\r\n\r\n if (availableContentTypeDropdownOptions.length > 0) {\r\n let defaultSelectedContentType: IDropdownOption;\r\n\r\n if (!isBulkEdit || itemContentTypeId) {\r\n if (!itemContentTypeId) {\r\n const mappedContentTypes: string[] = emailMapper.findMappedColumnNames(\"contentType\");\r\n if (mappedContentTypes) {\r\n defaultSelectedContentType = availableContentTypeDropdownOptions.find(contentType => mappedContentTypes.some(mappedContentType => contentType.text.toLowerCase() === mappedContentType.toLowerCase()));\r\n }\r\n }\r\n else {\r\n defaultSelectedContentType = availableContentTypeDropdownOptions.find(contentType => contentType.key == itemContentTypeId);\r\n }\r\n\r\n if (!defaultSelectedContentType) {\r\n defaultSelectedContentType = availableContentTypeDropdownOptions.find(contentType => (contentType.key as string)?.startsWith(SharePointFolderContentTypeIds.document)) ?? availableContentTypeDropdownOptions[0];\r\n }\r\n\r\n setSelectedContentType(defaultSelectedContentType);\r\n }\r\n else {\r\n defaultSelectedContentType = availableContentTypeDropdownOptions[0];\r\n }\r\n\r\n const { fields, inputValuesToSaveFields } = await getFields(accessToken, documentSetSettings?.sharedFieldIds, defaultSelectedContentType.key as string, defaultSelectedContentType.text);\r\n if (fieldsChanged) fieldsChanged(fields, defaultSelectedContentType.key as string, inputValuesToSaveFields);\r\n }\r\n }\r\n } else {\r\n const { fields } = await getFields(accessToken, documentSetSettings?.sharedFieldIds);\r\n if (fieldsChanged) fieldsChanged(fields, '');\r\n }\r\n };\r\n\r\n const getLibrarySettings = async () => {\r\n if (!generalModule.isInConentMangerMode()) {\r\n const accessToken = !isOneDriveBusiness.current\r\n ? await authModule.getSharePointAccessToken()\r\n : await authModule.getOneDriveAccessToken();\r\n\r\n const webUrl: string = !isOneDriveBusiness.current\r\n ? (itemWebUrl ?? currentDirectory.webUrl)\r\n : OneDriveUrlHelper.getSiteUrl(itemWebUrl ?? currentDirectory.webUrl);\r\n\r\n const listId = currentDirectory?.sharePointListId || itemSharepointListId;\r\n let uniqueId = currentDirectory?.sharePointUniqueId;\r\n if (currentDirectory?.parentId && !uniqueId) {\r\n uniqueId = await getDriveItemSharepointUniqueId(currentDirectory.parentId, currentDirectory.id);\r\n }\r\n\r\n const refreshSettings = currentSharepointFolder?.sharepointListId !== currentDirectory?.sharePointListId;\r\n const refreshPermissions = (!currentSharepointFolder?.userPermissions && !userItemPermissions)\r\n || currentSharepointFolder?.sharepointListId !== listId\r\n || (currentSharepointFolder?.sharePointUniqueId !== uniqueId);\r\n\r\n const [settings, permissions] = await Promise.all([\r\n refreshSettings && getListSettings(accessToken, webUrl, listId),\r\n refreshPermissions && getUserEffectivePermissions(accessToken, webUrl, listId, uniqueId)\r\n ]);\r\n\r\n if (refreshSettings || refreshPermissions) {\r\n setCanViewFolder({\r\n ...currentSharepointFolder,\r\n sharepointListId: listId,\r\n sharePointUniqueId: uniqueId,\r\n canCreateFolder: (refreshSettings && settings) ? settings.EnableFolderCreation : currentSharepointFolder?.canCreateFolder,\r\n contentTypesEnabled: (refreshSettings && settings) ? settings.ContentTypesEnabled : currentSharepointFolder?.contentTypesEnabled,\r\n enableMinorVersions: (refreshSettings && settings) ? settings.EnableMinorVersions : currentSharepointFolder?.enableMinorVersions,\r\n disableOpenInApp: (refreshSettings && settings) ? settings.ExcludeFromOfflineClient === true : currentSharepointFolder?.disableOpenInApp,\r\n userPermissions: (refreshPermissions && permissions) ? permissions : currentSharepointFolder?.userPermissions\r\n });\r\n }\r\n }\r\n }\r\n\r\n const getDocumentSetSettings = async (accessToken: string, documentSetContentTypeId: string): Promise => {\r\n let documentSetSettings: IDocumentSetSettings;\r\n if (documentSetContentTypeId) {\r\n documentSetSettings = await SharepointContentTypeHelper.getDocumentSetSettings(accessToken, currentDirectory.webUrl, currentDirectory.sharePointListId, documentSetContentTypeId);\r\n setDocumentSetSettings(documentSetSettings);\r\n }\r\n return documentSetSettings;\r\n }\r\n\r\n // const getProtectionLabelsGraph = async () => {\r\n // try {\r\n // const protectionLabelsGraph = await getProtectionLabels();\r\n // //Map protection labels to Options, and add the \"None\" option\r\n // const protectionLabelOptions: IDropdownOption[] = [{\r\n // key: null,\r\n // text: \"\",\r\n // title: \"\"\r\n // }]\r\n // .concat(\r\n // protectionLabelsGraph\r\n // .map((label, index) => {\r\n // return {\r\n // key: label.id,\r\n // text: label.name,\r\n // title: label.tooltip?.length > 0 ? label.tooltip : label.name,\r\n // }\r\n // }))\r\n // //.sort((a, b) => a.key.localeCompare(b.key))\r\n // setProtectionLabels(protectionLabelOptions);\r\n // } catch (error) {\r\n // setProtectionLabels(null);\r\n // }\r\n // }\r\n\r\n const getFields = async (accessToken: string, sharedFieldIds: string[] | undefined, contentTypeId: string = null, contentTypeName: string = null) => {\r\n if (!isOneDriveBusiness.current) {\r\n const isInSPList = workingDirectories && workingDirectories.some(x => x.type === ComponentTypes.SharePointList);\r\n let result = await getSharePointContentTypeFields(\r\n accessToken,\r\n itemWebUrl ?? currentDirectory.webUrl,\r\n itemSharepointListId ?? currentDirectory.sharePointListId,\r\n contentTypeId,\r\n isInSPList ? SharepointFilters.metadata.saveSPList : SharepointFilters.metadata.save\r\n );\r\n\r\n let fields = result.map(BaseSharepointHelper.convertMetadataToFields).filter(field => field);\r\n\r\n if (addNameField && (!tenantDisableFileRename || isCreateFromTemplate)) {\r\n let nameField = {\r\n Choices: undefined,\r\n CurrentValue: null,\r\n DefaultValue: null,\r\n Id: \"5cc6dc79-3710-4374-b433-61cb4a686c12\",\r\n InternalName: sharePointInternalFileName,\r\n isValid: true,\r\n xml: {\r\n ColName: \"nvarchar8\",\r\n DisplayName: languageStrings.Name,\r\n ID: \"{5cc6dc79-3710-4374-b433-61cb4a686c12}\",\r\n Name: \"Name\",\r\n ReadOnly: disableNameField === true ? \"TRUE\" : \"FALSE\",\r\n Required: disableNameField === true ? \"FALSE\" : \"TRUE\",\r\n Sealed: \"TRUE\",\r\n ShowInEditForm: \"TRUE\",\r\n ShowInFileDlg: \"FALSE\",\r\n ShowInNewForm: \"FALSE\",\r\n SourceID: \"http://schemas.microsoft.com/sharepoint/v3\",\r\n StaticName: \"Name\",\r\n Type: \"Text\",\r\n }\r\n }\r\n\r\n if (isInfoMode && contentTypeId?.startsWith(SharePointFolderContentTypeIds.folder)) {\r\n const contentTypeInputName: string = `${contentTypeName} name`;\r\n const dataSourceHelper = new DatasourceHelper(new DatasourceService());\r\n const datasourceItem = dataSourceHelper.getInputDataSource(datasources, contentTypeInputName, [currentDirectory?.siteDisplayName ?? \"\"], [currentDirectory?.DocumentLibrary ?? \"\"]);\r\n if (datasourceItem) {\r\n (nameField.xml as any).ContentTypeInputName = contentTypeInputName;\r\n }\r\n }\r\n\r\n fields.unshift(nameField);\r\n }\r\n\r\n if (hiddenMetadataFields?.length > 0) {\r\n fields = fields.filter(field => !hiddenMetadataFields.some(hiddenField => field.xml?.DisplayName?.trim().toLowerCase() === hiddenField.trim()));\r\n }\r\n\r\n if ((!isInfoMode || isCreateFromTemplate) && sharedFieldIds?.length > 0) {\r\n fields = fields.filter(field => !sharedFieldIds.some(sharedFieldId => field.Id === sharedFieldId));\r\n }\r\n else if (isInfoMode && sharedFieldIds?.length > 0) {\r\n fields = fields.map(field => {\r\n if (field.xml?.ReadOnly !== SharePointMetadataBooleans.true && sharedFieldIds.some(sharedFieldId => field.Id === sharedFieldId)) {\r\n field.xml.ReadOnly = SharePointMetadataBooleans.true;\r\n }\r\n return field;\r\n });\r\n }\r\n\r\n if (isBulkEdit) {\r\n fields = fields.filter(field => field.InternalName !== sharePointInternalTitleName);\r\n }\r\n\r\n let inputValuesToSaveFields: SharePointInputData[] = await Promise.all(fields.map(async (item, index) => {\r\n return await setupInputValues(item, index);\r\n }));\r\n inputValuesToSaveFields = addContentTypeMetadataMutation(inputValuesToSaveFields, contentTypeId, false);\r\n CacheHelper.set(DocubirdCache.spEmailPropertyMappings, emailMappings.current);\r\n\r\n //Typecasting here, because \".key\" can be int or string\r\n const sensitivityLabelId: string = selectedProtectionLabel ? selectedProtectionLabel.key as string : null;\r\n updateSharepointMetadataToSave(inputValuesToSaveFields, sensitivityLabelId);\r\n setFields(fields);\r\n return {\r\n fields,\r\n inputValuesToSaveFields\r\n }\r\n } else if (!showStaticNameField) {\r\n const nameField = {\r\n Choices: undefined,\r\n CurrentValue: null,\r\n DefaultValue: null,\r\n Id: \"5cc6dc79-3710-4374-b433-61cb4a686c12\",\r\n InternalName: sharePointInternalFileName,\r\n isValid: true,\r\n xml: {\r\n ColName: \"nvarchar8\",\r\n DisplayName: languageStrings.Name,\r\n ID: \"{5cc6dc79-3710-4374-b433-61cb4a686c12}\",\r\n Name: \"Name\",\r\n Required: \"TRUE\",\r\n Sealed: \"TRUE\",\r\n ShowInEditForm: \"TRUE\",\r\n ShowInFileDlg: \"FALSE\",\r\n ShowInNewForm: \"FALSE\",\r\n SourceID: \"http://schemas.microsoft.com/sharepoint/v3\",\r\n StaticName: \"Name\",\r\n Type: \"Text\",\r\n }\r\n }\r\n\r\n // const titleField = {\r\n // Choices: undefined,\r\n // CurrentValue: null,\r\n // DefaultValue: null,\r\n // Id: \"5cc6dc79-3710-4374-b433-61cb4a686c12\",\r\n // InternalName: sharePointInternalTitleName,\r\n // isValid: true,\r\n // xml: {\r\n // ColName: \"nvarchar8\",\r\n // DisplayName: languageStrings.Title,\r\n // ID: \"{5cc6dc79-3710-4374-b433-61cb4a686c12}\",\r\n // Name: sharePointInternalTitleName,\r\n // Required: \"FALSE\",\r\n // Sealed: \"TRUE\",\r\n // ShowInEditForm: \"TRUE\",\r\n // ShowInFileDlg: \"FALSE\",\r\n // ShowInNewForm: \"FALSE\",\r\n // SourceID: \"http://schemas.microsoft.com/sharepoint/v3\",\r\n // StaticName: sharePointInternalTitleName,\r\n // Type: \"Text\",\r\n // }\r\n // }\r\n const fields = [nameField];\r\n\r\n const inputValuesToSaveFields: SharePointInputData[] = await Promise.all(fields.map(async (item, index) => {\r\n return await setupInputValues(item, index);\r\n }));\r\n CacheHelper.set(DocubirdCache.spEmailPropertyMappings, emailMappings.current);\r\n\r\n setFields(fields);\r\n updateSharepointMetadataToSave(inputValuesToSaveFields, null);\r\n\r\n return {\r\n fields\r\n }\r\n }\r\n return { fields: [] };\r\n };\r\n\r\n const setupInputValues = async (item, index): Promise => {\r\n let defaultValue: any;\r\n\r\n let exchangeMailMode: boolean;\r\n let hasMultipleValuesMapped: boolean;\r\n let emailMappedProperty: string;\r\n\r\n if (!isInfoMode\r\n && mode !== ModeEnum.office\r\n && !DragAndDropHelper.isDroppedModeActive\r\n && (!generalModule.isInConentMangerMode() || (exchangeMailMode = moveTo.moveToEnabled && (moveTo.mode === ContentManagerCopyMoveModeEnum.CopySelectedEmails || moveTo.mode === ContentManagerCopyMoveModeEnum.CopyEntireFolderEmails)))\r\n && item?.xml?.DisplayName) {\r\n const colName = item.xml.DisplayName.trim().toLowerCase(); //directly from sharepoint\r\n const spColumnNames = emailMapper.getAllListedColumns(); //list of all saved columns we should check for mapping\r\n const spColumnName = spColumnNames.find(col => col.toLowerCase() === colName); //either returns undefined or a sharepoint column name\r\n\r\n if (spColumnName) {\r\n if (!exchangeMailMode) {\r\n const mappedValue: IMappedValue = await emailMapper.getSpToEmailMapping(spColumnName, Office?.context?.mailbox, mailSendConfig?.headers);\r\n if (mappedValue?.value) {\r\n defaultValue = DefaultValueService.setMappedDefault(item, mappedValue);\r\n }\r\n }\r\n else {\r\n const selectedItems = CacheHelper.get(DocubirdCache.selectedExchangeItems);\r\n if (selectedItems) {\r\n const mappedResult = emailMapper.getOfficeJSToEmailMapping(spColumnName, selectedItems?.length === 1 ? selectedItems[0] : null);\r\n if (mappedResult) {\r\n if (selectedItems?.length === 1) {\r\n defaultValue = DefaultValueService.setMappedDefault(item, mappedResult.mappedVal);\r\n } else {\r\n hasMultipleValuesMapped = true;\r\n emailMappedProperty = mappedResult.mailPropertyName;\r\n\r\n const mapping: ISharePointToEmailMapping = {\r\n columnName: item.InternalName,\r\n emailProperty: mappedResult.mailPropertyName\r\n }\r\n\r\n emailMappings.current.push(mapping);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (!defaultValue) {\r\n const folderDefaultValue = locationDefaultValues.current?.find(x => x.fieldName.toLowerCase() === item.InternalName.toLowerCase())?.value;\r\n defaultValue = DefaultValueService.setValue(item.xml.Type, folderDefaultValue || item.DefaultValue);\r\n }\r\n\r\n const hasError = !hasMultipleValuesMapped && (item.xml.Required === SharePointMetadataBooleans.true && !defaultValue);\r\n\r\n return {\r\n index: index,\r\n internalName: item.InternalName,\r\n value: hasMultipleValuesMapped ? languageStrings.AutoSetEmailProperty.replace(\"{emailProperty}\", emailMappedProperty) : defaultValue,\r\n hasError,\r\n type: item.xml.Percentage === SharePointMetadataBooleans.true ? `${item.xml.Type}Percentage` : item.xml.Type,\r\n displayName: item.xml.DisplayName,\r\n xml: {\r\n ...item.xml,\r\n ReadOnly: hasMultipleValuesMapped ? \"TRUE\" : item.ReadOnly\r\n },\r\n choices: item.Choices\r\n };\r\n };\r\n\r\n const setLocationDefaultValues = (defaultValues: ILibraryDefault[]) => {\r\n if (Array.isArray(defaultValues) && defaultValues.length > 0) {\r\n const decodedLocation: string = tryDecodeUriComponent(currentDirectory.directory);\r\n const locationDefaults: ILibraryDefault = defaultValues.find(x => x.folder.endsWith(decodedLocation));\r\n\r\n let libraryDefaults: ILibraryDefaultValue[] = [];\r\n if (locationDefaults) {\r\n\r\n // Get current location default values\r\n if (Array.isArray(locationDefaults?.values) && locationDefaults.values.length > 0) {\r\n libraryDefaults = libraryDefaults.concat(locationDefaults.values);\r\n }\r\n\r\n // Get all parent structure default values\r\n const folderUrlParts: string[] = locationDefaults.folder?.split(\"/\");\r\n if (Array.isArray(folderUrlParts) && folderUrlParts.length > 0) {\r\n folderUrlParts.pop();\r\n if (Array.isArray(folderUrlParts) && folderUrlParts.length > 0) {\r\n let parentFolderUrl = folderUrlParts.join(\"/\");\r\n let parentDefaults: ILibraryDefault = defaultValues.find(x => x.folder === parentFolderUrl);\r\n while (parentDefaults) {\r\n if (Array.isArray(parentDefaults?.values) && parentDefaults.values.length > 0) {\r\n libraryDefaults = libraryDefaults.concat(parentDefaults.values);\r\n }\r\n folderUrlParts.pop();\r\n if (Array.isArray(folderUrlParts) && folderUrlParts.length > 0) {\r\n parentFolderUrl = folderUrlParts.join(\"/\");\r\n parentDefaults = defaultValues.find(x => x.folder === parentFolderUrl);\r\n }\r\n }\r\n }\r\n }\r\n\r\n locationDefaultValues.current = libraryDefaults;\r\n }\r\n }\r\n }\r\n\r\n const addContentTypeMetadataMutation = (\r\n inputValuesToSaveFields: SharePointInputData[],\r\n contentTypeId: string,\r\n isDefault: boolean\r\n ) => {\r\n let result = isDefault\r\n ? inputValuesToSaveFields\r\n : [\r\n ...inputValuesToSaveFields,\r\n {\r\n index: inputValuesToSaveFields.length,\r\n internalName: internalSharepointName.contentTypeId,\r\n value: contentTypeId,\r\n hasError: false,\r\n type: \"Content\"\r\n }\r\n ];\r\n\r\n return result;\r\n };\r\n\r\n const handleOnChange = async (event: React.FormEvent, item: IDropdownOption) => {\r\n setFields([]);\r\n setSelectedContentType(item);\r\n var accessToken = await authModule.getSharePointAccessToken();\r\n const { fields } = await getFields(accessToken, documentSetSettings?.sharedFieldIds, item.key as string, item.text);\r\n if (fieldsChanged) fieldsChanged(fields, item.key as string);\r\n handleInputChange(inputValuesToSave.length, item.key, false); // last item(index) will always be the content type (inputValuesToSave.length)\r\n };\r\n\r\n const handleInputChange = (index: number, value: any, hasError: boolean) => {\r\n const updatedinputValuesToSave = [...inputValuesToSave];\r\n updatedinputValuesToSave[index].value = value;\r\n updatedinputValuesToSave[index].hasError = hasError;\r\n const sensitivityLabelId: string = selectedProtectionLabel ? selectedProtectionLabel.key as string : null;\r\n updateSharepointMetadataToSave(updatedinputValuesToSave, sensitivityLabelId, index);\r\n };\r\n\r\n // const savingInBackground = ;\r\n\r\n // const onChangeOverWrite = React.useCallback((ev: React.FormEvent, checked: boolean): void => {\r\n // if (selectedIndividualFile) {\r\n // setSelectedIndividualFile({ ...selectedIndividualFile, canOverwrite: checked })\r\n // } else {\r\n // setFilesCanOverwrite(checked);\r\n // }\r\n // }, [selectedIndividualFile]);\r\n\r\n const handleProtectionLabelChange = async (event: React.FormEvent, item: IDropdownOption) => {\r\n setSelectedProtectionLabel(item);\r\n // const sensitivityLabelId: string = (item.key as string)?.length > 0 ? (item.key as string) : null;\r\n const sensitivityLabelId: string = item.key ? (item.key as string) : null;\r\n updateSharepointMetadataToSave(inputValuesToSave, sensitivityLabelId);\r\n };\r\n\r\n const handleTextFieldOnchange = (\r\n event: React.FormEvent,\r\n newValue: string\r\n ): void => {\r\n // setOfficeFileName(newValue);\r\n setSelectedFileName(formatNameFieldValue(newValue));\r\n };\r\n\r\n const GeneratedFields =\r\n fields.map((item, index, _arr) => {\r\n let inputValueIndex = inputValuesToSave.findIndex(x => x.internalName === item.InternalName);\r\n\r\n return inputValueIndex !== -1 && item.InternalName !== piiConfig.privacySentitiveColumnName && item.InternalName !== piiConfig.privacySentitiveDataColumnName ? (\r\n \r\n \r\n \r\n ) : null;\r\n });\r\n\r\n const inputFields = (\r\n <>\r\n {!isOneDriveBusiness.current && showUpdateIndividualFilesButton && fileList?.filter(x => x.isSelected === true).length > 1 &&\r\n {\r\n setIsCMMultipleFilesMetaDataPanelOpen(true);\r\n }}\r\n text={languageStrings.UpdateIndividualFileMetaData}\r\n />}\r\n \r\n {showSelectedFileCount && \r\n \r\n \r\n {}\r\n \r\n \r\n }\r\n {!isOneDriveBusiness.current && currentSharepointFolder?.contentTypesEnabled === true && \r\n \r\n }\r\n {showStaticNameField &&\r\n \r\n \r\n 1 || moveTo.mode === ContentManagerCopyMoveModeEnum.CopyEntireFolderEmails || tenantDisableFileRename}\r\n label={`${languageStrings.Name}`}\r\n type=\"text\"\r\n value={selectedFileList?.length > 1 ? languageStrings.TitleAutoSet : selectedFileName}\r\n onChange={handleTextFieldOnchange}\r\n required={selectedFileList?.length === 1}\r\n suffix={selectedFileList?.length === 1 ? `.${selectedFileList[0].extension}` : undefined}\r\n errorMessage={selectedFileList?.length === 1 ? (!selectedFileName ? languageStrings.FieldRequired : (selectedFileList[0].isDuplicate ? languageStrings.FileSameName : \"\")) : null}\r\n className=\"xb-sp-input\"\r\n />\r\n \r\n \r\n }\r\n {GeneratedFields}\r\n {showProtectionDropdown && \r\n \r\n }\r\n {/* {showCheckbox &&\r\n \r\n \r\n } */}\r\n \r\n \r\n );\r\n\r\n return isLoading ? : <>{inputFields};\r\n};\r\n\r\nexport default connector(SaveWithMetaData);","export enum EmailCreationEnum {\r\n createAttachments,\r\n addAttachmments,\r\n createShareableLinks,\r\n addShareableLinks,\r\n}\r\n\r\nexport enum EmailCreationTypeEnum {\r\n Attachments,\r\n ShareableLinks,\r\n}","\r\nexport enum FolderTypeIconEnum {\r\n default,\r\n sharepointFolder,\r\n sharepointSite,\r\n documentLibrary,\r\n oneDrive,\r\n oneDriveSubFolder,\r\n teamChannel,\r\n teamMainSite,\r\n teamFolder,\r\n sharepointDocumentSet,\r\n sharepointList,\r\n sharepointHubSite\r\n}\r\n","\r\nexport enum ImageTypeEnum {\r\n url,\r\n font,\r\n fileType\r\n}\r\n","export enum OfficeServiceEnum {\r\n outlook,\r\n generic\r\n}\r\n","export enum SaveMode {\r\n Default,\r\n SaveAsPdf\r\n }","export enum ValidationResultEnum {\r\n SuccessFull = 0,\r\n MinimumExceeded = 1,\r\n MaximumNumberExceeded = 2,\r\n FieldIsRequired = 3,\r\n InvalidUrl = 4\r\n}","export enum DatasourceTypeEnum {\r\n SharePointDocumentTemplate = 0,\r\n SQLServer = 1,\r\n UniveCRM = 2,\r\n SimplicateOrganization = 3,\r\n SimplicateProject = 4,\r\n SimplicateEmployee = 5,\r\n SharePoint = 6,\r\n Internal = 7,\r\n Exchange = 8\r\n}","export enum InputTypeEnum {\r\n Text,\r\n Number,\r\n Percentage,\r\n Currency,\r\n MultiLine,\r\n DateOnly,\r\n DateTime,\r\n YesNo,\r\n hyperLink,\r\n picture,\r\n choice,\r\n multiChoice,\r\n peoplePickerSingle,\r\n peoplePickerMultiple,\r\n taxonomySingle,\r\n taxonomyDouble,\r\n datasourceText,\r\n datasourceDropdown,\r\n datasourceMultipleDropdown,\r\n lookupMulti,\r\n lookupSingle,\r\n datasourceTagPicker\r\n}","import * as React from \"react\";\r\nimport { Checkbox } from \"@fluentui/react/lib/Checkbox\";\r\nimport { Stack, IStackTokens, IStackItemStyles } from \"@fluentui/react/lib/Stack\";\r\nimport {\r\n PrimaryButton,\r\n DefaultButton,\r\n TextField,\r\n mergeStyles,\r\n Label,\r\n TooltipHost,\r\n TooltipOverflowMode,\r\n ITextFieldStyles,\r\n DirectionalHint,\r\n TooltipDelay,\r\n IButtonStyles,\r\n Toggle\r\n} from \"@fluentui/react\";\r\nimport { FileIconType, getFileTypeIconProps } from \"@fluentui/react-file-type-icons\";\r\nimport { Icon, FontIcon } from \"@fluentui/react/lib/Icon\";\r\nimport { RootState } from \"../../redux\";\r\nimport { ConnectedProps, connect } from \"react-redux\";\r\nimport {\r\n updateFileName,\r\n setFileExpander,\r\n setFile,\r\n setFiles\r\n} from \"../../redux/modules/file\";\r\nimport { addWorkingDirectory } from \"../../redux/modules/workingDirectory\";\r\nimport { setIsCheckingForDuplicates } from \"../../redux/modules/savingInBackground\";\r\nimport { ComponentTypes } from \"../../config/config\";\r\nimport { LanguageContext } from \"../../../../utilities/LocalizationModule\";\r\nimport { FileFolderNameExtensions } from \"../../services/FileFolderNameExtensions\";\r\nimport { IFileToUpload } from \"../../interfaces/IFileToUpload\";\r\nimport { IOfficeService } from \"../../interfaces/IOfficeService\";\r\nimport { invalidSaveModes, SharePointFolderContentTypeIds } from \"../../config/constants\";\r\nimport { IPageSettings } from \"../../interfaces/IPageSettings\";\r\nimport { OneDriveOverWriteEnum } from \"../enums/oneDriveOverWriteEnum\";\r\nimport { OneDriveUrlHelper } from \"../helpers/oneDriveUrlHelper\";\r\nimport { FolderView } from \"../helpers/folderView\";\r\nimport savingLocationStructureModule from \"../../../../utilities/SavingLocationStructureModule\";\r\nimport { getPlatform, isMobile } from \"../../styles/mobileStyles\";\r\nimport { IMailSendPayload } from \"../../interfaces/IMailSendPayload\";\r\nimport generalModule from \"../../../../utilities/GeneralModule\";\r\nimport authModule from \"../../../../utilities/AuthModule\";\r\nimport { IFilePreCommitResult } from \"../../interfaces/IFilePreCommitResult\";\r\nimport { logger } from \"../../../../utilities/logger\";\r\nimport { newTemplateFilterEnum } from \"../enums/newTemplateFilterEnum\";\r\nimport { ContentManagerCopyMoveModeEnum } from \"../enums/ContentManagerCopyMoveModeEnum\";\r\nimport { CMEmailAttachmentPanel } from \"../../../../contentManager/Panels/CMEmailAttachmentPanel\";\r\nimport { ModeEnum } from \"../enums/modeEnum\";\r\nimport { DragAndDropHelper } from \"../../../../utilities/DragAndDropHelper\";\r\nimport { FolderPreCommitRequest } from \"../_v2/redux/api/local/api-local-interfaces\";\r\nimport { apiFilePreCommitCheck, apiFolderPreCommitCheck } from \"../../services/ApiService\";\r\nimport { StringUtil } from \"@brandless/tsutility\";\r\nimport { getDriveRootWebUrl } from \"../../services/GraphService\";\r\nimport { SaveMode } from \"../enums/SaveModeEnum\";\r\nimport { ISaveButtonProps } from \"../../interfaces/ISaveButtonProps\";\r\n// import { useMailboxDialogAuth } from \"../../../../contentManager/Hooks/useMailboxDialogAuth\";\r\n\r\nconst saveButtonStyles: IButtonStyles = {\r\n splitButtonContainer: {\r\n width: \"100%\",\r\n }\r\n}\r\n\r\nconst themedLargeStackTokens: IStackTokens = {\r\n childrenGap: \"s2\",\r\n padding: \"0px 0px\"\r\n};\r\n\r\nconst tooltipHostCalloutProps = { gapSpace: 7 };\r\n\r\nconst iconClassMed = mergeStyles({\r\n fontSize: 16\r\n});\r\n\r\nconst iconClassSmall = mergeStyles({\r\n fontSize: 12\r\n});\r\n\r\nconst textFieldStyles: Partial = {\r\n suffix: {\r\n paddingLeft: 0\r\n }\r\n};\r\n\r\nconst textFieldSubFolder: Partial = {\r\n fieldGroup: {\r\n height: 24,\r\n },\r\n suffix: {\r\n paddingLeft: 0\r\n }\r\n};\r\n\r\nexport interface ChangedInput {\r\n id: string;\r\n value: string;\r\n}\r\n\r\nconst rootItemStyles: IStackItemStyles = {\r\n root: {\r\n paddingLeft: 0,\r\n display: 'flex',\r\n alignItems: 'center'\r\n }\r\n};\r\n\r\nconst folderItemStyles: IStackItemStyles = {\r\n root: {\r\n paddingLeft: 15,\r\n display: 'flex',\r\n alignItems: 'center'\r\n }\r\n};\r\n\r\nconst subFolderItemStyles: IStackItemStyles = {\r\n root: {\r\n paddingLeft: 30,\r\n display: 'flex',\r\n alignItems: 'center'\r\n }\r\n};\r\n\r\nconst fileNameStackItemStyles: IStackItemStyles = {\r\n root: {\r\n overflow: \"hidden\"\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n setFile,\r\n setFiles,\r\n updateFileName,\r\n addWorkingDirectory,\r\n setFileExpander,\r\n setIsCheckingForDuplicates\r\n};\r\n\r\nconst mapStateToProps = (state: RootState) => {\r\n return {\r\n workingDirectories: state.workingDirectories.workingDirectories,\r\n savingLocation: state.savingLocation,\r\n files: state.files.files,\r\n currentDirectory:\r\n state.workingDirectories.workingDirectories[state.workingDirectories.workingDirectories.length - 1],\r\n isSavingInBackground: state.savingInBackground.isBusySaving,\r\n isCheckingForDuplicates: state.savingInBackground.isCheckingForDuplicates,\r\n isLoadingMetadata: state.savingInBackground.isLoadingMetadata,\r\n canOverwrite: state.files.canOverwrite,\r\n expanderIsOpen: state.files.expanderIsOpen,\r\n oneDriveOverwriteOption: state.files.oneDriveOverwriteOption,\r\n mode: state.mode.mode,\r\n needsRedirectHome: state.savingInBackground.needsRedirectToHome,\r\n siteInfo: state.tenantInfo.sites,\r\n currentSharepointFolder: state.currentSharepointFolder,\r\n tenantReplaceFileNameWithGUID: state.tenantInfo?.replaceFileNameWithGUID,\r\n enableNewTemplateFilters: state.tenantInfo.enableNewTemplateFilters,\r\n newTemplateDocumentSetFilters: state.tenantInfo.newTemplateDocumentSetFilters,\r\n newTemplateFolderFilters: state.tenantInfo.newTemplateFolderFilters,\r\n newTemplateLibraryFilters: state.tenantInfo.newTemplateLibraryFilters,\r\n moveTo: state.contentManagerDirectory.moveTo,\r\n oneDriveWebUrl: state.user.oneDriveWebUrl,\r\n convertEmailToPDF: state.user.settings.convertEmailToPDF\r\n };\r\n};\r\n\r\nconst connector = connect(mapStateToProps, mapDispatchToProps);\r\ntype PropsFromRedux = ConnectedProps;\r\n\r\ninterface MailItemProps extends PropsFromRedux {\r\n saveSharePointEmailandMetadata: (autoFolderCreation: boolean, saveMode?: SaveMode) => void;\r\n saveToOneDrive?: (\r\n folderName?: string,\r\n fromLocationItemCurrentDirectory?: IPageSettings,\r\n savingLocation?: string,\r\n locationBeforeSaving?: IPageSettings[],\r\n searchedFolderLocation?: IPageSettings[],\r\n goToHome?: boolean,\r\n saveMode?: SaveMode\r\n ) => void;\r\n OfficeService?: IOfficeService;\r\n mailSendPayload?: IMailSendPayload;\r\n filesNameUpdated?: (file: IFileToUpload) => void;\r\n fileCheckedToggle?: (file: IFileToUpload) => void;\r\n saveMode: SaveMode;\r\n setSaveMode: (saveMode: SaveMode) => void;\r\n}\r\n\r\nconst FileItems: React.FunctionComponent = ({\r\n saveSharePointEmailandMetadata,\r\n saveToOneDrive,\r\n savingLocation,\r\n workingDirectories,\r\n needsRedirectHome,\r\n setFile,\r\n setFiles,\r\n updateFileName,\r\n files,\r\n currentDirectory,\r\n addWorkingDirectory,\r\n isSavingInBackground,\r\n isCheckingForDuplicates,\r\n canOverwrite,\r\n setFileExpander,\r\n expanderIsOpen,\r\n oneDriveOverwriteOption,\r\n OfficeService,\r\n mode,\r\n siteInfo,\r\n currentSharepointFolder,\r\n mailSendPayload,\r\n tenantReplaceFileNameWithGUID,\r\n setIsCheckingForDuplicates,\r\n filesNameUpdated,\r\n fileCheckedToggle,\r\n enableNewTemplateFilters,\r\n newTemplateDocumentSetFilters,\r\n newTemplateFolderFilters,\r\n newTemplateLibraryFilters,\r\n moveTo,\r\n oneDriveWebUrl,\r\n convertEmailToPDF,\r\n saveMode,\r\n setSaveMode,\r\n isLoadingMetadata\r\n}: MailItemProps) => {\r\n const languageStrings = React.useContext(LanguageContext);\r\n\r\n const [normalizedSubject, setNormalizedSubject] = React.useState(\"\");\r\n const [savingButtonProps, setSavingButtonProps] = React.useState({ text: `${languageStrings.Select} ${savingLocation.display}`, isValidSaveLocation: false });\r\n const [changedInput, setChangedInput] = React.useState();\r\n const [isCurrentDirectorySPList, setIsCurrentDirectorySPList] = React.useState(false);\r\n const [isCMEmailAttachmentPanelOpen, setIsCMEmailAttachmentPanelOpen] = React.useState(false);\r\n const [inExchangeMode, setInExchangeMode] = React.useState(false);\r\n const [showSelectedEmailSummary, setShowSelectedEmailSummary] = React.useState(false);\r\n\r\n const isOneDrive = currentDirectory?.type === ComponentTypes.OneDrive || currentDirectory?.type === ComponentTypes.OneDriveSubFolder;\r\n\r\n // const { isMailboxTokenAvailable, isMailboxTokenRequestInProgress, requestMailboxToken } = useMailboxDialogAuth();\r\n const [fileList, setFileList] = React.useState([]);\r\n\r\n React.useEffect(() => {\r\n setFileList(!DragAndDropHelper.isDroppedModeActive ? files : files.filter(f => f.isFileSystemEntry));\r\n }, [files]);\r\n\r\n React.useEffect(() => {\r\n let debounceTimer = setTimeout(() => {\r\n if (changedInput) {\r\n checkFile({ ...changedInput }, false);\r\n }\r\n }, 500);\r\n\r\n return () => {\r\n clearTimeout(debounceTimer);\r\n };\r\n }, [changedInput]);\r\n\r\n React.useEffect(() => {\r\n const setupAsyncWrapper = async () => {\r\n setNormalizedSubject(await OfficeService.getSubject(mode, mailSendPayload));\r\n };\r\n setupAsyncWrapper();\r\n }, [OfficeService]);\r\n\r\n React.useEffect(() => {\r\n setSavingButtonProps(prevVal => {\r\n return {\r\n ...prevVal,\r\n text: saveMode === SaveMode.Default\r\n ? `${languageStrings.SaveTo} ${savingLocation.display}`\r\n : `${languageStrings.SaveTo} ${savingLocation.display} ${languageStrings.AsPdf}`\r\n };\r\n });\r\n }, [saveMode]);\r\n\r\n React.useEffect(() => {\r\n if (currentDirectory && (generalModule.isInConentMangerMode() || currentDirectory?.type === ComponentTypes.Saving)) {\r\n setSaveMode(SaveMode.Default);\r\n setSavingButtonProps({ text: `${languageStrings.SaveTo} ${savingLocation.display}`, isValidSaveLocation: true });\r\n } else {\r\n setSavingButtonProps({ text: `${languageStrings.Select} ${savingLocation.display}`, isValidSaveLocation: false });\r\n }\r\n }, [currentDirectory, mode, savingLocation]);\r\n\r\n React.useEffect(() => {\r\n if (moveTo.moveToEnabled && moveTo.mode === ContentManagerCopyMoveModeEnum.CopySelectedEmails) {\r\n setInExchangeMode(true);\r\n setShowSelectedEmailSummary(true);\r\n }\r\n else if (moveTo.moveToEnabled && moveTo.mode === ContentManagerCopyMoveModeEnum.CopyEntireFolderEmails) {\r\n setInExchangeMode(true);\r\n setShowSelectedEmailSummary(false);\r\n }\r\n else if (currentDirectory?.type === ComponentTypes.Exchange && currentDirectory?.type === ComponentTypes.Exchange && fileList.filter(x => x.isGraphMailItem && x.isSelected).length > 0) {\r\n setInExchangeMode(true);\r\n setShowSelectedEmailSummary(true);\r\n }\r\n else if (currentDirectory?.type === ComponentTypes.Exchange && currentDirectory?.type === ComponentTypes.Exchange && fileList.filter(x => x.isGraphMailItem && x.isSelected).length === 0) {\r\n setInExchangeMode(true);\r\n setShowSelectedEmailSummary(false);\r\n }\r\n else {\r\n setInExchangeMode(false);\r\n setShowSelectedEmailSummary(false);\r\n }\r\n }, [moveTo, currentDirectory, fileList])\r\n\r\n const [enableSave_NewTempateSettings, setEnableSave_NewTempateSettings] = React.useState(false);\r\n\r\n React.useEffect(() => {\r\n setEnableSave_NewTempateSettings(false);\r\n const isInFolder = ((currentDirectory?.contentTypeId?.startsWith(SharePointFolderContentTypeIds.folder) && currentDirectory.serverRelativePath) || (currentDirectory?.directory?.length > 0 && currentDirectory.parentId));\r\n let currentContentype: string;\r\n if (enableNewTemplateFilters) {\r\n if (currentDirectory?.contentTypeId?.startsWith(SharePointFolderContentTypeIds.documentSet)) {\r\n currentContentype = SharePointFolderContentTypeIds.documentSet;\r\n } else if (isInFolder) {\r\n currentContentype = SharePointFolderContentTypeIds.folder;\r\n } else {\r\n currentContentype = \"root\";\r\n }\r\n\r\n if (currentContentype === \"root\" && newTemplateLibraryFilters?.includes(newTemplateFilterEnum.file)) {\r\n setEnableSave_NewTempateSettings(true);\r\n }\r\n else if (currentContentype === SharePointFolderContentTypeIds.folder && newTemplateFolderFilters?.includes(newTemplateFilterEnum.file)) {\r\n setEnableSave_NewTempateSettings(true);\r\n }\r\n else if (currentContentype === SharePointFolderContentTypeIds.documentSet && newTemplateDocumentSetFilters?.includes(newTemplateFilterEnum.file)) {\r\n setEnableSave_NewTempateSettings(true);\r\n }\r\n } else {\r\n setEnableSave_NewTempateSettings(true);\r\n }\r\n\r\n }, [enableNewTemplateFilters, currentDirectory, newTemplateLibraryFilters, newTemplateFolderFilters, newTemplateDocumentSetFilters]);\r\n\r\n React.useEffect(() => {\r\n if (workingDirectories && workingDirectories.some(x => x.type === ComponentTypes.SharePointList)) {\r\n setIsCurrentDirectorySPList(true);\r\n }\r\n }, [currentDirectory]);\r\n\r\n const checkFile = async (currentChangedInput: ChangedInput, formatEmptyValue: boolean = true) => {\r\n let file: IFileToUpload = fileList.find(f => f.id === currentChangedInput.id);\r\n if (file) {\r\n let preCommitResult: IFilePreCommitResult;\r\n if (canCheckForDuplicates()) {\r\n setIsCheckingForDuplicates(true);\r\n try {\r\n const saveLocation: IPageSettings = savingLocationStructureModule.getSavingDestination() ?? currentDirectory;\r\n if (saveLocation) {\r\n let destUrl: string;\r\n if (!isOneDrive && saveLocation.isTeamsRootFolder && !saveLocation.parentId) {\r\n destUrl = await getDriveRootWebUrl(currentDirectory.id);\r\n }\r\n else {\r\n destUrl = !saveLocation.directory ? saveLocation.webUrl : `${saveLocation.webUrl}/${saveLocation.directory}`;\r\n }\r\n\r\n preCommitResult = await apiFilePreCommitCheck({\r\n accessToken: !isOneDrive ? await authModule.getSharePointAccessToken() : await authModule.getOneDriveAccessToken(),\r\n autoFolderCreation: isOneDrive ? false : !(new FolderView(siteInfo, saveLocation).canViewFolder()),\r\n fileName: (file.isMainMailItem && convertEmailToPDF) ? `${currentChangedInput.value}.pdf` : `${currentChangedInput.value}.${file.extension}`,\r\n destinationUrl: destUrl,\r\n siteUrl: isOneDrive ? OneDriveUrlHelper.getSiteUrl(saveLocation.webUrl) : saveLocation.webUrl\r\n });\r\n }\r\n } catch (error) {\r\n logger(error, \"FileItems.tsx (handleEmailChecked)\");\r\n }\r\n setIsCheckingForDuplicates(false);\r\n }\r\n\r\n if (!preCommitResult) {\r\n preCommitResult = { exists: false, checkedOut: false, checkedOutBy: null, locked: false, lockedBy: null };\r\n }\r\n\r\n const fileToSet: IFileToUpload = {\r\n ...file,\r\n name: FileFolderNameExtensions.EnsureValidName(currentChangedInput.value, false, formatEmptyValue),\r\n isDuplicate: preCommitResult.exists,\r\n filePreCommitResult: preCommitResult\r\n }\r\n\r\n setFile(fileToSet);\r\n if (filesNameUpdated) {\r\n filesNameUpdated(fileToSet)\r\n }\r\n }\r\n }\r\n\r\n const getChildrenIds = (files: IFileToUpload[], folderId: string): string[] => {\r\n let children = [];\r\n for (let file of files) {\r\n if (file.parentFolderId === folderId) {\r\n children.push(file.id);\r\n if (file.isFolder) {\r\n children = children.concat(getChildrenIds(files, file.id));\r\n }\r\n }\r\n }\r\n return children;\r\n }\r\n\r\n const getParentIds = (files: IFileToUpload[], fileId: string): string[] => {\r\n let parents = [];\r\n for (let file of files) {\r\n if (file.id === fileId) {\r\n if (file.parentFolderId) {\r\n parents.push(file.parentFolderId);\r\n parents = parents.concat(getParentIds(files, file.parentFolderId));\r\n }\r\n break;\r\n }\r\n }\r\n return parents;\r\n };\r\n\r\n const toggleSelectedFolder = (files: IFileToUpload[], folderId: string, selected: boolean): IFileToUpload[] => {\r\n const childrenIds = getChildrenIds(files, folderId);\r\n return files.map(file => {\r\n if (childrenIds.includes(file.id) || file.id === folderId) {\r\n return { ...file, isSelected: selected };\r\n }\r\n return file;\r\n });\r\n };\r\n\r\n const handleEmailChecked = async (event: React.FormEvent, isChecked: boolean) => {\r\n const { name } = event.target as HTMLInputElement;\r\n const index = fileList.findIndex(item => item.id === name);\r\n if (index !== -1) {\r\n let file: IFileToUpload = { ...(fileList[index]) };\r\n file.isSelected = isChecked;\r\n\r\n let preCommitResult: IFilePreCommitResult;\r\n if (file.isFolder) {\r\n const updatedFiles: IFileToUpload[] = toggleSelectedFolder(files, file.id, isChecked);\r\n setFiles(updatedFiles);\r\n\r\n if (isChecked) {\r\n const saveLocation: IPageSettings = savingLocationStructureModule.getSavingDestination() ?? currentDirectory;\r\n if (saveLocation) {\r\n let destUrl: string;\r\n if (!isOneDrive && saveLocation.isTeamsRootFolder && !saveLocation.parentId) {\r\n destUrl = await getDriveRootWebUrl(currentDirectory.id);\r\n }\r\n else {\r\n destUrl = !saveLocation.directory ? saveLocation.webUrl : `${saveLocation.webUrl}/${saveLocation.directory}`;\r\n }\r\n\r\n try {\r\n const folderRequest: FolderPreCommitRequest = {\r\n accessToken: isOneDrive ? await authModule.getOneDriveAccessToken() : await authModule.getSharePointAccessToken(),\r\n destinationUrl: destUrl,\r\n siteUrl: isOneDrive ? OneDriveUrlHelper.getSiteUrl(saveLocation.webUrl) : saveLocation.webUrl,\r\n folderName: file.name\r\n }\r\n\r\n preCommitResult = await apiFolderPreCommitCheck(folderRequest);\r\n } catch (error) {\r\n logger(error, \"FileItems.tsx (handleEmailChecked(folderPreCommitCheck))\");\r\n }\r\n\r\n }\r\n }\r\n }\r\n else if (isChecked && canCheckForDuplicates()) {\r\n if (file.parentFolderId) {\r\n const parentFolderIds = getParentIds(files, file.id);\r\n //mark all parent folders selected\r\n const updatedFiles = files.map(uFile => {\r\n if (parentFolderIds.includes(uFile.id)) {\r\n return { ...uFile, isSelected: isChecked };\r\n }\r\n\r\n if (uFile.id === file.id) {\r\n return { ...uFile, isSelected: isChecked };\r\n }\r\n\r\n return uFile;\r\n });\r\n setFiles(updatedFiles);\r\n } else {\r\n setFile(file); //update file list to prevent checkbox control update delay due to getFilePreCommitInfo\r\n }\r\n\r\n if (!file.parentFolderId) {\r\n setIsCheckingForDuplicates(true);\r\n try {\r\n const saveLocation: IPageSettings = savingLocationStructureModule.getSavingDestination() ?? currentDirectory;\r\n if (saveLocation) {\r\n let destUrl: string;\r\n if (!isOneDrive && saveLocation.isTeamsRootFolder && !saveLocation.parentId) {\r\n destUrl = await getDriveRootWebUrl(currentDirectory.id);\r\n }\r\n else {\r\n destUrl = !saveLocation.directory ? saveLocation.webUrl : `${saveLocation.webUrl}/${saveLocation.directory}`;\r\n }\r\n\r\n preCommitResult = await apiFilePreCommitCheck({\r\n accessToken: !isOneDrive ? await authModule.getSharePointAccessToken() : await authModule.getOneDriveAccessToken(),\r\n autoFolderCreation: isOneDrive ? false : !(new FolderView(siteInfo, saveLocation).canViewFolder()),\r\n fileName: (file.isMainMailItem && convertEmailToPDF) ? `${file.name}.pdf` : `${file.name}.${file.extension}`,\r\n destinationUrl: destUrl,\r\n siteUrl: isOneDrive ? OneDriveUrlHelper.getSiteUrl(saveLocation.webUrl) : saveLocation.webUrl\r\n });\r\n }\r\n } catch (error) {\r\n logger(error, \"FileItems.tsx (handleEmailChecked)\");\r\n }\r\n setIsCheckingForDuplicates(false);\r\n }\r\n }\r\n\r\n if (!preCommitResult) {\r\n preCommitResult = { exists: false, checkedOut: false, checkedOutBy: null, locked: false, lockedBy: null };\r\n }\r\n\r\n const fileToSet: IFileToUpload = { ...file, isDuplicate: preCommitResult.exists, filePreCommitResult: preCommitResult }\r\n setFile(fileToSet);\r\n if (fileCheckedToggle) {\r\n fileCheckedToggle(fileToSet);\r\n }\r\n }\r\n };\r\n\r\n const handleTextFieldOnchange = (event: any, newValue: string): void => {\r\n const currentChangedInput: ChangedInput = {\r\n id: event.target.name,\r\n value: newValue\r\n }\r\n updateFileName({ name: currentChangedInput.value, id: currentChangedInput.id });\r\n setChangedInput(currentChangedInput)\r\n };\r\n\r\n const handleTextFieldOnBlur = (): void => {\r\n if (changedInput && (!changedInput.value || StringUtil.IsNullOrWhiteSpace(changedInput.value))) {\r\n checkFile({ ...changedInput }, true);\r\n }\r\n };\r\n\r\n const handleSaveClick = async (saveMode?: SaveMode) => {\r\n // if (!isMailboxTokenAvailable) {\r\n // requestMailboxToken();\r\n // return;\r\n // }\r\n if (savingLocation.isOneDriveFolder || isOneDrive || currentDirectory?.webUrl === oneDriveWebUrl) {\r\n if (!generalModule.isInConentMangerMode() && currentDirectory?.type !== ComponentTypes.Saving) {\r\n openMetadataSavingPage();\r\n } else {\r\n saveToOneDrive(null, null, null, null, null, needsRedirectHome, saveMode);\r\n }\r\n return;\r\n }\r\n\r\n const isSharePointFolder = currentDirectory?.type === ComponentTypes.SharePointFolders;\r\n if (!generalModule.isInConentMangerMode() && isSharePointFolder) {\r\n openMetadataSavingPage();\r\n return;\r\n }\r\n\r\n saveSharePointEmailandMetadata(!(new FolderView(siteInfo, currentDirectory).canViewFolder()), saveMode);\r\n };\r\n\r\n const openMetadataSavingPage = () => {\r\n addWorkingDirectory({ ...currentDirectory, displayName: languageStrings.Properties, type: ComponentTypes.Saving });\r\n };\r\n\r\n const canCheckForDuplicates = () => {\r\n return (isOneDrive || !tenantReplaceFileNameWithGUID)\r\n && (generalModule.isInConentMangerMode()\r\n || (currentDirectory && currentDirectory?.type === ComponentTypes.Saving)\r\n || (oneDriveOverwriteOption && oneDriveOverwriteOption !== OneDriveOverWriteEnum.notSelected));\r\n };\r\n\r\n const noItems = !fileList.length ? (\r\n <>\r\n
\r\n {languageStrings.NoItemsFound}\r\n
\r\n

{languageStrings.FileNotSaved}

\r\n \r\n ) : null;\r\n\r\n const getFileErrorMessage = (file: IFileToUpload) => {\r\n if (file.filePreCommitResult) {\r\n if (file.filePreCommitResult.exists && !file.filePreCommitResult.locked && !file.filePreCommitResult.checkedOut)\r\n return file.isFolder ? languageStrings.FolderSameName : languageStrings.FileSameName;\r\n if (file.filePreCommitResult.exists && file.filePreCommitResult.locked && !file.filePreCommitResult.checkedOut)\r\n return languageStrings.FileSameLocked;\r\n if (file.filePreCommitResult.exists && !file.filePreCommitResult.locked && file.filePreCommitResult.checkedOut)\r\n return languageStrings.FileSameCheckedOut;\r\n }\r\n\r\n return \"\";\r\n };\r\n\r\n const hasFileSelected = (): boolean => {\r\n return fileList.some(file => file.isSelected);\r\n }\r\n\r\n const hasEmptyName = (): boolean => {\r\n return fileList.some(file => file.isSelected && !file.name);\r\n }\r\n\r\n const hasDuplicateFiles = (): boolean => {\r\n return fileList.some(file => file.isDuplicate);\r\n }\r\n\r\n const isSaveButtonDisabled = () => {\r\n if (isCurrentDirectorySPList) {\r\n return false;\r\n }\r\n\r\n if (moveTo.mode === ContentManagerCopyMoveModeEnum.CopyEntireFolderEmails) {\r\n return false;\r\n }\r\n\r\n if (mode === ModeEnum.office && currentSharepointFolder.userPermissions?.canAddListItem && currentSharepointFolder.userPermissions?.canEditListItem) {\r\n return hasEmptyName() ? true : false;\r\n }\r\n\r\n const isOneDriveLocation: boolean = (savingLocation.isOneDriveFolder || isOneDrive || currentDirectory?.webUrl === oneDriveWebUrl);\r\n\r\n return isCheckingForDuplicates\r\n || isLoadingMetadata\r\n || !hasFileSelected()\r\n || (hasDuplicateFiles() && !canOverwrite)\r\n || currentSharepointFolder.userPermissions?.canAddListItem === false\r\n || currentSharepointFolder.userPermissions?.canEditListItem === false\r\n || (!isOneDriveLocation && currentDirectory?.type === ComponentTypes.Saving && !savingLocation.sharePointListId)\r\n || !enableSave_NewTempateSettings;\r\n }\r\n\r\n const display = (expanderIsOpen && !showSelectedEmailSummary && !inExchangeMode) && (\r\n \r\n {fileList\r\n .map((item, index) => {\r\n let isSubfolderFolderFile = false;\r\n if (item.parentFolderId && !item.isFolder) {\r\n const parentFolder = fileList.find(x => x.isFolder && x.id === item.parentFolderId);\r\n if (parentFolder?.parentFolderId) {\r\n isSubfolderFolderFile = true;\r\n }\r\n }\r\n return (\r\n \r\n \r\n \r\n {!item.isFolder && }\r\n {item.isFolder && }\r\n \r\n\r\n \r\n \r\n {item.isAttachment ? (\r\n x.isSelected === true).length === 1)}\r\n styles={textFieldStyles}\r\n borderless\r\n value={item.name}\r\n name={item.id}\r\n onChange={handleTextFieldOnchange}\r\n onBlur={handleTextFieldOnBlur}\r\n suffix={item.extension ? `.${item.extension}` : undefined}\r\n className=\"xb-select-documents-input\"\r\n />\r\n ) : (\r\n x.isSelected === true).length === 1)}\r\n styles={item.isFolder && item.parentFolderId ? textFieldSubFolder : textFieldStyles}\r\n borderless\r\n name={item.id}\r\n value={item.name}\r\n onChange={handleTextFieldOnchange}\r\n onBlur={handleTextFieldOnBlur}\r\n className=\"xb-select-documents-input\"\r\n />\r\n )}\r\n \r\n {item.isFolder && item.parentFolderId && item.folderPath &&\r\n
\r\n \r\n {item.folderPath}\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 const canConvertToPDF = React.useMemo(() => {\r\n return savingLocation?.display\r\n && !isSavingInBackground\r\n && ((isOneDrive && oneDriveOverwriteOption === OneDriveOverWriteEnum.rename) || !fileList.some(item => item?.filePreCommitResult?.locked && item.isSelected)) // cannot have selected locked file\r\n && ((isOneDrive && oneDriveOverwriteOption === OneDriveOverWriteEnum.rename) || !fileList.some(item => item?.filePreCommitResult?.checkedOut && item.isSelected)) // cannot have selected checked out file\r\n && currentDirectory?.type !== ComponentTypes.AdvancedSearch\r\n && (isOneDrive || !currentDirectory?.parentId || currentSharepointFolder.canView)\r\n && savingButtonProps?.isValidSaveLocation === true\r\n && fileList.filter(f => f.isSelected).some(f => f.canSaveAsPDF);\r\n }, [savingLocation, isSavingInBackground, isOneDrive, oneDriveOverwriteOption, currentDirectory, savingButtonProps, fileList]);\r\n\r\n const getMainContainerClass = React.useMemo(() => {\r\n if (inExchangeMode && showSelectedEmailSummary) {\r\n return \"xb-select-documents-container\" + (canConvertToPDF ? \" save-pdf\" : \"\");\r\n }\r\n if (inExchangeMode && !showSelectedEmailSummary) {\r\n return \"xb-select-documents-container notVisible\" + (canConvertToPDF ? \" save-pdf\" : \"\");\r\n }\r\n if (isCurrentDirectorySPList) {\r\n return \"xb-select-documents-container notVisible\" + (canConvertToPDF ? \" save-pdf\" : \"\");\r\n }\r\n if (mode === ModeEnum.office && !DragAndDropHelper.isDroppedModeActive) {\r\n return \"xb-select-documents-container notVisible\" + (canConvertToPDF ? \" save-pdf\" : \"\");\r\n }\r\n\r\n const mobile: boolean = isMobile();\r\n let containerClass: string = \"xb-select-documents-container\";\r\n if (canConvertToPDF) {\r\n containerClass = containerClass.concat(\" save-pdf\");\r\n }\r\n\r\n if (expanderIsOpen) {\r\n containerClass = containerClass.concat(!mobile && fileList?.length > (!canConvertToPDF ? 5 : 4) ? \" open-full\" : \" open\");\r\n }\r\n if (mobile) {\r\n containerClass = containerClass.concat(\" mobile\");\r\n }\r\n return containerClass;\r\n }, [mode, expanderIsOpen, inExchangeMode, showSelectedEmailSummary, isCurrentDirectorySPList, fileList, canConvertToPDF]);\r\n\r\n const getFooterClass = React.useMemo(() => {\r\n let footerClass: string = \"xb-select-documents-footer\";\r\n if (canConvertToPDF) {\r\n footerClass = footerClass.concat(\" save-pdf\");\r\n }\r\n return footerClass;\r\n }, [canConvertToPDF]);\r\n\r\n return ((!generalModule.isInConentMangerMode() && !invalidSaveModes.some(item => item === mode)) || generalModule.isInConentMangerMode()) ? (\r\n
\r\n {!isCurrentDirectorySPList && expanderIsOpen && !inExchangeMode && (\r\n
setFileExpander(!expanderIsOpen)}>\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n )}\r\n {!isCurrentDirectorySPList && !expanderIsOpen && !inExchangeMode &&\r\n (\r\n
setFileExpander(!expanderIsOpen)}>\r\n
\r\n
\r\n 0 ? fileList[0].extension : null,\r\n size: 20,\r\n imageFileType: \"png\"\r\n })}\r\n />\r\n
\r\n
\r\n \r\n \r\n {!DragAndDropHelper.isDroppedModeActive && <>{\" \"}}\r\n {fileList.filter(item => item.isSelected).length} {languageStrings.Of} {fileList.length}{\" \"}\r\n {languageStrings.ItemsSelected}\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n )\r\n }\r\n {showSelectedEmailSummary && inExchangeMode &&
setIsCMEmailAttachmentPanelOpen(true)}>\r\n
\r\n
\r\n 0 ? fileList[0].extension : null,\r\n size: 20,\r\n imageFileType: \"png\"\r\n })}\r\n />\r\n
\r\n
\r\n \r\n \r\n {\" \"}\r\n {fileList.filter(item => item.isSelected && item.isGraphMailItem && item.isAttachment).length} {languageStrings.Of} {fileList.filter(item => item.isGraphMailItem && item.isAttachment).length}{\" \"}\r\n {languageStrings.AttachmentsSelected}\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
}\r\n
\r\n {((moveTo.moveToEnabled && fileList.filter(x => !x.isAttachment)?.length === 1 && !isCurrentDirectorySPList && !showSelectedEmailSummary) || (!moveTo.moveToEnabled && !isCurrentDirectorySPList && !showSelectedEmailSummary)) &&
\r\n {noItems} {display}\r\n
}\r\n
\r\n
\r\n {savingLocation?.display\r\n && !isSavingInBackground\r\n && ((isOneDrive && oneDriveOverwriteOption === OneDriveOverWriteEnum.rename) || !fileList.some(item => item?.filePreCommitResult?.locked && item.isSelected)) // cannot have selected locked file\r\n && ((isOneDrive && oneDriveOverwriteOption === OneDriveOverWriteEnum.rename) || !fileList.some(item => item?.filePreCommitResult?.checkedOut && item.isSelected)) // cannot have selected checked out file\r\n && currentDirectory?.type !== ComponentTypes.AdvancedSearch\r\n && (isOneDrive || !currentDirectory?.parentId || currentSharepointFolder.canView)\r\n ? (\r\n <>\r\n {canConvertToPDF\r\n && setSaveMode(checked ? SaveMode.SaveAsPdf : SaveMode.Default)}\r\n />}\r\n \r\n {\r\n handleSaveClick(saveMode ?? SaveMode.Default);\r\n }}\r\n />\r\n \r\n \r\n )\r\n : }\r\n
\r\n
\r\n
\r\n {isCMEmailAttachmentPanelOpen && setIsCMEmailAttachmentPanelOpen(false)} />}\r\n
\r\n ) : null;\r\n};\r\n\r\nexport default connector(FileItems);\r\n","import { getFileTypeIconAsUrl } from \"@fluentui/react-file-type-icons\";\r\nimport { officeFileType } from \"../../config/constants\";\r\nimport { ISearchOpenFileInfo } from \"../../interfaces/ISearchOpenFileInfo\";\r\n\r\nexport class SearchOpenExtensionHelper {\r\n private static msWord: ISearchOpenFileInfo = { iconSrc: \"https://res-1.cdn.office.net/files/fabric-cdn-prod_20230815.002/assets/brand-icons/product/svg/word_20x1.svg\", type: officeFileType.Word, isOfficeFile: true, officeOnlineEditorAvailable: true, localUrlPrepended: \"ms-word:ofe|u|\" }\r\n private static msExcel: ISearchOpenFileInfo = { iconSrc: \"https://res-1.cdn.office.net/files/fabric-cdn-prod_20230815.002/assets/brand-icons/product/svg/excel_20x1.svg\", type: officeFileType.Excel, isOfficeFile: true, officeOnlineEditorAvailable: true, localUrlPrepended: \"ms-excel:ofe|u|\" }\r\n private static msPowerpoint: ISearchOpenFileInfo = { iconSrc: \"https://res-1.cdn.office.net/files/fabric-cdn-prod_20230815.002/assets/brand-icons/product/svg/powerpoint_20x1.svg\", type: officeFileType.Powerpoint, isOfficeFile: true, officeOnlineEditorAvailable: true, localUrlPrepended: \"ms-powerpoint:ofe|u|\" }\r\n\r\n private static msVisio: ISearchOpenFileInfo = { iconSrc: getFileTypeIconAsUrl({ extension: \".vsdx\", size: 20, imageFileType: \"svg\" }), type: officeFileType.Visio, isOfficeFile: true, localUrlPrepended: \"ms-visio:ofe|u|\" }\r\n private static msAccess: ISearchOpenFileInfo = { iconSrc: getFileTypeIconAsUrl({ extension: \".accdb\", size: 20, imageFileType: \"svg\" }), type: officeFileType.Access, isOfficeFile: true, localUrlPrepended: \"ms-access:ofe|u|\" }\r\n private static msProject: ISearchOpenFileInfo = { iconSrc: getFileTypeIconAsUrl({ extension: \".mpp\", size: 20, imageFileType: \"svg\" }), type: officeFileType.Project, isOfficeFile: true, localUrlPrepended: \"ms-project:ofe|u|\" }\r\n private static msPublisher: ISearchOpenFileInfo = { iconSrc: getFileTypeIconAsUrl({ extension: \".pub\", size: 20, imageFileType: \"svg\" }), type: officeFileType.Publisher, isOfficeFile: true, localUrlPrepended: \"ms-publisher:ofe|u|\" }\r\n private static msInfopath: ISearchOpenFileInfo = { iconSrc: getFileTypeIconAsUrl({ extension: \".xsn\", size: 20, imageFileType: \"svg\" }), type: officeFileType.Infopath, isOfficeFile: true, localUrlPrepended: \"ms-infopath:ofe|u|\" }\r\n\r\n private static browser: ISearchOpenFileInfo = { iconName: \"BrowserTab\", type: officeFileType.Browser, localUrlPrepended: \"\" };\r\n private static app: ISearchOpenFileInfo = { iconName: \"CloneToDesktop\", type: officeFileType.App, localUrlPrepended: \"\" };\r\n\r\n private static validExtensionsDictionary = {\r\n \"doc\": SearchOpenExtensionHelper.msWord,\r\n \"docx\": SearchOpenExtensionHelper.msWord,\r\n \"docm\": SearchOpenExtensionHelper.msWord,\r\n \"dotm\": SearchOpenExtensionHelper.msWord,\r\n \"dotx\": SearchOpenExtensionHelper.msWord,\r\n \"dot\": SearchOpenExtensionHelper.msWord,\r\n \"odt\": SearchOpenExtensionHelper.msWord,\r\n\r\n \"xls\": SearchOpenExtensionHelper.msExcel,\r\n \"xlsx\": SearchOpenExtensionHelper.msExcel,\r\n \"xlsb\": SearchOpenExtensionHelper.msExcel,\r\n \"xlsm\": SearchOpenExtensionHelper.msExcel,\r\n \"ods\": SearchOpenExtensionHelper.msExcel,\r\n\r\n \"pptx\": SearchOpenExtensionHelper.msPowerpoint,\r\n \"ppsx\": SearchOpenExtensionHelper.msPowerpoint,\r\n \"ppt\": SearchOpenExtensionHelper.msPowerpoint,\r\n \"pps\": SearchOpenExtensionHelper.msPowerpoint,\r\n \"pptm\": SearchOpenExtensionHelper.msPowerpoint,\r\n \"potm\": SearchOpenExtensionHelper.msPowerpoint,\r\n \"ppam\": SearchOpenExtensionHelper.msPowerpoint,\r\n \"potx\": SearchOpenExtensionHelper.msPowerpoint,\r\n \"ppsm\": SearchOpenExtensionHelper.msPowerpoint,\r\n \"pot\": SearchOpenExtensionHelper.msPowerpoint,\r\n \"odp\": SearchOpenExtensionHelper.msPowerpoint,\r\n\r\n \"vsdx\": SearchOpenExtensionHelper.msVisio,\r\n \"vsx\": SearchOpenExtensionHelper.msVisio,\r\n \"vtx\": SearchOpenExtensionHelper.msVisio,\r\n \"vdx\": SearchOpenExtensionHelper.msVisio,\r\n \"vdw\": SearchOpenExtensionHelper.msVisio,\r\n \"vsd\": SearchOpenExtensionHelper.msVisio,\r\n \"vsdm\": SearchOpenExtensionHelper.msVisio,\r\n \"vsl\": SearchOpenExtensionHelper.msVisio,\r\n \"vss\": SearchOpenExtensionHelper.msVisio,\r\n \"vssm\": SearchOpenExtensionHelper.msVisio,\r\n \"vssx\": SearchOpenExtensionHelper.msVisio,\r\n \"vst\": SearchOpenExtensionHelper.msVisio,\r\n \"vstm\": SearchOpenExtensionHelper.msVisio,\r\n \"vstx\": SearchOpenExtensionHelper.msVisio,\r\n\r\n \"accdb\": SearchOpenExtensionHelper.msAccess,\r\n \"laccdb\": SearchOpenExtensionHelper.msAccess,\r\n \"mdb\": SearchOpenExtensionHelper.msAccess,\r\n \"adp\": SearchOpenExtensionHelper.msAccess,\r\n \"accdr\": SearchOpenExtensionHelper.msAccess,\r\n \"accdc\": SearchOpenExtensionHelper.msAccess,\r\n \"accde\": SearchOpenExtensionHelper.msAccess,\r\n\r\n \"mpp\": SearchOpenExtensionHelper.msProject,\r\n \"mpt\": SearchOpenExtensionHelper.msProject,\r\n \"mpx\": SearchOpenExtensionHelper.msProject,\r\n\r\n \"pub\": SearchOpenExtensionHelper.msPublisher,\r\n\r\n \"xsn\": SearchOpenExtensionHelper.msInfopath,\r\n \"xsf\": SearchOpenExtensionHelper.msInfopath,\r\n \"xsl\": SearchOpenExtensionHelper.msInfopath,\r\n };\r\n\r\n public static determineOfficeFileType = (extension: string): ISearchOpenFileInfo => {\r\n if (extension) {\r\n return SearchOpenExtensionHelper.validExtensionsDictionary[extension.replace(\".\", \"\").trim().toLowerCase()]\r\n ?? SearchOpenExtensionHelper.app;\r\n }\r\n return SearchOpenExtensionHelper.browser;\r\n };\r\n}","import authModule from \"../../../../utilities/AuthModule\";\r\nimport { tryDecodeUri, tryDecodeUriComponent, tryEncodeUriComponent } from \"../../../../utilities/EncodeDecode\";\r\nimport { logger } from \"../../../../utilities/logger\";\r\nimport { ComponentTypes } from \"../../config/config\";\r\nimport { contentManager } from \"../../config/constants\";\r\nimport { getDriveItemByWebUrl, getItemWebViewUrl, getListItemWebUrl } from \"../../services/GraphService\";\r\n\r\nconst shareLinkRegex = /\\/:[a-zA-Z0-9]{1,2}:\\/[a-zA-Z0-9]{1,2}\\//;\r\n\r\nexport const isSharePointSharingUrl = (url?: string): boolean => {\r\n if (!url) return false;\r\n\r\n if (url.includes(\"guestaccess.aspx\")) {\r\n return true;\r\n }\r\n\r\n return shareLinkRegex.test(url);\r\n}\r\n\r\nexport const getGridItemUrl = async (item: any, itemUrl: string, listHttpRoot?: string) => {\r\n try {\r\n itemUrl = tryDecodeUriComponent(itemUrl);\r\n let itemWebUrl = \"\";\r\n if (itemUrl?.startsWith(\"/\") && (listHttpRoot || item[\".spItemUrl\"])) {\r\n const sharepointDomain = new URL(listHttpRoot ?? item[\".spItemUrl\"]).origin;\r\n if (isSharePointSharingUrl(itemUrl)) {\r\n const driveItem = await getDriveItemByWebUrl(`${sharepointDomain}${itemUrl}`);\r\n if (driveItem) {\r\n // const itemUrlResult = new URL(await getItemWebViewUrl(await authModule.getGraphAccessToken(), driveItem.driveId, driveItem.id));\r\n const isDocument: boolean = driveItem.file && !driveItem.folder;\r\n const itemUrlResult = new URL(isDocument\r\n ? await getItemWebViewUrl(await authModule.getGraphAccessToken(), driveItem.driveId, driveItem.id)\r\n : await getListItemWebUrl(await authModule.getGraphAccessToken(), driveItem.driveId, driveItem.id)\r\n );\r\n\r\n if (itemUrlResult) {\r\n const decodedHref: string = tryDecodeUri(itemUrlResult.href);\r\n if (isDocument) {\r\n itemWebUrl = itemUrlResult.href;\r\n }\r\n else {\r\n itemWebUrl = `?${contentManager.params.preloadURL}=${tryEncodeUriComponent(decodedHref)}`;\r\n }\r\n }\r\n } else {\r\n itemWebUrl = `${sharepointDomain}${itemUrl}`;\r\n }\r\n }\r\n\r\n if (!itemWebUrl) {\r\n const redirectLocation = `${sharepointDomain}${itemUrl}`;\r\n const itemExtension: string = redirectLocation.split(\".\")?.pop()?.trim()?.split(\"?\")?.shift()?.trim();\r\n if (!itemExtension || itemExtension.length >= 5) {\r\n itemWebUrl = `?${contentManager.params.preloadURL}=${tryEncodeUriComponent(redirectLocation)}`;\r\n }\r\n else {\r\n itemWebUrl = redirectLocation;\r\n }\r\n }\r\n } else {\r\n itemWebUrl = itemUrl;\r\n }\r\n return itemWebUrl;\r\n } catch (error) {\r\n logger(error, \"UrlHelper.ts (getGridItemUrl)\");\r\n }\r\n return itemUrl;\r\n}\r\n\r\nexport const getItemPathArray = (itemWebUrl: string) => {\r\n if (itemWebUrl) {\r\n try {\r\n const url: URL = new URL(itemWebUrl);\r\n if (url) {\r\n const fileLocationDetails: string[] = [];\r\n const isOneDrive: boolean = url.host.endsWith(\"-my.sharepoint.com\");\r\n let extractedpathArray: string[];\r\n if (isOneDrive) {\r\n fileLocationDetails.push(ComponentTypes.OneDrive);\r\n extractedpathArray = url.pathname.split(\"/\");\r\n // extractedpathArray?.pop();\r\n if (extractedpathArray?.length > 3) {\r\n extractedpathArray = extractedpathArray.slice(4);\r\n }\r\n }\r\n else {\r\n fileLocationDetails.push(ComponentTypes.SharePoint);\r\n extractedpathArray = url.pathname?.replace(\"/sites/\", \"\").split(\"/\");\r\n // extractedpathArray?.pop();\r\n }\r\n extractedpathArray?.forEach(x => fileLocationDetails.push(tryDecodeUriComponent(x)));\r\n return fileLocationDetails;\r\n }\r\n } catch (error) {\r\n logger(error, \"UrlHelper.ts (getItemPath)\");\r\n }\r\n }\r\n return null;\r\n}\r\n\r\nexport const isValidHttpUrl = (url: string): boolean => {\r\n if (url) {\r\n try {\r\n const newUrl = new URL(url);\r\n return newUrl.protocol === \"http:\" || newUrl.protocol === \"https:\";\r\n } catch (err) {\r\n // Ignore\r\n }\r\n }\r\n return false;\r\n}","import { dataSourceItem } from \"../../redux/models/reduxModels\";\r\nimport { IDropdownOption } from \"@fluentui/react\";\r\nimport { DatasourceService } from \"../../services/DatasourceService\";\r\n\r\nexport class dataSourceDropdownBinder {\r\n constructor(\r\n private datesourceService: DatasourceService,\r\n private datasource: dataSourceItem,\r\n private displayName: string\r\n ) { }\r\n\r\n getDatasourceEntries = async () => {\r\n const result = await this.datesourceService.GetData({\r\n id: this.datasource.id,\r\n tenantId: this.datasource.tenantId,\r\n typeId: this.datasource.type.id,\r\n typeName: this.datasource.type.name,\r\n name: this.datasource.name,\r\n queryParams: [{ name: this.getDataSourcePropertyToBindTo(), value: \"\" }],\r\n returnOnlyQueriedProperties: true,\r\n allowCache: this.datasource.allowCache\r\n });\r\n\r\n return result;\r\n };\r\n\r\n getDataSourcePropertyToBindTo = () => {\r\n const boundedField = this.datasource && this.datasource.boundFields?.find(item => item?.name?.split(\",\").some(name => name?.trim().toLowerCase() === this.displayName?.trim().toLowerCase()));\r\n return boundedField?.datasourceField ? boundedField.datasourceField.trim() : boundedField?.name?.trim();\r\n };\r\n\r\n bindDataSourceToDropdown = (data: any[], property: string): IDropdownOption[] => {\r\n if (data?.length > 0) {\r\n const mappedPropertyKey: string = Object.keys(data[0])?.find(key => key.toLowerCase().trim() == property.toLowerCase().trim());\r\n if (mappedPropertyKey) {\r\n const arr: IDropdownOption[] = data.filter(item => item[mappedPropertyKey]?.trim().length > 0).map(item => ({ key: item[mappedPropertyKey], text: item[mappedPropertyKey] }));\r\n return arr\r\n .filter((v, i, a) => a.findIndex(t => (t.key === v.key)) === i)\r\n .sort((a, b) => (a.key as string).toUpperCase().trim() < (b.key as string).toUpperCase().trim() ? -1 : 1);\r\n }\r\n }\r\n return [];\r\n };\r\n}","import { dataSourceItem } from \"../../redux/models/reduxModels\";\r\n\r\nexport class DatasourceFieldHelper {\r\n static checkDatasourceAllowed(sites: string[], libraries: string[], datasource: dataSourceItem) {\r\n let siteAllowed: boolean = true;\r\n let libraryAllowed: boolean = true;\r\n\r\n if (datasource?.site\r\n && Array.isArray(sites) && sites.length > 0\r\n && !datasource.site.split(\";\").some(site => sites.some(s => site?.trim().toUpperCase() === s.trim().toUpperCase()))) {\r\n siteAllowed = false;\r\n }\r\n\r\n if (siteAllowed\r\n && datasource?.library\r\n && Array.isArray(libraries) && libraries.length > 0\r\n && !datasource.library.split(\";\").some(library => libraries.some(l => library?.trim().toUpperCase() === l.trim().toUpperCase()))) {\r\n libraryAllowed = false;\r\n }\r\n\r\n return (siteAllowed && libraryAllowed);\r\n }\r\n\r\n static getDatasourceFields(datasources: dataSourceItem[], sites: string[], libraries: string[]) {\r\n return datasources\r\n .filter(item => this.checkDatasourceAllowed(sites, libraries, item))\r\n .map(item => item.boundFields)\r\n .reduce((acc, current) => acc.concat(current), []);\r\n }\r\n}","import { AddDataForm, AddDataResponse } from \"../../../../contentManager/Panels/CMAddDatasourceItemPanel\";\r\nimport { IDatasourceRequestDto } from \"../../interfaces/DatasourceRequestDto\";\r\nimport { dataSourceItem } from \"../../redux/models/reduxModels\";\r\nimport { DatasourceService } from \"../../services/DatasourceService\";\r\nimport { DatasourceFieldHelper } from \"./dataSourceFieldHelper\";\r\n\r\nexport class DatasourceHelper {\r\n constructor(private datasourceService: DatasourceService) { }\r\n\r\n async getSearchStructure(item: dataSourceItem) {\r\n if (item) {\r\n const request: IDatasourceRequestDto = {\r\n id: item.id,\r\n tenantId: item.tenantId,\r\n typeId: item.type.id,\r\n typeName: item.type.name,\r\n name: item.name,\r\n allowCache: item.allowCache\r\n };\r\n\r\n return await this.datasourceService.GetStructure(request);\r\n }\r\n\r\n return [];\r\n }\r\n\r\n async getEditStructure(item: dataSourceItem): Promise {\r\n if (item) {\r\n const request: IDatasourceRequestDto = {\r\n id: item.id,\r\n tenantId: item.tenantId,\r\n typeId: item.type.id,\r\n typeName: item.type.name,\r\n name: item.name\r\n };\r\n\r\n return await this.datasourceService.GetEditStructure(request);\r\n }\r\n\r\n return [];\r\n }\r\n\r\n async addItem(item: dataSourceItem, data: AddDataForm[]) {\r\n if (item) {\r\n const request: IDatasourceRequestDto = {\r\n id: item.id,\r\n tenantId: item.tenantId,\r\n typeId: item.type.id,\r\n typeName: item.type.name,\r\n name: item.name\r\n };\r\n\r\n return await this.datasourceService.GetEditStructure(request);\r\n }\r\n\r\n return [];\r\n }\r\n\r\n getInputDataSource = (items: dataSourceItem[], displayName: string, selectedSites: string[], selectedLibraries: string[]) => {\r\n const dsItem = items\r\n .filter(item => DatasourceFieldHelper.checkDatasourceAllowed(selectedSites, selectedLibraries, item))\r\n .find(source =>\r\n source.boundFields.some(bound => {\r\n const val = bound.name?.split(',').some(name => name.trim().toLowerCase() === displayName?.trim().toLowerCase());\r\n return val;\r\n })\r\n );\r\n return dsItem;\r\n };\r\n\r\n updateSearchInputs(index: number, value: string, inputsToCopy: any[], statePropToUpdate: any) {\r\n if (index >= 0 && index < inputsToCopy.length) {\r\n const copiedInputs = [...inputsToCopy];\r\n copiedInputs[index].value = value;\r\n statePropToUpdate(copiedInputs);\r\n }\r\n }\r\n\r\n getBoundedField(datasource: dataSourceItem, displayName: string) {\r\n const boundedField = datasource?.boundFields.find(item => item.name?.split(\",\").some(name => name.trim().toLowerCase() === displayName.trim().toLowerCase()));\r\n return boundedField?.datasourceField ? boundedField.datasourceField.trim() : boundedField?.name?.trim();\r\n }\r\n}","import { InputTypeEnum } from \"../enums/inputTypeEnum\";\r\nimport { InputTypeSharePointClassifier } from \"./inputTypeSharePointClassifier\";\r\nimport { boundField } from \"../../redux/models/reduxModels\";\r\n\r\nexport class dataSourceSharePointClassifier extends InputTypeSharePointClassifier {\r\n constructor() {\r\n super();\r\n }\r\n\r\n getSharepointInputType(metadata: any, boundedFields: boundField[]): InputTypeEnum {\r\n const boundName: string = (metadata?.ContentTypeInputName ?? metadata?.DisplayName)?.trim().toLowerCase();\r\n const boundedField = boundName && boundedFields?.find(item => item.name?.split(\",\").some(name => name.trim().toLowerCase() === boundName));\r\n if (boundedField) {\r\n return this.determineDatasourceType(boundedField);\r\n }\r\n\r\n return super.getInputType(metadata);\r\n }\r\n\r\n determineDatasourceType = (boundedField: boundField) => {\r\n if (boundedField?.displayAsDropdown && boundedField?.multiSelect) {\r\n return InputTypeEnum.datasourceMultipleDropdown;\r\n }\r\n\r\n if (boundedField?.displayAsDropdown) {\r\n return InputTypeEnum.datasourceDropdown;\r\n }\r\n\r\n if (boundedField?.multiSelect) {\r\n return InputTypeEnum.datasourceTagPicker;\r\n }\r\n\r\n return InputTypeEnum.datasourceText;\r\n }\r\n}\r\n","import { dataSourceDropdownBinder } from \"./dataSourceDropdownBinder\";\r\nimport { DatasourceService } from \"../../services/DatasourceService\";\r\nimport { dataSourceItem } from \"../../redux/models/reduxModels\";\r\n\r\nexport class DataSourceDropdownInitializer {\r\n constructor(private dataSourceService: DatasourceService, private datasourceItem: dataSourceItem, private displayName: string, private multiSelect: boolean) { }\r\n\r\n initialize = async (propSetter: any) => {\r\n const dropdownBinder = new dataSourceDropdownBinder(this.dataSourceService, this.datasourceItem, this.displayName);\r\n const property = dropdownBinder.getDataSourcePropertyToBindTo();\r\n if (property) {\r\n const datasourceData = await dropdownBinder.getDatasourceEntries();\r\n const dropdownOptions = dropdownBinder.bindDataSourceToDropdown(datasourceData, property);\r\n propSetter(this.multiSelect ? dropdownOptions : [{ key: null, text: \"\" }, ...dropdownOptions]); \r\n }\r\n }\r\n}","import dayjs from \"dayjs\";\r\nimport { logger } from \"../../../../utilities/logger\";\r\nimport { SharePointInputTypes } from \"../../config/sharepointConstants\";\r\nimport { SharePointInputData } from \"../../interfaces/props/SharePointInputData\";\r\n\r\nexport class DatasourceValidationHelper {\r\n static validateAndTransformDatasourceValue(input: SharePointInputData, value: any): any {\r\n try {\r\n const inputType = input.xml?.Type?.toLowerCase();\r\n if (inputType == SharePointInputTypes.text.toLowerCase() || inputType == SharePointInputTypes.note.toLowerCase()) {\r\n return value;\r\n }\r\n\r\n if (inputType == SharePointInputTypes.choice.toLowerCase() || inputType == SharePointInputTypes.multiChoice.toLowerCase()) {\r\n if (Array.isArray(input.choices)) {\r\n const choiceValue = input.choices.find(choice => choice.toLowerCase().trim() === value.toLowerCase().trim());\r\n if (choiceValue) return choiceValue;\r\n }\r\n } else if (inputType == SharePointInputTypes.number.toLowerCase() || inputType == SharePointInputTypes.currency.toLowerCase()) {\r\n let numberValue: number = Number(value);\r\n if (numberValue) {\r\n if (input.xml?.Min && numberValue < input.xml.Min) {\r\n return null;\r\n }\r\n if (input.xml?.Max && numberValue > input.xml.Max) {\r\n return null;\r\n }\r\n if (input.xml?.Percentage === \"TRUE\") {\r\n return numberValue * 100;\r\n }\r\n return numberValue;\r\n }\r\n } else if (inputType == SharePointInputTypes.datetime.toLowerCase()) {\r\n return dayjs(value).isValid() ? dayjs(value).toDate() : null;\r\n } else if (inputType == SharePointInputTypes.Boolean.toLowerCase()) {\r\n switch (value.toLowerCase().trim()) {\r\n case \"true\":\r\n return true;\r\n case \"false\":\r\n return false;\r\n case \"yes\":\r\n return true;\r\n case \"no\":\r\n return false;\r\n case \"ja\":\r\n return true;\r\n case \"nee\":\r\n return false;\r\n default:\r\n return null;\r\n }\r\n }\r\n } catch (error) {\r\n logger(error, \"Directory.tsx (validateAndTransformDatasourceValue)\");\r\n }\r\n\r\n return null;\r\n }\r\n}","import { IColumn } from \"@fluentui/react\";\r\nimport { ITableData } from \"../../interfaces/ITableData\";\r\n\r\nexport class DetailListBuilder {\r\n constructor() {}\r\n\r\n getTableData(result: any[], addFileIcons: boolean = true): ITableData {\r\n if (!result) {\r\n return { columns: [], rows: [] };\r\n }\r\n\r\n const columns = Object.keys(result[0]);\r\n let columnResult = columns.map((item, index) => {\r\n return {\r\n key: index.toString(),\r\n name: item,\r\n fieldName: item.toLowerCase(),\r\n minWidth: 120,\r\n isResizable: true,\r\n iconClassName: \"\",\r\n isIconOnly: false\r\n };\r\n });\r\n\r\n if (addFileIcons) {\r\n columnResult.unshift({\r\n key: \"fileIcons\",\r\n name: \"File Type\",\r\n iconClassName: \"\",\r\n fieldName: \"fileType\",\r\n isIconOnly: true,\r\n minWidth: 16,\r\n maxWidth: 16,\r\n isResizable: false\r\n });\r\n }\r\n\r\n let rows = this.getValues(result, columns);\r\n return { columns: columnResult, rows };\r\n }\r\n\r\n getValues = (dataRows: any[], columns: string[]) => {\r\n let rows = [];\r\n dataRows.forEach((dataRow, index) => {\r\n let row = { key: index };\r\n columns.forEach(item => {\r\n row[item.toLowerCase()] = dataRow[item];\r\n });\r\n\r\n rows.push(row);\r\n });\r\n\r\n return rows;\r\n };\r\n}\r\n","import dayjs from \"dayjs\";\r\nimport { IDownloadRequest } from \"../../interfaces/IDownloadRequest\";\r\nimport { apiDownloadFileStream } from \"../../services/ApiService\";\r\n\r\nexport class FileDownLoader {\r\n static downloadFile = (blob: Blob, fileName: string) => {\r\n const nav = window.navigator as any;\r\n if (nav?.msSaveOrOpenBlob) {\r\n nav.msSaveOrOpenBlob(blob, fileName);\r\n }\r\n else {\r\n const url = window.URL.createObjectURL(new Blob([blob], { type: \"application/pdf\" }));\r\n const link = document.createElement(\"a\");\r\n link.href = url;\r\n link.download = fileName;\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n window.URL.revokeObjectURL(url);\r\n }\r\n }\r\n\r\n static downloadFileStream = async (downloadRequestPayload: IDownloadRequest): Promise => {\r\n const fileBlob: Blob = await apiDownloadFileStream(downloadRequestPayload);\r\n\r\n if (fileBlob) {\r\n const fileName = downloadRequestPayload?.items?.length === 1\r\n ? downloadRequestPayload.items[0].name\r\n : `Docubird - ${dayjs().format(\"YYYY-MM-DD_HH:mm:SSS\")}.zip`;\r\n\r\n const nav = window.navigator as any;\r\n if (!nav?.msSaveOrOpenBlob) {\r\n const downloadUrl = window.URL.createObjectURL(fileBlob);\r\n const anchor = document.createElement(\"a\");\r\n anchor.href = downloadUrl;\r\n anchor.download = fileName;\r\n document.body.appendChild(anchor);\r\n anchor.click();\r\n document.body.removeChild(anchor);\r\n window.URL.revokeObjectURL(downloadUrl);\r\n }\r\n else {\r\n nav.msSaveOrOpenBlob(fileBlob, fileName);\r\n }\r\n }\r\n }\r\n}","import { IFileToUpload } from \"../../interfaces/IFileToUpload\";\r\n\r\nexport const renameDuplicateNames = (files: IFileToUpload[]) => {\r\n const updatedFiles = [...files];\r\n const nameCountMap = new Map();\r\n \r\n return updatedFiles.map((file) => {\r\n const fileFullName: string = `${file.name}.${file.extension}${file.parentFolderId ? file.parentFolderId : \"\"}`;\r\n if (nameCountMap.has(fileFullName)) {\r\n const count = nameCountMap.get(fileFullName);\r\n nameCountMap.set(fileFullName, count + 1);\r\n return {\r\n ...file,\r\n name: `${file.name} (${(count).toString()})`,\r\n };\r\n } else {\r\n nameCountMap.set(fileFullName, 1);\r\n return file;\r\n }\r\n });\r\n };","import authModule from \"../../../../utilities/AuthModule\";\r\nimport { ComponentTypes } from \"../../config/config\";\r\nimport { IDocumentSetCreationData } from \"../../interfaces/IDocumentSetCreationData\";\r\nimport { IPageSettings } from \"../../interfaces/IPageSettings\";\r\nimport { apiCreateDocumentSet } from \"../../services/ApiService\";\r\nimport { createChildFolder, createRootDriveFolder, createRootSharepointDriveFolder } from \"../../services/GraphService\";\r\n\r\nexport const createFolder = async (currentDirectory: IPageSettings, newFolderName: string) => {\r\n const accessToken = await authModule.getGraphAccessToken();\r\n !currentDirectory.parentId\r\n ? await createRootFolder(accessToken, currentDirectory, newFolderName)\r\n : await createChildFolder(\r\n accessToken,\r\n { id: currentDirectory.id, driveId: currentDirectory.parentId },\r\n newFolderName\r\n );\r\n};\r\n\r\nconst createRootFolder = async (accessToken: string, currentDirectory: IPageSettings, newFolderName: string) => {\r\n currentDirectory.type === ComponentTypes.SharePointFolders\r\n ? await createRootSharepointDriveFolder(accessToken, currentDirectory.id, currentDirectory.siteId, newFolderName)\r\n : await createRootDriveFolder(accessToken, newFolderName);\r\n};\r\n\r\nexport const createDocumentSet = async (documentSetCreationData: IDocumentSetCreationData): Promise => {\r\n await apiCreateDocumentSet(documentSetCreationData);\r\n}","import { FileIconType } from \"@fluentui/react-file-type-icons\";\r\nimport { SharePointFolderContentTypeIds } from \"../../config/constants\";\r\nimport { IFolderInfo } from \"../../interfaces/IFolderInfo\";\r\nimport { FolderTypeEnum } from \"../enums/FolderTypeEnum\";\r\nimport { FolderTypeIconEnum } from \"../enums/FolderTypeIconEnum\";\r\nimport { ImageTypeEnum } from \"../enums/ImageTypeEnum\";\r\nimport { ImageSizeEnum } from \"../enums/ImageSizeEnum\";\r\n\r\nexport class FolderTypeIconQuery {\r\n private static FolderTypeIconToTypeDictionary = {\r\n [FolderTypeIconEnum.default.toString()]: FolderTypeEnum.default,\r\n [FolderTypeIconEnum.sharepointFolder.toString()]: FolderTypeEnum.sharepoint,\r\n [FolderTypeIconEnum.sharepointSite.toString()]: FolderTypeEnum.sharepointSite,\r\n [FolderTypeIconEnum.documentLibrary.toString()]: FolderTypeEnum.sharepoint,\r\n [FolderTypeIconEnum.oneDrive.toString()]: FolderTypeEnum.oneDrive,\r\n [FolderTypeIconEnum.teamChannel.toString()]: FolderTypeEnum.teamChannel,\r\n [FolderTypeIconEnum.teamMainSite.toString()]: FolderTypeEnum.teamMainSite,\r\n [FolderTypeIconEnum.oneDriveSubFolder.toString()]: FolderTypeEnum.oneDriveSubFolder,\r\n [FolderTypeIconEnum.sharepointDocumentSet.toString()]: FolderTypeEnum.sharepoint,\r\n [FolderTypeIconEnum.sharepointList.toString()]: FolderTypeEnum.sharepointList,\r\n [FolderTypeIconEnum.sharepointHubSite.toString()]: FolderTypeEnum.sharepointHubSite\r\n }\r\n\r\n private static FolderTypeIconToImageUrl = {\r\n // [FolderTypeIconEnum.default.toString()]: { imageType: ImageTypeEnum.url, location: \"https://static2.sharepointonline.com/files/fabric/assets/item-types/20/folder.png\" },\r\n // [FolderTypeIconEnum.sharepointFolder.toString()]: { imageType: ImageTypeEnum.url, location: \"./assets/sharePoint-folder-20.png\" },\r\n // [FolderTypeIconEnum.oneDrive.toString()]: { imageType: ImageTypeEnum.url, location: \"./assets/oneDrive-folder-20.png\" },\r\n // [FolderTypeIconEnum.teamFolder.toString()]: { imageType: ImageTypeEnum.url, location: \"./assets/teams-folder-20.png\" },\r\n [FolderTypeIconEnum.default.toString()]: { imageType: ImageTypeEnum.fileType, fileIconType: FileIconType.folder },\r\n [FolderTypeIconEnum.sharepointFolder.toString()]: { imageType: ImageTypeEnum.fileType, fileIconType: FileIconType.folder },\r\n [FolderTypeIconEnum.oneDrive.toString()]: { imageType: ImageTypeEnum.url, location: \"https://res-1.cdn.office.net/files/fabric-cdn-prod_20230815.002/assets/brand-icons/product/svg/onedrive_20x1.svg\" },\r\n [FolderTypeIconEnum.oneDriveSubFolder.toString()]: { imageType: ImageTypeEnum.fileType, fileIconType: FileIconType.folder },\r\n [FolderTypeIconEnum.teamFolder.toString()]: { imageType: ImageTypeEnum.fileType, fileIconType: FileIconType.folder },\r\n [FolderTypeIconEnum.sharepointSite.toString()]: { imageType: ImageTypeEnum.url, location: \"https://res-1.cdn.office.net/files/fabric-cdn-prod_20230815.002/assets/brand-icons/product/svg/sharepoint_20x1.svg\" },\r\n [FolderTypeIconEnum.documentLibrary.toString()]: { imageType: ImageTypeEnum.font, iconName: \"DocLibrary\" },\r\n [FolderTypeIconEnum.teamMainSite.toString()]: { imageType: ImageTypeEnum.url, location: \"https://res-1.cdn.office.net/files/fabric-cdn-prod_20230815.002/assets/brand-icons/product/svg/teams_20x1.svg\" },\r\n [FolderTypeIconEnum.teamChannel.toString()]: { imageType: ImageTypeEnum.font, iconName: \"TeamsLogo\" },\r\n [FolderTypeIconEnum.sharepointDocumentSet.toString()]: { imageType: ImageTypeEnum.fileType, fileIconType: FileIconType.docset },\r\n [FolderTypeIconEnum.sharepointList.toString()]: { imageType: ImageTypeEnum.fileType, fileIconType: FileIconType.list },\r\n [FolderTypeIconEnum.sharepointHubSite.toString()]: { imageType: ImageTypeEnum.font, iconName: \"SharepointLogo\" }\r\n }\r\n\r\n static getFolderType = (folderTypeIcon: FolderTypeIconEnum) => {\r\n if (folderTypeIcon) {\r\n return FolderTypeIconQuery.FolderTypeIconToTypeDictionary[folderTypeIcon.toString()];\r\n }\r\n return FolderTypeEnum.default;\r\n }\r\n\r\n static getImage = (folderTypeIcon: FolderTypeIconEnum) => {\r\n if (folderTypeIcon) {\r\n return FolderTypeIconQuery.FolderTypeIconToImageUrl[folderTypeIcon.toString()];\r\n }\r\n return FolderTypeIconQuery.FolderTypeIconToImageUrl[FolderTypeIconEnum.default.toString()];\r\n }\r\n\r\n static getIconType = (folderType: FolderTypeEnum, info: IFolderInfo, isTeamFolder: boolean = false): FolderTypeIconEnum => {\r\n switch (folderType) {\r\n case FolderTypeEnum.default:\r\n return FolderTypeIconEnum.default\r\n case FolderTypeEnum.sharepoint:\r\n return FolderTypeIconQuery.determineSharePointIconType(info, isTeamFolder)\r\n case FolderTypeEnum.sharepointSite:\r\n return FolderTypeIconEnum.sharepointSite\r\n case FolderTypeEnum.oneDrive:\r\n return FolderTypeIconEnum.oneDrive\r\n case FolderTypeEnum.teamChannel:\r\n return FolderTypeIconEnum.teamChannel\r\n case FolderTypeEnum.teamMainSite:\r\n return FolderTypeIconEnum.teamMainSite\r\n case FolderTypeEnum.oneDriveSubFolder:\r\n return FolderTypeIconEnum.oneDriveSubFolder\r\n case FolderTypeEnum.sharepointList:\r\n return FolderTypeIconEnum.sharepointList\r\n case FolderTypeEnum.sharepointHubSite:\r\n return FolderTypeIconEnum.sharepointHubSite\r\n }\r\n }\r\n\r\n private static determineSharePointIconType = (info: IFolderInfo, isTeamFolder: boolean): FolderTypeIconEnum => {\r\n if (info.driveId && !info?.id) return FolderTypeIconEnum.documentLibrary;\r\n if (isTeamFolder) return FolderTypeIconEnum.teamFolder;\r\n if (info.contentTypeId?.startsWith(SharePointFolderContentTypeIds.documentSet)) return FolderTypeIconEnum.sharepointDocumentSet;\r\n return FolderTypeIconEnum.sharepointFolder\r\n }\r\n}","import { InputTypeEnum } from \"../enums/inputTypeEnum\";\r\nimport { SharePointInputTypes, SharePointMetadataBooleans, SharePointFormatTypes } from \"../../config/sharepointConstants\";\r\n\r\nexport class InputTypeSharePointClassifier {\r\n constructor() { }\r\n getInputType(metadata: any): InputTypeEnum {\r\n switch (true) {\r\n case metadata.Type === SharePointInputTypes.text: {\r\n return InputTypeEnum.Text;\r\n }\r\n case metadata.Type === SharePointInputTypes.number && (!metadata.Percentage || metadata.Percentage === SharePointMetadataBooleans.false): {\r\n return InputTypeEnum.Number;\r\n }\r\n case metadata.Type === SharePointInputTypes.number && metadata.Percentage === SharePointMetadataBooleans.true: {\r\n return InputTypeEnum.Percentage;\r\n }\r\n case metadata.Type === SharePointInputTypes.currency: {\r\n return InputTypeEnum.Currency;\r\n }\r\n case metadata.Format === SharePointFormatTypes.dateOnly: {\r\n return InputTypeEnum.DateOnly\r\n }\r\n case metadata.Format === SharePointFormatTypes.dateTime: {\r\n return InputTypeEnum.DateTime\r\n }\r\n case metadata.Type === SharePointInputTypes.note && +metadata.NumLines > 0: {\r\n return InputTypeEnum.MultiLine\r\n }\r\n case metadata.Type == SharePointInputTypes.taxonomyFieldType: {\r\n return InputTypeEnum.taxonomySingle\r\n }\r\n case metadata.Type === SharePointInputTypes.taxonomyFieldTypeMulti: {\r\n return InputTypeEnum.taxonomyDouble\r\n }\r\n case metadata.Type == SharePointInputTypes.Boolean: {\r\n return InputTypeEnum.YesNo\r\n }\r\n case metadata.Type === SharePointInputTypes.url && metadata.Format === SharePointFormatTypes.hyperlink: {\r\n return InputTypeEnum.hyperLink\r\n }\r\n case metadata.Type === SharePointInputTypes.url && metadata.Format === SharePointFormatTypes.image: {\r\n return InputTypeEnum.picture\r\n }\r\n case metadata.Type === SharePointInputTypes.choice && (metadata.Format === SharePointFormatTypes.dropdown || metadata.Format === SharePointFormatTypes.radioButtons): {\r\n return InputTypeEnum.choice\r\n }\r\n case metadata.Type === SharePointInputTypes.multiChoice: {\r\n return InputTypeEnum.multiChoice\r\n }\r\n case metadata.Type === SharePointInputTypes.user: {\r\n return InputTypeEnum.peoplePickerSingle\r\n }\r\n case metadata.Type === SharePointInputTypes.userMulti: {\r\n return InputTypeEnum.peoplePickerMultiple\r\n }\r\n case metadata.Type == SharePointInputTypes.lookupMulti: {\r\n return InputTypeEnum.lookupMulti\r\n }\r\n case metadata.Type == SharePointInputTypes.lookupSingle: {\r\n return InputTypeEnum.lookupSingle\r\n }\r\n default: {\r\n return InputTypeEnum.Text;\r\n }\r\n }\r\n }\r\n}\r\n","import { sharePointInternalFileName, sharePointInternalTitleName } from \"../../config/constants\";\r\nimport { FileOption } from \"../../interfaces/IFileOption\";\r\nimport { IFileToUpload } from \"../../interfaces/IFileToUpload\";\r\nimport { SharePointInputData } from \"../../interfaces/props/SharePointInputData\";\r\n\r\nexport const updateIndividualFileOptionsValue = (fileOptions: FileOption[], metadata: SharePointInputData[], changedIndex: number, titleAutoSetText: string) => {\r\n\r\n const changedInput = metadata.find(x => x.index === changedIndex);\r\n\r\n return fileOptions.map(fileOption => {\r\n return {\r\n ...fileOption,\r\n fileInputValues: fileOption.fileInputValues.map((inputValue, index) => {\r\n if (inputValue.internalName === changedInput?.internalName && !(inputValue.internalName === sharePointInternalTitleName && changedInput?.value === titleAutoSetText)) {\r\n return { ...changedInput }\r\n }\r\n\r\n return { ...inputValue }\r\n\r\n })\r\n }\r\n });\r\n}\r\n\r\nexport const updateFileName = (fileOptions: FileOption[], updatedFile: IFileToUpload) => {\r\n return fileOptions.map(fileOption => {\r\n if (updatedFile) {\r\n return {\r\n ...fileOption,\r\n updatedFile,\r\n text: updatedFile.name,\r\n fileInputValues: fileOption.fileInputValues.map(inputValue => {\r\n let value = inputValue.value;\r\n if (inputValue.internalName === sharePointInternalFileName) {\r\n value = updatedFile.name;\r\n }\r\n\r\n return {\r\n ...inputValue,\r\n value\r\n }\r\n })\r\n }\r\n }\r\n\r\n return {\r\n ...fileOption\r\n }\r\n })\r\n}\r\n\r\nexport const fileCheckedToggled = (fileOptions: FileOption[], toggledFile: IFileToUpload, canOverwrite: boolean, inputValuesToSave: SharePointInputData[]) => {\r\n let updatedFileOptions: FileOption[] = [];\r\n const fileOption = fileOptions.find(x => x.key === toggledFile.id);\r\n if (toggledFile.isSelected) {\r\n if (!fileOption) {\r\n const newFileOption = {\r\n key: toggledFile.id,\r\n text: toggledFile.name,\r\n file: toggledFile,\r\n isSelectedFile: false,\r\n isModified: false,\r\n canOverwrite,\r\n isSaving: false,\r\n savingSuccess: false,\r\n savingError: false,\r\n fileInputValues: fileOptions[0].fileInputValues.map(inputValue => {\r\n let originalInputValue = inputValuesToSave.find(x => x.internalName === inputValue.internalName)\r\n let value;\r\n\r\n if (inputValue.internalName === sharePointInternalFileName || inputValue.internalName === sharePointInternalTitleName) {\r\n value = toggledFile.name;\r\n } else {\r\n value = originalInputValue?.value\r\n }\r\n\r\n if (originalInputValue) {\r\n return {\r\n ...originalInputValue,\r\n value\r\n }\r\n }\r\n\r\n return {\r\n ...inputValue,\r\n value\r\n }\r\n\r\n }),\r\n }\r\n\r\n updatedFileOptions = [...fileOptions];\r\n updatedFileOptions.push(newFileOption);\r\n }\r\n }\r\n else {\r\n updatedFileOptions = fileOptions.filter(x => x.key !== toggledFile.id).map(fileOption => {\r\n return {\r\n ...fileOption\r\n }\r\n });\r\n }\r\n\r\n return updatedFileOptions;\r\n}","import { officeExtentions } from \"../../config/constants\";\r\n\r\nexport interface IOfficeContextApp {\r\n extention: string,\r\n name: string,\r\n filter: IOfficeContextApp_Filter\r\n}\r\n\r\nexport interface IOfficeContextApp_Filter {\r\n items: string[];\r\n values: string;\r\n}\r\n\r\n\r\nexport const GetOfficeContextApp = (): IOfficeContextApp => {\r\n const requirements = Office?.context?.requirements; \r\n\r\n if (requirements) {\r\n if (requirements.isSetSupported(\"WordApi\", \"1.1\")) {\r\n return {\r\n extention: \"docx\",\r\n name: \"Word\",\r\n filter: {\r\n items: officeExtentions.word.items,\r\n values: officeExtentions.word.values\r\n }\r\n };\r\n }\r\n else if (requirements.isSetSupported(\"ExcelApi\", \"1.1\")) {\r\n return {\r\n extention: \"xlsx\", \r\n name: \"Excel\", \r\n filter: {\r\n items: officeExtentions.excel.items,\r\n values: officeExtentions.excel.values\r\n }\r\n };\r\n }\r\n else if (requirements.isSetSupported(\"PowerPointApi\", \"1.1\")) {\r\n return {\r\n extention: \"pptx\", \r\n name: \"PowerPoint\", \r\n filter: {\r\n items: officeExtentions.powerPoint.items,\r\n values: officeExtentions.powerPoint.values\r\n }\r\n };\r\n }\r\n }\r\n\r\n return null;\r\n}","export class OneDriveUrlHelper {\r\n static onedriveUniqueName = \"/personal\";\r\n static initialDocumentLibrary = \"/Documents\";\r\n static urlStart = \"https://\"\r\n\r\n static getSiteUrl = (url: string): string => {\r\n return url?.replace(OneDriveUrlHelper.initialDocumentLibrary, \"\");\r\n }\r\n\r\n static getOpenInOneDriveDesktopUrl = (fileId: string, siteId: string, listId: string, userEmail: string, userId: string, webUrl: string, fileName: string): string => {\r\n // odopen://openFile/\r\n // ?fileId={83F45FB1-A0A5-4060-9B70-F9B9176903BF}\r\n // &siteId={db0d4d8f-4bbd-475b-be32-75f362cee55e}\r\n // &listId={9A0841DB-86B2-497C-A83C-8DE855A2B613}\r\n // &userEmail=d.devilliers@xblox.net\r\n // &userId={3e9d6e90-8a38-46a3-a296-0a1e83e6172e}\r\n // &webUrl=https://xblox.sharepoint.com/sites/XbloxB.V.Demo\r\n // &fileName=Calculatie.pdf\r\n\r\n return `odopen://openFile/?fileId={${fileId}}&siteId={${siteId}}&listId={${listId}}&userEmail=${userEmail}&userId={${userId}}&webUrl=${webUrl}&fileName=${fileName}`;\r\n }\r\n}","import * as React from \"react\";\r\nimport {\r\n IRenderFunction,\r\n IDetailsHeaderProps,\r\n IDetailsColumnRenderTooltipProps,\r\n StickyPositionType,\r\n Sticky,\r\n TooltipHost\r\n} from \"@fluentui/react\";\r\n\r\nexport class RenderHelper {\r\n static onRenderDetailsHeader: IRenderFunction = (props, defaultRender) => {\r\n if (!props) {\r\n return null;\r\n }\r\n const onRenderColumnHeaderTooltip: IRenderFunction = tooltipHostProps => (\r\n \r\n );\r\n return (\r\n \r\n {defaultRender!({\r\n ...props,\r\n onRenderColumnHeaderTooltip\r\n })}\r\n \r\n );\r\n };\r\n}\r\n","// export enum EmailTemplateFileExtUrlEnum {\r\n// accdb = \"https://static2.sharepointonline.com/files/fabric/assets/item-types/48/accdb.svg\",\r\n// csv = \"https://static2.sharepointonline.com/files/fabric/assets/item-types/48/csv.svg\",\r\n// docx = \"https://static2.sharepointonline.com/files/fabric/assets/item-types/48/docx.svg\",\r\n// dotx = \"https://static2.sharepointonline.com/files/fabric/assets/item-types/48/dotx.svg\",\r\n// mpp = \"https://static2.sharepointonline.com/files/fabric/assets/item-types/48/mpp.svg\",\r\n// mpt = \"https://static2.sharepointonline.com/files/fabric/assets/item-types/48/mpt.svg\",\r\n// one = \"https://static2.sharepointonline.com/files/fabric/assets/item-types/48/one.svg\",\r\n// onetoc = \"https://static2.sharepointonline.com/files/fabric/assets/item-types/48/onetoc.svg\",\r\n// potx = \"https://static2.sharepointonline.com/files/fabric/assets/item-types/48/potx.svg\",\r\n// ppsx = \"https://static2.sharepointonline.com/files/fabric/assets/item-types/48/ppsx.svg\",\r\n// pptx = \"https://static2.sharepointonline.com/files/fabric/assets/item-types/48/pptx.svg\",\r\n// pub = \"https://static2.sharepointonline.com/files/fabric/assets/item-types/48/pub.svg\",\r\n// vsdx = \"https://static2.sharepointonline.com/files/fabric/assets/item-types/48/vsdx.svg\",\r\n// vssx = \"https://static2.sharepointonline.com/files/fabric/assets/item-types/48/vssx.svg\",\r\n// vstx = \"https://static2.sharepointonline.com/files/fabric/assets/item-types/48/vstx.svg\",\r\n// xlsx = \"https://static2.sharepointonline.com/files/fabric/assets/item-types/48/xlsx.svg\",\r\n// xltx = \"https://static2.sharepointonline.com/files/fabric/assets/item-types/48/xltx.svg\",\r\n// xsn = \"https://static2.sharepointonline.com/files/fabric/assets/item-types/48/xsn.svg\",\r\n// }\r\n\r\n// export const emailTemplateFileExtentionUrls = {\r\n// accdb: EmailTemplateFileExtUrlEnum.accdb,\r\n// csv: EmailTemplateFileExtUrlEnum.csv,\r\n// doc: EmailTemplateFileExtUrlEnum.docx,\r\n// docx: EmailTemplateFileExtUrlEnum.docx,\r\n// docm: EmailTemplateFileExtUrlEnum.docx,\r\n// dotx: EmailTemplateFileExtUrlEnum.dotx,\r\n// mpp: EmailTemplateFileExtUrlEnum.mpp,\r\n// mpt: EmailTemplateFileExtUrlEnum.mpt,\r\n// one: EmailTemplateFileExtUrlEnum.one,\r\n// onetoc: EmailTemplateFileExtUrlEnum.onetoc,\r\n// pdf: `${process.env.baseUri}/assets/icon-pdf.png`,\r\n// pot: EmailTemplateFileExtUrlEnum.potx,\r\n// potx: EmailTemplateFileExtUrlEnum.potx,\r\n// potm: EmailTemplateFileExtUrlEnum.potx,\r\n// pps: EmailTemplateFileExtUrlEnum.ppsx,\r\n// ppsm: EmailTemplateFileExtUrlEnum.ppsx,\r\n// ppsx: EmailTemplateFileExtUrlEnum.ppsx,\r\n// ppt: EmailTemplateFileExtUrlEnum.pptx,\r\n// pptm: EmailTemplateFileExtUrlEnum.pptx,\r\n// pptx: EmailTemplateFileExtUrlEnum.pptx,\r\n// pub: EmailTemplateFileExtUrlEnum.pub,\r\n// txt: `${process.env.baseUri}/assets/icon-txt.png`,\r\n// vsd: EmailTemplateFileExtUrlEnum.vsdx,\r\n// vsdm: EmailTemplateFileExtUrlEnum.vsdx,\r\n// vsdx: EmailTemplateFileExtUrlEnum.vsdx,\r\n// vssx: EmailTemplateFileExtUrlEnum.vssx,\r\n// vst: EmailTemplateFileExtUrlEnum.vstx,\r\n// vstm: EmailTemplateFileExtUrlEnum.vstx,\r\n// vstx: EmailTemplateFileExtUrlEnum.vstx,\r\n// xlsx: EmailTemplateFileExtUrlEnum.xlsx,\r\n// xltx: EmailTemplateFileExtUrlEnum.xltx,\r\n// xsn: EmailTemplateFileExtUrlEnum.xsn,\r\n// }\r\n\r\nexport const getEmailTemplateHtml = (\r\n shareLink: string,\r\n iconUrl: string,\r\n sharedByText: string,\r\n fileNameWithoutExtention: string,\r\n message: string,\r\n openText: string\r\n) => {\r\n // const extUrl = emailTemplateFileExtentionUrls[ext] ? emailTemplateFileExtentionUrls[ext] : `${process.env.baseUri}/assets/icon-unknown.png`;\r\n\r\n const html = `\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\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 \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
\r\n

 

\r\n
\r\n

 

\r\n
\r\n

 

\r\n
\r\n

\"Share

\r\n
\r\n

${sharedByText}

\r\n
\r\n

${message}

\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 \r\n \r\n
\r\n
\r\n

\r\n ${openText} \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\r\n`;\r\n\r\n return html;\r\n\r\n}","import { IDropdownOption } from \"@fluentui/react\";\r\nimport { ISharepointDocumentLibrary } from \"../../interfaces/ISharepointDocumentLibrary\";\r\nimport { getSharePointContentTypeFields, getSharePointDocumentSetSettingsXml } from \"../../services/SharePointRestServices\";\r\nimport { parseString } from \"xml2js\";\r\nimport { SharepointFilters, SharePointFolderContentTypeIds } from \"../../config/constants\";\r\nimport { IDocumentSetSettings } from \"../../interfaces/IDocumentSetSettings\";\r\nimport { logger } from \"../../../../utilities/logger\";\r\nimport { IContentType } from \"../../interfaces/IContentType\";\r\nimport { SharePointInputTypes, SharePointMetadataBooleans } from \"../../config/sharepointConstants\";\r\n\r\nexport class BaseSharepointHelper {\r\n static convertMetadataToFields = item => {\r\n let xmlData: any = {};\r\n parseString(item.SchemaXml, (err, result) => {\r\n if (result) {\r\n xmlData = result.Field.$;\r\n }\r\n });\r\n\r\n if (xmlData.ShowInEditForm === SharePointMetadataBooleans.false\r\n || ((xmlData.Type === SharePointInputTypes.taxonomyFieldType || xmlData.Type === SharePointInputTypes.taxonomyFieldTypeMulti) && item.IsTermSetValid === false)) {\r\n return null;\r\n }\r\n else {\r\n if (item.Title) {\r\n xmlData.DisplayName = item.Title;\r\n }\r\n return {\r\n Choices: item.Choices,\r\n DefaultValue: item.DefaultValue,\r\n CurrentValue: item.DefaultValue,\r\n isValid: true,\r\n Id: item.Id,\r\n InternalName: item.InternalName,\r\n xml: xmlData\r\n };\r\n }\r\n };\r\n}\r\n\r\nexport class SharepointContentTypeHelper extends BaseSharepointHelper {\r\n static mapDocumentContentTypes(result: any[]): IContentType[] {\r\n let contentTypes: IContentType[] = result\r\n .map(this.mapIContentType)\r\n .filter(contentType => !this.startsWith(contentType.id, SharePointFolderContentTypeIds.folder));\r\n\r\n return contentTypes;\r\n }\r\n\r\n static mapFolderOrDocumentSetContentTypes(result: any[], contentTypeId: string): IContentType[] {\r\n let contentTypes: IContentType[] = result\r\n .map(this.mapIContentType);\r\n\r\n if (!contentTypeId?.startsWith(SharePointFolderContentTypeIds.documentSet)) {\r\n contentTypes = contentTypes.filter(contentType => this.startsWith(contentType.id, SharePointFolderContentTypeIds.folder) && !this.startsWith(contentType.id, SharePointFolderContentTypeIds.documentSet));\r\n }\r\n else {\r\n contentTypes = contentTypes.filter(contentType => this.startsWith(contentType.id, SharePointFolderContentTypeIds.documentSet));\r\n }\r\n\r\n return contentTypes;\r\n }\r\n\r\n static mapContentTypesToDropdownOptions(result: any[]): IDropdownOption[] {\r\n let contentTypes: IDropdownOption[] = result\r\n .map(this.mapKeyText)\r\n .filter((item: { key: any }) => !this.startsWith(item.key, SharePointFolderContentTypeIds.folder));\r\n\r\n return contentTypes;\r\n }\r\n\r\n static mapDocumentSetContentTypesToDropdownOptions(result: any[]): IDropdownOption[] {\r\n let contentTypes: IDropdownOption[] = result\r\n .map(this.mapKeyText)\r\n .filter((item: { key: any }) => this.startsWith(item.key, SharePointFolderContentTypeIds.documentSet));\r\n\r\n return contentTypes;\r\n }\r\n\r\n static mapFolderContentTypesToDropdownOptions(result: any[]): IDropdownOption[] {\r\n let contentTypes: IDropdownOption[] = result\r\n .map(this.mapKeyText)\r\n .filter((item: { key: any }) => this.startsWith(item.key, SharePointFolderContentTypeIds.folder));\r\n return contentTypes;\r\n }\r\n\r\n private static startsWith = (full: string | any[], word: any) => {\r\n return full?.lastIndexOf(word, 0) === 0;\r\n };\r\n\r\n private static mapKeyText = (item: { Id: { StringValue: any }; Name: any }) => ({\r\n key: item.Id.StringValue,\r\n text: item.Name\r\n });\r\n\r\n private static mapIContentType = (contentType): IContentType => ({\r\n id: contentType.Id.StringValue,\r\n name: contentType.Name,\r\n parent: {\r\n id: contentType.Parent?.Id.StringValue\r\n }\r\n });\r\n\r\n static async getFields(accessToken: string, contentTypeId: string | number, documentLib: ISharepointDocumentLibrary) {\r\n let result = await getSharePointContentTypeFields(\r\n accessToken,\r\n documentLib.webUrl,\r\n documentLib.sharePointListId,\r\n contentTypeId as string,\r\n SharepointFilters.metadata.save\r\n );\r\n return result.map(this.convertMetadataToFields).filter(field => field);\r\n }\r\n\r\n static async getDocumentSetSettings(accessToken: string, webUrl: string, sharePointListId: string, contentTypeId: string): Promise {\r\n let allowedContentTypeIds: string[] = [];\r\n let sharedFieldIds: string[] = [];\r\n let viewId: string;\r\n\r\n try {\r\n const documentSetXml = await getSharePointDocumentSetSettingsXml(accessToken, webUrl, sharePointListId, contentTypeId);\r\n if (documentSetXml) {\r\n let convertedXmlData: any;\r\n parseString(documentSetXml.SchemaXml, (err, xmlResult) => {\r\n if (xmlResult) {\r\n convertedXmlData = xmlResult;\r\n }\r\n });\r\n\r\n if (convertedXmlData.ContentType.XmlDocuments\r\n && Array.isArray(convertedXmlData.ContentType.XmlDocuments)\r\n && convertedXmlData.ContentType.XmlDocuments.length > 0) {\r\n\r\n let xmlDocSets = convertedXmlData.ContentType.XmlDocuments[0].XmlDocument;\r\n if (Array.isArray(xmlDocSets)) {\r\n xmlDocSets.forEach((xmlDocSet) => {\r\n if (Array.isArray(xmlDocSet[\"act:AllowedContentTypes\"])) {\r\n xmlDocSet[\"act:AllowedContentTypes\"].forEach(allowedContentTypes => {\r\n if (Array.isArray(allowedContentTypes.AllowedContentType)) {\r\n allowedContentTypeIds = allowedContentTypeIds.concat(\r\n allowedContentTypes.AllowedContentType\r\n .map(allowedContentType => allowedContentType.$?.id)\r\n .filter(allowedContentType => allowedContentType)\r\n )\r\n }\r\n })\r\n }\r\n else if (Array.isArray(xmlDocSet[\"sf:SharedFields\"])) {\r\n xmlDocSet[\"sf:SharedFields\"].forEach(sharedFields => {\r\n if (Array.isArray(sharedFields.SharedField)) {\r\n sharedFieldIds = sharedFieldIds.concat(\r\n sharedFields.SharedField\r\n .map(sharedField => sharedField.$?.id)\r\n .filter(sharedField => sharedField)\r\n )\r\n }\r\n })\r\n }\r\n else if (Array.isArray(xmlDocSet[\"wpv:WelcomePageView\"])) {\r\n const view = xmlDocSet[\"wpv:WelcomePageView\"];\r\n if (view.length > 0) {\r\n viewId = view[0].$?.ViewId;\r\n }\r\n }\r\n });\r\n }\r\n }\r\n }\r\n } catch (error) {\r\n logger(error, \"sharepointContentTypeHelper.ts (getDocumentSetSettings)\");\r\n }\r\n\r\n return { allowedContentTypeIds: allowedContentTypeIds, sharedFieldIds: sharedFieldIds, viewId: viewId || null };\r\n }\r\n}","import { ITag } from \"@fluentui/react\";\r\n\r\nexport const sortTerms = (input: string, data: ITag[]): ITag[] => {\r\n try {\r\n let first: ITag[] = [];\r\n let others: ITag[] = [];\r\n for (let i = 0; i < data.length; i++) {\r\n if (data[i].name.indexOf(input) == 0) {\r\n first.push(data[i]);\r\n } else {\r\n others.push(data[i]);\r\n }\r\n }\r\n first.sort((a, b) => a.name.toLowerCase() < b.name.toLowerCase() ? -1 : 1);\r\n others.sort((a, b) => a.name.toLowerCase() < b.name.toLowerCase() ? -1 : 1);\r\n return (first.concat(others));\r\n } catch (error) {\r\n console.warn(error);\r\n }\r\n return data;\r\n}","const tester = /^[-!#$%&'*+\\/0-9=?A-Z^_a-z`{|}~](\\.?[-!#$%&'*+\\/0-9=?A-Z^_a-z`{|}~])*@[a-zA-Z0-9](-*\\.?[a-zA-Z0-9])*\\.[a-zA-Z](-?[a-zA-Z0-9])+$/;\r\n\r\nexport const validateEmail = (email: string) => {\r\n if (!email) return false;\r\n\r\n const emailParts = email.split('@');\r\n \r\n if (emailParts.length !== 2) return false;\r\n \r\n const account = emailParts[0];\r\n const address = emailParts[1];\r\n \r\n if (account.length > 64) return false;\r\n \r\n else if (address.length > 255) return false;\r\n \r\n const domainParts = address.split('.');\r\n \r\n if (domainParts.some(function (part) {\r\n return part.length > 63;\r\n })) return false;\r\n \r\n return tester.test(email);\r\n}","import * as React from \"react\";\r\nimport { Toggle } from \"@fluentui/react/lib/Toggle\";\r\nimport { InputProps } from \"../../interfaces/props/InputProps\";\r\nimport { logger } from \"../../../../utilities/logger\";\r\nimport { LanguageContext } from \"../../../../utilities/LocalizationModule\";\r\nimport { SharePointMetadataBooleans } from \"../../config/sharepointConstants\";\r\n\r\nexport const YesNo: React.FunctionComponent = ({\r\n displayName,\r\n inputValidator,\r\n inputValue,\r\n updateInputValidationStatus\r\n}: InputProps) => {\r\n const languageStrings = React.useContext(LanguageContext);\r\n const [isChecked, setChecked] = React.useState(true);\r\n\r\n React.useEffect(() => {\r\n setChecked(inputValue?.value == \"1\" ? true : false)\r\n }, [inputValue?.value])\r\n\r\n const isFirstRun = React.useRef(true);\r\n React.useEffect(() => {\r\n try {\r\n if (isFirstRun.current) {\r\n isFirstRun.current = false;\r\n return;\r\n }\r\n updateInputValidationStatus(inputValidator.validate(inputValue?.value));\r\n } catch (e) {\r\n logger(e, \"YesNo.tsx (useEffect 2)\")\r\n }\r\n }, [inputValue?.updatedFromDataSourceToggle]);\r\n\r\n const handleNumberChange = (event: any, checked: boolean) => {\r\n let value = checked ? \"1\" : \"0\";\r\n updateInputValidationStatus(inputValidator.validate(value));\r\n setChecked(checked);\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n );\r\n};\r\n\r\nexport default YesNo;\r\n","import * as React from \"react\";\r\nimport { ComboBox, Dropdown, IComboBox, IComboBoxOption, IDropdownOption, ResponsiveMode } from \"@fluentui/react\";\r\nimport { ChoiceProps } from \"../../interfaces/props/ChoiceProps\";\r\nimport { logger } from \"../../../../utilities/logger\";\r\nimport { SharePointMetadataBooleans } from \"../../config/sharepointConstants\";\r\n\r\nconst getValueAsArray = (value: any): any[] => {\r\n return Array.isArray(value) ? value : value ? [value] : [];\r\n}\r\n\r\nconst getOptions = (allowFreeForm: boolean, defaultOptions: any[], inputValue: any) => {\r\n const options = defaultOptions?.map(item => ({ key: item, text: item })) || [];\r\n if (allowFreeForm && Array.isArray(options) && inputValue) {\r\n const initialSelection: any[] = getValueAsArray(inputValue);\r\n for (let i = 0; i < initialSelection.length; i++) {\r\n const selectedValue = initialSelection[i] as string;\r\n if (!options.some(option => option.key && ((option.key as string).trim().toLowerCase() === selectedValue.trim().toLowerCase()))) {\r\n options.push({ key: selectedValue, text: selectedValue });\r\n }\r\n }\r\n }\r\n return options;\r\n}\r\n\r\nexport const CheckboxMultiColumn: React.FunctionComponent = ({\r\n displayName,\r\n isRequired,\r\n Choices,\r\n inputValidator,\r\n updateInputValidationStatus,\r\n error,\r\n inputValue\r\n}: ChoiceProps) => {\r\n const [allowFreeForm] = React.useState(inputValue?.xml?.FillInChoice === SharePointMetadataBooleans.true);\r\n const [selectedKeys, setSelectedKeys] = React.useState();\r\n const [options, setOptions] = React.useState(getOptions(allowFreeForm, Choices, inputValue?.value));\r\n\r\n const isFirstRun = React.useRef(true);\r\n\r\n React.useEffect(() => {\r\n if (inputValue?.value) {\r\n setSelectedKeys(getValueAsArray(inputValue?.value));\r\n }\r\n }, [inputValue?.value]);\r\n\r\n React.useEffect(() => {\r\n try {\r\n if (isFirstRun.current) {\r\n isFirstRun.current = false;\r\n return;\r\n }\r\n updateInputValidationStatus(\r\n inputValidator.validate(inputValue?.value\r\n ? getValueAsArray(inputValue?.value)\r\n : null)\r\n );\r\n } catch (e) {\r\n logger(e, \"checboxMultiColumn (useEffect 2)\")\r\n }\r\n }, [inputValue?.updatedFromDataSourceToggle]);\r\n\r\n const onChange = React.useCallback(\r\n (event: React.FormEvent, item: IDropdownOption): void => {\r\n if (item) {\r\n let selected = item.selected\r\n ? [...(selectedKeys || []), item.key as string]\r\n : selectedKeys?.filter(key => key !== item.key);\r\n setSelectedKeys(selected);\r\n updateInputValidationStatus(inputValidator.validate(selected));\r\n }\r\n },\r\n [selectedKeys, inputValidator]\r\n );\r\n\r\n const onComboChange = React.useCallback(\r\n (event: React.FormEvent, option?: IComboBoxOption, index?: number, value?: string): void => {\r\n let selected = option?.selected;\r\n if (!option && !value?.trim()) return;\r\n\r\n if (!option && value) {\r\n selected = true;\r\n option = { key: value, text: value };\r\n setOptions(prevOptions => [...prevOptions, option]);\r\n }\r\n\r\n if (option) {\r\n const selection = selected ? [...(selectedKeys || []), option!.key as string] : selectedKeys?.filter(k => k !== option!.key);\r\n setSelectedKeys(selection);\r\n updateInputValidationStatus(inputValidator.validate(selection));\r\n }\r\n },\r\n [selectedKeys, inputValidator]\r\n );\r\n\r\n const onBlur = (event): void => {\r\n updateInputValidationStatus(inputValidator.validate(selectedKeys));\r\n };\r\n\r\n return allowFreeForm\r\n ?\r\n \r\n :\r\n ;\r\n};\r\n\r\nexport default CheckboxMultiColumn;\r\n","import * as React from \"react\";\r\nimport { ComboBox, Dropdown, IComboBox, IComboBoxOption, IDropdownOption, ResponsiveMode } from \"@fluentui/react\";\r\nimport { ChoiceProps } from \"../../interfaces/props/ChoiceProps\";\r\nimport { LanguageContext } from \"../../../../utilities/LocalizationModule\";\r\nimport { logger } from \"../../../../utilities/logger\";\r\nimport { SharePointMetadataBooleans } from \"../../config/sharepointConstants\";\r\n\r\nconst getOptions = (allowFreeForm: boolean, defaultOptions: any[], inputValue: string): IDropdownOption[] => {\r\n const options = [{ key: null, text: \"\" }, ...(defaultOptions?.map(item => ({ key: item, text: item })) || [])];\r\n if (allowFreeForm && inputValue) {\r\n if (!options.some(option => option.key && ((option.key as string).trim().toLowerCase() === inputValue.trim().toLowerCase()))) {\r\n options.push({ key: inputValue, text: inputValue });\r\n }\r\n }\r\n return options;\r\n}\r\n\r\nexport const Choice: React.FunctionComponent = ({\r\n displayName,\r\n isRequired,\r\n inputValue,\r\n Choices,\r\n updateInputValidationStatus,\r\n inputValidator,\r\n error\r\n}: ChoiceProps) => {\r\n const languageStrings = React.useContext(LanguageContext);\r\n\r\n const [allowFreeForm] = React.useState(inputValue?.xml?.FillInChoice === SharePointMetadataBooleans.true);\r\n const [options, setOptions] = React.useState(getOptions(allowFreeForm, Choices, inputValue?.value ? inputValue.value as string : null));\r\n const [selectedKey, setSelectedKey] = React.useState(inputValue ? inputValue?.value : undefined);\r\n\r\n const isFirstRun = React.useRef(true);\r\n React.useEffect(() => {\r\n try {\r\n if (isFirstRun.current) {\r\n isFirstRun.current = false;\r\n return;\r\n }\r\n updateInputValidationStatus(inputValidator.validate(inputValue?.value));\r\n } catch (e) {\r\n logger(e, \"choice.tsx (useEffect)\")\r\n }\r\n }, [inputValue?.updatedFromDataSourceToggle]);\r\n\r\n const onChange = React.useCallback(\r\n (event: React.FormEvent, item: IDropdownOption): void => {\r\n updateInputValidationStatus(inputValidator.validate(item.key));\r\n },\r\n [inputValidator]\r\n );\r\n\r\n const onComboChange = React.useCallback(\r\n (event: React.FormEvent, option?: IComboBoxOption, index?: number, value?: string): void => {\r\n let key = option?.key;\r\n if (!option && value) {\r\n key = value;\r\n setOptions(prevOptions => [...prevOptions, { key: key!, text: value }]);\r\n }\r\n setSelectedKey(key);\r\n updateInputValidationStatus(inputValidator.validate(key));\r\n },\r\n [inputValidator]\r\n );\r\n\r\n return allowFreeForm\r\n ?\r\n \r\n :\r\n ;\r\n};\r\n\r\nexport default Choice;\r\n","import * as React from \"react\";\r\nimport { TooltipHost, Stack, IStackTokens, TagPicker, ITag, IBasePickerSuggestionsProps, Label, Spinner, SpinnerSize, FontIcon } from \"@fluentui/react\";\r\nimport { DatasourceService } from \"../../services/DatasourceService\";\r\nimport { connect } from \"react-redux\";\r\nimport { DataSourcePanel } from \"./datasourcePanel\";\r\nimport { INameValuePairIndex } from \"../../interfaces/INameValuePairIndex\";\r\nimport { DatasourceHelper } from \"../helpers/dataSourceHelper\";\r\nimport { LanguageContext } from \"../../../../utilities/LocalizationModule\";\r\nimport { logger } from \"../../../../utilities/logger\";\r\nimport { IDatasourceQueryDto } from \"../../interfaces/IDatasourceQueryDto\";\r\nimport { setDatasourceValues } from \"../../redux/modules/datasource\";\r\nimport { CMAddDatasourceItemPanel } from \"../../../../contentManager/Panels/CMAddDatasourceItemPanel\";\r\nimport { sortTerms } from \"../helpers/tagHelper\";\r\nimport { dataSourceItem } from \"../../redux/models/reduxModels\";\r\n\r\nconst stackTokens: IStackTokens = {\r\n childrenGap: 5\r\n};\r\n\r\nconst listContainsTagList = (tag: ITag, tagList?: ITag[]) => {\r\n if (!tagList || !tagList.length || tagList.length === 0) {\r\n return false;\r\n }\r\n return tagList.some(compareTag => compareTag.key === tag.key);\r\n};\r\n\r\nconst getTextFromItem = (item: ITag) => item.name;\r\n\r\nconst mapDispatchToProps = {\r\n setDatasourceValues,\r\n};\r\n\r\ntype reduxDispatch = typeof mapDispatchToProps;\r\n\r\ninterface ContentTypeNameDatasourcePickerProps extends reduxDispatch {\r\n contentTypeInputName: string;\r\n contentTypeNameValue: string;\r\n datasourceItem: dataSourceItem;\r\n updateContentTypeNameValue: (newValue: string) => void;\r\n}\r\n\r\nexport const UnconnectedContentTypeNameDatasourcePicker: React.FunctionComponent = ({\r\n contentTypeInputName,\r\n contentTypeNameValue,\r\n datasourceItem,\r\n updateContentTypeNameValue,\r\n setDatasourceValues\r\n}: ContentTypeNameDatasourcePickerProps) => {\r\n const languageStrings = React.useContext(LanguageContext);\r\n const [isOpen, setIsOpen] = React.useState(false);\r\n const [searchInputs, setSearchInputs] = React.useState([]);\r\n const [boundedField, setBoundedField] = React.useState(\"\");\r\n const dataSourceService = new DatasourceService();\r\n const dataSourceHelper = new DatasourceHelper(dataSourceService);\r\n const [selectedTags, setSelectedTags] = React.useState([]); //selected tags\r\n const [isLoading, setIsLoading] = React.useState(false);\r\n const [enableAutoFillRelatedFields, setEnableAutoFillRelatedFields] = React.useState(false);\r\n const [isAddDatasourceItemPanelOpen, setIsAddDatasourceItemPanelOpen] = React.useState(false);\r\n\r\n React.useEffect(() => {\r\n if (datasourceItem) {\r\n (async () => {\r\n setIsLoading(true);\r\n try {\r\n const result = await dataSourceHelper.getSearchStructure(datasourceItem);\r\n if (Array.isArray(result)) {\r\n if (result.length > 1) setEnableAutoFillRelatedFields(true);\r\n setSearchInputs(result.map((item, index) => ({ name: item, value: null, index: index })));\r\n }\r\n const boundedFieldName = dataSourceHelper.getBoundedField(datasourceItem, contentTypeInputName);\r\n setBoundedField(boundedFieldName ?? \"\");\r\n } catch (error) {\r\n logger(error, \"contentTypeDatasourcePicker.tsx (useEffect 1)\");\r\n }\r\n setIsLoading(false);\r\n })();\r\n }\r\n }, [datasourceItem]);\r\n\r\n const isFirstRun = React.useRef(true);\r\n React.useEffect(() => {\r\n try {\r\n const newSelectedTag: ITag = contentTypeNameValue\r\n ? {\r\n name: contentTypeNameValue as string,\r\n key: contentTypeNameValue as string,\r\n }\r\n : null;\r\n\r\n setSelectedTags(newSelectedTag ? [newSelectedTag] : []);\r\n\r\n if (isFirstRun.current) {\r\n isFirstRun.current = false;\r\n return;\r\n }\r\n\r\n updateSearch(newSelectedTag?.key as string ?? \"\");\r\n } catch (e) {\r\n logger(e, \"contentTypeDatasourcePicker.tsx (useEffect 2)\");\r\n }\r\n }, [contentTypeNameValue]);\r\n\r\n const filterSuggestedTags = async (filterText: string, tagList: ITag[]): Promise => {\r\n let suggestedTags: ITag[] = [];\r\n if (filterText) {\r\n try {\r\n const request: IDatasourceQueryDto = {\r\n id: datasourceItem.id,\r\n name: datasourceItem.name,\r\n tenantId: datasourceItem.tenantId,\r\n typeId: datasourceItem.type.id,\r\n typeName: datasourceItem.type.name,\r\n queryParams: [{ name: boundedField, value: filterText }],\r\n returnOnlyQueriedProperties: true,\r\n allowCache: datasourceItem.allowCache\r\n };\r\n const result = await dataSourceService.Search(request);\r\n if (result.length > 0) {\r\n const boundFieldProperty: string = Object.keys(result[0]).find(key => key.toLowerCase().trim() === boundedField.toLowerCase().trim());\r\n if (boundFieldProperty) {\r\n suggestedTags = result\r\n .map(resultRow => {\r\n const propertyValue = resultRow[boundFieldProperty]?.trim();\r\n return {\r\n name: propertyValue,\r\n key: propertyValue\r\n }\r\n })\r\n .filter((tag, index, tags) => {\r\n const tagName: string = tag.name.toLowerCase();\r\n return tagName?.length > 0\r\n && tagName.indexOf(filterText.trim().toLowerCase()) !== -1\r\n && tags.findIndex(t => (t.name === tag.name)) === index\r\n && !listContainsTagList(tag, tagList)\r\n });\r\n }\r\n } else {\r\n if (datasourceItem.allowAdd) {\r\n suggestedTags.push({\r\n name: \"Add new item\",\r\n key: \"addNewItem\"\r\n })\r\n }\r\n }\r\n } catch (error) {\r\n logger(error, \"datasourceTextTagPicker.tsx (filterSuggestedTags)\");\r\n }\r\n }\r\n return sortTerms(filterText, suggestedTags);\r\n };\r\n\r\n const closePanel = () => {\r\n setIsOpen(false);\r\n };\r\n\r\n const updateInputValue = (newValue: string) => {\r\n updateContentTypeNameValue(newValue);\r\n updateSearch(newValue);\r\n };\r\n\r\n const updateSearchInputs = (index: number, value: string) => {\r\n dataSourceHelper.updateSearchInputs(index, value, searchInputs, setSearchInputs);\r\n };\r\n\r\n const openPanel = async () => {\r\n updateSearch(contentTypeNameValue);\r\n setIsOpen(true);\r\n };\r\n\r\n const updateSearch = (newValue: string) => {\r\n const index = searchInputs.findIndex(item => item.name?.trim().toLowerCase() === boundedField?.trim().toLowerCase());\r\n updateSearchInputs(index, newValue);\r\n };\r\n\r\n const onChangeHandle = (tags: ITag[]): void => {\r\n const searchValue = tags?.length === 1 ? tags[0].key as string : \"\";\r\n setSelectedTags(tags);\r\n updateSearch(searchValue);\r\n updateContentTypeNameValue(searchValue);\r\n if (enableAutoFillRelatedFields) getRelatedDatasourceValues(searchValue);\r\n };\r\n\r\n const getRelatedDatasourceValues = async (searchValue: string) => {\r\n if (searchValue?.trim()) {\r\n try {\r\n const request: IDatasourceQueryDto = {\r\n id: datasourceItem.id,\r\n name: datasourceItem.name,\r\n tenantId: datasourceItem.tenantId,\r\n typeId: datasourceItem.type.id,\r\n typeName: datasourceItem.type.name,\r\n queryParams: [{ name: boundedField, value: searchValue }],\r\n returnOnlyQueriedProperties: false,\r\n allowCache: datasourceItem.allowCache\r\n };\r\n\r\n const result = await dataSourceService.Search(request);\r\n if (result.length === 1) {\r\n const propertyKeys = Object.keys(result[0]); //keys of the data source, not the sharepoint columns\r\n if (propertyKeys) {\r\n let resultItem: any = result[0];\r\n if (resultItem) {\r\n let boundObject = {};\r\n propertyKeys\r\n .forEach((key) => {\r\n if (resultItem[key]) {\r\n const boundField = datasourceItem?.boundFields?.find(field => {\r\n return field?.datasourceField.toLowerCase().trim() == key.toLowerCase().trim()\r\n }); //check if any of the data source fields have a mapping.\r\n if (boundField) { //if a mapping exists\r\n const names = boundField.name.split(\",\").map(name => name.toLowerCase().trim());\r\n names\r\n .filter(name => name.toLowerCase().trim() !== contentTypeInputName.toLowerCase().trim())\r\n .forEach(name => {\r\n boundObject[name] = resultItem[key];\r\n })\r\n } else {\r\n boundObject[key] = resultItem[key];\r\n }\r\n }\r\n });\r\n\r\n setDatasourceValues(boundObject); //redux. \r\n }\r\n }\r\n }\r\n } catch (error) {\r\n logger(error, \"contentTypeDatasourcePicker.tsx (getRelatedDatasourceValues)\");\r\n }\r\n }\r\n }\r\n\r\n const pickerSuggestionsProps: IBasePickerSuggestionsProps = {\r\n suggestionsHeaderText: languageStrings.Suggestions,\r\n //noResultsFoundText: showLink ? \"No results found, add a new item?\" : languageStrings.NoResultsFound\r\n };\r\n\r\n const onItemSelected = (item) => {\r\n if (item && item.key === 'addNewItem') {\r\n setIsAddDatasourceItemPanelOpen(true);\r\n return null; // return null to prevent adding it to the selected items.\r\n }\r\n return item;\r\n };\r\n\r\n const input = (\r\n <>\r\n \r\n \r\n \r\n );\r\n\r\n return (\r\n <>\r\n \r\n {input}\r\n {\r\n {isLoading\r\n ? \r\n :
\r\n \r\n \r\n \r\n
}\r\n
}\r\n
\r\n \r\n {isAddDatasourceItemPanelOpen &&\r\n setIsAddDatasourceItemPanelOpen(false)}\r\n displayName={datasourceItem?.name}\r\n dataSourceHelper={dataSourceHelper}\r\n dataSourceItem={datasourceItem}\r\n />}\r\n \r\n );\r\n};\r\n\r\nexport const ContentTypeNameDatasourcePicker = connect(null, mapDispatchToProps)(UnconnectedContentTypeNameDatasourcePicker);","import * as React from \"react\";\r\nimport * as LocaleCurrency from \"locale-currency\";\r\n// import * as lcid from \"lcid\";\r\nimport * as lcid from \"../../../../utilities/lcid/lcid\";\r\nimport { TextField } from \"@fluentui/react/lib/TextField\";\r\n\r\nimport { InputProps } from \"../../interfaces/props/InputProps\";\r\nimport { NumberHelper } from \"../helpers/numberParsor\";\r\nimport { formatParts } from \"../../config/constants\";\r\nimport { localStringToNumber } from \"../helpers/stringHelper\";\r\nimport getSymbolFromCurrency = require(\"currency-symbol-map\");\r\nimport { logger } from \"../../../../utilities/logger\";\r\nimport { inputResult } from \"../helpers/inputResult\";\r\nimport { SharePointMetadataBooleans } from \"../../config/sharepointConstants\";\r\n\r\nexport const Currency: React.FunctionComponent = ({\r\n displayName,\r\n isRequired,\r\n inputValue,\r\n inputValidator,\r\n updateInputValidationStatus,\r\n error,\r\n regionalSetting\r\n}: InputProps) => {\r\n const [currencySymbol, setCurrencySymbol] = React.useState();\r\n const [currencyFormatter, setCurrencyFormat] = React.useState(null);\r\n const [formattedCurrencyValue, setFormattedCurrencyValue] = React.useState(null);\r\n const [isInFocus, setIsInFocus] = React.useState(false);\r\n const [numericInputError, setNumericInputError] = React.useState();\r\n\r\n React.useEffect(() => {\r\n const lcidFormat = lcid.from(regionalSetting?.CollationLCID).replace(\"_\", \"-\");\r\n const currency = LocaleCurrency.getCurrency(lcidFormat);\r\n const currencyFormatter = new Intl.NumberFormat(lcidFormat, {\r\n style: formatParts.currency,\r\n currency: currency\r\n });\r\n\r\n setCurrencyFormat(currencyFormatter);\r\n const currencySymbol = getSymbolFromCurrency(currency);\r\n setCurrencySymbol(currencySymbol);\r\n }, []);\r\n\r\n React.useEffect(() => {\r\n if (currencyFormatter && !isNaN(Number(inputValue?.value ?? undefined))) {\r\n setFormattedCurrencyValue(currencyFormatter.format(inputValue.value));\r\n } else {\r\n setFormattedCurrencyValue(null);\r\n }\r\n }, [currencyFormatter, inputValue?.value]);\r\n\r\n const isFirstRun = React.useRef(true);\r\n React.useEffect(() => {\r\n try {\r\n if (isFirstRun.current) {\r\n isFirstRun.current = false;\r\n return;\r\n }\r\n updateInputValidationStatus(inputValidator.validate(inputValue?.value));\r\n } catch (e) {\r\n logger(e, \"currency.tsx (useEffect)\")\r\n }\r\n }, [inputValue?.updatedFromDataSourceToggle]);\r\n\r\n const onChangeNumberField = React.useCallback((event: any, value?: string) => {\r\n // updateInputValidationStatus(inputValidator.validate(NumberHelper.realParseFloat(value)));\r\n const validationResult: inputResult = inputValidator.validate(value);\r\n if (value) {\r\n setNumericInputError(validationResult?.error);\r\n }\r\n updateInputValidationStatus(validationResult);\r\n }, []);\r\n\r\n const onChangeTextField = React.useCallback((event: any, value?: string) => {\r\n return;\r\n }, []);\r\n\r\n const onBlur = (event: any): void => {\r\n const validationResult: inputResult = inputValidator.validate(event.target.value);\r\n setNumericInputError(validationResult?.error);\r\n updateInputValidationStatus(validationResult);\r\n if (event.target.value) {\r\n const numberValue = localStringToNumber(event.target.value);\r\n setFormattedCurrencyValue(currencyFormatter.format(numberValue));\r\n }\r\n else {\r\n setFormattedCurrencyValue(null);\r\n }\r\n setIsInFocus(false);\r\n };\r\n\r\n const onFocus = (event: any): void => {\r\n setIsInFocus(true);\r\n };\r\n\r\n const numberInputField = (\r\n \r\n );\r\n\r\n const textInputField = (\r\n \r\n );\r\n\r\n return isInFocus ? numberInputField : textInputField;\r\n};\r\n\r\nexport default Currency;\r\n","import * as React from \"react\";\r\nimport { InputProps } from \"../../interfaces/props/InputProps\";\r\nimport { ResponsiveMode, Dropdown, IDropdownOption, TooltipHost, Stack, IStackTokens, Spinner, SpinnerSize, FontIcon, ComboBox, IComboBox, IComboBoxOption } from \"@fluentui/react\";\r\nimport { DatasourceService } from \"../../services/DatasourceService\";\r\nimport { connect } from \"react-redux\";\r\nimport { RootState } from \"../../redux\";\r\nimport { DataSourcePanel } from \"./datasourcePanel\";\r\nimport { DataSourceDropdownInitializer } from \"../helpers/datasourceDropdownInitializer\";\r\nimport { INameValuePairIndex } from \"../../interfaces/INameValuePairIndex\";\r\nimport { DatasourceHelper } from \"../helpers/dataSourceHelper\";\r\nimport { LanguageContext } from \"../../../../utilities/LocalizationModule\";\r\nimport { logger } from \"../../../../utilities/logger\";\r\nimport { setDatasourceValues } from \"../../redux/modules/datasource\";\r\nimport { IDatasourceQueryDto } from \"../../interfaces/IDatasourceQueryDto\";\r\nimport { SharePointMetadataBooleans } from \"../../config/sharepointConstants\";\r\n\r\nconst getOptions = (allowFreeForm: boolean, defaultOptions: any[], inputValue: string): IDropdownOption[] => {\r\n const options = Array.isArray(defaultOptions) ? defaultOptions : [];\r\n if (allowFreeForm && inputValue) {\r\n if (!options.some(option => option.key && ((option.key as string).trim().toLowerCase() === inputValue.trim().toLowerCase()))) {\r\n options.push({ key: inputValue, text: inputValue });\r\n }\r\n }\r\n return options;\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n setDatasourceValues,\r\n};\r\n\r\nconst mapStateToProps = (state: RootState) => {\r\n return {\r\n datasourceItems: state.tenantInfo.datasources,\r\n currentDirectory: state.workingDirectories?.workingDirectories?.length > 0 ? state.workingDirectories.workingDirectories[state.workingDirectories.workingDirectories.length - 1] : null\r\n };\r\n};\r\n\r\ntype reduxDispatch = typeof mapDispatchToProps;\r\ntype reduxState = ReturnType;\r\ninterface DatasourceDropdownReduxProps extends InputProps, reduxDispatch, reduxState { }\r\n\r\nexport const UnconnectedDataSourceDropdown: React.FunctionComponent = ({\r\n displayName,\r\n isRequired,\r\n inputValue,\r\n inputValidator,\r\n updateInputValidationStatus,\r\n error,\r\n datasourceItems,\r\n setDatasourceValues,\r\n currentDirectory\r\n}: DatasourceDropdownReduxProps) => {\r\n const languageStrings = React.useContext(LanguageContext);\r\n const [isOpen, setIsOpen] = React.useState(false);\r\n const [datasources, setDatasources] = React.useState([]);\r\n const [searchInputs, setSearchInputs] = React.useState([]);\r\n const [boundedField, setBoundedField] = React.useState(\"\");\r\n const [boundName] = React.useState(inputValue?.xml?.ContentTypeInputName ?? displayName);\r\n const dataSourceService = new DatasourceService();\r\n const dataSourceHelper = new DatasourceHelper(dataSourceService);\r\n const [dataSourceItem] = React.useState(\r\n dataSourceHelper.getInputDataSource(datasourceItems, boundName, [currentDirectory?.siteDisplayName ?? \"\"], [currentDirectory?.DocumentLibrary ?? \"\"])\r\n );\r\n const [isLoading, setIsLoading] = React.useState(false);\r\n const [enableAutoFillRelatedFields, setEnableAutoFillRelatedFields] = React.useState(false);\r\n const [isMasterDatasource] = React.useState(dataSourceItem && boundName && dataSourceItem?.boundFields.find(item => item.name?.split(\",\").some(name => name.trim().toLowerCase() === boundName.trim().toLowerCase()))?.isMaster);\r\n const [allowCustomValues] = React.useState(dataSourceItem && boundName && dataSourceItem?.boundFields.find(item => item.name?.split(\",\").some(name => name.trim().toLowerCase() === boundName.trim().toLowerCase()))?.allowCustomValues);\r\n\r\n const isFirstRun = React.useRef(true);\r\n React.useEffect(() => {\r\n if (!isFirstRun.current) {\r\n try {\r\n updateInputValidationStatus(inputValidator.validate(inputValue?.value));\r\n } catch (e) {\r\n logger(e, \"dataSourceDropdown.tsx (updatedFromDataSourceToggle)\");\r\n }\r\n }\r\n }, [inputValue?.updatedFromDataSourceToggle]);\r\n\r\n React.useEffect(() => {\r\n if (!isFirstRun.current) {\r\n try {\r\n const dropdownInitializer = new DataSourceDropdownInitializer(dataSourceService, dataSourceItem, boundName, false);\r\n dropdownInitializer.initialize((options) => setDatasources(getOptions(allowCustomValues, options, inputValue?.value)));\r\n } catch (e) {\r\n logger(e, \"dataSourceDropdown.tsx (resetDatasourceOptionsToggle)\");\r\n }\r\n }\r\n }, [inputValue?.resetDatasourceOptionsToggle]);\r\n\r\n React.useEffect(() => {\r\n if (isFirstRun.current) {\r\n isFirstRun.current = false;\r\n }\r\n\r\n const setupAsyncWrapper = async () => {\r\n setIsLoading(true);\r\n try {\r\n const dropdownInitializer = new DataSourceDropdownInitializer(dataSourceService, dataSourceItem, boundName, false);\r\n // const [result] = await Promise.all([dataSourceHelper.getSearchStructure(dataSourceItem), dropdownInitializer.initialize(setDatasources)]);\r\n const [result] = await Promise.all([dataSourceHelper.getSearchStructure(dataSourceItem), dropdownInitializer.initialize((options) => setDatasources(prevOptions => prevOptions?.length === 0 ? getOptions(allowCustomValues, options, inputValue?.value) : prevOptions))]);\r\n if (Array.isArray(result)) {\r\n if (result.length > 1) setEnableAutoFillRelatedFields(true);\r\n setSearchInputs(result.map((item, index) => ({ name: item, value: null, index: index })));\r\n }\r\n const boundedFieldName = dataSourceHelper.getBoundedField(dataSourceItem, boundName);\r\n setBoundedField(boundedFieldName ?? \"\");\r\n\r\n if (inputValue?.value && boundedFieldName) {\r\n getRelatedDatasourceValues(inputValue.value, boundedFieldName, false, true);\r\n }\r\n } catch (error) {\r\n logger(error, \"dataSourceDropdown.tsx (useEffect 1)\");\r\n }\r\n setIsLoading(false);\r\n };\r\n\r\n setupAsyncWrapper();\r\n }, []);\r\n\r\n React.useEffect(() => {\r\n if (Array.isArray(inputValue?.updatedDatasourceOptions)) {\r\n try {\r\n setDatasources(inputValue.updatedDatasourceOptions.map(option => ({ key: option, text: option })));\r\n } catch (e) {\r\n logger(e, \"dataSourceDropdown.tsx (updatedDatasourceOptions)\");\r\n }\r\n }\r\n }, [inputValue?.updatedDatasourceOptions]);\r\n\r\n const closePanel = () => {\r\n setIsOpen(false);\r\n };\r\n\r\n const updateInputValue = (newValue: string) => {\r\n updateInputValidationStatus(inputValidator.validate([newValue]));\r\n updateSearch(newValue);\r\n };\r\n\r\n const updateSearchInputs = (index: number, value: string) => {\r\n dataSourceHelper.updateSearchInputs(index, value, searchInputs, setSearchInputs);\r\n };\r\n\r\n const openPanel = async () => {\r\n updateSearch(inputValue?.value);\r\n setIsOpen(true);\r\n };\r\n\r\n const updateSearch = (newValue: string) => {\r\n const index = searchInputs.findIndex(item => item.name?.trim().toLowerCase() === boundedField?.trim().toLowerCase());\r\n updateSearchInputs(index, newValue);\r\n };\r\n\r\n const onChangeHandle = (event: React.FormEvent, item: IDropdownOption): void => {\r\n updateSearch(item.key as string);\r\n updateInputValidationStatus(inputValidator.validate(item.key));\r\n if (enableAutoFillRelatedFields) getRelatedDatasourceValues(item.key as string, boundedField, true);\r\n };\r\n\r\n const onComboChange = React.useCallback(\r\n (event: React.FormEvent, option?: IComboBoxOption, index?: number, value?: string): void => {\r\n let key = option?.key;\r\n const isFreeFormValue: boolean = !option && value?.length > 0;\r\n if (isFreeFormValue) {\r\n key = value;\r\n setDatasources(prevOptions => [...prevOptions, { key: key!, text: value }]);\r\n }\r\n updateSearch(key as string);\r\n updateInputValidationStatus(inputValidator.validate(key));\r\n if (!isFreeFormValue && enableAutoFillRelatedFields) getRelatedDatasourceValues(key as string, boundedField, true);\r\n },\r\n [inputValidator, boundedField, enableAutoFillRelatedFields]\r\n );\r\n\r\n const getRelatedDatasourceValues = async (searchValue: string, boundedField: string, isStrict: boolean, initialLoad: boolean = false) => {\r\n if (searchValue?.trim()) {\r\n try {\r\n const request: IDatasourceQueryDto = {\r\n id: dataSourceItem.id,\r\n name: dataSourceItem.name,\r\n tenantId: dataSourceItem.tenantId,\r\n typeId: dataSourceItem.type.id,\r\n typeName: dataSourceItem.type.name,\r\n queryParams: [{ name: boundedField, value: searchValue }],\r\n returnOnlyQueriedProperties: false,\r\n isStrict: isStrict,\r\n allowCache: dataSourceItem.allowCache\r\n };\r\n\r\n const result = await dataSourceService.Search(request);\r\n if (result.length === 1) {\r\n if (!initialLoad) {\r\n const propertyKeys = Object.keys(result[0]); //keys of the data source, not the sharepoint columns\r\n if (propertyKeys) {\r\n let resultItem: any = result[0];\r\n if (resultItem) {\r\n let boundObject = {};\r\n propertyKeys\r\n .forEach((key) => {\r\n if (resultItem[key]) {\r\n const boundField = dataSourceItem?.boundFields?.find(field => {\r\n return field?.datasourceField.toLowerCase().trim() == key.toLowerCase().trim()\r\n }); //check if any of the data source fields have a mapping.\r\n if (boundField) { //if a mapping exists\r\n const names = boundField.name.split(\",\").map(name => name.toLowerCase().trim());\r\n names\r\n .filter(name => name.toLowerCase().trim() !== boundName.toLowerCase().trim())\r\n .forEach(name => {\r\n boundObject[name] = resultItem[key];\r\n })\r\n } else {\r\n boundObject[key] = resultItem[key];\r\n }\r\n }\r\n });\r\n\r\n setDatasourceValues(boundObject); //redux. \r\n }\r\n }\r\n }\r\n }\r\n else if (isMasterDatasource && result.length > 1) {\r\n let resultItem: any = result[0];\r\n const propertyKeys = resultItem && Object.keys(result[0]);\r\n if (propertyKeys) {\r\n const options: any[] = [];\r\n result.forEach(resultRow => {\r\n let boundObject = {};\r\n propertyKeys\r\n .forEach((key) => {\r\n if (resultRow[key]) {\r\n const boundField = dataSourceItem?.boundFields?.find(field => {\r\n return field?.datasourceField.toLowerCase().trim() == key.toLowerCase().trim()\r\n });\r\n if (boundField) {\r\n const names = boundField.name.split(\",\").map(name => name.toLowerCase().trim());\r\n names\r\n .filter(name => name.toLowerCase().trim() !== boundName.toLowerCase().trim())\r\n .forEach(name => {\r\n boundObject[name] = resultRow[key];\r\n })\r\n } else {\r\n boundObject[key] = resultRow[key];\r\n }\r\n }\r\n });\r\n options.push(boundObject);\r\n });\r\n setDatasourceValues(options, initialLoad);\r\n }\r\n }\r\n } catch (error) {\r\n logger(error, \"dataSourceDropdown.tsx (getRelatedDatasourceValues)\");\r\n }\r\n }\r\n }\r\n\r\n const input = allowCustomValues\r\n ?\r\n \r\n :\r\n ;\r\n\r\n const stackTokens: IStackTokens = {\r\n childrenGap: 5\r\n };\r\n\r\n return (\r\n <>\r\n \r\n {input}\r\n {inputValue?.xml?.ReadOnly !== SharePointMetadataBooleans.true && \r\n {isLoading\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\nexport const DataSourceDropdown = connect(mapStateToProps, mapDispatchToProps)(UnconnectedDataSourceDropdown);\r\n","import * as React from \"react\";\r\nimport { InputProps } from \"../../interfaces/props/InputProps\";\r\nimport { ResponsiveMode, Dropdown, IDropdownOption, TooltipHost, Stack, IStackTokens, Spinner, SpinnerSize, FontIcon, IComboBox, IComboBoxOption, ComboBox } from \"@fluentui/react\";\r\nimport { RootState } from \"../../redux\";\r\nimport { connect } from \"react-redux\";\r\nimport { DatasourceService } from \"../../services/DatasourceService\";\r\nimport { DataSourcePanel } from \"./datasourcePanel\";\r\nimport { DataSourceDropdownInitializer } from \"../helpers/datasourceDropdownInitializer\";\r\nimport { INameValuePairIndex } from \"../../interfaces/INameValuePairIndex\";\r\nimport { DatasourceHelper } from \"../helpers/dataSourceHelper\";\r\nimport { LanguageContext } from \"../../../../utilities/LocalizationModule\";\r\nimport { logger } from \"../../../../utilities/logger\";\r\nimport { SharePointInputTypes, SharePointMetadataBooleans } from \"../../config/sharepointConstants\";\r\n\r\nconst stackTokens: IStackTokens = {\r\n childrenGap: 5\r\n};\r\n\r\nconst getValueAsArray = (value: any): any[] => {\r\n return Array.isArray(value)\r\n ? value\r\n : (value\r\n ? (value as string)?.split(\",\")?.filter(x => x)?.map(x => x.trim() ?? [])\r\n : []);\r\n}\r\n\r\nconst getOptions = (allowFreeForm: boolean, defaultOptions: any[], inputValue: any) => {\r\n const options = Array.isArray(defaultOptions) ? defaultOptions : [];\r\n if (allowFreeForm && Array.isArray(options) && inputValue) {\r\n const initialSelection: any[] = getValueAsArray(inputValue);\r\n for (let i = 0; i < initialSelection.length; i++) {\r\n const selectedValue = initialSelection[i] as string;\r\n if (!options.some(option => option.key && ((option.key as string).trim().toLowerCase() === selectedValue.trim().toLowerCase()))) {\r\n options.push({ key: selectedValue, text: selectedValue });\r\n }\r\n }\r\n }\r\n return options;\r\n}\r\n\r\nconst mapStateToProps = (state: RootState) => {\r\n return {\r\n datasourceItems: state.tenantInfo.datasources,\r\n currentDirectory: state.workingDirectories?.workingDirectories?.length > 0 ? state.workingDirectories.workingDirectories[state.workingDirectories.workingDirectories.length - 1] : null\r\n };\r\n};\r\n\r\ninterface DatasourceDropdownMultipleReduxProps extends InputProps, ReduxProps { }\r\ntype ReduxProps = ReturnType;\r\n\r\nexport const UnconnectedDataSourceMultipleDropdown: React.FunctionComponent = ({\r\n displayName,\r\n isRequired,\r\n error,\r\n updateInputValidationStatus,\r\n inputValidator,\r\n datasourceItems,\r\n currentDirectory,\r\n inputValue\r\n}: DatasourceDropdownMultipleReduxProps) => {\r\n const languageStrings = React.useContext(LanguageContext);\r\n const [isOpen, setIsOpen] = React.useState(false);\r\n const [datasources, setDatasources] = React.useState([]);\r\n const [selectedKeys, setSelectedKeys] = React.useState([]);\r\n const [searchInputs, setSearchInputs] = React.useState([]);\r\n const [boundedField, setBoundedField] = React.useState(\"\");\r\n const [boundName] = React.useState(inputValue?.xml?.ContentTypeInputName ?? displayName);\r\n const dataSourceService = new DatasourceService();\r\n const dataSourceHelper = new DatasourceHelper(dataSourceService);\r\n const [dataSourceItem] = React.useState(\r\n dataSourceHelper.getInputDataSource(datasourceItems, boundName, [currentDirectory?.siteDisplayName ?? \"\"], [currentDirectory?.DocumentLibrary ?? \"\"])\r\n );\r\n const [isLoading, setIsLoading] = React.useState(false);\r\n const [allowCustomValues] = React.useState(dataSourceItem && boundName && dataSourceItem?.boundFields.find(item => item.name?.split(\",\").some(name => name.trim().toLowerCase() === boundName.trim().toLowerCase()))?.allowCustomValues);\r\n\r\n React.useEffect(() => {\r\n const setupAsyncWrapper = async () => {\r\n setIsLoading(true);\r\n try {\r\n const dropdownInitializer = new DataSourceDropdownInitializer(dataSourceService, dataSourceItem, boundName, true);\r\n const [result] = await Promise.all([dataSourceHelper.getSearchStructure(dataSourceItem), dropdownInitializer.initialize((options) => setDatasources(getOptions(allowCustomValues, options, inputValue?.value)))]);\r\n if (Array.isArray(result)) setSearchInputs(result.map((item, index) => ({ name: item, value: null, index: index })));\r\n const boundedFieldName = dataSourceHelper.getBoundedField(dataSourceItem, boundName);\r\n setBoundedField(boundedFieldName);\r\n } catch (error) {\r\n logger(error, \"dataSourceMultipleDropdown.tsx (useEffect 1)\");\r\n }\r\n setIsLoading(false);\r\n };\r\n\r\n setupAsyncWrapper();\r\n }, []);\r\n\r\n React.useEffect(() => {\r\n if (inputValue?.value) {\r\n try {\r\n setSelectedKeys(getValueAsArray(inputValue?.value));\r\n } catch (e) {\r\n logger(e, \"dataSourceMultipleDropdown.tsx (inputValue?.value)\");\r\n }\r\n }\r\n }, [inputValue?.value]);\r\n\r\n const isFirstRun = React.useRef(true);\r\n React.useEffect(() => {\r\n try {\r\n if (isFirstRun.current) {\r\n isFirstRun.current = false;\r\n return;\r\n }\r\n const valuesAsArray: any[] = getValueAsArray(inputValue?.value);\r\n // let selectedItems = [...valuesAsArray, ...(selectedKeys?.filter(x => !valuesAsArray.some(v => v == x)))];\r\n let selectedItems = [...valuesAsArray];\r\n updateInputValidationStatus(inputValidator.validate(inputValue?.xml?.Type === SharePointInputTypes.multiChoice ? selectedItems : selectedItems.join(\", \")));\r\n } catch (e) {\r\n logger(e, \"dataSourceMultipleDropdown.tsx (useEffect 2)\");\r\n }\r\n }, [inputValue?.updatedFromDataSourceToggle]);\r\n\r\n const closePanel = () => {\r\n setIsOpen(false);\r\n };\r\n\r\n const updateSearchInputs = (index: number, value: string) => {\r\n dataSourceHelper.updateSearchInputs(index, value, searchInputs, setSearchInputs);\r\n };\r\n\r\n const openPanel = async () => {\r\n //updateSearch(selectedKeys && selectedKeys.length === 1 ? selectedKeys[0] : \"\");\r\n setIsOpen(true);\r\n };\r\n\r\n const updateInputValue = (newValue: string) => {\r\n const valueAsArray: string[] = newValue ? [newValue] : [];\r\n setSelectedKeys(valueAsArray);\r\n updateInputValidationStatus(inputValidator.validate(inputValue?.xml?.Type === SharePointInputTypes.multiChoice ? valueAsArray : valueAsArray.join(\", \")));\r\n updateSearch(newValue);\r\n };\r\n\r\n // const HandleOnBlur = (event): void => {\r\n // updateInputValidationStatus(inputValidator.validate(inputValue?.xml?.Type === SharePointInputTypes.multiChoice ? selectedKeys : selectedKeys.join(\", \")));\r\n // };\r\n\r\n const updateSearch = (newValue: string) => {\r\n const index = searchInputs.findIndex(item => item.name?.trim().toLowerCase() === boundedField?.trim().toLowerCase());\r\n updateSearchInputs(index, newValue);\r\n };\r\n\r\n const onChangeHandle = (_event: React.FormEvent, item: IDropdownOption): void => {\r\n if (item) {\r\n let selectedItems = item.selected\r\n ? [...selectedKeys, item.key as string]\r\n : selectedKeys.filter(key => key !== item.key);\r\n\r\n updateInputValidationStatus(inputValidator.validate(inputValue?.xml?.Type === SharePointInputTypes.multiChoice ? selectedItems : selectedItems.join(\", \")));\r\n setSelectedKeys(selectedItems);\r\n updateSearch(selectedItems && selectedItems.length === 1 ? selectedItems[0] : \"\");\r\n }\r\n };\r\n\r\n const onComboChange = React.useCallback(\r\n (event: React.FormEvent, option?: IComboBoxOption, index?: number, value?: string): void => {\r\n let selected = option?.selected;\r\n if (!option && !value?.trim()) return;\r\n\r\n if (!option && value) {\r\n selected = true;\r\n option = { key: value, text: value };\r\n setDatasources(prevOptions => [...prevOptions, option]);\r\n }\r\n\r\n if (option) {\r\n const selection = selected ? [...(selectedKeys || []), option!.key as string] : selectedKeys?.filter(k => k !== option!.key);\r\n updateInputValidationStatus(inputValidator.validate(inputValue?.xml?.Type === SharePointInputTypes.multiChoice ? selection : selection.join(\", \")));\r\n setSelectedKeys(selection);\r\n updateSearch(selection && selection.length === 1 ? selection[0] : \"\");\r\n }\r\n },\r\n [selectedKeys]\r\n );\r\n\r\n const input = allowCustomValues\r\n ?\r\n \r\n :\r\n ;\r\n\r\n return (\r\n <>\r\n \r\n {input}\r\n {inputValue?.xml?.ReadOnly !== SharePointMetadataBooleans.true && \r\n {isLoading\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\nexport const DataSourceMultipleDropdown = connect(mapStateToProps, null)(UnconnectedDataSourceMultipleDropdown);\r\n","import * as React from \"react\";\r\nimport {\r\n mergeStyleSets,\r\n Panel,\r\n TextField,\r\n PrimaryButton,\r\n DetailsList,\r\n DetailsListLayoutMode,\r\n SelectionMode,\r\n Spinner,\r\n ScrollablePane,\r\n ScrollbarVisibility,\r\n ConstrainMode,\r\n PanelType,\r\n Stack,\r\n IStackTokens,\r\n Selection,\r\n IObjectWithKey,\r\n CommandBar,\r\n StickyPositionType,\r\n Sticky,\r\n ICommandBarItemProps,\r\n ICommandBarStyles\r\n} from \"@fluentui/react\";\r\nimport { INameValuePairIndex } from \"../../interfaces/INameValuePairIndex\";\r\nimport { DatasourceService } from \"../../services/DatasourceService\";\r\nimport { dataSourceItem } from \"../../redux/models/reduxModels\";\r\nimport { IDatasourceQueryDto } from \"../../interfaces/IDatasourceQueryDto\";\r\nimport { setDatasourceValues } from \"../../redux/modules/datasource\";\r\nimport { connect } from \"react-redux\";\r\nimport { DetailListBuilder } from \"../helpers/detailListBuilder\";\r\nimport { panelStyles, detailListStyles } from \"../../config/controlStyles\";\r\nimport { LanguageContext } from \"../../../../utilities/LocalizationModule\";\r\nimport { RenderHelper } from \"../helpers/renderHelper\";\r\nimport CollapsibleSection from \"../directoryComponents/advancedSearch/components/CollapsibleSection\"\r\nimport { isMobile } from \"../../styles/mobileStyles\";\r\nimport { CMAddDatasourceItemPanel } from \"../../../../contentManager/Panels/CMAddDatasourceItemPanel\";\r\nimport { DatasourceHelper } from \"../helpers/dataSourceHelper\";\r\n\r\n// Styles\r\nconst tableHeadingHeight = 60;\r\nconst panelHeadingHeight = 32;\r\nconst sectionTitleHeight = 34;\r\nconst searchFieldsItemHeight = 80;\r\nconst commandBarStyle: Partial = {\r\n root: { padding: \"0 0 0 15px\", height: \"25px\" },\r\n};\r\n\r\nlet alwaysSpaceTaken = panelHeadingHeight + sectionTitleHeight + tableHeadingHeight;\r\n//Props + Redux\r\n\r\n\r\nconst mapDispatchToProps = {\r\n setDatasourceValues\r\n};\r\n\r\ntype ReduxProps = typeof mapDispatchToProps;\r\n\r\ninterface DatasourcePanelReduxProps extends ReduxProps {\r\n updateInputValue: (newValue: any) => void;\r\n closePanel: () => void;\r\n isOpen: boolean;\r\n datasourceService: DatasourceService;\r\n datasourceItem: dataSourceItem;\r\n searchInputs: INameValuePairIndex[];\r\n updateSearchInputs: (index: number, value: string) => void;\r\n boundedField: string;\r\n displayName: string;\r\n type?: PanelType;\r\n dataSourceItem?: dataSourceItem;\r\n dataSourceHelper?: DatasourceHelper;\r\n}\r\n\r\nexport const UnconnectedDataSourcePanel: React.FunctionComponent = props => {\r\n const languageStrings = React.useContext(LanguageContext);\r\n const dismissPanel = React.useCallback(() => props.closePanel(), []);\r\n const [items, setItems] = React.useState([]);\r\n const [columns, setColumns] = React.useState([]);\r\n const [showTable, setShowTable] = React.useState(false);\r\n const [isSearching, setIsSearching] = React.useState(false);\r\n const [showFields, setShowFields] = React.useState(true);\r\n const [selectedItem, setSelectedItem] = React.useState();\r\n const [topCommandItems, setTopCommandItems] = React.useState([]);\r\n const [isAddDatasourceItemPanelOpen, setIsAddDatasourceItemPanelOpen] = React.useState(false);\r\n\r\n const toggleShowFields = () => {\r\n setShowFields(currentVal => !currentVal);\r\n }\r\n\r\n const selection = React.useMemo(\r\n () =>\r\n new Selection({\r\n onSelectionChanged: () => {\r\n setSelectedItem(selection.getSelection()[0]);\r\n },\r\n selectionMode: SelectionMode.single,\r\n }),\r\n []);\r\n\r\n let detailListBuilder: DetailListBuilder;\r\n\r\n const onChangeTextHandle = (event: any, newValue?: string) => {\r\n props.updateSearchInputs(parseInt(event.target.name), newValue);\r\n };\r\n\r\n React.useEffect(() => {\r\n if (props.isOpen) {\r\n const setupAsyncWrapper = async () => {\r\n await search();\r\n };\r\n setupAsyncWrapper();\r\n }\r\n }, [props.isOpen]);\r\n\r\n const search = async () => {\r\n resetTable();\r\n \r\n const searchParams = props.searchInputs\r\n .map(item => ({ name: item.name, value: item.value }))\r\n .filter(item => item.value);\r\n\r\n if (!searchParams.length) return;\r\n\r\n setIsSearching(true);\r\n // resetTable();\r\n\r\n const request: IDatasourceQueryDto = {\r\n id: props.datasourceItem.id,\r\n tenantId: props.datasourceItem.tenantId,\r\n typeId: props.datasourceItem.type.id,\r\n typeName: props.datasourceItem.type.name,\r\n name: props.datasourceItem.name,\r\n queryParams: searchParams,\r\n returnOnlyQueriedProperties: false,\r\n allowCache: props.datasourceItem.allowCache\r\n };\r\n\r\n const result = await props.datasourceService.Search(request);\r\n if (result.length > 0) {\r\n detailListBuilder = new DetailListBuilder();\r\n let tableData = detailListBuilder.getTableData(result, false);\r\n setColumns(tableData.columns);\r\n setItems(tableData.rows);\r\n setShowFields(false);\r\n }\r\n else {\r\n setShowFields(true);\r\n }\r\n\r\n setShowTable(true);\r\n setIsSearching(false);\r\n };\r\n\r\n const resetTable = () => {\r\n setColumns([]);\r\n setItems([]);\r\n setShowFields(true);\r\n setShowTable(false);\r\n };\r\n\r\n const searchItems = props.searchInputs.map((item, index) => {\r\n return (\r\n \r\n \r\n \r\n );\r\n });\r\n\r\n const handleItemSubmitted = (item: any): void => {\r\n const propertyKeys = Object.keys(item); //keys of the data source, not the sharepoint columns\r\n if (propertyKeys) {\r\n let boundObject = {};\r\n propertyKeys.forEach((key) => {\r\n if (item[key]) {\r\n const boundField = props.datasourceItem?.boundFields?.find(field => {\r\n return field?.datasourceField.toLowerCase().trim() == key.toLowerCase().trim()\r\n }); //check if any of the data source fields have a mapping.\r\n if (boundField) { //if a mapping exists\r\n const names = boundField.name.split(\",\").map(name => name.toLowerCase().trim());\r\n names.forEach(name => {\r\n boundObject[name] = item[key];\r\n })\r\n } else {\r\n boundObject[key] = item[key];\r\n }\r\n }\r\n });\r\n props.setDatasourceValues(boundObject); //redux. \r\n props.updateInputValue(item[props.boundedField.toLowerCase()]);\r\n }\r\n props.closePanel();\r\n };\r\n const small = isMobile() ? 120 : 84;\r\n const large = isMobile() ? 450 : 415;\r\n const searchFieldsHeight = searchFieldsItemHeight * (searchItems.length + 1);\r\n alwaysSpaceTaken = showFields ? Math.min(alwaysSpaceTaken + searchFieldsHeight, large) : Math.min(alwaysSpaceTaken, small);\r\n\r\n const classNames = mergeStyleSets({\r\n wrapper: {\r\n marginLeft: -24,\r\n marginRight: -24,\r\n marginBottom: -20,\r\n height: `calc(100vh - ${alwaysSpaceTaken}px)`,\r\n position: \"relative\"\r\n }\r\n });\r\n\r\n React.useEffect(() => {\r\n const items: ICommandBarItemProps[] = [\r\n {\r\n key: \"select\",\r\n disabled: !selectedItem,\r\n text: `${\"Select\"}`,\r\n iconProps: { iconName: \"CheckMark\" },\r\n onClick: () => handleItemSubmitted(selectedItem),\r\n }\r\n ]\r\n\r\n if (props.dataSourceItem?.allowAdd) {\r\n items.push(\r\n {\r\n key: \"add\",\r\n text: `${languageStrings.Add}`,\r\n iconProps: { iconName: \"Add\" },\r\n onClick: () => setIsAddDatasourceItemPanelOpen(true),\r\n }\r\n )\r\n }\r\n\r\n setTopCommandItems(items)\r\n }, [selectedItem, props.dataSourceItem])\r\n\r\n const detailList =\r\n showTable ? (<>\r\n\r\n \r\n \r\n \r\n {items.length > 0 ? :

{languageStrings.NoItemsFound}

}\r\n \r\n ) : null;\r\n\r\n const stackTokens: IStackTokens = {\r\n childrenGap: 15\r\n };\r\n\r\n const SearchItems = (\r\n <>\r\n \r\n {searchItems}\r\n \r\n
\r\n search()}>\r\n {isSearching ? : null}\r\n \r\n
\r\n \r\n )\r\n\r\n const IsOfficeJSAvailable: boolean = React.useMemo(() => typeof Office !== \"undefined\" && typeof Office.context?.diagnostics?.host !== \"undefined\", []);\r\n\r\n const panelWidth: string = IsOfficeJSAvailable ?\r\n props?.type === PanelType.customNear ? '360px' : undefined\r\n : \"700px\";\r\n\r\n return (\r\n \r\n \r\n
\r\n
\r\n \r\n
{detailList}
\r\n
\r\n
\r\n {isAddDatasourceItemPanelOpen && \r\n setIsAddDatasourceItemPanelOpen(false)}\r\n displayName={props.displayName}\r\n />}\r\n \r\n );\r\n};\r\n\r\n\r\n\r\nexport const DataSourcePanel = connect(null, mapDispatchToProps)(UnconnectedDataSourcePanel);\r\n","import * as React from \"react\";\r\nimport { InputProps } from \"../../interfaces/props/InputProps\";\r\nimport { TooltipHost, Stack, IStackTokens, TagPicker, ITag, IBasePickerSuggestionsProps, Label, Spinner, SpinnerSize, FontIcon } from \"@fluentui/react\";\r\nimport { DatasourceService } from \"../../services/DatasourceService\";\r\nimport { connect } from \"react-redux\";\r\nimport { RootState } from \"../../redux\";\r\nimport { DataSourcePanel } from \"./datasourcePanel\";\r\nimport { INameValuePairIndex } from \"../../interfaces/INameValuePairIndex\";\r\nimport { DatasourceHelper } from \"../helpers/dataSourceHelper\";\r\nimport { LanguageContext } from \"../../../../utilities/LocalizationModule\";\r\nimport { logger } from \"../../../../utilities/logger\";\r\nimport { IDatasourceQueryDto } from \"../../interfaces/IDatasourceQueryDto\";\r\nimport { SharePointMetadataBooleans } from \"../../config/sharepointConstants\";\r\nimport { sortTerms } from \"../helpers/tagHelper\";\r\n\r\nconst listContainsTagList = (tag: ITag, tagList?: ITag[]) => {\r\n if (!tagList || !tagList.length || tagList.length === 0) {\r\n return false;\r\n }\r\n return tagList.some(compareTag => compareTag.key === tag.key);\r\n};\r\n\r\nconst getTextFromItem = (item: ITag) => item.name;\r\n\r\nconst mapStateToProps = (state: RootState) => {\r\n return {\r\n datasourceItems: state.tenantInfo.datasources,\r\n currentDirectory: state.workingDirectories?.workingDirectories?.length > 0 ? state.workingDirectories.workingDirectories[state.workingDirectories.workingDirectories.length - 1] : null\r\n };\r\n};\r\n\r\ninterface DatasourceTagPickerProps extends InputProps, ReduxProps { }\r\n\r\ntype ReduxProps = ReturnType;\r\n\r\nexport const UnconnectedDatasourceTagPicker: React.FunctionComponent = ({\r\n displayName,\r\n isRequired,\r\n inputValue,\r\n inputValidator,\r\n updateInputValidationStatus,\r\n error,\r\n datasourceItems,\r\n currentDirectory\r\n}: DatasourceTagPickerProps) => {\r\n const languageStrings = React.useContext(LanguageContext);\r\n const [isOpen, setIsOpen] = React.useState(false);\r\n const [searchInputs, setSearchInputs] = React.useState([]);\r\n const [boundedField, setBoundedField] = React.useState(\"\");\r\n const [boundName] = React.useState(inputValue?.xml?.ContentTypeInputName ?? displayName);\r\n const dataSourceService = new DatasourceService();\r\n const dataSourceHelper = new DatasourceHelper(dataSourceService);\r\n const [dataSourceItem] = React.useState(\r\n dataSourceHelper.getInputDataSource(datasourceItems, boundName, [currentDirectory?.siteDisplayName ?? \"\"], [currentDirectory?.DocumentLibrary ?? \"\"])\r\n );\r\n const [selectedTags, setSelectedTags] = React.useState([]); //selected tags\r\n const [isLoading, setIsLoading] = React.useState(false);\r\n\r\n React.useEffect(() => {\r\n const setupAsyncWrapper = async () => {\r\n setIsLoading(true);\r\n try {\r\n const result = await dataSourceHelper.getSearchStructure(dataSourceItem);\r\n if (Array.isArray(result)) setSearchInputs(result.map((item, index) => ({ name: item, value: null, index: index })));\r\n const boundedFieldName = dataSourceHelper.getBoundedField(dataSourceItem, boundName);\r\n setBoundedField(boundedFieldName ?? \"\");\r\n } catch (error) {\r\n logger(error, \"datasourceTagPicker.tsx (useEffect 1)\");\r\n }\r\n setIsLoading(false);\r\n };\r\n setupAsyncWrapper();\r\n }, []);\r\n\r\n const isFirstRun = React.useRef(true);\r\n React.useEffect(() => {\r\n try {\r\n const newSelectedTag: ITag = inputValue?.value\r\n ? {\r\n name: inputValue.value as string,\r\n key: inputValue.value as string,\r\n }\r\n : null;\r\n\r\n setSelectedTags(newSelectedTag ? [newSelectedTag] : []);\r\n\r\n if (isFirstRun.current) {\r\n isFirstRun.current = false;\r\n return;\r\n }\r\n\r\n updateSearch(newSelectedTag?.key as string ?? \"\");\r\n updateInputValidationStatus(inputValidator.validate(inputValue?.value));\r\n } catch (e) {\r\n logger(e, \"datasourceTagPicker.tsx (useEffect 2)\");\r\n }\r\n }, [inputValue?.updatedFromDataSourceToggle, inputValue?.value]);\r\n\r\n const filterSuggestedTags = async (filterText: string, tagList: ITag[]): Promise => {\r\n let suggestedTags: ITag[] = [];\r\n if (filterText?.trim()) {\r\n try {\r\n const request: IDatasourceQueryDto = {\r\n id: dataSourceItem.id,\r\n name: dataSourceItem.name,\r\n tenantId: dataSourceItem.tenantId,\r\n typeId: dataSourceItem.type.id,\r\n typeName: dataSourceItem.type.name,\r\n queryParams: [{ name: boundedField, value: filterText }],\r\n returnOnlyQueriedProperties: true,\r\n allowCache: dataSourceItem.allowCache\r\n };\r\n const result = await dataSourceService.Search(request);\r\n if (result.length > 0) {\r\n const boundFieldProperty: string = Object.keys(result[0]).find(key => key.toLowerCase().trim() === boundedField.toLowerCase().trim());\r\n if (boundFieldProperty) {\r\n suggestedTags = result\r\n .map(resultRow => {\r\n const propertyValue = resultRow[boundFieldProperty]?.trim();\r\n return {\r\n name: propertyValue,\r\n key: propertyValue\r\n }\r\n })\r\n .filter((tag, index, tags) => {\r\n const tagName: string = tag.name.toLowerCase();\r\n return tagName?.length > 0\r\n && tagName.indexOf(filterText.trim().toLowerCase()) !== -1\r\n && tags.findIndex(t => (t.name === tag.name)) === index\r\n && !listContainsTagList(tag, tagList)\r\n });\r\n }\r\n }\r\n } catch (error) {\r\n logger(error, \"datasourceTagPicker.tsx (filterSuggestedTags)\");\r\n }\r\n }\r\n return sortTerms(filterText, suggestedTags);\r\n };\r\n\r\n const closePanel = () => {\r\n setIsOpen(false);\r\n };\r\n\r\n const updateInputValue = (newValue: string) => {\r\n updateInputValidationStatus(inputValidator.validate([newValue]));\r\n updateSearch(newValue);\r\n };\r\n\r\n const updateSearchInputs = (index: number, value: string) => {\r\n dataSourceHelper.updateSearchInputs(index, value, searchInputs, setSearchInputs);\r\n };\r\n\r\n const openPanel = async () => {\r\n setIsOpen(true);\r\n };\r\n\r\n const updateSearch = (newValue: string) => {\r\n const index = searchInputs.findIndex(item => item.name?.trim().toLowerCase() === boundedField?.trim().toLowerCase());\r\n updateSearchInputs(index, newValue);\r\n };\r\n\r\n const onChangeHandle = (tags: ITag[]): void => {\r\n setSelectedTags(tags);\r\n // updateSearch(tags.map(tag => tag.key).join(', ') as string);\r\n updateSearch(tags?.length === 1 ? tags[0].key as string : \"\");\r\n updateInputValidationStatus(inputValidator.validate(tags.map(tag => tag.key).join(', ')));\r\n };\r\n\r\n const pickerSuggestionsProps: IBasePickerSuggestionsProps = {\r\n suggestionsHeaderText: languageStrings.Suggestions,\r\n noResultsFoundText: languageStrings.NoResultsFound,\r\n };\r\n\r\n const input = (\r\n <>\r\n \r\n \r\n \r\n );\r\n\r\n const stackTokens: IStackTokens = {\r\n childrenGap: 5\r\n };\r\n\r\n return (\r\n <>\r\n \r\n {input}\r\n {inputValue?.xml?.ReadOnly !== SharePointMetadataBooleans.true && \r\n {isLoading\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\nexport const DatasourceTagPicker = connect(mapStateToProps, null)(UnconnectedDatasourceTagPicker);\r\n","import * as React from \"react\";\r\nimport { InputProps } from \"../../interfaces/props/InputProps\";\r\nimport { TooltipHost, Stack, IStackTokens, TagPicker, ITag, IBasePickerSuggestionsProps, Label, Spinner, SpinnerSize, FontIcon } from \"@fluentui/react\";\r\nimport { DatasourceService } from \"../../services/DatasourceService\";\r\nimport { connect } from \"react-redux\";\r\nimport { RootState } from \"../../redux\";\r\nimport { DataSourcePanel } from \"./datasourcePanel\";\r\nimport { INameValuePairIndex } from \"../../interfaces/INameValuePairIndex\";\r\nimport { DatasourceHelper } from \"../helpers/dataSourceHelper\";\r\nimport { LanguageContext } from \"../../../../utilities/LocalizationModule\";\r\nimport { logger } from \"../../../../utilities/logger\";\r\nimport { IDatasourceQueryDto } from \"../../interfaces/IDatasourceQueryDto\";\r\nimport { setDatasourceValues } from \"../../redux/modules/datasource\";\r\nimport { SharePointMetadataBooleans } from \"../../config/sharepointConstants\";\r\nimport { CMAddDatasourceItemPanel } from \"../../../../contentManager/Panels/CMAddDatasourceItemPanel\";\r\nimport { sortTerms } from \"../helpers/tagHelper\";\r\nimport { refrehOptionsRequest } from \"../../config/datasourceConstants\";\r\n\r\nconst stackTokens: IStackTokens = {\r\n childrenGap: 5\r\n};\r\n\r\nconst listContainsTagList = (tag: ITag, tagList?: ITag[]) => {\r\n if (!tagList || !tagList.length || tagList.length === 0) {\r\n return false;\r\n }\r\n return tagList.some(compareTag => compareTag.key === tag.key);\r\n};\r\n\r\nconst getTextFromItem = (item: ITag) => item.name;\r\n\r\nconst mapDispatchToProps = {\r\n setDatasourceValues,\r\n};\r\n\r\nconst mapStateToProps = (state: RootState) => {\r\n return {\r\n datasourceItems: state.tenantInfo.datasources,\r\n currentDirectory: state.workingDirectories?.workingDirectories?.length > 0 ? state.workingDirectories.workingDirectories[state.workingDirectories.workingDirectories.length - 1] : null\r\n };\r\n};\r\n\r\ntype reduxDispatch = typeof mapDispatchToProps;\r\ntype ReduxProps = ReturnType;\r\n\r\ninterface DatasourceTextTagPickerProps extends InputProps, reduxDispatch, ReduxProps { }\r\n\r\nexport const UnconnectedDatasourceTextTagPicker: React.FunctionComponent = ({\r\n displayName,\r\n isRequired,\r\n inputValue,\r\n inputValidator,\r\n updateInputValidationStatus,\r\n error,\r\n datasourceItems,\r\n setDatasourceValues,\r\n currentDirectory\r\n}: DatasourceTextTagPickerProps) => {\r\n const languageStrings = React.useContext(LanguageContext);\r\n const [isOpen, setIsOpen] = React.useState(false);\r\n const [searchInputs, setSearchInputs] = React.useState([]);\r\n const [boundedField, setBoundedField] = React.useState(\"\");\r\n const [boundName] = React.useState(inputValue?.xml?.ContentTypeInputName ?? displayName);\r\n const dataSourceService = new DatasourceService();\r\n const dataSourceHelper = new DatasourceHelper(dataSourceService);\r\n const [dataSourceItem] = React.useState(\r\n dataSourceHelper.getInputDataSource(datasourceItems, boundName, [currentDirectory?.siteDisplayName ?? \"\"], [currentDirectory?.DocumentLibrary ?? \"\"])\r\n );\r\n const [selectedTags, setSelectedTags] = React.useState([]); //selected tags\r\n const [isLoading, setIsLoading] = React.useState(false);\r\n const [enableAutoFillRelatedFields, setEnableAutoFillRelatedFields] = React.useState(false);\r\n const [isAddDatasourceItemPanelOpen, setIsAddDatasourceItemPanelOpen] = React.useState(false);\r\n const [isMasterDatasource] = React.useState(dataSourceItem && boundName && dataSourceItem?.boundFields.find(item => item.name?.split(\",\").some(name => name.trim().toLowerCase() === boundName.trim().toLowerCase()))?.isMaster);\r\n\r\n React.useEffect(() => {\r\n const setupAsyncWrapper = async () => {\r\n setIsLoading(true);\r\n try {\r\n const result = await dataSourceHelper.getSearchStructure(dataSourceItem);\r\n if (Array.isArray(result)) {\r\n if (result.length > 1) setEnableAutoFillRelatedFields(true);\r\n setSearchInputs(result.map((item, index) => ({ name: item, value: null, index: index })));\r\n }\r\n const boundedFieldName = dataSourceHelper.getBoundedField(dataSourceItem, boundName);\r\n setBoundedField(boundedFieldName ?? \"\");\r\n\r\n if (inputValue?.value && boundedFieldName && isMasterDatasource) {\r\n getRelatedDatasourceValues(inputValue.value, boundedFieldName, false, true);\r\n }\r\n } catch (error) {\r\n logger(error, \"datasourceTextTagPicker.tsx (useEffect 1)\");\r\n }\r\n setIsLoading(false);\r\n };\r\n setupAsyncWrapper();\r\n }, []);\r\n\r\n const isFirstRun = React.useRef(true);\r\n React.useEffect(() => {\r\n try {\r\n const newSelectedTag: ITag = inputValue?.value\r\n ? {\r\n name: inputValue.value as string,\r\n key: inputValue.value as string,\r\n }\r\n : null;\r\n\r\n setSelectedTags(newSelectedTag ? [newSelectedTag] : []);\r\n\r\n if (isFirstRun.current) {\r\n isFirstRun.current = false;\r\n return;\r\n }\r\n\r\n updateSearch(newSelectedTag?.key as string ?? \"\");\r\n updateInputValidationStatus(inputValidator.validate(inputValue?.value));\r\n\r\n if (inputValue?.value && boundedField && isMasterDatasource) {\r\n getRelatedDatasourceValues(inputValue.value, boundedField, true);\r\n }\r\n } catch (e) {\r\n logger(e, \"datasourceTextTagPicker.tsx (useEffect 2)\");\r\n }\r\n }, [inputValue?.updatedFromDataSourceToggle, inputValue?.value]);\r\n\r\n const filterSuggestedTags = async (filterText: string, tagList: ITag[]): Promise => {\r\n let suggestedTags: ITag[] = [];\r\n if (filterText?.trim()) {\r\n try {\r\n const request: IDatasourceQueryDto = {\r\n id: dataSourceItem.id,\r\n name: dataSourceItem.name,\r\n tenantId: dataSourceItem.tenantId,\r\n typeId: dataSourceItem.type.id,\r\n typeName: dataSourceItem.type.name,\r\n queryParams: [{ name: boundedField, value: filterText }],\r\n returnOnlyQueriedProperties: true,\r\n allowCache: dataSourceItem.allowCache\r\n };\r\n const result = await dataSourceService.Search(request);\r\n if (result.length > 0) {\r\n const boundFieldProperty: string = Object.keys(result[0]).find(key => key.toLowerCase().trim() === boundedField.toLowerCase().trim());\r\n if (boundFieldProperty) {\r\n suggestedTags = result\r\n .map(resultRow => {\r\n const propertyValue = resultRow[boundFieldProperty]?.trim();\r\n return {\r\n name: propertyValue,\r\n key: propertyValue\r\n }\r\n })\r\n .filter((tag, index, tags) => {\r\n const tagName: string = tag.name.toLowerCase();\r\n return tagName?.length > 0\r\n && tagName.indexOf(filterText.trim().toLowerCase()) !== -1\r\n && tags.findIndex(t => (t.name === tag.name)) === index\r\n && !listContainsTagList(tag, tagList)\r\n });\r\n }\r\n } else {\r\n if (dataSourceItem.allowAdd) {\r\n suggestedTags.push({\r\n name: \"Add new item\",\r\n key: \"addNewItem\"\r\n })\r\n }\r\n }\r\n } catch (error) {\r\n logger(error, \"datasourceTextTagPicker.tsx (filterSuggestedTags)\");\r\n }\r\n }\r\n return sortTerms(filterText, suggestedTags);\r\n };\r\n\r\n const closePanel = () => {\r\n setIsOpen(false);\r\n };\r\n\r\n const updateInputValue = (newValue: string) => {\r\n updateInputValidationStatus(inputValidator.validate(newValue));\r\n updateSearch(newValue);\r\n };\r\n\r\n const updateSearchInputs = (index: number, value: string) => {\r\n dataSourceHelper.updateSearchInputs(index, value, searchInputs, setSearchInputs);\r\n };\r\n\r\n const openPanel = async () => {\r\n updateSearch(inputValue?.value);\r\n setIsOpen(true);\r\n };\r\n\r\n const updateSearch = (newValue: string) => {\r\n const index = searchInputs.findIndex(item => item.name?.trim().toLowerCase() === boundedField?.trim().toLowerCase());\r\n updateSearchInputs(index, newValue);\r\n };\r\n\r\n const onChangeHandle = (tags: ITag[]): void => {\r\n const searchValue = tags?.length === 1 ? tags[0].key as string : \"\";\r\n setSelectedTags(tags);\r\n updateSearch(searchValue);\r\n updateInputValidationStatus(inputValidator.validate(searchValue));\r\n if (enableAutoFillRelatedFields) {\r\n if (isMasterDatasource && selectedTags?.length > 0) { // Request a reset of associated datasources if value is cleared\r\n resetRelatedDatasourceValues();\r\n }\r\n else {\r\n getRelatedDatasourceValues(searchValue, boundedField, true);\r\n }\r\n }\r\n };\r\n\r\n const resetRelatedDatasourceValues = async () => {\r\n const result = await dataSourceHelper.getSearchStructure(dataSourceItem);\r\n if (Array.isArray(result)) {\r\n let resetObject = {};\r\n result.forEach(resultRow => {\r\n resetObject[resultRow] = refrehOptionsRequest;\r\n });\r\n setDatasourceValues(resetObject);\r\n }\r\n }\r\n\r\n const getRelatedDatasourceValues = async (searchValue: string, boundedField: string, isStrict: boolean, initialLoad?: boolean) => {\r\n if (searchValue?.trim()) {\r\n try {\r\n const request: IDatasourceQueryDto = {\r\n id: dataSourceItem.id,\r\n name: dataSourceItem.name,\r\n tenantId: dataSourceItem.tenantId,\r\n typeId: dataSourceItem.type.id,\r\n typeName: dataSourceItem.type.name,\r\n queryParams: [{ name: boundedField, value: searchValue }],\r\n returnOnlyQueriedProperties: false,\r\n isStrict: isStrict,\r\n allowCache: dataSourceItem.allowCache\r\n };\r\n\r\n const result = await dataSourceService.Search(request);\r\n if (result.length > 0) {\r\n let resultItem: any = result[0];\r\n const propertyKeys = resultItem && Object.keys(result[0]); //keys of the data source, not the sharepoint columns\r\n if (propertyKeys) {\r\n // let boundObject = {};\r\n // let masterKey: string;\r\n // propertyKeys\r\n // .forEach((key) => {\r\n // if (resultItem[key]) {\r\n // const boundField = dataSourceItem?.boundFields?.find(field => {\r\n // return field?.datasourceField.toLowerCase().trim() == key.toLowerCase().trim()\r\n // }); //check if any of the data source fields have a mapping.\r\n // if (boundField) { //if a mapping exists\r\n // if (!masterKey && boundField.isMaster) { // Only consider first master field, if any\r\n // masterKey = key;\r\n // }\r\n\r\n // boundField.name.split(\",\")\r\n // .map(name => name.toLowerCase().trim())\r\n // .filter(name => name.toLowerCase().trim() !== boundName.toLowerCase().trim())\r\n // .forEach(name => {\r\n // boundObject[name] = resultItem[key];\r\n // });\r\n // } else {\r\n // boundObject[key] = resultItem[key];\r\n // }\r\n // }\r\n // });\r\n\r\n // if (result.length > 1) {\r\n // if (!masterKey) return;\r\n\r\n // // Extract distinct values from master property\r\n // const uniqueValues = result\r\n // .map(item => item[masterKey])\r\n // .filter((value, index, self) => self.indexOf(value) === index);\r\n\r\n // if (uniqueValues?.length > 1) return;\r\n // }\r\n // setDatasourceValues(boundObject); //redux.\r\n const options: any[] = [];\r\n result.forEach(resultRow => {\r\n let boundObject = {};\r\n propertyKeys\r\n .forEach((key) => {\r\n if (resultRow[key]) {\r\n const boundField = dataSourceItem?.boundFields?.find(field => {\r\n return field?.datasourceField.toLowerCase().trim() == key.toLowerCase().trim()\r\n });\r\n if (boundField) {\r\n const names = boundField.name.split(\",\").map(name => name.toLowerCase().trim());\r\n names\r\n .filter(name => name.toLowerCase().trim() !== boundName.toLowerCase().trim())\r\n .forEach(name => {\r\n boundObject[name] = resultRow[key];\r\n })\r\n } else {\r\n boundObject[key] = resultRow[key];\r\n }\r\n }\r\n });\r\n options.push(boundObject);\r\n });\r\n setDatasourceValues(options, initialLoad);\r\n }\r\n }\r\n } catch (error) {\r\n logger(error, \"datasourceTextTagPicker.tsx (getRelatedDatasourceValues)\");\r\n }\r\n }\r\n }\r\n\r\n const pickerSuggestionsProps: IBasePickerSuggestionsProps = {\r\n suggestionsHeaderText: languageStrings.Suggestions,\r\n //noResultsFoundText: showLink ? \"No results found, add a new item?\" : languageStrings.NoResultsFound\r\n };\r\n\r\n const onItemSelected = (item) => {\r\n if (item && item.key === 'addNewItem') {\r\n setIsAddDatasourceItemPanelOpen(true);\r\n return null; // return null to prevent adding it to the selected items.\r\n }\r\n return item;\r\n };\r\n\r\n const input = (\r\n <>\r\n \r\n \r\n \r\n );\r\n\r\n return (\r\n <>\r\n \r\n {input}\r\n {inputValue?.xml?.ReadOnly !== SharePointMetadataBooleans.true && \r\n {isLoading\r\n ? \r\n :
\r\n \r\n \r\n \r\n
}\r\n
}\r\n
\r\n \r\n {isAddDatasourceItemPanelOpen &&\r\n setIsAddDatasourceItemPanelOpen(false)}\r\n displayName={dataSourceItem?.name}\r\n dataSourceHelper={dataSourceHelper}\r\n dataSourceItem={dataSourceItem}\r\n />}\r\n \r\n\r\n );\r\n};\r\n\r\nexport const DatasourceTextTagPicker = connect(mapStateToProps, mapDispatchToProps)(UnconnectedDatasourceTextTagPicker);\r\n\r\n","import * as React from \"react\";\r\nimport { DayPickerStrings, firstDayOfWeek } from \"../../config/dateSettings\";\r\nimport { InputProps } from \"../../interfaces/props/InputProps\";\r\n// import * as lcid from \"lcid\";\r\nimport * as lcid from \"../../../../utilities/lcid/lcid\";\r\nimport { logger } from \"../../../../utilities/logger\";\r\nimport { LanguageContext } from \"../../../../utilities/LocalizationModule\";\r\nimport { clearButtonClass } from \"../../config/controlStyles\";\r\nimport { DatePicker, IButtonProps, IButtonStyles, IconButton, IDatePickerStyles, IIconProps, ITextFieldStyles } from \"@fluentui/react\";\r\nimport { SharePointMetadataBooleans } from \"../../config/sharepointConstants\";\r\nimport { DateService } from \"../../services/dateService\";\r\n\r\nconst datePickerStyles: Partial = { icon: { left: \"4px\", right: \"unset\" } };\r\nconst textFieldStyles: Partial = { suffix: { padding: \"0 4px\" }, field: { paddingLeft: \"34px\" } };\r\nconst iconButtonStyles: Partial = { root: { height: 'auto' }, icon: { fontSize: '12px' } };\r\nconst iconButtonProps: IIconProps = { iconName: 'Clear' };\r\nconst clearButtonProps: IButtonProps = { ariaLabel: 'Clear text' };\r\n\r\nexport const DateOnly: React.FunctionComponent = ({\r\n displayName,\r\n isRequired,\r\n inputValue,\r\n error,\r\n inputValidator,\r\n updateInputValidationStatus,\r\n regionalSetting\r\n}: InputProps) => {\r\n const [dateFormat] = React.useState(new Intl.DateTimeFormat(lcid.from(regionalSetting?.CollationLCID).replace(\"_\", \"-\")));\r\n const languageStrings = React.useContext(LanguageContext);\r\n const isFirstRun = React.useRef(true);\r\n\r\n React.useEffect(() => {\r\n try {\r\n if (isFirstRun.current) {\r\n isFirstRun.current = false;\r\n return;\r\n }\r\n updateInputValidationStatus(inputValidator.validate(inputValue?.value));\r\n } catch (e) {\r\n logger(e, \"dateOnly.tsx (useEffect)\")\r\n }\r\n }, [inputValue?.updatedFromDataSourceToggle]);\r\n\r\n const onSelectDate = (date: Date | null | undefined): void => {\r\n updateInputValidationStatus(inputValidator.validate(date));\r\n };\r\n\r\n const onFormatDate = React.useCallback((date?: Date): string => {\r\n return !date || date?.getTime() !== date?.getTime() ? '' : dateFormat.format(date);\r\n }, [dateFormat]);\r\n\r\n const onClearClick = (ev: React.MouseEvent) => {\r\n if (!ev.defaultPrevented) {\r\n onSelectDate(undefined);\r\n ev.stopPropagation();\r\n ev.preventDefault();\r\n }\r\n };\r\n\r\n return (\r\n {\r\n return (\r\n
\r\n \r\n
)\r\n },\r\n styles: textFieldStyles\r\n }}\r\n styles={datePickerStyles}\r\n />\r\n );\r\n};\r\n\r\nexport default React.memo(DateOnly);\r\n","import * as React from \"react\";\r\nimport { IconButton, DatePicker, Dropdown, IDropdownOption, ResponsiveMode } from \"@fluentui/react\";\r\nimport { DayPickerStrings, firstDayOfWeek } from \"../../config/dateSettings\";\r\nimport { DateService } from \"../../services/dateService\";\r\nimport { InputProps } from \"../../interfaces/props/InputProps\";\r\n// import * as lcid from \"lcid\";\r\nimport * as lcid from \"../../../../utilities/lcid/lcid\";\r\nimport { logger } from \"../../../../utilities/logger\";\r\nimport { LanguageContext } from \"../../../../utilities/LocalizationModule\";\r\nimport { clearButtonClass } from \"../../config/controlStyles\";\r\nimport dayjs from \"dayjs\";\r\nimport { SharePointMetadataBooleans } from \"../../config/sharepointConstants\";\r\nimport { clearButtonProps, datePickerStyles, iconButtonProps, iconButtonStyles, textFieldStyles } from \"../../styles/datePickerStyles\";\r\n\r\nexport const DateTime: React.FunctionComponent = ({\r\n displayName,\r\n isRequired,\r\n inputValue,\r\n error,\r\n updateInputValidationStatus,\r\n inputValidator,\r\n regionalSetting\r\n}: InputProps) => {\r\n const languageStrings = React.useContext(LanguageContext);\r\n const [timeOptions] = React.useState(DateService.getHours());\r\n const [time, setTime] = React.useState();\r\n const [dateFormat] = React.useState(new Intl.DateTimeFormat(lcid.from(regionalSetting?.CollationLCID).replace(\"_\", \"-\")));\r\n\r\n const isFirstRun = React.useRef(true);\r\n React.useEffect(() => {\r\n try {\r\n if (inputValue?.value) {\r\n let selectedDate = dayjs(inputValue?.value);\r\n if (selectedDate) {\r\n const hours = selectedDate?.hour();\r\n const minutes = selectedDate?.minute();\r\n setTime(`${hours}:${minutes == 0 ? \"00\" : minutes}`);\r\n }\r\n }\r\n } catch (e) {\r\n logger(e, \"dateTime.tsx (useEffect(inputValue?.value))\")\r\n }\r\n }, [inputValue?.value]);\r\n\r\n React.useEffect(() => {\r\n try {\r\n if (isFirstRun.current) {\r\n isFirstRun.current = false;\r\n return;\r\n }\r\n updateInputValidationStatus(inputValidator.validate(inputValue?.value));\r\n } catch (e) {\r\n logger(e, \"dateTime.tsx (useEffect)\")\r\n }\r\n }, [inputValue?.updatedFromDataSourceToggle]);\r\n\r\n const setTimePart = (date: Date, selectedTime: string = null) => {\r\n if (date) {\r\n const [hour, minutes] = !selectedTime ? time.split(':') : selectedTime.split(':');\r\n date.setHours(+hour, +minutes, 0);\r\n }\r\n }\r\n\r\n const onDropdownChange = (event: React.FormEvent, item: IDropdownOption): void => {\r\n setTime(item.key);\r\n\r\n if (inputValue?.value) {\r\n let selectedDate = new Date(inputValue.value);\r\n if (selectedDate) {\r\n setTimePart(selectedDate, item.key as string);\r\n }\r\n updateInputValidationStatus(inputValidator.validate(selectedDate));\r\n }\r\n };\r\n\r\n const onSelectDate = (date: Date | null | undefined): void => {\r\n if (!date) {\r\n setTime(undefined);\r\n }\r\n else if (time) {\r\n setTimePart(date);\r\n }\r\n\r\n updateInputValidationStatus(inputValidator.validate(date));\r\n };\r\n\r\n const onFormatDate = React.useCallback((date?: Date): string => {\r\n return !date || date?.getTime() !== date?.getTime() ? '' : dateFormat.format(date);\r\n }, [dateFormat]);\r\n\r\n const onClearClick = (ev: React.MouseEvent) => {\r\n if (!ev.defaultPrevented) {\r\n onSelectDate(undefined);\r\n ev.stopPropagation();\r\n ev.preventDefault();\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n {\r\n return (\r\n
\r\n \r\n
)\r\n },\r\n styles: textFieldStyles\r\n }}\r\n styles={datePickerStyles}\r\n />\r\n
\r\n \r\n \r\n );\r\n};\r\n\r\nexport default React.memo(DateTime);","import * as React from 'react';\r\nimport './ErrorMessage.css';\r\n//import { Icon } from '@fluentui/react-react/lib/Icon';\r\nimport { Icon } from \"@fluentui/react\";\r\n\r\nexport interface IFieldErrorMessageProps {\r\n errorMessage: string;\r\n className?: string;\r\n}\r\n\r\nexport default class FieldErrorMessage extends React.Component {\r\n public render(): JSX.Element {\r\n const {\r\n errorMessage,\r\n className\r\n } = this.props;\r\n if (errorMessage !== undefined && errorMessage !== null && errorMessage !== '') {\r\n return (\r\n
\r\n

\r\n \r\n {errorMessage}\r\n

\r\n
\r\n );\r\n } else {\r\n return null;\r\n }\r\n }\r\n}\r\n","import * as React from \"react\";\r\nimport { TextField } from \"@fluentui/react/lib/TextField\";\r\nimport { InputProps } from \"../../interfaces/props/InputProps\";\r\nimport { logger } from \"../../../../utilities/logger\";\r\nimport { SharePointMetadataBooleans } from \"../../config/sharepointConstants\";\r\n\r\nexport const HyperLink: React.FunctionComponent = ({\r\n displayName,\r\n inputValue,\r\n error,\r\n updateInputValidationStatus,\r\n inputValidator,\r\n isRequired\r\n}: InputProps) => {\r\n\r\n const isFirstRun = React.useRef(true);\r\n React.useEffect(() => {\r\n try {\r\n if (isFirstRun.current) {\r\n isFirstRun.current = false;\r\n return;\r\n }\r\n updateInputValidationStatus(inputValidator.validate(inputValue?.value));\r\n } catch (e) {\r\n logger(e, \"hyperlink.tsx (useEffect)\")\r\n }\r\n }, [inputValue?.updatedFromDataSourceToggle]);\r\n\r\n const handleHyperLinkFieldOnchange = (event: React.FormEvent, newValue: string): void => {\r\n updateInputValidationStatus(inputValidator.validate(newValue));\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n );\r\n};\r\n\r\nexport default HyperLink;\r\n","import * as React from \"react\";\r\n// import { Label } from \"office-ui-fabric-react/lib/Label\";\r\n// import { ComboBox, IComboBoxOption } from \"office-ui-fabric-react/lib/ComboBox\";\r\nimport { ComboBox, IComboBoxOption, Label } from \"@fluentui/react\";\r\nimport { IComboBoxListItemPickerProps, IComboBoxListItemPickerState } from \".\";\r\nimport { ListItemRepository } from '../../../services/dal/ListItemRepository';\r\nimport { LanguageContext } from \"../../../../../utilities/LocalizationModule\";\r\n\r\n\r\nexport class ComboBoxListItemPicker extends React.Component {\r\n private _listItemRepo: ListItemRepository;\r\n public selectedItems: any[];\r\n static contextType = LanguageContext;\r\n\r\n constructor(props: IComboBoxListItemPickerProps) {\r\n super(props);\r\n\r\n // States\r\n this.state = {\r\n noresultsFoundText: !this.props.noResultsFoundText ? this.context.genericNoResultsFoundText : this.props.noResultsFoundText,\r\n showError: false,\r\n errorMessage: \"\",\r\n suggestionsHeaderText: !this.props.suggestionsHeaderText ? this.context.ListItemPickerSelectValue : this.props.suggestionsHeaderText\r\n };\r\n\r\n this._listItemRepo = new ListItemRepository(this.props.webUrl);\r\n\r\n this.selectedItems = [];\r\n }\r\n\r\n public componentDidMount(): void {\r\n this.loadOptions(this.props);\r\n }\r\n\r\n protected async loadOptions(props: IComboBoxListItemPickerProps, isInitialLoad?: boolean): Promise {\r\n const {\r\n filter,\r\n keyColumnInternalName,\r\n listId,\r\n columnInternalName,\r\n webUrl,\r\n itemLimit,\r\n defaultSelectedItems,\r\n onInitialized\r\n } = props;\r\n let query = filter || \"\";\r\n //query += filter;\r\n let keyColumnName = keyColumnInternalName || \"Id\";\r\n let listItems = await this._listItemRepo.getListItemsByFilterClause(query,\r\n listId,\r\n columnInternalName,\r\n keyColumnInternalName,\r\n webUrl,\r\n itemLimit || 100);\r\n\r\n let options = listItems.map(option => {\r\n return {\r\n key: option[keyColumnName],\r\n text: option[columnInternalName || \"Id\"]\r\n };\r\n });\r\n if (defaultSelectedItems) {\r\n //if passed only ids\r\n if (!isNaN(defaultSelectedItems[0])) {\r\n this.selectedItems = options.filter(opt => defaultSelectedItems.indexOf(opt.key) >= 0);\r\n }\r\n else {\r\n this.selectedItems = options.filter(opt => defaultSelectedItems.map(selected => selected[keyColumnName]).indexOf(opt.key) >= 0);\r\n }\r\n }\r\n this.setState({\r\n availableOptions: options\r\n });\r\n if (onInitialized && isInitialLoad !== false) {\r\n onInitialized();\r\n }\r\n }\r\n\r\n public async componentWillReceiveProps(nextProps: IComboBoxListItemPickerProps): Promise {\r\n if (nextProps.listId !== this.props.listId) {\r\n await this.loadOptions(nextProps, false);\r\n this.selectedItems = [];\r\n }\r\n }\r\n\r\n public render(): React.ReactElement {\r\n const { className, disabled } = this.props;\r\n\r\n return (this.state.availableOptions ? (\r\n
\r\n item.key) || []}\r\n className={className}\r\n disabled={disabled} />\r\n\r\n {!!this.state.errorMessage &&\r\n ()}\r\n
) : Loading...\r\n );\r\n }\r\n\r\n private onChanged = (option?: IComboBoxOption, index?: number, value?: string, submitPendingValueEvent?: any): void => {\r\n if (this.props.multiSelect) {\r\n if (option && option.selected) {\r\n this.selectedItems.push({\r\n [this.props.keyColumnInternalName || \"Id\"]: option.key,\r\n [this.props.columnInternalName]: option.text,\r\n selected: option.selected\r\n });\r\n } else {\r\n this.selectedItems = this.selectedItems.filter(o => o[this.props.keyColumnInternalName || \"Id\"] !== option.key);\r\n }\r\n } else {\r\n this.selectedItems.push({\r\n [this.props.keyColumnInternalName || \"Id\"]: option.key,\r\n [this.props.columnInternalName]: option.text\r\n });\r\n\r\n this.selectedItems = this.selectedItems.filter(o => o[this.props.keyColumnInternalName || \"Id\"] === option.key);\r\n }\r\n\r\n this.props.onSelectedItem(this.selectedItems);\r\n }\r\n}\r\n","import * as React from \"react\";\r\nimport SPservice from \"../../../services/SPService\";\r\n// import { TagPicker } from \"office-ui-fabric-react/lib/components/pickers/TagPicker/TagPicker\";\r\n// import { Label } from \"office-ui-fabric-react/lib/Label\";\r\nimport { ITag, Label, TagPicker } from \"@fluentui/react\";\r\nimport { IListItemPickerProps, IListItemPickerState } from \".\";\r\n// import * as _ from 'lodash';\r\nimport { isEqual } from '@microsoft/sp-lodash-subset';\r\nimport { LanguageContext } from \"../../../../../utilities/LocalizationModule\";\r\nimport { logger } from \"../../../../../utilities/logger\";\r\nimport { sortTerms } from \"../../helpers/tagHelper\";\r\n\r\nexport class ListItemPicker extends React.Component {\r\n private _spservice: SPservice;\r\n static contextType = LanguageContext;\r\n\r\n constructor(props: IListItemPickerProps) {\r\n super(props);\r\n\r\n this.state = {\r\n noresultsFoundText: !this.props.noResultsFoundText ? \"No results found\" : this.props.noResultsFoundText,\r\n showError: false,\r\n errorMessage: \"\",\r\n suggestionsHeaderText: !this.props.suggestionsHeaderText ? \"Select value\" : this.props.suggestionsHeaderText,\r\n selectedItems: props.defaultSelectedItems || []\r\n };\r\n\r\n this._spservice = new SPservice();\r\n }\r\n\r\n\r\n public componentWillReceiveProps(nextProps: IListItemPickerProps) {\r\n let newSelectedItems: any[] | undefined;\r\n if (this.props.listId !== nextProps.listId) {\r\n newSelectedItems = [];\r\n }\r\n if (!isEqual(this.props.defaultSelectedItems, nextProps.defaultSelectedItems)) {\r\n newSelectedItems = nextProps.defaultSelectedItems;\r\n }\r\n\r\n this.setState({\r\n selectedItems: newSelectedItems\r\n });\r\n }\r\n\r\n public render(): React.ReactElement {\r\n const { className, disabled, itemLimit, placeholder } = this.props;\r\n const {\r\n suggestionsHeaderText,\r\n noresultsFoundText,\r\n errorMessage,\r\n selectedItems\r\n } = this.state;\r\n\r\n return (\r\n
\r\n \r\n\r\n {!!errorMessage &&\r\n ()}\r\n
\r\n );\r\n }\r\n\r\n private getTextFromItem(item: any): string {\r\n return item.name;\r\n }\r\n\r\n private onItemChanged = (selectedItems: { key: string; name: string }[]): void => {\r\n this.setState({\r\n selectedItems: selectedItems\r\n });\r\n this.props.onSelectedItem(selectedItems);\r\n }\r\n\r\n private onFilterChanged = async (filterText: string, tagList: ITag[]) => {\r\n let resolvedSugestions: ITag[] = await this.loadListItems(filterText);\r\n\r\n const {\r\n selectedItems\r\n } = this.state;\r\n\r\n // Filter out the already retrieved items, so that they cannot be selected again\r\n if (selectedItems && selectedItems.length > 0) {\r\n let filteredSuggestions = [];\r\n for (const suggestion of resolvedSugestions) {\r\n const exists = selectedItems.filter(sItem => sItem.key === suggestion.key);\r\n if (!exists || exists.length === 0) {\r\n filteredSuggestions.push(suggestion);\r\n }\r\n }\r\n resolvedSugestions = filteredSuggestions;\r\n }\r\n\r\n if (resolvedSugestions) {\r\n this.setState({\r\n errorMessage: \"\",\r\n showError: false\r\n });\r\n\r\n return sortTerms(filterText, resolvedSugestions);\r\n } else {\r\n return [];\r\n }\r\n }\r\n\r\n\r\n private loadListItems = async (filterText: string): Promise => {\r\n let { listId, columnInternalName, keyColumnInternalName, webUrl, filter, substringSearch } = this.props;\r\n let arrayItems: ITag[] = [];\r\n let keyColumn: string = keyColumnInternalName || 'Id';\r\n\r\n try {\r\n let listItems = await this._spservice.getListItems(filterText, listId, columnInternalName, keyColumn, webUrl, filter, substringSearch); // JJ - 20200613 - find by substring as an option\r\n // Check if the list had items\r\n if (listItems.length > 0) {\r\n for (const item of listItems) {\r\n arrayItems.push({ key: item[keyColumn], name: item[columnInternalName] });\r\n }\r\n }\r\n return arrayItems;\r\n } catch (error) {\r\n logger(error, \"ListItemPicker.tsx (loadListItems)\");\r\n this.setState({\r\n showError: true,\r\n errorMessage: error.message,\r\n noresultsFoundText: error.message\r\n });\r\n return null;\r\n }\r\n }\r\n}\r\n\r\n","// A file is required to be in the root of the /src directory by the TypeScript compiler\r\nexport * from './IListItemPickerProps';\r\nexport * from './IComboBoxListItemPickerProps';\r\nexport * from './IListItemPickerState';\r\nexport * from './IComboBoxListItemPickerState';\r\nexport * from './ListItemPicker';\r\nexport * from './ComboBoxListItemPicker';\r\n","import * as React from \"react\";\r\nimport { ListItemPicker } from \"./listItemPicker\";\r\nimport { ITag, Label } from \"@fluentui/react\";\r\nimport { ILookupInputProps } from \"../../interfaces/ILookupInputProps\";\r\nimport { LanguageContext } from \"../../../../utilities/LocalizationModule\";\r\nimport { logger } from \"../../../../utilities/logger\";\r\nimport { getListItemsById } from \"../../services/SharePointRestServices\";\r\nimport authModule from \"../../../../utilities/AuthModule\";\r\nimport { SharePointMetadataBooleans } from \"../../config/sharepointConstants\";\r\n\r\nconst LookupMulti: React.FunctionComponent = ({\r\n displayName,\r\n isRequired,\r\n updateInputValidationStatus,\r\n inputValidator,\r\n webUrl,\r\n error,\r\n listId,\r\n itemLimit,\r\n columnInternalName,\r\n inputValue\r\n}: ILookupInputProps) => {\r\n\r\n const languageStrings = React.useContext(LanguageContext);\r\n const [defaultSelectedItems, setDefaultSelectedItems] = React.useState([]);\r\n\r\n React.useEffect(() => {\r\n if (inputValue?.value && Array.isArray(inputValue.value)) {\r\n (async () => {\r\n try {\r\n const listItems: ITag[] = await getListItemsById(await authModule.getSharePointAccessToken(), webUrl, listId, columnInternalName, inputValue.value);\r\n if (listItems?.length > 0) {\r\n setDefaultSelectedItems(listItems);\r\n }\r\n else {\r\n setDefaultSelectedItems([]);\r\n }\r\n } catch (error) {\r\n logger(error, \"lookupMulti.tsx (useEffect)\");\r\n }\r\n })();\r\n } else {\r\n setDefaultSelectedItems([]);\r\n }\r\n }, [inputValue?.value]);\r\n\r\n const isFirstRun = React.useRef(true);\r\n React.useEffect(() => {\r\n try {\r\n if (isFirstRun.current) {\r\n isFirstRun.current = false;\r\n return;\r\n }\r\n updateInputValidationStatus(inputValidator.validate(inputValue?.value));\r\n } catch (e) {\r\n logger(e, \"lookupMulti.tsx (useEffect)\")\r\n }\r\n }, [inputValue?.updatedFromDataSourceToggle]);\r\n\r\n const onSelectedItem = (data: { key: string; name: string }[]) => {\r\n updateInputValidationStatus(\r\n inputValidator.validate(\r\n data.map(item => item.key)\r\n )\r\n );\r\n }\r\n\r\n // const displayError = () => {\r\n // return error ? (\r\n // <>\r\n // You need to select a value\r\n // \r\n // ) : null;\r\n // };\r\n\r\n const lookupPicker = (\r\n <>\r\n {displayName && }\r\n \r\n \r\n );\r\n\r\n return (\r\n <>\r\n {lookupPicker}\r\n {/* {displayError()} */}\r\n \r\n );\r\n};\r\n\r\nexport default LookupMulti;","import * as React from \"react\";\r\nimport { TextField } from \"@fluentui/react/lib/TextField\";\r\nimport { InputProps } from \"../../interfaces/props/InputProps\";\r\nimport { logger } from \"../../../../utilities/logger\";\r\nimport { SharePointMetadataBooleans } from \"../../config/sharepointConstants\";\r\n\r\nexport const Multiline: React.FunctionComponent = ({\r\n displayName,\r\n isRequired,\r\n inputValue,\r\n updateInputValidationStatus,\r\n inputValidator\r\n}: InputProps) => {\r\n\r\n const isFirstRun = React.useRef(true);\r\n React.useEffect(() => {\r\n try {\r\n if (isFirstRun.current) {\r\n isFirstRun.current = false;\r\n return;\r\n }\r\n updateInputValidationStatus(inputValidator.validate(inputValue?.value));\r\n } catch (e) {\r\n logger(e, \"multiLine.tsx (useEffect)\")\r\n }\r\n }, [inputValue?.updatedFromDataSourceToggle]);\r\n\r\n const handleMultiLineFieldOnchange = (event: React.FormEvent, newValue: string): void => {\r\n updateInputValidationStatus(inputValidator.validate(newValue));\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n );\r\n};\r\n\r\nexport default Multiline;\r\n","import * as React from \"react\";\r\nimport { TextField } from \"@fluentui/react/lib/TextField\";\r\nimport { InputProps } from \"../../interfaces/props/InputProps\";\r\nimport { RootState } from \"../../redux\";\r\nimport { connect, ConnectedProps } from \"react-redux\";\r\nimport { sharePointInternalFileName, sharePointInternalTitleName } from \"../../config/constants\";\r\nimport { LanguageContext } from \"../../../../utilities/LocalizationModule\";\r\nimport { logger } from \"../../../../utilities/logger\";\r\nimport { setFile, updateFileName } from \"../../redux/modules/file\";\r\nimport { setIsCheckingForDuplicates } from \"../../redux/modules/savingInBackground\";\r\nimport generalModule from \"../../../../utilities/GeneralModule\";\r\nimport { SharePointMetadataBooleans } from \"../../config/sharepointConstants\";\r\nimport { ContentManagerCopyMoveModeEnum } from \"../enums/ContentManagerCopyMoveModeEnum\";\r\nimport { DragAndDropHelper } from \"../../../../utilities/DragAndDropHelper\";\r\nimport { formatNameFieldValue } from \"../../services/FileFolderNameExtensions\";\r\n\r\nconst mapStateToProps = (state: RootState) => {\r\n return {\r\n selectedFiles: !DragAndDropHelper.isDroppedModeActive ? state.files?.files?.filter(item => item.isSelected) : state.files?.files?.filter(item => item.isSelected && item.isFileSystemEntry),\r\n moveTo: state.contentManagerDirectory?.moveTo\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n updateFileName,\r\n setIsCheckingForDuplicates,\r\n setFile\r\n};\r\n\r\nconst connector = connect(mapStateToProps, mapDispatchToProps);\r\ninterface TextInputProps extends InputProps, ConnectedProps { }\r\n\r\nconst NormalTextInput: React.FunctionComponent = ({\r\n displayName,\r\n internalName,\r\n isRequired,\r\n inputValue,\r\n updateInputValidationStatus,\r\n inputValidator,\r\n error,\r\n selectedFiles,\r\n moveTo\r\n}: TextInputProps) => {\r\n const languageStrings = React.useContext(LanguageContext);\r\n const [isNameInput] = React.useState(internalName?.trim().toLowerCase() === sharePointInternalFileName.toLowerCase());\r\n const [isTitleInput] = React.useState(internalName?.trim().toLowerCase() === sharePointInternalTitleName.toLowerCase());\r\n const [selectedIndexes, setSelectedIndexes] = React.useState('');\r\n\r\n React.useEffect(() => {\r\n const indexes = selectedFiles?.map(x => x.index).join(',');\r\n if (selectedIndexes !== indexes) {\r\n setSelectedIndexes(indexes);\r\n }\r\n }, [selectedFiles]);\r\n\r\n React.useEffect(() => {\r\n updateTextInput();\r\n }, [selectedIndexes]);\r\n\r\n const isFirstRun = React.useRef(true);\r\n React.useEffect(() => {\r\n try {\r\n if (isFirstRun.current) {\r\n isFirstRun.current = false;\r\n return;\r\n }\r\n updateInputValidationStatus(inputValidator.validate(inputValue?.value));\r\n } catch (e) {\r\n logger(e, \"normalTextInput.tsx (useEffect 2)\")\r\n }\r\n }, [inputValue?.updatedFromDataSourceToggle]);\r\n\r\n const updateTextInput = () => {\r\n if ((selectedFiles?.length > 1 || moveTo?.mode === ContentManagerCopyMoveModeEnum.CopyEntireFolderEmails) && isTitleInput && !generalModule.getIsFileInfoPanelOpen() && !generalModule.getIsMultiMetaFileUpdatePanelOpen()) {\r\n updateInputValidationStatus(inputValidator.validate(languageStrings.TitleAutoSet));\r\n }\r\n else if (selectedFiles?.length === 1 && isTitleInput && !generalModule.getIsFileInfoPanelOpen()) {\r\n updateInputValidationStatus(inputValidator.validate(selectedFiles[0].name));\r\n return;\r\n }\r\n };\r\n\r\n const handleTextFieldOnchange = (\r\n event: React.FormEvent,\r\n newValue: string\r\n ): void => {\r\n updateInputValidationStatus(inputValidator.validate(!isNameInput ? newValue : formatNameFieldValue(newValue)));\r\n };\r\n\r\n return (\r\n 1 || moveTo?.mode === ContentManagerCopyMoveModeEnum.CopyEntireFolderEmails) && isTitleInput && !generalModule.getIsFileInfoPanelOpen() && !generalModule.getIsMultiMetaFileUpdatePanelOpen()) || inputValue?.xml?.ReadOnly === SharePointMetadataBooleans.true}\r\n label={displayName}\r\n type=\"text\"\r\n value={inputValue?.value ?? \"\"}\r\n onChange={handleTextFieldOnchange}\r\n required={isRequired()}\r\n errorMessage={error}\r\n className=\"xb-sp-input\"\r\n suffix={inputValue?.extention ? `.${inputValue?.extention}` : undefined}\r\n />\r\n );\r\n};\r\n\r\nexport default connector(NormalTextInput);","import * as React from \"react\";\r\nimport { NumberWithErrorProps } from \"../../interfaces/props/NumberWithErrorProps\";\r\nimport { TextField } from \"@fluentui/react\";\r\nimport * as lcid from \"../../../../utilities/lcid/lcid\";\r\nimport { localStringToNumber } from \"../helpers/stringHelper\";\r\nimport { logger } from \"../../../../utilities/logger\";\r\nimport { decimalSteps } from \"../../config/constants\";\r\nimport { inputResult } from \"../helpers/inputResult\";\r\nimport { SharePointMetadataBooleans } from \"../../config/sharepointConstants\";\r\n\r\nexport const Number: React.FunctionComponent = ({\r\n displayName,\r\n isRequired,\r\n inputValue,\r\n min,\r\n max,\r\n error,\r\n regionalSetting,\r\n updateInputValidationStatus,\r\n inputValidator,\r\n decimals\r\n}: NumberWithErrorProps) => {\r\n\r\n const [numberFormatter] = React.useState(new Intl.NumberFormat(lcid.from(regionalSetting?.CollationLCID).replace(\"_\", \"-\"), { maximumFractionDigits: decimals ?? 2 }));\r\n const [isInFocus, setIsInFocus] = React.useState(false);\r\n const [formattedNumberValue, setFormattedNumberValue] = React.useState();\r\n const [numericInputError, setNumericInputError] = React.useState();\r\n\r\n const isFirstRun = React.useRef(true);\r\n\r\n React.useEffect(() => {\r\n try {\r\n setFormattedNumberValue(inputValue?.value?.toString());\r\n } catch (e) {\r\n logger(e, \"number.tsx (useEffect(inputValue?.value))\")\r\n }\r\n }, [inputValue?.value]);\r\n\r\n React.useEffect(() => {\r\n try {\r\n if (isFirstRun.current) {\r\n isFirstRun.current = false;\r\n return;\r\n }\r\n updateInputValidationStatus(inputValidator.validate(inputValue?.value));\r\n } catch (e) {\r\n logger(e, \"number.tsx (useEffect)\")\r\n }\r\n }, [inputValue?.updatedFromDataSourceToggle]);\r\n\r\n const handleNumberChange = (event: any, newValue?: string) => {\r\n // updateInputValidationStatus(inputValidator.validate(newValue));\r\n const validationResult: inputResult = inputValidator.validate(newValue);\r\n if (newValue) {\r\n setNumericInputError(validationResult?.error);\r\n }\r\n updateInputValidationStatus(validationResult);\r\n };\r\n\r\n const onChangeTextField = React.useCallback((event: any, value?: string) => {\r\n return;\r\n }, []);\r\n\r\n const onBlur = (event: any): void => {\r\n const validationResult: inputResult = inputValidator.validate(event.target.value);\r\n setNumericInputError(validationResult?.error);\r\n updateInputValidationStatus(validationResult);\r\n if (event.target.value) {\r\n const numberValue = localStringToNumber(event.target.value);\r\n setFormattedNumberValue(numberFormatter.format(numberValue));\r\n } else {\r\n setFormattedNumberValue(null);\r\n }\r\n setIsInFocus(false);\r\n };\r\n\r\n const onFocus = (event: any): void => {\r\n setIsInFocus(true);\r\n };\r\n\r\n const numberInputField = ();\r\n\r\n const textInputField = (\r\n \r\n );\r\n\r\n return isInFocus ? numberInputField : textInputField;\r\n};\r\n\r\nexport default Number;\r\n","import * as React from \"react\";\r\nimport { IBasePickerSuggestionsProps, Label, IPersonaProps, NormalPeoplePicker, PeoplePickerItemSuggestion, IPeoplePickerItemSuggestionStyles } from \"@fluentui/react\";\r\nimport { getSharePointSiteUsers, getSharePointGroupUsers } from \"../../services/SharePointRestServices\";\r\nimport { IPeoplePickerProps } from \"../../interfaces/props/IPeoplePickerProps\";\r\nimport authModule from \"../../../../utilities/AuthModule\";\r\nimport { SharePointMetadataBooleans } from \"../../config/sharepointConstants\";\r\nimport { validateEmail } from \"../helpers/validateEmail\";\r\n\r\nconst suggestionProps: IBasePickerSuggestionsProps = {\r\n suggestionsHeaderText: \"Suggested People\",\r\n mostRecentlyUsedHeaderText: \"Suggested Contacts\",\r\n noResultsFoundText: \"No results found\",\r\n loadingText: \"Loading\",\r\n showRemoveButtons: true,\r\n suggestionsAvailableAlertText: \"People Picker Suggestions available\",\r\n suggestionsContainerAriaLabel: \"Suggested contacts\"\r\n};\r\n\r\nconst suggestionStyles: Partial = {\r\n personaWrapper: {\r\n width: \"auto\"\r\n }\r\n}\r\n\r\nexport const PeoplePicker: React.FunctionComponent = ({\r\n webUrl,\r\n displayName,\r\n isRequired,\r\n error,\r\n itemLimit,\r\n UserSelectionScope,\r\n updateInputValidationStatus,\r\n inputValidator,\r\n inputValue\r\n}) => {\r\n const [peoplePickerList, setPeoplePickerList] = React.useState([]);\r\n const [initialPickerList, setInitialPickerList] = React.useState([]);\r\n\r\n React.useEffect(() => {\r\n getUsers();\r\n }, []);\r\n\r\n React.useEffect(() => {\r\n if (inputValue?.value?.length > 0 && peoplePickerList?.length > 0) {\r\n const initialUsers: IPersonaProps[] = peoplePickerList.filter(x => inputValue.value.includes(x.id));\r\n if (initialUsers.length > 0) {\r\n setInitialPickerList(initialUsers);\r\n }\r\n else {\r\n setInitialPickerList([]);\r\n }\r\n }\r\n else {\r\n setInitialPickerList([]);\r\n }\r\n }, [inputValue?.value, peoplePickerList]);\r\n\r\n const getUsers = async () => {\r\n const accessToken = await authModule.getSharePointAccessToken();\r\n let noUserGroupAssigned = !UserSelectionScope || UserSelectionScope == \"0\";\r\n if (noUserGroupAssigned) {\r\n let users = await getSharePointSiteUsers(accessToken, webUrl);\r\n if (Array.isArray(users) && users.length > 0) {\r\n setPeoplePickerList(users\r\n .map(item => {\r\n let secondaryText: string;\r\n if (item.Email) {\r\n secondaryText = item.Email;\r\n }\r\n else if (validateEmail(item.UserPrincipalName)) {\r\n secondaryText = item.UserPrincipalName;\r\n }\r\n\r\n return secondaryText\r\n ? { text: item.Title, id: item.Id, secondaryText }\r\n : null;\r\n })\r\n .filter(usr => usr)\r\n );\r\n }\r\n return;\r\n }\r\n\r\n let usergroups = await getSharePointGroupUsers(accessToken, webUrl, UserSelectionScope);\r\n setPeoplePickerList(usergroups.map(item => ({ text: item.Title, id: item.Id })));\r\n };\r\n\r\n const onFilterChanged = (\r\n filterText: string,\r\n currentPersonas: IPersonaProps[]\r\n ): IPersonaProps[] | Promise => {\r\n if (filterText) {\r\n let filteredPersonas: IPersonaProps[] = filterPersonasByText(filterText);\r\n return sortResults(filterText, removeDuplicates(filteredPersonas, currentPersonas));\r\n } else {\r\n return [];\r\n }\r\n };\r\n\r\n const filterPersonasByText = (filterText: string): IPersonaProps[] => {\r\n return peoplePickerList.filter(item => doesTextInclude(item, filterText));\r\n };\r\n\r\n const handleOnChange = (items?: IPersonaProps[]) => {\r\n let personIds = items.map(item => parseInt(item.id));\r\n updateInputValidationStatus(inputValidator.validate(personIds));\r\n };\r\n\r\n const onRenderSuggestionsItem = React.useCallback((personaProps, suggestionsProps) => (\r\n \r\n ), []);\r\n\r\n return (\r\n
\r\n {displayName && }\r\n \r\n {/* {displayError()} */}\r\n
\r\n );\r\n};\r\n\r\nconst sortResults = (input: string, data: IPersonaProps[]): IPersonaProps[] => {\r\n try {\r\n let first: IPersonaProps[] = [];\r\n let others: IPersonaProps[] = [];\r\n for (let i = 0; i < data.length; i++) {\r\n if (data[i].text.indexOf(input) == 0 || data[i].secondaryText.indexOf(input) == 0) {\r\n first.push(data[i]);\r\n } else {\r\n others.push(data[i]);\r\n }\r\n }\r\n first.sort((a, b) => a.text.toLowerCase() < b.text.toLowerCase() ? -1 : 1);\r\n others.sort((a, b) => a.text.toLowerCase() < b.text.toLowerCase() ? -1 : 1);\r\n return (first.concat(others));\r\n } catch (error) {\r\n console.warn(error);\r\n }\r\n return data;\r\n}\r\n\r\nfunction doesTextInclude(item: IPersonaProps, filterText: string): boolean {\r\n // return text.toLowerCase().indexOf(filterText?.trim().toLowerCase()) === 0;\r\n const searchText: string = filterText?.trim().toLowerCase();\r\n return item.text.toLowerCase().indexOf(searchText) !== -1\r\n || item.secondaryText.toLowerCase().indexOf(searchText) !== -1;\r\n}\r\n\r\nfunction removeDuplicates(personas: IPersonaProps[], possibleDupes: IPersonaProps[]) {\r\n return personas.filter(persona => !listContainsPersona(persona, possibleDupes));\r\n}\r\n\r\nfunction listContainsPersona(persona: IPersonaProps, personas: IPersonaProps[]) {\r\n if (!personas || !personas.length || personas.length === 0) {\r\n return false;\r\n }\r\n return personas.filter(item => item.id === persona.id).length > 0;\r\n}\r\n\r\nfunction getTextFromItem(persona: IPersonaProps): string {\r\n return persona.text as string;\r\n}\r\n\r\nexport default PeoplePicker;\r\n","import * as React from \"react\";\r\nimport { TextField } from \"@fluentui/react/lib/TextField\";\r\nimport { NumberProps } from \"../../interfaces/props/NumberProps\";\r\n\r\n// import * as lcid from \"lcid\";\r\nimport { localStringToNumber } from \"../helpers/stringHelper\";\r\nimport * as lcid from \"../../../../utilities/lcid/lcid\";\r\nimport { logger } from \"../../../../utilities/logger\";\r\nimport { inputResult } from \"../helpers/inputResult\";\r\nimport { decimalSteps } from \"../../config/constants\";\r\nimport { SharePointMetadataBooleans } from \"../../config/sharepointConstants\";\r\n\r\nexport const Percentage: React.FunctionComponent = ({\r\n displayName,\r\n isRequired,\r\n inputValue,\r\n min,\r\n max,\r\n updateInputValidationStatus,\r\n inputValidator,\r\n error,\r\n regionalSetting,\r\n decimals\r\n}: NumberProps) => {\r\n const [numberFormatter] = React.useState(new Intl.NumberFormat(lcid.from(regionalSetting?.CollationLCID).replace(\"_\", \"-\"), { maximumFractionDigits: decimals ?? 2 }));\r\n const [isInFocus, setIsInFocus] = React.useState(false);\r\n const [formattedNumberValue, setFormattedNumberValue] = React.useState(!isNaN(Number(inputValue?.value ?? undefined)) ? (inputValue?.value * 100).toString() : null);\r\n const [numericInputError, setNumericInputError] = React.useState();\r\n\r\n const isFirstRun = React.useRef(true);\r\n\r\n React.useEffect(() => {\r\n try {\r\n setFormattedNumberValue(inputValue?.value);\r\n } catch (e) {\r\n logger(e, \"percentage.tsx (useEffect(inputValue?.value))\")\r\n }\r\n }, [inputValue?.value]);\r\n\r\n React.useEffect(() => {\r\n try {\r\n if (isFirstRun.current) {\r\n isFirstRun.current = false;\r\n return;\r\n }\r\n updateInputValidationStatus(inputValidator.validate(inputValue?.value));\r\n } catch (e) {\r\n logger(e, \"percentage.tsx (useEffect)\")\r\n }\r\n }, [inputValue?.updatedFromDataSourceToggle]);\r\n\r\n const onChangeNumberField = (event: any, value?: string) => {\r\n const validationResult: inputResult = inputValidator.validate(value);\r\n if (value) {\r\n setNumericInputError(validationResult?.error);\r\n }\r\n updateInputValidationStatus(validationResult);\r\n };\r\n\r\n const onChangeTextField = React.useCallback((event: any, value?: string) => {\r\n return;\r\n }, []);\r\n\r\n const onBlur = (event: any): void => {\r\n const validationResult: inputResult = inputValidator.validate(event.target.value);\r\n setNumericInputError(validationResult?.error);\r\n updateInputValidationStatus(validationResult);\r\n if (event.target.value) {\r\n const numberValue = localStringToNumber(event.target.value);\r\n setFormattedNumberValue(numberFormatter.format(numberValue));\r\n }\r\n else {\r\n setFormattedNumberValue(null);\r\n }\r\n setIsInFocus(false);\r\n };\r\n\r\n const onFocus = (event: any): void => {\r\n setIsInFocus(true);\r\n };\r\n\r\n const percentageInputField = (\r\n \r\n );\r\n\r\n const textInputField = (\r\n \r\n );\r\n\r\n return isInFocus ? percentageInputField : textInputField;\r\n};\r\n\r\nexport default Percentage;\r\n","import * as React from \"react\";\r\nimport { TextField } from \"@fluentui/react/lib/TextField\";\r\nimport { Image } from \"@fluentui/react/lib/Image\";\r\n\r\nimport { InputProps } from \"../../interfaces/props/InputProps\";\r\nimport { logger } from \"../../../../utilities/logger\";\r\nimport { SharePointMetadataBooleans } from \"../../config/sharepointConstants\";\r\n\r\nexport const PictureHyperLink: React.FunctionComponent = ({\r\n displayName,\r\n isRequired,\r\n inputValue,\r\n updateInputValidationStatus,\r\n inputValidator,\r\n error\r\n}: InputProps) => {\r\n React.useEffect(() => {\r\n setImageUrl(inputValue?.value);\r\n }, []);\r\n\r\n const [imageUrl, setImageUrl] = React.useState(\"\");\r\n\r\n const isFirstRun = React.useRef(true);\r\n React.useEffect(() => {\r\n try {\r\n if (isFirstRun.current) {\r\n isFirstRun.current = false;\r\n return;\r\n }\r\n updateInputValidationStatus(inputValidator.validate(inputValue?.value));\r\n } catch (e) {\r\n logger(e, \"pictureHyperlink.tsx (useEffect)\")\r\n }\r\n }, [inputValue?.updatedFromDataSourceToggle]);\r\n\r\n const handleHyperLinkFieldOnchange = (\r\n event: React.FormEvent,\r\n newValue: string\r\n ): void => {\r\n updateInputValidationStatus(inputValidator.validate(newValue));\r\n };\r\n\r\n const onBlurLinkField = React.useCallback((event: any) => {\r\n setImageUrl(event.target.value);\r\n }, []);\r\n\r\n const image = imageUrl ? (\r\n \r\n ) : null;\r\n\r\n const generateTemplate = () => {\r\n return (\r\n <>\r\n \r\n {image}\r\n \r\n );\r\n };\r\n\r\n return <>{generateTemplate()};\r\n};\r\n\r\nexport default PictureHyperLink;\r\n","import * as React from \"react\";\r\nimport { ITaxonomyPickerProps } from \"../../interfaces/props/ITaxonomyPickerProps\";\r\nimport { LanguageContext } from \"../../../../utilities/LocalizationModule\";\r\nimport { IPickerTerm, IPickerTerms, TaxonomyPicker } from \"./taxonomyPicker\";\r\nimport SPTermStorePickerService from \"../../services/SPTermStorePickerService\";\r\nimport { logger } from \"../../../../utilities/logger\";\r\nimport { isEqual } from \"@microsoft/sp-lodash-subset\";\r\nimport { SharePointMetadataBooleans } from \"../../config/sharepointConstants\";\r\n\r\nconst getTaxonomyFieldTerms = (terms: IPickerTerm[]) => {\r\n return {\r\n terms: terms?.map(term => {\r\n return {\r\n label: term.name,\r\n termGuid: term.key\r\n };\r\n })\r\n };\r\n}\r\n\r\nconst Taxonomy: React.FunctionComponent = ({\r\n displayName,\r\n internalName,\r\n isRequired,\r\n sharepointService,\r\n itemLimit,\r\n inputValue,\r\n updateInputValidationStatus,\r\n inputValidator,\r\n sharepointListId,\r\n regionalSetting,\r\n webUrl\r\n}: ITaxonomyPickerProps) => {\r\n const languageStrings = React.useContext(LanguageContext);\r\n const [termSetId, setTermSetId] = React.useState();\r\n const [defaultTerms, setDefaultTerms] = React.useState([]);\r\n\r\n const prevTermsRef = React.useRef([]);\r\n\r\n const onTaxPickerChange = (terms: IPickerTerms) => {\r\n prevTermsRef.current = terms;\r\n updateInputValidationStatus(\r\n inputValidator.validate(\r\n getTaxonomyFieldTerms(terms)\r\n )\r\n )\r\n };\r\n\r\n const taxonomyProps = {\r\n allowMultipleSelections: itemLimit > 1,\r\n termsetNameOrID: undefined,\r\n panelTitle: languageStrings.SelectTerm,\r\n label: displayName,\r\n required: isRequired(),\r\n context: { webUrl: webUrl, regionalLocalId: Number(regionalSetting?.LocaleId) ? regionalSetting.LocaleId : 1033 },\r\n onChange: onTaxPickerChange,\r\n isTermSetSelectable: false,\r\n useSessionStorage: true,\r\n initialValues: undefined,\r\n validateInput: true\r\n };\r\n\r\n React.useEffect(() => {\r\n (async () => {\r\n const termSetResult: any = await sharepointService.getTaxonomyTermSet(sharepointListId, internalName);\r\n if (termSetResult?.TermSetId) {\r\n setTermSetId(termSetResult.TermSetId);\r\n }\r\n })();\r\n }, []);\r\n\r\n React.useEffect(() => {\r\n if (termSetId) {\r\n (async () => {\r\n try {\r\n let terms: IPickerTerm[];\r\n const termsToFind: string[] = Array.isArray(inputValue?.value)\r\n ? inputValue.value\r\n : Array.isArray(inputValue?.value?.terms)\r\n ? inputValue.value.terms.map(term => term.label)\r\n : null;\r\n\r\n if (termsToFind?.length > 0) {\r\n const termsService = new SPTermStorePickerService({ ...taxonomyProps, termsetNameOrID: termSetId });\r\n terms = await termsService.findTerms(termsToFind, true);\r\n }\r\n\r\n setDefaultTerms(terms?.length > 0 ? terms : []);\r\n } catch (error) {\r\n logger(error, \"taxonomy.tsx (useEffect)\");\r\n }\r\n })();\r\n }\r\n }, [inputValue?.value, termSetId]);\r\n\r\n React.useEffect(() => {\r\n if (!isEqual(defaultTerms, prevTermsRef.current)) {\r\n prevTermsRef.current = defaultTerms;\r\n updateInputValidationStatus(\r\n inputValidator.validate(getTaxonomyFieldTerms(defaultTerms))\r\n );\r\n }\r\n }, [defaultTerms]);\r\n\r\n const getTaxonomyProps = () => {\r\n return { ...taxonomyProps, termsetNameOrID: termSetId, initialValues: defaultTerms, readOnly: inputValue?.xml?.ReadOnly === SharePointMetadataBooleans.true ? true : false };\r\n };\r\n\r\n return (termSetId && ) ?? null;\r\n};\r\n\r\nexport default Taxonomy;","import * as React from 'react';\r\nimport { PrimaryButton, DefaultButton, IconButton, Panel, PanelType, Spinner, SpinnerSize, Autofill, Label, IStackTokens } from \"@fluentui/react\";//'office-ui-fabric-react/lib/Button';\r\n// import { Panel, PanelType } from 'office-ui-fabric-react/lib/Panel';\r\n// import { Spinner, SpinnerSize } from 'office-ui-fabric-react/lib/Spinner';\r\n// import { Autofill } from 'office-ui-fabric-react/lib/components/Autofill/Autofill';\r\n// import { Label } from 'office-ui-fabric-react/lib/Label';\r\nimport TermPicker from './TermPicker';\r\nimport { IPickerTerms, IPickerTerm } from './ITermPicker';\r\nimport { ITaxonomyPickerProps, ITaxonomyPickerState } from './ITaxonomyPicker';\r\nimport SPTermStorePickerService from '../../../services/SPTermStorePickerService';\r\nimport { ITermSet, ITerm } from '../../../interfaces/services/ISPTermStorePickerService';\r\nimport \"./TaxonomyPicker.css\";\r\nimport { sortBy, cloneDeep, isEqual, uniqBy } from '@microsoft/sp-lodash-subset';\r\n//import * as _ from 'lodash';\r\nimport TermParent from './TermParent';\r\nimport FieldErrorMessage from '../errorMessage/ErrorMessage';\r\nimport { initializeIcons } from '@fluentui/react';\r\nimport { LanguageContext } from \"../../../../../utilities/LocalizationModule\";\r\n\r\nexport const COLLAPSED_IMG = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAUCAYAAABSx2cSAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjEwcrIlkgAAAIJJREFUOE/NkjEKwCAMRdu7ewZXJ/EqHkJwE9TBCwR+a6FLUQsRwYBTeD8/35wADnZVmPvY4OOYO3UNbK1FKeUWH+fRtK21hjEG3vuhQBdOKUEpBedcV6ALExFijJBSIufcFBjCVSCEACEEqpNvBmsmT+3MTnvqn/+O4+1vdtv7274APmNjtuXVz6sAAAAASUVORK5CYII='; // /_layouts/15/images/MDNCollapsed.png\r\nexport const EXPANDED_IMG = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAUCAYAAABSx2cSAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjEwcrIlkgAAAFtJREFUOE9j/P//PwPZAKSZXEy2RrCLybV1CGjetWvX/46ODqBLUQOXoJ9BGtXU1MCYJM0wjZGRkaRpRtZIkmZ0jSRpBgUOzJ8wmqwAw5eICIb2qGYSkyfNAgwAasU+UQcFvD8AAAAASUVORK5CYII='; // /_layouts/15/images/MDNExpanded.png\r\nexport const GROUP_IMG = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAC9SURBVDhPY2CgNXh1qEkdiJ8D8X90TNBuJM0V6IpBhoHFgIxebKYTIwYzAMNpxGhGdsFwNoBgNEFjAWsYgOSKiorMgPgbEP/Hgj8AxXpB0Yg1gQAldYuLix8/efLkzn8s4O7du9eAan7iM+DV/v37z546der/jx8/sJkBdhVOA5qbm08ePnwYrOjQoUOkGwDU+AFowLmjR4/idwGukAYaYAkMgxfPnj27h816kDg4DPABoAI/IP6DIxZA4l0AOd9H3QXl5+cAAAAASUVORK5CYII='; // /_layouts/15/Images/EMMGroup.png\r\nexport const TERMSET_IMG = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAACaSURBVDhPrZLRCcAgDERdpZMIjuQA7uWH4CqdxMY0EQtNjKWB0A/77sxF55SKMTalk8a61lqCFqsLiwKac84ZRUUBi7MoYHVmAfjfjzE6vJqZQfie0AcwBQVW8ATi7AR7zGGGNSE6Q2cyLSPIjRswjO7qKhcPDN2hK46w05wZMcEUIG+HrzzcrRsQBIJ5hS8C9fGAPmRwu/9RFxW6L8CM4Ry8AAAAAElFTkSuQmCC'; // /_layouts/15/Images/EMMTermSet.png\r\nexport const TERM_IMG = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAACzSURBVDhPY2AYNKCoqIgTiOcD8X8S8F6wB4Aa1IH4akNDw+mPHz++/E8EuHTp0jmQRSDNCcXFxa/XrVt3gAh9KEpgBvx/9OjRLVI1g9TDDYBp3rlz5//Kysr/IJoYgGEASPPatWsbQDQxAMOAbdu2gZ0FookBcAOePHlyhxgN6GqQY+Hdhg0bDpJqCNgAaDrQAnJuNDY2nvr06dMbYgw6e/bsabgBUEN4yEiJ2wdNViLfIQC3sTh2vtJcswAAAABJRU5ErkJggg==';\r\n\r\ninitializeIcons();\r\n\r\nexport class TaxonomyPicker extends React.Component {\r\n private termsService: SPTermStorePickerService;\r\n private previousValues: IPickerTerms = [];\r\n private invalidTerm: string = null;\r\n private cancel: boolean = true;\r\n static contextType = LanguageContext;\r\n\r\n constructor(props: ITaxonomyPickerProps) {\r\n super(props);\r\n this.state = {\r\n activeNodes: this.props.initialValues || [],\r\n termSetAndTerms: null,\r\n loaded: false,\r\n openPanel: false,\r\n errorMessage: props.errorMessage\r\n };\r\n\r\n this.onOpenPanel = this.onOpenPanel.bind(this);\r\n this.onClosePanel = this.onClosePanel.bind(this);\r\n this.onSave = this.onSave.bind(this);\r\n this.termsChanged = this.termsChanged.bind(this);\r\n this.termsFromPickerChanged = this.termsFromPickerChanged.bind(this);\r\n this.onInputChange = this.onInputChange.bind(this);\r\n this.onBlur = this.onBlur.bind(this);\r\n this.termsService = new SPTermStorePickerService(this.props);\r\n }\r\n\r\n public componentDidMount() {\r\n this.validateTerms();\r\n }\r\n\r\n public componentWillMount(): void {\r\n this.setState({\r\n activeNodes: this.props.initialValues || []\r\n });\r\n }\r\n\r\n public componentWillReceiveProps(nextProps: ITaxonomyPickerProps) {\r\n let newState: ITaxonomyPickerState | undefined;\r\n // Check if the initial values objects are not equal, if that is the case, data can be refreshed\r\n if (!isEqual(this.props.initialValues, nextProps.initialValues)) {\r\n newState = {\r\n activeNodes: nextProps.initialValues || []\r\n };\r\n }\r\n\r\n if (nextProps.errorMessage) {\r\n if (!newState) {\r\n newState = {};\r\n }\r\n\r\n newState.errorMessage = nextProps.errorMessage;\r\n }\r\n\r\n if (newState) {\r\n this.setState(newState);\r\n }\r\n }\r\n\r\n private async validateTerms(): Promise {\r\n const {\r\n hideDeprecatedTags,\r\n hideTagsNotAvailableForTagging,\r\n initialValues,\r\n validateOnLoad,\r\n termsetNameOrID,\r\n useSessionStorage\r\n } = this.props;\r\n\r\n let isValidateOnLoad = validateOnLoad && initialValues && initialValues.length >= 1;\r\n if (isValidateOnLoad) {\r\n\r\n const notFoundTerms: string[] = [];\r\n const notFoundTermIds: string[] = [];\r\n\r\n const termSet = await this.termsService.getAllTerms(termsetNameOrID, hideDeprecatedTags, hideTagsNotAvailableForTagging, useSessionStorage);\r\n const allTerms = termSet.Terms;\r\n\r\n for (let i = 0, len = initialValues.length; i < len; i++) {\r\n const pickerTerm = initialValues[i];\r\n\r\n if (!allTerms.filter(t => t.Id === pickerTerm.key).length) {\r\n notFoundTerms.push(pickerTerm.name);\r\n notFoundTermIds.push(pickerTerm.key);\r\n }\r\n }\r\n\r\n if (notFoundTerms.length) {\r\n this.setState({\r\n internalErrorMessage: this.context.TaxonomyPickerTermsNotFound.replace('{0}', notFoundTerms.join(', ')),\r\n invalidNodeIds: notFoundTermIds\r\n });\r\n }\r\n }\r\n }\r\n\r\n private loadTermStores(): void {\r\n if (this.props.termActions && this.props.termActions.initialize) {\r\n this.props.termActions.initialize(this.termsService);\r\n // this.props.termActions.actions.forEach(x => {\r\n // x.initialize(this.termsService);\r\n // });\r\n }\r\n\r\n this.termsService.getAllTerms(this.props.termsetNameOrID, this.props.hideDeprecatedTags, this.props.hideTagsNotAvailableForTagging, this.props.useSessionStorage).then((response: ITermSet) => {\r\n let termSetAndTerms = response ? response : null;\r\n this.setState({\r\n termSetAndTerms,\r\n loaded: true\r\n });\r\n });\r\n }\r\n\r\n private async updateTaxonomyTree(): Promise {\r\n const termSetAndTerms = await this.termsService.getAllTerms(this.props.termsetNameOrID, this.props.hideDeprecatedTags, this.props.hideTagsNotAvailableForTagging, this.props.useSessionStorage);\r\n\r\n this.setState({\r\n termSetAndTerms\r\n });\r\n }\r\n\r\n private onOpenPanel(): void {\r\n if (this.props.disabled === true) {\r\n return;\r\n }\r\n\r\n this.previousValues = cloneDeep(this.state.activeNodes);\r\n this.cancel = true;\r\n\r\n this.loadTermStores();\r\n\r\n this.setState({\r\n openPanel: true,\r\n loaded: false\r\n });\r\n }\r\n\r\n private onClosePanel(): void {\r\n\r\n this.setState(() => {\r\n const newState: ITaxonomyPickerState = {\r\n openPanel: false,\r\n loaded: false\r\n };\r\n\r\n if (this.cancel) {\r\n newState.activeNodes = this.previousValues;\r\n }\r\n\r\n return newState;\r\n });\r\n }\r\n\r\n private onSave(): void {\r\n this.cancel = false;\r\n this.onClosePanel();\r\n\r\n this.validate(this.state.activeNodes);\r\n }\r\n\r\n private termsChanged(term: ITerm, checked: boolean): void {\r\n\r\n let activeNodes = this.state.activeNodes.slice();\r\n if (typeof term === 'undefined' || term === null) {\r\n return;\r\n }\r\n\r\n const {\r\n allowMultipleSelections,\r\n selectChildrenIfParentSelected\r\n } = this.props;\r\n\r\n const {\r\n termSetAndTerms\r\n } = this.state;\r\n\r\n // Term item to add to the active nodes array\r\n const termItem = {\r\n name: term.Name,\r\n key: term.Id,\r\n path: term.PathOfTerm,\r\n termSet: term.TermSet.Id\r\n };\r\n\r\n //\r\n // checking if we need to process child terms\r\n //\r\n let children: ITerm[] = [];\r\n if (allowMultipleSelections && selectChildrenIfParentSelected) {\r\n if (term.Id === term.TermSet.Id) { // term set selected\r\n children = termSetAndTerms.Terms || [];\r\n }\r\n else {\r\n children = termSetAndTerms.Terms ? termSetAndTerms.Terms.filter(t => {\r\n return t.PathOfTerm.indexOf(`${term.PathOfTerm};`) !== -1;\r\n }) : [];\r\n }\r\n }\r\n\r\n // Check if the term is checked or unchecked\r\n if (checked) {\r\n // Check if it is allowed to select multiple terms\r\n if (allowMultipleSelections) {\r\n // Add the checked term\r\n activeNodes.push(termItem);\r\n\r\n } else {\r\n // Only store the current selected item\r\n activeNodes = [termItem];\r\n }\r\n\r\n if (children.length) {\r\n activeNodes.push(...children.map(c => {\r\n return {\r\n name: c.Name,\r\n key: c.Id,\r\n path: c.PathOfTerm,\r\n termSet: c.TermSet.Id\r\n };\r\n }));\r\n }\r\n\r\n // Filter out the duplicate terms\r\n activeNodes = uniqBy(activeNodes, 'key');\r\n\r\n } else {\r\n // Remove the term from the list of active nodes\r\n activeNodes = activeNodes.filter(item => item.key !== term.Id);\r\n\r\n if (children.length) {\r\n const childIds = children.map(c => c.Id);\r\n activeNodes = activeNodes.filter(item => childIds.indexOf(item.key) === -1);\r\n }\r\n }\r\n // Sort all active nodes\r\n activeNodes = sortBy(activeNodes, 'path');\r\n\r\n if (this.props.onPanelSelectionChange) {\r\n this.props.onPanelSelectionChange(this.state.activeNodes.slice(), activeNodes);\r\n }\r\n\r\n // Update the current state\r\n this.setState({\r\n activeNodes: activeNodes\r\n });\r\n\r\n }\r\n\r\n /**\r\n * Fires When Items Changed in TermPicker\r\n * @param node\r\n */\r\n private termsFromPickerChanged(terms: IPickerTerms) {\r\n this.setState({\r\n activeNodes: terms\r\n });\r\n\r\n this.validate(terms);\r\n }\r\n\r\n /**\r\n * Shows an error message for any invalid input inside taxonomy picker control\r\n */\r\n private validateInputText(): void {\r\n // Show error message, if any unresolved value exists inside taxonomy picker control\r\n if (!!this.invalidTerm) {\r\n // An unresolved value exists\r\n this.setState({\r\n // errorMessage: strings.TaxonomyPickerInvalidTerms.replace('{0}', this.invalidTerm)\r\n errorMessage: this.context.TaxonomyPickerInvalidTerms.replace('{0}', this.invalidTerm)\r\n });\r\n }\r\n else {\r\n // There are no unresolved values\r\n this.setState({\r\n errorMessage: null\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Triggers when input of taxonomy picker control changes\r\n */\r\n private onInputChange(input: string): string {\r\n if (!input) {\r\n const { validateInput } = this.props;\r\n if (!!validateInput) {\r\n // Perform validation of input text, only if taxonomy picker is configured with validateInput={true} property.\r\n this.invalidTerm = null;\r\n this.validateInputText();\r\n }\r\n }\r\n return input;\r\n }\r\n\r\n /**\r\n * Triggers when taxonomy picker control loses focus\r\n */\r\n private onBlur(event: React.FocusEvent): void {\r\n const { validateInput } = this.props;\r\n if (!!validateInput) {\r\n // Perform validation of input text, only if taxonomy picker is configured with validateInput={true} property.\r\n const target: HTMLInputElement = event.target as HTMLInputElement;\r\n const targetValue = !!target ? target.value : null;\r\n if (!!targetValue) {\r\n // this.invalidTerm = targetValue;\r\n const picker = this.state.elRef as unknown as TermPicker;\r\n const autoFill = picker?.state?.elRef?.['input']?.current as Autofill;\r\n if (autoFill) {\r\n autoFill['_value'] = '';\r\n autoFill.setState({ inputValue: '' });\r\n }\r\n }\r\n else {\r\n this.invalidTerm = null;\r\n }\r\n this.validateInputText();\r\n }\r\n }\r\n\r\n /**\r\n * Gets the given node position in the active nodes collection\r\n * @param node\r\n */\r\n private getSelectedNodePosition(node: IPickerTerm): number {\r\n for (let i = 0; i < this.state.activeNodes.length; i++) {\r\n if (node.key === this.state.activeNodes[i].key) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n }\r\n\r\n /**\r\n * TermSet selection handler\r\n * @param termSet\r\n * @param isChecked\r\n */\r\n private termSetSelectedChange = (termSet: ITermSet, isChecked: boolean) => {\r\n const ts: ITermSet = { ...termSet };\r\n // Clean /Guid.../ from the ID\r\n ts.Id = this.termsService.cleanGuid(ts.Id);\r\n // Create a term for the termset\r\n const term: ITerm = {\r\n Name: ts.Name,\r\n Id: ts.Id,\r\n TermSet: ts,\r\n PathOfTerm: \"\",\r\n _ObjectType_: ts._ObjectType_,\r\n _ObjectIdentity_: ts._ObjectIdentity_,\r\n Description: ts.Description,\r\n IsDeprecated: null,\r\n IsAvailableForTagging: null,\r\n IsRoot: null\r\n };\r\n\r\n // Trigger the normal change event\r\n this.termsChanged(term, isChecked);\r\n }\r\n\r\n private validate = async (value: IPickerTerms): Promise => {\r\n //\r\n // checking if there are any invalid nodes left after initial validation\r\n //\r\n if (this.state.invalidNodeIds) {\r\n const changedInvalidNodeIds = this.state.invalidNodeIds.filter(id => {\r\n return !!value.filter(term => term.key === id).length;\r\n });\r\n\r\n let internalErrorMessage = changedInvalidNodeIds.length ? this.state.internalErrorMessage : '';\r\n\r\n this.setState({\r\n invalidNodeIds: changedInvalidNodeIds,\r\n internalErrorMessage: internalErrorMessage\r\n });\r\n }\r\n\r\n if (this.props.errorMessage || !this.props.onGetErrorMessage) { // ignoring all onGetErrorMessage logic\r\n this.validated(value);\r\n return;\r\n }\r\n\r\n const result: string | PromiseLike = this.props.onGetErrorMessage(value || []);\r\n\r\n if (!result) {\r\n this.validated(value);\r\n return;\r\n }\r\n\r\n if (typeof result === 'string') {\r\n if (!result) {\r\n this.validated(value);\r\n }\r\n else {\r\n this.setState({\r\n errorMessage: result\r\n });\r\n }\r\n }\r\n else {\r\n try {\r\n const resolvedResult = await result;\r\n\r\n if (!resolvedResult) {\r\n this.validated(value);\r\n }\r\n else {\r\n this.setState({\r\n errorMessage: resolvedResult\r\n });\r\n }\r\n }\r\n catch (err) {\r\n this.validated(value);\r\n }\r\n }\r\n }\r\n\r\n private validated = (value: IPickerTerms): void => {\r\n this.props.onChange(value);\r\n }\r\n\r\n public render(): JSX.Element {\r\n const {\r\n label,\r\n disabled,\r\n isTermSetSelectable,\r\n allowMultipleSelections,\r\n disabledTermIds,\r\n disableChildrenOfDisabledParents,\r\n placeholder,\r\n panelTitle,\r\n anchorId,\r\n termActions,\r\n required\r\n } = this.props;\r\n\r\n const {\r\n activeNodes,\r\n errorMessage,\r\n internalErrorMessage,\r\n openPanel,\r\n loaded,\r\n termSetAndTerms\r\n } = this.state;\r\n\r\n return (\r\n
\r\n {label && }\r\n
\r\n
\r\n {\r\n if (!this.state.elRef) {\r\n this.setState({ elRef });\r\n }\r\n }}\r\n termPickerHostProps={this.props}\r\n disabled={disabled || this.props.readOnly === true}\r\n value={activeNodes}\r\n isTermSetSelectable={isTermSetSelectable}\r\n onChanged={this.termsFromPickerChanged}\r\n onInputChange={this.onInputChange}\r\n onBlur={this.onBlur}\r\n allowMultipleSelections={allowMultipleSelections}\r\n disabledTermIds={disabledTermIds}\r\n disableChildrenOfDisabledParents={disableChildrenOfDisabledParents}\r\n placeholder={placeholder} />\r\n
\r\n
\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 {\r\n /* Show spinner in the panel while retrieving terms */\r\n loaded === false ? : ''\r\n }\r\n {\r\n loaded === true && termSetAndTerms && (\r\n
\r\n

{termSetAndTerms.Name}

\r\n \r\n
\r\n )\r\n }\r\n \r\n
\r\n );\r\n }\r\n}\r\n","import * as React from 'react';\r\n// import { Checkbox } from 'office-ui-fabric-react/lib/Checkbox';\r\nimport { Checkbox, ICheckboxStyles } from '@fluentui/react';\r\nimport { ITermProps, ITermState } from './ITaxonomyPicker';\r\nimport './TaxonomyPicker.css';\r\nimport TermActionsControl from './termActions/TermActionsControl';\r\nimport { UpdateAction, UpdateType } from './termActions';\r\n\r\n\r\n/**\r\n * Term component\r\n * Renders a selectable term\r\n */\r\nexport default class Term extends React.Component {\r\n\r\n constructor(props: ITermProps) {\r\n super(props);\r\n\r\n // Check if current term is selected\r\n let active = this.props.activeNodes.filter(item => item.key === this.props.term.Id);\r\n\r\n this.state = {\r\n selected: active.length > 0,\r\n termLabel: this.props.term.Name,\r\n hidden: false,\r\n disabled: false\r\n };\r\n\r\n this._handleChange = this._handleChange.bind(this);\r\n }\r\n\r\n /**\r\n * Handle the checkbox change trigger\r\n */\r\n private _handleChange(ev: React.FormEvent, isChecked: boolean) {\r\n this.setState({\r\n selected: isChecked\r\n });\r\n this.props.changedCallback(this.props.term, isChecked);\r\n }\r\n\r\n /**\r\n * Lifecycle event hook when component retrieves new properties\r\n * @param nextProps\r\n * @param nextContext\r\n */\r\n public componentWillReceiveProps?(nextProps: ITermProps, nextContext: any): void {\r\n // If multi-selection is turned off, only a single term can be selected\r\n //if (!this.props.multiSelection) {\r\n let active = nextProps.activeNodes.filter(item => item.key === this.props.term.Id);\r\n this.setState({\r\n selected: active.length > 0,\r\n termLabel: this.state.termLabel\r\n });\r\n //}\r\n }\r\n\r\n /**\r\n * Get the right class name for the term\r\n */\r\n private getClassName() {\r\n if (this.props.term.IsDeprecated) {\r\n return 'termDisable';\r\n }\r\n\r\n if (!this.props.term.IsAvailableForTagging) {\r\n return 'termNoTagging';\r\n }\r\n\r\n return 'termEnabled';\r\n }\r\n\r\n private termActionCallback = (updateAction: UpdateAction | null): void => {\r\n if (!updateAction) {\r\n return;\r\n }\r\n\r\n if (updateAction.updateActionType === UpdateType.updateTermLabel) {\r\n this.setState({\r\n termLabel: updateAction.value as string\r\n });\r\n } else if (updateAction.updateActionType === UpdateType.hideTerm) {\r\n this.setState({\r\n hidden: updateAction.value as boolean\r\n });\r\n } else if (updateAction.updateActionType === UpdateType.disableTerm) {\r\n this.setState({\r\n disabled: updateAction.value as boolean\r\n });\r\n } else if (updateAction.updateActionType === UpdateType.selectTerm) {\r\n // Only select the term when not disabled or hidden\r\n if (!this.state.disabled && !this.state.hidden) {\r\n this._handleChange(null, updateAction.value as boolean);\r\n }\r\n } else {\r\n this.props.updateTaxonomyTree();\r\n }\r\n }\r\n\r\n /**\r\n * Default React render\r\n */\r\n public render(): JSX.Element {\r\n const styleProps: React.CSSProperties = {\r\n marginLeft: `${(this.props.term.PathDepth * 30)}px`\r\n };\r\n const checkBoxStyle: ICheckboxStyles = {\r\n root: {\r\n display: \"inline-flex\"\r\n }\r\n };\r\n\r\n if (this.state.hidden) {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n \r\n
\r\n {\r\n this.props.termActions &&\r\n \r\n }\r\n
\r\n
\r\n\r\n );\r\n }\r\n}\r\n","import * as React from 'react';\r\n// import { Spinner, SpinnerSize } from 'office-ui-fabric-react/lib/Spinner';\r\nimport { ITermParentProps, ITermParentState } from './ITaxonomyPicker';\r\nimport { ITerm } from '../../../interfaces/services/ISPTermStorePickerService';\r\nimport { EXPANDED_IMG, COLLAPSED_IMG, TERMSET_IMG, TERM_IMG } from './TaxonomyPicker';\r\nimport Term from './Term';\r\nimport \"./TaxonomyPicker.css\";\r\n// import { Checkbox } from 'office-ui-fabric-react/lib/Checkbox';\r\nimport { LanguageContext } from \"../../../../../utilities/LocalizationModule\";\r\nimport { Checkbox, Spinner, SpinnerSize } from '@fluentui/react';\r\n\r\nexport default class TermParent extends React.Component {\r\n\r\n private _terms: ITerm[];\r\n private _anchorName: string;\r\n static contextType = LanguageContext\r\n\r\n constructor(props: ITermParentProps) {\r\n super(props);\r\n\r\n this._terms = this.props.termset.Terms;\r\n this.state = {\r\n loaded: true,\r\n expanded: true\r\n };\r\n this._handleClick = this._handleClick.bind(this);\r\n }\r\n\r\n public componentWillMount() {\r\n // fix term depth if anchroid for rendering\r\n if (this.props.anchorId) {\r\n const anchorTerm = this._terms.filter(t => t.Id.toLowerCase() === this.props.anchorId.toLowerCase()).shift();\r\n if (anchorTerm) {\r\n // Append ';' separator, as a suffix to anchor term path.\r\n const anchorTermPath = `${anchorTerm.PathOfTerm};`;\r\n this._anchorName = anchorTerm.Name;\r\n let anchorTerms: ITerm[] = this._terms.filter(t => t.PathOfTerm.substring(0, anchorTermPath.length) === anchorTermPath && t.Id !== anchorTerm.Id);\r\n\r\n anchorTerms = anchorTerms.map(term => {\r\n term.PathDepth = term.PathDepth - anchorTerm.PathDepth;\r\n\r\n return term;\r\n });\r\n\r\n this._terms = anchorTerms;\r\n }\r\n }\r\n }\r\n\r\n\r\n private _handleClick() {\r\n this.setState({\r\n expanded: !this.state.expanded\r\n });\r\n }\r\n\r\n private termSetSelectionChange = (ev: React.FormEvent, isChecked: boolean): void => {\r\n this.props.termSetSelectedChange(this.props.termset, isChecked);\r\n }\r\n\r\n public render(): JSX.Element {\r\n // Specify the inline styling to show or hide the termsets\r\n const styleProps: React.CSSProperties = {\r\n display: this.state.expanded ? 'block' : 'none'\r\n };\r\n\r\n let termElm: JSX.Element =
;\r\n\r\n // Check if the terms have been loaded\r\n if (this.state.loaded) {\r\n if (this._terms.length > 0) {\r\n let disabledPaths = [];\r\n termElm = (\r\n
\r\n {\r\n this._terms.map(term => {\r\n let disabled = false;\r\n if (this.props.disabledTermIds && this.props.disabledTermIds.length > 0) {\r\n // Check if the current term ID exists in the disabled term IDs array\r\n disabled = this.props.disabledTermIds.indexOf(term.Id) !== -1;\r\n if (disabled) {\r\n // Push paths to the disabled list\r\n disabledPaths.push(term.PathOfTerm);\r\n }\r\n }\r\n\r\n if (this.props.disableChildrenOfDisabledParents) {\r\n // Check if parent is disabled\r\n const parentPath = disabledPaths.filter(p => term.PathOfTerm.indexOf(p) !== -1);\r\n disabled = parentPath && parentPath.length > 0;\r\n }\r\n\r\n return ;\r\n })\r\n }\r\n
\r\n );\r\n } else {\r\n termElm =
{this.context.TaxonomyPickerNoTerms}
;\r\n }\r\n } else {\r\n termElm = ;\r\n }\r\n\r\n\r\n return (\r\n
\r\n
\r\n {this.context.TaxonomyPickerExpandTitle}\r\n {\r\n // Show the termset selection box\r\n (!this.props.anchorId && this.props.isTermSetSelectable) &&\r\n a.path === \"\" && a.key === a.termSet).length >= 1}\r\n onChange={this.termSetSelectionChange} />\r\n }\r\n {this.context.TaxonomyPickerMenuTermSet}\r\n {\r\n this.props.anchorId ?\r\n this._anchorName :\r\n this.props.termset.Name\r\n }\r\n
\r\n
\r\n {termElm}\r\n
\r\n
\r\n );\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport { BasePicker, IBasePickerProps, IPickerItemProps, Autofill, Icon } from \"@fluentui/react\"\r\n// import { BasePicker, IBasePickerProps, IPickerItemProps } from 'office-ui-fabric-react/lib/Pickers';\r\n// import { Autofill } from 'office-ui-fabric-react/lib/components/Autofill/Autofill';\r\n// import { Icon } from 'office-ui-fabric-react/lib/Icon';\r\nimport { IPickerTerm, IPickerTerms } from './ITermPicker';\r\nimport SPTermStorePickerService from '../../../services/SPTermStorePickerService';\r\nimport \"./TaxonomyPicker.css\";\r\nimport { ITaxonomyPickerProps } from './ITaxonomyPicker';\r\nimport { ITermSet } from \"../../../interfaces/services/ISPTermStorePickerService\";\r\nimport { LanguageContext } from \"../../../../../utilities/LocalizationModule\";\r\n\r\nexport class TermBasePicker extends BasePicker>\r\n{\r\n\r\n}\r\n\r\nexport interface ITermPickerState {\r\n terms: IPickerTerms;\r\n elRef?: React.LegacyRef & React.LegacyRef;\r\n}\r\n\r\nexport interface ITermPickerProps {\r\n termPickerHostProps: ITaxonomyPickerProps;\r\n disabled: boolean;\r\n value: IPickerTerms;\r\n allowMultipleSelections: boolean;\r\n isTermSetSelectable?: boolean;\r\n disabledTermIds?: string[];\r\n disableChildrenOfDisabledParents?: boolean;\r\n placeholder?: string;\r\n\r\n onChanged: (items: IPickerTerm[]) => void;\r\n onInputChange: (input: string) => string;\r\n onBlur: (ev: React.FocusEvent) => void;\r\n}\r\n\r\nexport default class TermPicker extends React.Component {\r\n private allTerms: ITermSet = null;\r\n private termsService: SPTermStorePickerService;\r\n static contextType = LanguageContext\r\n\r\n constructor(props: any) {\r\n super(props);\r\n this.onRenderItem = this.onRenderItem.bind(this);\r\n this.onRenderSuggestionsItem = this.onRenderSuggestionsItem.bind(this);\r\n this.onFilterChanged = this.onFilterChanged.bind(this);\r\n this.onGetTextFromItem = this.onGetTextFromItem.bind(this);\r\n\r\n this.state = {\r\n terms: this.props.value\r\n };\r\n this.termsService = new SPTermStorePickerService(this.props.termPickerHostProps);\r\n }\r\n\r\n /**\r\n * componentWillReceiveProps method\r\n */\r\n public componentWillReceiveProps(nextProps: ITermPickerProps) {\r\n // check to see if props is different to avoid re-rendering\r\n let newKeys = nextProps.value.map(a => a.key);\r\n let currentKeys = this.state.terms.map(a => a.key);\r\n if (newKeys.sort().join(',') !== currentKeys.sort().join(',')) {\r\n this.setState({ terms: nextProps.value });\r\n }\r\n }\r\n\r\n /**\r\n * Renders the item in the picker\r\n */\r\n protected onRenderItem(term: IPickerItemProps) {\r\n return (\r\n
\r\n {term.item.name}\r\n {\r\n !term.disabled && (\r\n \r\n \r\n \r\n )\r\n }\r\n
\r\n );\r\n }\r\n\r\n /**\r\n * Renders the suggestions in the picker\r\n */\r\n protected onRenderSuggestionsItem(term: IPickerTerm) {\r\n let termParent = term.termSetName;\r\n let termTitle = `${term.name} [${term.termSetName}]`;\r\n if (term.path.indexOf(\";\") !== -1) {\r\n let splitPath = term.path.split(\";\");\r\n termParent = splitPath[splitPath.length - 2];\r\n splitPath.pop();\r\n termTitle = `${term.name} [${term.termSetName}:${splitPath.join(':')}]`;\r\n }\r\n return (\r\n
\r\n
{term.name}
\r\n
{this.context.TaxonomyPickerInLabel} {termParent ? termParent : this.context.TaxonomyPickerTermSetLabel}
\r\n
\r\n );\r\n }\r\n\r\n private sortTerms(input: string, data: IPickerTerm[]): IPickerTerm[] {\r\n try {\r\n let first: IPickerTerm[] = [];\r\n let others: IPickerTerm[] = [];\r\n for (let i = 0; i < data.length; i++) {\r\n if (data[i].name.indexOf(input) == 0) {\r\n first.push(data[i]);\r\n } else {\r\n others.push(data[i]);\r\n }\r\n }\r\n first.sort((a, b) => a.name.toLowerCase() < b.name.toLowerCase() ? -1 : 1);\r\n others.sort((a, b) => a.name.toLowerCase() < b.name.toLowerCase() ? -1 : 1);\r\n return (first.concat(others));\r\n } catch (error) {\r\n console.warn(error);\r\n }\r\n return data;\r\n }\r\n\r\n /**\r\n * When Filter Changes a new search for suggestions\r\n */\r\n private async onFilterChanged(filterText: string, tagList: IPickerTerm[]): Promise {\r\n if (filterText !== \"\") {\r\n const {\r\n termPickerHostProps,\r\n // context,\r\n isTermSetSelectable\r\n } = this.props;\r\n\r\n // let terms: IPickerTerm[] = await this.termsService.searchTermsByName(filterText);\r\n let terms: IPickerTerm[] = await this.termsService.findTerms([filterText]);\r\n // Check if the termset can be selected\r\n if (isTermSetSelectable && !termPickerHostProps.anchorId) {\r\n // Retrieve the current termset\r\n const termSet = await this.termsService.getTermSet();\r\n // Check if termset was retrieved and if it contains the filter value\r\n if (termSet && termSet.Name.toLowerCase().indexOf(filterText?.trim().toLowerCase()) === 0) {\r\n // Add the termset to the suggestion list\r\n terms.push({\r\n key: this.termsService.cleanGuid(termSet.Id),\r\n name: termSet.Name,\r\n path: \"\",\r\n termSet: this.termsService.cleanGuid(termSet.Id)\r\n });\r\n }\r\n }\r\n // Filter out the terms which are already set\r\n const filteredTerms: IPickerTerm[] = [];\r\n const { disabledTermIds, disableChildrenOfDisabledParents } = this.props;\r\n for (const term of terms) {\r\n let canBePicked = true;\r\n\r\n // Check if term is not disabled\r\n if (disabledTermIds && disabledTermIds.length > 0) {\r\n // Check if current term need to be disabled\r\n if (disabledTermIds.indexOf(term.key) !== -1) {\r\n canBePicked = false;\r\n } else {\r\n // Check if child terms need to be disabled\r\n if (disableChildrenOfDisabledParents) {\r\n // Check if terms were already retrieved\r\n if (!this.allTerms) {\r\n this.allTerms = await this.termsService.getAllTerms(this.props.termPickerHostProps.termsetNameOrID);\r\n }\r\n\r\n // Check if there are terms retrieved\r\n if (this.allTerms.Terms && this.allTerms.Terms.length > 0) {\r\n // Find the disabled parents\r\n const disabledParents = this.allTerms.Terms.filter(t => disabledTermIds.indexOf(t.Id) !== -1);\r\n // Check if disabled parents were found\r\n if (disabledParents && disabledParents.length > 0) {\r\n // Check if the current term lives underneath a disabled parent\r\n const findTerm = disabledParents.filter(pt => term.path.indexOf(pt.PathOfTerm) !== -1);\r\n if (findTerm && findTerm.length > 0) {\r\n canBePicked = false;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (canBePicked) {\r\n // Only retrieve the terms which are not yet tagged\r\n if (tagList.filter(tag => tag.key === term.key).length === 0) {\r\n filteredTerms.push(term);\r\n }\r\n }\r\n }\r\n // return filteredTerms;\r\n return this.sortTerms(filterText, filteredTerms);\r\n } else {\r\n return Promise.resolve([]);\r\n }\r\n }\r\n\r\n /**\r\n * gets the text from an item\r\n */\r\n private onGetTextFromItem(item: any): any {\r\n return item.name;\r\n }\r\n\r\n /**\r\n * Render method\r\n */\r\n public render(): JSX.Element {\r\n const {\r\n disabled,\r\n value,\r\n onChanged,\r\n onInputChange,\r\n onBlur,\r\n allowMultipleSelections,\r\n placeholder\r\n } = this.props;\r\n\r\n const {\r\n terms\r\n } = this.state;\r\n\r\n return (\r\n
\r\n {\r\n if (!this.state.elRef) {\r\n this.setState({ elRef });\r\n }\r\n }}\r\n disabled={disabled}\r\n onResolveSuggestions={this.onFilterChanged}\r\n onRenderSuggestionsItem={this.onRenderSuggestionsItem}\r\n getTextFromItem={this.onGetTextFromItem}\r\n onRenderItem={this.onRenderItem}\r\n defaultSelectedItems={value}\r\n selectedItems={terms}\r\n onChange={onChanged}\r\n onInputChange={onInputChange}\r\n onBlur={onBlur}\r\n itemLimit={!allowMultipleSelections ? 1 : undefined}\r\n className={'termBasePicker'}\r\n inputProps={{\r\n placeholder: placeholder\r\n }}\r\n />\r\n
\r\n );\r\n\r\n }\r\n}\r\n","export * from './ITaxonomyPicker';\r\nexport * from './TaxonomyPicker';\r\nexport * from './ITermPicker';\r\nexport * from \"./termActions/index\";\r\n","import * as React from 'react';\r\nimport { CommandBarButton } from '@fluentui/react';\r\nimport { ITermAction, TermActionsDisplayStyle, IConcreteTermActionProps, ActionChange } from './ITermsActions';\r\nimport { getTermActionChange } from './getTermActionChange';\r\n\r\nexport default class ButtonTermAction extends React.Component {\r\n\r\n /**\r\n * componentWillMount lifecycle hook\r\n */\r\n public componentWillMount(): void {\r\n this.checkForImmediateInvocations();\r\n }\r\n\r\n /**\r\n * Prepares the command bar button\r\n */\r\n private prepareCommandBarButton = (termAction: ITermAction): { name: string, text: string, iconName: string, btnTitle: string } => {\r\n let name: string = \"\";\r\n let text: string = \"\";\r\n let iconName: string = \"\";\r\n let btnTitle: string = \"\";\r\n\r\n if ((this.props.displayStyle && (this.props.displayStyle === TermActionsDisplayStyle.text || this.props.displayStyle === TermActionsDisplayStyle.textAndIcon))) {\r\n name = termAction.title;\r\n text = termAction.title;\r\n }\r\n if (this.props.displayStyle && (this.props.displayStyle === TermActionsDisplayStyle.icon || this.props.displayStyle === TermActionsDisplayStyle.textAndIcon)) {\r\n iconName = termAction.iconName;\r\n }\r\n\r\n btnTitle = termAction.title;\r\n\r\n return { name, text, iconName, btnTitle };\r\n }\r\n\r\n /**\r\n * Gets the action button styling\r\n */\r\n private getTermActionActionButtonStyle = (): React.CSSProperties => {\r\n let result: React.CSSProperties = {\r\n backgroundColor: \"transparent\",\r\n width: this.props.displayStyle === TermActionsDisplayStyle.icon ? \"32px\" : null,\r\n height: \"32px\"\r\n };\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Check if there are action to immediatly invoke\r\n */\r\n private checkForImmediateInvocations() {\r\n const { termActions } = this.props;\r\n for (const action of termActions) {\r\n if (action.invokeActionOnRender) {\r\n this.onActionExecute(action);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * On action execution\r\n */\r\n private onActionExecute = async (termAction: ITermAction) => {\r\n const updateAction = await termAction.actionCallback(this.props.spTermService, this.props.term);\r\n this.props.termActionCallback(updateAction);\r\n }\r\n\r\n\r\n /**\r\n * Render all the term actions\r\n */\r\n private renderTermActions() {\r\n const { term, termActions, termActionChanges } = this.props;\r\n // Get term action changes\r\n const tac: ActionChange[] = termActionChanges[term.Id];\r\n\r\n return (\r\n termActions && termActions.map(termAction => {\r\n const { name, text, iconName, btnTitle } = this.prepareCommandBarButton(termAction);\r\n const { actionDisabled, actionHidden } = getTermActionChange(tac, termAction);\r\n\r\n if (actionHidden) {\r\n return null;\r\n }\r\n\r\n if (termAction.hidden && actionHidden === null) {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n { this.onActionExecute(termAction); }}\r\n iconProps={{\r\n iconName: iconName || null,\r\n style: { display: iconName ? null : \"none\" }\r\n }}\r\n disabled={actionDisabled}\r\n text={text}\r\n title={btnTitle}\r\n name={name}\r\n key={term.Id}\r\n style={this.getTermActionActionButtonStyle()} />\r\n
\r\n );\r\n }\r\n )\r\n );\r\n }\r\n\r\n\r\n /**\r\n * Default React render method\r\n */\r\n public render(): React.ReactElement {\r\n // Get termActions\r\n const allActions = this.renderTermActions().filter(action => action !== null);\r\n\r\n if (allActions && allActions.length > 0) {\r\n return (\r\n
\r\n {allActions}\r\n
\r\n );\r\n }\r\n\r\n return null;\r\n }\r\n}\r\n","import * as React from 'react';\r\n// import { DefaultButton } from 'office-ui-fabric-react/lib/Button';\r\n// import { IContextualMenuItem, IContextualMenuProps } from 'office-ui-fabric-react/lib/ContextualMenu';\r\nimport { ITerm } from '../../../../interfaces/services/ISPTermStorePickerService';\r\nimport { ITermAction, TermActionsDisplayStyle, IConcreteTermActionProps, ActionChange } from './ITermsActions';\r\nimport { DefaultButton, IContextualMenuItem, IContextualMenuProps } from '@fluentui/react';\r\n\r\nimport { getTermActionChange } from './getTermActionChange';\r\n\r\nexport class DropdownTermAction extends React.Component {\r\n public componentWillMount(): void {\r\n this.checkForImmediateInvocations();\r\n }\r\n\r\n private prepareContextualMenuProps = (term: ITerm, termActions: ITermAction[]): IContextualMenuProps => {\r\n let items: IContextualMenuItem[] = [];\r\n const displayStyle = this.props.displayStyle;\r\n let useTargetWidth = true;\r\n\r\n // Get term action changes\r\n const { termActionChanges } = this.props;\r\n const tac: ActionChange[] = termActionChanges[term.Id];\r\n\r\n for (const termAction of termActions) {\r\n const { actionDisabled, actionHidden } = getTermActionChange(tac, termAction);\r\n\r\n if ((!termAction.hidden && !actionHidden) || !actionHidden) {\r\n let termActionMenuItem: IContextualMenuItem = {\r\n key: term.Id.toString(),\r\n onClick: () => { this.onActionExecute(termAction); },\r\n disabled: actionDisabled\r\n };\r\n\r\n if (displayStyle && (displayStyle === TermActionsDisplayStyle.text || displayStyle === TermActionsDisplayStyle.textAndIcon)) {\r\n termActionMenuItem.text = termAction.title;\r\n termActionMenuItem.name = termAction.title;\r\n useTargetWidth = false;\r\n }\r\n if (displayStyle && (displayStyle === TermActionsDisplayStyle.icon || displayStyle === TermActionsDisplayStyle.textAndIcon)) {\r\n termActionMenuItem.iconProps = { iconName: termAction.iconName };\r\n }\r\n\r\n items.push(termActionMenuItem);\r\n }\r\n }\r\n\r\n const contextualMenuProps: IContextualMenuProps = {\r\n items,\r\n useTargetWidth\r\n };\r\n return contextualMenuProps;\r\n }\r\n\r\n /**\r\n * Prepare term action button style.\r\n */\r\n private getTermActionActionButtonStyle = (): React.CSSProperties => {\r\n let result: React.CSSProperties = {\r\n backgroundColor: \"transparent\",\r\n width: \"14px\",\r\n display: \"inline-flex\",\r\n padding: \"0px\"\r\n };\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Check if there are action to immediatly invoke\r\n */\r\n private checkForImmediateInvocations() {\r\n const { termActions } = this.props;\r\n for (const action of termActions) {\r\n if (action.invokeActionOnRender) {\r\n this.onActionExecute(action);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Handler to execute selected action.\r\n */\r\n private onActionExecute = async (termAction: ITermAction) => {\r\n const updateAction = await termAction.actionCallback(this.props.spTermService, this.props.term);\r\n this.props.termActionCallback(updateAction);\r\n }\r\n\r\n /**\r\n * Default React render method\r\n */\r\n public render(): React.ReactElement {\r\n const { term, termActions } = this.props;\r\n\r\n const termActionButtonStyle = this.getTermActionActionButtonStyle();\r\n const contextualMenuProps = this.prepareContextualMenuProps(term, termActions);\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n}\r\n","import { ITerm } from '../../../../interfaces/services/ISPTermStorePickerService';\r\nimport SPTermStorePickerService from '../../../../services/SPTermStorePickerService';\r\n\r\nexport interface ITermActionsControlProps {\r\n term: ITerm;\r\n termActions: ITermActions;\r\n spTermService: SPTermStorePickerService;\r\n termActionCallback: (updateAction: UpdateAction | null) => void;\r\n}\r\n\r\nexport interface ITermActionsControlState {\r\n availableActions: ITermAction[];\r\n displayMode: TermActionsDisplayMode;\r\n displayStyle: TermActionsDisplayStyle;\r\n termActionChanges?: TermActionChange;\r\n}\r\n\r\nexport interface TermActionChange {\r\n [termId: string]: ActionChange[];\r\n}\r\n\r\nexport interface ActionChange {\r\n actionId: string;\r\n disabled?: boolean;\r\n hidden?: boolean;\r\n}\r\n\r\nexport interface IConcreteTermActionProps {\r\n termActions: ITermAction[];\r\n term: ITerm;\r\n displayStyle: TermActionsDisplayStyle;\r\n spTermService: SPTermStorePickerService;\r\n termActionChanges: TermActionChange;\r\n termActionCallback: (updateAction: UpdateAction | null) => void;\r\n}\r\n\r\nexport enum TermActionsDisplayMode {\r\n buttons = 1,\r\n dropdown\r\n}\r\n\r\nexport enum TermActionsDisplayStyle {\r\n text = 1,\r\n icon,\r\n textAndIcon\r\n}\r\n\r\nexport enum UpdateType {\r\n updateTermLabel = 1,\r\n updateTermsTree,\r\n hideTerm,\r\n disableTerm,\r\n selectTerm\r\n}\r\n\r\nexport interface UpdateAction {\r\n updateActionType: UpdateType;\r\n value?: string | boolean;\r\n}\r\n\r\nexport interface ITermActions {\r\n actions: ITermAction[];\r\n termActionsDisplayStyle?: TermActionsDisplayStyle;\r\n termActionsDisplayMode?: TermActionsDisplayMode;\r\n initialize?: (spTermService: SPTermStorePickerService) => Promise;\r\n}\r\n\r\nexport interface ITermAction {\r\n id: string;\r\n title: string;\r\n iconName?: string;\r\n hidden?: boolean;\r\n invokeActionOnRender?: boolean;\r\n\r\n applyToTerm: (currentTerm: ITerm, triggerActionCallback: (updateAction: UpdateAction) => void, setActionStateForTerm: (actionId: string, termId: string, type: \"disabled\" | \"hidden\", value: boolean) => void) => Promise | boolean;\r\n actionCallback: (spTermService: SPTermStorePickerService, currentTerm: ITerm) => Promise;\r\n}\r\n","import { ITerm } from \"../../../../interfaces/services/ISPTermStorePickerService\";\r\nimport SPTermStorePickerService from \"../../../../services/SPTermStorePickerService\";\r\n\r\nimport { ITermAction, UpdateAction, UpdateType } from \".\";\r\nimport { findIndex } from \"@microsoft/sp-lodash-subset\";\r\nimport { logger } from \"../../../../../../utilities/logger\";\r\n\r\nexport class TermLabelAction implements ITermAction {\r\n public id: string = \"TermLabelActionId\";\r\n\r\n private _labels: string[];\r\n private _processedTerms: ITerm[];\r\n\r\n constructor(public title: string, public iconName: string = \"LocaleLanguage\") {\r\n this._processedTerms = [];\r\n }\r\n\r\n public applyToTerm = (currentTerm: ITerm): boolean => {\r\n const termIndex = findIndex(this._processedTerms, term => term.Id == currentTerm.Id);\r\n if (termIndex >= 0) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n public actionCallback = async (spTermService: SPTermStorePickerService, currentTerm: ITerm): Promise => {\r\n try {\r\n // Set pointer to loading\r\n let updateAction: UpdateAction = null;\r\n this._labels = await spTermService.getTermLabels(currentTerm.Id);\r\n\r\n if (this._labels) {\r\n let termLabel: string = this._labels.join(\" ; \");\r\n updateAction = {\r\n updateActionType: UpdateType.updateTermLabel,\r\n value: termLabel\r\n };\r\n return updateAction;\r\n }\r\n return null;\r\n } catch (error) {\r\n logger(error, \"TermActions.ts (actionCallback)\");\r\n return null;\r\n }\r\n }\r\n}\r\n","import * as React from \"react\";\r\nimport {\r\n ITermAction,\r\n ITermActionsControlProps,\r\n ITermActionsControlState,\r\n TermActionsDisplayMode,\r\n TermActionsDisplayStyle,\r\n ActionChange\r\n} from \"./ITermsActions\";\r\nimport { DropdownTermAction } from \"./DropdownTermAction\";\r\nimport ButtonTermAction from \"./ButtonTermAction\";\r\n\r\nexport default class TermActionsControl extends React.Component {\r\n constructor(props: ITermActionsControlProps) {\r\n super(props);\r\n\r\n const { termActions } = this.props;\r\n\r\n const displayMode = termActions.termActionsDisplayMode\r\n ? termActions.termActionsDisplayMode\r\n : TermActionsDisplayMode.buttons;\r\n const displayStyle = termActions.termActionsDisplayStyle\r\n ? termActions.termActionsDisplayStyle\r\n : TermActionsDisplayStyle.text;\r\n\r\n this.state = {\r\n availableActions: [],\r\n displayMode,\r\n displayStyle,\r\n termActionChanges: {}\r\n };\r\n }\r\n\r\n /**\r\n * componentWillMount lifecycle hook\r\n */\r\n public componentWillMount(): void {\r\n this.getAvailableActions();\r\n }\r\n \r\n private async getAvailableActions(): Promise {\r\n const { term, termActions } = this.props;\r\n const availableActions: ITermAction[] = [];\r\n\r\n if (termActions.actions) {\r\n for (const action of termActions.actions) {\r\n const available = await action.applyToTerm(term, this.props.termActionCallback, this.setActionStateForTerm);\r\n if (available) {\r\n availableActions.push(action);\r\n }\r\n }\r\n }\r\n\r\n this.setState({\r\n availableActions\r\n });\r\n }\r\n\r\n private setActionStateForTerm = (actionId: string, termId: string, type: \"disabled\" | \"hidden\", value: boolean) => {\r\n this.setState((prevState: ITermActionsControlState) => {\r\n let termActionChanges = prevState.termActionChanges;\r\n if (!termActionChanges[termId]) {\r\n termActionChanges[termId] = [];\r\n }\r\n\r\n const actionChanges = termActionChanges[termId].filter((action: ActionChange) => action.actionId === actionId);\r\n if (actionChanges.length === 0) {\r\n termActionChanges[termId].push({\r\n actionId,\r\n [type]: value\r\n });\r\n } else {\r\n actionChanges[0][type] = value;\r\n }\r\n\r\n return {\r\n termActionChanges\r\n };\r\n });\r\n };\r\n\r\n public render(): React.ReactElement {\r\n const { term } = this.props;\r\n const { displayStyle, displayMode, availableActions, termActionChanges } = this.state;\r\n\r\n if (!availableActions || availableActions.length <= 0 || !term) {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n {displayMode == TermActionsDisplayMode.dropdown ? (\r\n \r\n ) : (\r\n \r\n )}\r\n
\r\n );\r\n }\r\n}\r\n","import { ActionChange, ITermAction } from \".\";\r\n\r\n\r\nexport const getTermActionChange = (tac: ActionChange[], termAction: ITermAction): { actionDisabled: boolean | null; actionHidden: boolean | null; } => {\r\n if (tac && tac.length > 0) {\r\n const changes = tac.filter((change: ActionChange) => change.actionId === termAction.id);\r\n if (changes && changes.length > 0) {\r\n return {\r\n actionDisabled: typeof changes[0].disabled !== \"undefined\" ? changes[0].disabled : null,\r\n actionHidden: typeof changes[0].hidden !== \"undefined\" ? changes[0].disabled : null\r\n };\r\n }\r\n }\r\n\r\n return {\r\n actionDisabled: null,\r\n actionHidden: null\r\n };\r\n};\r\n","export * from \"./ButtonTermAction\";\r\nexport * from \"./DropdownTermAction\";\r\nexport * from \"./ITermsActions\";\r\nexport * from \"./TermActionsControl\";\r\nexport * from \"./TermActions\";\r\n","import { Dropdown, IDropdownOption, IPanelStyles, IStackTokens, ITooltipProps, mergeStyles, Panel, PrimaryButton, ResponsiveMode, ScrollablePane, ScrollbarVisibility, Spinner, Stack, TextField, TooltipHost } from \"@fluentui/react\";\r\nimport * as React from \"react\";\r\nimport { connect, ConnectedProps } from \"react-redux\";\r\nimport authModule from \"../../../../utilities/AuthModule\";\r\nimport { LanguageContext } from \"../../../../utilities/LocalizationModule\";\r\nimport { logger } from \"../../../../utilities/logger\";\r\nimport { SharePointFolderContentTypeIds } from \"../../config/constants\";\r\nimport { SharePointMetadataBooleans } from \"../../config/sharepointConstants\";\r\nimport { SharePointInputData } from \"../../interfaces/props/SharePointInputData\";\r\nimport { RootState } from \"../../redux\";\r\nimport { addRegionalSettings } from \"../../redux/modules/regional\";\r\nimport { DefaultValueService } from \"../../services/DefaultValueService\";\r\nimport { getSharePointContentTypes, getSharepointListSchema } from \"../../services/SharePointRestServices\";\r\nimport { SharepointSpServices } from \"../../services/SharepointSpServices\";\r\nimport { SharepointContentTypeHelper } from \"../helpers/sharepointContentTypeHelper\";\r\nimport InputMetaDataFactory from \"../directoryComponents/InputMetadataFactory\";\r\nimport { createDocumentSet, createFolder } from \"../helpers/folderCreationHelper\";\r\nimport { toggleReload } from \"../../redux/modules/reload\";\r\nimport { customToast } from \"../CustomToast\";\r\nimport { ComponentTypes } from \"../../config/config\";\r\nimport { IDocumentSetCreationData } from \"../../interfaces/IDocumentSetCreationData\";\r\nimport { DatasourceValidationHelper } from \"../helpers/datasourceValidationHelper\";\r\nimport generalModule from \"../../../../utilities/GeneralModule\";\r\nimport { useLazyGetItemByUniqueIDQuery } from \"../_v2/redux/api/sharepoint/api-sharepoint-slice\";\r\nimport { getDriveItemSharepointUniqueId } from \"../../services/GraphService\";\r\nimport { newTemplateFilterEnum } from \"../enums/newTemplateFilterEnum\";\r\nimport { tryEncodeUriComponent } from \"../../../../utilities/EncodeDecode\";\r\nimport { ListItemCreationData } from \"../../interfaces/ListItemCreationData\";\r\nimport { boundField, dataSourceItem } from \"../../redux/models/reduxModels\";\r\nimport { DatasourceFieldHelper } from \"../helpers/dataSourceFieldHelper\";\r\nimport { FileFolderNameExtensions } from \"../../services/FileFolderNameExtensions\";\r\nimport { apiAddListItem } from \"../../services/ApiService\";\r\nimport { DatasourceHelper } from \"../helpers/dataSourceHelper\";\r\nimport { DatasourceService } from \"../../services/DatasourceService\";\r\nimport { ContentTypeNameDatasourcePicker } from \"../inputs/contentTypeNameDatasourcePicker\";\r\nimport { setDatasourceValues } from \"../../redux/modules/datasource\";\r\nimport { refrehOptionsRequest } from \"../../config/datasourceConstants\";\r\nimport { NewDocumentTemplate } from \"../../interfaces/IDocumentTemplate\";\r\n\r\nconst loaderStackStyle: React.CSSProperties = {\r\n paddingTop: 10\r\n}\r\n\r\nconst inputStackStyle: React.CSSProperties = {\r\n paddingTop: 10,\r\n paddingBottom: 15\r\n}\r\n\r\nconst stackTokens: IStackTokens = {\r\n childrenGap: 15\r\n};\r\n\r\nexport const scrollStyle = mergeStyles({\r\n position: \"relative\",\r\n height: \"calc(100vh - 135px)\",\r\n marginTop: 5,\r\n marginBottom: 10\r\n});\r\n\r\n\r\nconst panelStyles: Partial = {\r\n content: {\r\n paddingLeft: 5,\r\n paddingRight: 5,\r\n paddingBottom: 0\r\n },\r\n footerInner: {\r\n paddingTop: 10\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state: RootState) => {\r\n return {\r\n workingDirectories: state.workingDirectories.workingDirectories,\r\n currentDirectory: state.workingDirectories.workingDirectories[state.workingDirectories.workingDirectories.length - 1],\r\n datasourceValues: state.datasource.values,\r\n datasourceInitialLoad: state.datasource.initialLoad,\r\n regionalSettings: state.regionalSettings,\r\n hiddenMetadataFields: state.tenantInfo?.hiddenMetadataFields,\r\n enableNewTemplateFilters: state.tenantInfo.enableNewTemplateFilters,\r\n newTemplateDocumentSetFilters: state.tenantInfo.newTemplateDocumentSetFilters,\r\n newTemplateFolderFilters: state.tenantInfo.newTemplateFolderFilters,\r\n newTemplateLibraryFilters: state.tenantInfo.newTemplateLibraryFilters,\r\n datasources: state.tenantInfo?.datasources,\r\n tenantGuid: state.user?.account?.tenantId\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n addRegionalSettings,\r\n toggleReload,\r\n setDatasourceValues\r\n};\r\n\r\nconst connector = connect(mapStateToProps, mapDispatchToProps);\r\ntype PropsFromRedux = ConnectedProps;\r\n\r\ninterface NewPanelProps extends PropsFromRedux {\r\n isOpen: boolean;\r\n dismissNewFolderPanel: () => void,\r\n onFolderCreated?: () => void,\r\n selectedTemplate?: NewDocumentTemplate;\r\n serverRelPath?: string;\r\n}\r\n\r\nconst NewFolderPanel: React.FunctionComponent = ({\r\n isOpen,\r\n dismissNewFolderPanel,\r\n workingDirectories,\r\n currentDirectory,\r\n datasourceValues,\r\n datasourceInitialLoad,\r\n regionalSettings,\r\n addRegionalSettings,\r\n hiddenMetadataFields,\r\n toggleReload,\r\n setDatasourceValues,\r\n onFolderCreated,\r\n selectedTemplate,\r\n enableNewTemplateFilters,\r\n newTemplateDocumentSetFilters,\r\n newTemplateFolderFilters,\r\n newTemplateLibraryFilters,\r\n datasources,\r\n serverRelPath,\r\n tenantGuid\r\n}) => {\r\n const languageStrings = React.useContext(LanguageContext);\r\n const [isLoading, setLoading] = React.useState(false);\r\n const [datasourceFields] = React.useState(DatasourceFieldHelper.getDatasourceFields(datasources, [currentDirectory?.siteDisplayName ?? \"\"], [currentDirectory?.DocumentLibrary ?? \"\"]));\r\n const [datasourceItem, setDatasourceItem] = React.useState();\r\n const [sharepointService, setSharepointService] = React.useState(null);\r\n const [inputValuesToSave, setInputValuesToSave] = React.useState([]);\r\n const [contentTypes, setContentTypes] = React.useState([]);\r\n const [selectedItem, setSelectedItem] = React.useState();\r\n const [isMultipleOptionsAvailable, setIsMultipleOptionsAvailable] = React.useState(false);\r\n const [fields, setFields] = React.useState([]);\r\n const [folderName, setFolderName] = React.useState(\"\");\r\n const [isCreatingFolder, setIsCreatingFolder] = React.useState(false);\r\n const [isCurrentDirectorySPList, setIsCurrentDirectorySPList] = React.useState(false);\r\n const [datasourceBoundContentTypeInputName, setDatasourceBoundContentTypeInputName] = React.useState();\r\n\r\n const [getItemByUniqueId] = useLazyGetItemByUniqueIDQuery();\r\n\r\n const checkIfInOneDrive = () => {\r\n if (currentDirectory) {\r\n return currentDirectory?.type == ComponentTypes.OneDrive || currentDirectory?.type == ComponentTypes.OneDriveSubFolder\r\n }\r\n return false;\r\n }\r\n\r\n const isInOneDrive = React.useRef(checkIfInOneDrive());\r\n\r\n React.useEffect(() => {\r\n if (workingDirectories && workingDirectories.some(x => x.type === ComponentTypes.SharePointList)) {\r\n setIsCurrentDirectorySPList(true);\r\n }\r\n }, [workingDirectories]);\r\n\r\n React.useEffect(() => {\r\n if (isOpen === true) {\r\n const folderOption = {\r\n key: SharePointFolderContentTypeIds.folder,\r\n text: languageStrings.Folder\r\n }\r\n const isOneDrive = currentDirectory?.type === ComponentTypes.OneDrive || currentDirectory?.type === ComponentTypes.OneDriveSubFolder;\r\n if (!isOneDrive) {\r\n setLoading(true);\r\n const setupAsyncWrapper = async () => {\r\n try {\r\n const accessToken = await authModule.getSharePointAccessToken();\r\n const sharepointSpService = new SharepointSpServices(currentDirectory.webUrl, accessToken);\r\n setSharepointService(sharepointSpService);\r\n const regionalSettingsAvailable = regionalSettings[currentDirectory.webUrl];\r\n if (!regionalSettingsAvailable) {\r\n const regionalSettings = await sharepointSpService.getSiteRegionalSettings();\r\n if (regionalSettings) {\r\n addRegionalSettings({ ...regionalSettings, webUrl: currentDirectory.webUrl });\r\n }\r\n }\r\n\r\n if (!selectedTemplate) {\r\n await getContentTypes(accessToken);\r\n }\r\n else {\r\n if (selectedTemplate.templateId === \"NewFolder\") {\r\n setSelectedItem(folderOption);\r\n }\r\n else if (selectedTemplate.contentTypeId) {\r\n setSelectedItem({\r\n key: selectedTemplate.contentTypeId,\r\n text: selectedTemplate.title\r\n });\r\n await getFields(await authModule.getSharePointAccessToken(), selectedTemplate.contentTypeId);\r\n }\r\n else {\r\n setSelectedItem(folderOption);\r\n }\r\n }\r\n } catch (e) {\r\n logger(e, \"NewFolderPanel.tsx (useEffect 1)\");\r\n setSelectedItem(folderOption);\r\n }\r\n setLoading(false);\r\n };\r\n setupAsyncWrapper();\r\n }\r\n else {\r\n setSelectedItem(folderOption);\r\n }\r\n }\r\n }, [isOpen, currentDirectory, selectedTemplate]);\r\n\r\n React.useEffect(() => {\r\n if (datasources && currentDirectory && selectedItem) {\r\n const contentTypeInputName: string = `${selectedItem.text} name`;\r\n const dataSourceHelper = new DatasourceHelper(new DatasourceService());\r\n const datasourceItem = dataSourceHelper.getInputDataSource(datasources, contentTypeInputName, [currentDirectory?.siteDisplayName ?? \"\"], [currentDirectory?.DocumentLibrary ?? \"\"]);\r\n if (datasourceItem) {\r\n setDatasourceBoundContentTypeInputName(contentTypeInputName);\r\n setDatasourceItem(datasourceItem);\r\n }\r\n }\r\n }, [datasources, currentDirectory, selectedItem]);\r\n\r\n React.useEffect(() => {\r\n if (datasourceValues) {\r\n updateMetadataPropertiesFromDataSource(datasourceValues);\r\n }\r\n }, [datasourceItem, datasourceBoundContentTypeInputName, datasourceValues]);\r\n\r\n const updateMetadataPropertiesFromDataSource = (values: any) => {\r\n const isMultipleValues: boolean = Array.isArray(values) && values.length > 0;\r\n const propertyKeys = isMultipleValues\r\n ? Object.keys(values[0])\r\n : Object.keys(values);\r\n\r\n if (propertyKeys.length > 0) {\r\n if (datasourceItem && datasourceBoundContentTypeInputName) {\r\n const propKey: string = propertyKeys.find(propKey => datasourceBoundContentTypeInputName.trim().toLowerCase() === propKey.trim().toLowerCase());\r\n if (propKey) {\r\n const newContentTypeNameValue: string = values[propKey];\r\n updateFolderName(newContentTypeNameValue);\r\n }\r\n }\r\n\r\n const updatedinputValuesToSave = [...inputValuesToSave];\r\n propertyKeys.forEach((propKey) => {\r\n let updatedValue: any;\r\n if (isMultipleValues) {\r\n const uniqueValues = values\r\n .map(value => value[propKey])\r\n .filter((value, index, self) => self.indexOf(value) === index);\r\n updatedValue = uniqueValues?.length === 1 ? uniqueValues[0] : uniqueValues;\r\n }\r\n else {\r\n updatedValue = values[propKey];\r\n }\r\n updateDatasourceDisplayNameInputData(updatedinputValuesToSave, propKey, updatedValue, Array.isArray(updatedValue) && updatedValue.length > 0);\r\n });\r\n setInputValuesToSave(updatedinputValuesToSave);\r\n }\r\n setDatasourceValues(null);\r\n };\r\n\r\n const updateDatasourceDisplayNameInputData = (updatedinputValuesToSave: SharePointInputData[], propKey: string, value: any, isMultipleValues: boolean) => {\r\n let inputToUpdate = inputValuesToSave.find(\r\n item => item.displayName && item.displayName.trim().toLowerCase() === propKey.trim().toLowerCase()\r\n );\r\n\r\n if (inputToUpdate) {\r\n if (value === refrehOptionsRequest) {\r\n const updatedInput: SharePointInputData = updatedinputValuesToSave[inputToUpdate.index];\r\n if (updatedInput) {\r\n updatedInput.resetDatasourceOptionsToggle = !updatedInput.resetDatasourceOptionsToggle;\r\n }\r\n }\r\n else if (isMultipleValues) { //value param is an array\r\n try {\r\n const updatedInput: SharePointInputData = updatedinputValuesToSave[inputToUpdate.index];\r\n if (updatedInput) {\r\n if (updatedInput.value) {\r\n if (Array.isArray(updatedInput.value) && updatedInput.value.length > 0) {\r\n updatedInput.value = updatedInput.value\r\n .map(val => {\r\n if (val && value.some(x => x?.trim().toLowerCase() === val.trim().toLowerCase())) {\r\n return val;\r\n }\r\n return null;\r\n })\r\n .filter(val => val);\r\n }\r\n else if (!datasourceInitialLoad && (value.length > 1 || !value.some(x => x?.trim().toLowerCase() === updatedInput?.value?.trim().toLowerCase()))) {\r\n updatedInput.value = null;\r\n }\r\n }\r\n else if (value.length === 1) {\r\n const validatedValue = DatasourceValidationHelper.validateAndTransformDatasourceValue(inputToUpdate, value[0]);\r\n if (validatedValue) {\r\n updatedInput.value = validatedValue;\r\n updatedInput.hasError = false;\r\n updatedInput.updatedFromDataSourceToggle = !updatedInput.updatedFromDataSourceToggle;\r\n }\r\n }\r\n updatedInput.updatedDatasourceOptions = value;\r\n }\r\n } catch (error) {\r\n logger(error, \"NewFolderPanel.tsx (updateDatasourceDisplayNameInputData)\");\r\n }\r\n }\r\n else {\r\n const validatedValue = DatasourceValidationHelper.validateAndTransformDatasourceValue(inputToUpdate, value);\r\n if (validatedValue) {\r\n const updatedInput: SharePointInputData = updatedinputValuesToSave[inputToUpdate.index];\r\n updatedInput.value = validatedValue;\r\n updatedInput.hasError = false;\r\n updatedInput.updatedFromDataSourceToggle = !updatedInput.updatedFromDataSourceToggle;\r\n }\r\n }\r\n }\r\n };\r\n\r\n const getContentTypes = async (accessToken: string) => {\r\n let multipleOptions: boolean = false;\r\n\r\n let contentTypeResult: any;\r\n let selectedItem: IDropdownOption;\r\n\r\n const folderOption = {\r\n key: SharePointFolderContentTypeIds.folder,\r\n text: languageStrings.Folder\r\n }\r\n\r\n if (enableNewTemplateFilters) {\r\n contentTypeResult = (await getSharepointListSchema(accessToken, currentDirectory.webUrl, currentDirectory.sharePointListId))?.NewDocumentTemplates;\r\n const newDocumentTemplates = JSON.parse(contentTypeResult);\r\n\r\n let availableOptions: IDropdownOption[] = [];\r\n\r\n if (newDocumentTemplates?.length > 0) {\r\n multipleOptions = true;\r\n const { addFolder, addDocset } = canAddFolderDocSet();\r\n if (addFolder) {\r\n const folders = newDocumentTemplates.filter(x => x.contentTypeId?.startsWith(SharePointFolderContentTypeIds.folder) && !x.contentTypeId.startsWith(SharePointFolderContentTypeIds.documentSet));\r\n const folderTemplate = newDocumentTemplates.find(x => x.templateId === \"NewFolder\");\r\n\r\n if (folderTemplate && (folderTemplate.isVisible === true || folderTemplate.visible === true)) {\r\n availableOptions.push(folderOption);\r\n }\r\n\r\n folders.forEach(folder => {\r\n availableOptions.push({\r\n key: folder.contentTypeId,\r\n text: folder.title\r\n })\r\n });\r\n }\r\n\r\n if (addDocset && !workingDirectories?.some(dir => dir?.contentTypeId?.startsWith(SharePointFolderContentTypeIds.documentSet))) {\r\n const docSets = newDocumentTemplates.filter(x => x.contentTypeId?.startsWith(SharePointFolderContentTypeIds.documentSet));\r\n docSets.forEach(docSet => {\r\n availableOptions.push({\r\n key: docSet.contentTypeId,\r\n text: docSet.title\r\n })\r\n });\r\n }\r\n\r\n setContentTypes(availableOptions);\r\n if (availableOptions?.length > 0) {\r\n selectedItem = availableOptions[0];\r\n if (selectedItem?.key && selectedItem.key.toString() !== SharePointFolderContentTypeIds.folder) {\r\n await getFields(await authModule.getSharePointAccessToken(), selectedItem.key);\r\n }\r\n }\r\n }\r\n } else {\r\n contentTypeResult = await getSharePointContentTypes(accessToken, currentDirectory.webUrl, currentDirectory.sharePointListId);\r\n\r\n if (contentTypeResult?.length > 0) {\r\n const folderContentTypes = contentTypeResult?.filter(contentType => !contentType.Sealed && contentType.Id?.StringValue?.startsWith(SharePointFolderContentTypeIds.folder));\r\n if (folderContentTypes?.length > 0) {\r\n multipleOptions = true;\r\n\r\n let folderContentTypeOptions = SharepointContentTypeHelper.mapFolderContentTypesToDropdownOptions(folderContentTypes);\r\n folderContentTypeOptions = [folderOption, ...folderContentTypeOptions];\r\n\r\n //remove documet set options if there is a docset in working directories \r\n if (workingDirectories?.some(dir => dir?.contentTypeId?.startsWith(SharePointFolderContentTypeIds.documentSet))) {\r\n folderContentTypeOptions = folderContentTypeOptions.filter(x => !(x.key as string)?.startsWith(SharePointFolderContentTypeIds.documentSet))\r\n }\r\n\r\n setContentTypes(folderContentTypeOptions);\r\n selectedItem = folderContentTypeOptions[0];\r\n }\r\n }\r\n }\r\n\r\n setSelectedItem(selectedItem ?? folderOption);\r\n setIsMultipleOptionsAvailable(multipleOptions);\r\n };\r\n\r\n const canAddFolderDocSet = React.useCallback(() => {\r\n let addFolder = false;\r\n let addDocset = false;\r\n\r\n const isInFolder = ((currentDirectory?.contentTypeId?.startsWith(SharePointFolderContentTypeIds.folder) && currentDirectory.serverRelativePath) || (currentDirectory?.directory?.length > 0 && currentDirectory.parentId));\r\n\r\n let currentContentype: string;\r\n if (enableNewTemplateFilters) {\r\n if (currentDirectory?.contentTypeId?.startsWith(SharePointFolderContentTypeIds.documentSet)) {\r\n currentContentype = SharePointFolderContentTypeIds.documentSet;\r\n } else if (isInFolder) {\r\n currentContentype = SharePointFolderContentTypeIds.folder;\r\n } else {\r\n currentContentype = \"root\";\r\n }\r\n\r\n if (currentContentype === \"root\" && newTemplateLibraryFilters?.includes(newTemplateFilterEnum.folder)) {\r\n addFolder = true;\r\n }\r\n else if (currentContentype === SharePointFolderContentTypeIds.folder && newTemplateFolderFilters?.includes(newTemplateFilterEnum.folder)) {\r\n addFolder = true;\r\n }\r\n else if (currentContentype === SharePointFolderContentTypeIds.documentSet && newTemplateDocumentSetFilters?.includes(newTemplateFilterEnum.folder)) {\r\n addFolder = true;\r\n }\r\n\r\n if (currentContentype === \"root\" && newTemplateLibraryFilters?.includes(newTemplateFilterEnum.docset)) {\r\n addDocset = true;\r\n }\r\n else if (currentContentype === SharePointFolderContentTypeIds.folder && newTemplateFolderFilters?.includes(newTemplateFilterEnum.docset)) {\r\n addDocset = true;\r\n }\r\n else if (currentContentype === SharePointFolderContentTypeIds.documentSet && newTemplateDocumentSetFilters?.includes(newTemplateFilterEnum.docset)) {\r\n addDocset = true;\r\n }\r\n } else {\r\n addFolder = true;\r\n addDocset = true;\r\n }\r\n\r\n return {\r\n addFolder,\r\n addDocset\r\n }\r\n }, [enableNewTemplateFilters, newTemplateFolderFilters, newTemplateDocumentSetFilters])\r\n\r\n const handleOnContentTypeChange = async (event: React.FormEvent, item: IDropdownOption) => {\r\n setFields([]);\r\n setSelectedItem(item);\r\n if (item.key.toString() !== SharePointFolderContentTypeIds.folder) {\r\n await getFields(await authModule.getSharePointAccessToken(), item.key);\r\n }\r\n };\r\n\r\n const handleFolderNameChange = (event: React.FormEvent, newValue: string): void => {\r\n updateFolderName(newValue);\r\n };\r\n\r\n const updateFolderName = (newValue: string): void => {\r\n setFolderName(newValue ? FileFolderNameExtensions.EnsureValidName(newValue.trimStart(), false) : \"\");\r\n }\r\n\r\n const handleInputChange = (index: number, value: any, hasError: boolean) => {\r\n const updatedinputValuesToSave = [...inputValuesToSave];\r\n updatedinputValuesToSave[index].value = value;\r\n updatedinputValuesToSave[index].hasError = hasError;\r\n setInputValuesToSave(updatedinputValuesToSave);\r\n };\r\n\r\n const getFields = async (accessToken: string, contentTypeId: string | number) => {\r\n let fields = await SharepointContentTypeHelper.getFields(\r\n accessToken,\r\n contentTypeId as string,\r\n {\r\n webUrl: currentDirectory.webUrl,\r\n documentLibrary: currentDirectory.DocumentLibrary,\r\n sharePointListId: currentDirectory.sharePointListId\r\n }\r\n );\r\n\r\n if (hiddenMetadataFields?.length > 0) {\r\n fields = fields.filter(field => !hiddenMetadataFields.some(hiddenField => field.xml?.DisplayName?.trim().toLowerCase() === hiddenField.trim()));\r\n }\r\n\r\n let inputValuesToSaveFields: SharePointInputData[] = fields.map((item, index) => setupInputValues(item, index));\r\n\r\n if (currentDirectory.parentId) {\r\n inputValuesToSaveFields = await updateMetaDataFieldsFromParentContainer(inputValuesToSaveFields);\r\n }\r\n\r\n setInputValuesToSave(inputValuesToSaveFields);\r\n setFields(fields);\r\n };\r\n\r\n const updateMetaDataFieldsFromParentContainer = async (inputValuesToSaveFields: SharePointInputData[]) => {\r\n let uniqueId = currentDirectory?.sharePointUniqueId;\r\n if (currentDirectory?.parentId && !uniqueId) {\r\n uniqueId = await getDriveItemSharepointUniqueId(currentDirectory.parentId, currentDirectory.id);\r\n }\r\n\r\n let file: any = await getItemByUniqueId({\r\n siteUrl: currentDirectory.webUrl,\r\n sharePointListId: currentDirectory.sharePointListId,\r\n uniqueId: uniqueId,\r\n accessToken: isInOneDrive.current ? await authModule.getOneDriveAccessToken() : await authModule.getSharePointAccessToken(),\r\n }).unwrap();\r\n\r\n let updatedInputValues = inputValuesToSaveFields.map(inputValue => {\r\n let newValue: any;\r\n\r\n if (inputValue.xml.Type === 'URL' && typeof file[inputValue.internalName] === 'object') {\r\n newValue = file[inputValue.internalName] ? file[inputValue.internalName]?.Url : inputValue.value;\r\n }\r\n else if (inputValue.xml.Type === 'TaxonomyFieldType' && typeof file[inputValue.internalName] === 'object') {\r\n newValue = file[inputValue.internalName] ? [file[inputValue.internalName]?.Label] : inputValue.value;\r\n }\r\n else if (inputValue.xml.Type === 'Lookup') {\r\n newValue = file[`${inputValue.internalName}Id`] ? [file[`${inputValue.internalName}Id`]] : inputValue.value;\r\n }\r\n else if (inputValue.xml.Type === 'LookupMulti') {\r\n newValue = file[`${inputValue.internalName}Id`] && file[`${inputValue.internalName}Id`]?.length > 0 ? file[`${inputValue.internalName}Id`] : inputValue.value;\r\n }\r\n else if (inputValue.xml.Type === 'User') {\r\n newValue = file[`${inputValue.internalName}Id`] ? [file[`${inputValue.internalName}Id`]] : inputValue.value;\r\n }\r\n else if (inputValue.xml.Type === 'UserMulti') {\r\n newValue = file[`${inputValue.internalName}Id`] && file[`${inputValue.internalName}Id`]?.length > 0 ? file[`${inputValue.internalName}Id`] : inputValue.value;\r\n }\r\n else if (inputValue.xml.Type === \"DateTime\") {\r\n let dateValue: Date = file[inputValue.internalName] && file[inputValue.internalName]?.length > 0 && new Date(file[inputValue.internalName]);\r\n if (dateValue) {\r\n dateValue = new Date(dateValue.getFullYear(), dateValue.getMonth(), dateValue.getDate(), dateValue.getHours(), dateValue.getMinutes(), dateValue.getSeconds(), dateValue.getMilliseconds());\r\n }\r\n newValue = dateValue || inputValue.value;\r\n }\r\n else {\r\n newValue = file[inputValue.internalName] ?? inputValue.value;\r\n }\r\n\r\n const updatedValue: SharePointInputData = {\r\n ...inputValue,\r\n hasError: inputValue.xml.Required === SharePointMetadataBooleans.true && !newValue,\r\n value: newValue\r\n }\r\n\r\n return updatedValue;\r\n });\r\n\r\n return updatedInputValues\r\n }\r\n\r\n const setupInputValues = (item, index): SharePointInputData => {\r\n let initialIsRequiredAndHasNoDefaultValue = item.xml.Required === SharePointMetadataBooleans.true && !item.DefaultValue;\r\n let defaultValue = DefaultValueService.setValue(item.xml.Type, item.DefaultValue);\r\n\r\n return {\r\n index: index,\r\n internalName: item.InternalName,\r\n value: defaultValue,\r\n hasError: initialIsRequiredAndHasNoDefaultValue,\r\n type: item.xml.Percentage ? `${item.xml.Type}Percentage` : item.xml.Type,\r\n displayName: item.xml.DisplayName,\r\n xml: item.xml,\r\n choices: item.Choices\r\n };\r\n };\r\n\r\n const createNewFolder = async () => {\r\n setIsCreatingFolder(true);\r\n try {\r\n if (isCurrentDirectorySPList) {\r\n const data: ListItemCreationData = {\r\n accessToken: await authModule.getSharePointAccessToken(),\r\n siteUrl: currentDirectory.webUrl,\r\n parentUrl: tryEncodeUriComponent(serverRelPath),\r\n listId: currentDirectory.sharePointListId,\r\n isFolder: true,\r\n folderName: folderName?.trimEnd()\r\n }\r\n\r\n await apiAddListItem(data);\r\n }\r\n else if (selectedItem?.key?.toString() === SharePointFolderContentTypeIds.folder) {\r\n await createFolder(currentDirectory, folderName?.trimEnd());\r\n }\r\n else {\r\n const documentSetCreationData: IDocumentSetCreationData = {\r\n accessToken: await authModule.getSharePointAccessToken(),\r\n tenantGuid: tenantGuid,\r\n siteUrl: currentDirectory.webUrl,\r\n parentUrl: `${currentDirectory.webUrl}/${currentDirectory.directory}`,\r\n listId: currentDirectory.sharePointListId,\r\n contentTypeId: selectedItem?.key as string,\r\n teamId: workingDirectories?.find(dir => dir.teamGroupId)?.teamGroupId,\r\n channelId: workingDirectories?.find(dir => dir.teamChannelId)?.teamChannelId,\r\n name: folderName?.trimEnd(),\r\n metadata: inputValuesToSave.map(item => ({ internalName: item.internalName, value: item.value, type: item.type }))\r\n }\r\n await createDocumentSet(documentSetCreationData);\r\n }\r\n\r\n !generalModule.isInConentMangerMode() && customToast.success(languageStrings.FolderCreateSuccess);\r\n\r\n if (onFolderCreated) {\r\n onFolderCreated();\r\n } else {\r\n toggleReload();\r\n dismissNewFolderPanel();\r\n }\r\n } catch (error) {\r\n customToast.error(languageStrings.ErrorMessageGeneric);\r\n }\r\n\r\n setIsCreatingFolder(false);\r\n\r\n };\r\n\r\n const checkIsMetadataValid = (): boolean => {\r\n return getInvalidInputNames().length === 0;\r\n };\r\n\r\n const getInvalidInputNames = (): string[] => {\r\n return (folderName?.trim().length > 0 ? [] : [languageStrings.FolderName]).concat(inputValuesToSave.filter(item => item.hasError).map(item => item.displayName));\r\n }\r\n\r\n const generateInvalidTooltip = (): JSX.Element => {\r\n const invalidInputNames = getInvalidInputNames();\r\n if (invalidInputNames.length > 0) {\r\n return (\r\n <>\r\n {languageStrings.Required}
\r\n {invalidInputNames.map((item, index) => • {item}
)}\r\n \r\n )\r\n }\r\n return null;\r\n }\r\n\r\n const contentTypeFields = fields.map((item, index) => {\r\n return (\r\n \r\n \r\n \r\n );\r\n });\r\n\r\n const folderNameInput = !datasourceItem\r\n ? folderName?.trim().length > 0 ? \"\" : languageStrings.Required}\r\n validateOnLoad={false}\r\n />\r\n : \r\n\r\n const tooltipProps: ITooltipProps = {\r\n onRenderContent: generateInvalidTooltip\r\n };\r\n\r\n const inputFields = (\r\n \r\n {isMultipleOptionsAvailable\r\n ?\r\n <>\r\n \r\n \r\n \r\n {folderNameInput}\r\n {contentTypeFields}\r\n \r\n :\r\n <>\r\n {folderNameInput}\r\n {contentTypeFields}\r\n \r\n }\r\n \r\n );\r\n\r\n const onRenderFooterContent = (): JSX.Element => (\r\n \r\n \r\n createNewFolder()}>\r\n {isCreatingFolder && }\r\n \r\n \r\n \r\n );\r\n\r\n return (\r\n \r\n {isLoading ?\r\n \r\n \r\n \r\n :\r\n
\r\n \r\n
\r\n {inputFields}\r\n
\r\n
\r\n
\r\n }\r\n );\r\n}\r\n\r\nexport default connector(NewFolderPanel);","import * as React from \"react\";\r\nimport { connect, ConnectedProps } from \"react-redux\";\r\nimport { RootState } from \"../../redux\";\r\nimport { ClearingEventArgs, FileInfo, RemovingEventArgs, SelectedEventArgs, UploaderComponent, UploadingEventArgs } from \"@syncfusion/ej2-react-inputs\";\r\nimport { addUploadedFile, deleteFilesByOriginalName } from \"../../redux/modules/file\";\r\nimport \"../../../../node_modules/@syncfusion/ej2-inputs/styles/uploader/fabric.css\";\r\nimport \"../../../../node_modules/@syncfusion/ej2-inputs/styles/input/fabric.css\";\r\nimport \"../../../../node_modules/@syncfusion/ej2-base/styles/fabric.css\";\r\nimport \"../../../../node_modules/@syncfusion/ej2-buttons/styles/fabric.css\";\r\nimport { removeExtension } from \"../helpers/stringHelper\";\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport { IFileToUpload } from \"../../interfaces/IFileToUpload\";\r\nimport { logger } from \"../../../../utilities/logger\";\r\nimport authModule from \"../../../../utilities/AuthModule\";\r\nimport { apiHeaders } from \"../../../../utilities/AxiosRetryUtil\";\r\n\r\nconst mapStateToProps = (state: RootState) => {\r\n return {\r\n expanders: state.expanders,\r\n accountId: state.user?.account?.uniqueId\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n addUploadedFile,\r\n deleteFilesByOriginalName\r\n};\r\nlet localeLang: string = \"\";\r\nconst connector = connect(mapStateToProps, mapDispatchToProps);\r\ntype PropsFromRedux = ConnectedProps;\r\ninterface UploadFileProps extends PropsFromRedux {\r\n onComplete: (fails: number, successes: number, total: number) => void;\r\n onClear: () => void;\r\n enableAutoUpload?: boolean;\r\n allowMultipleFiles: boolean;\r\n allowedExtensions?: string;\r\n onFileUploaded?: (uploadedFile: IFileToUpload) => void;\r\n}\r\n\r\nconst UploaderContainer: React.FunctionComponent = props => {\r\n const accountUniqueId = React.useRef(props.accountId);\r\n\r\n const [uploadObject, setUploadObject] = React.useState(null);\r\n const [isInteraction, setIsInteraction] = React.useState(false);\r\n const [asyncSettings, setAsyncSettings] = React.useState(null);\r\n const [autoUpload, setAutoUpload] = React.useState(props.enableAutoUpload ? props.enableAutoUpload : false);\r\n const [filesSuccess, setFilesSuccess] = React.useState(0);\r\n const [filesFail, setFilesFail] = React.useState(0);\r\n const [totalFiles, setTotalFiles] = React.useState(0);\r\n const [allFiles, setAllFiles] = React.useState([]);\r\n\r\n React.useEffect(() => {\r\n (async () => {\r\n if (!accountUniqueId.current) {\r\n accountUniqueId.current = (await authModule.getAccount(false))?.uniqueId;\r\n }\r\n\r\n await authModule.getDocubirdToken(true);\r\n\r\n setAsyncSettings({\r\n saveUrl: `${process.env.API_URL}Upload?accountId=${accountUniqueId.current}`,\r\n removeUrl: \"\",\r\n //chunkSize: 100000000 //100MB\r\n });\r\n })();\r\n\r\n try {\r\n localeLang = Office.context.displayLanguage?.toLowerCase().substring(0, 2);\r\n switch (localeLang) {\r\n case \"en\":\r\n localeLang = \"en-US\";\r\n break;\r\n case \"nl\":\r\n localeLang = \"nl-NL\";\r\n break;\r\n default:\r\n localeLang = \"en-US\";\r\n break;\r\n }\r\n } catch (error) {\r\n localeLang = \"en-US\";\r\n }\r\n }, []);\r\n\r\n React.useEffect(() => {\r\n if (totalFiles > 0 && (filesFail + filesSuccess === totalFiles)) {\r\n if (props.enableAutoUpload) {\r\n if (filesFail === 0) {\r\n setTimeout(() => {\r\n allFiles.forEach(file => {\r\n uploadObject.remove(file, null, true);\r\n });\r\n\r\n props.onComplete(filesFail, filesSuccess, totalFiles);\r\n setTotalFiles(0);\r\n setFilesFail(0);\r\n setFilesSuccess(0);\r\n }, 350);\r\n }\r\n } else {\r\n props.onComplete(filesFail, filesSuccess, totalFiles);\r\n }\r\n }\r\n }, [totalFiles, filesSuccess, filesFail]);\r\n\r\n const onUploading = (args: UploadingEventArgs) => {\r\n const jwt = authModule.getDocubirdTokenCached();\r\n (args.currentRequest as XMLHttpRequest).setRequestHeader('Authorization', `Bearer ${jwt}`);\r\n (args.currentRequest as XMLHttpRequest).setRequestHeader(apiHeaders.key.xDocubirdAuth, apiHeaders.value.xDocubirdAuth);\r\n }\r\n\r\n const onRemoveFile = (args: RemovingEventArgs): void => {\r\n try {\r\n args.postRawFile = false;\r\n if (props.onFileUploaded) {\r\n props.onFileUploaded(null);\r\n } else {\r\n //set redux\r\n props.deleteFilesByOriginalName(args.filesData?.map(fileInfo => fileInfo.name));\r\n }\r\n setTotalFiles(prevTotal => prevTotal > 0 ? --prevTotal : 0);\r\n args.filesData.map(fileInfo => fileInfo.statusCode === \"0\"\r\n ? setFilesFail(prevFail => prevFail > 0 ? --prevFail : 0)\r\n : setFilesSuccess(prevSuccess => prevSuccess > 0 ? --prevSuccess : 0)\r\n );\r\n } catch (error) {\r\n logger(error, \"UploaderContainer.tsx (onRemoveFile)\");\r\n }\r\n };\r\n\r\n const onPausing = (args: any): void => {\r\n setIsInteraction(args.event !== null && !navigator.onLine);\r\n };\r\n\r\n const onResuming = (args: any): void => {\r\n setIsInteraction(args.event !== null && !navigator.onLine);\r\n };\r\n\r\n const onClear = (args: ClearingEventArgs) => {\r\n if (!props.onFileUploaded) {\r\n //set redux\r\n props.deleteFilesByOriginalName(args.filesData?.map(fileInfo => fileInfo.name));\r\n }\r\n props.onClear();\r\n setTotalFiles(0);\r\n setFilesSuccess(0);\r\n setFilesFail(0);\r\n }\r\n\r\n const onFilesSelected = (args: SelectedEventArgs) => {\r\n if (!props.allowMultipleFiles && props.allowedExtensions && args.filesData[0].statusCode === '0') {\r\n return;\r\n }\r\n else {\r\n setAllFiles([...(allFiles ?? []), ...args.filesData]);\r\n setTotalFiles(prevTotal => prevTotal + args.filesData.length);\r\n const failsOnSelect = args.filesData.filter(file => file.statusCode === \"0\").length;\r\n setFilesFail(prevFail => prevFail + failsOnSelect);\r\n }\r\n }\r\n\r\n const onSuccess = (args: any) => {\r\n if (args.operation === \"upload\") {\r\n const name = removeExtension(args.file.name);\r\n\r\n const fileToUpload: IFileToUpload = {\r\n id: uuidv4(),\r\n ewsId: null,\r\n name: name,\r\n extension: args.file.type,\r\n isAttachment: false,\r\n isSelected: true,\r\n isDuplicate: false,\r\n originalName: name,\r\n lastModifiedDateTime: new Date((args.file.rawFile as File).lastModified).toISOString()\r\n }\r\n\r\n if (props.onFileUploaded) {\r\n //set parent local state\r\n props.onFileUploaded(fileToUpload);\r\n } else {\r\n //set redux\r\n props.addUploadedFile(fileToUpload);\r\n if (filesFail > 0 && (uploadObject?.getFilesData() ?? []).some(existingFile => existingFile.name === args.file.name)) {\r\n setFilesFail(prevFail => --prevFail);\r\n }\r\n setFilesSuccess(prevSuccess => ++prevSuccess);\r\n }\r\n }\r\n }\r\n\r\n const onFail = (args: any) => {\r\n if (args.operation === \"upload\") {\r\n setFilesFail((uploadObject?.getFilesData() ?? []).filter(fileInfo => fileInfo.statusCode === \"0\").length);\r\n }\r\n }\r\n\r\n return (\r\n {\r\n setUploadObject(scope);\r\n }}\r\n locale={localeLang}\r\n maxFileSize={1024000000} //1 GB\r\n asyncSettings={asyncSettings}\r\n autoUpload={autoUpload}\r\n uploading={onUploading}\r\n removing={onRemoveFile}\r\n pausing={onPausing}\r\n resuming={onResuming}\r\n selected={onFilesSelected}\r\n success={onSuccess}\r\n failure={onFail}\r\n clearing={onClear}\r\n multiple={props.allowMultipleFiles}\r\n allowedExtensions={props.allowedExtensions}\r\n >\r\n );\r\n};\r\n\r\nexport default connector(UploaderContainer);\r\n","import { IValidationProperties } from \"../../interfaces/IValidationProperties\";\r\nimport { ValidationResultEnum } from \"../enums/ValidationResult\";\r\nimport { inputResult } from \"../helpers/inputResult\";\r\nimport { ValidationResult } from \"../helpers/ValidationResult\";\r\n\r\nexport abstract class BaseValidator {\r\n validationProperties: IValidationProperties;\r\n constructor(validationProperties: IValidationProperties) {\r\n this.validationProperties = validationProperties;\r\n }\r\n\r\n validate(value): inputResult {\r\n if (this.validationProperties.isRequired && !value?.length) {\r\n return this.handle({ inputResult: { error: \"Field is required\", value: (value || \"\") }, validationResult: ValidationResultEnum.FieldIsRequired });\r\n }\r\n\r\n return this.handle({ inputResult: { error: \"\", value: (value || \"\") }, validationResult: ValidationResultEnum.SuccessFull });\r\n }\r\n\r\n handle(result: ValidationResult): inputResult {\r\n switch (result.validationResult) {\r\n default: {\r\n return result.inputResult\r\n }\r\n }\r\n }\r\n}","import { IValidate } from \"../../interfaces/IValidate\";\r\nimport { BaseValidator } from \"./BaseValidator\";\r\nimport { ValidationResultEnum } from \"../enums/ValidationResult\";\r\nimport { inputResult } from \"../helpers/inputResult\";\r\nimport { IValidationProperties } from \"../../interfaces/IValidationProperties\";\r\n\r\nexport class CollectionValidator extends BaseValidator implements IValidate {\r\n constructor(validationProperties: IValidationProperties) {\r\n super(validationProperties);\r\n }\r\n\r\n validate(value: any): inputResult {\r\n\r\n if (this.validationProperties.isRequired && !(value?.length > 0)) {\r\n return this.handle({ inputResult: { error: \"Field is required\", value: (value || \"\") }, validationResult: ValidationResultEnum.FieldIsRequired });\r\n }\r\n\r\n return super.validate(value);\r\n }\r\n}","import { IValidate } from \"../../interfaces/IValidate\";\r\nimport { IValidationProperties } from \"../../interfaces/IValidationProperties\";\r\nimport { ValidationResultEnum } from \"../enums/ValidationResult\";\r\nimport { inputResult } from \"../helpers/inputResult\";\r\nimport { ValidationResult } from \"../helpers/ValidationResult\";\r\nimport { BaseValidator } from \"./BaseValidator\";\r\n\r\nexport class CurrencyValidator extends BaseValidator implements IValidate {\r\n\r\n constructor(validationProperties: IValidationProperties) {\r\n super(validationProperties);\r\n }\r\n\r\n validate(value): inputResult {\r\n if (this.validationProperties.isRequired && !value.length) {\r\n return this.handle({ inputResult: { error: \"Field is required\", value: (value || \"\") }, validationResult: ValidationResultEnum.FieldIsRequired });\r\n }\r\n\r\n let hasExceededMaxValue = this.validationProperties.max != null && +value > this.validationProperties.max;\r\n if (hasExceededMaxValue) {\r\n return this.handle({ inputResult: { error: `Value is greater than maximum (${this.validationProperties.max})`, value: (value || \"\") }, validationResult: ValidationResultEnum.MaximumNumberExceeded });\r\n }\r\n\r\n let hasExceededMinValue = this.validationProperties.min != null && +value < this.validationProperties.min;\r\n if (hasExceededMinValue) {\r\n return this.handle( { inputResult: { error: `Value is less than minimum (${this.validationProperties.min})`, value: (value || \"\") }, validationResult: ValidationResultEnum.MinimumExceeded });\r\n }\r\n\r\n // return super.validate(value);\r\n return this.handle({ inputResult: { error: \"\", value: (value || \"\") }, validationResult: ValidationResultEnum.SuccessFull });\r\n }\r\n\r\n handle(result: ValidationResult): inputResult {\r\n // switch (result.validationResult) {\r\n // case ValidationResultEnum.MaximumNumberExceeded: {\r\n // return { ...result.inputResult, value: this.validationProperties.max }\r\n // }\r\n // case ValidationResultEnum.MinimumExceeded: {\r\n // return { ...result.inputResult, value: this.validationProperties.min }\r\n // }\r\n // default: {\r\n // return result.inputResult;\r\n // }\r\n // }\r\n return result.inputResult;\r\n }\r\n}","import { ValidationResultEnum } from \"../enums/ValidationResult\";\r\nimport { IValidate } from \"../../interfaces/IValidate\";\r\nimport { inputResult } from \"../helpers/inputResult\";\r\nimport { ValidationResult } from \"../helpers/ValidationResult\";\r\nimport { IValidationProperties } from \"../../interfaces/IValidationProperties\";\r\n\r\nexport class DateValidator implements IValidate {\r\n validationProperties: IValidationProperties;\r\n constructor(validationProperties: IValidationProperties) {\r\n this.validationProperties = validationProperties;\r\n }\r\n\r\n validate(value): inputResult {\r\n if (this.validationProperties.isRequired && !value) {\r\n return this.handle({ inputResult: { error: \"Field is required\", value: (value || \"\") }, validationResult: ValidationResultEnum.FieldIsRequired });\r\n }\r\n\r\n return this.handle({ inputResult: { error: \"\", value: (value || \"\") }, validationResult: ValidationResultEnum.SuccessFull });\r\n }\r\n\r\n handle(result: ValidationResult): inputResult {\r\n switch (result.validationResult) {\r\n default: {\r\n return result.inputResult\r\n }\r\n }\r\n }\r\n}","import { ValidationResultEnum } from \"../enums/ValidationResult\";\r\nimport { IValidate } from \"../../interfaces/IValidate\";\r\nimport { BaseValidator } from \"./BaseValidator\";\r\nimport { inputResult } from \"../helpers/inputResult\";\r\nimport { IValidationProperties } from \"../../interfaces/IValidationProperties\";\r\n\r\nexport class HyperLinkValidator extends BaseValidator implements IValidate {\r\n constructor(validationProperties: IValidationProperties) {\r\n super(validationProperties);\r\n }\r\n\r\n validate(value): inputResult {\r\n if (!this.isValidateUrl(value) && value?.length) {\r\n return this.handle({ inputResult: { error: `Invalid URL: ${value}`, value: (value || \"\") }, validationResult: ValidationResultEnum.InvalidUrl });\r\n }\r\n\r\n return super.validate(value);\r\n }\r\n\r\n private isValidateUrl(value) {\r\n return /^(?:(?:(?:https?|ftp):)?\\/\\/)(?:\\S+(?::\\S*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))(?::\\d{2,5})?(?:[/?#]\\S*)?$/i.test(value);\r\n }\r\n}\r\n","\r\nimport { IValidate } from \"../../interfaces/IValidate\";\r\nimport { IValidationProperties } from \"../../interfaces/IValidationProperties\";\r\nimport { ValidationResultEnum } from \"../enums/ValidationResult\";\r\nimport { inputResult } from \"../helpers/inputResult\";\r\nimport { ValidationResult } from \"../helpers/ValidationResult\";\r\n\r\nexport class NoValidation implements IValidate {\r\n validationProperties: IValidationProperties;\r\n constructor(validationProperties: IValidationProperties) {\r\n this.validationProperties = validationProperties;\r\n }\r\n\r\n validate(value): inputResult {\r\n return this.handle({ inputResult: { error: \"\", value: (value || \"\") }, validationResult: ValidationResultEnum.SuccessFull });\r\n }\r\n\r\n handle(result: ValidationResult): inputResult {\r\n switch (result.validationResult) {\r\n default: {\r\n return result.inputResult\r\n }\r\n }\r\n }\r\n}\r\n","import { ValidationResultEnum } from \"../enums/ValidationResult\";\r\nimport { IValidate } from \"../../interfaces/IValidate\";\r\nimport { BaseValidator } from \"./BaseValidator\";\r\nimport { inputResult } from \"../helpers/inputResult\";\r\nimport { ValidationResult } from \"../helpers/ValidationResult\";\r\nimport { IValidationProperties } from \"../../interfaces/IValidationProperties\";\r\nexport class NumberValidator extends BaseValidator implements IValidate {\r\n\r\n constructor(validationProperties: IValidationProperties) {\r\n super(validationProperties);\r\n }\r\n\r\n validate(value): inputResult {\r\n if (this.validationProperties.isRequired && !value?.length) {\r\n return this.handle({ inputResult: { error: \"Field is required\", value: (value || \"\") }, validationResult: ValidationResultEnum.FieldIsRequired });\r\n }\r\n\r\n let hasExceededMaxValue = this.validationProperties.max != null && +value > this.validationProperties.max;\r\n if (hasExceededMaxValue) {\r\n return this.handle({ inputResult: { error: `Value is greater than maximum (${this.validationProperties.max})`, value: (value || \"\") }, validationResult: ValidationResultEnum.MaximumNumberExceeded });\r\n }\r\n\r\n let hasExceededMinValue = this.validationProperties.min != null && +value < this.validationProperties.min;\r\n if (hasExceededMinValue) {\r\n return this.handle({ inputResult: { error: `Value is less than minimum (${this.validationProperties.min})`, value: (value || \"\") }, validationResult: ValidationResultEnum.MinimumExceeded });\r\n }\r\n\r\n // return super.validate(value);\r\n return this.handle({ inputResult: { error: \"\", value: (value || \"\") }, validationResult: ValidationResultEnum.SuccessFull });\r\n }\r\n\r\n handle(result: ValidationResult): inputResult {\r\n // switch (result.validationResult) {\r\n // case ValidationResultEnum.MaximumNumberExceeded: {\r\n // return { ...result.inputResult, value: this.validationProperties.max }\r\n // }\r\n // case ValidationResultEnum.MinimumExceeded: {\r\n // return { ...result.inputResult, value: this.validationProperties.min }\r\n // }\r\n // default: {\r\n // return result.inputResult;\r\n // }\r\n // }\r\n return result.inputResult;\r\n }\r\n}\r\n","import { ValidationResultEnum } from \"../enums/ValidationResult\";\r\nimport { IValidate } from \"../../interfaces/IValidate\";\r\nimport { BaseValidator } from \"./BaseValidator\";\r\nimport { inputResult } from \"../helpers/inputResult\";\r\nimport { ValidationResult } from \"../helpers/ValidationResult\";\r\nimport { IValidationProperties } from \"../../interfaces/IValidationProperties\";\r\nexport class PercentageValidator extends BaseValidator implements IValidate {\r\n\r\n constructor(validationProperties: IValidationProperties) {\r\n super(validationProperties);\r\n }\r\n\r\n validate(value): inputResult {\r\n if (this.validationProperties.isRequired && !value?.length) {\r\n return this.handle({ inputResult: { error: \"Field is required\", value: (value || \"\") }, validationResult: ValidationResultEnum.FieldIsRequired });\r\n }\r\n\r\n let hasExceededMaxValue = this.validationProperties.max != null && (+value / 100) > this.validationProperties.max;\r\n if (hasExceededMaxValue) {\r\n return this.handle({ inputResult: { error: `Value is greater than maximum (${this.validationProperties.max * 100})`, value: (value || \"\") }, validationResult: ValidationResultEnum.MaximumNumberExceeded });\r\n }\r\n\r\n let hasExceededMinValue = this.validationProperties.min != null && (+value / 100) < this.validationProperties.min;\r\n if (hasExceededMinValue) {\r\n return this.handle({ inputResult: { error: `Value is less than minimum (${this.validationProperties.min * 100})`, value: (value || \"\") }, validationResult: ValidationResultEnum.MinimumExceeded });\r\n }\r\n\r\n // return super.validate(value);\r\n return this.handle({ inputResult: { error: \"\", value: (value || \"\") }, validationResult: ValidationResultEnum.SuccessFull });\r\n }\r\n\r\n handle(result: ValidationResult): inputResult {\r\n // switch (result.validationResult) {\r\n // case ValidationResultEnum.MaximumNumberExceeded: {\r\n // return { ...result.inputResult, value: this.validationProperties.max * 100 }\r\n // }\r\n // case ValidationResultEnum.MinimumExceeded: {\r\n // return { ...result.inputResult, value: this.validationProperties.min * 100 }\r\n // }\r\n // default: {\r\n // return result.inputResult;\r\n // }\r\n // }\r\n return result.inputResult;\r\n }\r\n}\r\n","import { ValidationResultEnum } from \"../enums/ValidationResult\";\r\nimport { IValidate } from \"../../interfaces/IValidate\";\r\nimport { inputResult } from \"../helpers/inputResult\";\r\nimport { ValidationResult } from \"../helpers/ValidationResult\";\r\nimport { IValidationProperties } from \"../../interfaces/IValidationProperties\";\r\n\r\nexport class PickerValidator implements IValidate {\r\n validationProperties: IValidationProperties;\r\n constructor(validationProperties: IValidationProperties) {\r\n this.validationProperties = validationProperties;\r\n }\r\n\r\n validate(value): inputResult {\r\n const fieldHasNoSelectionButIsRequired = this.validationProperties.isRequired && (!value || value.length === 0);\r\n if (fieldHasNoSelectionButIsRequired) {\r\n return this.handle({ inputResult: { error: \"Field is required\", value: (value || \"\") }, validationResult: ValidationResultEnum.FieldIsRequired });\r\n }\r\n\r\n return this.handle({ inputResult: { error: \"\", value: (value || \"\") }, validationResult: ValidationResultEnum.SuccessFull });\r\n }\r\n\r\n handle(result: ValidationResult): inputResult {\r\n switch (result.validationResult) {\r\n default: {\r\n return result.inputResult\r\n }\r\n }\r\n }\r\n}","import { ValidationResultEnum } from \"../enums/ValidationResult\";\r\nimport { IValidate } from \"../../interfaces/IValidate\";\r\nimport { inputResult } from \"../helpers/inputResult\";\r\nimport { ValidationResult } from \"../helpers/ValidationResult\";\r\nimport { IValidationProperties } from \"../../interfaces/IValidationProperties\";\r\n\r\nexport class TaxonomyValidator implements IValidate {\r\n validationProperties: IValidationProperties;\r\n constructor(validationProperties: IValidationProperties) {\r\n this.validationProperties = validationProperties;\r\n }\r\n\r\n validate(value): inputResult {\r\n const fieldHasNoSelectionButIsRequired = this.validationProperties.isRequired && (!value || !Array.isArray(value.terms) || value.terms.length == 0);\r\n if (fieldHasNoSelectionButIsRequired) {\r\n return this.handle({ inputResult: { error: \"Field is required\", value: (value || \"\") }, validationResult: ValidationResultEnum.FieldIsRequired });\r\n }\r\n\r\n return this.handle({ inputResult: { error: \"\", value: (value || \"\") }, validationResult: ValidationResultEnum.SuccessFull });\r\n }\r\n\r\n handle(result: ValidationResult): inputResult {\r\n switch (result.validationResult) {\r\n default: {\r\n return result.inputResult\r\n }\r\n }\r\n }\r\n}","import { IValidate } from \"../../interfaces/IValidate\";\r\nimport { IValidationProperties } from \"../../interfaces/IValidationProperties\";\r\nimport { BaseValidator } from \"./BaseValidator\";\r\nexport class TextValidator extends BaseValidator implements IValidate {\r\n constructor(validationProperties: IValidationProperties) {\r\n super(validationProperties)\r\n }\r\n}","export const refrehOptionsRequest: string = \"<>\";","import { DayOfWeek, IDatePickerStrings } from \"@fluentui/react\";\r\nimport dayjs from 'dayjs';\r\n\r\nexport const DayPickerStrings: IDatePickerStrings = {\r\n months: [\r\n \"January\",\r\n \"February\",\r\n \"March\",\r\n \"April\",\r\n \"May\",\r\n \"June\",\r\n \"July\",\r\n \"August\",\r\n \"September\",\r\n \"October\",\r\n \"November\",\r\n \"December\"\r\n ],\r\n\r\n shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"],\r\n\r\n days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\r\n\r\n shortDays: [\"S\", \"M\", \"T\", \"W\", \"T\", \"F\", \"S\"],\r\n\r\n goToToday: \"Go to today\",\r\n prevMonthAriaLabel: \"Go to previous month\",\r\n nextMonthAriaLabel: \"Go to next month\",\r\n prevYearAriaLabel: \"Go to previous year\",\r\n nextYearAriaLabel: \"Go to next year\",\r\n closeButtonAriaLabel: \"Close date picker\",\r\n\r\n isRequiredErrorMessage: \"Field is required.\",\r\n\r\n invalidInputErrorMessage: \"Invalid date format.\"\r\n};\r\n\r\nexport const firstDayOfWeek = DayOfWeek.Sunday;\r\n\r\nexport const onFormatDate = (date: Date): string => {\r\n return dayjs().format(\"MMM Do YY\");\r\n // return date.getDate() + '/' + (date.getMonth() + 1) + '/' + (date.getFullYear() % 100);\r\n};","import { ISPLists } from \"./SPEntities\";\r\n\r\nexport enum LibsOrderBy {\r\n Id = 1,\r\n Title\r\n}\r\n\r\n/**\r\n * Options used to sort and filter\r\n */\r\nexport interface ILibsOptions {\r\n orderBy?: LibsOrderBy;\r\n baseTemplate?: number;\r\n includeHidden?: boolean;\r\n filter?: string;\r\n}\r\n\r\nexport interface ISPService {\r\n /**\r\n * Get the lists from SharePoint\r\n * @param options Options used to order and filter during the API query\r\n */\r\n getLibs(options?: ILibsOptions): Promise;\r\n getListItems?(filterText: string, listId: string, internalColumnName: string, keyInternalColumnName?: string, webUrl?: string) : Promise;\r\n}","export class BasePersistor {\r\n protected hasValidValue = (value: string | any[]) => {\r\n if (Array.isArray(value) && !value.length) {\r\n return false;\r\n }\r\n\r\n return value;\r\n };\r\n\r\n protected getSavingDirectory = (directory: string, folderName: string) => {\r\n let IsNotSavingInFolder = !folderName;\r\n return IsNotSavingInFolder\r\n ? directory\r\n : `${!directory ? \"\" : directory + \"/\"}${folderName}`;\r\n };\r\n\r\n protected getInputValue = (inputValue: any) => {\r\n return !(inputValue === 0) && (!inputValue || (Array.isArray(inputValue) && !inputValue?.length)) ? undefined : inputValue;\r\n }\r\n}\r\n","import authModule from \"../../../utilities/AuthModule\";\r\nimport { axiosRetryPost, localApiInstance } from \"../../../utilities/AxiosRetryUtil\";\r\nimport { CacheHelper } from \"../../../utilities/CacheHelper\";\r\nimport { logger } from \"../../../utilities/logger\";\r\nimport { DatasourceTypeEnum } from \"../components/enums/datasourceTypeEnum\";\r\nimport { IDatasourceRequestDto } from \"../interfaces/DatasourceRequestDto\";\r\nimport { IDatasourceQueryDto } from \"../interfaces/IDatasourceQueryDto\";\r\n\r\ninterface ICacheDatasourceData {\r\n key: string;\r\n data?: any[];\r\n}\r\n\r\nexport class DatasourceService {\r\n GetData = async (request: IDatasourceQueryDto): Promise => {\r\n try {\r\n let cachedData: ICacheDatasourceData;\r\n if (request.allowCache) {\r\n cachedData = this.getCachedData(request);\r\n if (Array.isArray(cachedData?.data)) {\r\n return cachedData.data;\r\n }\r\n }\r\n\r\n if (request.typeId === DatasourceTypeEnum.SharePoint) {\r\n request.accessToken = await authModule.getSharePointAccessToken();\r\n }\r\n const result = await axiosRetryPost(\"Datasource/GetData\", request, undefined, false, localApiInstance);\r\n\r\n const dsData = result?.data ?? [];\r\n if (request.allowCache) {\r\n CacheHelper.set(cachedData.key, dsData);\r\n }\r\n return dsData;\r\n } catch (err) {\r\n logger(err, \"DatasourceService.ts (GetData)\");\r\n return [];\r\n }\r\n }\r\n\r\n GetStructure = async (request: IDatasourceRequestDto): Promise => {\r\n try {\r\n let cachedData: ICacheDatasourceData;\r\n if (request.allowCache) {\r\n cachedData = this.getCachedData(request, true);\r\n if (Array.isArray(cachedData?.data)) {\r\n return cachedData.data;\r\n }\r\n }\r\n\r\n if (request.typeId === DatasourceTypeEnum.SharePoint) {\r\n request.accessToken = await authModule.getSharePointAccessToken();\r\n }\r\n const result = await axiosRetryPost(\"Datasource/GetStructure\", request, undefined, false, localApiInstance);\r\n // return result?.data ?? [];\r\n const dsData = result?.data ?? [];\r\n if (request.allowCache) {\r\n CacheHelper.set(cachedData.key, dsData);\r\n }\r\n return dsData;\r\n } catch (err) {\r\n logger(err, \"DatasourceService.ts (GetStructure)\");\r\n return [];\r\n }\r\n }\r\n\r\n GetEditStructure = async (request: IDatasourceRequestDto): Promise => {\r\n try {\r\n if (request.typeId === DatasourceTypeEnum.SharePoint) {\r\n request.accessToken = await authModule.getSharePointAccessToken();\r\n }\r\n const result = await axiosRetryPost(\"Datasource/GetEditStructure\", request, undefined, false, localApiInstance);\r\n return result?.data ?? [];\r\n } catch (err) {\r\n logger(err, \"DatasourceService.ts (GetEditStructure)\");\r\n return [];\r\n }\r\n }\r\n\r\n Search = async (request: IDatasourceQueryDto): Promise => {\r\n try {\r\n let cachedData: ICacheDatasourceData;\r\n if (request.allowCache) {\r\n cachedData = this.getCachedData(request);\r\n if (Array.isArray(cachedData?.data)) {\r\n if (request.isStrict) {\r\n const filteredData = cachedData.data.filter(data => request.queryParams.every(searchParam => {\r\n const searchProperty: string = searchParam.name?.trim().toLowerCase();\r\n for (let property in data) {\r\n if (data.hasOwnProperty(property) && property.trim().toLowerCase() == searchProperty) {\r\n return data[property]?.trim().toLowerCase() == searchParam.value?.trim().toLowerCase();\r\n }\r\n }\r\n return false;\r\n }));\r\n return filteredData;\r\n }\r\n else {\r\n const filteredData = cachedData.data.filter(data => request.queryParams.some(searchParam => {\r\n const searchProperty: string = searchParam.name.toLowerCase();\r\n for (let property in data) {\r\n if (data.hasOwnProperty(property) && property.toLowerCase() == searchProperty) {\r\n return data[property]?.trim().toLowerCase() == searchParam.value?.trim().toLowerCase();\r\n }\r\n }\r\n return false;\r\n }));\r\n return filteredData;\r\n }\r\n }\r\n }\r\n\r\n if (request.typeId === DatasourceTypeEnum.SharePoint) {\r\n request.accessToken = await authModule.getSharePointAccessToken();\r\n }\r\n const result = await axiosRetryPost(\"Datasource/Search\", request, undefined, false, localApiInstance);\r\n return result?.data ?? [];\r\n } catch (err) {\r\n logger(err, \"DatasourceService.ts (Search)\");\r\n return [];\r\n }\r\n }\r\n\r\n private getCachedData = (request: IDatasourceRequestDto, structureOnly: boolean = false): ICacheDatasourceData => {\r\n let cacheKey: string = `${request.tenantId}.ds_data.${request.id}`;\r\n if (structureOnly) {\r\n cacheKey += \".structure\";\r\n }\r\n if (request.allowCache) {\r\n const cachedData: any[] = CacheHelper.get(cacheKey);\r\n if (Array.isArray(cachedData)) {\r\n return { key: cacheKey, data: cachedData };\r\n }\r\n }\r\n return { key: cacheKey };\r\n }\r\n}\r\n","import dayjs = require(\"dayjs\");\r\nimport { logger } from \"../../../utilities/logger\";\r\nimport { SharePointInputTypes } from \"../config/sharepointConstants\";\r\nimport { IMappedValue } from \"./EmailMapper\";\r\n\r\nexport class DefaultValueService {\r\n static setValue(type: string, value: any) {\r\n try {\r\n if (value && (type === SharePointInputTypes.taxonomyFieldType || type === SharePointInputTypes.taxonomyFieldTypeMulti)) { // will be extended for future issues\r\n const defaultValues: string[] = [];\r\n const defaultsRaw = value.split(\";#\");\r\n for (let index = 0; index < defaultsRaw.length; index++) {\r\n const element = defaultsRaw[index] as string;\r\n if (element.indexOf(\"|\") !== -1) {\r\n const valueSection = element.split(\"|\");\r\n if (valueSection.length > 0) {\r\n defaultValues.push(valueSection[0]);\r\n }\r\n }\r\n }\r\n return defaultValues;\r\n }\r\n } catch (error) {\r\n logger(error, \"DefaultValueService.ts (setValue)\");\r\n }\r\n\r\n return value;\r\n }\r\n\r\n static setMappedDefault(input: any, mappedValue: IMappedValue) {\r\n if (!mappedValue?.value) {\r\n return null;\r\n }\r\n\r\n try {\r\n const inputType = input.xml?.Type?.toLowerCase();\r\n if (inputType == SharePointInputTypes.text.toLowerCase() || inputType == SharePointInputTypes.note.toLowerCase()) {\r\n\r\n if (Array.isArray(mappedValue.value)) {\r\n return mappedValue.value.join(\",\");\r\n }\r\n return mappedValue.value;\r\n\r\n } else if (inputType == SharePointInputTypes.choice.toLowerCase() || inputType == SharePointInputTypes.multiChoice.toLowerCase()) {\r\n\r\n if (Array.isArray(input.choices)) {\r\n let choiceValue: any;\r\n if (Array.isArray(mappedValue.value)) {\r\n const mappedDefaults: string[] = mappedValue.value as string[];\r\n if (mappedDefaults) {\r\n choiceValue = input.choices.find(choice => mappedDefaults.some(mappedDefault => choice.toLowerCase().trim() === mappedDefault.toLowerCase().trim()));\r\n }\r\n }\r\n else {\r\n choiceValue = input.choices.find(choice => choice.toLowerCase().trim() === mappedValue.value.toString().toLowerCase().trim());\r\n }\r\n if (choiceValue) return choiceValue;\r\n }\r\n\r\n } else if (inputType == SharePointInputTypes.number.toLowerCase() || inputType == SharePointInputTypes.currency.toLowerCase()) {\r\n\r\n if (!Array.isArray(mappedValue.value)) {\r\n let numberValue: number = Number(mappedValue.value);\r\n if (numberValue) {\r\n if (input.xml?.Min && numberValue < input.xml.Min) {\r\n return null;\r\n }\r\n if (input.xml?.Max && numberValue > input.xml.Max) {\r\n return null;\r\n }\r\n if (input.xml?.Percentage === \"TRUE\") {\r\n return numberValue * 100;\r\n }\r\n return numberValue;\r\n }\r\n }\r\n\r\n } else if (inputType == SharePointInputTypes.datetime.toLowerCase()) {\r\n\r\n if (!Array.isArray(mappedValue.value)) {\r\n return dayjs(mappedValue.value).isValid() ? dayjs(mappedValue.value).toDate() : null;\r\n }\r\n \r\n } else if (inputType == SharePointInputTypes.Boolean.toLowerCase()) {\r\n\r\n if (!Array.isArray(mappedValue.value)) {\r\n switch (mappedValue.value.toString().toLowerCase().trim()) {\r\n case \"true\":\r\n return true;\r\n case \"false\":\r\n return false;\r\n case \"yes\":\r\n return true;\r\n case \"no\":\r\n return false;\r\n case \"ja\":\r\n return true;\r\n case \"nee\":\r\n return false;\r\n default:\r\n return null;\r\n }\r\n }\r\n\r\n }\r\n } catch (error) {\r\n logger(error, \"DefaultValueService.ts (setMappedDefault)\");\r\n }\r\n\r\n return null;\r\n }\r\n}","import dayjs from 'dayjs';\r\nimport { StringUtil } from \"@brandless/tsutility\";\r\n\r\nexport class FileFolderNameExtensions {\r\n // private static InvalidChars: Array = new Array('\"'.charCodeAt(0), '#'.charCodeAt(0), '$'.charCodeAt(0), '*'.charCodeAt(0), ':'.charCodeAt(0), '<'.charCodeAt(0), '>'.charCodeAt(0), '?'.charCodeAt(0), '/'.charCodeAt(0), '\\\\'.charCodeAt(0), '|'.charCodeAt(0));\r\n private static InvalidChars: Array = new Array('\"'.charCodeAt(0), '*'.charCodeAt(0), ':'.charCodeAt(0), '<'.charCodeAt(0), '>'.charCodeAt(0), '?'.charCodeAt(0), '/'.charCodeAt(0), '\\\\'.charCodeAt(0), '|'.charCodeAt(0));\r\n private static InvalidNames: Array = new Array(`.lock`, `CON`, `PRN`, `AUX`, `NUL`, `COM0`, `COM1`, `COM2`, `COM3`, `COM4`, `COM5`, `COM6`, `COM7`, `COM8`, `COM9`, `LPT0`, `LPT1`, `LPT2`, `LPT3`, `LPT4`, `LPT5`, `LPT6`, `LPT7`, `LPT8`, `LPT9`, `_vti_`, `desktop.ini`);\r\n private static InvalidStartString: string = \"~\";\r\n private static InvalidStartStrings: Array = new Array(`~$`);\r\n private static InvalidContain: string = `_vti_`;\r\n\r\n public static EnsureValidName(name: string | null, trimEnd: boolean = true, formatEmptyValue: boolean = true): string | null {\r\n if (!name || StringUtil.IsNullOrWhiteSpace(name)) {\r\n return formatEmptyValue ? dayjs().format(\"YYYY-MM-DD HH[h]mm[m]ss[s]\") : \"\";\r\n }\r\n\r\n let tmpName: string = \"\".concat(...(StringUtil.SplitAndRemoveEmptyEntries(name, FileFolderNameExtensions.InvalidChars)));\r\n tmpName = StringUtil.TrimStart(tmpName, FileFolderNameExtensions.InvalidStartString);\r\n if (trimEnd) tmpName = tmpName.trim(); else tmpName = tmpName.trimStart();\r\n tmpName = StringUtil.Replace(tmpName, FileFolderNameExtensions.InvalidContain, ``);\r\n for (let invalidStartString_index_ = 0, invalidStartString_source_ = FileFolderNameExtensions.InvalidStartStrings; invalidStartString_index_ < invalidStartString_source_.length; invalidStartString_index_++) {\r\n let invalidStartString = invalidStartString_source_[invalidStartString_index_];\r\n if (tmpName.startsWith(invalidStartString))\r\n tmpName = tmpName.substr(invalidStartString.length - 1);\r\n }\r\n if (trimEnd) tmpName = tmpName.trim(); else tmpName = tmpName.trimStart();\r\n if (StringUtil.IsNullOrWhiteSpace(tmpName) || ((FileFolderNameExtensions.InvalidNames).filter(invalidName => tmpName == invalidName).length > 0)) {\r\n tmpName = dayjs().format(\"YYYY-MM-DD HH[h]mm[m]ss[s]\");\r\n }\r\n\r\n return tmpName;\r\n }\r\n}\r\n\r\nexport const formatNameFieldValue = (newValue: string): string => {\r\n if (newValue) {\r\n newValue = newValue.trimStart();\r\n if (!newValue || StringUtil.IsNullOrWhiteSpace(newValue)) {\r\n return dayjs().format(\"YYYY-MM-DD HH[h]mm[m]ss[s]\");\r\n }\r\n return newValue;\r\n }\r\n return \"\";\r\n}","import { IFileToUpload } from \"../interfaces/IFileToUpload\";\r\nimport authModule from \"../../../utilities/AuthModule\";\r\nimport { getFilePreCommitInfo, getFolderPreCommitInfo } from \"./SharePointRestServices\";\r\nimport { ISiteFileDestinationInfo } from \"../interfaces/ISiteFileDestinationInfo\";\r\nimport { logger } from \"../../../utilities/logger\";\r\nimport { IFilePreCommitResult } from \"../interfaces/IFilePreCommitResult\";\r\nimport { FolderPreCommitRequest } from \"../components/_v2/redux/api/local/api-local-interfaces\";\r\nimport { DragAndDropHelper } from \"../../../utilities/DragAndDropHelper\";\r\nimport { SaveMode } from \"../components/enums/SaveModeEnum\";\r\n\r\nexport class FileService {\r\n constructor() { }\r\n\r\n static getFilePreCommitCheck = async (files: IFileToUpload[], siteFileDestinationInfo: ISiteFileDestinationInfo, convertEmailToPDF: boolean, saveMode?: SaveMode): Promise => {\r\n const accessToken = await authModule.getOneDriveAccessToken()\r\n return await Promise.all(files.map(async item => {\r\n let result: IFilePreCommitResult;\r\n\r\n if (item.isSelected) {\r\n if (item.isFolder && !item.parentFolderId) {\r\n const folderRequest: FolderPreCommitRequest = {\r\n accessToken,\r\n destinationUrl: siteFileDestinationInfo.destinationUrl,\r\n siteUrl: siteFileDestinationInfo.siteUrl,\r\n folderName: item.name\r\n }\r\n\r\n result = await getFolderPreCommitInfo(folderRequest);\r\n }\r\n //root file\r\n else if (!item.isFolder && !item.parentFolderId) {\r\n if ((DragAndDropHelper.isDroppedModeActive && item.isFileSystemEntry) || (!DragAndDropHelper.isDroppedModeActive && !item.isFileSystemEntry)) {\r\n result = await getFilePreCommitInfo({\r\n accessToken,\r\n autoFolderCreation: siteFileDestinationInfo.autoFolderCreation,\r\n fileName: (item.isMainMailItem && convertEmailToPDF) || (saveMode === SaveMode.SaveAsPdf && item.canSaveAsPDF) ? `${item.name}.pdf` : `${item.name}.${item.extension}`,\r\n destinationUrl: siteFileDestinationInfo.destinationUrl,\r\n siteUrl: siteFileDestinationInfo.siteUrl\r\n })\r\n } else {\r\n result = { exists: false, checkedOut: false, checkedOutBy: null, locked: false, lockedBy: null }\r\n }\r\n } else {\r\n result = { exists: false, checkedOut: false, checkedOutBy: null, locked: false, lockedBy: null }\r\n }\r\n } else {\r\n result = { exists: false, checkedOut: false, checkedOutBy: null, locked: false, lockedBy: null };\r\n }\r\n\r\n return {\r\n ...item,\r\n isDuplicate: result.exists,\r\n filePreCommitResult: result\r\n };\r\n }));\r\n };\r\n\r\n static GetFileContent = async (): Promise => {\r\n try {\r\n const result = await new Promise((resolve, reject) => {\r\n // Restrict iPad to 64k\r\n const chunkSize = (Office.context.touchEnabled === true && Office.context.commerceAllowed === false) ? 65536 : 4194304;\r\n\r\n Office.context.document.getFileAsync(Office.FileType.Compressed, { sliceSize: chunkSize }, async (asyncResult) => {\r\n if (asyncResult.status === Office.AsyncResultStatus.Succeeded) {\r\n try {\r\n const fileData = await FileService.getAllSlices(asyncResult.value);\r\n const fileBase64Content: string = FileService.onGotAllSlices(fileData);\r\n resolve(fileBase64Content);\r\n } catch (error) {\r\n reject(error);\r\n }\r\n } else {\r\n reject(asyncResult.error);\r\n }\r\n });\r\n });\r\n\r\n if (result && result?.length > 0) {\r\n return result;\r\n }\r\n } catch (error) {\r\n logger(error, \"FileService.ts (GetFileContent)\");\r\n }\r\n\r\n return null;\r\n };\r\n\r\n private static getAllSlices(file: Office.File): Promise {\r\n return new Promise(async (resolve, reject) => {\r\n let documentFileData = [];\r\n for (let sliceIndex = 0; sliceIndex < file.sliceCount; sliceIndex++) {\r\n const sliceReadPromise = new Promise((sliceResolve, sliceReject) => {\r\n file.getSliceAsync(sliceIndex, (asyncResult) => {\r\n if (asyncResult.status === Office.AsyncResultStatus.Succeeded) {\r\n documentFileData = documentFileData.concat(asyncResult.value.data);\r\n sliceResolve(null);\r\n } else {\r\n file.closeAsync();\r\n sliceReject(`Error in reading slice no: ${sliceIndex} of the document`);\r\n }\r\n });\r\n });\r\n\r\n try {\r\n await sliceReadPromise;\r\n } catch (error) {\r\n return reject(error);\r\n }\r\n }\r\n\r\n if (!documentFileData.length) {\r\n return reject(\"Error while reading document. Please try it again.\");\r\n }\r\n\r\n file.closeAsync();\r\n\r\n resolve(documentFileData);\r\n });\r\n };\r\n\r\n private static onGotAllSlices = (docdataSlices: any[]): string => {\r\n let fileContent = \"\";\r\n for (let j = 0; j < docdataSlices.length; j++) {\r\n fileContent += String.fromCharCode(docdataSlices[j]);\r\n }\r\n const encodedData = btoa(fileContent);\r\n return encodedData;\r\n };\r\n}\r\n","import authModule from \"../../../utilities/AuthModule\";\r\nimport { IFileToUpload } from \"../interfaces/IFileToUpload\";\r\nimport { BasePersistor } from \"./BasePersistor\";\r\nimport { API } from \"../config/constants\";\r\nimport { SavingLocationState } from \"../types\";\r\nimport { CheckinTypes, ListSettings } from \"../components/_v2/redux/api/local/api-local-interfaces\";\r\nimport { FileMetaData } from \"../interfaces/props/FileMetaData\";\r\nimport { IFileSystemUploadData } from \"../interfaces/IFileSystemUploadData\";\r\nimport { IFileSystemFolder } from \"../../../utilities/DragAndDropHelper\";\r\nimport { OneDriveUrlHelper } from \"../components/helpers/oneDriveUrlHelper\";\r\nimport { apiFileSystemCallDynamicEndpoint } from \"./ApiService\";\r\nimport { SaveMode } from \"../components/enums/SaveModeEnum\";\r\n\r\nexport class FileSystemEntryPersistor extends BasePersistor {\r\n\r\n saveToSharepoint = async (\r\n isOneDrive: boolean,\r\n selectedFiles: IFileToUpload[],\r\n folderEntriesToUpload: IFileSystemFolder[],\r\n savingLocation: SavingLocationState,\r\n autoFolderCreation: boolean,\r\n fileMetaData: FileMetaData[],\r\n accountId: string,\r\n informationProtectionId: string,\r\n tenantOcrLanguage?: string,\r\n tenantReplaceFileNameWithGUID?: boolean,\r\n listSettings?: ListSettings,\r\n checkinType?: CheckinTypes,\r\n ensureUniqueFileName?: boolean,\r\n saveMode?: SaveMode\r\n ): Promise => {\r\n const userAuthData = await authModule.getAuthData();\r\n if (!userAuthData || !userAuthData.account) {\r\n authModule.signOut();\r\n return null;\r\n }\r\n\r\n const filesToUpload: IFileToUpload[] = selectedFiles.filter(file => file.originalName && file.isFileSystemEntry && !file.isFolder);\r\n const foldersToUpload: IFileSystemFolder[] = folderEntriesToUpload.filter(f => folderEntriesToUpload.some(folder => folder.parentFolderId && f.id === folder.parentFolderId) || filesToUpload.some(file => file.parentFolderId && f.id === file.parentFolderId));\r\n\r\n let dataToSend: IFileSystemUploadData = {\r\n sharepointInfo: {\r\n graphToken: userAuthData.graphToken,\r\n sharepointToken: isOneDrive ? userAuthData.oneDriveToken : userAuthData.sharePointToken,\r\n // informationProtectionToken: userAuthData.informationProtectionToken,\r\n mailToken: null,\r\n siteUrl: isOneDrive ? OneDriveUrlHelper.getSiteUrl(savingLocation.webUrl) : savingLocation.webUrl,\r\n documentLibrary: savingLocation.documentLibrary,\r\n sharepointListId: savingLocation.sharePointListId,\r\n directory: isOneDrive ? `${OneDriveUrlHelper.initialDocumentLibrary}/${savingLocation.directory}` : savingLocation.directory,\r\n autoFolderCreation: autoFolderCreation,\r\n ensureUniqueFileName,\r\n checkinType: checkinType,\r\n },\r\n saveMode: saveMode,\r\n folders: foldersToUpload,\r\n fileContents: filesToUpload,\r\n fileMetadataList: fileMetaData.map(file => {\r\n return {\r\n fileId: file.fileId,\r\n metaData: file.metaData.map(input => ({ type: input?.type, internalName: input?.internalName, value: this.getInputValue(input?.value) }))\r\n }\r\n }),\r\n tenantGuid: userAuthData.account.tenantId,\r\n accountId: accountId,\r\n username: userAuthData.account.username,\r\n sensitivityLabelId: informationProtectionId,\r\n tenantOcrLanguage: tenantOcrLanguage,\r\n tenantApiKey: authModule.getTenantApiKey(),\r\n tenantReplaceFileNameWithGUID: tenantReplaceFileNameWithGUID,\r\n listSettings,\r\n teamId: savingLocation.teamId,\r\n channelId: savingLocation.channelId\r\n };\r\n\r\n return await apiFileSystemCallDynamicEndpoint(API.url.fileSystem.sharepoint, false, dataToSend);\r\n };\r\n}\r\n","import { IHookResult } from \"../components/_v2/redux/api/local/api-local-interfaces\";\r\nimport { IPageSettings } from \"../interfaces/IPageSettings\";\r\n\r\nconst isValidHook = (hook: IHookResult, currentDirectory: IPageSettings) => {\r\n let siteAllowed: boolean = true;\r\n let libraryAllowed: boolean = true;\r\n\r\n if (Array.isArray(hook?.sites)\r\n && hook.sites.length > 0\r\n && currentDirectory?.siteDisplayName\r\n && !hook.sites.some(site => site?.trim().toUpperCase() === currentDirectory.siteDisplayName.trim().toUpperCase())) {\r\n siteAllowed = false;\r\n }\r\n\r\n if (siteAllowed\r\n && Array.isArray(hook?.libraries)\r\n && hook.libraries.length > 0\r\n && currentDirectory?.DocumentLibrary\r\n && !hook.libraries.some(library => library?.trim().toUpperCase() === currentDirectory.DocumentLibrary.trim().toUpperCase())) {\r\n libraryAllowed = false;\r\n }\r\n\r\n return (siteAllowed && libraryAllowed);\r\n}\r\n\r\nexport const getValidHooks = (hooks: IHookResult[], currentDirectory: IPageSettings) => {\r\n return hooks?.filter(h => isValidHook(h, currentDirectory)) ?? [];\r\n}","import authModule from \"../../../utilities/AuthModule\";\r\nimport { IFileToUpload } from \"../interfaces/IFileToUpload\";\r\nimport { OneDriveOverWriteEnum } from \"../components/enums/oneDriveOverWriteEnum\";\r\nimport { BasePersistor } from \"./BasePersistor\";\r\nimport { IPersistor } from \"../interfaces/IPersistor\";\r\nimport { ISharepointOfficeDataDto } from \"../interfaces/ISharepointOfficeDataDto\";\r\nimport { FileService } from \"./FileService\";\r\nimport { IOneDriveOfficeDataDto } from \"../interfaces/IOneDriveOfficeDataDto\";\r\nimport { API } from \"../config/constants\";\r\nimport { SavingLocationState } from \"../types\";\r\nimport { FolderTypeEnum } from \"../components/enums/FolderTypeEnum\";\r\nimport { CheckinTypes, ListSettings } from \"../components/_v2/redux/api/local/api-local-interfaces\";\r\nimport { FileMetaData } from \"../interfaces/props/FileMetaData\";\r\nimport { apiFileSystemCallDynamicEndpoint } from \"./ApiService\";\r\nimport { SaveMode } from \"../components/enums/SaveModeEnum\";\r\n\r\nexport class OfficePersistor extends BasePersistor implements IPersistor {\r\n isFileSystemFileUpload: boolean\r\n constructor(isFileSystemFileUpload: boolean) {\r\n super();\r\n this.isFileSystemFileUpload = isFileSystemFileUpload;\r\n }\r\n\r\n saveToSharepoint = async (\r\n selectedFiles: IFileToUpload[],\r\n savingLocation: SavingLocationState,\r\n // folderPermissions: currentSharepointFolderState,\r\n autoFolderCreation: boolean,\r\n fileMetaData: FileMetaData[],\r\n accountId: string,\r\n informationProtectionId: string,\r\n outlookToken?: string,\r\n outlookFolderType?: FolderTypeEnum,\r\n autoRemoveMailItemAttachments?: boolean,\r\n convertEmailToPDF?: boolean,\r\n tenantOcrLanguage?: string,\r\n tenantPiiEnabled?: boolean,\r\n tenantReplaceFileNameWithGUID?: boolean,\r\n listSettings?: ListSettings,\r\n checkinType?: CheckinTypes,\r\n ensureUniqueFileName?: boolean,\r\n exchangeAccountEmail?: string,\r\n graphMailItemCategory?: string,\r\n saveMode?: SaveMode\r\n ): Promise => {\r\n\r\n let base64Content: string;\r\n const officeFile = !this.isFileSystemFileUpload ? selectedFiles.find(file => !file.originalName) : undefined;\r\n\r\n if (officeFile) {\r\n base64Content = await FileService.GetFileContent();\r\n if (!base64Content) {\r\n return null;\r\n }\r\n }\r\n\r\n const userAuthData = await authModule.getAuthData();\r\n if (!userAuthData || !userAuthData.account) {\r\n authModule.signOut();\r\n return null;\r\n }\r\n\r\n let dataToSend: ISharepointOfficeDataDto = {\r\n sharepointInfo: {\r\n graphToken: userAuthData.graphToken,\r\n sharepointToken: userAuthData.sharePointToken,\r\n // informationProtectionToken: userAuthData.informationProtectionToken,\r\n mailToken: userAuthData.mailboxToken && await authModule.getMailboxAccessToken(),\r\n siteUrl: savingLocation.webUrl,\r\n documentLibrary: savingLocation.documentLibrary,\r\n sharepointListId: savingLocation.sharePointListId,\r\n directory: savingLocation.directory,\r\n // autoFolderCreation: !folderPermissions.canView\r\n autoFolderCreation: autoFolderCreation,\r\n ensureUniqueFileName,\r\n checkinType: checkinType\r\n },\r\n saveMode: saveMode,\r\n officeFile: officeFile && { ContentBase64: base64Content, name: officeFile.name, extension: officeFile.extension, id: officeFile.id, isDuplicate: officeFile.isDuplicate === true },\r\n fileContents: selectedFiles.filter(file => file.originalName),\r\n fileMetadataList: fileMetaData.map(file => {\r\n return {\r\n fileId: file.fileId,\r\n metaData: file.metaData.map(input => ({ type: input?.type, internalName: input?.internalName, value: this.getInputValue(input?.value) }))\r\n }\r\n }),\r\n tenantGuid: userAuthData.account.tenantId,\r\n accountId: accountId,\r\n username: userAuthData.account.username,\r\n sensitivityLabelId: informationProtectionId,\r\n tenantOcrLanguage: tenantOcrLanguage,\r\n tenantApiKey: authModule.getTenantApiKey(),\r\n tenantPiiEnabled: tenantPiiEnabled,\r\n tenantReplaceFileNameWithGUID: tenantReplaceFileNameWithGUID,\r\n listSettings,\r\n exchangeAccountEmail,\r\n graphMailItemCategory,\r\n teamId: savingLocation.teamId,\r\n channelId: savingLocation.channelId\r\n };\r\n\r\n return await apiFileSystemCallDynamicEndpoint(API.url.office.sharepoint, false, dataToSend);\r\n };\r\n\r\n saveToOneDrive = async (\r\n selectedFiles: IFileToUpload[],\r\n directory: string,\r\n oneDriveOverwriteOption: OneDriveOverWriteEnum,\r\n _outlookToken: string,\r\n folderName: string = \"\",\r\n accountId: string,\r\n autoRemoveMailItemAttachments?: boolean,\r\n convertEmailToPDF?: boolean,\r\n tenantOcrLanguage?: string,\r\n exchangeAccountEmail?: string,\r\n graphMailItemCategory?: string,\r\n saveMode?: SaveMode\r\n ) => {\r\n let base64Content: string;\r\n const officeFile = !this.isFileSystemFileUpload ? selectedFiles.find(file => !file.originalName) : undefined;\r\n if (officeFile) {\r\n base64Content = await FileService.GetFileContent();\r\n if (!base64Content) {\r\n return null;\r\n }\r\n }\r\n\r\n let dataToSend: IOneDriveOfficeDataDto = {\r\n accountId: accountId,\r\n graphToken: await authModule.getGraphAccessToken(),\r\n mailToken: authModule.getPersistedAuthState()?.mailboxToken && await authModule.getMailboxAccessToken(),\r\n officeFile: officeFile && {\r\n id: officeFile.id,\r\n ContentBase64: base64Content,\r\n name: officeFile.name,\r\n extension: officeFile.extension,\r\n isDuplicate: officeFile.isDuplicate === true\r\n },\r\n fileContents: selectedFiles.filter(file => file.originalName),\r\n directory: this.getSavingDirectory(directory, folderName),\r\n overWriteType: oneDriveOverwriteOption,\r\n tenantOcrLanguage: tenantOcrLanguage,\r\n exchangeAccountEmail,\r\n graphMailItemCategory,\r\n saveMode\r\n };\r\n\r\n return await apiFileSystemCallDynamicEndpoint(API.url.office.oneDrive, true, dataToSend);\r\n };\r\n}\r\n","import { ISharepointDataDto } from \"../interfaces/ISharepointDataDto\";\r\nimport authModule from \"../../../utilities/AuthModule\";\r\nimport { IFileToUpload } from \"../interfaces/IFileToUpload\";\r\nimport { OneDriveOverWriteEnum } from \"../components/enums/oneDriveOverWriteEnum\";\r\nimport { IOneDriveDataDto } from \"../interfaces/IOneDriveDataDto\";\r\nimport { BasePersistor } from \"./BasePersistor\";\r\nimport { IPersistor } from \"../interfaces/IPersistor\";\r\nimport { API } from \"../config/constants\";\r\nimport { OutlookService } from \"./OutlookService\";\r\nimport { SavingLocationState } from \"../types\";\r\nimport { ModeEnum } from \"../components/enums/modeEnum\";\r\nimport { IMailSendPayload } from \"../interfaces/IMailSendPayload\";\r\nimport { OutlookUtils } from \"../../../utilities/OutlookUtils\"\r\nimport { FolderTypeEnum } from \"../components/enums/FolderTypeEnum\";\r\nimport { logger } from \"../../../utilities/logger\";\r\nimport { CheckinTypes, ListSettings } from \"../components/_v2/redux/api/local/api-local-interfaces\";\r\nimport { FileMetaData } from \"../interfaces/props/FileMetaData\";\r\nimport { apiFileSystemCallDynamicEndpoint } from \"./ApiService\";\r\nimport { SaveMode } from \"../components/enums/SaveModeEnum\";\r\n\r\nexport class OutlookPersistor extends BasePersistor implements IPersistor {\r\n mailSendPayload: IMailSendPayload;\r\n mode: ModeEnum;\r\n disableMailCategorization?: boolean;\r\n constructor(mailSendPayload: IMailSendPayload, mode: ModeEnum, disableMailCategorization: boolean) {\r\n super();\r\n this.mailSendPayload = mailSendPayload;\r\n this.mode = mode;\r\n this.disableMailCategorization = disableMailCategorization;\r\n }\r\n\r\n saveToSharepoint = async (\r\n selectedFiles: IFileToUpload[],\r\n savingLocation: SavingLocationState,\r\n // folderPermissions: currentSharepointFolderState,\r\n autoFolderCreation: boolean,\r\n fileMetaData: FileMetaData[],\r\n accountId: string,\r\n informationProtectionId: string,\r\n outlookToken: string,\r\n outlookFolderType: FolderTypeEnum.sharepoint | FolderTypeEnum.oneDrive | FolderTypeEnum.teamChannel,\r\n autoRemoveMailItemAttachments?: boolean,\r\n convertEmailToPDF?: boolean,\r\n tenantOcrLanguage?: string,\r\n tenantPiiEnabled?: boolean,\r\n tenantReplaceFileNameWithGUID?: boolean,\r\n listSettings?: ListSettings,\r\n checkinType?: CheckinTypes,\r\n ensureUniqueFileName?: boolean,\r\n exchangeAccountEmail?: string,\r\n graphMailItemCategory?: string,\r\n saveMode?: SaveMode\r\n ): Promise => {\r\n const userAuthData = await authModule.getAuthData();\r\n if (!userAuthData || !userAuthData.account) {\r\n authModule.signOut();\r\n return null;\r\n }\r\n\r\n let dataToSend: ISharepointDataDto = this.mode !== ModeEnum.mailSend ? {\r\n sharepointInfo: {\r\n graphToken: userAuthData.graphToken,\r\n sharepointToken: userAuthData.sharePointToken,\r\n // informationProtectionToken: userAuthData.informationProtectionToken,\r\n mailToken: userAuthData.mailboxToken,\r\n siteUrl: savingLocation.webUrl,\r\n documentLibrary: savingLocation.documentLibrary,\r\n sharepointListId: savingLocation.sharePointListId,\r\n directory: savingLocation.directory,\r\n // autoFolderCreation: !folderPermissions.canView\r\n autoFolderCreation: autoFolderCreation,\r\n ensureUniqueFileName,\r\n checkinType: checkinType\r\n },\r\n outlookRestInfo: {\r\n url: await OutlookUtils.getRestURL(),\r\n outlookToken: outlookToken,\r\n ewsUrl: OutlookUtils.getEWSURL(),\r\n ewsToken: await OutlookUtils.getEWSToken(),\r\n ewsMailItemId: OutlookService.getItemEWSId(Office.context.mailbox?.item?.itemId)\r\n },\r\n emailItemId: OutlookService.getItemRestId(Office.context.mailbox?.item?.itemId),\r\n fileContents: selectedFiles,\r\n fileMetadataList: fileMetaData.map(file => {\r\n return {\r\n fileId: file.fileId,\r\n metaData: file.metaData.map(input => ({ type: input?.type, internalName: input?.internalName, value: this.getInputValue(input?.value) }))\r\n }\r\n }),\r\n tenantGuid: userAuthData.account.tenantId,\r\n accountId: accountId,\r\n username: userAuthData.account.username,\r\n sensitivityLabelId: informationProtectionId,\r\n listSettings,\r\n exchangeAccountEmail,\r\n graphMailItemCategory\r\n } : {\r\n sharepointInfo: {\r\n graphToken: userAuthData.graphToken,\r\n sharepointToken: userAuthData.sharePointToken,\r\n // informationProtectionToken: userAuthData.informationProtectionToken,\r\n mailToken: userAuthData.mailboxToken,\r\n siteUrl: savingLocation.webUrl,\r\n documentLibrary: savingLocation.documentLibrary,\r\n sharepointListId: savingLocation.sharePointListId,\r\n directory: savingLocation.directory,\r\n autoFolderCreation: autoFolderCreation,\r\n ensureUniqueFileName: false,\r\n checkinType: checkinType\r\n },\r\n outlookRestInfo: {\r\n url: this.mailSendPayload.restURL,\r\n outlookToken: this.mailSendPayload.outlookToken,\r\n ewsUrl: this.mailSendPayload.ewsUrl,\r\n ewsToken: this.mailSendPayload.ewsToken,\r\n ewsMailItemId: this.mailSendPayload.emailItem?.ewsId\r\n },\r\n emailItemId: this.mailSendPayload.emailItem.id, //already in REST format\r\n fileContents: selectedFiles,\r\n fileMetadataList: fileMetaData.map(file => {\r\n return {\r\n fileId: file.fileId,\r\n metaData: file.metaData.map(input => ({ type: input?.type, internalName: input?.internalName, value: this.getInputValue(input?.value) }))\r\n }\r\n }),\r\n tenantGuid: userAuthData.account.tenantId,\r\n accountId: accountId,\r\n username: userAuthData.account.username,\r\n sensitivityLabelId: informationProtectionId,\r\n listSettings\r\n };\r\n\r\n dataToSend.categoriesToAssign = !this.disableMailCategorization ? await OutlookUtils.getCategoriesToAssign(dataToSend.emailItemId, outlookFolderType) : null;\r\n dataToSend.autoRemoveMailItemAttachments = autoRemoveMailItemAttachments === true;\r\n dataToSend.convertEmailToPDF = convertEmailToPDF === true;\r\n dataToSend.tenantOcrLanguage = tenantOcrLanguage;\r\n dataToSend.tenantApiKey = authModule.getTenantApiKey();\r\n dataToSend.tenantPiiEnabled = tenantPiiEnabled;\r\n dataToSend.tenantReplaceFileNameWithGUID = tenantReplaceFileNameWithGUID;\r\n dataToSend.exchangeAccountEmail = exchangeAccountEmail;\r\n dataToSend.graphMailItemCategory = graphMailItemCategory;\r\n dataToSend.saveMode = saveMode;\r\n dataToSend.teamId = savingLocation.teamId;\r\n dataToSend.channelId = savingLocation.channelId;\r\n\r\n try {\r\n const result = await apiFileSystemCallDynamicEndpoint(API.url.outlook.sharepoint, false, dataToSend);\r\n\r\n if (!this.disableMailCategorization && result?.categoryUpdateRequired === true) {\r\n OutlookUtils.setEWSItemCategory(dataToSend.outlookRestInfo.ewsMailItemId, dataToSend.categoriesToAssign);\r\n }\r\n\r\n return result;\r\n } catch (e) {\r\n logger(e, \"OutlookPersistor.ts (saveToSharePoint)\");\r\n if (e.response) {\r\n return e.response.data\r\n }\r\n return null;\r\n }\r\n };\r\n\r\n saveToOneDrive = async (\r\n files: IFileToUpload[],\r\n directory: string,\r\n oneDriveOverwriteOption: OneDriveOverWriteEnum,\r\n outlookToken: string,\r\n folderName: string = \"\",\r\n accountId: string,\r\n autoRemoveMailItemAttachments?: boolean,\r\n convertEmailToPDF?: boolean,\r\n tenantOcrLanguage?: string,\r\n exchangeAccountEmail?: string,\r\n graphMailItemCategory?: string,\r\n saveMode?: SaveMode\r\n ) => {\r\n let dataToSend: IOneDriveDataDto = this.mode !== ModeEnum.mailSend ? {\r\n graphToken: await authModule.getGraphAccessToken(),\r\n mailToken: authModule.getPersistedAuthState()?.mailboxToken && await authModule.getMailboxAccessToken(),\r\n emailItemId: OutlookService.getItemRestId(Office.context.mailbox?.item?.itemId),\r\n accountId: accountId,\r\n fileContents: files.filter(file => file.isSelected),\r\n outlookRestInfo: {\r\n url: await OutlookUtils.getRestURL(),\r\n outlookToken: outlookToken,\r\n ewsUrl: OutlookUtils.getEWSURL(),\r\n ewsToken: await OutlookUtils.getEWSToken(),\r\n ewsMailItemId: OutlookService.getItemEWSId(Office.context.mailbox?.item?.itemId)\r\n },\r\n directory: this.getSavingDirectory(directory, folderName),\r\n overWriteType: oneDriveOverwriteOption\r\n } : {\r\n graphToken: await authModule.getGraphAccessToken(),\r\n mailToken: authModule.getPersistedAuthState()?.mailboxToken && await authModule.getMailboxAccessToken(),\r\n emailItemId: this.mailSendPayload.emailItem.id,\r\n accountId: accountId,\r\n fileContents: files.filter(file => file.isSelected),\r\n outlookRestInfo: {\r\n url: this.mailSendPayload.restURL,\r\n outlookToken: this.mailSendPayload.outlookToken,\r\n ewsUrl: this.mailSendPayload.ewsUrl,\r\n ewsToken: this.mailSendPayload.ewsToken,\r\n ewsMailItemId: this.mailSendPayload.emailItem?.ewsId\r\n },\r\n directory: this.getSavingDirectory(directory, folderName),\r\n overWriteType: oneDriveOverwriteOption\r\n };\r\n\r\n dataToSend.categoriesToAssign = !this.disableMailCategorization ? await OutlookUtils.getCategoriesToAssign(dataToSend.emailItemId, FolderTypeEnum.oneDrive) : null;\r\n dataToSend.autoRemoveMailItemAttachments = autoRemoveMailItemAttachments === true;\r\n dataToSend.convertEmailToPDF = convertEmailToPDF === true;\r\n dataToSend.tenantOcrLanguage = tenantOcrLanguage;\r\n dataToSend.exchangeAccountEmail = exchangeAccountEmail;\r\n dataToSend.graphMailItemCategory = graphMailItemCategory;\r\n dataToSend.saveMode = saveMode;\r\n\r\n try {\r\n const result = await apiFileSystemCallDynamicEndpoint(API.url.outlook.oneDrive, true, dataToSend);\r\n\r\n if (!this.disableMailCategorization && result?.categoryUpdateRequired === true) {\r\n OutlookUtils.setEWSItemCategory(dataToSend.outlookRestInfo.ewsMailItemId, dataToSend.categoriesToAssign);\r\n }\r\n\r\n return result;\r\n } catch (e) {\r\n logger(e, \"OutlookPersistor.ts (saveToOneDrive)\");\r\n if (e.response) {\r\n return e.response.data\r\n }\r\n return null;\r\n }\r\n };\r\n}\r\n","import { FileFolderNameExtensions } from \"./FileFolderNameExtensions\";\r\nimport { getLastSplittedStringItem, removeExtension } from \"../components/helpers/stringHelper\";\r\nimport { IFileToUpload } from \"../interfaces/IFileToUpload\";\r\nimport { IOfficeService } from \"../interfaces/IOfficeService\";\r\nimport { OfficeServiceEnum } from \"../components/enums/OfficeService\";\r\nimport { IMailSendPayload } from \"../interfaces/IMailSendPayload\";\r\nimport { ModeEnum } from \"../components/enums/modeEnum\";\r\nimport { logger } from \"../../../utilities/logger\";\r\nimport { OutlookUtils } from \"../../../utilities/OutlookUtils\";\r\nimport { apiGetAttachmentExtension } from \"./ApiService\";\r\n\r\nexport class OutlookService implements IOfficeService {\r\n serviceType: OfficeServiceEnum;\r\n constructor() {\r\n this.serviceType = OfficeServiceEnum.outlook;\r\n }\r\n\r\n static getItemRestId = (itemId: string) => {\r\n if (itemId) {\r\n try {\r\n const hostName: string = Office.context?.mailbox?.diagnostics?.hostName;\r\n if (hostName === \"OutlookIOS\" || hostName === \"OutlookAndroid\") {\r\n return itemId;\r\n }\r\n else {\r\n return Office.context?.mailbox?.convertToRestId(itemId, Office.MailboxEnums.RestVersion.v2_0);\r\n }\r\n } catch (error) {\r\n logger(error, \"OutlookService.ts (getItemRestId)\");\r\n }\r\n }\r\n return null;\r\n };\r\n\r\n static getItemEWSId = (itemId: string) => {\r\n if (itemId) {\r\n try {\r\n const hostName: string = Office.context?.mailbox?.diagnostics?.hostName;\r\n if (hostName === \"OutlookIOS\" || hostName === \"OutlookAndroid\") {\r\n return null;\r\n }\r\n else {\r\n return itemId;\r\n }\r\n } catch (error) {\r\n logger(error, \"OutlookService.ts (getItemEWSId)\");\r\n }\r\n }\r\n return null;\r\n };\r\n\r\n getSubject = async (mode: ModeEnum, mailSendPayload: IMailSendPayload) => {\r\n let subject: string;\r\n if (mode === ModeEnum.mailSend) {\r\n subject = mailSendPayload.emailItem.name;\r\n } else {\r\n const { normalizedSubject } = Office.context?.mailbox?.item;\r\n subject = normalizedSubject;\r\n }\r\n\r\n return subject;\r\n };\r\n\r\n getItems = async (autoSelectAttachments?: boolean): Promise => {\r\n const { itemId, normalizedSubject, attachments } = Office.context?.mailbox?.item;\r\n if (!itemId) return [];\r\n\r\n let itemAttachments = attachments?.length\r\n ? attachments\r\n .filter(attachment => attachment?.id && !attachment.isInline && attachment.size > 0)\r\n .map(attachment => {\r\n return {\r\n id: OutlookService.getItemRestId(attachment.id),\r\n ewsId: OutlookService.getItemEWSId(attachment.id),\r\n name: removeExtension(FileFolderNameExtensions.EnsureValidName(attachment.name)),\r\n extension: this.getExtension(attachment),\r\n isSelected: autoSelectAttachments === true,\r\n isAttachment: true,\r\n isDuplicate: false,\r\n contentType: attachment.contentType\r\n };\r\n })\r\n .filter(attachment => attachment?.id)\r\n : [];\r\n\r\n const attachmentsWithEmptyExtension = itemAttachments.filter(a => a.ewsId && !a.extension && a.contentType && a.contentType !== \"application/octet-stream\");\r\n if (attachmentsWithEmptyExtension?.length > 0) {\r\n const ewsUrl: string = OutlookUtils.getEWSURL();\r\n const ewsToken: string = await OutlookUtils.getEWSToken();\r\n\r\n if (ewsUrl && ewsToken) {\r\n const extensionData = await this.requestExtensions(ewsUrl, ewsToken, attachmentsWithEmptyExtension.map(a => a.ewsId));\r\n if (Array.isArray(extensionData)) {\r\n for (let i = 0; i < extensionData.length; i++) {\r\n const extData = extensionData[i];\r\n const attachment = itemAttachments.find(a => a.ewsId === extData.id);\r\n if (attachment) {\r\n attachment.extension = extData.extension;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n let mainMailItem = {\r\n id: OutlookService.getItemRestId(itemId),\r\n ewsId: OutlookService.getItemEWSId(itemId),\r\n name: FileFolderNameExtensions.EnsureValidName(normalizedSubject),\r\n extension: \"eml\",\r\n isSelected: autoSelectAttachments !== true || (autoSelectAttachments === true && !itemAttachments?.length),\r\n isAttachment: false,\r\n isDuplicate: false,\r\n isMainMailItem: true\r\n };\r\n\r\n return [mainMailItem, ...itemAttachments];\r\n };\r\n\r\n private getExtension = (attachment: Office.AttachmentDetails) => {\r\n try {\r\n if (attachment.name?.includes(\".\")) {\r\n return getLastSplittedStringItem(attachment.name, /[\\s.]+/);\r\n }\r\n else if (attachment.contentType === \"message/rfc822\") {\r\n return \"eml\"\r\n }\r\n } catch (error) {\r\n logger(error, \"OutlookService.ts (getExtension)\", attachment?.name);\r\n }\r\n return \"\";\r\n }\r\n\r\n private requestExtensions = async (ewsUrl: string, ewsToken: string, attachmentIdList: string[]) => {\r\n try {\r\n return await apiGetAttachmentExtension(ewsUrl, ewsToken, attachmentIdList);\r\n } catch (e) {\r\n logger(e, \"OutlookService.ts (requestExtensions)\");\r\n }\r\n return null;\r\n }\r\n}\r\n","import { ISPService, ILibsOptions, LibsOrderBy } from \"../interfaces/ISPService\";\r\nimport { ISPLists } from \"../interfaces/SPEntities\";\r\nimport { ISPHttpClientOptions } from \"@microsoft/sp-http\";\r\nimport authModule from \"../../../utilities/AuthModule\";\r\nimport { axiosRetryGet, axiosRetryPost } from \"../../../utilities/AxiosRetryUtil\";\r\n\r\nexport default class SPService implements ISPService {\r\n private _webAbsoluteUrl: string;\r\n\r\n constructor(webAbsoluteUrl?: string) {\r\n this._webAbsoluteUrl = webAbsoluteUrl;\r\n }\r\n\r\n public async getLibs(options?: ILibsOptions): Promise {\r\n let filtered: boolean;\r\n let queryUrl: string = `${this._webAbsoluteUrl}/_api/web/lists?$select=Title,id,BaseTemplate`;\r\n\r\n if (options.orderBy) {\r\n queryUrl += `&$orderby=${options.orderBy === LibsOrderBy.Id ? \"Id\" : \"Title\"}`;\r\n }\r\n\r\n if (options.filter) {\r\n queryUrl += `&$filter=${encodeURIComponent(options.filter)}`;\r\n } else {\r\n if (options.baseTemplate) {\r\n queryUrl += `&$filter=BaseTemplate eq ${options.baseTemplate}`;\r\n filtered = true;\r\n }\r\n\r\n if (options.includeHidden === false) {\r\n queryUrl += filtered ? \" and Hidden eq false\" : \"&$filter=Hidden eq false\";\r\n filtered = true;\r\n }\r\n }\r\n\r\n const accessToken = await authModule.getSharePointAccessToken();\r\n const result = await axiosRetryGet(queryUrl, {\r\n headers: { Authorization: `Bearer ${accessToken}` }\r\n });\r\n\r\n if (result?.data) {\r\n return result?.data as Promise;\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n public async getListItems(\r\n filterText: string,\r\n listId: string,\r\n internalColumnName: string,\r\n keyInternalColumnName?: string,\r\n webUrl?: string,\r\n filter?: string,\r\n substringSearch: boolean = false\r\n ): Promise {\r\n const filterStr = substringSearch // JJ - 20200613 - find by substring as an option\r\n ? `substringof('${encodeURIComponent(filterText.replace(\"'\", \"''\"))}',${internalColumnName})${filter ? \" and \" + filter : \"\"\r\n }`\r\n : `startswith(${internalColumnName},'${encodeURIComponent(filterText.replace(\"'\", \"''\"))}')${filter ? \" and \" + filter : \"\"\r\n }`; //string = filterList ? `and ${filterList}` : '';\r\n try {\r\n const webAbsoluteUrl = !webUrl ? this._webAbsoluteUrl : webUrl;\r\n const apiUrl = `${webAbsoluteUrl}/_api/web/lists('${listId}')/items?$select=${keyInternalColumnName ||\r\n \"Id\"},${internalColumnName}&$filter=${filterStr}`;\r\n const accessToken = await authModule.getSharePointAccessToken();\r\n const result = await axiosRetryGet(apiUrl, {\r\n headers: { Authorization: `Bearer ${accessToken}` }\r\n });\r\n\r\n if (result?.data && result?.data.value && result?.data.value.length > 0) {\r\n return result?.data.value;\r\n }\r\n\r\n return [];\r\n } catch (error) {\r\n return Promise.reject(error);\r\n }\r\n }\r\n\r\n public async getListItemsForListItemPicker(\r\n filterText: string,\r\n listId: string,\r\n internalColumnName: string,\r\n keyInternalColumnName?: string,\r\n webUrl?: string,\r\n filterList?: string\r\n ): Promise {\r\n let _filter: string = `$filter=startswith(${internalColumnName},'${encodeURIComponent(\r\n filterText.replace(\"'\", \"''\")\r\n )}') `;\r\n let costumfilter: string = filterList ? `and ${filterList}` : \"\";\r\n let _top = \" &$top=2000\";\r\n\r\n // test wild character \"*\" if \"*\" load first 30 items\r\n if ((filterText.trim().indexOf(\"*\") == 0 && filterText.trim().length == 1) || filterText.trim().length == 0) {\r\n _filter = \"\";\r\n costumfilter = filterList ? `$filter=${filterList}&` : \"\";\r\n _top = `$top=500`;\r\n }\r\n\r\n try {\r\n const webAbsoluteUrl = !webUrl ? this._webAbsoluteUrl : webUrl;\r\n const apiUrl = `${webAbsoluteUrl}/_api/web/lists('${listId}')/items?$orderby=${internalColumnName}&$select=${keyInternalColumnName ||\r\n \"Id\"},${internalColumnName}&${_filter}${costumfilter}${_top}`;\r\n\r\n const accessToken = await authModule.getSharePointAccessToken();\r\n const result = await axiosRetryGet(apiUrl, {\r\n headers: { Authorization: `Bearer ${accessToken}` }\r\n });\r\n\r\n if (result?.data && result?.data.value && result?.data.value.length > 0) {\r\n return result?.data.value;\r\n }\r\n return [];\r\n } catch (error) {\r\n return Promise.reject(error);\r\n }\r\n }\r\n\r\n public async getListItemAttachments(listId: string, itemId: number, webUrl?: string): Promise {\r\n try {\r\n const webAbsoluteUrl = !webUrl ? this._webAbsoluteUrl : webUrl;\r\n const apiUrl = `${webAbsoluteUrl}/_api/web/lists(@listId)/items(@itemId)/AttachmentFiles?@listId=guid'${encodeURIComponent(\r\n listId\r\n )}'&@itemId=${encodeURIComponent(String(itemId))}`;\r\n\r\n const accessToken = await authModule.getSharePointAccessToken();\r\n const result = await axiosRetryGet(apiUrl, {\r\n headers: { Authorization: `Bearer ${accessToken}` }\r\n });\r\n\r\n if (result?.data && result?.data.value) {\r\n return result?.data.value;\r\n }\r\n\r\n return null;\r\n } catch (error) {\r\n console.dir(error);\r\n return Promise.reject(error);\r\n }\r\n }\r\n\r\n public async deleteAttachment(fileName: string, listId: string, itemId: number, webUrl?: string): Promise {\r\n try {\r\n const webAbsoluteUrl = !webUrl ? this._webAbsoluteUrl : webUrl;\r\n const apiUrl = `${webAbsoluteUrl}/_api/web/lists(@listId)/items(@itemId)/AttachmentFiles/getByFileName(@fileName)/RecycleObject?@listId=guid'${encodeURIComponent(\r\n listId\r\n )}'&@itemId=${encodeURIComponent(String(itemId))}&@fileName='${encodeURIComponent(\r\n fileName.replace(/'/g, \"''\")\r\n )}'`;\r\n\r\n const accessToken = await authModule.getSharePointAccessToken();\r\n await axiosRetryPost(apiUrl, null, {\r\n headers: {\r\n Authorization: `Bearer ${accessToken}`,\r\n \"X-HTTP-Method\": \"DELETE\"\r\n }\r\n });\r\n } catch (error) {\r\n console.dir(error);\r\n return Promise.reject(error);\r\n }\r\n }\r\n\r\n public async addAttachment(\r\n listId: string,\r\n itemId: number,\r\n fileName: string,\r\n file: File,\r\n webUrl?: string\r\n ): Promise {\r\n try {\r\n // Remove special characters in FileName\r\n fileName = fileName.replace(/[^\\.\\w\\s\\&\\-]/gi, \"\");\r\n // Check if attachment exists\r\n const fileExists = await this.checkAttachmentExists(listId, itemId, fileName, webUrl);\r\n // Delete attachment if it exists\r\n if (fileExists) {\r\n await this.deleteAttachment(fileName, listId, itemId, webUrl);\r\n }\r\n // Add attachment\r\n const spOpts: ISPHttpClientOptions = {\r\n body: file\r\n };\r\n const webAbsoluteUrl = !webUrl ? this._webAbsoluteUrl : webUrl;\r\n const apiUrl = `${webAbsoluteUrl}/_api/web/lists(@listId)/items(@itemId)/AttachmentFiles/add(FileName=@fileName)?@listId=guid'${encodeURIComponent(\r\n listId\r\n )}'&@itemId=${encodeURIComponent(String(itemId))}&@fileName='${encodeURIComponent(\r\n fileName.replace(/'/g, \"''\")\r\n )}'`;\r\n\r\n const accessToken = await authModule.getSharePointAccessToken();\r\n await axiosRetryPost(apiUrl, file, {\r\n headers: {\r\n Authorization: `Bearer ${accessToken}`\r\n }\r\n });\r\n return;\r\n } catch (error) {\r\n return Promise.reject(error);\r\n }\r\n }\r\n\r\n public async getAttachment(listId: string, itemId: number, fileName: string, webUrl?: string): Promise {\r\n const webAbsoluteUrl = !webUrl ? this._webAbsoluteUrl : webUrl;\r\n const apiUrl = `${webAbsoluteUrl}/_api/web/lists(@listId)/items(@itemId)/AttachmentFiles/GetByFileBame(@fileName))?@listId=guid'${encodeURIComponent(\r\n listId\r\n )}'&@itemId=${encodeURIComponent(String(itemId))}&@fileName='${encodeURIComponent(fileName.replace(/'/g, \"''\"))}'`;\r\n\r\n const accessToken = await authModule.getSharePointAccessToken();\r\n const result = await axiosRetryGet(apiUrl, {\r\n headers: { Authorization: `Bearer ${accessToken}` }\r\n });\r\n\r\n if (result?.data) {\r\n return result?.data;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n public async checkAttachmentExists(listId: string, itemId: number, fileName: string, webUrl?: string): Promise {\r\n try {\r\n const listServerRelativeUrl = await this.getListServerRelativeUrl(listId, webUrl);\r\n const webAbsoluteUrl = !webUrl ? this._webAbsoluteUrl : webUrl;\r\n const fileServerRelativeUrl = `${listServerRelativeUrl}/Attachments/${itemId}/${fileName}`;\r\n const apiUrl = `${webAbsoluteUrl}/_api/web/getfilebyserverrelativeurl(@url)/Exists?@url='${encodeURIComponent(\r\n fileServerRelativeUrl.replace(/'/g, \"''\")\r\n )}'`;\r\n\r\n const accessToken = await authModule.getSharePointAccessToken();\r\n const result = await axiosRetryGet(apiUrl, {\r\n headers: { Authorization: `Bearer ${accessToken}` }\r\n });\r\n\r\n if (result?.data) {\r\n return result?.data.value;\r\n }\r\n\r\n return false;\r\n } catch (error) {\r\n return Promise.reject(error);\r\n }\r\n }\r\n\r\n public async getListName(listId: string, webUrl?: string): Promise {\r\n const webAbsoluteUrl = !webUrl ? this._webAbsoluteUrl : webUrl;\r\n const apiUrl = `${webAbsoluteUrl}/_api/web/lists(@listId)/RootFolder/Name?@listId=guid'${encodeURIComponent(\r\n listId\r\n )}'`;\r\n\r\n const accessToken = await authModule.getSharePointAccessToken();\r\n const result = await axiosRetryGet(apiUrl, {\r\n headers: { Authorization: `Bearer ${accessToken}` }\r\n });\r\n\r\n if (result?.data) {\r\n return result?.data.value;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n public async getListServerRelativeUrl(listId: string, webUrl?: string): Promise {\r\n const webAbsoluteUrl = !webUrl ? this._webAbsoluteUrl : webUrl;\r\n const apiUrl = `${webAbsoluteUrl}/_api/web/lists(@listId)/RootFolder/ServerRelativeUrl?@listId=guid'${encodeURIComponent(\r\n listId\r\n )}'`;\r\n\r\n const accessToken = await authModule.getSharePointAccessToken();\r\n const result = await axiosRetryGet(apiUrl, {\r\n headers: { Authorization: `Bearer ${accessToken}` }\r\n });\r\n\r\n if (result?.data) {\r\n return result?.data.value;\r\n }\r\n\r\n return null;\r\n }\r\n}\r\n","import { ITaxonomyPickerProps } from \"../components/inputs/taxonomyPicker/ITaxonomyPicker\";\r\nimport { IPickerTerm } from \"../components/inputs/taxonomyPicker/ITermPicker\";\r\nimport {\r\n ITermStore,\r\n ITerms,\r\n ITerm,\r\n IGroup,\r\n ITermSet,\r\n ISuggestTerm\r\n} from \"../interfaces/services/ISPTermStorePickerService\";\r\nimport { findIndex } from \"@microsoft/sp-lodash-subset\";\r\nimport { EmptyGuid } from \"../config/constants\";\r\nimport authModule from \"../../../utilities/AuthModule\";\r\nimport { logger } from \"../../../utilities/logger\";\r\nimport { axiosRetryPost } from \"../../../utilities/AxiosRetryUtil\";\r\n\r\nexport default class SPTermStorePickerService {\r\n private taxonomySession: string;\r\n private formDigest: string;\r\n private clientServiceUrl: string;\r\n private suggestionServiceUrl: string;\r\n\r\n constructor(private props: ITaxonomyPickerProps) {\r\n this.clientServiceUrl = `${props?.context?.webUrl}/_vti_bin/client.svc/ProcessQuery`;\r\n this.suggestionServiceUrl = `${props?.context?.webUrl}/_vti_bin/TaxonomyInternalService.json/GetSuggestions`;\r\n }\r\n\r\n public async getTermLabels(termId: string): Promise {\r\n let result = null;\r\n try {\r\n const data = `${termId}`;\r\n const accessToken = await authModule.getSharePointAccessToken();\r\n let response = await axiosRetryPost(this.clientServiceUrl, data, {\r\n headers: {\r\n Authorization: `Bearer ${accessToken}`,\r\n Accept: \"application/json\",\r\n \"Content-Type\": \"application/xml\"\r\n }\r\n });\r\n\r\n const jsonResult = await response?.data;\r\n let node = jsonResult.find(x => x._ObjectType_ == \"SP.Taxonomy.Term\");\r\n if (node && node.Labels && node.Labels._Child_Items_) {\r\n result = node.Labels._Child_Items_.map(termLabel => termLabel.Value);\r\n }\r\n } catch (error) {\r\n result = null;\r\n logger(error, \"SPTermStorePickerService.ts (getTermLabels)\");\r\n }\r\n return result;\r\n }\r\n\r\n public async getTermStores(): Promise {\r\n const data =\r\n '';\r\n\r\n const accessToken = await authModule.getSharePointAccessToken();\r\n return axiosRetryPost(this.clientServiceUrl, data, {\r\n headers: {\r\n Authorization: `Bearer ${accessToken}`,\r\n Accept: \"application/json\",\r\n \"Content-Type\": \"application/xml\"\r\n }\r\n })\r\n .then((response: any) => {\r\n const termStoreResult = response?.data.filter(\r\n (r: { [x: string]: string }) => r[\"_ObjectType_\"] === \"SP.Taxonomy.TermStore\"\r\n );\r\n // Check if term store was retrieved\r\n if (termStoreResult.length > 0) {\r\n // Check if the termstore needs to be filtered or limited\r\n if (this.props.termsetNameOrID) {\r\n return termStoreResult.map(termstore => {\r\n let termGroups = termstore.Groups._Child_Items_;\r\n\r\n // Check if the groups have to be limited to a specific term set\r\n if (this.props.termsetNameOrID) {\r\n const termsetNameOrId = this.props.termsetNameOrID;\r\n termGroups = termGroups.map((group: IGroup) => {\r\n group.TermSets._Child_Items_ = group.TermSets._Child_Items_.filter(\r\n (termSet: ITermSet) =>\r\n termSet.Name === termsetNameOrId ||\r\n this.cleanGuid(termSet.Id).toLowerCase() === this.cleanGuid(termsetNameOrId).toLowerCase()\r\n );\r\n return group;\r\n });\r\n }\r\n\r\n // Filter out all systen groups\r\n termGroups = termGroups.filter(group => !group.IsSystemGroup);\r\n\r\n // Filter out empty groups\r\n termGroups = termGroups.filter((group: IGroup) => group.TermSets._Child_Items_.length > 0);\r\n\r\n // Map the new groups\r\n termstore.Groups._Child_Items_ = termGroups;\r\n return termstore;\r\n });\r\n }\r\n\r\n // Return the term store results\r\n return termStoreResult;\r\n }\r\n return [];\r\n });\r\n }\r\n\r\n /**\r\n * Gets the current term set\r\n */\r\n public async getTermSet(): Promise {\r\n const termStore = await this.getTermStores();\r\n return this.getTermSetId(termStore, this.props.termsetNameOrID);\r\n }\r\n\r\n /**\r\n * Retrieve all terms for the given term set\r\n * @param termset\r\n */\r\n public async getAllTerms(\r\n termset: string,\r\n hideDeprecatedTags?: boolean,\r\n hideTagsNotAvailableForTagging?: boolean,\r\n useSessionStorage: boolean = true\r\n ): Promise {\r\n let termsetId: string = termset;\r\n // Check if the provided term set property is a GUID or string\r\n if (!this.isGuid(termset)) {\r\n // Fetch the term store information\r\n const termStore = await this.getTermStores();\r\n // Get the ID of the provided term set name\r\n const crntTermSet = this.getTermSetId(termStore, termset);\r\n if (crntTermSet) {\r\n termsetId = this.cleanGuid(crntTermSet.Id);\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n let childTerms = this.getTermsById(termsetId, useSessionStorage);\r\n\r\n if (childTerms) {\r\n return childTerms;\r\n }\r\n\r\n const data = `${termsetId}`;\r\n const accessToken = await authModule.getSharePointAccessToken();\r\n return axiosRetryPost(this.clientServiceUrl, data, {\r\n headers: {\r\n Authorization: `Bearer ${accessToken}`,\r\n Accept: \"application/json\",\r\n \"Content-Type\": \"application/xml\"\r\n }\r\n })\r\n .then((response: any) => {\r\n const termStoreResultTermSets: ITermSet[] = response?.data?.filter(\r\n item => item[\"_ObjectType_\"] === \"SP.Taxonomy.TermSet\"\r\n );\r\n\r\n if (termStoreResultTermSets.length > 0) {\r\n let termStoreResultTermSet = termStoreResultTermSets[0];\r\n termStoreResultTermSet.Terms = [];\r\n // Retrieve the term collection results\r\n const termStoreResultTerms: ITerms[] = response.data.filter(\r\n (r: { [x: string]: string }) => r[\"_ObjectType_\"] === \"SP.Taxonomy.TermCollection\"\r\n );\r\n if (termStoreResultTerms.length > 0) {\r\n // Retrieve all terms\r\n let terms = termStoreResultTerms[0]._Child_Items_;\r\n\r\n if (hideDeprecatedTags === true) {\r\n terms = terms.filter(d => d[\"IsDeprecated\"] === false);\r\n }\r\n\r\n if (hideTagsNotAvailableForTagging === true) {\r\n terms = terms.filter(d => d[\"IsAvailableForTagging\"] === true);\r\n }\r\n\r\n // Clean the term ID and specify the path depth\r\n terms = terms.map(term => {\r\n if (term.IsRoot) {\r\n term.CustomSortOrderIndex = termStoreResultTermSet.CustomSortOrder\r\n ? termStoreResultTermSet.CustomSortOrder.split(\":\").indexOf(this.cleanGuid(term.Id))\r\n : -1;\r\n } else {\r\n term.CustomSortOrderIndex = term[\"Parent\"].CustomSortOrder\r\n ? term[\"Parent\"].CustomSortOrder.split(\":\").indexOf(this.cleanGuid(term.Id))\r\n : -1;\r\n }\r\n term.Id = this.cleanGuid(term.Id);\r\n term[\"PathDepth\"] = term.PathOfTerm.split(\";\").length;\r\n term.TermSet = { Id: this.cleanGuid(termStoreResultTermSet.Id), Name: termStoreResultTermSet.Name };\r\n if (term[\"Parent\"]) {\r\n term.ParentId = this.cleanGuid(term[\"Parent\"].Id);\r\n }\r\n return term;\r\n });\r\n // Check if the term set was not empty\r\n if (terms.length > 0) {\r\n // Sort the terms by PathOfTerm and their depth\r\n terms = this.sortTerms(terms);\r\n termStoreResultTermSet.Terms = terms;\r\n }\r\n }\r\n try {\r\n if (useSessionStorage && window.sessionStorage) {\r\n window.sessionStorage.setItem(termsetId, JSON.stringify(termStoreResultTermSet));\r\n }\r\n } catch (error) {\r\n // do nothing, sometimes storage quota exceed error if too many items\r\n }\r\n return termStoreResultTermSet;\r\n }\r\n return null;\r\n });\r\n }\r\n\r\n /**\r\n * Get the term set ID by its name\r\n * @param termstore\r\n * @param termset\r\n */\r\n private getTermSetId(termstore: ITermStore[], termsetName: string): ITermSet {\r\n if (termstore && termstore.length > 0 && termsetName) {\r\n // Get the first term store\r\n const ts = termstore[0];\r\n // Check if the term store contains groups\r\n if (ts.Groups && ts.Groups._Child_Items_) {\r\n for (const group of ts.Groups._Child_Items_) {\r\n // Check if the group contains term sets\r\n if (group.TermSets && group.TermSets._Child_Items_) {\r\n for (const termSet of group.TermSets._Child_Items_) {\r\n // Check if the term set is found\r\n if (termSet.Name === termsetName) {\r\n return termSet;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n public searchTermsByName(searchText: string): Promise {\r\n return this.searchTermsByTermSet(searchText);\r\n }\r\n\r\n private getTermsById(termId, useSessionStorage: boolean = true) {\r\n try {\r\n if (useSessionStorage && window.sessionStorage) {\r\n let terms = window.sessionStorage.getItem(termId);\r\n if (terms) {\r\n return JSON.parse(terms);\r\n } else {\r\n return null;\r\n }\r\n } else {\r\n return null;\r\n }\r\n } catch (error) {\r\n return null;\r\n }\r\n }\r\n\r\n private searchTermsBySearchText(terms, searchText) {\r\n if (terms) {\r\n return terms.filter(t => {\r\n return t.name.toLowerCase().indexOf(searchText.toLowerCase()) > -1;\r\n });\r\n } else return [];\r\n }\r\n\r\n public async findTerms(termsToFind: string[], exactMatch: boolean = false): Promise {\r\n let returnTerms: IPickerTerm[] = [];\r\n try {\r\n const { termsetNameOrID, hideDeprecatedTags, hideTagsNotAvailableForTagging, useSessionStorage } = this.props;\r\n let termSet = await this.getAllTerms(termsetNameOrID, hideDeprecatedTags, hideTagsNotAvailableForTagging, useSessionStorage);\r\n let terms = termSet?.Terms;\r\n if (terms) {\r\n let filteredTerms: ITerm[];\r\n if (exactMatch) {\r\n filteredTerms = terms.filter(t => termsToFind.some(termToFind => t.Name.toLowerCase() === termToFind.toLowerCase()));\r\n }\r\n else {\r\n filteredTerms = terms.filter(t => { return termsToFind.some(termToFind => t.Name.toLowerCase().indexOf(termToFind.toLowerCase()) > -1); });\r\n }\r\n\r\n filteredTerms.forEach(term => {\r\n returnTerms.push(this.convertTermToPickerTerm(term));\r\n });\r\n }\r\n } catch (error) {\r\n logger(error, \"SPTermStorePickerService.ts (findTerms)\");\r\n }\r\n return returnTerms;\r\n }\r\n\r\n public async searchTermsByTermId(searchText: string, termId: string): Promise {\r\n const { useSessionStorage } = this.props;\r\n let childTerms = this.getTermsById(termId, useSessionStorage);\r\n if (childTerms) {\r\n return this.searchTermsBySearchText(childTerms, searchText);\r\n } else {\r\n const { termsetNameOrID, hideDeprecatedTags, hideTagsNotAvailableForTagging } = this.props;\r\n\r\n const terms = await this.getAllTermsByAnchorId(\r\n termsetNameOrID,\r\n termId,\r\n hideDeprecatedTags,\r\n hideTagsNotAvailableForTagging,\r\n useSessionStorage\r\n );\r\n\r\n if (terms) {\r\n return this.searchTermsBySearchText(terms, searchText);\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Retrieve all terms for the given term set and anchorId\r\n */\r\n public async getAllTermsByAnchorId(\r\n termsetNameOrID: string,\r\n anchorId: string,\r\n hideDeprecatedTags?: boolean,\r\n hideTagsNotAvailableForTagging?: boolean,\r\n useSessionStorage: boolean = true\r\n ): Promise {\r\n let returnTerms: IPickerTerm[] = [];\r\n const childTerms = this.getTermsById(anchorId, useSessionStorage);\r\n if (childTerms) {\r\n return childTerms;\r\n }\r\n\r\n let termSet = await this.getAllTerms(termsetNameOrID, hideDeprecatedTags, hideTagsNotAvailableForTagging);\r\n let terms = termSet.Terms;\r\n if (anchorId) {\r\n const anchorTerm = terms.filter(t => t.Id.toLowerCase() === anchorId.toLowerCase()).shift();\r\n if (anchorTerm) {\r\n // Append ';' separator, as a suffix to anchor term path.\r\n const anchorTermPath = `${anchorTerm.PathOfTerm};`;\r\n const anchorTerms: ITerm[] = terms.filter(\r\n t => t.PathOfTerm.substring(0, anchorTermPath.length) === anchorTermPath && t.Id !== anchorTerm.Id\r\n );\r\n\r\n anchorTerms.forEach(term => {\r\n returnTerms.push(this.convertTermToPickerTerm(term));\r\n });\r\n\r\n try {\r\n if (useSessionStorage && window.sessionStorage) {\r\n window.sessionStorage.setItem(anchorId, JSON.stringify(returnTerms));\r\n }\r\n } catch (error) {\r\n // do nothing\r\n }\r\n }\r\n } else {\r\n terms.forEach(term => {\r\n returnTerms.push(this.convertTermToPickerTerm(term));\r\n });\r\n }\r\n\r\n return returnTerms;\r\n }\r\n\r\n private async searchTermsByTermSet(searchText: string): Promise {\r\n return new Promise(resolve => {\r\n this.getTermStores().then(async termStore => {\r\n let TermSetId = this.props.termsetNameOrID;\r\n if (!this.isGuid(TermSetId)) {\r\n // Get the ID of the provided term set name\r\n const crntTermSet = this.getTermSetId(termStore, TermSetId);\r\n if (crntTermSet) {\r\n TermSetId = this.cleanGuid(crntTermSet.Id);\r\n } else {\r\n resolve(null);\r\n return [];\r\n }\r\n }\r\n if (termStore === undefined || termStore.length === 0) {\r\n resolve(null);\r\n return [];\r\n }\r\n\r\n let data = {\r\n start: searchText,\r\n lcid: this.props.context.regionalLocalId,\r\n sspList: this.cleanGuid(termStore[0].Id),\r\n termSetList: TermSetId,\r\n anchorId: this.props.anchorId ? this.props.anchorId : EmptyGuid,\r\n isSpanTermStores: false,\r\n isSpanTermSets: false,\r\n isIncludeUnavailable: this.props.hideTagsNotAvailableForTagging === true,\r\n isIncludeDeprecated: this.props.hideDeprecatedTags === true,\r\n isAddTerms: false,\r\n isIncludePathData: false,\r\n excludeKeyword: false,\r\n excludedTermset: EmptyGuid\r\n };\r\n\r\n const accessToken = await authModule.getSharePointAccessToken();\r\n return axiosRetryPost(this.suggestionServiceUrl, JSON.stringify(data), {\r\n headers: {\r\n Authorization: `Bearer ${accessToken}`,\r\n Accept: \"application/json\",\r\n \"Content-Type\": \"application/json\"\r\n }\r\n })\r\n .then((response: any) => {\r\n const groups = response?.data.d.Groups;\r\n if (groups && groups.length > 0) {\r\n // Retrieve the term collection results\r\n const terms: ISuggestTerm[] = groups[0].Suggestions;\r\n if (terms.length > 0) {\r\n // Retrieve all terms\r\n\r\n let returnTerms: IPickerTerm[] = terms.map((term: ISuggestTerm) =>\r\n this.convertSuggestTermToPickerTerm(term, TermSetId)\r\n );\r\n resolve(returnTerms);\r\n return;\r\n }\r\n }\r\n\r\n resolve([]);\r\n });\r\n });\r\n });\r\n }\r\n\r\n private isGuid(strGuid: string): boolean {\r\n return /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/.test(strGuid);\r\n }\r\n\r\n private sortTerms(terms: ITerm[]) {\r\n // Start sorting by depth\r\n let newTermsOrder: ITerm[] = [];\r\n let itemsToSort = true;\r\n let pathLevel = 1;\r\n while (itemsToSort) {\r\n // Get terms for the current level\r\n let crntTerms = terms.filter(term => term.PathDepth === pathLevel);\r\n if (crntTerms && crntTerms.length > 0) {\r\n crntTerms = crntTerms.sort(this.sortTermByPath);\r\n\r\n if (pathLevel !== 1) {\r\n crntTerms = crntTerms.reverse();\r\n for (const crntTerm of crntTerms) {\r\n const pathElms = crntTerm.PathOfTerm.split(\";\");\r\n // Last item is not needed for parent path\r\n pathElms.pop();\r\n // Find the parent item and add the new item\r\n const idx = findIndex(newTermsOrder, term => term.PathOfTerm === pathElms.join(\";\"));\r\n if (idx !== -1) {\r\n newTermsOrder.splice(idx + 1, 0, crntTerm);\r\n } else {\r\n // Push the item at the end if the parent couldn't be found\r\n newTermsOrder.push(crntTerm);\r\n }\r\n }\r\n } else {\r\n newTermsOrder = crntTerms;\r\n }\r\n\r\n ++pathLevel;\r\n } else {\r\n itemsToSort = false;\r\n }\r\n }\r\n return newTermsOrder;\r\n }\r\n\r\n private sortTermByPath(a: ITerm, b: ITerm) {\r\n if (a.CustomSortOrderIndex === -1) {\r\n if (a.PathOfTerm.toLowerCase() < b.PathOfTerm.toLowerCase()) {\r\n return -1;\r\n }\r\n if (a.PathOfTerm.toLowerCase() > b.PathOfTerm.toLowerCase()) {\r\n return 1;\r\n }\r\n return 0;\r\n } else {\r\n if (a.CustomSortOrderIndex < b.CustomSortOrderIndex) {\r\n return -1;\r\n }\r\n if (a.CustomSortOrderIndex > b.CustomSortOrderIndex) {\r\n return 1;\r\n }\r\n return 0;\r\n }\r\n }\r\n\r\n public cleanGuid(guid: string): string {\r\n if (guid !== undefined) {\r\n return guid\r\n .replace(\"/Guid(\", \"\")\r\n .replace(\"/\", \"\")\r\n .replace(\")\", \"\");\r\n } else {\r\n return \"\";\r\n }\r\n }\r\n\r\n private convertTermToPickerTerm(term: ITerm): IPickerTerm {\r\n return {\r\n key: this.cleanGuid(term.Id),\r\n name: term.Name,\r\n path: term.PathOfTerm,\r\n termSet: this.cleanGuid(term.TermSet.Id),\r\n termSetName: term.TermSet.Name\r\n };\r\n }\r\n\r\n private convertSuggestTermToPickerTerm(term: ISuggestTerm, termSetId: string): IPickerTerm {\r\n let path: string = \"\";\r\n let termSetName: string = \"\";\r\n if (term.Paths && term.Paths.length > 0) {\r\n const fullPath = term.Paths[0].replace(/^\\[/, \"\").replace(/\\]$/, \"\");\r\n const fullPathParts = fullPath.split(\":\");\r\n path = fullPathParts.join(\";\") + \";\" + term.DefaultLabel;\r\n termSetName = fullPathParts[0];\r\n }\r\n return {\r\n key: this.cleanGuid(term.Id),\r\n name: term.DefaultLabel,\r\n path: path,\r\n termSet: termSetId ? termSetId : EmptyGuid, // termSetId not returned by API, but we can get it from the payload\r\n termSetName: termSetName\r\n };\r\n }\r\n}\r\n","import authModule from \"../../../../utilities/AuthModule\";\r\nimport { axiosRetryGet } from \"../../../../utilities/AxiosRetryUtil\";\r\n\r\nexport class ListItemRepository {\r\n constructor(protected SiteUrl: string) { }\r\n\r\n public async getListItemsByFilterClause(\r\n filterText: string,\r\n listId: string,\r\n internalColumnName: string,\r\n keyInternalColumnName?: string,\r\n webUrl?: string,\r\n top?: number\r\n ): Promise {\r\n let returnItems: any[];\r\n try {\r\n const webAbsoluteUrl = !webUrl ? this.SiteUrl : webUrl;\r\n const apiUrl = `${webAbsoluteUrl}/_api/web/lists('${listId}')/items?$select=${keyInternalColumnName ||\r\n \"Id\"},${internalColumnName}&$filter=${filterText}&$top=${top}`;\r\n\r\n const accessToken = await authModule.getSharePointAccessToken();\r\n const result = await axiosRetryGet(apiUrl, {\r\n headers: { Authorization: `Bearer ${accessToken}` }\r\n });\r\n if (result?.data && result?.data.value && result?.data.value.length > 0) {\r\n return result?.data.value;\r\n }\r\n\r\n return [];\r\n } catch (error) {\r\n return Promise.reject(error);\r\n }\r\n }\r\n}\r\n","import { OfficeServiceEnum } from \"../../components/enums/OfficeService\";\r\nimport { OfficePersistor } from \"../OfficePersistor\";\r\nimport { OutlookPersistor } from \"../OutlookPersistor\";\r\nimport { IPersistor } from \"../../interfaces/IPersistor\";\r\nimport { IMailSendPayload } from \"../../interfaces/IMailSendPayload\";\r\nimport { ModeEnum } from \"../../components/enums/modeEnum\";\r\n\r\nexport class PersistorFactory {\r\n static create(serviceType: OfficeServiceEnum, mailSendPayload: IMailSendPayload, mode: ModeEnum, isFileSystemFileUpload: boolean, disableMailCategorization?: boolean): IPersistor {\r\n switch (serviceType) {\r\n case OfficeServiceEnum.outlook:\r\n return new OutlookPersistor(mailSendPayload, mode, disableMailCategorization ?? false);\r\n default:\r\n return new OfficePersistor(isFileSystemFileUpload);\r\n }\r\n }\r\n}\r\n","import { IButtonProps, IButtonStyles, IDatePickerStyles, IIconProps, ITextFieldStyles } from \"@fluentui/react\";\r\n\r\nexport const datePickerStyles: Partial = { icon: { left: \"4px\", right: \"unset\" } };\r\nexport const textFieldStyles: Partial = { suffix: { padding: \"0 4px\" }, field: { paddingLeft: \"34px\" } };\r\nexport const iconButtonStyles: Partial = { root: { height: 'auto' }, icon: { fontSize: '12px' } };\r\nexport const iconButtonProps: IIconProps = { iconName: 'Clear' };\r\nexport const clearButtonProps: IButtonProps = { ariaLabel: 'Clear text' };","import { v4 as uuidv4 } from \"uuid\";\r\nimport { getLastSplittedStringItem, removeExtension } from \"../src/taskpane/components/helpers/stringHelper\";\r\nimport { IFileSaveResult } from \"../src/taskpane/components/_v2/redux/api/local/api-local-interfaces\";\r\nimport { IFileToUpload } from \"../src/taskpane/interfaces/IFileToUpload\";\r\nimport { logger } from \"./logger\";\r\nimport { IPageSettings } from \"../src/taskpane/interfaces/IPageSettings\";\r\nimport { ComponentTypes, DirectoryTreeType } from \"../src/taskpane/config/config\";\r\nimport { resetContentManagerMoveTo, setContentManagerMoveTo, setContentManagerMoveToCopyJobResults, setContentManagerMoveToError } from \"../src/taskpane/redux/modules/contentManagerDirectory\";\r\nimport { IContentManagerMoveTo } from \"../src/taskpane/redux/models/reduxModels\";\r\nimport { ContentManagerCopyMoveModeEnum } from \"../src/taskpane/components/enums/ContentManagerCopyMoveModeEnum\";\r\nimport { Dispatch } from \"@reduxjs/toolkit\";\r\nimport authModule from \"./AuthModule\";\r\nimport { createCopyJobs, getListSettings } from \"../src/taskpane/services/SharePointRestServices\";\r\nimport { ICreateCopyJobsRequest } from \"../src/taskpane/interfaces/ICreateCopyJobsRequest\";\r\nimport { apiCreateFolders, apiUpload } from \"../src/taskpane/services/ApiService\";\r\nimport { getItemCustomSelect, getSharePointSite } from \"../src/taskpane/services/GraphService\";\r\nimport { validSaveAsPdfExtentions } from \"../src/taskpane/config/constants\";\r\nimport { OneDriveUrlHelper } from \"../src/taskpane/components/helpers/oneDriveUrlHelper\";\r\n\r\nexport interface IFileSystemFile {\r\n id: string;\r\n file: File;\r\n}\r\n\r\nexport interface IFileSystemFolder {\r\n id: string;\r\n name: string;\r\n path: string;\r\n parentFolderId: string;\r\n serverRelativeUrl?: string;\r\n}\r\n\r\nexport interface IFileSystemFileSaveResult {\r\n success: boolean;\r\n name: string;\r\n}\r\n\r\nexport enum DragMode {\r\n files = 0,\r\n gridItems = 1\r\n}\r\n\r\nexport class DragAndDropHelper {\r\n public static isDroppedModeActive: boolean = false;\r\n public static fileEntries: IFileSystemFile[] = [];\r\n public static folderEntries: IFileSystemFolder[] = [];\r\n public static mode: DragMode = DragMode.files;\r\n public static canCreateFolder = true;\r\n\r\n public static readonly gridDataTransferType: string = \"griditem\";\r\n public static sourceDirectory: IPageSettings;\r\n public static destinationDirectory: IPageSettings;\r\n public static sourceServerRelPath: string;\r\n public static selectedGridItems: any = [];\r\n\r\n static validateDroppedGridItems(event: React.DragEvent, isGrid?: boolean, gridItem?: any, homeItem?: any, treeItem?: any): boolean {\r\n try {\r\n if (event.dataTransfer.items?.length > 0) {\r\n for (let i = 0; i < event.dataTransfer.items.length; i++) {\r\n if (event.dataTransfer.items[i].kind === \"string\" && event.dataTransfer.items[i].type === this.gridDataTransferType) {\r\n if (homeItem && this.sourceDirectory?.id !== undefined && (this.sourceDirectory?.id === homeItem?.driveId || this.sourceDirectory?.id === homeItem?.itemId || this.selectedGridItems.some(x => x[\".spItemUrl\"].includes(homeItem?.itemId)))) {\r\n return false;\r\n }\r\n if (isGrid && this.sourceDirectory?.id !== undefined && this.destinationDirectory?.id !== undefined && this.sourceDirectory?.id === this.destinationDirectory?.id) {\r\n return false;\r\n }\r\n if (gridItem) {\r\n if (this.selectedGridItems.some(x => x.ID === gridItem.ID)) {\r\n return false;\r\n }\r\n }\r\n if (treeItem && (treeItem.treeType === DirectoryTreeType.folder || treeItem.treeType === DirectoryTreeType.document)) {\r\n if ((this.sourceDirectory?.id === (treeItem?.id) || (this.selectedGridItems.some(x => x[\".spItemUrl\"].includes(treeItem.id)) && treeItem.id !== this.sourceDirectory?.parentId))) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n }\r\n }\r\n } catch (error) {\r\n logger(error, \"DragAndDropHelper.ts (validateDroppedGridItems)\");\r\n }\r\n return false;\r\n }\r\n\r\n static validateDroppedFiles(event: React.DragEvent): boolean {\r\n if (event.dataTransfer.items?.length > 0) {\r\n for (let i = 0; i < event.dataTransfer.items.length; i++) {\r\n if (event.dataTransfer.items[i].kind === \"file\") {\r\n this.mode = DragMode.files;\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n static async handleDroppedFiles(event: React.DragEvent, item?: any): Promise {\r\n let folderCreateEnabled = this.canCreateFolder;\r\n this.clear();\r\n this.isDroppedModeActive = true;\r\n const filesToUpload: IFileToUpload[] = [];\r\n try {\r\n const fileSystemEntries: FileSystemEntry[] = [];\r\n if (event.dataTransfer.items?.length > 0) {\r\n for (let i = 0; i < event.dataTransfer.items.length; i++) {\r\n const fileSystemEntry: FileSystemEntry = event.dataTransfer.items[i].webkitGetAsEntry();\r\n if (fileSystemEntry) {\r\n fileSystemEntries.push(fileSystemEntry);\r\n }\r\n }\r\n\r\n if (fileSystemEntries?.length > 0) {\r\n for (let i = 0; i < fileSystemEntries.length; i++) {\r\n await this.traverseFileTree(fileSystemEntries[i], filesToUpload);\r\n }\r\n }\r\n }\r\n } catch (error) {\r\n logger(error, \"DragAndDropHelper.ts (handleDroppedFiles)\");\r\n }\r\n\r\n if (item) {\r\n try {\r\n let itemCurrentDirectory: any;\r\n let siteUrl = \"\";\r\n if (Array.isArray(item.locations) && item.locations?.length > 0) {\r\n itemCurrentDirectory = item.locations[item.locations?.length - 1];\r\n siteUrl = itemCurrentDirectory.webUrl;\r\n } else {\r\n itemCurrentDirectory = item;\r\n\r\n if (item.parentId) {\r\n const sharePointSite = await getSharePointSite(item.parentId);\r\n siteUrl = sharePointSite?.webUrl;\r\n } else {\r\n siteUrl = itemCurrentDirectory.webUrl;\r\n }\r\n }\r\n\r\n const isOneDrive: boolean = itemCurrentDirectory.type == ComponentTypes.OneDrive || itemCurrentDirectory.type == ComponentTypes.OneDriveSubFolder;\r\n\r\n const accessToken = !isOneDrive\r\n ? await authModule.getSharePointAccessToken()\r\n : await authModule.getOneDriveAccessToken();\r\n\r\n const webUrl: string = !isOneDrive\r\n ? siteUrl\r\n : OneDriveUrlHelper.getSiteUrl(siteUrl);\r\n\r\n let listId: string;\r\n if (isOneDrive) {\r\n let driveId: string;\r\n let itemId: string;\r\n\r\n if (!itemCurrentDirectory.parentId) {\r\n driveId = itemCurrentDirectory.id;\r\n }\r\n else {\r\n driveId = itemCurrentDirectory.parentId;\r\n itemId = itemCurrentDirectory.id;\r\n }\r\n\r\n if (driveId) {\r\n const itemDetails = await getItemCustomSelect(await authModule.getGraphAccessToken(), driveId, itemId, \"sharepointIds\");\r\n if (itemDetails) {\r\n listId = itemDetails.sharepointIds?.listId;\r\n }\r\n }\r\n }\r\n else {\r\n listId = itemCurrentDirectory.sharePointListId;\r\n }\r\n\r\n const listSettings = await getListSettings(accessToken, webUrl, listId);\r\n\r\n folderCreateEnabled = listSettings ? listSettings.EnableFolderCreation : folderCreateEnabled\r\n } catch (error) {\r\n logger(error, \"DragAndDropHelper.ts (getListSettings)\");\r\n }\r\n }\r\n\r\n if (!folderCreateEnabled) {\r\n const rootFolder = filesToUpload.find(x => x.isFolder && !x.parentFolderId);\r\n\r\n const onlyFiles = filesToUpload.map(file => {\r\n if (!file.isFolder && !file.parentFolderId) {\r\n return file;\r\n }\r\n\r\n if (!file.isFolder && file.parentFolderId === rootFolder?.id) {\r\n let updatedFile = {\r\n ...file\r\n }\r\n delete updatedFile.parentFolderId;\r\n\r\n return updatedFile;\r\n }\r\n\r\n return null;\r\n }).filter(x => x);\r\n\r\n return this.reorderData(onlyFiles);\r\n }\r\n\r\n return this.reorderData(filesToUpload);\r\n }\r\n\r\n static handleSelectedFiles(event: React.ChangeEvent): IFileToUpload[] {\r\n this.clear();\r\n this.isDroppedModeActive = true;\r\n let filesToUpload: IFileToUpload[] = [];\r\n try {\r\n const files = (event.target as HTMLInputElement).files;\r\n if (files?.length > 0) {\r\n for (let i = 0; i < files.length; i++) {\r\n const file: File = files[i];\r\n const fileToUpload: IFileToUpload = this.getFileToUpload(file);\r\n\r\n if (file.webkitRelativePath?.length > 0) {\r\n let fileFolderList: string[] = file.webkitRelativePath.split(\"/\");\r\n fileFolderList.pop();\r\n\r\n const folderPath: string = \"/\" + fileFolderList.join(\"/\");\r\n const folderEntry: IFileSystemFolder = this.folderEntries?.find(folder => folder.path === folderPath);\r\n if (!folderEntry) {\r\n const index: number = fileFolderList.length - 1;\r\n\r\n let parentFolderId: string;\r\n if (this.folderEntries.length > 0) {\r\n parentFolderId = this.folderEntries[this.folderEntries.length - 1].id;\r\n }\r\n\r\n const folderToUpload: IFileToUpload = this.getFolderToUpload(fileFolderList[index], folderPath, parentFolderId);\r\n filesToUpload.push(folderToUpload);\r\n\r\n fileToUpload.parentFolderId = folderToUpload.id;\r\n }\r\n else {\r\n fileToUpload.parentFolderId = folderEntry.id;\r\n }\r\n }\r\n\r\n filesToUpload.push(fileToUpload);\r\n }\r\n }\r\n } catch (error) {\r\n logger(error, \"DragAndDropHelper.ts (handleSelectedFiles)\");\r\n }\r\n return this.reorderData(filesToUpload);\r\n }\r\n\r\n static async handleGridMove(dispatch: Dispatch, siteUrl: string, workingDirectories: IPageSettings[], isInOneDrive: boolean, destSerRelPathOverride?: string) {\r\n try {\r\n const moveToOperation: IContentManagerMoveTo = {\r\n mode: ContentManagerCopyMoveModeEnum.Move,\r\n error: \"\",\r\n moveToEnabled: false,\r\n workingDirectories,\r\n siteUrl,\r\n sourceSiteUrl: this.sourceDirectory.webUrl,\r\n sourceServerRelPath: this.sourceServerRelPath,\r\n busyMovingFiles: true,\r\n isMoveInProgress: true,\r\n copyJobResults: [],\r\n isMoveComplete: false,\r\n isMoveCancelled: false,\r\n sourceDirectory: this.sourceDirectory,\r\n destinationDirectory: this.destinationDirectory,\r\n progressCountCompleted: 0,\r\n progressCountTotal: this.selectedGridItems.length,\r\n selectedFiles: this.selectedGridItems.map(selectedFile => ({ ...selectedFile, isBusy: true }))\r\n }\r\n dispatch(setContentManagerMoveTo(moveToOperation));\r\n\r\n const copyJobRequest: ICreateCopyJobsRequest = {\r\n siteUrl,\r\n accessToken: isInOneDrive ? await authModule.getOneDriveAccessToken() : await authModule.getSharePointAccessToken(),\r\n files: this.selectedGridItems,\r\n sourceSiteUrl: moveToOperation.sourceSiteUrl,\r\n sourceServerRelPath: moveToOperation.sourceServerRelPath,\r\n destinationServerRelPath: destSerRelPathOverride ? destSerRelPathOverride : DragAndDropHelper.destinationDirectory.serverRelativePath,\r\n isMoveMode: true\r\n }\r\n\r\n const copyJobResults = await createCopyJobs(copyJobRequest);\r\n if (copyJobResults?.success) {\r\n dispatch(setContentManagerMoveToCopyJobResults(copyJobResults.jobs));\r\n } else {\r\n dispatch(resetContentManagerMoveTo());\r\n dispatch(setContentManagerMoveToError(copyJobResults.error));\r\n }\r\n } catch (error) {\r\n logger(error, \"DragAndDropHelper.tsx (handleGridMove(createCopyJobs))\");\r\n dispatch(resetContentManagerMoveTo());\r\n }\r\n\r\n this.resetGridItems();\r\n }\r\n\r\n static async createFolders(accessToken: string, siteUrl: string, parentUrl: string, listId: string, autoFolderCreation: boolean, foldersToUpload: IFileToUpload[]): Promise {\r\n if (this.folderEntries?.length > 0 && foldersToUpload?.length > 0) {\r\n const folderSystemEntriesToUpload: IFileToUpload[] = foldersToUpload.filter(f => f.isFileSystemEntry && f.isFolder);\r\n if (folderSystemEntriesToUpload.length > 0) {\r\n const folders: IFileSystemFolder[] = folderSystemEntriesToUpload\r\n .map(folderEntry => this.folderEntries.find(f => f.id === folderEntry.id))\r\n .filter(folderEntry => folderEntry);\r\n\r\n try {\r\n this.folderEntries = await apiCreateFolders(accessToken, siteUrl, parentUrl, listId, autoFolderCreation, folders);\r\n } catch (error) {\r\n logger(error, \"DragAndDropHelper.ts (createFolders)\");\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n static async uploadDroppedFiles(accountId: string, filesToUpload: IFileToUpload[], folderEntriesToUpload: IFileSystemFolder[]): Promise {\r\n if (this.fileEntries?.length > 0 && filesToUpload?.length > 0) {\r\n const fileSystemEntriesToUpload: IFileToUpload[] = filesToUpload.filter(f => f.isFileSystemEntry && !f.isFolder);\r\n if (fileSystemEntriesToUpload.length > 0) {\r\n const fileEntriesToUpload: IFileSystemFile[] = [...this.fileEntries];\r\n const fileSystemUploadResults = await Promise.all(fileSystemEntriesToUpload.map(async fileEntry => {\r\n const fileSystemFile: IFileSystemFile = fileEntriesToUpload.find(f => f.id === fileEntry.id && f.file);\r\n if (fileSystemFile) {\r\n try {\r\n const formData = new FormData();\r\n formData.set(\"file\", fileSystemFile.file);\r\n\r\n // const config: AxiosRequestConfig = {\r\n // onUploadProgress: function (progressEvent: any) {\r\n // const percentCompleted = progressEvent.loaded / progressEvent.total;\r\n // setPercentComplete(+percentCompleted.toFixed(2)); \r\n // if (percentCompleted === 1) {\r\n // setUploadStatus(UploadStatus.Finalizing);\r\n // }\r\n // },\r\n // };\r\n\r\n // await axiosRetryPost(uploadUrl, formData, config, false);\r\n\r\n let path: string;\r\n if (fileEntry.parentFolderId) {\r\n const folder: IFileSystemFolder = folderEntriesToUpload?.find(f => f.id === fileEntry.parentFolderId);\r\n if (folder) {\r\n path = `&path=${encodeURIComponent(folder.path)}`;\r\n }\r\n }\r\n\r\n await apiUpload(accountId, formData, path);\r\n return { success: true, name: `${fileEntry.name}.${fileEntry.extension}` } as IFileSystemFileSaveResult;\r\n } catch (error) {\r\n logger(error, \"DragAndDropHelper.ts (uploadDroppedFiles)\");\r\n }\r\n }\r\n return { success: false, name: `${fileEntry.name}.${fileEntry.extension}` } as IFileSystemFileSaveResult;\r\n }));\r\n\r\n // this.reset();\r\n return {\r\n success: !fileSystemUploadResults.some(result => !result.success),\r\n message: \"\",\r\n succeededFiles: fileSystemUploadResults.filter(res => res.success).map(res => ({ name: res.name, uniqueId: \"\" })),\r\n failedFileNames: fileSystemUploadResults.filter(res => !res.success).map(res => res.name)\r\n } as IFileSaveResult;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n static reset(): void {\r\n this.isDroppedModeActive = false;\r\n this.clear();\r\n }\r\n\r\n static resetGridItems(): void {\r\n this.sourceDirectory = undefined;\r\n this.destinationDirectory = undefined;\r\n this.sourceServerRelPath = \"\";\r\n this.selectedGridItems = [];\r\n }\r\n\r\n private static clear(): void {\r\n this.fileEntries = [];\r\n this.folderEntries = [];\r\n }\r\n\r\n private static async traverseFileTree(item: FileSystemEntry, filesToUpload: IFileToUpload[], parentFolderId?: string): Promise {\r\n if (item.isFile) {\r\n await new Promise(resolve => {\r\n (item as FileSystemFileEntry).file((file: File) => {\r\n const fileToUpload: IFileToUpload = this.getFileToUpload(file, parentFolderId);\r\n filesToUpload.push(fileToUpload);\r\n resolve();\r\n });\r\n });\r\n }\r\n else if (item.isDirectory) {\r\n const folderToUpload: IFileToUpload = this.getFolderToUpload(item.name, item.fullPath, parentFolderId);\r\n filesToUpload.push(folderToUpload);\r\n\r\n const directoryReader: FileSystemDirectoryReader = (item as FileSystemDirectoryEntry).createReader();\r\n await new Promise(resolve => {\r\n directoryReader.readEntries(async (entries: FileSystemEntry[]) => {\r\n for (let i = 0; i < entries.length; i++) {\r\n await this.traverseFileTree(entries[i], filesToUpload, folderToUpload.id);\r\n }\r\n resolve();\r\n });\r\n });\r\n }\r\n }\r\n\r\n private static getFileToUpload(file: File, parentFolderId?: string): IFileToUpload {\r\n const id: string = uuidv4();\r\n const name: string = removeExtension(file.name);\r\n const extension: string = getLastSplittedStringItem(file.name, /[\\s.]+/)?.trim().toLowerCase();\r\n\r\n const fileToUpload: IFileToUpload = {\r\n id,\r\n ewsId: null,\r\n name,\r\n extension,\r\n isAttachment: false,\r\n isSelected: true,\r\n isDuplicate: false,\r\n originalName: name,\r\n lastModifiedDateTime: new Date(file.lastModified).toISOString(),\r\n isFileSystemEntry: true,\r\n parentFolderId: parentFolderId,\r\n canSaveAsPDF: validSaveAsPdfExtentions.some(ext => ext === extension)\r\n }\r\n\r\n this.fileEntries.push({ id, file } as IFileSystemFile);\r\n\r\n return fileToUpload;\r\n }\r\n\r\n private static getFolderToUpload(name: string, path?: string, parentFolderId?: string): IFileToUpload {\r\n const id: string = uuidv4();\r\n const folderToUpload: IFileToUpload = {\r\n id,\r\n ewsId: null,\r\n name,\r\n extension: null,\r\n isAttachment: false,\r\n isSelected: true,\r\n isDuplicate: false,\r\n isFileSystemEntry: true,\r\n isFolder: true,\r\n folderPath: path,\r\n parentFolderId: parentFolderId\r\n };\r\n\r\n this.folderEntries.push({ id, name, path, parentFolderId } as IFileSystemFolder);\r\n\r\n return folderToUpload;\r\n }\r\n\r\n private static reorderData = (data: IFileToUpload[]) => {\r\n const orderedList: IFileToUpload[] = []\r\n data.forEach(file => {\r\n if (file.isFolder) {\r\n orderedList.push(file);\r\n const folderFiles = data.filter(x => !x.isFolder && x.parentFolderId === file.id);\r\n orderedList.push(...folderFiles);\r\n } else if (!file.isFolder && !file.parentFolderId) {\r\n orderedList.push(file);\r\n }\r\n });\r\n return orderedList;\r\n }\r\n}","import { removeExtension } from \"../src/taskpane/components/helpers/stringHelper\";\r\nimport { SiteItem, documentLibraryItem } from \"../src/taskpane/redux/models/reduxModels\";\r\nimport { getItemCustomSelect, getListItemCustomSelect, getSharePointSite } from \"../src/taskpane/services/GraphService\";\r\nimport { getItemVersions, getListFields } from \"../src/taskpane/services/SharePointRestServices\";\r\nimport authModule from \"./AuthModule\";\r\nimport { logger } from \"./logger\";\r\n\r\nconst fileNameInternalName: string = \"FileLeafRef\";\r\nexport const versionLabelInternalName: string = \"VersionLabel\";\r\n\r\nexport const getFileNameDownloadTemplateAvailable = (siteInfo: SiteItem[]): boolean => {\r\n if (Array.isArray(siteInfo) && siteInfo.length > 0) {\r\n const documentLibraries: documentLibraryItem[] = siteInfo.reduce((acc, current) => [...acc, ...current.documentLibraries], []);\r\n if (documentLibraries?.some(lib => lib.fileNameDownloadFormat?.trim())) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nexport const getFileNameDownloadTemplate = (siteInfo: SiteItem[], siteDisplayName: string, documentLibraryDisplayName: string): string | null | undefined => {\r\n if (Array.isArray(siteInfo) && siteInfo.length > 0) {\r\n try {\r\n const sites: SiteItem[] = siteInfo.filter(site => site.displayName?.trim().toLowerCase() === siteDisplayName?.trim().toLowerCase());\r\n const documentLibraries: documentLibraryItem[] = sites.reduce((acc, current) => [...acc, ...current.documentLibraries], []);\r\n const documentLibrary: documentLibraryItem = documentLibraries.find(item => item.title?.trim().toLowerCase() === documentLibraryDisplayName?.trim().toLowerCase());\r\n return documentLibrary?.fileNameDownloadFormat?.trim();\r\n } catch (error) {\r\n logger(error, \"FileNameDownloadTemplateHelper.ts (getFileNameDownloadTemplate)\");\r\n }\r\n }\r\n return null;\r\n};\r\n\r\nexport const getWildcardValues = (templateString: string): string[] => {\r\n const widcardValues: string[] = [];\r\n\r\n templateString?.split(\"<<[\").forEach(s => {\r\n const endIndex: number = s?.indexOf(\"]>>\");\r\n if (endIndex !== -1) {\r\n const wildcardValue: string = s.substring(0, endIndex)?.trim();\r\n if (wildcardValue) {\r\n widcardValues.push(s.substring(0, endIndex)?.trim());\r\n }\r\n }\r\n });\r\n\r\n return widcardValues;\r\n}\r\n\r\nexport const getFilenameFromTemplate = async (siteInfo: SiteItem[], driveId: string, itemId: string, siteUrl: string, listId: string, itemUniqueId: string, overrideExtension?: string) => {\r\n let fileName: string;\r\n try {\r\n if (getFileNameDownloadTemplateAvailable(siteInfo)) {\r\n const { siteDisplayName, libraryDisplayName } = await getContainerDisplayNames(driveId, itemId);\r\n const fileNameTemplateString: string = siteDisplayName && libraryDisplayName && getFileNameDownloadTemplate(siteInfo, siteDisplayName, libraryDisplayName);\r\n let wildcardValues: string[];\r\n if (fileNameTemplateString) {\r\n wildcardValues = getWildcardValues(fileNameTemplateString);\r\n if (fileNameTemplateString && Array.isArray(wildcardValues) && wildcardValues.length > 0) {\r\n const { listFields, listItem } = await getItemDetails(siteUrl, listId, itemUniqueId);\r\n if (listFields && listItem) {\r\n fileName = fileNameTemplateString;\r\n wildcardValues.forEach(wildcardValue => {\r\n const field = wildcardValue === versionLabelInternalName\r\n ? { InternalName: versionLabelInternalName }\r\n : listFields.value.find(x => x.Title === wildcardValue || x.InternalName === wildcardValue);\r\n\r\n fileName = fileName.replaceAll(`<<[${wildcardValue}]>>`, getItemFieldTextValue(listItem, field) ?? \"\");\r\n });\r\n fileName += \".\" + (overrideExtension ?? listItem[\"File_x005f_x0020_x005f_Type\"]);\r\n }\r\n }\r\n }\r\n }\r\n } catch (error) {\r\n logger(error, \"FileNameDownloadTemplateHelper.ts (getFilenameFromTemplate)\");\r\n }\r\n return fileName;\r\n}\r\n\r\nexport const getItemCurrentVersion = async (accessToken: string, siteUrl: string, listId: string, itemUniqueId: string) => {\r\n try {\r\n const itemVersions = (await getItemVersions(accessToken, siteUrl, listId, itemUniqueId))?.value;\r\n if (Array.isArray(itemVersions)) {\r\n return itemVersions.find(v => v.IsCurrentVersion);\r\n }\r\n } catch (error) {\r\n logger(error, \"FileNameDownloadTemplateHelper.ts (getItemCurrentVersion)\");\r\n }\r\n return null;\r\n}\r\n\r\nexport const getItemFieldTextValue = (item: any, field: any): string | null => {\r\n if (item && field) {\r\n try {\r\n const fieldType: string = field.TypeAsString;\r\n const fieldValue = item[field.InternalName] ?? item[field.InternalName?.replaceAll(\"_\", \"_x005f_\")];\r\n\r\n if (field.InternalName === fileNameInternalName) {\r\n return removeExtension(fieldValue);\r\n }\r\n\r\n if (!fieldType || fieldType === \"Text\" || fieldType === \"Note\" || fieldType === \"Choice\") {\r\n return fieldValue;\r\n }\r\n if (fieldType === \"MultiChoice\") {\r\n if (Array.isArray(fieldValue)) {\r\n return fieldValue.map(val => val).join(\" - \");\r\n }\r\n }\r\n if (fieldType === \"TaxonomyFieldType\") {\r\n return fieldValue?.Label;\r\n }\r\n if (fieldType === \"TaxonomyFieldTypeMulti\") {\r\n if (Array.isArray(fieldValue)) {\r\n return fieldValue.map(val => val.Label).join(\" - \");\r\n }\r\n }\r\n if (fieldType === \"User\" || fieldType === \"UserMulti\") {\r\n if (Array.isArray(fieldValue)) {\r\n return fieldValue.map(val => val.title).join(\" - \");\r\n }\r\n }\r\n if (fieldType === \"Lookup\" || fieldType === \"LookupMulti\") {\r\n if (Array.isArray(fieldValue)) {\r\n return fieldValue.map(val => val.lookupValue).join(\" - \");\r\n }\r\n }\r\n if (fieldType === \"URL\") {\r\n return item[`${field.InternalName}.desc`];\r\n }\r\n } catch (error) {\r\n logger(error, \"FileNameDownloadTemplateHelper.ts (getItemFieldTextValue)\");\r\n }\r\n }\r\n return null;\r\n}\r\n\r\nconst getContainerDisplayNames = async (driveId: string, itemId: string): Promise<{ siteDisplayName: string; libraryDisplayName: string; }> => {\r\n const [siteDisplayName, libraryDisplayName] = await Promise.all([\r\n (async () => {\r\n const siteId: string = (await getListItemCustomSelect(driveId, itemId, \"parentReference\"))?.parentReference?.siteId;\r\n if (siteId) {\r\n return (await getSharePointSite(siteId))?.name;\r\n }\r\n return null;\r\n })(),\r\n (async () => {\r\n return (await getItemCustomSelect(await authModule.getGraphAccessToken(), driveId, null, \"name\"))?.name;\r\n })()\r\n ]);\r\n\r\n return { siteDisplayName, libraryDisplayName };\r\n}\r\n\r\nconst getItemDetails = async (siteUrl: string, listId: string, itemUniqueId: string): Promise<{ listFields: any; listItem: any }> => {\r\n const accessToken: string = await authModule.getSharePointAccessToken();\r\n const [listFields, listItem] = await Promise.all([\r\n getListFields(accessToken, siteUrl, listId),\r\n getItemCurrentVersion(accessToken, siteUrl, listId, itemUniqueId)\r\n ]);\r\n return { listFields, listItem };\r\n}","import React, { useEffect, useRef } from \"react\";\r\n\r\nconst useDidMountEffect = (effect: React.EffectCallback, deps?: React.DependencyList) => {\r\n const didMount = useRef(false);\r\n\r\n useEffect(() => {\r\n if (didMount.current) return effect();\r\n else didMount.current = true;\r\n }, deps);\r\n};\r\n\r\nexport default useDidMountEffect;","import { FolderTypeEnum } from \"../src/taskpane/components/enums/FolderTypeEnum\";\r\nimport { axiosRetryGet, axiosRetryPatch } from \"./AxiosRetryUtil\";\r\nimport { logger } from \"./logger\";\r\n\r\nexport enum CategoryDisplayNames {\r\n Teams = \"Saved to Teams\",\r\n SharePoint = \"Saved to SharePoint\",\r\n OneDrive = \"Saved to OneDrive\",\r\n}\r\n\r\nexport interface IMailSettingsDto {\r\n accountId: string,\r\n encryptedPayload: string,\r\n}\r\n\r\nexport class OutlookUtils {\r\n\r\n private static readonly savedToTeamsCategory: Office.CategoryDetails = {\r\n \"displayName\": CategoryDisplayNames.Teams,\r\n \"color\": \"Preset8\" //Purple\r\n };\r\n\r\n private static readonly savedToSharePointCategory: Office.CategoryDetails = {\r\n \"displayName\": CategoryDisplayNames.SharePoint,\r\n \"color\": \"Preset11\" //Steel\r\n };\r\n\r\n private static readonly savedToOneDriveCategory: Office.CategoryDetails = {\r\n \"displayName\": CategoryDisplayNames.OneDrive,\r\n \"color\": \"Preset7\" //Blue\r\n };\r\n\r\n static masterCategoriesToAdd: Office.CategoryDetails[] = [\r\n OutlookUtils.savedToTeamsCategory,\r\n OutlookUtils.savedToSharePointCategory,\r\n OutlookUtils.savedToOneDriveCategory\r\n ];\r\n\r\n public static getOutlookToken = (): Promise => {\r\n return new Promise((resolve, reject) => {\r\n Office.context.mailbox.getCallbackTokenAsync({ isRest: true }, result => {\r\n if (result.status === Office.AsyncResultStatus.Succeeded) {\r\n resolve(result.value);\r\n } else {\r\n reject(result.error);\r\n }\r\n });\r\n });\r\n }\r\n\r\n public static getRestURL = async (): Promise => {\r\n let restURL: string;\r\n try {\r\n if (Office.context?.mailbox?.item?.getSharedPropertiesAsync) {\r\n // In Windows, Mac, and the web client, this indicates a shared item so use SharedProperties properties to construct the REST URL.\r\n // Add-ins don't activate on shared items in mobile so no need to handle.\r\n restURL = await new Promise((resolve, reject) => {\r\n const timeout = setTimeout(() => {\r\n reject(\"getSharedPropertiesAsync timeout\");\r\n }, 1500);\r\n Office.context.mailbox.item.getSharedPropertiesAsync((result) => {\r\n clearTimeout(timeout);\r\n if (result.status === Office.AsyncResultStatus.Succeeded) {\r\n const sharedProperties: Office.SharedProperties = result.value;\r\n resolve(sharedProperties.targetRestUrl + \"/v2.0/users/\" + sharedProperties.targetMailbox);\r\n } else {\r\n reject(result.error);\r\n }\r\n });\r\n });\r\n }\r\n } catch (error) {\r\n logger(error, \"OutlookUtils.ts (getRestURL)\");\r\n }\r\n\r\n if (!restURL) {\r\n // restURL = Office.context.mailbox.restUrl + \"/v2.0/me\";\r\n restURL = Office.context.mailbox.restUrl + \"/v2.0/users/\" + Office.context.mailbox.userProfile.emailAddress;\r\n }\r\n\r\n return restURL;\r\n }\r\n\r\n public static getEWSToken = (): Promise => {\r\n const hostName: string = Office.context?.mailbox?.diagnostics?.hostName;\r\n if (hostName === \"OutlookIOS\" || hostName === \"OutlookAndroid\") {\r\n return new Promise(resolve => resolve(null));\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n Office.context.mailbox.getCallbackTokenAsync(result => {\r\n if (result.status === Office.AsyncResultStatus.Succeeded) {\r\n resolve(result.value);\r\n } else {\r\n reject(result.error);\r\n }\r\n });\r\n });\r\n }\r\n\r\n public static getEWSURL = (): string => {\r\n const hostName: string = Office.context?.mailbox?.diagnostics?.hostName;\r\n if (hostName === \"OutlookIOS\" || hostName === \"OutlookAndroid\") {\r\n return null;\r\n }\r\n return Office.context.mailbox.ewsUrl;\r\n }\r\n\r\n private static getMasterCategories = async (): Promise => {\r\n try {\r\n return await new Promise((resolve, reject) => {\r\n Office.context.mailbox.masterCategories.getAsync((result) => {\r\n if (result.status === Office.AsyncResultStatus.Succeeded) {\r\n resolve(result.value);\r\n } else {\r\n reject(result.error);\r\n }\r\n });\r\n });\r\n } catch (error) {\r\n logger(error, \"OutlookUtils.ts (getMasterCategories)\");\r\n return null;\r\n }\r\n }\r\n\r\n private static addMasterCategories = async (categories: Office.CategoryDetails[]): Promise => {\r\n try {\r\n // Api not supported for shared items.\r\n if (!Office.context?.mailbox?.item?.getSharedPropertiesAsync) {\r\n return await new Promise((resolve, reject) => {\r\n Office.context.mailbox.masterCategories.addAsync(categories, null, (result) => {\r\n if (result.status === Office.AsyncResultStatus.Succeeded) {\r\n resolve(true);\r\n } else {\r\n reject(result.error);\r\n }\r\n });\r\n });\r\n }\r\n } catch (error) {\r\n logger(error, \"OutlookUtils.ts (addMasterCategories)\");\r\n }\r\n return false;\r\n }\r\n\r\n private static ensureMasterCategoryExists = async (category: Office.CategoryDetails): Promise => {\r\n const currentCategories: Office.CategoryDetails[] = await OutlookUtils.getMasterCategories();\r\n const exists: boolean = currentCategories?.some(c => c.displayName?.trim().toLowerCase() === category.displayName?.trim().toLowerCase());\r\n if (exists === true || (await OutlookUtils.addMasterCategories([category]))) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n //You can apply a category to an item by assigning the displayName property of the category to the categories collection of the item.\r\n //https://docs.microsoft.com/en-us/graph/api/resources/outlookcategory?view=graph-rest-1.0\r\n //FolderTypeEnum.sharepoint | FolderTypeEnum.oneDrive | FolderTypeEnum.teamChannel\r\n public static applyCategory = async (itemId: string, categoryType: FolderTypeEnum) => {\r\n try {\r\n const token = await OutlookUtils.getOutlookToken();\r\n const selectors = \"/?$select=categories\"\r\n const getMessageUrl = await OutlookUtils.getRestURL() + \"/messages/\" + itemId + selectors;\r\n const headers = {\r\n \"Authorization\": \"Bearer \" + token\r\n }\r\n let categories: string[];\r\n try {\r\n categories = (await axiosRetryGet(getMessageUrl, {\r\n headers: headers\r\n }))?.data.Categories;\r\n } catch (e) {\r\n logger(e, \"OutlookUtils.ts (applyCategory 1)\");\r\n }\r\n\r\n if ((categories.includes(CategoryDisplayNames.Teams) && categoryType === FolderTypeEnum.teamChannel)\r\n || (categories.includes(CategoryDisplayNames.SharePoint) && categoryType === FolderTypeEnum.sharepoint)) {\r\n return; //no need for update or going further if category is already included \r\n }\r\n\r\n switch (categoryType) {\r\n case FolderTypeEnum.teamChannel:\r\n categories.push(CategoryDisplayNames.Teams);\r\n break;\r\n case FolderTypeEnum.sharepoint:\r\n categories.push(CategoryDisplayNames.SharePoint);\r\n break;\r\n case FolderTypeEnum.oneDrive:\r\n categories.push(CategoryDisplayNames.OneDrive);\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n const updateMessageUrl = await OutlookUtils.getRestURL() + \"/messages/\" + itemId;\r\n const data = {\r\n Categories: categories\r\n };\r\n try {\r\n const result = (await axiosRetryPatch(updateMessageUrl, data, {\r\n headers: {\r\n ...headers,\r\n 'Content-Type': 'application/json', //required: probably json?\r\n }\r\n }))?.data;\r\n } catch (e) {\r\n logger(e, \"OutlookUtils.ts (applyCategory 2)\");\r\n }\r\n } catch (error) {\r\n logger(error, \"OutlookUtils.ts (applyCategory 3)\");\r\n }\r\n }\r\n\r\n //categoryType: FolderTypeEnum.sharepoint | FolderTypeEnum.oneDrive | FolderTypeEnum.teamChannel\r\n public static getCategoriesToAssign = async (itemId: string, categoryType: FolderTypeEnum): Promise => {\r\n\r\n if (Office.context.requirements.isSetSupported(\"Mailbox\", \"1.8\")) {\r\n try {\r\n const token = await OutlookUtils.getOutlookToken();\r\n const selectors = \"/?$select=categories\"\r\n const getMessageUrl = await OutlookUtils.getRestURL() + \"/messages/\" + itemId + selectors;\r\n const headers = {\r\n \"Authorization\": \"Bearer \" + token\r\n }\r\n let categories: string[];\r\n try {\r\n categories = (await axiosRetryGet(getMessageUrl, {\r\n headers: headers\r\n }))?.data.Categories;\r\n } catch (e) {\r\n logger(e, \"OutlookUtils.ts (getCategoriesToAssign 1)\");\r\n }\r\n\r\n if (categories) {\r\n if (\r\n (categories.some(c => c.trim().toLowerCase() === CategoryDisplayNames.Teams.toLowerCase()) && categoryType === FolderTypeEnum.teamChannel)\r\n || (categories.some(c => c.trim().toLowerCase() === CategoryDisplayNames.SharePoint.toLowerCase()) && categoryType === FolderTypeEnum.sharepoint)\r\n || (categories.some(c => c.trim().toLowerCase() === CategoryDisplayNames.OneDrive.toLowerCase()) && categoryType === FolderTypeEnum.oneDrive)\r\n ) {\r\n return null;\r\n }\r\n }\r\n else {\r\n categories = [];\r\n }\r\n\r\n let categoryToSet: Office.CategoryDetails;\r\n switch (categoryType) {\r\n case FolderTypeEnum.teamChannel:\r\n categoryToSet = OutlookUtils.savedToTeamsCategory;\r\n break;\r\n case FolderTypeEnum.sharepoint:\r\n categoryToSet = OutlookUtils.savedToSharePointCategory;\r\n break;\r\n case FolderTypeEnum.oneDrive:\r\n categoryToSet = OutlookUtils.savedToOneDriveCategory;\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n if (categoryToSet && await OutlookUtils.ensureMasterCategoryExists(categoryToSet)) {\r\n categories.push(categoryToSet.displayName);\r\n return categories;\r\n }\r\n } catch (error) {\r\n logger(error, \"OutlookUtils.ts (getCategoriesToAssign 2)\");\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n public static setEWSItemCategory = (ewsItemId: string, categoriesToAssign: string[]) => {\r\n // makeEwsRequestAsync api not supported for shared items.\r\n if (categoriesToAssign?.length > 0 && ewsItemId && !Office.context?.mailbox?.item?.getSharedPropertiesAsync) {\r\n const ewsCategorySoapRequest: string = `\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 \r\n ${categoriesToAssign.map(category => `${category}`).join()}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n `;\r\n Office.context.mailbox?.makeEwsRequestAsync(ewsCategorySoapRequest, asyncRes => console.log(asyncRes));\r\n }\r\n }\r\n}","import { IPageSettings } from \"../src/taskpane/interfaces/IPageSettings\";\r\n\r\nclass SavingLocationStructureModule {\r\n private savingLocationStructure: IPageSettings[];\r\n\r\n setSavingLocationStructure(savingLocations: IPageSettings[]): void {\r\n this.savingLocationStructure = savingLocations ? [...savingLocations] : null;\r\n }\r\n\r\n getSavingLocationStructure(): IPageSettings[] {\r\n return this.savingLocationStructure;\r\n }\r\n\r\n getSavingDestination(): IPageSettings {\r\n return this.savingLocationStructure ? this.savingLocationStructure[this.savingLocationStructure.length - 1] : null;\r\n }\r\n\r\n addSavingLocationStructure(savingLocation: IPageSettings): void {\r\n if (savingLocation) {\r\n this.savingLocationStructure = this.savingLocationStructure ? this.savingLocationStructure.concat(savingLocation) : [savingLocation];\r\n }\r\n }\r\n}\r\n\r\nconst savingLocationStructureModule = new SavingLocationStructureModule();\r\nexport default savingLocationStructureModule;","import authModule from \"./AuthModule\";\r\nimport { getSharePointBaseUrl } from \"../src/taskpane/services/GraphService\";\r\nimport { IAuthAccount } from \"../src/taskpane/interfaces/IAuthTokenResultDto\";\r\nimport { UserLicenseTypeEnum } from \"../src/taskpane/components/enums/userLicenseTypeEnum\";\r\nimport { IUserProfile } from \"../src/taskpane/interfaces/IUserProfile\";\r\nimport { logger } from \"./logger\";\r\nimport { apiGetUserLicense, apiGetUserProfile } from \"../src/taskpane/services/ApiService\";\r\n\r\nconst UserSPScopeSuffix = \"/AllSites.Manage\";\r\n\r\nexport class UserModule {\r\n\r\n static async getUserSharePointBaseUrl(): Promise {\r\n let spBaseUrl: string = localStorage?.getItem(\"spBaseUrl\");\r\n if (!spBaseUrl) {\r\n spBaseUrl = await getSharePointBaseUrl(await authModule.getGraphAccessToken());\r\n if (spBaseUrl) {\r\n localStorage?.setItem(\"spBaseUrl\", spBaseUrl);\r\n }\r\n }\r\n return spBaseUrl;\r\n }\r\n\r\n static async getUserSharePointScope(): Promise {\r\n const spBaseUrl: string = await UserModule.getUserSharePointBaseUrl();\r\n const spScope: string[] = [spBaseUrl + UserSPScopeSuffix];\r\n return spScope;\r\n }\r\n\r\n static getUserLicense = async (userAccount: IAuthAccount): Promise => {\r\n try {\r\n const licenseType = await apiGetUserLicense(userAccount);\r\n return licenseType;\r\n } catch (error) {\r\n logger(error, \"UserModule.ts (getUserLicense)\");\r\n }\r\n return UserLicenseTypeEnum.Expired;\r\n }\r\n\r\n static getUserProfile = async (userAccount: IAuthAccount): Promise => {\r\n try {\r\n const userProfile = await apiGetUserProfile(userAccount);\r\n return userProfile;\r\n } catch (error) {\r\n logger(error, \"UserModule.ts (getUserProfile)\");\r\n return null;\r\n }\r\n }\r\n}","import { lcidTable } from \"./lcidTable\"\r\n\r\nexport const from = (lcidCode: number): string => {\r\n return lcidTable[lcidCode] ?? \"en_US\";\r\n}","export const lcidTable = {\r\n\t4: \"zh_CHS\",\r\n\t1025: \"ar_SA\",\r\n\t1026: \"bg_BG\",\r\n\t1027: \"ca_ES\",\r\n\t1028: \"zh_TW\",\r\n\t1029: \"cs_CZ\",\r\n\t1030: \"da_DK\",\r\n\t1031: \"de_DE\",\r\n\t1032: \"el_GR\",\r\n\t1033: \"en_US\",\r\n \t1034: \"es_ES\",\r\n\t1035: \"fi_FI\",\r\n\t1036: \"fr_FR\",\r\n\t1037: \"he_IL\",\r\n\t1038: \"hu_HU\",\r\n\t1039: \"is_IS\",\r\n\t1040: \"it_IT\",\r\n\t1041: \"ja_JP\",\r\n\t1042: \"ko_KR\",\r\n\t1043: \"nl_NL\",\r\n\t1044: \"nb_NO\",\r\n\t1045: \"pl_PL\",\r\n\t1046: \"pt_BR\",\r\n\t1047: \"rm_CH\",\r\n\t1048: \"ro_RO\",\r\n\t1049: \"ru_RU\",\r\n\t1050: \"hr_HR\",\r\n\t1051: \"sk_SK\",\r\n\t1052: \"sq_AL\",\r\n\t1053: \"sv_SE\",\r\n\t1054: \"th_TH\",\r\n\t1055: \"tr_TR\",\r\n\t1056: \"ur_PK\",\r\n\t1057: \"id_ID\",\r\n\t1058: \"uk_UA\",\r\n\t1059: \"be_BY\",\r\n\t1060: \"sl_SI\",\r\n\t1061: \"et_EE\",\r\n\t1062: \"lv_LV\",\r\n\t1063: \"lt_LT\",\r\n\t1064: \"tg_TJ\",\r\n\t1065: \"fa_IR\",\r\n\t1066: \"vi_VN\",\r\n\t1067: \"hy_AM\",\r\n\t1069: \"eu_ES\",\r\n\t1070: \"wen_DE\",\r\n\t1071: \"mk_MK\",\r\n\t1074: \"tn_ZA\",\r\n\t1076: \"xh_ZA\",\r\n\t1077: \"zu_ZA\",\r\n\t1078: \"af_ZA\",\r\n\t1079: \"ka_GE\",\r\n\t1080: \"fo_FO\",\r\n\t1081: \"hi_IN\",\r\n\t1082: \"mt_MT\",\r\n\t1083: \"se_NO\",\r\n\t1086: \"ms_MY\",\r\n\t1087: \"kk_KZ\",\r\n\t1088: \"ky_KG\",\r\n\t1089: \"sw_KE\",\r\n\t1090: \"tk_TM\",\r\n\t1092: \"tt_RU\",\r\n\t1093: \"bn_IN\",\r\n\t1094: \"pa_IN\",\r\n\t1095: \"gu_IN\",\r\n\t1096: \"or_IN\",\r\n\t1097: \"ta_IN\",\r\n\t1098: \"te_IN\",\r\n\t1099: \"kn_IN\",\r\n\t1100: \"ml_IN\",\r\n\t1101: \"as_IN\",\r\n\t1102: \"mr_IN\",\r\n\t1103: \"sa_IN\",\r\n\t1104: \"mn_MN\",\r\n\t1105: \"bo_CN\",\r\n\t1106: \"cy_GB\",\r\n\t1107: \"kh_KH\",\r\n\t1108: \"lo_LA\",\r\n\t1109: \"my_MM\",\r\n\t1110: \"gl_ES\",\r\n\t1111: \"kok_IN\",\r\n\t1114: \"syr_SY\",\r\n\t1115: \"si_LK\",\r\n\t1118: \"am_ET\",\r\n\t1121: \"ne_NP\",\r\n\t1122: \"fy_NL\",\r\n\t1123: \"ps_AF\",\r\n\t1124: \"fil_PH\",\r\n\t1125: \"div_MV\",\r\n\t1128: \"ha_NG\",\r\n\t1130: \"yo_NG\",\r\n\t1131: \"quz_BO\",\r\n\t1132: \"ns_ZA\",\r\n\t1133: \"ba_RU\",\r\n\t1134: \"lb_LU\",\r\n\t1135: \"kl_GL\",\r\n\t1144: \"ii_CN\",\r\n\t1146: \"arn_CL\",\r\n\t1148: \"moh_CA\",\r\n\t1150: \"br_FR\",\r\n\t1152: \"ug_CN\",\r\n\t1153: \"mi_NZ\",\r\n\t1154: \"oc_FR\",\r\n\t1155: \"co_FR\",\r\n\t1156: \"gsw_FR\",\r\n\t1157: \"sah_RU\",\r\n\t1158: \"qut_GT\",\r\n\t1159: \"rw_RW\",\r\n\t1160: \"wo_SN\",\r\n\t1164: \"gbz_AF\",\r\n\t2049: \"ar_IQ\",\r\n\t2052: \"zh_CN\",\r\n\t2055: \"de_CH\",\r\n\t2057: \"en_GB\",\r\n\t2058: \"es_MX\",\r\n\t2060: \"fr_BE\",\r\n\t2064: \"it_CH\",\r\n\t2067: \"nl_BE\",\r\n\t2068: \"nn_NO\",\r\n\t2070: \"pt_PT\",\r\n\t2077: \"sv_FI\",\r\n\t2080: \"ur_IN\",\r\n\t2092: \"az_AZ\",\r\n\t2094: \"dsb_DE\",\r\n\t2107: \"se_SE\",\r\n\t2108: \"ga_IE\",\r\n\t2110: \"ms_BN\",\r\n\t2115: \"uz_UZ\",\r\n\t2128: \"mn_CN\",\r\n\t2129: \"bo_BT\",\r\n\t2141: \"iu_CA\",\r\n\t2143: \"tmz_DZ\",\r\n\t2155: \"quz_EC\",\r\n\t3073: \"ar_EG\",\r\n\t3076: \"zh_HK\",\r\n\t3079: \"de_AT\",\r\n\t3081: \"en_AU\",\r\n\t3082: \"es_ES\",\r\n\t3084: \"fr_CA\",\r\n\t3098: \"sr_SP\",\r\n\t3131: \"se_FI\",\r\n\t3179: \"quz_PE\",\r\n\t4097: \"ar_LY\",\r\n\t4100: \"zh_SG\",\r\n\t4103: \"de_LU\",\r\n\t4105: \"en_CA\",\r\n\t4106: \"es_GT\",\r\n\t4108: \"fr_CH\",\r\n\t4122: \"hr_BA\",\r\n\t4155: \"smj_NO\",\r\n\t5121: \"ar_DZ\",\r\n\t5124: \"zh_MO\",\r\n\t5127: \"de_LI\",\r\n\t5129: \"en_NZ\",\r\n\t5130: \"es_CR\",\r\n\t5132: \"fr_LU\",\r\n\t5179: \"smj_SE\",\r\n\t6145: \"ar_MA\",\r\n\t6153: \"en_IE\",\r\n\t6154: \"es_PA\",\r\n\t6156: \"fr_MC\",\r\n\t6203: \"sma_NO\",\r\n\t7169: \"ar_TN\",\r\n\t7177: \"en_ZA\",\r\n\t7178: \"es_DO\",\r\n\t7194: \"sr_BA\",\r\n\t7227: \"sma_SE\",\r\n\t8193: \"ar_OM\",\r\n\t8201: \"en_JA\",\r\n\t8202: \"es_VE\",\r\n\t8218: \"bs_BA\",\r\n\t8251: \"sms_FI\",\r\n\t9217: \"ar_YE\",\r\n\t9225: \"en_CB\",\r\n\t9226: \"es_CO\",\r\n\t9275: \"smn_FI\",\r\n\t10241: \"ar_SY\",\r\n\t10249: \"en_BZ\",\r\n\t10250: \"es_PE\",\r\n\t11265: \"ar_JO\",\r\n\t11273: \"en_TT\",\r\n\t11274: \"es_AR\",\r\n\t12289: \"ar_LB\",\r\n\t12297: \"en_ZW\",\r\n\t12298: \"es_EC\",\r\n\t13313: \"ar_KW\",\r\n\t13321: \"en_PH\",\r\n\t13322: \"es_CL\",\r\n\t14337: \"ar_AE\",\r\n\t14346: \"es_UR\",\r\n\t15361: \"ar_BH\",\r\n\t15370: \"es_PY\",\r\n\t16385: \"ar_QA\",\r\n\t16394: \"es_BO\",\r\n\t17417: \"en_MY\",\r\n\t17418: \"es_SV\",\r\n\t18441: \"en_IN\",\r\n\t18442: \"es_HN\",\r\n\t19466: \"es_NI\",\r\n\t20490: \"es_PR\",\r\n\t21514: \"es_US\",\r\n\t31748: \"zh_CHT\"\r\n};"],"names":["dispatch","useDispatch","languageStrings","useContext","LanguageContext","currentDirectory","useSelector","state","workingDirectories","length","mode","currentSharepointFolder","files","savingLocation","accountUniqueId","user","account","uniqueId","accountId","convertEmailToPDF","settings","userSettings","oneDriveRootDetails","oneDriveOverwriteOption","oneDriveLocationBeforeSaving","oneDrive","locationBeforeSaving","rootOneDriveId","driveId","tenantReplaceFileNameWithGUID","tenantInfo","replaceFileNameWithGUID","moveToEnabled","contentManagerDirectory","moveTo","moveToMode","exchange","exchangeSelectedAccount","selectedAccount","checkPdfFiles","useFiles","useState","showSelectVersion","setShowSelectVersion","spHasDuplicateFiles","setSpHasDuplicateFiles","spHasDuplicateFolders","setSpHasDuplicateFolders","CheckinTypes","minorCheckIn","selectedCheckinType","setSelectedCheckinType","selectedCheckinTypeRef","useRef","_setIsFileSystemFileUpload","isFileSystemFileUploadRef","setIsFileSystemFileUpload","isFileSystemFileUpload","current","filesRef","selectedFilesRef","useEffect","filter","item","isSelected","getCategoryType","folderType","categoryToSet","FolderTypeEnum","teamChannel","CategoryDisplayNames","Teams","sharepoint","SharePoint","OneDrive","sharepointDataIsValid","inputValuesToSave","itemsWithErrors","hasError","map","displayName","generateToastError","forEach","inputValue","xml","Required","value","Array","isArray","terms","push","sharepointDataListIsValid","fileMetaData","savingIndividualFile","allErrors","file","metaData","name","concat","items","customToast","error","MetadataValidationFailed","generateErrors","index","key","getFolderType","isTeamsRootFolder","type","ComponentTypes","saveToSharepointRecent","savinglocationStructure","getSavingLocationStructure","lastDirectoryItem","parentId","id","locations","itemId","fileTitle","fileType","FileTypeEnum","folder","folderTypeIcon","FolderTypeIconQuery","getIconType","contentTypeId","isTeamsFolder","datePinned","Date","folderId","sharePointListId","StoreItemHelper","removeSaveLocation","e","logger","savesFileToRecent","autoFolderCreation","getRelativeFileInfo","data","RecentFilesMapper","buildFilesToGetRecent","fileSavedLocation","succeededFiles","fileLocation","getSavingDestination","fileDocumentLibrary","DocumentLibrary","determineDriveIdForSaving","email","documentLibrary","directory","fileName","extension","destinationLocation","destinationLocationType","OneDriveSubFolder","getOneDriveBusinessDriveId","getSharepointDriveId","getOneDriveRootDetails","getDuplicateOneDriveResult","saveMode","directoryUrl","webUrl","startsWith","FileService","getFilePreCommitCheck","destinationUrl","siteUrl","OneDriveUrlHelper","getSiteUrl","doOneDriveSavingWork","folderName","duplicateFileResult","goToHome","fromLocationItemCurrentDirectory","savingLocationDirectory","searchedFolderLocation","setFiles","setIsCheckingForDuplicates","duplicateFiles","some","isDuplicate","isFolder","duplicateFolders","OneDriveOverWriteEnum","notSelected","setOneDriveOverwriteOptionSelected","rename","setNeedsRedirectToHome","setIsBusySaving","isBusySaving","isSuccess","setIsSavingInBackground","DragAndDropHelper","isDroppedModeActive","updatedSelectedFiles","renameDuplicateNames","f","setContentManagerMoveTo","selectedFiles","sourceServerRelPath","setContentManagerExchange","selectedFolderId","selectedFolderName","CacheHelper","remove","DocubirdCache","selectedExchangeItems","folderEntriesToUpload","folderEntries","uploadDroppedFiles","fileSystemFilesUploadResult","success","errorMessages","failedFileNames","FileSystemEntryPersistor","saveToSharepoint","tenantOcrLanguage","majorCheckIn","fileSaveResult","PersistorFactory","create","saveToOneDrive","recentFolder","saveToOneDriveRecent","recentFiles","addRecentItem","resetToPreviousOneDriveLocationBeforeSaving","resetDuplicateFilesAndOverWriteSettings","ErrorMessageGeneric","autoClose","resetWorkingDirectories","FolderTypeIconEnum","oneDriveSubFolder","previousLocation","resetLocationBeforeSaving","saveSharePointEmailandMetadata","informationProtectionId","setIsCMMultipleFilesMetaDataPanelOpen","setSelectedIndividualFile","optionsSelected","fileMetaDataToValidate","find","x","fileId","internalName","sharePointInternalFileName","hasDuplicateFolders","SaveMode","SaveAsPdf","fileCheckResults","hasDuplicateFiles","res","filePreCommitResult","checkedOut","locked","individualFile","enableMinorVersions","get","fileMetaDataInput","selectedItem","ContentManagerCopyMoveModeEnum","CopySelectedEmails","graphMailItemId","sharePointInternalTitleName","TitleAutoSet","DisplayName","trim","toLowerCase","spColumnName","getAllListedColumns","col","mappedResult","getOfficeJSToEmailMapping","mappedVal","DefaultValueService","setMappedDefault","persistor","listSettings","tenantEnablePII","savingSuccess","savingError","response","addListItem","apiAddListItem","saveEntireEmailFolder","isInOneDrive","sharePointSiteUrl","saveLocation","getSharePointAccessToken","getOneDriveAccessToken","sharePointToken","emailMappings","spEmailPropertyMappings","getMailboxAccessToken","mailToken","listId","exchangeAccountEmail","mailItemCategory","mailFolderId","metadata","sharePointEmailMappings","request","apiUploadExchangeMailFolder","uploadResults","setContentManagerExchangeProgress","message","sharepointDataListEntireFolderIsValid","inputValues","selectedDocumentLibrary","infoPanelMode","webAddinItem","selectedTemplate","datasourceValues","datasource","values","datasourceInitialLoad","initialLoad","requiredMetadataOnPublish","setInputValuesToSave","itemWebUrl","setItemWebUrl","itemSharepointListId","setItemSharepointListId","fieldsLoaded","setFieldsLoaded","extention","setExtention","getItemByUniqueId","useLazyGetItemByUniqueIDQuery","checkIfInOneDrive","oneDriveWebUrl","weburl","indexOf","firstLoad","updateMetadataPropertiesFromDataSource","sharepointIds","isMultipleValues","propertyKeys","Object","keys","propKey","updatedValue","uniqueValues","self","updateDatasourceDisplayNameInputData","updateSharepointMetadataToSave","setDatasourceValues","updatedinputValuesToSave","inputToUpdate","boundName","ContentTypeInputName","refrehOptionsRequest","updatedInput","resetDatasourceOptionsToggle","val","validatedValue","DatasourceValidationHelper","validateAndTransformDatasourceValue","updatedFromDataSourceToggle","updatedDatasourceOptions","addRequiredMetadataToCache","requiredMetaFieldsInternalNames","split","valueToCache","Number","toString","Label","join","set","JSON","stringify","mapColumnsToSaveFields","fields","listItemUniqueId","uniqueid","UniqueId","replace","accessToken","unwrap","fileParts","FileLeafRef","slice","inputSaveFields","initialValue","InternalName","Type","Url","dateValue","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","getMilliseconds","initialValueIsRequired","SharePointMetadataBooleans","true","Percentage","choices","Choices","populatedInput","mapColumnsToSaveFieldsOneDrive","undefined","CurrentValue","DefaultValue","Id","isValid","ColName","Name","ID","ReadOnly","InfoPanelMode","Replace","Sealed","ShowInEditForm","ShowInFileDlg","ShowInNewForm","SourceID","StaticName","Promise","all","defaultValue","nameValue","initialIsRequiredAndHasNoDefaultValue","setValue","validateName","input","addInItem","forceNameCheck","sanitizedName","FileFolderNameExtensions","EnsureValidName","isInConentMangerMode","NewTemplate","contenttypeid","SharePointFolderContentTypeIds","ContentTypeId","newFileName","encodeURI","originalFileName","errorMessage","FieldRequired","getDriveRootWebUrl","isNameChanged","ignoreSameUserLock","fileRequest","apiFilePreCommitCheck","results","FileSameCheckedOut","FileSameLocked","exists","FileSameName","folderRequest","apiFolderPreCommitCheck","FolderSameName","getPersistedAuthState","mailSendToken","isMailSendTokenAvailable","setIsMailSendTokenAvailable","isMailSendTokenRequestInProgress","setIsMailSendTokenRequestInProgress","authDialogRef","processAuthDialogResponse","event","origin","messageFromDialog","status","DialogMessageStatus","Success","result","authState","mailSendTokenExpiresOn","persistAuthState","close","window","addEventListener","getMailSendAccessToken","removeEventListener","requestMailSendToken","authUrl","URL","searchParams","append","shared","params","app","resource","TokenResource","MailSend","username","winLeft","screenLeft","screenX","winTop","screenTop","screenY","width","innerWidth","document","documentElement","clientWidth","body","height","innerHeight","clientHeight","left","Math","max","PopUpConstants","POPUP_WIDTH","top","POPUP_HEIGHT","open","href","POPUP_NAME_PREFIX","scrollStyle","mergeStyles","position","stackTokens","childrenGap","panelStyles","content","paddingLeft","paddingRight","CMAddDatasourceItemPanel","panelIsOpen","closePanel","dataSourceItem","dataSourceHelper","formData","setFormData","getEditStructure","onRenderFooterContent","useCallback","Stack","horizontal","horizontalAlign","tokens","PrimaryButton","iconProps","iconName","onClick","updatedData","required","vaildateForm","text","Add","DefaultButton","Close","Panel","isOpen","headerText","onDismiss","isLightDismiss","closeButtonAriaLabel","PanelType","custom","customWidth","styles","isFooterAtBottom","className","ScrollablePane","scrollbarVisibility","ScrollbarVisibility","auto","style","marginTop","property","TextField","label","title","form","onChange","newValue","Checkbox","checked","parsedDate","DatePicker","isRequired","allowTextInput","parseDateFromString","DateService","isNaN","getTime","onSelectDate","newDate","toISOString","textField","Dropdown","options","option","selectedKey","dialogContentProps","DialogType","normal","showCloseButton","panelButtonsContainer","float","paddingTop","CMCheckinModal","selectedItems","selectedAddInItems","showDialog","isPublish","closeDialog","closeOnSuccess","fileUpdatePublishInfo","updateOfficeXML","autoDeleteMinorVersionsOnPublish","regionalSettings","versionProps","setVersionProps","checkinType","setCheckinType","comment","setComment","checkinError","setCheckinError","isBusy","setIsBusy","setHasError","sharepointService","setSharepointService","setFields","retrievingInformation","setRetrievingInformation","updateMetaDepsLoaded","setUpdateMetaDepsLoaded","checkinItem","useLazyCheckinItemQuery","publishItem","useLazyPublishItemQuery","getItemVersions","useLazyGetItemVersionsQuery","deleteVersionByLabel","useLazyDeleteVersionByLabelQuery","metaFieldsOnPublish","SharepointSpServices","sharepointSpService","getSharePointDocumentLibraryFields","sharepointListId","SharepointFilters","search","BaseSharepointHelper","convertMetadataToFields","field","includes","originalInputValues","inputValuesToSaveFields","setupInputValues","getFileVersionData","fileVersionData","multipleFilesSelected","level","Level","majorVersion","MajorVersion","minorVersion","MinorVersion","onConfirmCheckin","isCurrentDirectorySPList","SharePointList","isListItem","apiUpdateItemMetadata","newRequest","contentTypeMeta","unshift","itemVersions","versions","d","version","IsCurrentVersion","versionLabel","VersionLabel","checkinTypeChanged","onCommentChanged","handleInputChange","Cancel","disabled","marginRight","Publish","CheckIn","Spinner","size","SpinnerSize","small","Fragment","VersionSelector","RetrievingInfo","marginBottom","_arr","inputValueIndex","findIndex","piiConfig","privacySentitiveColumnName","privacySentitiveDataColumnName","Item","inputData","regionalSetting","datasourceFields","Comment","multiline","rows","Dialog","hidden","minWidth","maxWidth","DialogContent","inner","padding","header","display","DialogFooter","CMConfirmModal","htmlContent","onConfirm","closeText","confirmText","subText","themedLargeStackTokens","textFieldStyles","suffix","CMEmailAttachmentPanel","showConfirmMoveToDialog","setShowConfirmMoveToDialog","visibleFiles","setVisibleFiles","showMaxFilesSelectedDialog","setShowMaxFilesSelectedDialog","isGraphMailItem","handleTextFieldOnchange","currentChangedInput","target","updateFileName","getFileErrorMessage","Save","isAttachment","verticalAlign","Icon","getFileTypeIconProps","imageFileType","grow","TooltipHost","directionalHint","DirectionalHint","topLeftEdge","delay","TooltipDelay","long","Saving","borderless","ev","isChecked","handleEmailChecked","textAlign","Link","LoadMore","SaveSelectedFiles","SelectDestinationDirectory","Ok","sourceSiteUrl","busyMovingFiles","copyJobResults","isMoveComplete","isMoveCancelled","destinationDirectory","progressCountCompleted","progressCountTotal","LimitReached","MaximumEmailMessagesSelected","CMErrorModal","Error","checkboxLabelStyles","root","textOverflow","overflow","whiteSpace","labelStyles","linkStyles","filterButtonStackItemStyles","searchIcon","searchBoxStyles","paddingBottom","horizontalGapStackTokens","CMFileFilterPanelSection","filterSections","filterSection","serverRelPath","isInContentManagerMode","setFilterSectionItem","setFilterSectionItems","setFilterSectionItemsFromRange","setFilterSectionToggleSlider","setFilterSectionToggleShowMore","sectionElement","setSectionElement","minItems","loadSection","setLoadSection","showFilterIcon","setShowFilterIcon","showFilterSearchBox","setFilterSearchBox","sectionFilterValue","setSectionFilterValue","uniqueSearches","setUniqueSearches","getListAsStream","useLazyRenderListAsStreamQuery","FilterDateStepSince","FilterDateStepLast3Months","daysOffset","FilterDateStepLast30Days","FilterDateStepLast7Days","FilterDateStepSinceYesterday","FilterDateStepToday","FilterDateStepTomorrow","FilterDateStepIn7Days","FilterDateStepIn30Days","FilterDateStepIn3Months","FilterDateStepIn3MonthsOrMore","dateRangeSteps","setDateRangeSteps","selectedDateRangeStep","setSelectedDateRangeStep","sliderValue","setSliderValue","hasFutureDateValues","setHasFutureDateValues","currentFilterSection","filterField","RealFieldName","selectedDateRange","hasFutureDates","filterTimeStamp","containerHeight","showMoreExpanded","hasSlider","sectionStyle","maxHeight","transition","lineHeight","onRenderLabel","_onRenderLabel","selected","setContentManagerFilterSectionItem","toggleReload","_onCheckboxChange","lastSearchValue","gridProps","sort","serverRelativePath","filterSectionItemsExpandParams","listStream","ListData","Row","v","i","a","oldSectionItems","filterItem","toUpperCase","newFilterItem","sectionItemsSorted","b","setContentManagerFilterSectionItems","onChangeFilter","searchValue","oldValues","StackItem","showSlider","firstItem","dateString","format","getSectionSubtitle","ClearSearch","SearchSectionFilter","ActionButton","allowDisabledFocus","prev","SearchBox","placeholder","underlined","showIcon","marginLeft","setContentManagerFilterSectionToggleShowMOre","FontIcon","ShowLess","ShowMore","Slider","min","showValue","snapToStep","dateRangeStep","onChanged","range","setContentManagerFilterSectionItemsFromRange","originFromZero","reloadGrid","setContentManagerFilterSectionToggleSlider","SelectSpecificDates","ShowDateRangeSlider","extractSelectOptions","getElementsByTagName","parseDocument","el","children","attribs","extractListItems","list","splice","resetFilterValues","section","setFilterSectionsFromFields","userAccount","filterFieldList","localizedMeText","selectedView","headers","Authorization","Filterable","ShowInFiltersPane","GroupField","post","tryEncodeUriComponent","tryDecodeUriComponent","officeExtentions","word","excel","powerPoint","visio","FieldType","aDate","bDate","obj","o","FromBaseType","forceToFrontIndex","panelActionButtonStyle","tooltipHostCalloutProps","gapSpace","navigation","justifyContent","uploaderContainerStyles","fileNameContainerTokens","fileIconContainerStyles","fileNameContainerStyles","margin","fileNameTextContainerStyles","defaultCloseButtonContainerStyles","showMoreContainerStyles","paddedContainerStyles","fileNameTextStyles","fontWeight","CMFileInfoPanel","folderPath","userPermissions","keepOpenOnSave","tenantOpenDocumentsInClientApp","openDocumentsInClientApp","minVersionLimit","createDocumentAndGetEditLink","useLazyCreateDocumentAndGetEditLinkQuery","replacementFileView","setReplacementFileView","selectedOutlookFileViews","setSelectedOutlookFileViews","replacementFile","setReplacementFile","setSelectedItem","setSectionStyle","selectedContentTypeId","setSelectedContentTypeId","showMoreIsClicked","setShowMore","showMessageBar","setShowMessageBar","currentSharepointFolderInfo","setCurrentSharepointFolderInfo","setIsCurrentDirectorySPList","showSaveSuccessIndicator","setShowSaveSuccessIndicator","showConfirmPublishDialog","setShowConfirmPublishDialog","showCheckinDialog","setShowCheckinDialog","updateRequest","setUpdateRequest","currentMinorVersion","setCurrentMinorVersion","fileUpdated","setFileUpdated","requiredMetadataValueChanged","setRequiredMetadataValueChanged","permissionsLoaded","setPermissionsLoaded","isUpdateItemError","setIsUpdateItemError","userPermissionsRef","useMetaDataFormInputs","isCurrentOfficeFile","removeMessage","setIsFileInfoPanelOpen","currentFileUniqueId","officeFileUniqueId","userItemPermissions","PermMask","getUserEffectivePermissionsFromMask","refreshSettings","refreshPermissions","getListSettings","getUserEffectivePermissions","permissions","canView","canCreateFolder","EnableFolderCreation","contentTypesEnabled","ContentTypesEnabled","EnableMinorVersions","DatasourceTypeEnum","SharePointDocumentTemplate","getFileExtension","Fileview","isMobile","multiSelect","hasShowMore","isLocalFile","itemSelected","outlookItemSelected","lastModifiedDateTime","fileRemoved","itemHeight","mobileListItemStyle","timeOutId","setTimeout","clearTimeout","hasChanged","nameField","ModeEnum","office","Office","context","requirements","isSetSupported","Word","run","save","sync","Excel","workbook","SaveBehavior","onRenderNavigationContent","props","defaultRender","FSObjType","FileIconType","listItem","FileSystemObjectType","documentSet","docset","sizetext","isdocument","getHeaderFileIcon","Title","New","getHeaderText","File_x0020_Type","saveButtonText","useMemo","SaveInProgress","Create","SaveProperties","resetFiles","MessageBar","messageBarType","MessageBarType","warning","isMultiline","dismissButtonAriaLabel","FileVersionLimitReached","truncated","ReplacementFileRequired","ReplacementFileRequiredMessage","AvailableFiles","prevShowMoreIsClicked","onComplete","fails","successes","total","onClear","onFileUploaded","uploadedFile","enableAutoUpload","allowMultipleFiles","isInfoMode","addNameField","disableNameField","isCreateFromTemplate","itemContentTypeId","fieldsChanged","canEditListItem","WrongUserPermissionsUpdate","calloutProps","Update","internalSharepointName","isNormalUpdate","now","getAccount","fileUniqueId","officeFile","originalName","GetFileContent","base64Content","ContentBase64","mailSend","mailbox","OutlookUtils","getRestURL","url","getOutlookToken","outlookToken","ewsUrl","getEWSURL","getEWSToken","ewsToken","ewsMailItemId","OutlookService","getItemEWSId","outlookRestInfo","emailItemId","getItemRestId","attachmentFile","apiFileReplace","filename","retryLimit","attempt","utc","charAt","getFilePreCommitInfo","preCommitResult","getContainerSharePointIds","destSharePointIds","destSiteUrl","destListId","destFolderUniqueId","templateSiteUrl","templateUniqueId","templateId","teamId","dir","teamGroupId","channelId","teamChannelId","destAccessToken","templateAccessToken","tenantGuid","tenantId","createDocumentFromTemplateRequest","apiFileCreateDocumentFromTemplate","createdDocumentRes","getItemAbsoluteUrl","absUrl","fileInfo","SearchOpenExtensionHelper","determineOfficeFileType","localUrlPrepended","replaceAll","template","fontSize","ToastContainer","hideProgressBar","Slide","updatedInputValues","ConfirmPublish","No","Yes","CMFileSharePanel","isContainer","hideSharingInfo","setMessage","setErrorMessage","filenameWithoutExtention","setFilenameWithoutExtention","blockDownload","setBlockDownload","isCreatingLink","setIsCreatingLink","sharedSuccess","setSharedSuccess","types","CanEditMakesChanges","CanViewCannotMakeChanges","selectedType","setSelectedType","scopes","ShareableLinkRequestScope","Anonymous","Anyone","Organization","MyOrganization","Users","PeopleYouChoose","selectedScope","setSelectedScope","activityItem","setActivityItem","tooltipContent","setTooltipContent","selectedPeople","setSelectedPeople","getSharingInformation","useLazyGetSharingInformationQuery","sendMail","useLazySendMailQuery","useMailSendPopUpAuth","showMore","currentLocation","sharingInformation","personas","permissionsInformation","principals","principal","initials","parts","imageInitials","activityDescription","SharedWith","persona","activityPersonas","isCompact","driveid","itemid","getFileItemIdFromRelativePath","getGraphAccessToken","spItemUrlparts","getItemWebViewUrl","driveUrl","folderUrl","pathname","ShareableLinkRequestType","Edit","BlocksDownload","View","scope","recipients","createItemShareableLink","createLinkResults","link","getFileParts","nameWithoutExtention","isFolderOrDocumentSet","iconUrl","iconType","getFileTypeIconAsUrl","sharedByText","FolderSharedWithYouBy","DocumentSharedWithYouBy","html","getEmailTemplateHtml","Open","subject","DocumentSharedWithYouByEmailSubject","toRecipients","isError","PleaseSelectSomeoneShare","textToCopy","getIsOfficeJSAvailable","resolve","reject","textArea","createElement","appendChild","select","execCommand","navigator","clipboard","writeText","createShareableLink","CopyLink","Send","ShareWith","DocumentShareSuccess","SharedLinkSuccessfullyCopied","ChoiceGroup","ShareLinkWith","defaultSelectedKey","PeopleFinder","ShareWithPeople","selectedPersonasChanged","selectedPersonas","customTextValue","people","secondaryText","Message","responsiveMode","ResponsiveMode","Toggle","BlockDownload","onText","offText","ActivityItem","main","footer","backgroundColor","commands","containerStackTokens","containerStackStyles","metadataStackItemStyles","overflowY","CMFilesUpdatePanel","canOverwrite","siteInfo","sites","filesUploaded","showErrorMessage","setShowErrorMessage","_fileOptions","_setFileOptions","fileOptionsRef","setFileOptions","fileOptions","sharedContentType","every","useFileUpload","workingDirectoriesAvailable","getIsMultiMetaFileUpdatePanelOpen","setIsMultiMetaFileUpdatePanelOpen","setSavingLocationStructure","setSavingLocation","updateFileOptions","fileOption","changedIndex","updateIndividualFileOptionsValue","processSelectedItems","hasGraphItemId","getItem","fileItem","bulkUpdateItems","listItemUniqueIds","meta","apiBulkUpdateItemMetadata","cancelDuplicateAndVersionOptionSelection","filesArray","documentSetsArray","filesResponse","foldersResponse","EditXItems","isModified","actions","MessageBarButton","Reset","IndividualFilesUpdated","onCancel","VersionSelectorMinMajOnly","labelFontSize","isBulkEdit","ErrorWhileUpdatingMetadata","fileOptionStackStyles","fileTypeIconStyles","flexShrink","fileNameStyles","msTextOverflow","dropdownStyles","CMMultipleFilesMetaDataPanel","saveFiles","checkForDuplicates","setCheckForDuplicates","setSaveMode","isFileSystemEntry","savingInBackground","selectedFile","_setSelectedFile","selectedFileRef","setSelectedFile","savingButtonProps","setSavingButtonProps","saveAllFilesDisabledTooltip","setSaveAllFilesDisabledTooltip","saveFileDisabledTooltip","setSaveFileDisabledTooltip","updatedName","setUpdatedName","verifyingFiles","setVerifyingFiles","selectionOpen","setSelectionOpen","checkFileForDuplicates","debounceTimer","selectedFileOption","prevVal","Default","SaveTo","AsPdf","canConvertToPDF","canSaveAsPDF","panelCssStyles","selectedFileInputValues","fileInputValues","changedInput","newFileOptions","parentFolderId","dest","isMainMailItem","FolderView","canViewFolder","checkedOutBy","lockedBy","setFile","updatedFileOptions","isSaveAllFilesButtonDisabled","isSaving","OverwriteRequired","isDisabled","isSaveFileButtonDisabled","SaveAsPDFQuestion","getPlatform","PlatformType","iOS","VerifyingFiles","UpdateIndividualFile","smallFluid","SavingFiles","FileSaveSuccessSingle","SelectAFile","SelectedFile","selectedOption","isSelectedFile","onRenderOption","overflowMode","TooltipOverflowMode","Self","onRenderTitle","Separator","spColumnNames","selectedIndividualFile","classNames","mergeStyleSets","wrapper","commandBarStyle","borderTop","borderBottom","_getKey","CMVersionHistoryModal","selectedAddinItem","getItemByUniqueIdVersions","useLazyGetItemByUniqueIDVersionsQuery","restoreVersionByLabel","useLazyRestoreVersionByLabelQuery","deleteAllVersions","useLazyDeleteAllVersionsQuery","unpublishItem","useLazyUnpublishItemQuery","setUserPermissions","fileVersions","setFileVersions","setItemVersions","columns","setColumns","commandbarItems","setCommandbarItems","commandbarFarItems","setCommandbarFarItems","selectedVersions","setSelectedVersions","selectedVersion","setSelectedVersion","updateVersionList","setUpdateVersionList","waitFor","setWaitFor","waitForText","setWaitForText","selectionCleared","setSelectionCleared","showDeleteAllDialog","setShowDeleteAllDialog","showDeleteAllMinorDialog","setShowDeleteAllMinorDialog","_selection","Selection","onSelectionChanged","_getSelectionDetails","getSelection","count","setAllSelected","versionsAlt","fileSize","fileVersion","Size","File_x005f_x0020_x005f_Size","VersionLabelNumeric","FileSizeNumeric","Version","fieldName","isResizable","isSorted","isSortedDescending","onRender","Modified","versionUrl","endsWith","siteOrigin","FileRef","VersionId","PublishedMajorVersion","ModifiedBy","Editor","LookupValue","bytes","decimals","dm","floor","log","parseFloat","pow","toFixed","formatBytes","versionComment","CheckInComment","OData__x005f_CheckinComment","canDeleteVersions","VersionsDeleteAll","VersionsDeleteMinors","VersionView","isPublishedMajorVersion","isPublishedMajorSucceededByDraft","ver","VersionRestore","restoreVersion","VersionDelete","deleteVersion","Unpublish","onUnpublishVersion","farItems","onRenderIcon","Selected","Restoring","Deleting","onColumnHeaderClick","column","columnKey","newColumns","currColumn","currCol","newCol","VersionHistory","CommandBar","ariaLabel","DetailsList","compact","setKey","layoutMode","DetailsListLayoutMode","justified","constrainMode","ConstrainMode","unconstrained","selection","selectionPreservedOnEmptyClick","getKey","ariaLabelForSelectionColumn","ariaLabelForSelectAllCheckbox","checkButtonAriaLabel","Delete","VersionConfirmDeleteAllMessage","VersionConfirmDeleteAllMinorMessage","isDocument","sharedLinkRequest","getItemThumbnail","createLinkResult","thumbNailResult","getExtension","taskRequest","thumbUrl","microsoftTeams","getContext","frameContext","sharing","shareWebContent","preview","tasks","submitTask","msg","toast","info","loaderStackStyles","Loader","React","hide","align","hideLabel","ariaLive","labelPosition","suggestionProps","noResultsFoundText","loadingText","showRemoveButtons","suggestionsAvailableAlertText","mostRecentlyUsed","setMostRecentlyUsed","getUsers","useLazyGetUsersQuery","picker","NormalPeoplePicker","removeDuplicates","itemRemoved","newMostRecentlyList","onResolveSuggestions","filterText","orderby","users","validatedEmailAddress","mail","validateEmail","userPrincipalName","isGuest","userType","isCustomEmail","filteredPersonas","sortResults","pickerSuggestionsProps","onValidateInput","validateInput","removeButtonAriaLabel","inputProps","onBlur","primaryText","componentRef","onInputChange","resolveDelay","first","others","console","warn","possibleDupes","listContainsPersona","ValidationState","valid","invalid","emailAddress","exec","substring","SuccessErrorMessage","successMessage","errorList","successStyle","color","successLabel","errorStyle","errorLabel","Boolean","responseStyle","FontSizes","size16","FontWeights","semibold","size14","regular","setOptions","choiceOptions","VersionMinorDraft","VersionMajorPublished","VersionMinorOverwrite","ChooseVersion","onSave","WebPanel","iconStyles","exchangeItem","selectFile","selectExchangeItem","openFileOptions","nonClickable","modifiedBy","setModifiedBy","removableAndNonClickable","initModifiedBy","modifiedByValue","getItemCustomSelect","graphItemData","lastModifiedBy","Unknown","pii","piiError","piiDetected","getFileItemClass","Check","itemExt","isChecking","PrivacySensitiveChecking","xSmall","PrivacySensitiveDataNotChecked","PiiTooltip","PIIDetected","PII","calloutWidth","medium","getFileItemIcon","Text","Parent","By","MoreActions","receivedDateTime","From","sender","hasAttachments","labelInfoStyle","ApprovalPanel","requestor","isContentManager","closeClicked","listName","getDriveInfoFromSharepointId","useLazyGetDriveInfoFromSharepointIdQuery","fileViews","setFileViews","isBusySending","setIsBusySending","formDisabled","setFormDisabled","otherError","setOtherError","hooks","setHooks","selectedFlow","setSelectedFlow","isSuccessRequestApproval","setIsSuccessRequestApproval","isErrorRequestApproval","setIsErrorRequestApproval","errorRequestApproval","setErrorRequestApproval","approvalFiles","setApprovalFiles","additionalDetails","setAdditionalDetails","dueDate","setDueDate","dateFormat","Intl","DateTimeFormat","apiGetHooksByType","TenantGUID","HookTypeId","HookType","AllApproval","validHooks","getValidHooks","hook","tempFiles","selectedApprovers","setSelectedApprovers","typeId","Generic","isPeoplePickerRequired","onFormatDate","date","onClearClick","defaultPrevented","stopPropagation","preventDefault","SelectOption","AutomationFlowName","flowChanged","AutomationFlowDescription","description","AutomationFlowNotSelected","Approvers","peoplePickerTitle","Participants","isInteger","dueDateDays","DueDate","firstDayOfWeek","strings","DayPickerStrings","minDate","add","toDate","DueDateDescription","EnterDate","showMonthPickerAsOverlay","formatDate","onRenderSuffix","clearButtonClass","IconButton","iconButtonStyles","iconButtonProps","clearButtonProps","datePickerStyles","Details","AutomationFlowRequestSuccess","AutomationFlowRequestError","links","tempFile","sharepointId","driveInfoResults","driveInfo","getFileItemInfo","getItemApprovalRequestInfo","fileDetails","sharingUrl","fullWebUrl","serverRelativeUrl","listItemId","approvalRequest","hookId","hookTypeId","hookName","approvers","details","itemLinks","apiRequestApproval","SigningPanel","isSuccessRequestSigning","setIsSuccessRequestSigning","isErrorRequestSigning","setIsErrorRequestSigning","errorRequestSigning","setErrorRequestSigning","signingFiles","setSigningFiles","Sign","selectedRecipients","setSelectedRecipients","Recipients","splitName","firstName","lastName","SigningRequestCreated","SigningRequestError","signingRequest","tooltipTextStyle","isLoading","PrivacySensitiveDataFound","u","PrivacySensitiveDataNotFound","PrivacySensitiveCheckError","getFilePreCommitCheckAsync","siteFileDestinationInfo","isOneDrive","destUrl","AfterSaveAppSelector","onSaveLocation","saveResult","isOpeningOnline","setIsOpeningOnline","isOpeningLocal","setIsOpeningLocal","openFile","isLocal","userEmail","userId","siteId","getOpenInOneDriveDesktopUrl","getListItemWebUrl","NotWorkingOnOnlineVersion","CompoundButton","primary","OpenIn","GetOfficeContextApp","App","OpenOnlineDocumentWith","large","Browser","Continue","setError","classifier","dataSourceSharePointClassifier","inputType","getSharepointInputType","InputTypeEnum","DateOnly","DateTime","updateValue","updateInputValidationStatus","determineInitialInputValue","taxonomyDouble","UserSelectionScope","Min","Max","validationProperties","Decimals","List","columnInternalName","ShowField","generateField","pathStyles","size12","headingStyle","SavingInBackgroundContent","dismissPanel","saveLocationText","setSaveLocationText","savingStructure","s","savingDirectoryList","getFileSaveResultText","UploadCompletedSuccessfully","FileBackgroundSaveFailure","savingProgressMarkup","FileBackgroundSave","FilesNotSuccessfullyUploaded","FileSaveSuccess","RetryAfter","src","lastIndexOf","mapDispatchToProps","setExpandedItem","connector","connect","expanders","isExpanded","toggleIsExpanded","itemCount","theme","getTheme","iconClass","palette","neutralPrimary","textRegular","size18","createTextValidator","TextValidator","createNumberValidator","NumberValidator","createPercentageValidator","PercentageValidator","createCurrencyValidator","CurrencyValidator","createHyperLinkValidator","HyperLinkValidator","createCollectionValidator","CollectionValidator","createNoValidation","NoValidation","createPickerValidation","PickerValidator","createDateValidation","DateValidator","createTaxonomyValidation","TaxonomyValidator","ValidatorFactory","InputFactory","factory","InputFactoryHelper","setMainProps","inputValidator","Currency","YesNo","hyperLink","HyperLink","picture","choice","multiChoice","peoplePickerSingle","itemLimit","peoplePickerMultiple","taxonomySingle","taxonomyProps","MultiLine","datasourceText","DatasourceTextTagPicker","datasourceDropdown","DataSourceDropdown","datasourceMultipleDropdown","DataSourceMultipleDropdown","lookupSingle","lookupMulti","datasourceTagPicker","DatasourceTagPicker","stackStylesDefault","stackStylesPadded","choiceGroupStyles","addWorkingDirectories","hasDuplicateEmails","hasLockedCheckedOutFiles","needsRedirect","needsRedirectToHome","oneDriveLocationsBeforeSaving","isFileOpenLocally","setIsFileOpenLocally","Rename","folderOptions","goToLastPageBeforeSavingForSeachedFolders","OneOrMoreFilesLockedCheckedOut","selectedProp","RenameTextFileOption","DuplicateResolved","FolderSameNameAutoRename","multipleMetaUpdateIcon","inputFieldsStackStyles","undefinedString","setFilesCanOverwrite","addRegionalSettings","setCanViewFolder","setFileExpander","setIsBusyLoadingMetadata","isSavingInBackground","hiddenMetadataFields","reload","toggle","tenantDisableFileRename","disableFileRename","datasources","OfficeService","showUpdateIndividualFilesButton","showSelectedFileCount","mailSendConfig","fileList","setFileList","selectedFileList","setSelectedFileList","setLoading","contentTypes","setContentTypes","documentSetSettings","setDocumentSetSettings","selectedContentType","setSelectedContentType","protectionLabels","selectedProtectionLabel","setSelectedProtectionLabel","showProtectionDropdown","DatasourceFieldHelper","getDatasourceFields","siteDisplayName","selectedFileName","setSelectedFileName","locationDefaultValues","isOneDriveBusiness","showStaticNameField","setIsLoading","getSiteRegionalSettings","getContentTypes","isSaveLocationStructureSet","preComitResult","checkFile","updatedFileList","updatedSelectedFileList","isCurrentCall","checkedFile","getMailExchangeInformation","sensitivityLabelId","mailItemRestId","mailItemRestUrl","token","restURL","updateMessageUrl","axiosRetryGet","updateValuesFromExchange","documentSetContentTypeId","parentDocumentSetContentTypeId","getSharePointContentTypes","getDocumentSetSettings","getLibraryDefaultValues","getLibrarySettings","contentTypeResult","libraryDefaults","setLocationDefaultValues","isFolderOrDocumentSetContentType","SharepointContentTypeHelper","mapFolderOrDocumentSetContentTypes","mapDocumentContentTypes","allowedContentTypeIds","allowedContentTypes","contentType","allowedContentType","parent","availableContentTypeDropdownOptions","defaultSelectedContentType","findMappedColumnNames","mappedContentType","getFields","sharedFieldIds","sharePointUniqueId","getDriveItemSharepointUniqueId","disableOpenInApp","ExcludeFromOfflineClient","contentTypeName","isInSPList","getSharePointContentTypeFields","saveSPList","contentTypeInputName","DatasourceHelper","DatasourceService","getInputDataSource","hiddenField","sharedFieldId","addContentTypeMetadataMutation","exchangeMailMode","CopyEntireFolderEmails","getSpToEmailMapping","mappedValue","hasMultipleValuesMapped","emailMappedProperty","mailPropertyName","mapping","columnName","emailProperty","folderDefaultValue","AutoSetEmailProperty","defaultValues","locationDefaults","folderUrlParts","pop","parentDefaults","isDefault","GeneratedFields","inputFields","editFilePropertiesButtonStyles","UpdateIndividualFileMetaData","FilesSelectedToUpload","ContentType","formatNameFieldValue","SelectSensitivityLabel","Sensitivity","EmailCreationEnum","EmailCreationTypeEnum","ImageTypeEnum","OfficeServiceEnum","ValidationResultEnum","iconClassMed","iconClassSmall","textFieldSubFolder","fieldGroup","rootItemStyles","alignItems","folderItemStyles","subFolderItemStyles","fileNameStackItemStyles","addWorkingDirectory","isCheckingForDuplicates","isLoadingMetadata","expanderIsOpen","needsRedirectHome","enableNewTemplateFilters","newTemplateDocumentSetFilters","newTemplateFolderFilters","newTemplateLibraryFilters","mailSendPayload","filesNameUpdated","fileCheckedToggle","normalizedSubject","setNormalizedSubject","Select","isValidSaveLocation","setChangedInput","isCMEmailAttachmentPanelOpen","setIsCMEmailAttachmentPanelOpen","inExchangeMode","setInExchangeMode","showSelectedEmailSummary","setShowSelectedEmailSummary","getSubject","Exchange","enableSave_NewTempateSettings","setEnableSave_NewTempateSettings","currentContentype","isInFolder","newTemplateFilterEnum","formatEmptyValue","canCheckForDuplicates","fileToSet","getChildrenIds","getParentIds","parents","updatedFiles","childrenIds","toggleSelectedFolder","uFile","handleTextFieldOnBlur","StringUtil","IsNullOrWhiteSpace","openMetadataSavingPage","Properties","noItems","NoItemsFound","FileNotSaved","isSubfolderFolderFile","parentFolder","AdvancedSearch","getMainContainerClass","mobile","containerClass","getFooterClass","footerClass","invalidSaveModes","SelectItemsToSave","Of","ItemsSelected","AttachmentsSelected","SelectSaveLocation","canAddListItem","WrongUserPermissionsSave","SavingFilesNotAllowed","isOneDriveLocation","isOneDriveFolder","isSaveButtonDisabled","isSharePointFolder","SharePointFolders","handleSaveClick","msWord","iconSrc","officeFileType","isOfficeFile","officeOnlineEditorAvailable","msExcel","msPowerpoint","Powerpoint","msVisio","Visio","msAccess","Access","msProject","Project","msPublisher","Publisher","msInfopath","Infopath","browser","validExtensionsDictionary","shareLinkRegex","isSharePointSharingUrl","test","getGridItemUrl","itemUrl","listHttpRoot","sharepointDomain","getDriveItemByWebUrl","driveItem","itemUrlResult","decodedHref","tryDecodeUri","contentManager","preloadURL","redirectLocation","itemExtension","shift","getItemPathArray","host","extractedpathArray","isValidHttpUrl","newUrl","protocol","err","datesourceService","getDatasourceEntries","this","GetData","typeName","queryParams","getDataSourcePropertyToBindTo","returnOnlyQueriedProperties","allowCache","boundedField","boundFields","datasourceField","bindDataSourceToDropdown","arr","t","dataSourceDropdownBinder","checkDatasourceAllowed","libraries","siteAllowed","libraryAllowed","site","library","l","reduce","acc","datasourceService","selectedSites","selectedLibraries","source","bound","getSearchStructure","GetStructure","GetEditStructure","addItem","updateSearchInputs","inputsToCopy","statePropToUpdate","copiedInputs","getBoundedField","determineDatasourceType","displayAsDropdown","boundedFields","getInputType","InputTypeSharePointClassifier","dataSourceService","datasourceItem","initialize","propSetter","dropdownBinder","datasourceData","dropdownOptions","DataSourceDropdownInitializer","SharePointInputTypes","note","choiceValue","number","currency","numberValue","datetime","getValues","dataRows","dataRow","row","getTableData","addFileIcons","columnResult","iconClassName","isIconOnly","DetailListBuilder","downloadFile","blob","nav","msSaveOrOpenBlob","createObjectURL","Blob","download","click","removeChild","revokeObjectURL","downloadFileStream","downloadRequestPayload","apiDownloadFileStream","fileBlob","downloadUrl","anchor","FileDownLoader","nameCountMap","Map","fileFullName","has","createFolder","newFolderName","createRootFolder","createChildFolder","createRootSharepointDriveFolder","createRootDriveFolder","createDocumentSet","documentSetCreationData","apiCreateDocumentSet","FolderTypeIconToTypeDictionary","default","sharepointFolder","sharepointSite","teamMainSite","sharepointDocumentSet","sharepointList","sharepointHubSite","FolderTypeIconToImageUrl","imageType","fileIconType","location","teamFolder","font","getImage","isTeamFolder","determineSharePointIconType","false","Format","SharePointFormatTypes","dateOnly","dateTime","NumLines","taxonomyFieldType","taxonomyFieldTypeMulti","hyperlink","image","dropdown","radioButtons","userMulti","titleAutoSetText","updatedFile","fileCheckedToggled","toggledFile","newFileOption","originalInputValue","onedriveUniqueName","initialDocumentLibrary","urlStart","onRenderDetailsHeader","Sticky","stickyPosition","StickyPositionType","Header","isScrollSynced","onRenderColumnHeaderTooltip","tooltipHostProps","RenderHelper","shareLink","fileNameWithoutExtention","openText","xmlData","parseString","SchemaXml","Field","$","IsTermSetValid","mapIContentType","mapContentTypesToDropdownOptions","mapKeyText","mapDocumentSetContentTypesToDropdownOptions","mapFolderContentTypesToDropdownOptions","documentLib","getSharePointDocumentSetSettingsXml","documentSetXml","xmlResult","XmlDocuments","xmlDocSets","XmlDocument","xmlDocSet","AllowedContentType","sharedFields","SharedField","sharedField","view","viewId","ViewId","full","StringValue","sortTerms","tester","emailParts","address","part","setChecked","isFirstRun","validate","role","getValueAsArray","CheckboxMultiColumn","allowFreeForm","FillInChoice","selectedKeys","setSelectedKeys","defaultOptions","initialSelection","selectedValue","getOptions","onComboChange","prevOptions","k","ComboBox","allowFreeform","useComboBoxAsMenuWidth","Choice","setSelectedKey","getTextFromItem","UnconnectedContentTypeNameDatasourcePicker","contentTypeNameValue","updateContentTypeNameValue","setIsOpen","searchInputs","setSearchInputs","setBoundedField","selectedTags","setSelectedTags","enableAutoFillRelatedFields","setEnableAutoFillRelatedFields","isAddDatasourceItemPanelOpen","setIsAddDatasourceItemPanelOpen","boundedFieldName","newSelectedTag","updateSearch","getRelatedDatasourceValues","Search","boundField","suggestionsHeaderText","Suggestions","TagPicker","tagList","suggestedTags","resultRow","propertyValue","tag","tags","tagName","compareTag","listContainsTagList","allowAdd","onItemSelected","Datasource","DataSourcePanel","updateInputValue","ContentTypeNameDatasourcePicker","currencySymbol","setCurrencySymbol","currencyFormatter","setCurrencyFormat","formattedCurrencyValue","setFormattedCurrencyValue","isInFocus","setIsInFocus","numericInputError","setNumericInputError","lcidFormat","lcid","from","CollationLCID","LocaleCurrency","getCurrency","NumberFormat","formatParts","getSymbolFromCurrency","onChangeNumberField","validationResult","onChangeTextField","numberInputField","step","localStringToNumber","textInputField","onFocus","UnconnectedDataSourceDropdown","datasourceItems","setDatasources","isMasterDatasource","isMaster","allowCustomValues","dropdownInitializer","isFreeFormValue","isStrict","resultItem","boundObject","UnconnectedDataSourceMultipleDropdown","valuesAsArray","_event","valueAsArray","alwaysSpaceTaken","panelHeadingHeight","UnconnectedDataSourcePanel","detailListBuilder","setItems","showTable","setShowTable","isSearching","setIsSearching","showFields","setShowFields","topCommandItems","setTopCommandItems","selectionMode","SelectionMode","single","onChangeTextHandle","parseInt","resetTable","tableData","searchItems","handleItemSubmitted","searchFieldsHeight","detailList","detailListStyles","onItemInvoked","SearchItems","IsOfficeJSAvailable","diagnostics","panelWidth","customNear","SearchFields","currentVal","UnconnectedDatasourceTagPicker","NoResultsFound","UnconnectedDatasourceTextTagPicker","resetRelatedDatasourceValues","icon","right","memo","timeOptions","time","setTime","selectedDate","hours","hour","minutes","minute","setTimePart","selectedTime","setHours","render","Component","submitPendingValueEvent","keyColumnInternalName","onSelectedItem","noresultsFoundText","genericNoResultsFoundText","showError","ListItemPickerSelectValue","_listItemRepo","ListItemRepository","componentDidMount","loadOptions","isInitialLoad","defaultSelectedItems","onInitialized","query","keyColumnName","getListItemsByFilterClause","listItems","opt","setState","availableOptions","componentWillReceiveProps","nextProps","autoComplete","comboBoxOptionStyles","onMenuDismissed","onMenuDismiss","onMenuOpen","contextType","ComboBoxListItemPicker","onItemChanged","onFilterChanged","loadListItems","resolvedSugestions","filteredSuggestions","suggestion","sItem","substringSearch","arrayItems","keyColumn","_spservice","getListItems","newSelectedItems","isEqual","ListItemPicker","setDefaultSelectedItems","getListItemsById","lookupPicker","SuggestedValues","Multiline","isNameInput","isTitleInput","selectedIndexes","setSelectedIndexes","indexes","updateTextInput","getIsFileInfoPanelOpen","numberFormatter","maximumFractionDigits","formattedNumberValue","setFormattedNumberValue","decimalSteps","mostRecentlyUsedHeaderText","suggestionsContainerAriaLabel","suggestionStyles","personaWrapper","PeoplePicker","peoplePickerList","setPeoplePickerList","initialPickerList","setInitialPickerList","initialUsers","getSharePointSiteUsers","Email","UserPrincipalName","usr","getSharePointGroupUsers","usergroups","filterPersonasByText","searchText","doesTextInclude","onRenderSuggestionsItem","personaProps","suggestionsProps","PeoplePickerItemSuggestion","currentPersonas","personIds","percentageInputField","PictureHyperLink","setImageUrl","imageUrl","handleHyperLinkFieldOnchange","onBlurLinkField","Image","alt","generateTemplate","getTaxonomyFieldTerms","term","termGuid","termSetId","setTermSetId","defaultTerms","setDefaultTerms","prevTermsRef","allowMultipleSelections","termsetNameOrID","panelTitle","SelectTerm","regionalLocalId","LocaleId","isTermSetSelectable","useSessionStorage","initialValues","getTaxonomyTermSet","termSetResult","TermSetId","termsToFind","findTerms","TaxonomyPicker","readOnly","getTaxonomyProps","COLLAPSED_IMG","EXPANDED_IMG","GROUP_IMG","TERMSET_IMG","TERM_IMG","initializeIcons","previousValues","invalidTerm","cancel","termSetSelectedChange","termSet","ts","termsService","cleanGuid","TermSet","PathOfTerm","_ObjectType_","_ObjectIdentity_","Description","IsDeprecated","IsAvailableForTagging","IsRoot","termsChanged","invalidNodeIds","changedInvalidNodeIds","internalErrorMessage","onGetErrorMessage","validated","resolvedResult","activeNodes","termSetAndTerms","loaded","openPanel","onOpenPanel","bind","onClosePanel","termsFromPickerChanged","validateTerms","componentWillMount","newState","hideDeprecatedTags","hideTagsNotAvailableForTagging","validateOnLoad","notFoundTerms","notFoundTermIds","getAllTerms","allTerms","Terms","len","pickerTerm","TaxonomyPickerTermsNotFound","loadTermStores","termActions","then","updateTaxonomyTree","cloneDeep","selectChildrenIfParentSelected","termItem","path","c","uniqBy","sortBy","onPanelSelectionChange","validateInputText","TaxonomyPickerInvalidTerms","elRef","autoFill","getSelectedNodePosition","node","disabledTermIds","disableChildrenOfDisabledParents","anchorId","ref","termPickerHostProps","hasCloseButton","autoExpand","termset","changedCallback","multiSelection","spTermService","termActionCallback","updateAction","updateActionType","UpdateType","updateTermLabel","termLabel","hideTerm","disableTerm","selectTerm","_handleChange","active","nextContext","getClassName","styleProps","PathDepth","termSetSelectionChange","_terms","expanded","_handleClick","_anchorName","anchorTerms","termElm","parentPath","p","TaxonomyPickerNoTerms","TaxonomyPickerExpandTitle","TaxonomyPickerMenuTermSet","TermParent","BasePicker","TermBasePicker","onRenderItem","onGetTextFromItem","newKeys","currentKeys","onRemoveItem","termParent","termSetName","termTitle","splitPath","TaxonomyPickerInLabel","TaxonomyPickerTermSetLabel","getTermSet","filteredTerms","canBePicked","disabledParents","findTerm","pt","TermPicker","prepareCommandBarButton","termAction","displayStyle","TermActionsDisplayStyle","textAndIcon","btnTitle","getTermActionActionButtonStyle","onActionExecute","actionCallback","checkForImmediateInvocations","action","invokeActionOnRender","renderTermActions","tac","getTermActionChange","actionDisabled","actionHidden","CommandBarButton","allActions","prepareContextualMenuProps","useTargetWidth","termActionMenuItem","termActionButtonStyle","contextualMenuProps","menuProps","DropdownTermAction","TermActionsDisplayMode","applyToTerm","currentTerm","_processedTerms","getTermLabels","_labels","TermLabelAction","setActionStateForTerm","actionId","termId","prevState","termActionChanges","actionChanges","displayMode","termActionsDisplayMode","buttons","termActionsDisplayStyle","availableActions","getAvailableActions","changes","change","loaderStackStyle","inputStackStyle","footerInner","dismissNewFolderPanel","onFolderCreated","setDatasourceItem","isMultipleOptionsAvailable","setIsMultipleOptionsAvailable","setFolderName","isCreatingFolder","setIsCreatingFolder","datasourceBoundContentTypeInputName","setDatasourceBoundContentTypeInputName","Folder","newContentTypeNameValue","updateFolderName","multipleOptions","folderOption","getSharepointListSchema","NewDocumentTemplates","newDocumentTemplates","parse","canAddFolderDocSet","addFolder","addDocset","folders","folderTemplate","isVisible","visible","docSets","docSet","folderContentTypes","folderContentTypeOptions","trimStart","updateMetaDataFieldsFromParentContainer","getInvalidInputNames","FolderName","contentTypeFields","folderNameInput","tooltipProps","onRenderContent","invalidInputNames","FolderType","parentUrl","trimEnd","FolderCreateSuccess","addUploadedFile","deleteFilesByOriginalName","localeLang","uploadObject","setUploadObject","setIsInteraction","asyncSettings","setAsyncSettings","autoUpload","filesSuccess","setFilesSuccess","filesFail","setFilesFail","totalFiles","setTotalFiles","allFiles","setAllFiles","getDocubirdToken","saveUrl","removeUrl","displayLanguage","UploaderComponent","locale","maxFileSize","uploading","args","jwt","getDocubirdTokenCached","currentRequest","setRequestHeader","apiHeaders","xDocubirdAuth","removing","postRawFile","filesData","prevTotal","statusCode","prevFail","prevSuccess","pausing","onLine","resuming","allowedExtensions","operation","removeExtension","fileToUpload","ewsId","rawFile","lastModified","getFilesData","existingFile","failure","clearing","multiple","handle","inputResult","FieldIsRequired","SuccessFull","BaseValidator","MaximumNumberExceeded","MinimumExceeded","isValidateUrl","InvalidUrl","months","shortMonths","days","shortDays","goToToday","prevMonthAriaLabel","nextMonthAriaLabel","prevYearAriaLabel","nextYearAriaLabel","isRequiredErrorMessage","invalidInputErrorMessage","DayOfWeek","Sunday","LibsOrderBy","hasValidValue","getSavingDirectory","getInputValue","BasePersistor","cachedData","getCachedData","axiosRetryPost","localApiInstance","dsData","filteredData","searchParam","searchProperty","hasOwnProperty","structureOnly","cacheKey","defaultsRaw","element","valueSection","mappedDefault","dayjs","tmpName","SplitAndRemoveEmptyEntries","InvalidChars","TrimStart","InvalidStartString","InvalidContain","invalidStartString_index_","invalidStartString_source_","InvalidStartStrings","invalidStartString","substr","invalidName","charCodeAt","InvalidNames","getAllSlices","documentFileData","sliceIndex","sliceReadPromise","sliceResolve","sliceReject","getSliceAsync","asyncResult","AsyncResultStatus","Succeeded","closeAsync","sliceCount","getFolderPreCommitInfo","chunkSize","touchEnabled","commerceAllowed","getFileAsync","FileType","Compressed","sliceSize","fileData","fileBase64Content","onGotAllSlices","docdataSlices","fileContent","j","String","fromCharCode","btoa","ensureUniqueFileName","getAuthData","userAuthData","filesToUpload","foldersToUpload","dataToSend","sharepointInfo","graphToken","sharepointToken","oneDriveToken","fileContents","fileMetadataList","tenantApiKey","getTenantApiKey","apiFileSystemCallDynamicEndpoint","API","fileSystem","signOut","h","isValidHook","outlookFolderType","autoRemoveMailItemAttachments","tenantPiiEnabled","graphMailItemCategory","mailboxToken","_outlookToken","overWriteType","OfficePersistor","disableMailCategorization","emailItem","getCategoriesToAssign","categoriesToAssign","outlook","categoryUpdateRequired","setEWSItemCategory","OutlookPersistor","getItems","autoSelectAttachments","attachments","itemAttachments","attachment","isInline","attachmentsWithEmptyExtension","requestExtensions","extensionData","extData","mainMailItem","getLastSplittedStringItem","attachmentIdList","apiGetAttachmentExtension","serviceType","hostName","convertToRestId","MailboxEnums","RestVersion","v2_0","webAbsoluteUrl","_webAbsoluteUrl","getLibs","queryUrl","orderBy","encodeURIComponent","baseTemplate","filtered","includeHidden","internalColumnName","keyInternalColumnName","filterStr","apiUrl","getListItemsForListItemPicker","filterList","_filter","costumfilter","_top","getListItemAttachments","deleteAttachment","addAttachment","checkAttachmentExists","getAttachment","getListServerRelativeUrl","listServerRelativeUrl","fileServerRelativeUrl","getListName","clientServiceUrl","suggestionServiceUrl","Accept","jsonResult","Labels","_Child_Items_","Value","getTermStores","termStoreResult","r","termstore","termGroups","Groups","group","TermSets","IsSystemGroup","termStore","getTermSetId","termsetId","isGuid","crntTermSet","childTerms","getTermsById","termStoreResultTermSets","termStoreResultTerms","CustomSortOrderIndex","CustomSortOrder","ParentId","sessionStorage","setItem","termsetName","searchTermsByName","searchTermsByTermSet","searchTermsBySearchText","exactMatch","returnTerms","termToFind","convertTermToPickerTerm","searchTermsByTermId","getAllTermsByAnchorId","start","sspList","termSetList","EmptyGuid","isSpanTermStores","isSpanTermSets","isIncludeUnavailable","isIncludeDeprecated","isAddTerms","isIncludePathData","excludeKeyword","excludedTermset","groups","convertSuggestTermToPickerTerm","strGuid","newTermsOrder","itemsToSort","pathLevel","crntTerms","sortTermByPath","crntTerm","pathElms","idx","reverse","guid","Paths","fullPathParts","DefaultLabel","SiteUrl","DragMode","validateDroppedGridItems","isGrid","gridItem","homeItem","treeItem","dataTransfer","kind","gridDataTransferType","sourceDirectory","selectedGridItems","treeType","DirectoryTreeType","validateDroppedFiles","handleDroppedFiles","folderCreateEnabled","clear","fileSystemEntries","fileSystemEntry","webkitGetAsEntry","traverseFileTree","itemCurrentDirectory","getSharePointSite","sharePointSite","itemDetails","reorderData","onlyFiles","handleSelectedFiles","getFileToUpload","webkitRelativePath","fileFolderList","folderEntry","folderToUpload","getFolderToUpload","handleGridMove","destSerRelPathOverride","moveToOperation","Move","isMoveInProgress","destinationServerRelPath","isMoveMode","copyJobRequest","createCopyJobs","setContentManagerMoveToCopyJobResults","jobs","resetContentManagerMoveTo","setContentManagerMoveToError","resetGridItems","createFolders","folderSystemEntriesToUpload","apiCreateFolders","fileEntries","fileSystemEntriesToUpload","fileEntry","fileSystemFile","FormData","apiUpload","fileSystemUploadResults","reset","isFile","isDirectory","fullPath","createReader","readEntries","entries","validSaveAsPdfExtentions","ext","orderedList","folderFiles","versionLabelInternalName","getFileNameDownloadTemplateAvailable","documentLibraries","lib","fileNameDownloadFormat","getFileNameDownloadTemplate","documentLibraryDisplayName","getWildcardValues","templateString","widcardValues","endIndex","getFilenameFromTemplate","itemUniqueId","overrideExtension","getContainerDisplayNames","libraryDisplayName","fileNameTemplateString","wildcardValues","getItemDetails","listFields","wildcardValue","getItemFieldTextValue","getItemCurrentVersion","fieldType","TypeAsString","fieldValue","lookupValue","getListItemCustomSelect","parentReference","getListFields","effect","deps","didMount","savedToTeamsCategory","savedToSharePointCategory","savedToOneDriveCategory","masterCategoriesToAdd","getCallbackTokenAsync","isRest","getSharedPropertiesAsync","timeout","sharedProperties","targetRestUrl","targetMailbox","restUrl","userProfile","getMasterCategories","masterCategories","getAsync","addMasterCategories","categories","addAsync","ensureMasterCategoryExists","category","currentCategories","applyCategory","categoryType","selectors","getMessageUrl","Categories","axiosRetryPatch","ewsItemId","ewsCategorySoapRequest","makeEwsRequestAsync","asyncRes","savingLocationStructureModule","savingLocations","savingLocationStructure","addSavingLocationStructure","getUserSharePointBaseUrl","spBaseUrl","localStorage","getSharePointBaseUrl","getUserSharePointScope","getUserLicense","apiGetUserLicense","UserLicenseTypeEnum","Expired","getUserProfile","apiGetUserProfile","UserModule","lcidCode","lcidTable"],"sourceRoot":""}