{"version":3,"file":"94.js","mappings":"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M,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,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,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,SACN,KAAM,SACN,KAAM,QACN,KAAM,QACN,KAAM,SACN,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,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/useMetaDataFormInputs.ts?","webpack:///./contentManager/Panels/CMAddDatasourceItemPanel.tsx?","webpack:///./contentManager/Panels/CMCheckinModal.tsx?","webpack:///./contentManager/Panels/CMConfirmModal.tsx?","webpack:///./contentManager/Panels/CMFileInfoPanel.tsx?","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/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/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/InputMetadataFactory.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/sharepoint/SaveToSharepoint.tsx?","webpack:///./src/taskpane/components/enums/EmailCreationEnum.ts?","webpack:///./src/taskpane/components/enums/InformationProtectionFileTypesEnum.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/helpers/SearchOpenExtensionHelper.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/inputTypeSharePointClassifier.ts?","webpack:///./src/taskpane/components/helpers/oneDriveUrlHelper.ts?","webpack:///./src/taskpane/components/helpers/renderHelper.tsx?","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/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/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/controlStyles.ts?","webpack:///./src/taskpane/config/dateSettings.ts?","webpack:///./src/taskpane/interfaces/ISPService.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/HooksService.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/styles/datePickerStyles.ts?","webpack:///./utilities/DragAndDropHelper.ts?","webpack:///./utilities/FileNameDownloadTemplateHelper.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 { 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 { NewDocumentTemplate } from \"./MenuItems/useMenuItem_New\";\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\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 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\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 propertyKeys = Object.keys(values);\r\n if (propertyKeys.length > 0) {\r\n const updatedinputValuesToSave = [...inputValuesToSave];\r\n propertyKeys.forEach((propKey) =>\r\n updateDatasourceDisplayNameInputData(updatedinputValuesToSave, propKey, values[propKey])\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 ) => {\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 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 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 === 'FileLeafRef') {\r\n const fileParts = nameValue.split('.');\r\n if (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 === 'FileLeafRef') {\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) => {\r\n const sanitizedName: string = FileFolderNameExtensions.EnsureValidName(input.value);\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 (selectedDocumentLibrary) {\r\n siteUrl = selectedDocumentLibrary.webUrl;\r\n destinationUrl = selectedItem.weburl.replace(`/${selectedItem.name}`, '');\r\n originalFileName = selectedItem.name;\r\n }\r\n else if (webAddinItem) {\r\n siteUrl = webAddinItem.sharepointIds.siteUrl;\r\n destinationUrl = webAddinItem.webUrl.replace(`/${encodeURI(webAddinItem.name)}`, '');\r\n originalFileName = webAddinItem.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 { 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 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, 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 { NewDocumentTemplate } from \"../Body/MenuItems/useMenuItem_New\";\r\nimport { tryDecodeUriComponent, 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 { apiFileReplace, apiUpdateItemMetadata } from \"../../src/taskpane/services/ApiService\";\r\nimport { getDriveRootWebUrl } from \"../../src/taskpane/services/GraphService\";\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 [chekingType, 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 && 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 }, [currentSharepointFolderInfo?.enableMinorVersions, itemWebUrl, selectedItem, fileUpdated]);\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 () => {\r\n const inputValues = [...inputValuesToSave];\r\n\r\n if (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);\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();\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 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 let editLink = results.value;\r\n const 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 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: 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.filter(x => x.internalName !== sharePointInternalFileName).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 request.isFolder = true;\r\n }\r\n\r\n request.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 request.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(request)\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 setIsBusy(false);\r\n 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 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 ? (chekingType ? chekingType : 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};","// 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}\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'\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 personas.push({\r\n text: user.displayName,\r\n secondaryText: user.mail ?? (validateEmail(user.userPrincipalName) ? user.userPrincipalName : undefined)\r\n })\r\n });\r\n } else if (validateEmail(filterText)) {\r\n personas.push({\r\n text: filterText,\r\n secondaryText: filterText,\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: 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 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\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\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\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 { 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 } 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\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 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.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['FileLeafRef']) {\r\n return item['FileLeafRef'];\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 { 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 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 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 { 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 { 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 { 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 { 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\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 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};\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}: 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 isFirstRun = React.useRef(true);\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 setLoading(true);\r\n const setupAsyncWrapper = async () => {\r\n setIsCheckingForDuplicates(true);\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, sharepointSpService);\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\r\n }, isOneDrive);\r\n }\r\n\r\n setLoading(false);\r\n\r\n if (fieldsLoaded) {\r\n fieldsLoaded();\r\n }\r\n\r\n if (!isInfoMode && !tenantReplaceFileNameWithGUID && 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 {\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\r\n } catch (e) {\r\n logger(e, \"SaveToSharepoint.tsx (useEffect 1)\");\r\n setLoading(false);\r\n if (fieldsLoaded) {\r\n fieldsLoaded();\r\n }\r\n }\r\n\r\n setIsCheckingForDuplicates(false);\r\n\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 React.useEffect(() => {\r\n let debounceTimer;\r\n if (!isInfoMode && selectedFileName) {\r\n debounceTimer = setTimeout(() => {\r\n checkFile(selectedFileName);\r\n }, 900);\r\n }\r\n\r\n return () => {\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 React.useEffect(() => {\r\n if (isFirstRun.current) {\r\n isFirstRun.current = false;\r\n return;\r\n }\r\n\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 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 {\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 setFile(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, sharepointSpService: SharepointSpServices) => {\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) {\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) {\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 stackTokens: IStackTokens = {\r\n childrenGap: 15\r\n };\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}","// https://docs.microsoft.com/en-us/information-protection/develop/concept-supported-filetypes\r\nexport enum InfoProtectionFileTypeEnum {\r\n DOC = \".doc\",\r\n DOCM = \".docm\",\r\n DOCX = \".docx\",\r\n DOT = \".dot\",\r\n DOTM = \".dotm\",\r\n DOTX = \".dotx\",\r\n PDF = \".pdf\",\r\n POTM = \".potm\",\r\n POTX = \".potx\",\r\n PPS = \".pps\",\r\n PPSM = \".ppsm\",\r\n PPSX = \".ppsx\",\r\n PPT = \".ppt\",\r\n PPTM = \".pptm\",\r\n PPTX = \".pptx\",\r\n VDW = \".vdw\",\r\n VSD = \".vsd\",\r\n VSDM = \".vsdm\",\r\n VSDX = \".vsdx\",\r\n VSS = \".vss\",\r\n VSSM = \".vssm\",\r\n VSM = \".vst\",\r\n VSTM = \".vstm\",\r\n VSSX = \".vssx\",\r\n VSTX = \".vstx\",\r\n XLS = \".xls\",\r\n XLSB = \".xlsb\",\r\n XLT = \".xlt\",\r\n XLSM = \".xlsm\",\r\n XLSX = \".xlsx\",\r\n XLTM = \".xltm\",\r\n XLTX = \".xltx\",\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 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 { officeFileType } from \"../../config/constants\";\r\nimport { ISearchOpenFileInfo } from \"../../interfaces/ISearchOpenFileInfo\";\r\n\r\nexport class SearchOpenExtensionHelper {\r\n private static msWord = { 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, localUrlPrepended: \"ms-word:ofe|u|\" }\r\n private static msExcel = { 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, localUrlPrepended: \"ms-excel:ofe|u|\" }\r\n private static msPowerpoint = { 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, localUrlPrepended: \"ms-powerpoint:ofe|u|\" }\r\n private static browser = { iconName: \"BrowserTab\", type: officeFileType.Browser, localUrlPrepended: \"\" };\r\n private static app = { 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 \"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 \"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\r\n public static determineOfficeFileType = (extension: string, allowOpenInApp: boolean = true): ISearchOpenFileInfo => {\r\n if (extension) {\r\n return SearchOpenExtensionHelper.validExtensionsDictionary[extension.replace(\".\", \"\").trim().toLowerCase()]\r\n ?? (allowOpenInApp ? SearchOpenExtensionHelper.app : SearchOpenExtensionHelper.browser);\r\n }\r\n return SearchOpenExtensionHelper.browser;\r\n };\r\n}","import { dataSourceItem } from \"../../redux/models/reduxModels\";\r\nimport { IDropdownOption } from \"@fluentui/react\";\r\nimport { DatasourceService } from \"../../services/DatasourceService\";\r\nimport { DatasourceTypeEnum } from \"../enums/datasourceTypeEnum\";\r\nimport authModule from \"../../../../utilities/AuthModule\";\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 accessToken: this.datasource.type.id === DatasourceTypeEnum.SharePoint ? await authModule.getSharePointAccessToken() : undefined,\r\n queryParams: [{ name: this.getDataSourcePropertyToBindTo(), value: \"\" }],\r\n returnOnlyQueriedProperties: true,\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 authModule from \"../../../../utilities/AuthModule\";\r\nimport { IDatasourceRequestDto } from \"../../interfaces/DatasourceRequestDto\";\r\nimport { dataSourceItem } from \"../../redux/models/reduxModels\";\r\nimport { DatasourceService } from \"../../services/DatasourceService\";\r\nimport { DatasourceTypeEnum } from \"../enums/datasourceTypeEnum\";\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 accessToken: item.type.id === DatasourceTypeEnum.SharePoint ? await authModule.getSharePointAccessToken() : undefined,\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 accessToken: item.type.id === DatasourceTypeEnum.SharePoint ? await authModule.getSharePointAccessToken() : undefined,\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 accessToken: item.type.id === DatasourceTypeEnum.SharePoint ? await authModule.getSharePointAccessToken() : undefined,\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 { 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","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 // return url.substr(0, url.indexOf(OneDriveUrlHelper.initialDocumentLibrary));\r\n }\r\n\r\n static getRelativeUrl = (url: string): string => {\r\n return url.substr(url.indexOf(OneDriveUrlHelper.onedriveUniqueName));\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","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 { Dropdown, 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\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 [selectedKeys, setSelectedKeys] = React.useState();\r\n\r\n const isFirstRun = React.useRef(true);\r\n\r\n React.useEffect(() => {\r\n if (inputValue?.value) {\r\n setSelectedKeys(Array.isArray(inputValue?.value) ? inputValue.value : inputValue?.value ? [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 ? Array.isArray(inputValue?.value) ? inputValue?.value : [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 = (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\r\n const HandleOnBlur = (event): void => {\r\n updateInputValidationStatus(inputValidator.validate(selectedKeys));\r\n };\r\n\r\n return (\r\n ({ key: item, text: item }))}\r\n errorMessage={error}\r\n className=\"xb-sp-input\"\r\n />\r\n );\r\n};\r\n\r\nexport default CheckboxMultiColumn;\r\n","import * as React from \"react\";\r\nimport { Dropdown, 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\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 const [options] = React.useState([{ key: null, text: \"\" }, ...Choices.map(item => ({ key: item, text: item }))]);\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 = (event: React.FormEvent, item: IDropdownOption): void => {\r\n updateInputValidationStatus(inputValidator.validate(item.key));\r\n };\r\n\r\n return (\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 * 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, 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 { 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 { DatasourceTypeEnum } from \"../enums/datasourceTypeEnum\";\r\nimport authModule from \"../../../../utilities/AuthModule\";\r\nimport { SharePointMetadataBooleans } from \"../../config/sharepointConstants\";\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\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, false);\r\n const [result] = await Promise.all([dataSourceHelper.getSearchStructure(dataSourceItem), dropdownInitializer.initialize(setDatasources)]);\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 } 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 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, \"dataSourceDropdown.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 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);\r\n };\r\n\r\n const getRelatedDatasourceValues = async (searchValue: string) => {\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 accessToken: dataSourceItem.type.id === DatasourceTypeEnum.SharePoint ? await authModule.getSharePointAccessToken() : undefined,\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() !== 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 } catch (error) {\r\n logger(error, \"dataSourceDropdown.tsx (getRelatedDatasourceValues)\");\r\n }\r\n }\r\n\r\n const input = (\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, Label, Spinner, SpinnerSize, FontIcon } 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 { SharePointMetadataBooleans } from \"../../config/sharepointConstants\";\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\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(setDatasources)]);\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 try {\r\n setSelectedKeys(Array.isArray(inputValue?.value) ? inputValue.value : inputValue?.value ? [inputValue.value] : []);\r\n } catch (e) {\r\n logger(e, \"dataSourceMultipleDropdown.tsx (inputValue?.value)\");\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, \"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 setSelectedKeys([newValue]);\r\n updateInputValidationStatus(inputValidator.validate(newValue));\r\n updateSearch(newValue);\r\n };\r\n\r\n const HandleOnBlur = (event): void => {\r\n updateInputValidationStatus(inputValidator.validate(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 setSelectedKeys(selectedItems);\r\n updateSearch(selectedItems && selectedItems.length === 1 ? selectedItems[0] : \"\");\r\n }\r\n };\r\n\r\n const input = (\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 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 { DatasourceTypeEnum } from \"../enums/datasourceTypeEnum\";\r\nimport authModule from \"../../../../utilities/AuthModule\";\r\nimport { AddDataResponse, 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 accessToken: props.datasourceItem.type.id === DatasourceTypeEnum.SharePoint ? await authModule.getSharePointAccessToken() : undefined,\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 { DatasourceTypeEnum } from \"../enums/datasourceTypeEnum\";\r\nimport authModule from \"../../../../utilities/AuthModule\";\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) {\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 accessToken: dataSourceItem.type.id === DatasourceTypeEnum.SharePoint ? await authModule.getSharePointAccessToken() : undefined,\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 { DatasourceTypeEnum } from \"../enums/datasourceTypeEnum\";\r\nimport authModule from \"../../../../utilities/AuthModule\";\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\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\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 } 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 } 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) {\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 accessToken: dataSourceItem.type.id === DatasourceTypeEnum.SharePoint ? await authModule.getSharePointAccessToken() : undefined,\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) getRelatedDatasourceValues(searchValue);\r\n };\r\n\r\n const getRelatedDatasourceValues = async (searchValue: string) => {\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 accessToken: dataSourceItem.type.id === DatasourceTypeEnum.SharePoint ? await authModule.getSharePointAccessToken() : undefined,\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() !== 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 } catch (error) {\r\n logger(error, \"datasourceTextTagPicker.tsx (getRelatedDatasourceValues)\");\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 * 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}","import {\r\n IPanelStyles,\r\n getTheme,\r\n mergeStyles,\r\n IDetailsListStyles,\r\n IDetailsRowStyles,\r\n getRTL,\r\n ILinkStyles,\r\n IButtonStyles,\r\n mergeStyleSets\r\n} from \"@fluentui/react\";\r\n\r\nconst theme = getTheme();\r\nexport const panelStyles: Partial = {\r\n // headerText: {\r\n // fontWeight: FontWeights.regular,\r\n // color: theme.palette.themeDarkAlt\r\n // }\r\n};\r\n\r\nexport const profilePanelStyles: Partial = {\r\n // headerText: panelStyles.headerText,\r\n header: { paddingLeft: 15, paddingRight: 15 },\r\n content: { paddingLeft: 15, paddingRight: 15 }\r\n}\r\n\r\nexport const uploadPanelStyles: Partial = {\r\n // ...panelStyles,\r\n content: { paddingTop: 10 },\r\n footer: {\r\n backgroundColor: \"#fff\"\r\n },\r\n};\r\n\r\nexport const settingsIconClass = mergeStyles({\r\n color: theme.palette.themeDarkAlt,\r\n cursor: \"pointer\",\r\n paddingRight: 5,\r\n fontSize: 16\r\n});\r\n\r\nexport const detailListStyles: Partial = {\r\n root: {\r\n margin: \"0 0 0 0\",\r\n padding: \"0px\",\r\n MsOverflowStyle: \"scrollbar\"\r\n },\r\n headerWrapper: {\r\n paddingTop: 0\r\n }\r\n};\r\n\r\nexport const detailRowStyles: Partial = {\r\n root: {\r\n fontSize: \"14px\",\r\n selectors: {\r\n \":hover\": { fontSize: \"14px\" }\r\n }\r\n }\r\n};\r\n\r\nexport const detailRowLinkStyles: ILinkStyles = {\r\n root: {\r\n color: theme.palette.neutralPrimary,\r\n \":hover\": {\r\n color: theme.palette.neutralPrimary,\r\n textDecoration: \"underline\"\r\n },\r\n maxWidth: \"100%\"\r\n }\r\n};\r\n\r\nexport const detailRowPiiDetectedStyles: Partial = {\r\n root: {\r\n fontSize: \"14px\",\r\n backgroundColor: '#ffebe5',\r\n borderBottom: '1px solid rgb(255, 255, 255)',\r\n selectors: {\r\n \":hover\": { backgroundColor: '#ffded4' }\r\n }\r\n }\r\n};\r\n\r\nexport const detailRowPiiNotDetectedStyles: Partial = {\r\n root: {\r\n fontSize: \"14px\",\r\n backgroundColor: '#e7f9e6',\r\n borderBottom: '1px solid rgb(255, 255, 255)',\r\n selectors: {\r\n \":hover\": { backgroundColor: '#dff6dd' }\r\n }\r\n }\r\n};\r\n\r\nexport const detailRowPiiDetectedStylesCM: Partial = {\r\n root: {\r\n backgroundColor: '#ffebe5',\r\n borderBottom: '1px solid rgb(255, 255, 255)',\r\n selectors: {\r\n \":hover\": { backgroundColor: '#ffded4' }\r\n }\r\n }\r\n};\r\n\r\nexport const detailRowPiiNotDetectedStylesCM: Partial = {\r\n root: {\r\n backgroundColor: '#e7f9e6',\r\n borderBottom: '1px solid rgb(255, 255, 255)',\r\n selectors: {\r\n \":hover\": { backgroundColor: '#dff6dd' }\r\n }\r\n }\r\n};\r\n\r\nexport const clearButtonClass: string = mergeStyles({\r\n display: 'flex',\r\n flexDirection: 'row',\r\n alignItems: 'stretch',\r\n cursor: 'pointer',\r\n flexBasis: '32px',\r\n flexShrink: 0,\r\n padding: 0,\r\n margin: '-1px 0px',\r\n selectors: {\r\n '&:hover .ms-Button': {\r\n backgroundColor: theme.palette.neutralLighter,\r\n },\r\n '&:hover .ms-Button-icon': {\r\n color: theme.palette.neutralPrimary,\r\n },\r\n '.ms-Button': {\r\n borderRadius: getRTL(theme) ? '1px 0 0 1px' : '0 1px 1px 0',\r\n },\r\n '.ms-Button-icon': {\r\n color: theme.palette.neutralSecondary,\r\n },\r\n },\r\n});\r\n\r\nexport const confirmDeleteButtonStyles: IButtonStyles = {\r\n root: {\r\n cursor: \"unset\",\r\n },\r\n rootHovered: {\r\n color: theme.palette.neutralPrimary,\r\n }\r\n};\r\n\r\nexport const editFilePropertiesButtonStyles: IButtonStyles = {\r\n root: {\r\n paddingTop: 5,\r\n paddingRight: 0,\r\n paddingBottom: 0,\r\n paddingLeft: 0\r\n }\r\n};\r\n\r\nexport const dropZoneStyles: React.CSSProperties = {\r\n borderWidth: 2,\r\n borderStyle: \"dashed\",\r\n borderColor: theme.palette.themeDarkAlt,\r\n boxSizing: \"border-box\"\r\n}\r\n\r\nexport const dropZoneStyleSets = mergeStyleSets({\r\n dropzoneActive: {\r\n position: \"relative\",\r\n \"*\": {\r\n pointerEvents: \"none\"\r\n },\r\n \":after\": {\r\n borderWidth: 2,\r\n borderStyle: \"dashed\",\r\n borderColor: theme.palette.themeDarkAlt,\r\n boxSizing: \"border-box\",\r\n content: '\" \"',\r\n display: \"block\",\r\n pointerEvents: \"none\",\r\n position: \"absolute\",\r\n top: 0,\r\n left: 0,\r\n bottom: 0,\r\n right: 0,\r\n zIndex: 999\r\n }\r\n }\r\n});\r\n\r\nexport const dragZoneStyleSets = mergeStyleSets({\r\n dragzoneActive: {\r\n position: \"relative\",\r\n \"*\": {\r\n pointerEvents: \"none\"\r\n },\r\n \":after\": {\r\n borderWidth: 2,\r\n borderStyle: \"dashed\",\r\n borderColor: theme.palette.neutralSecondary,\r\n boxSizing: \"border-box\",\r\n content: '\" \"',\r\n display: \"block\",\r\n pointerEvents: \"none\",\r\n position: \"absolute\",\r\n top: 0,\r\n left: 0,\r\n bottom: 0,\r\n right: 0,\r\n zIndex: 999\r\n }\r\n }\r\n});\r\n\r\nexport const fileIconHeaderIcon: string = mergeStyles({\r\n padding: 0,\r\n fontSize: '16px'\r\n});\r\n\r\nexport const brandedCommandbarIconStyles: string = mergeStyles({\r\n marginLeft: 4,\r\n marginRight: 4,\r\n maxWidth: 20\r\n});","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}","import { axiosRetryPost, localApiInstance } from \"../../../utilities/AxiosRetryUtil\";\r\nimport { logger } from \"../../../utilities/logger\";\r\nimport { IDatasourceRequestDto } from \"../interfaces/DatasourceRequestDto\";\r\nimport { IDatasourceQueryDto } from \"../interfaces/IDatasourceQueryDto\";\r\n\r\nexport class DatasourceService {\r\n GetData = async (request: IDatasourceQueryDto): Promise => {\r\n try { \r\n const result = await axiosRetryPost(\"Datasource/GetData\", request, undefined, false, localApiInstance);\r\n return result?.data ?? [];\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 const result = await axiosRetryPost(\"Datasource/GetStructure\", request, undefined, false, localApiInstance);\r\n return result?.data ?? [];\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 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 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\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 { 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 { 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 { 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 { 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\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);\r\n if (field) {\r\n fileName = fileName.replaceAll(`<<[${wildcardValue}]>>`, getItemFieldTextValue(listItem, field) ?? \"\");\r\n }\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];\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 { 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 Office.context.mailbox.item.getSharedPropertiesAsync((result) => {\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":["selectedItem","selectedDocumentLibrary","infoPanelMode","webAddinItem","selectedTemplate","languageStrings","useContext","LanguageContext","dispatch","useDispatch","currentDirectory","useSelector","state","workingDirectories","length","oneDriveRootDetails","datasourceValues","datasource","values","user","requiredMetadataOnPublish","tenantInfo","useState","inputValuesToSave","setInputValuesToSave","itemWebUrl","setItemWebUrl","itemSharepointListId","setItemSharepointListId","fieldsLoaded","setFieldsLoaded","extention","setExtention","getItemByUniqueId","useLazyGetItemByUniqueIDQuery","checkIfInOneDrive","type","ComponentTypes","OneDrive","OneDriveSubFolder","oneDriveWebUrl","webUrl","startsWith","isInOneDrive","useRef","firstLoad","useEffect","updateMetadataPropertiesFromDataSource","current","siteUrl","sharepointIds","sharePointSiteUrl","sharePointListId","listId","propertyKeys","Object","keys","forEach","propKey","updateDatasourceDisplayNameInputData","updateSharepointMetadataToSave","setDatasourceValues","updatedinputValuesToSave","value","inputToUpdate","find","item","boundName","xml","ContentTypeInputName","displayName","trim","toLowerCase","internalName","sharePointInternalFileName","validatedValue","DatasourceValidationHelper","validateAndTransformDatasourceValue","updatedInput","index","hasError","updatedFromDataSourceToggle","addRequiredMetadataToCache","inputValues","requiredMetaFieldsInternalNames","split","inputValue","some","x","valueToCache","Number","toString","Array","isArray","map","Label","join","CacheHelper","set","JSON","stringify","metadata","informationProtectionId","error","logger","mapColumnsToSaveFields","fields","uniqueId","listItemUniqueId","uniqueid","UniqueId","replace","getOneDriveAccessToken","getSharePointAccessToken","accessToken","unwrap","fileParts","name","FileLeafRef","slice","inputSaveFields","initialValue","InternalName","Type","Url","dateValue","Date","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","getMilliseconds","initialValueIsRequired","Required","SharePointMetadataBooleans","true","Percentage","DisplayName","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","DefaultValueService","setValue","validateName","input","addInItem","sanitizedName","FileFolderNameExtensions","EnsureValidName","isFolder","isInConentMangerMode","NewTemplate","contenttypeid","SharePointFolderContentTypeIds","folder","ContentTypeId","newFileName","destinationUrl","weburl","originalFileName","errorMessage","FieldRequired","encodeURI","directory","isTeamsRootFolder","parentId","getDriveRootWebUrl","id","isNameChanged","fileName","autoFolderCreation","ignoreSameUserLock","fileRequest","apiFilePreCommitCheck","results","checkedOut","FileSameCheckedOut","locked","FileSameLocked","exists","FileSameName","folderName","folderRequest","apiFolderPreCommitCheck","FolderSameName","scrollStyle","mergeStyles","position","height","stackTokens","childrenGap","panelStyles","content","paddingLeft","paddingRight","CMAddDatasourceItemPanel","panelIsOpen","closePanel","dataSourceItem","dataSourceHelper","formData","setFormData","getEditStructure","result","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","key","label","title","form","onChange","e","newValue","Checkbox","checked","parsedDate","DatePicker","isRequired","allowTextInput","parseDateFromString","DateService","isNaN","getTime","onSelectDate","newDate","toISOString","textField","Dropdown","options","option","selectedKey","event","dialogContentProps","DialogType","normal","showCloseButton","panelButtonsContainer","float","paddingTop","CMCheckinModal","selectedItems","selectedAddInItems","showDialog","isPublish","closeDialog","closeOnSuccess","fileUpdatePublishInfo","updateOfficeXML","currentSharepointFolder","autoDeleteMinorVersionsOnPublish","regionalSettings","versionProps","setVersionProps","CheckinTypes","majorCheckIn","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","request","sharepointSpService","getSharePointDocumentLibraryFields","sharepointListId","SharepointFilters","search","BaseSharepointHelper","convertMetadataToFields","filter","field","includes","originalInputValues","inputValuesToSaveFields","setupInputValues","enableMinorVersions","minorCheckIn","getFileVersionData","fileVersionData","multipleFilesSelected","level","Level","majorVersion","MajorVersion","minorVersion","MinorVersion","onConfirmCheckin","isCurrentDirectorySPList","SharePointList","isListItem","listSettings","apiUpdateItemMetadata","newRequest","contentTypeMeta","unshift","data","message","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","panelActionButtonStyle","root","tooltipHostCalloutProps","gapSpace","navigation","justifyContent","uploaderContainerStyles","fileNameContainerTokens","fileIconContainerStyles","fileNameContainerStyles","margin","fileNameTextContainerStyles","defaultCloseButtonContainerStyles","showMoreContainerStyles","paddedContainerStyles","paddingBottom","fileNameTextStyles","whiteSpace","textOverflow","overflow","fontWeight","CMFileInfoPanel","folderPath","userPermissions","keepOpenOnSave","userAccount","account","files","mode","tenantReplaceFileNameWithGUID","replaceFileNameWithGUID","tenantOpenDocumentsInClientApp","openDocumentsInClientApp","minVersionLimit","createDocumentAndGetEditLink","useLazyCreateDocumentAndGetEditLinkQuery","showSelectVersion","setShowSelectVersion","replacementFileView","setReplacementFileView","selectedOutlookFileViews","setSelectedOutlookFileViews","chekingType","replacementFile","setReplacementFile","setSelectedItem","sectionStyle","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","DocubirdCache","officeFileUniqueId","get","file","generateToastError","ErrorMessageGeneric","userItemPermissions","PermMask","getUserEffectivePermissionsFromMask","refreshSettings","refreshPermissions","getListSettings","getUserEffectivePermissions","settings","permissions","canView","canCreateFolder","EnableFolderCreation","contentTypesEnabled","ContentTypesEnabled","EnableMinorVersions","getFileExtension","extension","Fileview","driveId","fileType","isMobile","multiSelect","hasShowMore","tenantEnablePII","isLocalFile","itemSelected","outlookItemSelected","lastModifiedDateTime","fileRemoved","itemHeight","mobileListItemStyle","containerHeight","maxHeight","transition","timeOutId","setTimeout","clearTimeout","hasChanged","terms","sharepointDataIsValid","nameField","itemsWithErrors","items","customToast","MetadataValidationFailed","generateErrors","ModeEnum","office","Office","context","requirements","isSetSupported","Word","run","document","save","sync","Excel","workbook","SaveBehavior","res","onRenderNavigationContent","props","defaultRender","verticalAlign","FSObjType","Icon","getFileTypeIconProps","FileIconType","listItem","imageFileType","FileSystemObjectType","documentSet","docset","getHeaderFileIcon","grow","Title","New","getHeaderText","File_x0020_Type","saveButtonText","useMemo","SaveInProgress","Create","SaveProperties","Save","resetFiles","MessageBar","messageBarType","MessageBarType","warning","isMultiline","dismissButtonAriaLabel","FileVersionLimitReached","truncated","ReplacementFileRequired","ReplacementFileRequiredMessage","AvailableFiles","prevShowMoreIsClicked","FontIcon","ShowLess","ShowMore","onComplete","fails","successes","total","onClear","onFileUploaded","uploadedFile","enableAutoUpload","allowMultipleFiles","isInfoMode","addNameField","disableNameField","isCreateFromTemplate","itemContentTypeId","fieldsChanged","contentTypeId","TooltipHost","canEditListItem","WrongUserPermissionsUpdate","calloutProps","Update","internalSharepointName","isNormalUpdate","now","getAccount","accountId","fileUniqueId","officeFile","originalName","FileService","GetFileContent","base64Content","ContentBase64","isDuplicate","mailSend","mailbox","itemId","OutlookUtils","getRestURL","url","getOutlookToken","outlookToken","ewsUrl","getEWSURL","getEWSToken","ewsToken","ewsMailItemId","OutlookService","getItemEWSId","outlookRestInfo","emailItemId","getItemRestId","attachmentFile","push","apiFileReplace","filename","retryLimit","attempt","utc","format","charAt","getFilePreCommitInfo","preCommitResult","tryEncodeUriComponent","replaceAll","template","getItemAbsoluteUrl","absUrl","fileInfo","SearchOpenExtensionHelper","determineOfficeFileType","localUrlPrepended","window","open","marginLeft","fontSize","ToastContainer","autoClose","hideProgressBar","Slide","updatedInputValues","ConfirmPublish","No","Yes","success","msg","toast","info","loaderStackStyles","width","Loader","React","hide","StackItem","align","hideLabel","ariaLive","labelPosition","suggestionProps","noResultsFoundText","loadingText","showRemoveButtons","suggestionsAvailableAlertText","PeopleFinder","selectedPersonasChanged","mostRecentlyUsed","setMostRecentlyUsed","selectedPersonas","getUsers","useLazyGetUsersQuery","picker","NormalPeoplePicker","removeDuplicates","itemRemoved","newMostRecentlyList","sort","a","b","secondaryText","onResolveSuggestions","filterText","orderby","select","getGraphAccessToken","users","mail","validateEmail","userPrincipalName","isCustomEmail","filteredPersonas","sortResults","pickerSuggestionsProps","onValidateInput","validateInput","removeButtonAriaLabel","inputProps","onBlur","ev","customTextValue","target","primaryText","componentRef","onInputChange","resolveDelay","first","others","i","indexOf","concat","console","warn","personas","possibleDupes","persona","listContainsPersona","ValidationState","valid","invalid","emailAddress","exec","substring","SuccessErrorMessage","isSuccess","isError","successMessage","errorList","successStyle","color","successLabel","errorStyle","errorLabel","Boolean","responseStyle","backgroundColor","FontSizes","size16","FontWeights","semibold","textAlign","size14","regular","setOptions","choiceOptions","VersionMinorDraft","VersionMajorPublished","VersionMinorOverwrite","ChoiceGroup","defaultSelectedKey","Version","WebPanel","children","iconStyles","exchangeItem","selectFile","selectExchangeItem","openFileOptions","nonClickable","modifiedBy","setModifiedBy","removableAndNonClickable","initModifiedBy","modifiedByValue","getItemCustomSelect","graphItemData","lastModifiedBy","Unknown","pii","piiError","piiDetected","getFileItemClass","Check","selected","selectedFile","currentLocation","isChecking","PrivacySensitiveChecking","xSmall","PrivacySensitiveDataNotChecked","PiiTooltip","PIIDetected","PII","calloutWidth","delay","TooltipDelay","medium","getFileItemIcon","Text","overflowMode","TooltipOverflowMode","Parent","By","MoreActions","subject","receivedDateTime","From","sender","hasAttachments","labelInfoStyle","ApprovalPanel","tenantGuid","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","tenantId","HookTypeId","HookType","AllApproval","validHooks","getValidHooks","hook","tempFiles","selectedApprovers","setSelectedApprovers","isDisabled","typeId","Generic","isPeoplePickerRequired","onFormatDate","date","onClearClick","defaultPrevented","stopPropagation","preventDefault","showMore","placeholder","SelectOption","AutomationFlowName","responsiveMode","ResponsiveMode","large","flowChanged","AutomationFlowDescription","description","AutomationFlowNotSelected","Approvers","peoplePickerTitle","Participants","email","isInteger","dueDateDays","DueDate","firstDayOfWeek","strings","DayPickerStrings","minDate","add","toDate","DueDateDescription","EnterDate","ariaLabel","showMonthPickerAsOverlay","formatDate","onRenderSuffix","clearButtonClass","IconButton","iconButtonStyles","iconButtonProps","clearButtonProps","textFieldStyles","datePickerStyles","Details","AutomationFlowRequestSuccess","AutomationFlowRequestError","failedFileNames","Send","links","tempFile","hasGraphItemId","sharepointId","driveInfoResults","driveInfo","folderId","getFileItemInfo","fileItem","getFileItemIdFromRelativePath","spItemUrlparts","URL","getItemWebViewUrl","driveUrl","folderUrl","origin","pathname","recipients","ShareableLinkRequestType","View","scope","ShareableLinkRequestScope","Users","createItemShareableLink","getItemApprovalRequestInfo","createLinkResults","fileDetails","sharingUrl","link","fullWebUrl","DocumentLibrary","getItem","serverRelativeUrl","listItemId","resolve","reject","approvalRequest","hookId","hookTypeId","hookName","username","approvers","details","itemLinks","apiRequestApproval","response","tooltipTextStyle","isLoading","PrivacySensitiveDataFound","u","PrivacySensitiveDataNotFound","PrivacySensitiveCheckError","convertEmailToPDF","siteInfo","sites","getFilePreCommitCheckAsync","siteFileDestinationInfo","isOneDrive","saveMode","isSelected","parentFolderId","isMainMailItem","SaveMode","SaveAsPdf","canSaveAsPDF","checkedOutBy","lockedBy","filePreCommitResult","setFiles","checkPdfFiles","setIsCheckingForDuplicates","destUrl","FolderView","canViewFolder","fileCheckResults","setError","classifier","dataSourceSharePointClassifier","inputType","getSharepointInputType","InputTypeEnum","DateOnly","DateTime","updateValue","updateInputValidationStatus","determineInitialInputValue","taxonomyDouble","UserSelectionScope","min","Min","max","Max","validationProperties","parseFloat","decimals","Decimals","List","columnInternalName","ShowField","generateField","mapDispatchToProps","setExpandedItem","connector","connect","expanders","isExpanded","toggleIsExpanded","itemCount","overflowY","theme","getTheme","containerStackTokens","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","create","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","multipleMetaUpdateIcon","inputFieldsStackStyles","undefinedString","setSavingLocation","setFilesCanOverwrite","addRegionalSettings","setCanViewFolder","setFile","setFileExpander","isSavingInBackground","savingInBackground","hiddenMetadataFields","reload","toggle","tenantDisableFileRename","disableFileRename","datasources","moveTo","contentManagerDirectory","OfficeService","selectedIndividualFile","setSelectedIndividualFile","showUpdateIndividualFilesButton","setIsCMMultipleFilesMetaDataPanelOpen","showSelectedFileCount","isBulkEdit","mailSendConfig","DragAndDropHelper","isDroppedModeActive","f","isFileSystemEntry","fileList","setFileList","selectedFileList","setSelectedFileList","setLoading","contentTypes","setContentTypes","documentSetSettings","setDocumentSetSettings","selectedContentType","setSelectedContentType","protectionLabels","selectedProtectionLabel","setSelectedProtectionLabel","showProtectionDropdown","DatasourceFieldHelper","getDatasourceFields","siteDisplayName","selectedFileName","setSelectedFileName","isFirstRun","emailMappings","locationDefaultValues","useFiles","isOneDriveBusiness","showStaticNameField","OneDriveUrlHelper","getSiteUrl","getSiteRegionalSettings","getContentTypes","isSaveLocationStructureSet","setSavingLocationStructure","fileTitle","documentLibrary","preComitResult","updatedFileList","updatedSelectedFileList","debounceTimer","checkFile","getMailExchangeInformation","sensitivityLabelId","saveLocation","getSavingDestination","fileToSet","mailItemRestId","mailItemRestUrl","token","restURL","updateMessageUrl","headers","axiosRetryGet","updateValuesFromExchange","documentSetContentTypeId","parentDocumentSetContentTypeId","dir","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","sharePointInternalTitleName","addContentTypeMetadataMutation","spEmailPropertyMappings","exchangeMailMode","moveToEnabled","ContentManagerCopyMoveModeEnum","CopySelectedEmails","CopyEntireFolderEmails","spColumnNames","getAllListedColumns","spColumnName","col","getSpToEmailMapping","mappedValue","setMappedDefault","selectedExchangeItems","mappedResult","getOfficeJSToEmailMapping","mappedVal","hasMultipleValuesMapped","emailMappedProperty","mailPropertyName","mapping","columnName","emailProperty","folderDefaultValue","fieldName","AutoSetEmailProperty","defaultValues","tryDecodeUriComponent","locationDefaults","endsWith","folderUrlParts","pop","parentDefaults","isDefault","GeneratedFields","canOverwrite","inputFields","ActionButton","editFilePropertiesButtonStyles","allowDisabledFocus","UpdateIndividualFileMetaData","FilesSelectedToUpload","ContentType","TitleAutoSet","formatNameFieldValue","suffix","SelectSensitivityLabel","Sensitivity","EmailCreationEnum","EmailCreationTypeEnum","InfoProtectionFileTypeEnum","OfficeServiceEnum","ValidationResultEnum","DatasourceTypeEnum","msWord","iconSrc","officeFileType","isOfficeFile","msExcel","msPowerpoint","Powerpoint","browser","Browser","app","App","validExtensionsDictionary","allowOpenInApp","datesourceService","getDatasourceEntries","this","GetData","typeName","SharePoint","queryParams","getDataSourcePropertyToBindTo","returnOnlyQueriedProperties","boundedField","boundFields","datasourceField","bindDataSourceToDropdown","arr","v","t","toUpperCase","dataSourceDropdownBinder","checkDatasourceAllowed","libraries","siteAllowed","libraryAllowed","site","s","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","columns","dataRow","row","getTableData","addFileIcons","columnResult","isResizable","iconClassName","isIconOnly","DetailListBuilder","downloadFile","blob","nav","navigator","msSaveOrOpenBlob","createObjectURL","Blob","createElement","href","download","body","appendChild","click","removeChild","revokeObjectURL","downloadFileStream","downloadRequestPayload","apiDownloadFileStream","fileBlob","downloadUrl","anchor","FileDownLoader","false","Format","SharePointFormatTypes","dateOnly","dateTime","NumLines","taxonomyFieldType","taxonomyFieldTypeMulti","hyperlink","image","dropdown","radioButtons","userMulti","onedriveUniqueName","initialDocumentLibrary","urlStart","getRelativeUrl","substr","getOpenInOneDriveDesktopUrl","fileId","siteId","userEmail","userId","onRenderDetailsHeader","Sticky","stickyPosition","StickyPositionType","Header","isScrollSynced","onRenderColumnHeaderTooltip","tooltipHostProps","RenderHelper","xmlData","parseString","SchemaXml","err","Field","$","IsTermSetValid","mapIContentType","mapContentTypesToDropdownOptions","mapKeyText","mapDocumentSetContentTypesToDropdownOptions","mapFolderContentTypesToDropdownOptions","documentLib","getSharePointDocumentSetSettingsXml","documentSetXml","xmlResult","XmlDocuments","xmlDocSets","XmlDocument","xmlDocSet","AllowedContentType","sharedFields","SharedField","sharedField","view","viewId","ViewId","full","word","lastIndexOf","StringValue","sortTerms","tester","emailParts","address","part","test","isChecked","setChecked","validate","Toggle","onText","offText","role","CheckboxMultiColumn","selectedKeys","setSelectedKeys","Choice","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","setIsOpen","setDatasources","searchInputs","setSearchInputs","setBoundedField","setIsLoading","enableAutoFillRelatedFields","setEnableAutoFillRelatedFields","dropdownInitializer","boundedFieldName","updateSearch","getRelatedDatasourceValues","searchValue","Search","boundField","Datasource","DataSourcePanel","updateInputValue","UnconnectedDataSourceMultipleDropdown","_event","commandBarStyle","alwaysSpaceTaken","panelHeadingHeight","UnconnectedDataSourcePanel","detailListBuilder","dismissPanel","setItems","setColumns","showTable","setShowTable","isSearching","setIsSearching","showFields","setShowFields","topCommandItems","setTopCommandItems","isAddDatasourceItemPanelOpen","setIsAddDatasourceItemPanelOpen","selection","Selection","onSelectionChanged","getSelection","selectionMode","SelectionMode","single","onChangeTextHandle","parseInt","resetTable","searchParams","tableData","searchItems","handleItemSubmitted","searchFieldsHeight","Math","classNames","mergeStyleSets","wrapper","allowAdd","detailList","CommandBar","DetailsList","compact","setKey","detailListStyles","layoutMode","DetailsListLayoutMode","justified","constrainMode","ConstrainMode","unconstrained","selectionPreservedOnEmptyClick","ariaLabelForSelectionColumn","ariaLabelForSelectAllCheckbox","checkButtonAriaLabel","onItemInvoked","NoItemsFound","SearchItems","IsOfficeJSAvailable","diagnostics","host","panelWidth","customNear","SearchFields","currentVal","getTextFromItem","UnconnectedDatasourceTagPicker","selectedTags","setSelectedTags","newSelectedTag","suggestionsHeaderText","Suggestions","NoResultsFound","TagPicker","tagList","suggestedTags","resultRow","propertyValue","tag","tags","tagName","compareTag","listContainsTagList","UnconnectedDatasourceTextTagPicker","onItemSelected","icon","left","right","memo","timeOptions","time","setTime","selectedDate","hours","hour","minutes","minute","setTimePart","selectedTime","setHours","render","Component","onChanged","submitPendingValueEvent","keyColumnInternalName","o","onSelectedItem","noresultsFoundText","genericNoResultsFoundText","showError","ListItemPickerSelectValue","_listItemRepo","ListItemRepository","componentDidMount","loadOptions","isInitialLoad","defaultSelectedItems","onInitialized","query","keyColumnName","getListItemsByFilterClause","listItems","opt","setState","availableOptions","componentWillReceiveProps","nextProps","ComboBox","autoComplete","comboBoxOptionStyles","allowFreeform","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","updateFileName","selectedFiles","isNameInput","isTitleInput","selectedIndexes","setSelectedIndexes","indexes","updateTextInput","getIsFileInfoPanelOpen","getIsMultiMetaFileUpdatePanelOpen","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","src","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","onSave","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","shift","_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","alignItems","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","actions","changes","change","addUploadedFile","deleteFilesByOriginalName","localeLang","accountUniqueId","uploadObject","setUploadObject","setIsInteraction","asyncSettings","setAsyncSettings","autoUpload","filesSuccess","setFilesSuccess","filesFail","setFilesFail","totalFiles","setTotalFiles","allFiles","setAllFiles","getDocubirdToken","saveUrl","removeUrl","displayLanguage","remove","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","isAttachment","rawFile","lastModified","getFilesData","existingFile","failure","clearing","multiple","handle","inputResult","FieldIsRequired","SuccessFull","BaseValidator","MaximumNumberExceeded","MinimumExceeded","isValidateUrl","InvalidUrl","profilePanelStyles","uploadPanelStyles","footer","settingsIconClass","themeDarkAlt","cursor","MsOverflowStyle","headerWrapper","detailRowStyles","selectors","detailRowLinkStyles","textDecoration","detailRowPiiDetectedStyles","borderBottom","detailRowPiiNotDetectedStyles","detailRowPiiDetectedStylesCM","detailRowPiiNotDetectedStylesCM","flexDirection","flexBasis","flexShrink","neutralLighter","borderRadius","getRTL","neutralSecondary","confirmDeleteButtonStyles","rootHovered","dropZoneStyles","borderWidth","borderStyle","borderColor","boxSizing","dropZoneStyleSets","dropzoneActive","pointerEvents","top","bottom","zIndex","dragZoneStyleSets","dragzoneActive","fileIconHeaderIcon","brandedCommandbarIconStyles","months","shortMonths","days","shortDays","goToToday","prevMonthAriaLabel","nextMonthAriaLabel","prevYearAriaLabel","nextYearAriaLabel","isRequiredErrorMessage","invalidInputErrorMessage","DayOfWeek","Sunday","LibsOrderBy","axiosRetryPost","localApiInstance","defaultsRaw","element","valueSection","mappedDefault","dayjs","trimEnd","formatEmptyValue","StringUtil","IsNullOrWhiteSpace","tmpName","SplitAndRemoveEmptyEntries","InvalidChars","TrimStart","InvalidStartString","trimStart","InvalidContain","invalidStartString_index_","invalidStartString_source_","InvalidStartStrings","invalidStartString","invalidName","charCodeAt","InvalidNames","getAllSlices","documentFileData","sliceIndex","sliceReadPromise","sliceResolve","sliceReject","getSliceAsync","asyncResult","status","AsyncResultStatus","Succeeded","closeAsync","sliceCount","getFilePreCommitCheck","getFolderPreCommitInfo","chunkSize","touchEnabled","commerceAllowed","getFileAsync","FileType","Compressed","sliceSize","fileData","fileBase64Content","onGotAllSlices","docdataSlices","fileContent","j","String","fromCharCode","btoa","h","isValidHook","getSubject","mailSendPayload","emailItem","normalizedSubject","getItems","autoSelectAttachments","attachments","itemAttachments","attachment","isInline","getExtension","attachmentsWithEmptyExtension","requestExtensions","extensionData","extData","mainMailItem","getLastSplittedStringItem","attachmentIdList","apiGetAttachmentExtension","serviceType","outlook","hostName","convertToRestId","MailboxEnums","RestVersion","v2_0","webAbsoluteUrl","_webAbsoluteUrl","getLibs","queryUrl","orderBy","encodeURIComponent","baseTemplate","filtered","includeHidden","Authorization","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","parse","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","splice","reverse","guid","Paths","fullPathParts","DefaultLabel","SiteUrl","DragMode","validateDroppedGridItems","isGrid","gridItem","homeItem","treeItem","dataTransfer","kind","gridDataTransferType","sourceDirectory","selectedGridItems","destinationDirectory","treeType","DirectoryTreeType","validateDroppedFiles","handleDroppedFiles","folderCreateEnabled","clear","filesToUpload","fileSystemEntries","fileSystemEntry","webkitGetAsEntry","traverseFileTree","itemCurrentDirectory","locations","getSharePointSite","sharePointSite","itemDetails","reorderData","onlyFiles","updatedFile","handleSelectedFiles","getFileToUpload","webkitRelativePath","fileFolderList","folderEntry","folderEntries","folderToUpload","getFolderToUpload","handleGridMove","destSerRelPathOverride","moveToOperation","Move","sourceSiteUrl","sourceServerRelPath","busyMovingFiles","isMoveInProgress","copyJobResults","isMoveComplete","isMoveCancelled","progressCountCompleted","progressCountTotal","setContentManagerMoveTo","destinationServerRelPath","serverRelativePath","isMoveMode","copyJobRequest","createCopyJobs","setContentManagerMoveToCopyJobResults","jobs","resetContentManagerMoveTo","setContentManagerMoveToError","resetGridItems","createFolders","parentUrl","foldersToUpload","folderSystemEntriesToUpload","folders","apiCreateFolders","uploadDroppedFiles","folderEntriesToUpload","fileEntries","fileSystemEntriesToUpload","fileEntry","fileSystemFile","FormData","apiUpload","fileSystemUploadResults","succeededFiles","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","val","lookupValue","getListItemCustomSelect","parentReference","getListFields","CategoryDisplayNames","savedToTeamsCategory","Teams","savedToSharePointCategory","savedToOneDriveCategory","masterCategoriesToAdd","getCallbackTokenAsync","isRest","getSharedPropertiesAsync","sharedProperties","targetRestUrl","targetMailbox","restUrl","userProfile","getMasterCategories","masterCategories","getAsync","addMasterCategories","categories","addAsync","ensureMasterCategoryExists","category","currentCategories","applyCategory","categoryType","getMessageUrl","Categories","FolderTypeEnum","teamChannel","sharepoint","oneDrive","axiosRetryPatch","getCategoriesToAssign","categoryToSet","setEWSItemCategory","ewsItemId","categoriesToAssign","ewsCategorySoapRequest","makeEwsRequestAsync","asyncRes","log","savingLocationStructureModule","savingLocations","savingLocationStructure","getSavingLocationStructure","addSavingLocationStructure","savingLocation","getUserSharePointBaseUrl","spBaseUrl","localStorage","getSharePointBaseUrl","getUserSharePointScope","getUserLicense","apiGetUserLicense","UserLicenseTypeEnum","Expired","getUserProfile","apiGetUserProfile","UserModule","lcidCode","lcidTable"],"sourceRoot":""}